Hatena::ブログ(Diary)

みずぴー日記 Twitter

2012-01-04(水)

開発者向けリアルタイムチャットアプリケーション『AsakusaSatellite』 0.7をリリースしました

| 開発者向けリアルタイムチャットアプリケーション『AsakusaSatellite』 0.7をリリースしましたを含むブックマーク

f:id:mzp:20120104105332p:image

前回のバージョンアップからだいぶ時間が空いてしまいましたが、AsakusaSatelliteの新バージョンのリリースを行ないました。

前回まではSkypeで相談しながら開発するというスタイルでした。しかし、今回のバージョンアップで機能が多数追加されたことによりAsakusaSatelliteで相談しながらAsakusaSatelliteを開発するというドッグフードスタイルによる開発が可能となりました。

AsakusaSatelliteの特徴

AsakusaSatelliteは以下のような機能をもった開発者向けチャットアプリケーションです。

今回のバージョンアップにより追加された機能

v0.7 のバージョンアップキーワードは「AsakusaSatellite as a Service」であり、PaaS対応を意識しています。

その結果、従来よりもプラガブルな構成になっています。

PaaS(heroku)対応

f:id:mzp:20120104105333p:image

今回のバージョンアップの最大の変化点は、herokuに対応したことです。 これにより自前でサーバを持たずにAsakusaSateliteを利用できるようになりました。

もちろん、今まで通りローカルのサーバで動作させることもできます。

これにともないDBがGroongaからMongoDBに変更されました。

WebSocketサーバの外部サービス対応

f:id:mzp:20120104105335p:image

PaaS対応の一環で、WebSocketサーバを切り替えられるようになりました。

現在は以下の3つの WebSocket サーバを利用できます。

内部にリソースを持ちたくない場合には、Pusher を利用し、内部で閉じた形で利用したい場合には、Socky ベースの WebSocket サーバを利用する、といった使い分けが可能です。

また合せてChrome16への対応も行なっています。

部屋の非公開設定

f:id:mzp:20120104105336p:image

部屋を特定メンバのみに公開することができるようになりました。この機能により、herokuのようなpublicなサーバに設置した場合でもプライベートな情報を守れます。

部屋ごとの設定となっているため、一般用の部屋を公開し、身内用の部屋を非公開にするといった併用も可能です。

QuoteIt対応

f:id:mzp:20120104105331p:image

プラグイン機能によりQuoteItと連携できるようになりました。これによりAsakusaSatellite上でTwitterSlideshare、Gistなどを簡単に引用することができます。

また、QuoteIt は世界中の開発者が自由にプラグインを追加できるので、利用しているうちに機能が追加されている、ということも起こりえます。

ただし、すべてのURLをQuoteItに送るため、セキュリティ観点からデフォルトでは無効になっています。

周辺ツールの充実

f:id:mzp:20120104105334p:image

AsausaSatelliteを日常的に用いるようになったため、周辺ツールが整備されました。

AsakusaSatellite Plugin for JenkinsJenkinsインストールすることで、ビルド結果をAsakusaSatelliteに通知できるようになります。Redmineチケットリンクプラグインによって、コミットメッセージに埋めこまれたチケット番号が展開されるので、非常に分かりやすい通知になります。

ダウンロードインストール方法

公開ページからパッケージを取得し、適当なディレクトリに展開します。

依存ライブラリインストールします。

$ bundle install --path vendor/bundle

環境に応じてMongoDBの起動を行ないます。

$ mongod --dbpath <dir_name>

WebSocketサーバであるSockyを起動します。

$ bundle exec thin -R socky/config.ru -p3002 start

AsakusaSatellite本体を起動します。

$ bundle exec rails server

http://localhost:3000/ でAsakusaSatelliteが利用できます。

また詳細なマニュアルも公開しています。

謝辞

以下の方からいただいたパッチを取り込んでいます。ありがとうございます。(敬称略)

2011-12-31(土)

2011年の振り替えり

2011年の振り替えりを含むブックマーク

もう2011年も終わりなので、参加したイベントを中心に、今年を振り替えってみたいと思います。

今年もいろんなことがありました。

1月: /usr/bin消失

年明け早々、/usr/binを消しました。 そして、iMacが壊れて、SnowLeopardのディスクを飲み込まれました。

新年を新マシンとともに始めることができた、と前向きにとらえたいと思います。

2月: 名古屋Ruby会議 02

2011年最初のビッグイベントでした。仕事の都合で前日まで東京に居たので、移動が大変だった記憶があります。

裏イベントで名古屋Reject会議02を企画したら、いろんな人が応募してきてくれて嬉しかったです。

ただ、Reject会議にずっと居たので、本会にほとんど参加できなかったのがちょっと残念です。

2月: AsakusaSatelliteリリース

@さんと@さんとSkypeで話しながら作ってたチャットアプリAsakusaSatelliteをこのあたりでリリースしました。codefirst名義でいろいろなソフトウェアをリリースするようになったのも、このあたりな気がします。

3月: リリカル合宿

「えっ、@さん、リリカルなのは見たことないんですか? それは一度、お泊まり会をやってみないといけないですね」という訳のわからない理由で合宿イベントをやりました。結局、日程が合わず@さんは来れなかったし。

ホントは温泉でやりたくて熱海の宿とかを調べてたんですが、移動の都合とかも考えて名古屋市内になりました。いつかは温泉イベントもやりたいです。

合宿中は、@さんがが徹夜でAndroidで動くソースコードビューワを書いてたのが、すごく印象に残ってます。鼻血も出してた気がします。

3月: TDDBC福岡

suer「TDDのリズムが今ひとつわかんないんだよね」mzp「それはTDDBCに行くしかないですね。次は福岡でありますよ」というわけで福岡まで行ってきました。

TDDBC中に@ukstudioさんにrspecのすごさについて教えてもらいました。「うーん、このテストの出力、文法的にちょっと…」という言葉がすごく印象に残ってます。

福岡駅でかったおみやげを福岡駅に忘れてきたのも、今ではよい思いでです。

4月: 第3回MessagePackハッカソン(春)

2010年の末ごろからこそこそ作ってたMessagePack for OCamlをたずさえてMessagePackハッカソンに参加しました。参加してる人たちがみんなすごいひとたちばかりでビクビクしてましたけが、たのしかったです。

この時、始めて夜行バスを使って東京に行ってみました。そして、これ以降は使ってません。

4月: ActionScriptを使わないFlash勉強会

Reject会議で@さんと「swf生成たのしいですよね」という感じでもりあがったので、東京で勉強会をやりました。 「今アツいのはJavascriptによるFlashプレイヤーの再実装ですよね」という頭がおかしいとしか思えない会話がそこかしこで聞こえて、とても楽しかったです。

あとFlashの勉強会には女性が多いというウワサを聞いてましたが、完全にデマでした。

5月: Boost.勉強会 名古屋

C++とかよく分からないのにBoost.勉強会で発表したりしました。 とりあえず「エラーメッセージが多すぎて読めない」というジョークが鉄板ネタだということだけは把握しました。

発表はFrama-Cネタをしたんですが、やっぱりCを検証するのはいろいろと難しいので、素直にCoqを使ったほうがいい気が最近はしています。

6月: 開発環境勉強会

つくばのほうでやってた開発環境勉強会に影響されて名古屋でも開催しました。

そろそろ第二回をやってもいい時期な気がします。

7月: Codefirst合宿

2月にリリースしたAsakusaSatelliteを大幅にリファインしました。あまりに変更しすぎて、まだ新バージョンをリリースできてまん(>_<)。 年明けには出す予定です..。

このとき使った京屋旅館 http://kyoya.to/ は駅から近い、WiFi完備、コーヒー飲み放題、プリンタ完備という謎の充実っぷりだったので、クリスマスソンでも再利用しました。

9月: 品川駅に閉じ込められた

台風直撃と東京出張が被って、品川駅に6時間ほど閉じこめられました。 品川駅にはたいぶ詳しくなりました。

9月 函数プログラミングの集い・Proof Summit

いろんな話が聞けて、すんごい楽しかったです! みんなすごかった!!

あとLtGのキャラは、とてもかわいくてよいです。ボクはCopyくんがすきです。

10月 芋煮会

よんたさんこと @ が「冬になったのに芋煮会をやらないとかないわー」と行って主催してまいた。

飲みすぎたので、乾杯をしたあたりからの記憶が非常に断片的でよく分かりません。とりあえず、芋煮はおいしかったことは覚えています。

11月: 証明コンペ

競技プログラミングにも始めて参加しました。 48時間ぶっとうしで同じ問題を考えつづけるのはとてもエキサイティングで楽しかったです。

11月: LL名古屋

夏の間は輪番休日せいで勉強会の主催も参加もあまりできなかったので、そのうっぷんをはらすようなめちゃくちゃなイベントでした。

勝手にプログラムに組み込んでから、発表交渉を始めるという新境地に至りました。

12月: クリスマスソン

bleis「今年のクリスマスは土日とかぶってしまったせいで、リア充どもが活気づいてて、非常に不愉快だ」mzp「だったら、ハッカソンでもやろうぜ」と適当なことを言っていたら、いつのまにかやる事になってました。

まあ、レッドブルを48本買いこんだり、クリスマスケーキを予約したりと、わりとクリスマスを楽しんでいた気がします。東京からの参加者がわりと居たのは今だに謎です。

当日はCoq for iPadをひたすらつくったので、ほかの事はよくわかりません。

まとめ

  • 来年は、あまり飲みすぎないようにします..。
  • Flash勉強会、開発環境勉強会はもう一度やりたい。
  • LL名古屋は、時期をみはからってやります。
  • codefirstの活動はコンスタントにつづけていく
  • なるべく早くCoq for iPadをリリースしたい。

2011-12-24(土)

Webサービスの埋め込み用HTMLを手軽に取得するためのWebAPI『QuoteIt』を作りました

Webサービスの埋め込み用HTMLを手軽に取得するためのWebAPI『QuoteIt』を作りましたを含むブックマーク

# この記事は名古屋クリスマスハッカソン2011で書いてます。メリークリスマス!

f:id:mzp:20111224123514p:image

GistとかTwitterとかの最近のWebサービスは他のページに埋め込めるようになっていますね。ただ、サービスごとに埋め込むためのHTMLコードが違うので、いちいち調べるのが面倒ですよね。

そこで各種Webサービスの埋め込み用HTMLを統一的に取得できるWebAPI『QuoteIt』を作りました。しかも、誰でも引用元を簡単に追加することができます。

http://quoteit.heroku.com/

使い方

URLを指定すると、埋め込み用のHTMLを取得できます。

例えば、

http://twitpic.com/73wiod

を埋め込みたい場合は、

http://quoteit.heroku.com/clip.html?u=http%3A%2F%2Ftwitpic.com%2F73wiod 

アクセスすることで、埋め込み用のHTMLを取得できます。

対応サービスの増やし方

埋め込み用のHTMLを取得するためのメタデータはwedataで管理しています。 そのため、OpenIDを持つ方ならば誰でも対応サービスを増やすことが可能です。

例えばTwitter引用は、下記のコードだけで対応できます。

f:id:mzp:20111224124534p:image

wedataの定義方法についてはドキュメント を参照してください。

対応サービス

それ以外の対応サービスはプラグイン一覧で確認できます。

ソースコード

ソースコードgithubで管理しています。MITライセンスですので、ご自由にお使いください。

https://github.com/codefirst/quoteit

2011-12-16(金)

ちょっと便利な関数の紹介

| ちょっと便利な関数の紹介を含むブックマーク

(* この記事は、F# Advent Calendar 2011の16日目の記事です。 *)

こんにちは、mzpです。 クリスマスたのしみですね。

さて、関数プログラマは自分だけの関数を持っていることが多いものです。 ライブラリ化にするほどの規模でないので、コピペによって各プロジェクトを移動しながら、洗練されたり新しいオペレータが追加されれたりします。

というわけで今日はOCamlハカーのosiireさんのオペレータを紹介していきます。

ネタ元

F#標準

まずはF#だと不要な関数です。

let id x = x
let (@@) f x = f x
let (+>) f g = g f
let (+$) f g x = f (g x)

それぞれid, (<|), (|>),(<<)に対応してます。「え、こんなのもデフォルトで定義されてないんですか(笑)」と言うと効率的にOCamlerをdisれるのでおすすめです。

Haskellからの輸入

Haskellで定義されている関数を輸入した関数です。

let curry f x y = f (x, y)
let uncurry f (x, y) = f x y
let flip f x y = f y x

順番を入れ替えたりできるので、引数の形を変更するだけの無名関数を書くのを避けれます。

> List.map (fun (x,y) -> x + y) [(1,2); (3,4)] 
val it : int list = [3; 7]

> List.map (uncurry (+)) [(1,2); (3,4)]
val it : int list = [3; 7]

無限ループ

無限ループするための関数です。

let rec forever f x =
  let v = f x in
  forever f v

同じ処理を繰り返すプログラムの本体部分で使ったりします。

let _ =
  forever read_eval_print ()

例外とOption型の変換

let maybe f x = try Some (f x) with e -> None
let may x f = match x with None -> None | Some v -> Some (f v)
let may_default d f = function Some v -> f v | None -> d
let default d = function Some v -> v | None -> d

option型を返さずに例外を投げてくる関数を扱うための関数です。

maybe List.hd xs
|> may do_something_for_head
|> default 0

ただ複数引数とる関数の場合は、ちょっと不恰好になります。

(* List.tryFind相当 *)
maybe (List.find x) xs

デバッグ

let tee f x = ignore (f x); x

Unixteeコマンドのように処理を挟みこんだりするときに便利です。

do_A ()
|> do_B
|> tee printfn
|> do_C

みたいにすれば、パイプライン中の値を覗けます。

最後に

人のコード読むのはたのしいですね。

mclh46mclh46 2011/12/16 07:35 この記事を読んで、自分のやり方を書いてみました。
http://d.hatena.ne.jp/mclh46/20111216/1323986621
F#の標準のライブラリは、1つの関数、クラスの利用範囲が広く、また弱点のある道具は不採用になっていると思われます。
maybeやteeの考え方はとても参考になりました。

2011-12-05(月)

Show Scriptコマンドによる証明の整形

| Show Scriptコマンドによる証明の整形を含むブックマーク

(* この記事はTheorem Proving Advent Calendar 2011の5日目の記事です。 *)

Coqはタクティックを使って対話的に証明を構築していけます。その反面、注意して書かないと、読みにくい証明になってしまいます。

そんなときは、Show Scriptコマンドで整形すると楽になります。

例: 読みにくい証明

例として次のようなリストに関する補題証明するときのことを考えてみます。

Require Import List.

Lemma rev_app_distr : forall A (x y:list A), 
  rev (x ++ y) = rev y ++ rev x.

Focusを使ってサブゴールを移動しながら証明したり、インデントなしで場合分けの証明したりすると、こんな感じの読みづらい証明になってしまいます。

Proof.
induction x as [| a l IHl].
destruct y as [| a l].
Focus 2.
simpl.
rewrite app_nil_r.
auto.
Show.
simpl.
auto.
intro y.
simpl.
rewrite (IHl y).
rewrite app_assoc.
trivial.
Qed.

Show Scriptコマンドによる証明の整形

そんなときは、Qedの直前にShow Scriptコマンドを使うと、次のような整形した証明を出力できます。

induction x as [| a l IHl].

 destruct y as [| a l].
  simpl.
  auto.
 
  simpl.
  rewrite app_nil_r.
  auto.
 
 intro y.
 simpl.
 rewrite (IHl y).
 rewrite app_assoc.
 trivial.

Focusによるサブゴールの入れ替えを元に戻して、場合分けごとにインデントしてくれます。

ただ、"現在の証明"に対してしか使えないのでQedする前でないと使えませんし、コメントはすべて消えてしまいます。

おまけ: そのほかのShow XXXコマンド

ちなみに、Show Script以外にも、証明木を表示するShow Treeコマンドもおもしろいです。

先ほどの証明をShow Treeすると、次のような証明木を出力できます。

 BY induction x as [| a l IHl]   
    A : Type
    ============================
     forall y : list A, rev (nil ++ y) = rev y ++ rev nil
 
   BY Evar change
     
      ============================
       forall y : list A, rev (nil ++ y) = rev y ++ rev nil
   
     BY destruct y as [| a l]
       
        ============================
         rev (nil ++ nil) = rev nil ++ rev nil
     
       BY Evar change
         
          ============================
           rev (nil ++ nil) = rev nil ++ rev nil

      ….

まとめ

Show Scriptコマンドで証明を整形すると、たのしいですよ。

トラックバック - http://d.hatena.ne.jp/mzp/20111205

2011-11-15(火)

LL名古屋 開催経緯

LL名古屋 開催経緯を含むブックマーク

f:id:mzp:20111115202150j:image

11/5にLL名古屋というイベントを開催されました。

プログラムを見てもらえば分かりますが、いわゆるLLではなく「Lが2個はいっていれば、それはLLです」がテーマのLT大会でした。

開催経緯

発端

OSC Nagoya 2011とLL Planetの開催日が同日だったせいでLL Planetに行けなかったし、輪番休日のせいで休日が分断されて勉強会が開催しづらくてムカつく、という話をミスドでしていたらいつのまにか決まっていました。反省はしていません。

「Lが2個あれば何でもOK」ルールは、いわゆるLLのみにテーマをしぼってしまうとCoqの話ができなくなりそうだったからです:D。 あと発表者が集めにくそうだったというのもあります。

発表者が多い理由
  1. #llnagoya ハッシュタグでつぶやいている人を勝手に発表者リストに追加する。
  2. 追加された人が、別の発表者を連れてきて勝手に追加する。
  3. 以下ループ

というねずみ算方式です。

ロゴが多い理由

しらない。

当日の様子

感想

  • #よんたいない
  • @さんと@さんが運営してくてたので、ボクは何もしてませんでした。 ありがとうございます。
  • ustreamの機材がガチだった。 @さんすごい。
  • 会場ひろーい。Aチームすげー
  • らむだクッキー食べそこねた。
  • 発表者が多いと発表者のキャンセル率があがって、ちょっと大変ですね。
  • 楽しかったけど、こういうのは年に一回ぐらいでお腹いっぱいです。

2011-11-11(金)

VSTTE Competition参加記録

 VSTTE Competition参加記録を含むブックマーク

f:id:mzp:20111113084731j:image

id:yoshihiro503さんに誘われて、VSTTE Competitionというソフトウェア検証コンテストに参加しました。

検証ツールに特に制限はないぜ」と書かれていたのでCoqを使いました。

競技プログラミンングに初めて参加しましたが、48時間ぶっとうしで同じ課題に取り組むのはとてもエキサイティングで楽しかったです。

参加メンバー

一日目

開始直前
  • yoshihiro503さんから"uiro,tebasaki,miso,..."と列挙された謎のメールが届く。 どうやらチーム名の候補だったらしいです。
  • yoshihiro503さんとSkypeで話しながらbitbucketの準備をしたりする。
  • 0:00からの開催に備えて仮眠をとる。
0:00ごろ
  • 問題が公開される。 https://sites.google.com/site/vstte2012/compet/problems
  • ざっと見た感じだとProblem2,Problem4,Problem5が関数型ぽっかったので、Problem2をボクが、Problem4をpirapiraさん、Problem5をyoshihro503さんが担当することにする。
  • 簡単かと思ったProblem2をよく読むと「停止性のない関数を定義しろ」と書いてあって、散々苦しむ。
3:00ごろ
  • なんとかProblem2の形式化をするも、証明がうまくいかないので諦める。
  • 「もう寝るー」とSkypeでつぶやくも、興奮しまくっててうまく寝れない。
  • しょうがないので、Problem3にとりかかる。
5:00ごろ
  • 新聞配達の人が来て、時間の進む速度にびびる。
  • なんとかProblem3の疑似コードをCoqに変更することができたので、さすがに寝る。

二日目

9:00ごろ
  • 起床。Problem3の続きにとりかかる。
  • FIFOであることを示せ」と言われて頭をかかえる。
  • Skypeで@keigoiさんに相談して「FIFO公理を定義して、それを満すことを示せばいいんじゃね?」というアイデアをもらう。
13:00ごろ
  • Problem3がだいたい解ける。あとは細かい補題を示すだけ。
  • 五十嵐先生の講義を聞くために大学への移動する。
16:00ごろ
19:00ごろ
  • 問題にある疑似コードをそのままCoqに落すのは無理だね、という結論に至る。
  • 眠気が限界なのでラーメンを食べて帰宅。
  • ちょっと休憩してProblem1に取りかかる。
  • 疑似コードをそのまま扱うのは諦めているので、ループ+破壊的代入の疑似コードを再帰に書き直してCoqで定義する。
22:00ごろ
  • 翌日に備えて、早めに就寝。

三日目

8:00ごろ
  • 起床。Problem1の続きを始める。
  • 関数Coqっぽくしてるので、特に問題なく進む。
13:00ごろ
  • Problem1証明終了。
  • メールチェックをするとpirapiraさんがProblem4をhirose_golfさんがProblem2を解き終わっていた。このひとたちすごい。
  • 残っているProblem5にとりかかる。
18:00ごろ
20:00ごろ
  • @さんと@さん、@さんとご飯と食べる。
  • 「お前のやっているのは競技証明であって、競技プログラミングではない」との中傷を受ける。 必死になってカリーハワード対応について説明したけど、理解してもらえなかった。
22:00ごろ
  • 帰宅。 Problem5を解くのを完全にあきらめる。
  • yoshihiro503さんと現状を確認して、投稿の準備を始める。
23:00

感想

  • めちゃくちゃ楽しかった。次もぜひやりたい。
  • 他のメンバーの証明能力がハンパなくてびびる。
  • 夜って意外と短かい。

2011-09-28(水)

ProofSummit 2011 で『CoqによるMsgPackシリアライザの証明と実装』という話をしました。

ProofSummit 2011 で『CoqによるMsgPackシリアライザの証明と実装』という話をしました。を含むブックマーク

ProofSummit2011MsgPack証明したときの話をしてきました。内容は名古屋Reject会議で話したことを膨らませた感じになっています。

話の趣旨としては「バグって怖いじゃん → じゃあ証明しようぜ → やってみた」みたいな感じです。

スライド

ustream

http://www.ustream.tv/recorded/17493318

感想

2011-08-06(土)

gitとRedmineと連携させるgitサブコマンド: git-ticket

 gitとRedmineと連携させるgitサブコマンド: git-ticketを含むブックマーク

git + Redmineで開発する場合、Redmineのチケットごとにトピックブランチを切ることが多いですが、ちょいちょいチケットの内容を忘れてしまいます。 そういうときに、いちいちブラウザでチケットを見にいくのがダルいので、チケットのサマリを表示するgitのサブコマンドを作りました。

なお、本コマンドはbleis-hooksと併用することを想定しています。

インストール方法

git ticket subcommand — Gist からダウンロードし、パスの通ったディレクトリに配置してください。

$ wget https://raw.github.com/gist/014371584dbf85d053ed/f8ade6f7fc36a4c8f49f72a538a6322bfb726bf8/git-ticket
$ mv git-ticket /path/to/some/dir
$ chmod a+x /path/to/some/dir/git-ticket

Ruby1.8の場合は、json gemインストールしてください。

$ gem install json
$ export RUBYOPT=rubygems

初期設定

redmineURLとapikeyを設定してください。

$ git config --global redmine.url https://example.com/redmine/
$ git config --global redmine.apikey some_api_key

使用例

登録されているチケット

f:id:mzp:20110807001129p:image

1) git ticket <チケット番号>

id/<チケット番号>というトピックブランチを作成し、チケットのサマリを表示します。

$ git ticket 701
Switched to a new branch 'id/701'
Author: Ban Jun
Date:   2011/08/06 21:51:13 +0900

iPhoneアプリに戻るボタンとリロードボタンをつける
#693 関連
2) git ticket

トピックブランチにいる場合、対応するチケットのサマリを表示します。

$ git ticket
Author: Ban Jun
Date:   2011/08/06 21:51:13 +0900

iPhoneアプリに戻るボタンとリロードボタンをつける
#693 関連

似ているもの

パクッテナイヨ

2011-06-12(日)

Jenkinsのビルド結果をリアルタイム通知するプラグイン『Jenkins Websocket Notifier』を作りました

Jenkinsのビルド結果をリアルタイム通知するプラグイン『Jenkins Websocket Notifier』を作りましたを含むブックマーク

追記: 公式プラグインになりました。Websocket Plugin - Jenkins - Jenkins Wiki

f:id:mzp:20110612204327j:image

「pollingが許されるのは小学生までだよねー キモーイ キャハハハハハハ」というわけでビルド結果をpush通知するJenkinsプラグインを書きました。

特徴

インストール方法

  1. https://github.com/mzp/unageel/archives/master からwsnotifier.hpiダウンロードする。
  2. wsnotifier.hpiJenkins の管理 > プラグインの管理 > 高度な設定 > プラグインアップロード からアップロードする。
  3. Jenkins の管理 > プラグインの管理からWebsocket Pluginをインストールする。
  4. Jenkins再起動する。

設定方法

Jenkins の管理 > システムの設定 > Websocket Notifier で Websocketサーバを起動するポート番号を指定します。

f:id:mzp:20110612204332p:image

(プロジェクト名) > 設定 > ビルド後の処理 でWebsocket Notifierのチェックボックスをオンにします。

f:id:mzp:20110612204331p:image

利用例 その1: Chromeエクステンション

f:id:mzp:20110612204330p:image

Jenkins のビルド結果を通知する Chrome エクステンション作った - mallowlabsの備忘録 を改造して、Websocket Notifierに対応させました。 使い方・機能は変っていませんが、通知速度が格段にあがっています。

パッチはすでに本体に取り込まれているので、インストール方法等はリンク先を参照してください。

利用例 その2: iPad/iPhoneのXFD化

f:id:mzp:20110612204326j:image

WebsocketはJavascriptで簡単に扱えるので、ビルド結果によって背景色を切り替えるWebページも簡単に作れます。これをiPad/iPhoneで表示すれば、iPad/iPhoneテスト結果を通知するXFD(eXtream Feedback Device)として利用できます。

<html>
  <body bgcolor="red" id="bg">
    <script>
      var elem = document.getElementById('bg');
      var ws = new WebSocket('ws://localhost:8081/jenkins');
      ws.onmessage = function(msg) {
          eval('var obj = ' + msg.data);
          if(obj.result == 'SUCCESS'){
              elem.bgColor = 'green';
          }else{
              elem.bgColor = 'red';
          }
      };
    </script>
  </body>
</html>

http://github.com/mzp/unageel/blob/master/xfd.html

利用例 その3:ダンボーのXFD化

f:id:mzp:20110612204327j:image

上記の応用でビルド結果に応じてダンボーの目の色を変えることができます。

ダンボー本体はよつばとリボルテック リボルテックダンボーを、目の色の制御にはArduinoをはじめようキットを使っています。 目には大須で買ってきたフルカラーLEDを仕込んでいます。

技術的な話

  • ws://localhost:8081/jenkins に接続するとJSON形式でビルド結果が飛んできます。
  • ポート番号は設定によって変更可能です。
  • ビルド結果は{ "name" : "test", "result" : "success", "number" : 1 }のような形式です。

お礼

kkawakkawa 2011/06/13 10:31 これは素晴らしい!
ぜひJenkinsコミュニティのリポジトリでホストして、公式アップデートセンターに公開しませんか?お手伝いさせていただきます。

よつばよつば 2011/07/29 21:56 ダンボーかわいいですね^^
手先が器用だったらこうゆうのが作れるのになぁ・・・