2013/10/06

MTDDC Meetup HOKKAIDO 2013 に参加しました #mtddc

10月5日のMTDDC Meetup HOKKAIDOと翌日のHackathonに参加してきました。 非常に盛況で、予想よりも賑わってたのが印象的です。

ノベルティにMONA+SKという函館のお菓子が入ってて、これが結構美味しかったです。

さらにはじゃんけん大会でMovableType Tシャツをゲットできたので非常に満足度の高いイベントでした。

Hackathon

今回のHackathonではVagrantfileを含んだMTOSのアプリケーション環境丸ごとのchef cookbookを公開しました。
cookbook-movabletype-opensource-standalone

これは5ヶ月ほど前に作成したVagrantとchefのcookbookをブラッシュアップしたものです。
先にMTOSだけのcookbookは公開していましたが、Vagrantfileとその他のcookbookの設定等は含まれていませんでした。

今回は丸ごと配布なので、githubからcloneしてきてvagrant up --provisionを実行すると以下のような環境が作成されます。

  • CentOS 6.4
  • Perl 5.16.3
  • Nginx
  • MySQL

この環境はSkyarcさんのエンジニアブログの記事を元にしております。
デザイナー必見!VPSで高速なMovable Type用サーバをゼロから構築する方法

公開するに当たって、以前のバージョンに以下の作業を行ってます。

  • Vagrantfileをversion 2にアップデート
  • cookbookの管理をBerkshelfに移行

環境丸ごとのcookbookを公開しているのでVagrantでローカルに環境を作成するだけではなく、AWSのEC2上やWindows Azure、その他任意の場所のLinuxサーバにも簡単に環境を作れることになります。

2013/10/05

Vagrant + Chef Solo + Berksfileでのアプリケーション環境の作業手順

仕様変更だったり、ディレクトリ配置等が色々あるので自分の流儀を決める

Chef, Vagrantのインストール

chef関連ツールをインストール

> gem install chef knife-solo berkshelf

Vagrantはgemで入れると古いので公式サイトからパッケージでインストールする

Vagrant Pluginをインストール

> vagrant plugin install vagrant-berkshelf vagrant-vbox-snapshot

アプリケーションの雛形の作成

一番最初の雛形はknife soloで作成するのが無難

> knfie solo init foo

berksでBerksfile, Gemfile, Vagrantfileの雛形を生成する。gitの初期化もしてく
れる。既存ファイルを上書きするか聞かれるので"a"を押して、全部上書きする。

> berks init foo

cookbookの雛形を作成しておく

> knife cookbook create MyApp -o site-cookbooks

gitに突っ込んでおく

> git add -f * .chef/ .gitignore
> git commit

.chef/knife.rbにknife solo実行時のcookbook, role, node等のpathが入っているの
でこれは必須ファイル。このファイルがなくてハマることが多い

Vagrantの設定

いい感じに設定して、provisionをoffでとりあえず立ち上げる

> vagrant up --no-provision

chef soloの開発やsshで簡単に接続できるようにssh-configを書きだしておく。 この時ホスト名を分かりやすいものに置換しておくと良い

> vagrant ssh-config | sed 's/default/HOSTNAME/' >> ~/.ssh/config

置き換えたホスト名で接続確認

> ssh HOSTNAME

Chef SoloをVM側に容易

> knife solo prepare HOSTNAME

VMのスナップショットを作成

今後すぐに初期状態に戻せるようにスナップショットを作成しておく

> vagrant snapshot take chef-ready

Berksfileを更新

cookbook用のbundler。これから自分が書くcookbookの依存ファイルを追加する

> cat Berksfile
site :opscode

cookbook "yum"
cookbook "database"
cookbook "mysql"
cookbook "nginx"
cookbook "simple_iptables"
cookbook "openssl"

Cookbookを修正

好きなようにsite-cookbooks/MyApp/以下を修正していく

chef soloを実行

ある程度できたらVMにchefを適用する。

> knife solo cook HOSTNAME -V | tee install-log

-Vを付けて詳細なログを出す。長いのでinstall-logにも書きだしておく。 後はトライアンドエラーで徐々に修正していく

繰り返しすぎてよくわからなくなったりしたら、スナップショットの状態に戻して再度試す

> vagrant snapshot go chef-ready

完成

最終的にいい感じに仕上がったら、vagrantコマンドで一発で入るか確認する

> vagrant destroy
> vagrant up --provision

2013/09/22

YAPC::Asia 2013と今後のHokkaido.pmの活動について

YAPC::Asia 2013

今年もYAPC::Asiaに行ってきました。スタッフの皆さまのおかげで、非常に楽しい二日間を過ごせました。スタッフの皆さま、ありがとうございます!

普段お世話になっている方への挨拶や次回以降のHokkaido.pmでゲストとして招待したい人とコンタクトを取ることができたので、非常に満足しています。今回は前回よりも中々いい感じにいろんな人に会えた気がします。

今年は私事が色々と重なり、年内の予定が不明瞭だったためスピーカーには応募できませんでした。またスピーカーに応募したい思っていますが、次回のYAPC::Asiaの開催は不明ということで、とりあえずアウトプットを増やしつつ機会を待とうかなと思います。

今後のHokkaido.pm

次回のHokkaido.pmは1月後半から2月頃になるんではないでしょうか。もしかすると12月あたりにもあるかもしれません。

何人かに言われたので、そろそろUstをどうにかしたいところです。Ustがあれば遠方の方からも反応をもらえるのというメリットがありますし、土日に参加できない人が一定数いるようなので、そういった方にもフレンドリーかなと。また、先週札幌で行われたオープンソースカンファレンスでもHokkaido.pm Casualの空気感がわからず参加しにくいという話も聞きました。ブログ等での開催報告をもう少し頑張るというのももちろんですが、Ustも空気感を伝える手段の一つにもなるのかなと考えています。何か手頃なUSB接続のカメラを探したいと思います。

2013/09/03

Hokkaido.pm#10 を開催しました #hokkaidopm

8/31(土)に札幌市産業振興センターでHokkaido.pm#10を開催しました。
今回はJPA様の支援でゲストに@tokuhiromさんをおよびしてお話しして頂きましたありがとうございます。
さらにTengの中の人である@nekokakさんやPerl Beginners主催の@ytnobodyさん、mod_perl大好きな@xtetsujiにもお越しいただき大変豪華は顔ぶれとなりました。
皆様、まことにありがとうございます。

春から夏にかけて時間が取れなかったので前回の開催から半年程度間が開いてしまいました。
物足りない方は毎月第3水曜日開催のHokkaido.pm Casualに参加していただけると良いのではないでしょうか。
次回の開催日はまだ決まっていませんが半年に一度は開催したいと思っております。
ゲストの目星はある程度つけてありますので、9月のYAPC::Asiaで何人かにアプローチしたいと思います。

イベントのレポートはHokkaido.pm#10 開催報告を御覧ください。

LT - Asset Pipeline for Perl

今回はLTで『Asset Pipeline for Perl』という発表をしました。Railsについてるあの機能の一部をPlack::Middlewareとして実装したものです。
CoffeeScriptは私が使わないので対応していませんし、javascript_include_tagも未実装です。
もう少ししたら『GitHub止まりモジュール』から格上げされてCPANにアップロードするかもしれません。

2013/08/11

Movable Type Open SourceのChef recipeを更新

MTCafe Sapporo#3に参加したので、Movable Type Open Sourceのchef recipeを修正しました。
このrecipeはスカイアーク技術ブログに掲載されていた「デザイナー必見!VPSで高速なMovable Type用サーバをゼロから構築する方法」を自動化したものです。

https://github.com/ysasaki/cookbook-movabletype-opensource

主な変更点

  • git checkout時のreference(revision)をmasterからmt5.2.7に変更
  • perl-5.16.3のinstallをrootユーザに変更
  • htdocのmv時にonly_ifを追加し、ディレクトリがあるか確認を追加

git checkoutはとrevisionを指定しないとHEADになってしまうので、しっかり指定しないと後々面倒なことになる。

MTCafe Sapporo#3の感想

ハンズオンということでchef recipeを修正しつつ、簡単なMTMLを書いてた。
MTOSのソースコードは読んでたりするが、実は今までMTMLを書いたことがなかった。
Vimのpluginはなさそうなことを某S社の方が言っていたので、そこはちょっと残念。zen codingで書くしかないようだ。

タグについても色々と歴史的な事情があるのか自由な感じ。
mt:EntryTitleのようなタグのコロンを抜かせたり、case-insensitiveだったりする。
開始と終了タグが一致していればいいらしい。

テンプレートをコピペで管理画面上から貼り付けるのが面倒だったが、後で聞くとFTPでアップロードしたファイルに紐付けするような機能もあるらしい。

2013/07/18

daemontoolsのenvdirだけ欲しかったからEnvDir書いた

やっぱりenvdirしたかったので、作りかけだったのをちゃんと実装した。

俺得モジュールです。

使い方

    use strict;
    use warnings;

    # environment from /path/to/envdir/*
    use EnvDir -autoload => '/path/to/envdir', -clean;

-cleanを付けると本家のenvdir同様に%ENVをクリア(PATHのみは/bin:/usr/binになる)して、指定したdirのファイルから%ENVに色々セットします。
envdirをimportするか、OOスタイルで使うとガードオブジェクトが返ってきてスコープを抜けると元の%ENVに戻る

    use strict;
    use warnings;

    # import envdir function
    use EnvDir 'envdir', -clean;

    # Function style
    {
        my $guard = envdir('/path/to/envdir');
        ...
    }

    # OO style
    my $envdir = EnvDir->new( clean => 1 );
    {
        my $guard = $envdir->envdir('/path/to/envdir');
        ...
    }

envdir.plコマンドを添付しているので本家envdirと同じようにも使える

    > envdir.pl ./env sh -c 'echo $PATH'

2013/06/29

plenv installから--asが消えたのでperl-buildを直接使う

追記 2013/06/29 09:09

@tokuhiromさんにコメントでご指摘頂きましたところ、8日前にperl-build側で実装されたそうです。
githubにあるperl-buildのHEADを利用すると使えるようになります。


plenvの中身がperlからbashに変更された際に消えたようです。
バージョンはplenv 2.0.1-7-ge389af0

違うバージョンのperlを一つずつinstallする分には困りませんが、同じバージョンでコンパイルオプションを変更したものをinstallしようとすると「もうそのバージョンあるから!」とinstallを拒否されます。

ざっくりと見たところplenvは~/.plenv/versions以下にbuildしたperlを保存してます。

    > ls -1 ~/.plenv/versions/
    5.16.2
    5.16.3
    5.18.0

場所が分かれば後は、perl-buildで直接installしてやると大体うまく行きそうです。

    > perl-build 5.18.0 ~/.plenv/versions/5.18-ithreads -Duseithreads

無事installが終わるとこんな感じになるので、後はplenv global 5.18-ithreads等の通常の方法で切り替えることが出来ます。

    > plenv versions
      system
      5.16.2
      5.16.3
      5.18-ithreads
    * 5.18.0 (set by PLENV_VERSION environment variable)

公式に説明があるわけではないので自己責任で行ってください。

2013/06/17

Travis CIでbuild失敗時にエラーメッセージを確認する方法

ビルドに失敗した時に~/.cpanm/build.logを見たいことがあるので、以下の二つを最初から設定しておくと便利

  • install
  • after_failure

.travis.yml全体だとこんな感じ

    language: perl
    perl:
      - 5.10
      - 5.12
      - 5.14
      - 5.16
    install:
      - "cpanm --installdeps --notest . || cat ~/.cpanm/build.log"
    after_failure: 
      - "cat ~/.cpanm/build.log"

before_script, script等の各コマンドを上書きして全部に|| cat /path/to/logみたいなのを付けてる人もいた

2013/06/12

Windows環境でVagrant/Chef Solo環境を構築するメモ(2013-06-14更新)

Windows XP上で構築
  • Vagrantはgemから入れるとちょっと古いので公式にあるインストーラを利用する
  • Rubyの環境はMingw + Msys + RubyInstaller for Windows
  • gitが使えないと不便なのでmsysgitも入れる

手順

  1. VirtualBoxをインストール
  2. Vagrantをインストール
  3. ディレクトリ C:\Mingw\msys\1.0 を作成
    • 多分途中にスペースをを含まないほうがいい
  4. 3で作成したディレクトリにmsysgitを展開
  5. Mingw/Msysのインストール
    1. mingw-get-instの最新版をDL
    2. C:\Mingwに展開
  6. Rubyのインストール
    1. RubyInstaller for Windowsから7z版のruby-2.0.0-p195をダウンロード
    2. 7zを適当な場所に展開する(一時的な展開先なのでどこでもよい)
    3. 展開してできた ruby-2.0.0-p195-i386-mingw32 の中身を全部 C:\Mingw\msys\1.0\local に移動
  7. cmd.exeの代わりに使うckw-modをインストールする

    1. ckw-modを適当な場所に展開(一時的なものではないのでMy Documents\Applications\ckwとかに入れること)
    2. ckw.cfgのCkw*execを以下のように編集

      Ckw*exec: "C:\Mingw\msys\1.0\bin\sh.exe" --login -i

  8. ckw.exeを起動してMsysのshellに入る

  9. ~/.inputrcを編集してshell上で日本語が使えるようにする。設定項目は以下のような感じ

    # disable/enable 8bit input
    set meta-flag on
    set input-meta on
    set output-meta on
    set convert-meta off
    set kanji-code utf8
    
  10. ~/.bash_profileを修正してrubyをPATHに追加する

    export PATH="$PATH:/c/Mingw/msys/1.0/local/bin"
    
  11. vagrantが使用するVBoxManage.exeへのPATHが通っているか確認する。通っていない場合はPATHに追加しておくこと

    $ which VBoxManage
    /c/Program Files/Oracle/VirtualBox/VBoxManage.exe
    
  12. Rubyのnative拡張が必要な諸々を再インストール

    $ gem uninstall ffi win32-api yajl-ruby
    $ gem install ffi win32-api yajl-ruby --platform=ruby
    
  13. Chef関連をインストール

    $ gem install chef knife-solo --platform=ruby
    

これでknife configureを実行してみてエラーが出なければ多分OK

2013/05/20

MTCafe Sapporo#2とSapporo.js

5/18にMTCafe Sapporo#2と5/19にSapporo.jsに参加したので、その記録をざっくりと。

MTCafe Sapporo#2

Perl繋がりということでお邪魔しました。
ゆるふわな空気の中、Chef SoloによるMTOS環境の構築をテーマにひとりHackathonを敢行しました。
作成したMovable TypeのOpenSource版のcookbookは以下です。 ysasaki/cookbook-movabletype-opensource

自動化を思い立ったきっかけはちょっと前に公開されたデザイナー必見!VPSで高速なMovable Type用サーバをゼロから構築する方法です。
明らかにデザイナーには大変そうなので、Chef Soloで簡単に環境を構築できれば楽ができるだろうと考えた次第です。
前日からnaoyaさんの入門Chef Solo - Infrastructure as Codeを読みながら書き進めましたが、当日には完成しなかったのが残念です。

まだ未完成ですが、現在は以下の構成で動作するところまで来ています。

  • Reverse Proxy - Nginx
  • Database - MySQL
  • PSGI Server - Starman

今後もChefの勉強も兼ねて手直ししていく予定です。次回のMTCafeには間に合わせたいなーと考えています。

TODO

  • 依存cookbookの指定を追加
  • Daemontoolsに対応するか検討する。Upstartを使うのも良さそう
  • Memcached対応
  • NginxのReverse Proxy対応をオプショナルなrecipeに変更
  • ApacheをReverse Proxyに使うrecipeの追加
  • さくらVPS等での動作確認

Sapporo.js

久しぶりのSapporo.jsということで東区民センターまで出向きました。

@tricknotesさんのember.jsの紹介、@y_jonoさんのJavaScriptでの非同期処理のプラクティス的なお話を聞いた後に、恒例のJavaScript: The Good Partsの読み合わせを行いました。

ember.jsの紹介

  • 公式のガイドがよく出来ている
  • 他のMVCと比べてemberは不必要なコードが少ない
  • Good Partsでは推奨されていないやり方をしているが、他所は他所、うちはうちと考えよ
  • ember.jsをterminalから使えるember term
  • Modelの変更とかの自動で感知する
  • テンプレートはhandlebars
  • EMBERCAST
    • 動画で紹介
    • これ自体もemberを使っていて、ソースコードがgithubで公開されている
  • 気に入らないところ
    • 動かないときに完全に沈黙することがある
    • debuggerとかで対応
    • コーディングの効率を上げるためにprototypeを拡張するけど、オプションで拡張しないようにもできる
  • サーバとのやり取りはemberjs/dataがあるけど、まだまだ使える段階ではない
    • ember-modelが良さげ?

Concurrent Programming in JavaScript

  • サイ本の第6版にスレッド関連がある
  • callbackスタイル
  • setTimeout
    • UIのブロックを防ぐため、適当なdelayを付けてsetTimeoutで後回しにする
  • Web Workers
    • 意図した動作にならなかったり、初期化処理に時間がかかったりする場合があるので使う前に実装を確かめよう
  • nodeスタイル(async.series)
  • Promise/A+
  • Promiseって書き方がいけてなくね?
    • Flow.js
    • task.js
  • Effective JavaScriptがいい本

読み合わせ

1ページちょっとしか進みませんでしたので、まだまだ読み合わせは続きそうです。
次回はP.103のstring.matchからです。

2013/03/21

Hokkaido.pm Casual#11に行って来ました

今回でHokkaido.pm Casualは第1シーズンが終了となります。
次回から第2シーズンになりますが、特に内容は決まっていません。WAF, ORMあたりは一度は触れるんじゃないかと思います。
後は@techno_nekoさんが適宜考えながらやって行くはずです。

今日の発表内容

第11回目のテーマはリクエスト特集ということでしたが、特にリクエストもなかったので今まで紹介できなかったけど知っていると嬉しいモジュールとして以下を紹介しました

Synopsisを見たほうが早いですが、スライドはこちらです。
一応例に使用したgithubにpushしてありますので、確認したかたはこちらからどうぞ

2013/03/16

LINEで勝手に他人のメールアドレスを登録できる件 (追記あり)#LINE

追記 2013/03/18 12:05

LINEカスタマーサポートから返信をいただきました。 対応が遅れたことを謝罪していただいた上で、再度12時間有効な登録拒否メールを送信するとのことでした。

そのメールの直後に登録拒否メールが来ましたので、記載のリンクから無事登録拒否できました。アプリからパスワード再発行しても特に音沙汰がないことから、恐らく削除されているかとおもいます。

登録フローの変更については現在対応を検討中とのことです。

メールアドレスを間違って登録すると、登録した人、された人の両方が不利益を被るので是非とも変更していただきたいところです。

追記ここまで


メールアドレス登録フローが腐っているため、勝手に他人のメールアドレスを利用することができます。

一般的なサービス利用時のメールアドレス登録のフローは以下になります。

  1. メールアドレスをアプリから仮登録
  2. メールアドレスの有効性と本人確認のた、セッション付きリンクを記載したメールを送信
  3. メールアドレス所有者がリンクをクリックしてメールアドレスの登録完了

メールアドレスの所有者による確認が入るため、基本的に他人のメールアドレスは使えないように配慮されています。

しかしLINEの場合は一般的なフローと異なり以下のようになっています。

  1. メールアドレスをアプリから入力した時点で登録完了
  2. 入力したメールアドレスに登録を拒否するリンク(有効時間12時間)を記載したメールを送信

12時間以内に拒否しない場合、今後登録を拒否することはできません。
勝手に登録されたくない人は12時間に1度メールボックスを確認する必要があります。
また、line@naver.jpからのメールを迷惑メールに入らないようフィルタの設定を忘れないでください。

今回の私のケースでは普段使っていないicloud.comのメールアドレスが勝手に使われました。
icloud.comは複数回パスワード入力に失敗した場合アカウントがロックされ、メールを受信できなくなります。普段使っていないので後でロックを解除すればいいと放置していると、このように勝手に使用されることになります。
ロック解除に手間取るようなサービスの場合、故意にパスワード入力をミスすることでメールアドレスの乗っ取りがしやすくなるかもしれません。

LINEのWindows用アプリとiPhoneアプリを確認しましたが、どちらもメールアドレスの登録解除はできません。
iPhoneアプリからパスワードリセットのみ可能でしたが、勝手に他人のLINEアカウントを問題がありそうなため、まだそのアカウントにログインはしていません。

念のためカスタマーサポートに問い合わせましたが、自動返信がくるのみで対応してくれません。 LINEの中の人用に私の問い合わせ受付番号を載せておきます

  • 受付番号:859194
  • 受付番号:852220
  • 受付番号:846368
  • 受付番号:847236

2013/03/14

Hokkaido.pm#9を開催しました

報告が遅れましたが、3/9(土)に無事開催しました。
参加者のみなさん、講師のxaicronさん、悪天候の中ありがとうざいました。
詳しい内容は公式ブログのHokkaido.pm#9 開催報告を御覧ください。

個人的には@shinotraさんのATNDのAPIでWebサービスを作った話がすこぶる良かったです。
最初はLTでの申し込みだったのですが、無理を言って20分やっていただいて正解でした。
今後もshinotraさんのようにCasualで釣って、本体に参加してくれる人が増えるとよいですね。

自分の発表について

今回はPerl版Gemfileのcpanfileについてざっくりと説明しました。
開催直前にcpanfileに対応したcartonがリリースされたので、ちょうどよいタイミングでした。

Perl自体とCPANモジュールについては互換性の維持に相当力をいれていますので、Makefile.PLでの指定でもそれほど問題はありませんでしたが、これでカッチリとした指定がやろうと思えば簡単にできるようになったのは大きいです。

個人的に一番大きなメリットはgitリポジトリを直接指定できることかと思います。この機能自体はどちらかと言うとcpanmによるものですが。
社内やgithubにおいておけば簡単に自社アプリケーションで利用できるので、わざわざDarkPANを立てなくてもよくなります。勤務先にも自社ライブラリをOrePANを立てて利用していますが、gitに移行してOrePANを止めないと考えています。

今回のスライドを貼っておきます。

今後の開催について

今回から開催者は持ち回りでやってみないかと言う事で、とりあえず私がメインで色々担当しました。
次回は誰が開催するのか決まってませんが、多分他にいなそうなので私がやるんじゃないかなと思います。

@techno_nekoさんが毎月Hokkaido.pm Casualを開催していますので、Hokkaido.pm本体の方は年3回(3,7,11月とか)くらいの頻度でやるんじゃないでしょうか。

JPA様の講師派遣制度には毎度お世話になっております。ありがとうございます。次回も恐らく利用するかと思います。
毎回開催前に誰にしようかという話になりますので、5月頃に「自分、Perl Mongerなんだけど、夏の北海道いいよねー」とアッピールしてもらえるとこちらも呼びやすいところであります。