2013年3月31日日曜日

git-catch-up 書いた



何これ?


ローカルブランチをfork元(upstream)の更新に追いつかせるスクリプトです。
pull request用にローカルでブランチ切って作業してる間に、fork元が更新しちゃったYOって時用のショートカットスクリプトです。
pull requestするまで」というエントリで書いた通りの、一連の手順を逐次実行するだけです。

使い方


githubから取得してください。
次に、git-coreディレクトリに配置します。(centOSなら/usr/libexec/git-core/)

git catch-up で実行されます。リモートリポジトリ名のデフォルトはupstreamになりますが、引数で変更できます。
git catch-up origin

コマンドは以下を実行するだけ


今のブランチがprotoだと仮定。
git stash
git checkout master
git pull upstream master
git checkout proto
git rebase master proto
git stash pop

感想


お手製感たっぷりだけど、自分としてはすごい楽になった。




2013年3月29日金曜日

undefでblessするとどうなるか



undefでblessすると、特にエラーにならずmainパッケージになります。



my $self = bless {} , undef;
warn ref $self ; #main



ってか、blessって



bless {};


でエラーにならないのか!

今日のPerl Beginnersで行ったライブコーディングで動かなかったのは、以下の$classがundefなせいでした。



sub new {
my $class; # shiftがない!
my $env = shift;
bless { env => $env }, $class;
}





2013年3月10日日曜日

Text::Xslateのエラー行数について



自分以外言ってる人を見たことがないのだけれど、なんか解決策あるのかな。


問題


macro,header,footerをテンプレートファイルに結合した状態での行数が報告されるので、
テンプレートの1行目で警告がでても、headerが3行あると4行目として報告される。


暫定対応


とりあえずmacro,headerの行数を数えて、その分引いてやろう。
マイナス値ならheaderかmacroに問題あるし、多ければfooterに問題がある。
んで、warn_handlerでメッセージ書き換え。


コード


pathは一つしか想定してないよ。
https://gist.github.com/tokubass/5129241


パースエラーには無力


die_handerを設定してもパースエラーは取れないので、Capture::Tiny 使うくらいしかないのかな。$SIG{__DIE__}でも取れるけど、ハマりそう。





2013年3月4日月曜日

pull requestするまで



1年前の放置下書き発掘


pull requestお作法


forkして、master以外からpull request


forkして、cloneして、ローカルにprotoブランチ作成


github上でforkする
git clone git://github.com/tokubass/yairc.git yancha
git checkout -b proto


作成したprotoブランチをリモートにpush


ショートカット用に名前をつける

git remote add tokubass git@github.com:tokubass/yairc.git
git remote -vでチェック


sshの設定をする

.ssh/configに、



Host github.com
User git
Hostname ssh.github.com
Port 443
IdentityFile ~/.ssh/id_dsa.github


pushしてprotoブランチ作成

git push tokubass proto


fork元の更新を自分のローカルmasterに反映


fork元リポジトリをupstreamという名前で登録
git remote add upstream git://github.com/hogeuser/hoge.git

git stash
git checkout master
git pull upstream master #間違えてprotoでやると面倒くさいことになった
git checkout proto
git rebase master proto
git stash pop # ここでコンフリクトしたら解決する


覚えられない


pull requestの度に下書き状態のこのエントリ読み返してた。
単純に順番に実行するだけのスクリプト書いたので、次エントリで。書いた



コミットをまとめる

git rebase -i HEAD~2
editorで、
pickup .....
fixup ......
とすると、pickupのほうにコミットがまとめられる。
rebaseを途中でやめるのは、git rebase --abort


ブランチ削除

git branch -d hoge
git push origin :hoge





2013年3月2日土曜日

webエンジニア2年振り返り



入社前


情報系の院を卒業後、F、H、N等で働く気にはなれず、2年弱、車の会社で働く。
とてもいい会社でしたが、やはり自分のやりたいこととは違うなと思うように、、、。
(院生時代に@masa_edw さんに、給料もらいながらプログラムできるとか最高だし、って言われたのがフラッシュバック)

将来は心配だけど、不景気でクビになったり病気して途中で辞めることになった場合、すごく後悔する。なぜかそれは確信めいたものがありました。

でも好き好き言うだけでプログラム書かない口だけ野郎の可能性もあるし、そんなことで今の安定した生活は捨てられない。
そこで勉強会に出てみたり、通勤時間で2ヶ月穴が開くくらいPerlベストプラクティス読んで、ブログにまとめたりしました。
ほんとはもっと長めにお試し期間を作ってたのだけど、我慢できずに転職活動開始。


転職活動


findjobでperlで検索。
画像でスーツが写ってる、パス。
1年でアプリ100本作ります!パス。

やっぱりブログやってる会社がいい。あとどうせやるならメッカ!東京さいくべ!
ライブドア? -> 経験者のみ。うぼぁー。
シーサーが未経験可!プログラム提出必須だったのも好印象。
社員のブログとツイッター監視開始w

結局他の会社の面接受ける前にシーサーに内定もらったので、他はお断りしました。
他の会社はECサイトが多かったイメージ。


Seesaaに入社


2011年2月末にseesaaにイン。


2011前半

入社してすぐにオープン直前のサービスにイン。え、社長が一人で作ったの。
webのことを知らないので社長にいろいろ聞きながら、そのまま現在までメインエンジニア。
printって書いてもエラーログに出ないぉ。というレベル。
半年でgit,perl,js,mysqlをそこそこ使える程度に学び、HTTP,WAFやテンプレートエンジンの概念を学ぶ。
ブログのインポートモジュール書くためにMTの仕様も読んだ。


2011後半

前述のサービスをやりつつ、メインサービスであるブログのリニューアルに関わる。

メイン人柱erとしてTTからxslateに書き換えてたけど、挫折。マクロがキツかった。(今は使える)
結局malaさん実装でオートエスケープできるようになったから、TTのままでいくことになった。
新規サービスではxslate使ってます。
このタイミングでpsgiも学ぶ。

他にも勉強になったことはあったけど割愛。


2012前半

フロント側が増えてきたので、本気でjsを学ぶ。有名どころのjs、jqueryオライリー本通勤時間に読破。
こっそりweb上で読書会やってて通りすがりの人に教えてもらったり。


2012後半

スマホアプリのAPI作成。nginx,MongoDBも学べたけど、初めての新規案件だったので実は知らなかった基礎知識が補完された。
これで持ってるサービスは2つ、で現在にいたる。機能追加とかやってます。


勉強会


勉強会は入社当時から平均月1で参加してると思う。
たしか@maka2_donzokoさん目当てでhachioji.pmに参加。そのまま居着く
perl beginnersにも定期的に参加して発表してます。
ISUCON2に参加して惨敗。ちなみに一番最初にブログ書いたけど載ってなかったぉ。



yancha

思いがけずここでAE、socket.ioが学べた。


iOSアプリ制作

アプリAPI作った関係でアプリ側も興味持ち始める。
ここ2ヶ月ほど通勤時間と土日でアップル公式マニュアルを読み漁る。大体作れるようになった。


今後


インフラ周りが弱い、弱いから強化は必須だけど、ここをメインにするつもりはない。
まとめたのを自分でみてしばらく考える。