チラシの裏の書き置き

技術的な話をするブログのタイトルじゃない気がする

YAPC::Asia Tokyo 2015(1日目)に行ってきた #yapcasia

(2015/08/24:世界展開する大規模ウェブサービスのデプロイを支える技術のスライドが公開されたので追加しました。)

初参加です。 毎年行こう行こうと思って忘れていたのですが、今年はチケット発売にすぐ気付けたので即座に購入しました。

噂によるとブログに書くまでがYAPCらしいので、それに従ってとりあえず1日目の簡単な感想をぼちぼち書きます。

メリークリスマス!

yapcasia.org

Perlのパパ、ラリー・ウォールの基調講演。
個人的には、「Perl6はクリスマスに出す(って言ったらしい)」→「いつのクリスマスとは言ってないぞ」→「βを誕生日に、正式版を今年のクリスマスに出したい」→「バスに轢かれなければ・・・」の流れがツボでした。
指輪物語とかホビットの冒険になぞらえていたり、スタートレックとか42の話題も出ていたので、この辺の話が理解できていればもっと楽しめたような気がします。

J.R.R.トールキンホビットの冒険の後に15年かけて指輪物語を書いたそうですが、Perl6もPerl5(2000年)から15年かけて作った、という事でなぞらえていたようです。
出ていた話では、「Perl6のコミュニティには(指輪物語でいうと)エルフやトロールのようにいろんな種族がいて、みんなそれぞれ意見は違うけど、それでも仲良く出来た方が良い」「お互いを好きでいてください」というのが印象的でした。

ちなみに、同時通訳の人が最高で非常に聞きやすかったです。

世界展開する大規模ウェブサービスのデプロイを支える技術

yapcasia.org

speakerdeck.com

Miiverseのデプロイやバージョン管理の話です。お世話になっております。
通して聞いてみると、かなり泥臭い運用をしている(しようとしている)んだな〜という感じでした。

リポジトリ同期の新システムというのでどんなもんかと思ったら、Gitで行うコマンドを自動化している感じだったり、デプロイは(現状)Capistrano2+Gitだったり、DB反映やコマンドの実行は手作業・・・という運用のようです。
Gitコマンドの自動化は「gitコマンドしか実行していないので安全」という事なので、確かに変な事するよりはコマンドに全部任せた方が動作は保証されるよな・・・と思いました。(何かあったらキャッシュ消してやり直すのあたりもかなり泥臭かったですw)

デプロイは、Cap2+GitからConsul+Stretcher移行を検証しているようでした。 (CodeDeployが無かった時期に作られたそうな)
これにより、Gitの負荷を考えなくてよくなったり並列実行できたりリポジトリに成果物が無いので肥大化が防げたり・・・といいことづくしらしいです。
台数が多くなればなるほど有利らしく、100台を対象にしたデプロイでかなりの差が出ていました。
大体デプロイ対象が30台を越えるとそろそろgit pullの負荷がボトルネックになってくるので、そうなればConsul+Stretcherを検討しても良いのではないかとの事でした。

TBD

yapcasia.org

今度はRubyのパパ、Matzのセッション。 直前までタイトルがTBDだったので本当に何を話すのやらと思ったら、(色々と小ネタはありましたが)Rubyの反省と新言語Streemの話でした。

RubyPerlの置き換えを目指して最初は作り始めたが、その結果Perlの影響があまりにも大きくなりすぎた、との事。
Lispの影響も受けているようで、その中で似たようなものなのに動きが異なってくるのでややこしいものがあり、「区別せず、全部同じで良かったのではないか」とも。

Streemは200行の動かないプロトタイプを公開したらバズってしまい、「動かないものは無視される」はずのOSS界の常識を覆すMatz伝説(自分で言ってた)となったようです。 仕様もシンプルでデータ構造もシンプル(シンプルすぎるみたいなのも見かけましたが)なので、ちょっとした処理をサクサクっと作ってしまうのに良いものになりそうです。 小規模データ解析やシンプルなWebサービスを作れるため、応用範囲が広いのではないかと仰っていました。かなり期待しています。

「新言語の余地はいつでもある」「環境の変化は新言語を生む」という最後の方の言葉が印象的でした。

Perlで学ぼう!文系プログラマのための、知識ゼロからのデータ構造と計算量

yapcasia.org

speakerdeck.com

恥ずかしながらデータ構造やら計算量についてあまり理解できてない部分があったので、そこを補うために。
と、思ったのですが、入った時点で超満員・・・何とか後ろに陣取ったものの、スライドが見えず中盤からは聞く事に徹していました><

スライドにほぼ全てが凝縮されているので、これ見れば大体は理解できるのではないかと思いますが・・・やっぱり解説とセットで聞きたかった・・・。
Cのポインタ回りは長年の謎でしたが、分かりやすい説明のおかげでかなり解消されました。
録画配信ありになってるので、それに期待しましょう。

Electron: Building desktop apps with web technologies

yapcasia.org

AtomVisual Studio Codeで使われているElectronの話でした。どちらかというと概要や作り方簡単なデモが中心。
どんな感じでWeb技術が通常のプログラムのような振る舞いになっているのか気になっていたので、関係者の方直々のお話を聞けて良かったです。大まかな流れはざっくりと掴めました。
既存のnpmの遺産が活かせるので移植が楽だったり、ライブラリを駆使する事でデスクトップアプリ顔負けのものがすぐ作れるという所が長所のようです。

デモで使われていたアプリはこの2つでした。

今の所はテキストエディタ中心的なイメージですが、ロボットやらVideoGameEditorやら色んな物に使われているので、まだまだ活躍の場は広がりそうです。

esa.io - 趣味から育てたWebサービスで生きていく

yapcasia.org

speakerdeck.com

esa.ioの作ったきっかけから育て方、その方針について。
個人的には今日のベストトークでした。「自分のやりたいことをやって、それで生活できて、それで回りの人を幸せに」したいです(\( ⁰⊖⁰)/) 。
ちなみに、きっかけが意外と単純で「試用期間切れたから作ろう」というものでした。

話の中で最初と最後に「いろいろ試すのが大事」と話されていたので、本当に大事そうです。
自分で何か作ろうとした場合に、「これ作ろう」→「もうあるやん・・・」という発想になって結局何もしないという場合がよくあるので、「あろうが無かろうがとりあえず作ってみた方が良いな」と思わせてくれる内容でした。
楽しさやモチベーションの維持の方法も色々ありましたが、「楽しさやモチベーションはあくまで生まれた結果なので、それを生み出す可能性のものをする」という所が共通している感じを受けました。
Bungfixタイムアタックや、フィードバック駆動開発とリリースノート駆動開発がかなり興味があります。

それにしても、「責任をもって真剣に開発する意思表示」をするために運営会社を作ってしかも副業で運営していたって相当な覚悟が無いと挑めないはずなので、かなりチャレンジャーだなとも思いました。

(そういえばステッカーくれるみたいな話をしてた気がするんですが、いただくのをすっかり忘れてました。)

懇親会

タダでご飯食べられるなーと思って乗り込んだんですけど、良く考えたら「パーティーメンバーがいません。」になりそうだなーとか思ったり思わなかったり。
結果的にそんな事は無かったので良かったです。ご飯もデザートもおいしかった。

ステッカー

スポンサー様のありがたいステッカーを色々頂いたので、ぺたぺたと貼り付けました。
(Azure以外は今日頂いたものです)

f:id:taiko19xx:20150821235723j:plain

自分を売る。
ここまできたらもう少し貼りたい。

その他

  • 無線LAN環境が最高
  • 何か名前書くのがあったらしく、ネームプレートに何も入れてなかったのは凡ミス。懇親会になって名刺入れた
  • お弁当もおいしかったです
  • MBPの電源が死にそうだったので、どこかで確保したかった
  • "採用目的"が頭から離れない

という事で

2日目もがんばるぞい!

中古で開発用ノートを買った

中古でThinkPad X201を買いました。開発用です。

届いた

23,000円ぐらいでCore i5(第一世代)と4GBメモリを積んでいるので中々お得な感じです。VT-xもVT-dもあるので、VagrantやDockerも使えます。多少の傷やキーボードライトの電球が切れてるらしいのですが、問題ありません。

OSはWin7Proが入ってましたが、全部消してUbuntuを。特にドライバを別途入れなくても完全に動作するのが嬉しいです。

せっかく指紋認証が付いているので使えるように

唯一指紋認証がデフォルトだと使えないので、使えるように。 必要なのは、fingerprint-gui

$ sudo add-apt-repository ppa:fingerprint/fingerprint-gui

$ sudo apt-get update

$ sudo apt-get install libbsapi policykit-1-fingerprint-gui fingerprint-gui

でインストールして、

$ fingerprint-gui

で設定画面を呼び出し。

Fingerで指を選んで、Scan/Verifyで設定。それだけでログインとsudoとかsu時に指紋が使えるように。 非常に楽なのですが、Ubuntuソフトウェアセンターから入れた場合とか部分的に使えない場合があるのが悩ましい・・・。

Windowsでvagrant sshする

Vagrantの機能にvagrant sshするとその場で立ち上げたVMに入れるというのがあるのですが、Windowsだと標準で使えません。
TeraTermとか使って接続すればいいだけなのですが、ユーザー名とパスワード入れるのも面倒。

それならssh.exeにパス通せばいいじゃない!

sshを同梱しているようなソフトは無いと思いがちですが、Gitに搭載されているので、Gitのbinフォルダにパスを通すだけで使えるようになります。
Gitのインストール時に「Run Git and included Unix tools from the Windows Command Prompt」を選んでいる場合は通っていますが、
選んでいない場合は各自でパスを通す事になります。
自マシン(Win7 64bit)だとこの2箇所にパスが通っていました。

C:\Program Files (x86)\git\cmd;
C:\MinGW\msys\1.0\bin;

それぞれにssh.exeがあります。

後はコマンドプロンプトなりPowerShellssh -vってやって応答が返ってくれば設定完了です。

C:\> ssh -v
OpenSSH_5.4p1, OpenSSL 1.0.0 29 Mar 2010
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]

OpenSSH_5.4p1が入っているようです。
ここまで確認できれば、後はvagrant sshでお楽しみ下さい。

C:\vagrant> vagrant ssh
Last login: Fri Mar 14 05:05:51 2014 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

弱点として、コマンドプロンプトPowerShellも、文字エンコードがShift-JISのようで場合によっては文字化けしてしまいます・・・。
vagrant sshする時はデーモンの再起動とか設定変更なのであまり関係無い気はしますが、ここだけ注意です。

Vagrantのsynced_folderが超絶便利なんだけど、落とし穴があった件

最近、社内ではVagrantを使っています。最近のIT企業っぽくてかっこいい。

こんな環境です。

今まではSublimeTextからSFTPプラグインを使ってVagrantの仮想環境に転送していたけど、ある日VagrantFileを見てみると「config.vm.synced_folder」なる項目を発見。
どうやら、ローカルのフォルダと仮想環境のフォルダを同期してくれるらしいので使ってみるとこれまた便利。
わざわざSFTPで転送せずとも、そのままの状態で表示されるじゃん・・・!

ApacheのWebroot下のいくつかのフォルダを、/vagrant/source以下にマウントしたフォルダにシンボリックリンクさせるという手法を取って運用していました。
こんな感じで。

C:\~\project <--synced_folder--> /vagrant/source/~ <-- ln="" -s="" --=""> /var/www/~

ただし、この運用にはいくつかの落とし穴がありました。

静的ファイルが更新されない

CSSとかJavascriptとか、一部に編集を加えてもApacheから読み出した時に変っていなく、マウント先を直接viとかで見ていると変っている不思議な現象。
中身を全部消すと反映されるのですが・・・。

調べて見ると、VirtualBoxNFSに起因するバグだった模様。
Vagrantの共有フォルダをApache(Nginx)のDocumentRootに指定するとレスポンスがおかしくなる奇妙な現象の解決方法 #vagrant - OTメモ帳
EnableSendfile Offがコメントアウトされていたので、解除してApacheを再起動すると無事に反映されるようになっていました。
めでたし。

Apacheが起動しない

仮想マシンの起動時にApacheも一緒に立ち上がっているはずなのですが、何故か立ち上がってないという現象にも遭遇。
vagrant sshで接続して、$ sudo /etc/init.d/httpd startすると普通に起動するので、起動時にのみコケている模様。
エラーログを見ても原因がつかめなかったため、同時期に設定したシンボリックリンクの設定をやめ、Webroot以下のフォルダに直接synced_folderを設定する事でApacheが立ち上がるようになりましたが・・・原因は謎。

C:\~\project\~ <--synced_folder--> /var/www/~

とりあえず、無事に使えているのでよしとします。