YAPC::Asia Tokyo 2011 で Acme::MineChan を発表してきました

毎年恒例のPerlの大祭YAPC::Asia Tokyo 2011ですが、今年はちょっと趣向を変えて「Acme::MineChan」というマインスイーパを自動で解くプログラムを発表してきました。

お急ぎの方はこちらLT版の録画を

最終日2日目のLightning Talksの一番最後に少し時間をもらって簡単なデモをさせていただきました。

Perlで無理ゲーム攻略(1秒でマインスイーパを解く)

以下の録画の9:00ぐらいからデモを開始していて、途中1秒でマインスイーパを解けていますが、これはたまたま(マグレ)です。事前にいくら試しても早くて3秒2秒ぐらいだったので、本番で運が良かっただけでした。

元々応募していたのは「Perlで無理ゲーム攻略」という20分の発表で、Win32::GuiTest や Win32::Screenshot などのモジュールを利用して、Windows上で動作するゲームを自動でプレイするPerlプログラムを作成する方法について解説しました。
Windowsには元々キーボードやマウスを操作するAPIがあるので、それをPerlから利用してアプリケーションの操作を自動化しよう、という趣旨の発表でした。
スクリーンキャプチャを利用すれば、どんなアプリでも自動化できる、ということで、一番わかり易そうな例としてWindows付属ゲームのマインスイーパを攻略してみました。

マインスイーパの上級(爆弾99個)を37秒でクリアしたときのスクリーンショットです。

minesweeper hard mode (37sec)

Windows付属のMinesweeperにはXyzzyという有名なチート方法があるのですが、今回それは利用していません。
純粋にスクリーンキャプチャからパネルの状態を画像マッチで判別して、どの場所をクリックして解いていけばよいかをプログラミングしています。

ベストトーク賞2位(副賞:Mac mini)

I got a Mac mini!
Mac mini (Core i5 + OS X Lion)

YAPC::Asia 2011 ベストトーク賞2位の副賞として Mac mini をいただきました
今まで Mac の環境自宅で使ったことなかったので、WindowsだけでなくMac環境も自動化するべくしっかり活用させていただきたいと思います。ありがとうございます。
しかし事前に公表されていた副賞のスペックは2.7GHz Dual-Core Intel Core i7、8GBメモリ、HDD 500GB、MacBook Air SuperDrive付
ということだったのですが、当日受け取ったMac miniはCore i5のモデルでした。詳細を確認しようかと思ったのですが、最近はAppleは細かいモデル番号からスペックを検索できなくなってるんですね。
おかしいなーと思って中身を確認してみたら、ちゃんとCore i7が入っていました!すみません!一番いい装備で頼まれていました!どうやらパッケージの印刷がCore i5だけだったようです。私の勘違いでお騒がせしました。

モニターは自宅のLCD2690WUXI2が使えそうだったので、細かいことは気にせず、新しくMac用のキーボードとワイヤレスマウスを入手できたので、活用させていただきたいと思います。
今まで自宅でMac環境を使ったことがなかったので本当に嬉しいです!

VNC::MineChan (by gugod)

Hackathonで一緒になったgugodは、自分でVNCプロトコルをハックして
Auto-solve Minesweeper via VNC を開発していました。
台湾の繁体字バージョンのMinesweeperの画面です。

動画はMacからVNC経由で操作しているデモです。使っている画像マッチモジュールが違うため少し動作は遅いようですが、理論上Win32以外のOSでもVNC Serverが動けばリモートで自動化することができることがわかりました。

Acme::MineChanの公開について

Acme::MineChanは部品の画像を元にマッチングしてパネルの状態を把握しているのですが、それにマインスイーパをキャプチャした画像ファイルが含まれているため再配布は一旦停止しています。
gugodにはHackathonでその件を聞かれたので個別にソースコード一式を手渡しました。一番大変だったのは8のパネルの画像を出すことでした。あと、Windows7のマインスイーパはまだ攻略していません。
画像にグラデーションの処理がかかっているので、厳密な画像マッチでは対応できないためでした。
今回攻略したのはWindows95/XP付属のマインスイーパと、チート対策が施されたMinesweeper Clone 2007です。
今後、時間があれば曖昧マッチで画像位置を割り出せるようなPerlモジュールの開発をしてみようかと思います。
興味のある人は声をかけてください。

素敵なまとめ(英語)

こうして世界中のPerlハッカー達と技術交流できるYAPC::Asiaは大変素晴らしいイベントだと思います。運営・発表・参加していただいた皆さん、本当にありがとうございました!

カテゴリー: YAPC

YAPC::Asia 2010 Tokyo に参加して

10/14-15、東工大の大岡山キャンパスで開催された「YAPC::Asia 2010 Tokyo」に参加してきました。
いくつか手持ちのデジカメで写真を撮影しましたので、それらを交えながら自分の発表を中心にレポートしたいと思います。

■ Day 0 – 前夜祭 (10/13)

P1040355.JPG
Free Beer

前夜祭ではPerlCasual#4のイベントが開催されていましたが、
入り口のロビーでビールが振舞われ、日本語のわからない海外スピーカの方も和気藹藹と楽しんで行かれたようです。
yusukebeさんも一発表者としてではなく運営側に立つと真面目になるんだなぁという、意外な一面も垣間見れたりしました。

■ Day 1 – Lightning Talks (10/14)

絶対コケるなよ!
P1040430.JPG

初日のライトニングトークの一番最後に「That Goes Without Alpha-Num (or Does It?)」という内容で発表させていただきました。
元々は「all your base10 are belong to us」という発表タイトルを予定していたのですが、
朝一番のLarry Wallさんのkeynoteで「That Goes Without Saying (or Does It?)」という発表で他のプログラミング言語を紹介されていましたので、
急遽タイトルを変更し、スライドの構成を変えました。

発表スライドはslideshareに、動画はyoutubeで公開されています。

LTの途中で披露したコンソールでgccでコンパイルして実行するデモは、ttyrec録画したものをTeraTerm+ttyplayで再生しています。

二日目のnipotanさんのライトニングトークで、シャッフルするコードで使える文字を禁止して何とかプログラミングをするという発表がありましたが、
最初にアルファベットをすべて使用禁止した状態でさらにどの記号を削減するか、というスタートラインが違うだけで、基本的にはやりたいことは同じです。

わかりやすくPerlの例で説明すると、

sub{print’YAPC!’}->();

ここで使われているsub、print、YAPCのアルファベットの使用を禁止してみますが、evalでできてしまいますね。

eval"\x70\x72\x69\x6E\x74\x22\x59\x41\x50\x43\x21\x22";

全部のアルファベットを使用禁止にしたらどうなるんでしょうか? → それ、Acme::EyeDropsでできるよ

”=~(‘(‘.’?’.'{‘.(‘`’|’%’).(‘[‘^’-‘).(‘`’|’!’).(‘`’|’,’).’"’.(‘[‘^’+’).(‘[‘^’)’).(‘`’|’)’).(‘`’|’.’).(‘[‘^’/’).’\\’.’"’.(‘{‘^’"’).(‘`’^’!’).(‘{‘^’+’).(‘`’^’#’).’!’.’\\’.’"’.’"’.’}’.’)’)

ということなのですが、Acme::EyeDropsでは記号32種類が全部使われるのでもっと少なくしたいです。というわけで必要文字種類をさらに24個減らして、

""=~(("(””””'(””=)"|"(=)”=))’)(”)’|)"^"~~())(=’|(^)^’|~~")^("~~~~~~~~’~)~’~’~~"^"~~~~~~~~~~=~=~~~~"|"~~|~|~||)^’^())~~"))

"(^=~)|’の8種類の文字を組み合わせるだけで、任意のPerlコードを実行することができました。
Brainf*ckは+-[]<>.,の8種類ですが、PerlはBrainf*ckと同様8種類の記号の組み合わせでチューリング完全ということがわかりました。よかったですね!

32bit x86では10種類の文字 %-#),[_]`~ だけを使って任意の機械語が実行できるよ!(時間が足りなかったのでデモは省略しましたが)Perlのインタプリンタも実行できるよ!
という簡単なお話しでした。

元ネタは
2006-12-19 – 兼雑記 ■[Program][Bin] プログラムは ASCII で書くべきだよ
から着想を得ています。shinichiro_hさんは4年前に既にこのようなテクニックを開拓されていて本当に偉大だと思います。

10文字オンリーのx86で任意のコードを実行できるにはEIPが取得できないので「mainの絶対アドレスが既知」もしくは「既存レジスタの値からmainの絶対アドレスを計算可能」という条件がつくのですが、
詳しくは今年11/6(土)のAVTokyo2010で内部の仕組みを発表しますので、もしも興味を持った(奇特な)方がいらっしゃいましたらぜひお越しくださいませ。

■ Day 2 – Perl6 Talks (10/15)

芝生カンファレンス
Larry Wall & Takesako @ YAPC::Asia 2010 Tokyo Day 2

2日目のトークは、Perl6正規表現に関する初心者向けの入門セッションでした。
直前の発表でRakudo Star遅すぎて使えないよとか、すっごいネガティブな発言が連呼されていて、
しかも発表時会場にはLarry Wallさんが座っていて、大変緊張しました。

基本的には5年前のShibuya.pmでPugsを紹介したときのスライドと、3年前のYAPC::Asiaでの発表と同じです。

元々のPerl6で検討されていた言語仕様も、Pugsの実装で検証が行われ、Rakudoの実装段階でさらに変わっている部分もあったので、発表スライドを修正しています。


RakudoはWindowsのmsiインストーラも用意されているので、簡単に使い始めることができます。
Perl6言語仕様のPDFファイルと以下のチートシートも付属しているので、Rakudo Perl6 REPLで1行ずつ実際に実行しながら結果を確認し、気軽に試すことができます。

Perl 6 cheat sheet v2                                                »ö«

SIGILS    MAJOR/MINOR CONTEXTS         ACCESS ARRAYS      HASHES
$scalar   item   list       sink       whole: @array[]    %hash{}
@array     Str    flat/slice         element: @array[0]   %hash{‘a’}
%hash      Num    lazy/eager/hyper       (or)             %hash<a>
&code      Bool                        slice: @array[0,2] %hash{‘a’,’b’}
                       COMPOSERS         (or)             %hash<a b>
TWIGILS                [ ] array
$normal-lexical        { } block/hash     AUTOMATIC DEREFERENCE
$?compiler-constant    < > quotewords     &($foo)(1,2)     == $foo(1,2)
$*dynamic-or-global    (,) parcel         @($foo)[1]       == $foo[1]
$.public-accessor      :() signature      %($foo){‘bar’}   == $foo<bar>
$!private-attribute    \() capture        @(@($foo)[1])[2] == $foo[1][2]
$^positional-param
$:named-parameter         CONTROL SYNTAX
$=pod-info                for LIST { }                # implicit $_ arg
$<named-match-capture>    for LIST -> $a, $b { }      # explicit args
$~slang-variable          while/until EXPR { }
                          repeat while/until EXPR { } # do at least once
OPERATOR PRECEDENCE       loop { }   loop (a;b;c) { } # parens required!
.method .[] i             if EXPR { } elsif EXPR { } else { }
++ —                     unless EXPR { }             # no else allowed!
**                        given EXPR { when EXPR { } default { } }
unary + – ~ ! ? ^         EXPR if EXPR for LIST;    # list comprehension
* / % %% div              next, last, redo            # loop controls
+ –                       proceed, succeed            # switch controls
x xx       TYPES
~          Bool Bit Int Rat FatRat UInt Num Complex int32 complex64 etc.
&          Str Cat Blob Char Byte Codepoint Grapheme Buf buf8 buf32 utf8
| ^                               IO Mu Any Cool Junction Whatever Match
sleep abs sin temp                              Parcel Capture Signature
<=> leg cmp .. but          SCOPE DECLARATORS         Pair Range Set Bag
~~ > == gt eq === eqv !op   my  lexical scope      KeyHash KeySet KeyBag
&&                         our  package scope     Scalar Array Hash Code
|| ^^ // min max           has  instance scope       Enum Order TrigBase
??!! ff                   anon  no scope at all        Block Routine Sub
= := op= =>              state  persistent lexical          Method Regex
so not                 augment  benign parasitic       Failure Exception
, :                  supersede  deadly parasitic        Instant Duration
X Xop Z Zop …                                            Date DateTime
say die map etc.  OPERATOR DOMAINS
and               Numeric: ==  !==(!=) + <      >     <=> <=     >=
or xor            Stringy: eq  !eq(ne) ~ lt     gt    leg le     ge
<== ==>             Value: eqv  !eqv     before after cmp !after !before
                 ObjectID: ===  !===
METAOPERATORS                         LINKS      IRC
[op] reduce listop to A op B op C…  perl6.org  #perl6 irc.freenode.net
op=  A = A op B                       rakudo.org #parrot irc.perl.org
!op  !(A op B)
»op« hyper/vectorize    REGEX  METACHARS          REGEX MODIFIERS
Zop  zip with op        ^ $    string begin/end   :i   ignore case
Xop  cross with op      ^^ $$  line begin/end     :m   ignore marks
Rop  reverse args       +      one or more        :g   global
Sop  sequentialize      *      zero or more       :r   ratchet
                        ?      zero or one        :s   sigspace
SPECIAL VARIABLES       **1..3 repeat in range    :4th nth occurrence
$_     current topic    ()     capture to $0,$1   :4x  n times
$/     regex result     []     no capture
$!     error object     <foo>  subrule          REGEX CHARCLASSES
@*ARGS command line     <[]>   character class  .  == anychar, \N non \n
@*INC  include path     |      parallel or      \s == <space>, \S non
%*ENV  environment      ||     serial or  &n
bsp;     \d == <digit>, \D non
$*PID  process id       « »    word boundary    \w == <+alpha+digit+[_]>

Perl5→Perl6では、正規表現も全く別言語になりました。

Perl 6 will not replace Perl 5
nekokak++

Jesseの昼のトークにあった通り、Perl6がPerl5のかわりになるわけではありませんので、焦らず安心して新しい世界観を試してみてください。

■ Day 3 – Hackathon (10/16)

YAPC::Asia 2010 Hackathon
miyagawa: "Perl is a glue between the human and the human."

今年のハッカソンは弾さんの家ではなく、hidekさんの家で海外スピーカーを囲む形で行われました。
miyagawaさんのkeynoteにあったように“Perl is a glue between the human and the human.”を感じたひとときでした。
ハッカーの集まりは楽しいですね。ホスト役のhidekさん、素敵な会場のご提供、本当にありがとうございました。

※未承諾広告※ ■「エンジニアの未来サミット for students」開催します!

YAPCの次の週のイベントと言うことで突然ですが、ちょっとだけ「エンジニアの未来サミット for students」について告知させてください。
これは、過去2回開催されたエンジニアの未来サミットのスピンオフ的な位置付けで、より若手向け、というか学生にフォーカスした新卒対象の企画になります。

10月は(YAPCの会場としてお世話になった)東工大の首藤さんがエンジニア研究者人生について語り、
11月は(YAPCの名物)小飼弾さんと(プログラマーの採用試験で一躍有名になった)岡嶋さんが語り合います。
12月はmatzさんと言語ヲタクの水島君、林君がパネルディスカッションを繰り広げる内容で、
(地方PMパネルの司会進行役だった)技術評論社の馮さんが特別モデレータを担当されます。

10月、11月、12月と3ヵ月連続開催で、記念すべき第1回目は今週末の10/23(土)です!
また若干座席に余裕があるみたいですので、今からでも遅くはないのでぜひ申し込んでみてください。
学生じゃない方の参加もできるようですので社会人の方もお気軽にお越しいただければと思います。

■ YAPC 運営を振り返ってみて

昨年の2009年度よりYAPC::Asiaの運営を引き継いでいただけるという嬉しいお申し出がJPA様からありまして、
これまで3年間続けてきたホスト役を降り、普通のスピーカとして一般参加させていただくことになりました。

思い起こせば、最初の「YAPC::Asia 2006 Tokyo」は大田区在住というつながりだけでwakatonoさんに会場手配をお願いして某方面の聖地として有名なPiOで開催しました。
当時はまだ数百人単位向けの無線LANのAP構築ノウハウがたまっておらず、安定したネットワーク接続がなかなか提供できない頃でした。
会場で思いがけないトラブルがあっても寛容に許して下さる参加者の皆さまのご協力の積み重ねによってYAPC::Asiaの運営は継続できていると思います。

2006年は大田区PiO2007年は津田ホール2008年は東工大の大岡山キャンパスと、3年間それぞれ違う場所でYAPC::Asiaを開催してきました。
その都度、いろんな方々のご協力を得ながら、イベントの開催規模も自然に大きくなってきました。
当時からスポンサー様には多大なご協力をいただいていて、スポンサー発表枠、ノベルティ提供の他に、カップラーメンやスナック菓子の提供、
ランチ軽食の提供、懇親会でのスポンサー求人セッションなど、様々な試みを試行錯誤してきました。
今考えると、毎年違う場所で開催して、スポンサー交渉、会場予約からタイムテーブルの組版、パンフレットの制作、入稿、
看板出力、資材調達、本編での発表、発表スライドの翻訳、LT、会場のタイムキープ、司会進行、写真撮影、
エンディング動画のエンコードなどなど、当日は前後の動きを含め、振り返ってみると本当によくできたな、と思います。
プロデューサのmiyagawaさんも日本国内にいないし、イベント開催当日に初めてのスタッフミーティング開催とか、いろいろ常識から考えてあり得なかったと思います。
それも大変強力な運営スタッフや、無償で協力してくれるスピーカー、多くのボランティアスタッフ、動画撮影スタッフ、エンコード職人の皆さま、
参加者の熱意、そして現在の勤務先の会社の理解、スポンサー様の多大な支援のおかげでやってこれたのだと思います。
個別にお名前は挙げきれませんが、本当に大変感謝しています。本当にありがとうございました!

従来は、元々非営利のイベントということで、oyamaさん個人に会計処理をお願いしていたこともあり、収支で翌年に繰り越す利益がでると
税金の処理が面倒になるということで、収益の一部を The Perl Foundation に寄付したり、その後、懇親会の参加費用を無料にしたり少なくしたりすることで不確定要素から生じる部分の利益調整をしてスピーカーや参加者の皆さまに少しでも気持ちを還元するようになりました。
やはり余剰金の繰り越しは大規模な非営利イベントを開催するときの一つの問題のようで、参加者が500人を超える他のイベント運営でも同様の悩みを持っている、という話も聞いたりします。

今は継続的にイベントを開催・運営できる母体としてJPAが設立され、個人でお金の入出金をする会計上のリスクやキャッシュフローの問題は解決されたと思います。
Jesseの「Perl5 is Alive!」の講演でもあった通り、YAPCの運営もPerl5のPumpkinに通じるものがあるかもしれませんね。
YAPC::Asiaの運営はこれからもこれまでも、参加者の皆さんのアツい想いと、スピーカーの皆さまのご協力と、運営スタッフの情熱の維持によって成り立っていますので、
ぜひ引き続きご協力を賜ればと思います。今年の941さんのようにイベントプロデューサーに立候補すれば、(控え目に言っても)いいことあると思いますよ!

既に来年のYAPC::Asia 2011建設予定地のページ(次の開催候補地及びプロデューサーを募集中)も出来上がっているみたいですので、
我こそは、と思った方はぜひ名乗りをあげてください。

YAPC::Asia 2010 Tokyo お疲れさまでした!

■ 参考リンク

カテゴリー: YAPC

YAPC::Asia 2008 Tokyo について(デブサミ発表資料公開)

デブサミ2008「ネットコミュニケーション2.0」(旧称:竹迫アワー)のセッションで発表したLTの資料を公開します。

「地域コミュニティに国境はないかも」というタイトルで
YAPC::Asia 2008 Tokyo
について告知を行いました。

ちょうど今年のデブサミのテーマが
「越境しよう! コードで世界を変えよう」という題目だったので、
開かれたPerlコミュニティの実例を紹介しようと思いました。

地域コミュニティとITについては、地域格差と情報格差の問題が切り離せないのではないかと
最近思っていて、それを越境するためのYAPCかなと。

Shibuya.pmのコアメンバーである
宮川さん、台場さん、エマーソンさん、佐藤さん、小山さん、上之郷谷さん、
その他、スポンサーの皆さんのご協力により開催準備をすすめています。
本当にありがとうございます。

おかげさまでYAPCメイントークのCFPは〆切までに64件のサブミットがあり、
15社の皆様よりスポンサーシップのご協力をいただいているところです。

今年は2006年に引き続き Larry Wall も来日する予定になっていますので、
ぜひお見逃しなく。

YAPCまであと一週間

YAPC::Asia 2007 Tokyo開催まであと残り一週間です。
参加される皆さん、準備の方はいかがでしょうか?

確認事項

津田ホール

今回のYAPCの会場は、前回の大田区PiOではなくって、津田ホールです。
CSS Nite LP, Disk 1の開催場所として使われた津田ホールです。
世界フィギュアスケート選手権が開催された東京体育館の隣の津田ホールです。

くれぐれもお間違えのないようにお願いします。

# 先週の Shibuya.esでは場所を間違えて秋葉原ダイビルに行ってしまった人が多数いたとか。。。

カテゴリー: YAPC

Happy Birthday 鳳たん!

今日は鳳たんの誕生日です!

Audrey Tangと言えば、Perl/Haskell界隈で知らない人はモグリと言われるほどの有名なCPAN Authorで、PAR/Pugsの作者、そして高橋メソッドを英語圏に輸出した人としても知られています。

そのAudreyたんから、Open Source Developers’ Conference in Taiwan (2006/4/8,9)で、拙作の ppencode を紹介したよという連絡が先日IRC経由で入りました。

中国語(繁体字)バージョン、テラスゴスwww

ppencode OSDC.tw version
ppencode 中国語(繁体字)版(translated by 鳳たん)

ここまで忠実に翻訳していただけるとは思ってもいませんでした。感無量です。

13:08 (audreyt) takesako:
13:09 (audreyt) as promised I delivered this over OSDC.tw
13:09 (audreyt) to a greatly amused audience
13:09 (audreyt) thanks a lot for your slides :)

Auderyたん、こちらこそありがとうございます。身に余る光栄です。

OSDC.twの写真を見るとこちらにも楽しさが伝わってきます。YAPC::AsiaのTシャツを着るingyもカッコイイ!世界のあちこちで活躍しているAuderyたんを見ると、私も刺激を受けます。来年は私も台湾に行ってみたいです。


OSDC.tw版 ppencode 発表の様子

osdc_tw_takahashi.jpg
中国語(繁体字)の高橋メソッド

Happy Birthday 鳳たん!

ありがとう!

過去のエントリー

  1. 2005年11月06日 Journal of autrijus で Shibuya.pm が紹介されました
  2. 2006年03月28日 YAPC::Asia秋葉原ツアーで引率
  3. 2006年03月29日 YAPC::Asia 2006 Tokyo 1日目「Introduction to Pugs」の翻訳
  4. 2006年03月30日 YAPC::Asia 2006 Tokyo 2日目
  5. 2006年04月02日 YAPC Hackathon に参加してきた

YAPC Hackathon に参加してきた

YAPC::Asia のゲストである Larry、Audrey、Damian、Matz さんをはじめとするハッカー達 (総勢 20 人) によってYAPC Hackathon が行われました。

yapc-hackathon.jpg

場所は小飼弾さんの自宅

私も3/31~4/1の2日間Hackathonに参加して新年度を弾さん宅で迎えました。:-)

Hackathonの写真をぱるまの原稿に載せたり、エイプリルフールのネタを仕込んだり。

せっかくのチャンスなので、LarryとAudreyたんにお願いしてノートPCにサインをもらっちゃいました。

AudreyたんとLarry Wallと記念撮影

記念ショット。(nagayamaさん、Thanks!)

ちなみに英語ではサインのことを autograph と言うみたいです。

2004.01.09 「サインください」を英語で言うと?

用例

  1. May I have your autograph, please?
  2. Would you autograph your book for me?
  3. I want you to autograph my T-shirt.

日本語の直訳で「Give me your sign!」と言ってしまうと、別の意味の sign(星座?) と勘違いされたりする可能性があるので native speaker の方には通じないことが多いのだそうです。また、sigunatureだと、クレジットカードなどに署名するサインという意味が強いようなので、この例では不適切だとか。

カテゴリー: YAPC

YAPC::Asia 2006 Tokyo 2日目

YAPC::Asia 2006 Tokyo の2日目は2トラックに分かれて、最後のLightning TalksとClosing session(Larry’s Keynote)は全員がホールに集まるというタイムテーブル

私はLightning Talksで「ppencode for Perl6 Perl lover」という5分間の発表をしてきました。

ppencode for Perl lover

発表時の音声ファイルは「YAPC::Asia 2006 Tokyo audio files」からダウンロードできますが、たぶん、音声だけだと何が面白いのかわくわからないと思います。

[追記] [Perl]YAPC::Asiaにいってきました その2より:

ppencode for Perl6

たぶんLightningTalkのなかで一番面白かったのではないかな、とおもう竹迫さんのppencodeのお話。あーさこーだいうより実物見たほうがいいと思います。

http://namazu.org/~takesako/ppencode/demo.html

予約語だけで入力されたテキストを表示しようというもうバカawardをあげたいくらいのバカです(褒め言葉)。どんなアルゴリズムだろうと思ってソース見たけどぷーでした。こんど暇があったら読んでみよう。

ほか竹迫さんはネタいっぱいなので思い出せるものを箇条書き。

  • ラリーとダミアンキターーー
  • デスマーチから抜け出すのにuse Rubyしよう
  • Ruby on Snails(snailはのろまとかいう意味)
  • Pair Management(Not Pair Programming)
  • UnreadableなコードでJobを守る。
  • これでFindJobとはおさらば!
  • 読みにくいコードといえば昔のコード
  • useとかstrictがなくてlocalしか使われていない某K*NT
  • 地球なAAのHello World
  • $と;キーをとればPerlHackerはRubyに行くんじゃね?
  • ppencodeデモ(文字コード3つ対応)
  • rrencode(ppencodeのRuby版)
  • これがPythonならpypyencode(ぱいぱいえんこーど)だね。
  • 上記の文字と同時にジョルジュ長岡出現。ここで見るとは思わなかったよ。

(aglieさんありがとうございます)公開資料のスライドには一部変更を加えています。

ナイアガラの滝で「ウォーターフォール 2006 カンファレンス」などをネタにさせていただきました。そのうち動画がYouTubeにアップロードされるかもしれません。

その他の発表資料はhttp://tokyo.yapcasia.org/wiki/?SlidesListからダウンロードできます。

なにはともあれ、去年の年末から準備してきたYAPC::Asia 2006 Tokyoのイベントが無事終了しました(まだ残りの作業があるけど)。スポンサー各社様、スタッフの方々、ボランティアの方々、参加してくれた皆さん、本当にどうもありがとうございました。

YAPC::Asia 2006 Tokyo 1日目「Introduction to Pugs」の翻訳

YAPC::Asia 2006 Tokyo の一番最初の発表「Introduction to Pugs」の翻訳を私が担当することになっていたので徹夜で作業。ギリギリになってしまいましたが何とか間に合いました。

pugsの紹介
Introduction to Pugs(高橋メソッド日本語版)

本当は英語の発表資料に映画の字幕のように日本語訳を付ける予定だったのですが、Audreyたんのアツイ要望で英語を極力排除した日本語onlyのスライドを準備することになりました。日本語のスライドを見せながら通訳なしで発表者がそのまま英語で話すというちょっと新鮮なスタイルでした。

Audreyたんが日本向けにテロップを付け直した動画motd.p6(日本語字幕)の翻訳も載せておきます。

Greetings.
こんにちは。

This is Audrey, bringing you the message of the day from the pugs
examples/ dircetory as contributed by the lambdacamels.
Audreyです。今日は世界中のPugsの開発者達(λラクダ)から
pugsのexamples/ディレクトリに寄せられたメッセージをお届けします。

Pugs is stealing all the good ideas it can from other languages.
Pugsは他の言語から良いアイデアを可能な限り盗んでいます。

Pugs is providing the capability to evolve a little faster.
Pugsのおかげで、あなたは人よりも一歩先を行くことができます。

Pugs is not going to bite.
Pugsは噛み付いたりしません。:-)

Pugs is happening now.
Pugsは今も変わり続けています。

Pugs is a love letter to the Cabal.
Perl6の使徒達に向けたラブレターです。

Pugs is Perl 6, raised to the power of woot!
PugsはとにかくすっごいPerl6なんです!

Pugs is caching in the tuits.
Pugs は人々の抑圧されたハック魂を解き放ちます!

Pugs is sensitive (to semantic, pragmatic, and cultural context).
文法も、実用性も、これまでの歴史も大事にします。

Pugs is test-driven; it’s going great shakes, and committed to change.
Pugsはテスト駆動ですっごく良くなっています。

Pugs is a proof of concept of a Perly functional programming language.
Perl的な関数型言語が実際に動くという証拠にもなりました。

Pugs is a hyperoperator applied to the collective Perl imagination.
Perlのイマジネーションをすべて結集した>>ハイパー演算子<<なのです。

Pugs is a grab-bag of new ways to shoot yourself in the foot.
Pugsではありとあらゆる方法で自分の足を撃つことができます。
とにかくハマること間違いなし(笑)

Pugs is keeping the wheels but reinventing the vehicle!
Pugsでは車輪の再発明をせずに乗り物を再発明してるんです!

この翻訳には大変気を使いましたが、私の力不足により、元の英語のニュアンスが失われてしまった部分も多かったと思います。YAPCの舞台裏ということで、ある1行の翻訳のやりとりの例を紹介したいと思います。

続きを読む

YAPC::Asia秋葉原ツアーで引率

YAPC::Asiaの前夜祭ということで、YAPC::Asiaに海外から参加する人たち向けの秋葉原巡礼ツアーに一緒に参加してきました。正しい日本の文化を伝えるために秋葉原のメイドカフェに行ってきたのですが、そこではDamian ConwayとAudreyたんと同じテーブルに座ることになってちょっぴり緊張。以前Software Design 2006年3月号でPerl6/Pugsの日本語紹介記事を書いたので、感謝の意を込めてAudreyたんに雑誌をプレゼント。Damianは日本語が読めないのでPerl6のソースコードを読んでうなずいたり、Audreyは自分の読める漢字を英語に翻訳したりして楽しんでいました。メイドカフェのテーブルでAudreyたんから直々にModule::Compileの裏話などを聞けてとても嬉しかったです。

その後自由行動になってDaveの付き添いで一緒に音楽CDを買いに行ったのですが、日本のインディーズROCKバンドのアルバムを探しに来ていて全然アーティスト名がわからず四苦hackしました。米国ではなかなか手に入らないんだと言っていましたが、それは日本でも入手困難です(笑)。結局石丸電気のSOFT 1で10枚くらいのアルバムをお買い上げいただいたのですが、日本の音楽CDの値段はとても高いと言って怒っていました。そりゃそうだ。

その後、夕方に成田空港に到着した組と合流してWiFi完備の居酒屋へ。秋元さんに通訳してもらいながらAudreyの明日のプレゼンをいち早く聴かせてもらう。話に夢中になりすぎて、自分のノートPCに飲み物がこぼれるというアクシデントがありましたが、すぐにバッテリーを外して乾かしたのでなんとか致命傷を避けることができました。音の再生速度が速くなって変な音が出てたんですが、数時間して再起動したら元に戻りました。NP :)

Audreyすごい!

YAPC::Asia 一番最初の発表「Introdution to Pugs」のスライド翻訳を担当していたので、わからなかったところをAudreyたんにやさしく解説してもらいました。顔につばがかかるぐらいの至近距離で。

私は幸せ者です。:)

そこで改めて感じたのがAudreyたんはとにかくすごい人だということ。バックグラウンドの知識の量が半端じゃなく、英語も流暢でボキャブラリーが豊富、しかもユーモアのセンスがある。それにキータイプのスピードが尋常じゃありません。こんなに一人で何でもできる人が世界にはいるんだと正直びっくりしました。発表スライドを全部日本語に置き換えたいとのアツい要望で、今夜は徹夜で翻訳作業と明日の準備です。

Audreyのプレゼンに聴き入る

翻訳で苦労した点、周りの人に助けていただいたエピソードは後日ブログにエントリーしたいと思います。

カテゴリー: YAPC