2013年振り返り

2013年をまとめ。

Perl

Perlを本格的に学び始めた。
はじめてのPerlを読みながら例題を解いて基礎を学び、一枚岩のスクリプトをガリガリとコーディング。
DBI使ってDBと連携、packageの作成、blessを使ったOOP、OrePANを使ったCPANのローカルミラー作成などもやった。
年末には、WAFについての知識を得る為、Plackハンドブックを読んだり、Amon2のソースを見たりしてた。
Perlを使ってると正規表現を駆使するので、自然と身について良かった。

2014年はCartonを使ったり、Amon2を使ってWebアプリケーションを作成したい。

Git

Gitを使ったことないことに危機感を覚えたので、新規プロジェクトでのソースコード管理をSubversionからGitに変更。
Pull Requestを使用したコードレビューも行いたかったので、GitLabも導入した。(GitHubは諸事情で不可)
ブランチの運用方法は、A successful Git branching modelを自プロジェクト用に変更した形態をとった。
Gitについてはメンバーが誰も使用したことがなかったので、調査や環境構築をしていた自分がアドバイザー役となった結果、今ではGitで戸惑うことは少なくなった。人に教えるって大事。

GitLab

昨年12月にGitLab 4.0をインストール。月一のアップデートは必ず対応し、現在動作しているバージョンはGitLab 6.4。
ユーザーは10人前後と少なめなせいか、特に大きな障害には見舞われず。
CentOS5系で運用しているので、アップデート時に色々問題が起きたりしてつらまったこともあった。(ブログネタが増えた―とも思ったけどw)
個人的にはIssueやMerge Requestがリナンバリングされるアップデートがきつかった。あれは無いわ―。
まぁ、今の所はそこまで不満はない。

その他技術系

  • Jenkins
    • CI環境を作りたかったので導入
    • 個人的には多機能すぎると感じてるので、もっと軽量なCIツールに変えようかなーと考え中
  • Docker
    • CentOS 6.5で使えるようになったので軽く試した
    • CIツールと組み合わせて色々出来そうな予感
  • HipChat
    • 社内のコミュニケーションツールとして導入
    • 以前まで使っていたメールと比べると、遥かにコミュニケーションコストが低くて良い

カンファレンス

今年はPerlCasual #05YAPC::Asia Tokyo 2013に参加。
新しい発見もあるし、いい感じに危機感も煽られるので、これからも定期的に参加しておきたい。
他の参加者とのコミュニケーションが不足してたので、積極的に交流しないとなー。

Blog

2013年は8記事を投稿。少ない。
他に有用な記事があると、書かなくてもいいか~となってしまいがち。
自分の考えを残しておくという意味でも、ちゃんと書き残しておきたい。

書籍

wanijiさんが2013年に読んだ作品 - ブクログ

技術書6冊、技術雑誌17冊、ラノベ6冊、合計29冊。
ちょっと技術書が少ないなぁと反省。
来年は月3冊、年36冊くらいを目標にする。

プライベート

  • 昨年9月に父親となったので、自由に使える時間が大幅に減少した
    • でも子供の成長を見るのは楽しい
  • あれだけ時間を費やしてたbeatmania IIDXをほぼやらなくなった
    • 新曲をたしなむ程度に続けるつもり
  • 隙間時間にできるiOSアプリをやるようになったけど、どれも飽きた
    • LINE POP
    • アルパカにいさん
    • ラブライブ!スクールアイドルフェスティバル
    • CROSS×BEATS
  • Cookie Clickerはもっと早く飽きた
    • あの盛り上がりは何だったのか
  • 子供が保育園に行き始めてから、体調を崩すことが多くなった
    • 自分の体の貧弱さに辟易

2014年の目標

現時点でやりたいなぁと思っていることを箇条書き。
ただ、方向転換が必要なら柔軟に対応するというスタンスなので、年始と年末でどれくらい考え方が変わっているか、というのも楽しみ。

  • Javascriptを勉強する
  • OSSに貢献
  • 英語力の向上
  • Blogを定期的に書く
  • 体重+5kg
  • Pocketの後で読む記事数が30以下
  • 書籍の読了数36冊

GitLab 6.4にアップデートする際、libv8のインストールに失敗する

環境

CentOS 5.6(32bit)
GitLab 6.3(アップデート前)

問題

GitLabを手順に従って6.4にアップデートすると、 bundle install時にlibv8のインストールエラーが発生する。

エラー内容

Installing libv8 (3.16.14.3)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /usr/local/bin/ruby extconf.rb
creating Makefile
Compiling v8 for ia32
Using python 2.4.3
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Using compiler: g++
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Traceback (most recent call last):
  File "build/gyp/gyp", line 15, in ?
    import gyp
  File "build/gyp/pylib/gyp/__init__.py", line 8, in ?
    import gyp.input
  File "build/gyp/pylib/gyp/input.py", line 14, in ?
    import gyp.common
  File "build/gyp/pylib/gyp/common.py", line 395
    with open(source_path) as source_file:
            ^
SyntaxError: invalid syntax
gmake: *** [out/Makefile.ia32] エラー 1
/home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3/ext/libv8/location.rb:36:in `block in verify_installation!': libv8 did not install properly, expected binary v8 archive '/home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3/vendor/v8/out/ia32.release/obj.target/tools/gyp/libv8_base.a'to exist, but it was not found (Libv8::Location::Vendor::ArchiveNotFound)
        from /home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `each'
        from /home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `verify_installation!'
        from /home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3/ext/libv8/location.rb:26:in `install!'
        from extconf.rb:7:in `<main>'
GYP_GENERATORS=make \
        build/gyp/gyp --generator-output="out" build/all.gyp \
                      -Ibuild/standalone.gypi --depth=. \
                      -Dv8_target_arch=ia32 \
                      -S.ia32  -Dv8_enable_backtrace=1 -Dv8_can_use_vfp2_instructions=true -Darm_fpu=vfpv2 -Dv8_can_use_vfp3_instructions=true -Darm_fpu=vfpv3

Gem files will remain installed in /home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3 for inspection.
Results logged to /home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/libv8-3.16.14.3/ext/libv8/gem_make.out
An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.
Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling.

原因

libv8をインストールする場合、通常はバイナリ版を対象とするが、バイナリ版は64bit版しか用意されていない
なので、ソースコードからのコンパイルとなるが、CentOS 5.8にデフォルトでインストールされているgccpythonのバージョンが古い為、コンパイルエラーとなってしまう。

必要となるgccpythonのバージョン

対応手順

gcc 4.4のインストール

sudo yum install gcc44-c++

pyhon 2.6のインストール(epelリポジトリが必要)

sudo yum install python26

このままだとデフォルトで入っているpython 2.4が使われてしまうので、gitユーザーだけ2.6が使われるように設定

mkdir ~/bin
ln -s /usr/bin/python2.6 ~/bin/python
echo 'export PATH=~/bin:$PATH' >> ~/.bashrc

再度 bundle install

cd ~/gitlab

# MySQL
sudo -u git -H bundle install --without development test postgres --deployment

# PostgreSQL
sudo -u git -H bundle install --without development test mysql --deployment

後は公式アップデート手順の通りに実行でOK

その他

上記手順でpython2.6へのリンクを削除していないが、GitLabが使用しているlibv8のバージョンが上がったら問題が再発するので、残していたほうが良さげ。

参考にさせて頂いた記事

YAPC::Asia Tokyo 2013 の1日目に参加してきた

f:id:waniji:20130920095442j:plain

YAPC::Asia Tokyo 2013に参加してきました。YAPC初参加!
予定があったので1日目しか参加できませんでしたが、それでも楽しむことが出来ました。
運営、スタッフ、スピーカーの皆様、ありがとうございます。

参加したセッションの感想や自分メモなどをつらつらと書いていこうと思います。

今時のカジュアルなデータベース関連開発

DBIx::Schema::DSLとGitDDLがとても良さそう。
シンタックスチェックが楽な点とDRYに書ける点は大きなメリットですね。
ブランチ切り替えた後のDB構成変更は非常に手間なので(schemaに紐付くオブジェクト全DROP&CREATEとかしてた)、GitDDLは導入してみる価値ありそうだなーと感じます。

Redisは使ったことないですが、同率問題が微妙だなーと書籍を読んでいて思っていたので、どのように解決しているか興味あります。後でソースを読もう。

ランチセッション

f:id:waniji:20130920121419j:plain

美味しいお弁当を頂きました。

Windows Azureのお話を聞いたのですが、これがかなり良さげで、調べもせずにAWS一択だよなーと思っていたのを考え直さなきゃいけないですね……。

Inside amon2-livedoor-setup.pl with web application development 2013

使う道具を揃えることの重要性は、私も常々感じています。知見が共有出来ないのはその通りだし、一部の人しか知らないとリスク高いですし。
コピペプログラミング嫌うくせに他のプロジェクトからコピペするっていうのは、かなりグサッと来ますね……。
知らない設定があって、そこに問題が起きた時に説明が出来ないっていうのも……ウッ。

はてなのサーバ管理ツールの話

RRDToolのグラフが昭和っぽいという発言に笑いました。
いろんなツール使って情報がとっちらかるというのは確かにありがち。
運用周りは業務の課題としてあがってるので、もうちょっと勉強しないとなー…。
予測グラフ欲しいですよね。とてもやりたい。

Lightning Talks Day 1

ショートコントやキンブレが出てきた時点で何でもアリだということを悟りました。
メモを取ることを忘れてたのであまり覚えていませんが、んだっちゃだれという方言だけは覚えています。

その他

f:id:waniji:20130926221711j:plain

「雅なPerl」が頒布されてたので購入。やった!

f:id:waniji:20130926233813j:plain

スカイアークさんのトートバッグ。かわいい。

CentOS5系でGitLab5.2にアップデートするとbundle installでこける

環境

CentOS 5.6
GitLab 5.1 (アップデート前)

問題

GitLabのバージョンを5.1から5.2にアップデートすると、
bundle install時にcharlock_holmsのインストールエラーが発生する。

原因

CentOS5系の標準リポジトリで提供されているICUは3.6だが、
GitLab 5.2が使用するcharlock_holms 0.6.9.4が要求するICUは4.2以降なので、
bundle install時にエラーが発生した。

何故GitLab5.2で発生したか

charlock_holms 0.6.9.3から、ICU 4.2で組み込まれたStringByteSinkを使うようになった。
GitLab 5.1ではcharlock_holms 0.6.9を使用していたが、
GitLab 5.2からcharlock_holms 0.6.9.4を使用するようになったので、
今回のアップデート時に問題が発生した。

対応

古いICUを削除

sudo yum remove libicu

StringByteSinkが組み込まれたICUのソースを取得し展開

cd /tmp
wget http://download.icu-project.org/files/icu4c/4.2.1/icu4c-4_2_1-src.tgz
tar xvf icu4c-4_2_1-src.tgz

コンパイルしてインストール

cd icu/source
./configure
make
sudo make install

後はbundle installして、エラー無くインストールされることを確認

bundle install --without development test postgres --deployment

リモートからJenkinsのジョブが実行中であるか確認する

ジョブがキュー内に存在するか確認する

以下のURLにアクセスしてジョブの情報を取得する。

http://JENKINS_URL/job/JOBNAME/api/json

取得したjsonにinQueueという要素があり、値がtrueであればキュー内にジョブが存在する。

実行中か確認する

以下のURLにアクセスしてジョブの情報を取得する。

http://JENKINS_URL/job/JOBNAME/api/json

lastBuildとlastCompletedBuildのnumber要素の値が異なれば、ジョブが実行中である。

isBuildみたいな要素があると良いなーと思ってます。

もうすぐ春だからPerlCasual#05に行ってきた

f:id:waniji:20130329195759j:plain

PerlCasual#05に行ってきました。

PerlCasual #05 : ATND

スーツで行ったので門前払いされるかとびくびくしていましたが、門番の方に通して頂けて安心しました。

個性的な登壇者の方々のお話を聞いて、Perl初心者が思ったことなど書き連ねようと思います。

何個か作っていれば、慣れる!

@ruikさんのスライドに出てきた言葉なのですが、悩める人達を励ますとてもいい言葉だと思います。
stfuawscをマイルドにした感じですかね。

初心者の私は、

  • 何が良い書き方なんだろう…
  • このモジュール使ってていいのかな…
  • こんな書き方をすると椅子が飛んでくるんじゃ…

ということをうだうだ考えたりして、コードを書く手が止まったり、モチベーションが下がってしまったりします。

もちろん試行錯誤することは大事ですが、囚われ過ぎるのはとても良くない。
それであれば、とりあえず突き進み後で後悔すれば良いんだなと思います。
最初からパーフェクトに出来る人はいませんし、以前した失敗を次に生かしていけば、おのずと洗練されていくはずです。

モチベーションは有限

モチベーションが有限っていうのは本当にその通りで、最初に持った熱は時間とともに冷めていっちゃいます。

  • ミニマルスタートでまず動くものを by @koba04さん
  • 仲間を作ってカジュアルに楽しむ by @uzullaさん

上記の提言がありましたが、とても有効な策だと思います。

ライブコーディング

今回参加して一番面白いと感じたのはこのセッションです。

エディタをどのように使いこなし、エラーが出たらどのように確認し、どういったコードを書くのかをリアルタイムで見れる機会はそうそう無いし、ましてや一緒に仕事が出来ない社外の人となればとても貴重だと思います。

Live Coding Casualが今後開催されるなら、是非参加してみたいです。(閲覧者として)

Perl界隈には面白い人たちが集まっている

おっぱいやからあげなどが出てくる個性的なLTの後に真面目なLTがあったりとカオスでしたが、とても楽しい時間を過ごすことが出来ました。

主催者の@yusukebeさん、登壇者の方々、運営者の方々、会場を提供して頂いたNHN Japanさん、ありがとうございました!