Kuchitama Tech Note

はてな記法がいつまでたっても覚えられないので、はてなダイアリーからマークダウンが使えるこっちに引っ越してきました。

関西Scalaビギナーズでsbtについて話してきました

ついに、ついについに関西Scalaビギナーズで発表しました。ということで、感想を殴り書き

関西Scalaビギナーズ

とりあえず使えるSBT

発表内容としては、とりあえずちょっとScalaの入門書かなにか読んでみて、PlayFramework!でScala使いたいというぐらいの人向けにSBTで詰まる事が無いよう最低限sbtを使う方法をまとめてあります。

資料にも発表にも入れ忘れていたのですが、.sbtファイルを編集するにあたって非常に大事な事があります。

それは

.sbtファイルでは式の後に空行を挟まないといけないこと

です。

ご注意ください.

発表するまでは、この発表がホントにビギナー向けに作ったけど、参加者って実は想定しているほどビギナーじゃないんじゃなかろうか? という不安がありました。

しかし、発表後初心者向けにワークショップもどきをやってみた感触だと、この内容でも役立ててもらえそうな感じがあったので、それは大丈夫のような気がしてます。

ワークショップ

今回は、後半はいくつか平行してワークショップやもくもく会、座談会が行われました。 僕も1セッションワークショップを担当しました。

何をやるかもろくに考えてないまま突入したワークショップでしたが、それでも参加してくださる方がいらっしゃって嬉しかったです。 ただ、内容はぐだぐだになってしまった感がちょっとあり申し訳ない感じもありました。 最低限、環境構築はステップをまとめておくべきだったと反省しています。

ワークショップの内容とサンプルコードはGitHubにまとめ直してあるので、これからScalaを始めたい人に見て欲しいです。

もしくは、これからScalaを始める人を教える人に、ちょっとでも参考になると嬉しいです。

https://github.com/Kuchitama/scalakb4_workshop

ワークショップでは上記のStep2までをやってみようという感じで進めました。 機会があればちゃんとリベンジしたいなぁ。

お知らせ

10月にプログラマーズナイトというイベントがあります。 DJの流す音楽を聞きながら夜通しエンジニアトークするイベントです。 飛び込みLTも歓迎なのでぜひぜひご参加ください。 私もスタッフとして参加してます。

EMLauncherのユーザ登録システムを公開しました

EMLaucherにメールアドレスを登録するEMLauncherResiterというシステムを自作しました。 EMLauncherRegister

EMLauncherについてはこちら

EMLauncherは開発元のKLabさんでは、Googleアカウントを利用した認証を使っているためか、メーあるドレスの登録機能がなく、登録するためには直接SQLを叩いて登録する必要があります。

https://github.com/KLab/emlauncher/blob/master/config/emlauncher_config_sample.php#L30-L36

EMLauncherの機能の検証にはこれで充分なんですが、会社などで利用する場合には、毎回SQLを叩いていられないので、メールアドレスの登録機能を開発することにしました。 本来なら、EMLaucherに機能追加してPullRequestを送るべきなんだと思いますが、残念ながら私は、PHPはある程度読めますが、書けないため、別のアプリケーションとしてRubyで実装してしまいました。

基本的にセキュリティは下記のようにAWSのSecurityGroup任せにしてありますが、登録するメールアドレスのドメインを限定させる事もできます。

環境のイメージは、↓の感じです。

あまり需要もないような気がしますが、せっかく作ったので公開します。

Clojureエンジニア交流会に参加してきました

AAAで喋った翌日に大阪でClojureエンジニアの交流会に参加してきました。

大阪でClojure勉強会

経緯

にゃんぱすーでバズった(?)nyampass@tnoborioさんが開催してくださった会です。 (バズの経緯はこちら)

一応、「はじめてのClojure」出版記念という名目で北は北海道から南は九州まで全国ツアーをしているそうです。 (が、著者割引の書籍は前日の名古屋で完売したため買えず。残念…)

はじめてのClojure (I・O BOOKS)

はじめてのClojure (I・O BOOKS)

Twitterとかで tnoborioさんが全国行脚みたいなの構想してるのは、ちょっとだけ補足してたのですが、超個人的な事情から6月〜つい先日までめっちゃ忙しくて、それ以上のキャッチアップも何もできていなかったのですが、ある日 @ykomatsu0 さんにDM頂いてこの会の存在を知りました。 そして、超忙しいのにドストライクに用事がなく、奇跡的に参加することが出来ました。

この日のツイートは #jusoclj のタグをつけています。

やったこと

今回の基本的な流れとしては、

  • 会の趣旨説明 by @tnoborio さん
  • 軽く自己紹介 by 参加者全員
  • LightTableハンズオン
  • もくもく会
  • LT
  • 懇親会

って感じでした。

自己紹介タイム

みんなで軽く自己紹介をしました。 この時に @tnoda_ さんは資料用意してのLT気味に自己紹介をしてくれました。

2012年末にmitori_cljなるものを主催されてたそうで、 これはいいイベントで参加したかったなぁと思いました。 こんなイベントが開催されていることに全く気づけなくで残念でした… (これに参加されてる方、Kyoto.cljとかClojureお菓子会でつながってたはずなのに、なんでアンテナ引っかからなかったんだろ…)

自由にパクっていいとのことなので、いつか参加 or 主催 したいです。

LightTable

@tnoborioさんにLightTableの使い方をハンズオン形式で教えてもらいました。 触ってみた感想としては、使いやすいとかわかりやすい以前に、 なんか面白い って思わせてくれるIDEでした。 いろいろいじってみて、vimキーバインドにしたりゴニョゴニョしましたが、やっぱり初めて触るのでスグには手に馴染みませんでしたが、Pluginや設定次第かな〜という気がします。 今回のもくもく会では、とりあえず手に馴染んだvimを使ったほうが作業がはかどるので、早々に使うのを止めましたが、もうちょっと時間があるときにゆっくり触りたいと思います。

もくもく会

実は1年ほど前に2つほどClojure製のサービスをherokuで運用していたのですが、全くメンテしていなかったので、そのメンテを行っていました。 ちなみに、そのうちの一つははてなブログRSSをカテゴリでフィルタするサービスで、この記事のサイドバーに出しているRSSリンクはそのサービスを利用しています。 やってることは、通常のRSSを取得して、指定したカテゴリに一致する記事の要素だけをフィルタリングしているという超簡単なことなのですが、あまり効率とか考えずに実装していました。 なので、パフォーマンスチューニングをちょっとやろうかなぁと思って、昔書いた実装を思い出しつつ、チューニングできそうなポイントを探していました。 で、ポイントの一つとして取得した結果をしばらくキャッシュしてサーバ間通信を減らそうと思って、こんなキャッシュライブラリを見つけました。

clojure/core.cache

のんびりドキュメント読んでたら、時間がなくなっちゃってちゃんと組み込みできませんでしたが、だいたいの感触はつかめたので、適当に時間のあるときに組み込もうと思います。 もし、他にいいキャッシュライブラリ知ってる方がいらっしゃればご紹介ください。

LTタイム

Clojureでのゲームプログラミングの話

nekoie(@rnkv)さんにはClojureAndroidなどのスマートフォン向けゲームプログラミングについて教えてもらいました。 libGDXというゲームフレームワークでもClojure開発をされてたそうで、デモも見せてもらったんですが、今日の発表はUnityでした。

う〜ん、Clojure幅広い… 資料はこちらで公開されています。

ProjectEuler の結果チューニング

cuzic0さんは、もくもく会中にProjectEulerのProblem 10を説いていたそうで、ご自身の回答とGitHubなんかに公開されてる他の人の回答の実行速度比較を出されていました。 で、どうにもパフォーマンスが出ないという問題を、みんなで寄ってたかって(と言いつつほぼ@tnodaさんの功績)チューニングしてました。 結果、@tnodaさんのこの記事がめっちゃ効きました。

Java の配列を利用してメモリと時間の壁を突破する.

私は基本的にWebプログラマーでよっぽどのことがないと、実行速度のチューニングをする機会はない(あってもSQLのチューニングやキャッシュ化ぐらい)ので、いい勉強になりました。

懇親会

nyampassのこととか、Tokyo.cljのこととか、なごやこわいのこととか色々話しました。 あと、Scalaのことも話しましたね。 話してるうちにちゃんとSICP読まないとなーって気分になってしまいました。 ちょっと、頑張っちゃおうかなぁ。 でも、その前にはじめてのClojureを読まねば。

感想

自分のリアルな生活圏の中にClojure使ってる人がいないし、最近仕事もプライベートもScalaRubyばっかり書いてて1年ぐらいClojureを使ってなかったんですが、やっぱりClojureも楽しいですね。 それに、つかってるユーザが根強いです。 多くはなくても、こだわりをもって使ってる人が多いので、話をしてて非常に楽しかったです。 Kyoto.cljを開催して以来、ちらほらと断続的に第2回の開催を呼びかけられるんですが、 本当に需要があるのかつかめきれずずっと放置になってました。 でも、今回の勉強会に参加してやっぱりたまにはClojureユーザが集まる機会が必要だと感じました。 今は、ScalaMatsuriを控えていて、しばらくはScala漬の予定ですが、一息ついたらまた本格的にClojure活動を再開しようと思いました。

GitリポジトリとPackerを連携させるPackerRemoteをリリースしました

PackerをHttpリクエストで実行するPackerRemoteというツールを作りました。

Packerについては本家とか、Ryuzee.comさんとか、あと手前味噌ですがFuRyuTechBlogなんかを見て頂けるといいかと思います。

で、PackerRemoteなんですが、何がしたかったかというと、PackerでProvisionerとして実行するChef-Soloリポジトリや、シェルスクリプトをGitHubやBitBucketで管理して、Pushされたタイミングで、マシンイメージを新しく作り直して欲しかったんです。 Pushのタイミングで実行してマシンイメージを作り直す事で、常に最新状態に保てて、マシンイメージの管理コストを下げる事が出来ます。

やりたい事のイメージとしてはこんな感じ↓です。

GitリポジトリのServiceHookでHttpリクエストを受け取ったら、

  1. リポジトリをpullして
  2. packer buildを実行する

という一連の動作を実行してくれます。

で、ちょうどパーフェクトRubyを読んで、コマンドラインツールとかGemとかSinatraとかの扱いを、「あーこんな感じかぁ」程度にはわかってきたので、いっちょ自分で作ってみる事にしました。 (Goじゃなくてすいません…)

本当に最低限の機能しかなくて、機能強化はしていきたいんですが、とりあえず動く事は動くので、えいやっと公開しちゃいます。 ドキュメントとか超適当な英語書いてるので、「お前は何を言っているんだ」状態になったらすいません。 ここのコメントでも、TwitterでもGitHubのIssuesやプルリでも何でもいいのでご意見くだされば、対応します。

最後に

それJenkinsで出来るよとか言わないでね。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

Packerにやられた話(´・ω・`)

お久しぶりです。 以前、Chef-Soloを使って、AMIの状態を収束させるフレームワークを作りました。

このフレームワークはGitHubで公開してます。 https://github.com/Kuchitama/ec2_automation

ただですね…

先日こんな記事が…

Packer & Chef-SoloでAmazon EC2のAMIを簡単に作る方法

ネタがダダ被りじゃねーか!!

なにはともあれ、とにかく、packerとやら試してみようと試してみました

結果…

ダダ被りじゃねーか!!

いや、もちろんオレオレフレームワークよりよっぽど高機能ですが…

NeoBundle のChef Cookbookを公開しました

お久しぶりです。kuchitamaです。

最近は、会社のブログ書いたり、会社のブログ書いたり、関Javaで発表したり、会社のブログ書いたりしてて、こっちの方は全く更新していませんでした。

久々の更新で緊張してますが、今日は会社のブログネタを転用して、ここでもChefネタです。 今回は、NeoBundleのCookbookを作って公開したので、ちょっと宣伝してみます。

NeoBundle Cookbook

NeoBundleは言わずと知れた、暗黒美夢王こと@ShougoMatsuさんが作られたVimプラグインですね。 こいつがいてくれるだけで、僕のVim環境は無限の広がりを見せるので、新しくサーバを立てた時に利用できる状態になっていて欲しいわけです。 インストール手順は自分でまとめたのですが、やはりVagrantなどでサクッと仮想マシンを立ち上げていろいろ試してみる時にいちいちインストール手順を踏むのは面倒なので、自動構築するためにCookbook化してみました。 そのため、現状のNeoBundle Cookbookはkuchitama的においしい設定になっていて、ちょっと汎用的でない部分がありますが、そのうち調整していくつもりです。

使い方

NeoBundle Cookbookはgithubで公開しています。

基本的にはChefリポジトリgit clone して、設定を書いてやるだけです。

]$ cd <chef-repository>/cookbooks
]$ git clone https://github.com/Kuchitama/neobundle.git
]$ cd ..
]$ vim localhost.json

{
  "run_list" : [
    "recipe[neobundle]"
  ],
  "neobundle" : {
    "user" : "vagrant",
    "group" : "vagrant",
    "vim_home" : "/home/vagrant/.vim"
  }
}

これで、準備が整いました。あとは、Chefを実行するだけです。

Attribute

NeoBundle CookbookのAttributeは下記の3つがあります。 * user * group * vim_home

userとgroup

vimを利用する権限を設定します。 例えば、vagrantで作成した仮想マシンを使用しているのであれば、userもgroupもvagrantを指定します。 userもgroupも初期値が設定されていませんので、設定する必要があります。

vim_home

vim_homeには、vimホームフォルダを作成するパスを設定します。 大体の場合に、ユーザのホームフォルダ直下に.vimを作成する事になると思います。

knife-soloとBerkshelfを使う

knife-soloとBerkshelfを使うとかなりお手軽にリモートサーバにNeoBundleをインストールする事が出来ます。 それぞれのインストールについてはこちらを参照して頂ければいいと思います。

まず、knife solo init <repository> でknife solo リポジトリを作ります。

つぎに、作成したリポジトリ直下にあるBerksfileを以下のように編集します。

cookbook "neobundle", git: "https://github.com/Kuchitama/neobundle.git"

そして、knife solo prepare <user>@<remotehost>で、作成されたjsonファイルを編集して、knife solo cook <user>@<remotehost>を実行すればOKです。

まとめ

以上、簡単にNeoBundle Cookbookの使いかたについて解説してみました。 最初に書いた通り、とりあえず自分が楽をするために書いたので、かなり汎用化されていない部分があります。 ちょこちょこといじって、 - ブログネタ - もっといいCookbookを作って行こうと思います。 課題としては以下の感じでしょうか。

  • テストを書く test-kitchen serverspec
  • Resourceに切り出せそうな処理を切り出す ** フォルダ権限の変更とか
  • vim_homeの設定が冗長な気がする ** ohaiとかでなんとかならんかなー

この辺、ちまちまと直して行きたいと思います。

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code