だるろぐ

だるいぶろぐです

autojump入れた

  • autojump最新版はpython2.6を要する
  • prefix変えて2.6入れたけど、tagsに2.4対応版があったのでそっち使った
    • ただし大分古い。機能の違いは知らん


2.4しか入っていない状態(2.6が$PATHに無い)でinstall.shを叩くと以下のように言われるのでv12を入手。

Alternatively, you can download v12 that supports Python v2.4+ from:
https://github.com/joelthelion/autojump/tags

git submoduleにしようと思ったけど、install.zshを見て少々書き換えたくなったので直にzip持ってきて俺dotfilesに配置。
どこに置こうか悩んだ挙句 dotfiles/.opt/autojump_v12 とかいうパスに。ubuntuが確か /opt にoptionalなパッケージ入れるんだっけとか思って。
vundleみたいにそもそも ~/.vim のようにパッケージが属するのに適したディレクトリが無い(多分)ので、まあここでいいかと。


zshを使うと $fpath という環境変数が作られる。基本的にsudoが不要な場所にzshを入れて使っているけどそうじゃない環境もある。
fpathは /usr/local/share/zsh/site-functions みたいな場所。install.zshの中でここに_jをcpしているがさすがにsudoが要る。
自分一人だけの環境しか使わないならまだしも、そうはいかない場合も多々あるので、極力自分にしか影響が及ばないようにしたい。


さて。
まずはインストールのためのスクリプトを作る。setup_autojump.zshと名前を付ける。

cd .opt/autojump_v12/
_fpath=`echo $fpath | cut -d " " -f 1`
sudo cp _j $_fpath
mkdir -p ~/.autojump/share/man/man1
$SHELL ./install.zsh --prefix ~/.autojump

こんなのを /path/to/my/zsh ./setup_autojump.zsh で実行する。shだと $fpath が定義されない。
cdするのは後でそうしといたほうがいいため。
mkdirは後々使う。そして実行時に $SHELL がzshであることを期待する。さすがにそんくらい期待していいと思われる。
あと俺の場合は$HOMEにbinディレクトリが有る前提なので作ってないけど、無いなら作る。


んでinstall.zshを書き換える。fpathが絡むところ以外はsudoを除外する。

% diff org/install.zsh /path/to/my_dotfiles/.opt/autojump_v12/install.zsh
42,46c42,48
< sudo mkdir -p ${prefix}/share/autojump/
< sudo cp icon.png ${prefix}/share/autojump/
< sudo cp jumpapplet ${prefix}/bin/
< sudo cp autojump ${prefix}/bin/
< sudo cp autojump.1 ${prefix}/share/man/man1/
---
> mkdir -p ${prefix}/share/autojump/
> cp icon.png   ${prefix}/share/autojump/
> cp autojump.1 ${prefix}/share/man/man1/
>
> _pwd=`pwd`
> ln -s "${_pwd}/jumpapplet" $HOME/bin/
> ln -s "${_pwd}/autojump"   $HOME/bin/
<
< if [ -d "/etc/profile.d" ]; then
<     sudo cp autojump.zsh /etc/profile.d/
<     sudo cp autojump.sh /etc/profile.d/
<     echo "Remember to add the line"
<     echo "    source /etc/profile.d/autojump.zsh"
<     echo "or"
<     echo "    source /etc/profile"
<     echo "to your ~/.zshrc if it's not there already"
< else
<     echo "Your distribution does not have a /etc/profile.d directory, the default that we install one of the scripts to. Would you like us to copy it into your ~/.zshrc fil  to make it work? (If you have done this once before, delete the old version before doing it again.) [y/n]"
<     read ans
<     if [ ${#ans} -gt 0 ]; then
<       if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then
<           echo "" >> ~/.zshrc
<           echo "#autojump" >> ~/.zshrc
<           cat autojump.zsh >> ~/.zshrc
<       else
<           echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!"
<       fi
<     else
<           echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!"
<     fi
< fi

jumpstatとautojumpの2つのファイルをパスが通ったところに置こうとするので、symlinkで我慢していただく。
オリジナルのinstall.zshが、

  1. /etc/profile.d/ にファイルを置こうとする
  2. 置けるならよし。置けないなら「.zshrcでsourceしてね」という

となっている。/etc/とかにもの置いてほしくないので、.zshrcに "$HOME/.opt/autojump_v12/autojump.zsh" が存在すればそれをsourceする、ように書く。

load_if_exists () {
    if [ -e $1 ]; then
        source $1
    fi
}

load_if_exists "$HOME/.opt/autojump_v12/autojump.zsh"

あとは ln -s .opt ~/ などとする。


さてこれで j が使えるようになったわけだけど正直そんな便利だとまだ感じていなかったりする。
ああそれにしても人が見ても意味分からんなこれ。むしろ自分も分からん。
ソース見つつ書き換えつつ色々やるのはいいんだけど後からそれをまとめる能力が欠けている。
人に上手に説明できる人凄いよねー


まあ分からんくなっても https://github.com/hirafoo/dotfiles をcloneするだけで済むし俺は困らんので別にいい。
そして一通りsetupしたところでautojumpよりz.shのほうがPythonなしで動いて良いよ | この先生きのこるにはとか見つけて何ともいえなくなる。何使えばええんや。

vimが重い件の詳細のメモのようなもの

  • 重い環境、軽い環境ともos、vimのバージョンなどは同じ
  • centos5.*
  • vim 7.3
  • configure
--prefix=/usr/local/vim \
--enable-multibyte \
--enable-rubyinterp \
--enable-gpm \
--enable-cscope \
--with-features=huge \
--enable-fontset \
--disable-gui \
--without-x \
--disable-xim \
--enable-pythoninterp \
--enable-perlinterp
git clone git://github.com/hirafoo/dotfiles.git
cd dotfiles
./dotsetup.sh
git submodule update --init
vi
 :BundleInstall
  • filetypeがrubyなファイルを開く時点で重い
    • vim hoge.rb」と打ってからvimが開くまで長い
      • 1秒くらい待つ
      • 新規ファイルを開くのも重い
      • 新規ファイル・既存ファイルどちらを開くときも待つ時間は変わらない
    • 文字列を入力するだけで重い
      • 補完をしなくても重い
    • カーソル移動・/による検索は別に重くない
    • が、c-f/c-bで移動すると、やや引っかかる感じがする
  • 最初はacp.vimを削除してみたら軽くなったかもと思ったけど、勘違いレベルだった
  • ~/.vim 丸ごと削除しても重い
  • vim周りが同じ環境でも軽かったりする
  • ディストリビューションvimの設定・configure・dotfiles全部同じでも、ruby・gemを入れていないサーバでは軽かったりする。が、重かったりもする
    • gemが沢山入っていても関係ない?
    • let g:ruby_path = "" しても効果が無いのはどこでも同じ

vimでrubyのコードを編集するとき重かったら let g:ruby_path = "" とgem入れすぎとかを疑うとか後色々

いつからか分からないがvimrubyのコードを編集しようとすると異常に重くなっていた。
最初はこんな重くなかったんだけど気が付けばマジでコードを書くのに支障が出るくらい重くて重くて。
しかし原因がさっぱり分からないし調べられるほどvim力が強くないので致し方なく耐える日々が続いていたのだけど、ふとtwitterでぼやいてみたら、あることを教えていただいた。ありがとうございます。



全然知らなかった。
というわけでまずは .vimrc に let g:ruby_path = "" を追記すべし。
.vim/bundle とか plugin とかいじったりしたら軽くなったりするので、僕の環境ではプラグインが原因なのかなあと思いつつ。


周囲の人に聞いてみたら、同じようにvimrubyファイル開いたら重いわーって人が一人居たのだけど、これマイナーな問題なのか普通の人は出くわさないのか分からない。そしてその人からは「rubyの補完がそもそも重い」とか聞いた。
vim ruby 重い」でググっても全然同様の症状に悩んでる人が見つけられないのだけど、マイナーなのだろうか。emacsとかだと関係ないのかな?
あとgem 121個って最初は入れ過ぎかなーと思ったけど比較対象が無いのでこれも分からないけどまあいいか。
むしろモジュール入れ過ぎると重くなるのはそっちを何とかして欲しいきも。Moose入れたらvimperlのコード書くとき重くなりました!とか笑えんし。

エゴサーチ

という言葉をこないだ覚えた。

やってみた。

yahooオークションにハンドル被ってる人が居ることに今更気づいた。

別人です。

 

目に付くサービス全て取得とかしてないのでそらまあ有りえるのだけど。

地味に驚いた。

レプリケーションフローチャート

mysql40dumpを使おう。


始まり。

DBMSmysql

  • いいえ
    • 知るか。帰れ
  • はい
    • 下へ

mysqldのバージョンは4.0以上?

  • いいえ(=3.x以下)
    • mysql40dumpがサポートしてるかは知らんが、そんなもの使ってるお前は帰れ
  • はい
    • 下へ

テーブルのEngine(4.xならType)はInnoDB

  • はい
    • mysql40dumpで何も問題ないだろ、帰れそしてさっさとやれ
  • いいえ(=MyISAMが存在する)
    • 下へ

dumpしたバックアップが存在するか?

  • はい
    • 帰ってそれ使ってさっさとやれ
  • いいえ
    • 下へ

レプリケーションしたいDBに、そもそも既にslaveが存在するか?

  • いいえ
    • mysql40dumpでも無理だから、レプリケーションしたいDBを一時的に停止するしかない。帰ってそう伝えろ
  • はい
    • slaveで全てのテーブルで ALTER TABLE $table ENGINE=InnoDB; してからmysql40dumpだ

雑感

俺はコードを書くことができる。
が。

  • ログやmod_statusを頼りにサービスの状態を可視化することはできない
    • なのでサーバの状態、コードの改善すべき点などを発見できない
  • そもそもコードを書く土台を作れない
    • 物理サーバを調達したり買ったりスペック見たり商人とやりとりしたりできない
    • xenvmwareにも明るくない
  • ミドルウェアに明るくない
    • 今動いているものより性能のいいものを取り入れたりして負荷軽減やサーバ軽減などができない
    • デフォルトのconfigそのままで、各パラメータの細部まで把握していない
    • 何かしたいことがあったときにそれを実現できない
  • 障害が起こったときに即座にアタリをつけられない
    • 経験も知識も足りない
    • straceやtcpdumpとかを駆使して情報を得られない
  • perlしかできない
    • それも少々
    • 他の言語で作られたサービスに対応できない
  • というかそもそもお金を得るためにコードを書くところまでもってこれない
  • デザインもできない
  • 人をまとめられない
    • そもそも集められない
    • 議論を開けない
      • 人の意見を取り入れる・物事を進めることができない
  • そもそもコードもそんな書けない
    • 誰でも書ける程度のものしか書けない
      • 俺個人の能力に価値が無い
    • 居なくなっても影響が無い
      • 有るようならそもそもそんな状況が終わってる
    • 他の人より特化した能力が無い
  • 自分のみで何かを生み出すことが出来ない
  • lanを構築することが出来ない
  • メールサーバも構築できない
  • セキュリティに明るくない
  • 英語が出来ない
    • confのコメントが読めない
      • 読んでも正確に意味を読み取れない
    • 意思疎通が出来ない


飽きたので中断するけどこんな感じで出来ることはほんの一握りで、出来ない事のほうが圧倒的に多い。
出来ない事はもっともっとある。あれもこれも出来ないし知らない。一人ではほぼ何も出来ない。
というか一人で何でも出来る人なんてめったに居ない。居たらそいつ一人で会社起こして事業してればいい。そしてそれはとても難しい。
だから先のエントリのように会社に属して集団で仕事するんだよねー


というのを理解した上でそれでもぶん投げたい日々もある。だって(自粛)
あー元々こういう下らない事を書いていたんだったブログでは。