「出張 Shibuya.js 24」に行ってきました

9/15(土)に開催された mozilla 24出張 Shibuya.js 24 を見に行ってきました。


twitter のオフ会かと思われるほど twitter やってる人の参加率が高かったと思われるイベントでしたが、僕は残念ながら誰が誰だか分かりませんでした。mozilla 24 の 1 コーナーという位置づけからか、18:30 開始だったので、余裕を持って向かえたのがよかったです。


以下、簡単な感想(敬称略)。資料は Shibuya.js のサイト で見れます。

メーントーク

INSIDE Gecko by gyuque

Firefox 等のレンダリングエンジン Gecko の話。内部的にどのような処理をしているかとか表示される順番とか、興味深かった。Firefoxソースコードをダウンロードした人やコンパイルしたことのある人が結構多かったのが印象的でした。

AutoPagerize by swdyh

便利すぎるというかずっと使っていると存在を忘れてしまうくらい使いやすい AutoPagerize の人の話。swdyh さんだが、頭の中で勝手に「スウェディシュ」と呼んでしまっていたのと撮影している写真の印象から、北欧系の涼しいイメージを持っていたが、実際はアルファベットをそのまま読むらしい。


発表は AutoPagerize の技術的な説明だけでなく、プログラム + wiki の可能性というおもしろいテーマだった。専用の wiki を作りたいとのことだったので、是非期待したいところです。


AutoPagerize は、便利に使わせてもらっていますが、wiki に接続するついでに最新のバージョンかどうか確認して、アップデートされたら、インストールを促してくれるとさらにいいなと思っています。

新世代ブラウザのクロス開発まとめ by id:amachang

時間がなかったので、飛ばし飛ばしだったらしいが、あまりマニアックなメソッドを使ったことがないので、初めて聞く話ばかりでした。目立ったメソッドごとに、FirefoxOperaSafariIE 間で比較しているので、時折見直させてもらうと良さそうなスライドでした。それから Safari 3 は 2 と別ブラウザでおすすめらしい。

JS の JS による JS のためのマルチスレッド by D.Maki

JavaScript でマルチスレッドを実現するために、JavaScriptソースコードからソースコードを生成するライブラリの話。すごい。


よく分からなかった単語のメモ

  • けいぞく
  • トランポリンスタイル

ライトニングトーク

ECMA Script4 リファレンス実装 by Yu Kobayashi

企業のからみとかでなかなかまとまっていないらしい。

5 分で分かる Photoshop の正しい使い方 by cho 45

$X の人。シェルからコマンドで Photoshop を操作していました。技術的な説明のところで終わってしまい、後から資料を見てみましたが、ちょっとよく分からなかった。

jQuery つまみぐい by send

JavaScript ライブラリの jQuery の話。使ってみたい。

SHA-1 の高速化 tips by へるみ

JavaScript を高速化されるための心構えと方法の話。マニアック編では、IE に比べて Firefox の整数の扱いにネックがありそうということで調べたら、32 bit の整数を扱う時の malloc に時間がかかるので 32 bit を扱わないようにする、と言っていました。おもしろかった。

facebook.js by kawa.net

facebook ではユーザがアプリケーションを作って公開できるが、対応させるのはまだまだ難しいという話。facebook でそういうことができるとは知りませんでした。

JavaScript.GIF by id:TAKESAKO

ミサイルランチャーは在庫処分で 980 円らしい。想像以上に安くてびっくりしました。

ustreamJSONP Loader by mala

メインは Bloom filter の話であったが、前半のはてなの話がおもしろかった。スライドがきれいになっていました。

追記

del.icio.us のブックマークの方に id:swdyh さんから直接コメントを頂きました。

「北欧系、スウェディシュ」。更新通知はGM自体かそれ用拡張がやったほう が良いと思う。

ごもっともですね。GM の更新通知という共通の機能を個別に実装するのは確かにばかばかしい話で、一時的に実装したとしても、最終的には専用のなにかとして抽出するのがきれいな形ですね。

LL魂に行ってきました

8/4(土)に開催されたLight Weight Language 魂に行ってきました。タイムテーブルを見れば分かりますが、各言語の最新情報、言語の作り方、VM 上の LL、といった感じにテーマがはっきりしていたので、分かりやすかった。


会場で twitter を見てたら、otsune さんがこんなことを書いていたのですが、その後あんなことになるとは思いませんでした。

公式チャットなのに人があまり居ないな… LL魂チャット (at Lingr) http://www.lingr.com/room/ll-spirit

http://twitter.com/otsune/statuses/185646232


全体的な感想。

  • id:amachang のプレゼン資料にびっくりした
  • otsune さんが大活躍だった
  • xtal の作者がおもしろかった。使いたくなった。


聞き逃しが多々ありますが、以下、簡単なメモと感想です。なお、こちらに詳細なレポートがありました。すごい。

基調講演

ハッカー気質について - 和田栄一さん

ハードウェアのハックということで、古典的なハードウェア(楕円を書けるコンパスなど)の話をしていて、内容はほとんど理解できなかったのですが、ハードウェアといったら、コンピュータのハードウェアしか想像できなかったので、そういえばこういうのすごく楽しそうだよな、と思いました。それから、PostScript の話になったところで、「私はファイル開いて最初にパーセントビックリ(%!)って書きますからね」と言っていたのですが、ビックリっていうのがかわいかった(普通の読み方なのだろうか)。

  • ハッカーというのは、みんなで何かを作る人というよりは、ひとりで苦労して作る人という感じがする。そして、自分から言う人ではなく作ると周りが認めてくれる人
  • ハードウェアの紹介(楕円を書けるコンパス、積分器、微分解析器などを紹介していました)
  • ソフトウェアハック
    • スピーカーを揺らして音を鳴らしていた話

Language Update

Io、Clean、R、Lua については全くしらなかったので、まとめて聞くことができて有意義でした。特に Lua については、速いということで、この後のプレゼンでも何度も出されていたので、ちょっと気になる言語になりました。

Perl - 小飼 弾さん

Perl 6 ではなく、Perl 5.10 の新機能の紹介でした。今年は5.8.9、5.10、6.0(仕様)が出るそうです。


ブログにスライドが置いてあります。Perl の新機能を見渡せていいです。
http://blog.livedoor.jp/dankogai/archives/50885751.html

Io - 浜地 慎一郎さん

シンプルな言語だそうです。不気味な文法と連発していた。

  • Io とは?
    • プロトタイプ型
    • 何でもオブジェクト
  • 文法がシンプル
    • キーワードの数が少ない
  • 何でもメッセージ
    • if も関数
    • unless を自分で作れる
  • 多重継承や Concurrency を見てみるとおもしろいのではないか
Clean - lethevert さん
  • どんな言語?
    • haskell に似ている
    • 実行効率、開発効率がよい
  • Intel Mac は次のバージョンから動く
PHP - Seiji Masugata さん
  • 叩かれる宿命
  • PHP カンファレンスやります
R - 樋口 千洋 さん
  • 特徴
    • S の無料版ではない
    • バージョンアップが頻繁
    • ベクトルが基本
    • オブジェクト指向
    • 組み込みのデータ型が良い(?)
Python - 柴田 淳 さん
  • どんな言語?
    • オールレンジ言語
    • 実務に使える
    • クリーンな言語仕様
      • インデント
      • 一つのことをするのに一つの方法しかない
    • 明確なロードマップ
  • 国内の話
Lua - 上野 豊 さん

よく分からなかったが、階層構造のデータをすっきりかけるという感じでしょうか。それから、プログラムというのは、マシンを制御するための道具ではなく、別の思想空間であるというようなことを言っていました。

  • 特徴
    • 小さい
    • Pascal に似てる
Ruby - まつもとゆきひろさん、笹田 耕一さん

ネタでした。

おれ様言語の作りかた

最もおもしろいセッションでした。質疑応答では、なでしこに質問が集中し、日本語プログラミングへの注目が分かりました。xtal の作者がおもしろかったのですが、まつもとさんが、「憧れている、Ruby の機能を取り入れてるのだから当たり前だが、Ruby で後付けした機能(eachなど)が組み込まれているのがいい、C++ でかいているのがすごい、将来が楽しみ」と言っていたのが印象的でした。オブジェクト指向言語オブジェクト指向言語を実装するのは、混乱するので Ruby は C で書いているとのことでした。また、Sukune の元になった Forth という言語も初耳でした。


それから、司会者の質問に答えて、まつもとさんが Ruby の前に作った言語の話をしていた。話によると、Classic という名のオブジェクト指向言語で、語源は C に Class を加えたから、プロファイル機能(private、protect、public のような誰に公開するかを自分で指定できる機能)があったが使い物にならなかったそうです。

VM

Javaと.NET上で動く LL のお話。マイクロソフトとサンのいろいろな思惑があるようです。とりあえず、処理系をまとめると次の通り。

なんで VM 上で LL なのか?という問いに、Java で大規模開発をしている人にも LL を知ってもらいたいとか、Java .NET ライブラリをちょっと試したい時に便利という答えが多かったが、結局エンタープライズと LL の関係はそういう風で、開発中にしか使われないのかな。


本題ではないが、フィボナッチ数列の可聴化と称し、テクノっぽいシーケンスを鳴らしていた西尾さんのデモがかっこよすぎだった。

キミならどう書く 〜プレゼンソフトを作る〜

それぞれ言語を指定されて、プレゼンソフトを作り、作ったソフトで発表するという企画。冒頭でも書いた通り、id:amachang の資料がすごかった。keynote かと思いました。また、id:amachang のプレゼン中に出てきた GRDDL という仕様を初めてしりました。


それから、Gauche で作成された小黒さんのプレゼンソフトがすごかった。なにがすごいかというと、データを VNC サーバに置いておいて、それにブラウザ上の Flash が接続して表示している。で、データにバグがあったら接続できますと言って、telnet で接続してた。データにバグがあるというのがまず意味不明なのだが、さらに Lingr の投稿をリアルタイムに表示できるということで、実際に表示してみたものの、会場からは接続できなかったので、表示されなかったのですが、突然 otsune さんの書き込みが表示されて大爆笑でした。その後、Lingr と司会者で会話したりしてました。手を挙げて質問しない人も Lingr を使って質問するということはあり得るんだなと思いました。

Lightning Talk

いろいろ

フジロックの雰囲気を味わえる気がするツールを作りました


今週末はフジロックフェスティバル '07があります。僕の周りでも行くという人はちらほらいるのですが、僕は行けなかったので、せめて雰囲気だけでも味わおうとこんなものを作りました。


Fuji Rock Festival in my RoomFirefox でしか動きません)
http://lab.satoship.net/fujirockfestival_in_myroom/

これは何?

使い方は?

  • 左側にアーティスト一覧があります。その一覧からアーティストを選択すると、そのアーティストの動画が右側に表示されます。
  • 動画の左横に曲の一覧があります。自動的に再生された動画以外の動画を見たい場合は、曲の一覧の中から聴きたい曲を選択してください。
  • 動画の再生が終わると、次のアーティスト(現在選択されているアーティストの下のアーティスト)に移動し、自動的に次のアーティストの動画が表示されます。

もう少し詳しい説明

  • アーティストの一覧は、公式ページのアーティストラインナップから作成しています。ステージ順、日付順に並んでいます。
  • 曲の一覧は、「(アーティスト名) + live」をキーに YouTube を検索し、1 ページ目の 10 件だけを取得し、そのタイトルを並べています。
    • よって、曲の一覧内の動画が選択したアーティストのものである保証はありません。また、上記の理由より、表示される曲の一覧はあまり変わらないと思います。
  • アーティストを選択したときに、自動再生される動画は、曲一覧の中から毎回ランダムに選択しています。

注意することは?

  • Firefox でしか動作しません。ごめんなさい。いずれ対応したいと思っています。
  • 日本語のアーティストはうまく取得できません。
  • 動作が不安定です。おかしな動きをしているような気がしたら、ページを再表示してみて下さい。
    • 特に状態管理がとてもあやしいです
    • 検索結果が 0 件のアーティストに移動すると、そこで止まります
  • レイアウトが偏ってて変なのは、ボタンとか画像を配置予定のためです

技術的な話

  • アーティスト一覧のリストはサーバ上から取得していますが、その他は JavaScript だけで処理しています
    • アーティスト一覧のリストも、dapper を使って json で取得したかったのですが、よく分からなかったので、とりあえず諦めました。
  • YouTubeAPIXML を返すので、pipesjson に変換して使っています

その他

  • Flickr の関連画像を下の方に表示してもっと雰囲気を味わった気になりたい
  • IE で表示できるようにしたい
  • 日本語のアーティストも検索できるようにしたい
  • 来年は現場に行きたい
      • -

2007/07/27 追記

  • アーティスト一覧を修正しました。

はてなブックマークの追加画面で、おすすめタグの中から自分の使っているタグだけを目立たせる Greasemonkey スクリプト

こんな感じになります。


目立たせるといいながら、地味な下線が引かれているだけですが、上の画像の場合、"internet" と "news" と "search" と "web" と "yahoo!" は、僕が以前に登録したことのあるタグであることを表しています。


おすすめタグに、単数形と複数形(例、"lifehack" と "lifehacks")や、スペースがあるものとないもの(例、"google calendar" と "googlecalendar")が並んでいる場合、自分が使っているタグを確認しないと、似たようなタグが増えかねません。下にスクロールして確認すればいいのですが、それが面倒なので作りました。


スクリプトはこちらになります。
http://lab.satoship.net/js/hb_highlight_mytags.user.js

// ==UserScript==
// @name          hb: highlight mytags
// @namespace     http://d.hatena.ne.jp/satoship/
// @include       http://b.hatena.ne.jp/add*
// @version       1.0
// ==/UserScript==

(function() {
    var my_onload = function(){
    with(unsafeWindow){
        var div_othertags_list = $('othertags_list');
        var spans_othertags = $A(div_othertags_list.getElementsByTagName('span'));

        spans_othertags.each(function(span_othertag){
        var my_tag = tags.find(function(v){
            return v == span_othertag.innerHTML;
        });

        if(my_tag){
            with(span_othertag.style){
            borderBottom = "1px dashed #777777";
            }
        }
        });
    }
    };

    unsafeWindow.addEventListener("load", my_onload, false);
})();

Python Workshop the Edge 2007 に行ってきました

6/30 に開催された Python Workshop the Edge 2007 に行ってきました。


Python のことは、作者が Google にいるという程度のことしか知らないにも関わらず参加してしまったのですが、このイベントで、Python の他のスクリプト言語と比べた特徴や、開発環境、Web アプリケーション用フレームワーク、周辺の雰囲気などをなんとなくつかめたので、有意義な一日でした。


以下、参加したセミナーの感想とメモです。

荷電粒子加速器制御システムでのPythonの活用 - 山本 昇さん

高エネルギーがなんのことか理解できず、全くついていけないまま終わってしまいました。なぜ Perl じゃなくて Python を?という質問に、Perl は読みにくいが、Python は分かりやすいというのもあるが、実際は私の趣味と答えていました。

CG映像制作とPython 株式会社セガ VE研究開発部での事例 - 齊藤 淳さん

セガの VE(Visual Entertainment)研で CG を作成している斎藤さんの発表。CG 界では Python が標準らしいです。そうだったのか。

VE 研について
  • エンジニアを多く抱えている。12 名。(業界では珍しいらしい)
  • 海外に追いつきたい
  • CG 業界
    • Python が大活躍。海外の大手スタジオでも使われている
    • ツールは Maya
Maya について
  • 3D ソフト
  • VE 研のメインツール
  • 拡張性
    • MEL というスクリプト言語がある。複雑なことには向いていない言語仕様。
    • Python が使えるようになった
  • Python の恩恵
  • Python の不満点
    • GUI。Maya の GUI を使うことになるので自由度が低い(?)
    • 不安定
Plone による情報共有
LL についてその他の話題
  • C++Python でコンポジットツール(?)を開発している
  • デジタルアセット管理システム(?)
    • 分業、データの受け渡し、バージョン管理
    • Ruby on Rails を使用
  • ゲーム開発にも Python は有用
  • セガは全体的に Python 率が上がっている

Pythonコード添削道場

きれいで読みやすくて分かりやすくおもいやりのあるコードを書くためのお話。Python のコードを書いたことがない時にこのような発表を聞けたのは良かった。基本的な考え方は、どの言語でも同じだろうけど、Python のコーディングスタイルには PEP 8 というのがあることや、PEP スタイルを学ぶために、標準モジュールを読むといいということを知りました。

教育現場におけるPython の利用 - 菊池 靖さん

大学でプログラミングの授業をしている菊池さんのお話。単位がもらえればいいというモチベーションの低い学生や旧態依然としたカリキュラムに困っているが、次の点で Python を採用しているそうです。

  • 学習しやすく、かつ実用性もある
  • インデントがそろってないとコンパイルを通らない、可読性が良い(教員のため)


僕も、情報系ではありませんが、不真面目な学生だったので、複雑な気持ちでした。

プロジェクトにコンパイルはいらない - エマーソン ミルズさん

YAPC で Amazon の EC2 を紹介していたエマーソンさんです。新しく会社を作ったらしい。で、開発人生を劇的に変えたというスクラムのお話。

スクラムとは?
主概念
  • プラットフォームは進化する
  • 常にコミュニケーション
  • 開発をより人間的に
  • ユーザの意識、参加
  • 開発プロセスに客の声を取り入れる(最初と最後だけじゃなくて)
非滝的(非ウォーターフォール的)
  • スペックは途中で変わる
    • 期間の長いプロジェクトはスペックがずれる。ニーズが変わる。
  • タスクを同時変更
    • デザインしながら開発
    • 予算・期間・開発を満たす
    • トヨタ方式
  • 失敗を許す
    • バグの洗い出しにつながる
プロジェクトの抽象化
  • 開発を楽しくする
  • 細かいスペックよりゴールを決める
  • スケジュールは小・中・大・特大に
Python との関係
  • 抽象化
  • 開発サイクルの短縮
スクラムのここが違う
  • スケジュールの見直し
  • 開発チームが中心
  • 2 〜 3 週でテスト
    • バグがあっても、長くて 3 週間で見つかる
    • 時間が経つほど、バグが見つかってもどこを直せばよいか探し出すのが難しくなる。
スクラムをやってみよう
  • 基礎
  • 流れ
    • 毎朝スタンドアップミーティング
      • 昨日やったことが分かれば重複しない
    • 毎日コミット
    • 毎晩進捗報告
  • ポイント
    • 2,3 週間のスケジュールしか組まない
    • 開発の邪魔は許さない
      • 進捗状況は朝礼に参加すれば分かる
      • 集中力が一旦途切れると開発に戻るのに時間がかかる

BOF : Python国民投票 - 原 弘さん

事前に行ったアンケートの結果発表です。気になったところのメモ。

Pythonを使い始めたきっかけを教えて下さい。

モンティーパイソンの本だと思って買ったら Python の本だったという回答が!

Pythonを使うときのプラットフォームを教えて下さい。
  1. Linux
  2. Windows

OSX は思ったより少なかった。

一番お気に入りのPython Webアプリケーション・フレームワークを教えて下さい。
  1. Django
  2. TurboGears
  3. Zope

の順だったかな。

Pythonでの開発環境を教えて下さい。
  1. Emacs
  2. vi

Emacs が多かった。

Pythonを最も活用している場面を教えて下さい。
  • CG 業界では標準
  • 社内教育。インデントしてくれない新人教育に。

どちらも今日のセミナーに通ずる内容でした。

Pythonのどこがすきですか?
  • ライブラリがしっかりしている
  • 一つのことをするのに一つの方法しかない(Perl の逆)
  • 誰が書いても同じようになる

そういえば、DHH は Ruby に同じようなことを行っていました。

Rubyで書いたものはどれも,同じことをする場合はだいたい似たように見える。この「統一感」がすごく重要でした。

#2 Ruby on Rails作者 David Heinemeier Hansson(前編) RubyでRailsを書いたわけ:小飼弾のアルファギークに逢いたい♥|gihyo.jp … 技術評論社
Pythonのここらへんどうにかしてほしいってところありますか?
  • 日本のユーザが増えて欲しい
  • サードパーティライブラリのレポジトリが欲しい(CPAN のような)
  • 文字コードの扱いをしっかりして欲しい
  • 日本語の書籍をもっと欲しい
Pythonのdebug方法を教えて下さい。
  • print 文
  • pdb

色々なデバッグ方を知りたかったが、みんな同じなんだな、とのことでした。

あなたのPythonの情報源やお気に入りのWebサイトを教えて下さい。

常山日記 を挙げていた人がたくさんいたとのこと。


pyObjC で SkypeBot をつくってみよう - ひらた だいじさん

OSXSkypeBot を作ってみようというお話。

Python on Mac OSX
Skype について
  • P2P
  • VOIP
  • ボイス機能以外に、チャット・グループチャット機能が強力
  • API がオープン

その後、実際に作る説明に入りましたが、内容は省略。TwitterPod などを作っている drikin さんのhttp://drikin.com/dorio/を参考にしたそうです。

livedoor Reader の「既読にする」をショートカットキーに割り当てる Greasemonkey スクリプト

「既読にするタイミング」を「手動」にしているので作りました。"t" に割り当てています。


次のサイトを参考にしました。

http://lab.satoship.org/javascript/ldr_keybind_t_touchall.user.js

// ==UserScript==
// @name          LDR: keybind t touchall
// @namespace     http://d.hatena.ne.jp/satoship/
// @include       http://reader.livedoor.com/reader/*
// @version       1.0
// ==/UserScript==

(function(){
	var w = unsafeWindow;
	var _onload = w.onload;

	var onload = function(){with(w){

		Keybind.add("t", function() {
			if(State.now_reading) {
				touch_all(State.now_reading);
			}
		});

	}}
	w.onload = function(){
		_onload();
		onload();
	}
})();

livedoor Reader のフィード検索で、タイトルだけじゃなく URL も対象にする Greasemonkey スクリプトを作りました

読みたいフィードを検索しようとする時、タイトルよりも先に URL が浮かんでしまうことが多いので作りました。URL に含まれているユーザ名で検索したい時とか、あるサービスのフィードだけを検索したい時にも便利だと思います。


次のサイトを参考にしました。


インストールにはこの Greasemonkey スクリプトがとても便利です。

ldr_add_linkfilter_to_finder.user.js

// ==UserScript==
// @name          LDR: add "link filter" to "Finder"
// @namespace     http://d.hatena.ne.jp/satoship/
// @include       http://reader.livedoor.com/reader/*
// @version       0.1
// ==/UserScript==

(function(){
	var w = unsafeWindow;
	var _onload = w.onload;

	var onload = function(){with(w){

		Subscribe.Controller.prototype.add_filter = function(q){
			var filter = function(item){
				return contain(item.title,q) || contain(item.link,q)
			};
			this.filter = function(model){
				return model.filter(filter)
			}
		}

	}}
	w.onload = function(){
		_onload();
		onload();
	}
})();


livedoor ReaderJavaScriptソースコードは、いつか読んでみようと思いつつも量がたくさんあるので、まとまった時間が取れる時に読もうと後回しにしていましたが、いざ読み始めると、とてもきれいに書かれていて読み易かった。低レベルの部分はそうでもないかもしれませんが、このような機能を追加したいだけなら、割とすぐに該当箇所が見つかるのではないでしょうか。「まるごとPerl! Vol.1」の記事を読んだので、ある程度知っていたというのもありますが。


高度なことをしているのに、読み手には易しいといのが、とてもすばらしいと思いました。インデントもされているし、コメントも少し入ってるし、ファイル名にバージョン番号が付いているので、変更されたら分かり易いし。