Unreasonable Kyotoに参加してきた

1/30、Unreasonable Kyotoというイベントに参加していた。

http://peatix.com/event/9804

イベントについて

まず、イベントについて軽く説明。

このイベントはUnreasonable at Seaという企画のメンバーによるものだ。そもそも、Unreasonable at Seaとは20人のメンターと11のベンチャーが、1隻の船で100日間掛けて13カ国を巡るという企画である。

そのUnreasonable at Seaのメンターとベンチャーがイベントでその国の人たちと交流したり、ワークショップをするというイベントだった。

イベントで何をしたか

まず、始めに英語で身のまわりの人と2分で自己紹介タイム。

そこから、Google Glassの開発をした、Tom Chi氏の講演。Rapid Prototypingの重要性について。彼は、Google Glassのプロトタイプを30分ほどでやってしまったという話から、なぜ、プロトタイプをすぐに作るのが重要なのかという話になった。(無論、プロトタイプをたくさん作れるということは、製品を作る際に多様性が生まれることなので、さらにいい製品ができる可能性が高まるということなのだが。)

それからはずっと、ワークショップ。特に面白かったのが、One Earth Designのチームと行ったワークショップ。テーマは、大阪に滞在するあと24時間で宣伝するために何ができるかということだった。

ここで少し、One Earth Designについて説明。これは、電気や燃料なしでも太陽光だけでお湯を沸かせる装置を作っているベンチャー。なんと15分で1リットルのお湯を沸騰させることができるらしい。地球環境にもよく、電気や燃料の入手が困難な地域でも温かい食事をすることができるようになるという。価格も十数ドルを予定しているらしい。重量が18kgと重いことが現在の課題だが、近日中に1kgで折りたたみのできるバージョンも開発する予定であるとのこと。

#少し話は変わるが、One Earth DesignのCOOが最初の自己紹介タイムの時に近くにいらっしゃったので、1分ほどで事業について説明してくれたが、その時の説明がすごくわかりやすくて驚いた。何が問題で、どういったソリューションで解決して、その方法でどれくらいの人が恩恵を受けて、目下の課題がなにかという話を数字を交えながら説明してくれた。簡潔ながら要点を抑えていてすごいなぁと思った。

ワークショップは次のような流れで行った。まず、5分程度でメンバーのアイデアをブレインストーミング的に出していく。この時は、

「東日本大震災などの災害の多い国なので、インフラが切断された時でも使用できるということを推していけばいいんじゃない?」「日本の公民館とか避難所においてもらう方向でアプローチすればいいんじゃないかな」

「日本では『炊き出し』という文化があるから、そういうのはどうかな」「ホームレスの援助という要素も絡めてみるといいんじゃない」「それなら、このへんだと釜ヶ崎でそういうのをするのはどうだろう」

「ストリートパフォーマンスみたいに、街頭で調理の実演すれば目を引くんじゃない?」「人通りの多い…梅田とか心斎橋、三宮とかいいんじゃないかな」「なんばの吉本の前でやったほうが面白いんじゃない?」

という風な意見が出た。それから、1分でどのアイデアを採用するかを決めた。この時は、街頭で調理実演というアイデアにすることにした。そして、5分ほどで具体的にどうするかを練るというPhaseに。

「実演の様子を動画にしてYoutubeにアップロードすると話題になるのでは?」「最後に他の班にワークショップの成果を発表するときに小芝居したほうが面白いんじゃない?」

といったさらに内容をよくするような意見を集めたあとに、それらを取り入れつつ小芝居の練習に入った。それこそコントみたいな感じで、僕も小芝居に加わることになったので、英語でコントという初の経験に緊張しつつも、かなり楽しかった。

まとめ

まず、なんといっても楽しいイベントだった。あと、ベンチャーの人々のPassionというか情熱をすごく感じた。どういう「経験」や「思い」があって、どういった「問題」を解決したくて、自分の方法で世界をどういうふうに良くすることができるのか、ということを深く考えているということがすごく伝わってきた。

あと、Rapid Prototypingという手法もかなり面白かった。区切った時間の中で、どれだけ多様なアイデアを出して、そこから素晴らしいタネを見つけ出して、できるだけ昇華させるというプロセスはかなり楽しかったので、部活を始めいろんなところで試してみたいと思っている。

としぁへのふぁぼろぐ

この記事は #fav2toshi_a Advent Calendar の8日目の記事です。

送ったふぁぼ

としぁさんには150個ほどふぁぼを送りました。

朝からとしぁさんがつぶやくとすぐにふぁぼるようなスクリプトを動かして、期末テストを受けに登校したのですが、世界史の暗記をしないといけないというプレッシャーの中書いてたのでバグがあって、実質家に帰ってからふぁぼってました。

あと、当初の予定だと12/08に呟いたものだけをふぁぼろうと思ってたのですが、40ツイートくらいしかなくて全然満足できなかったので、手動でぽちぽちしていました。

としぁさんについて

せっかく、としぁさんのツイートを記録してるので、ついでにいろんなことを調べてみました。

タイピング速度

今回ふぁぼったなかで、文字数/ツイート時間が一番大きかったツイートがこれです。(2.66文字/秒)

使っているクライアント

今回の150ふぁぼ中、使用クライアントの割合はこんな感じでした。

あれ、としぁさんってなんていうクライアントの作者だったっけ…?

話し相手

ふぁぼった中では、

1位 @shijin_cmpb

2位 @naota344, @arc680

っていう感じでした。

ちなみに、twilogでは

1位 @shijin_cmpb

2位 @kaorin_linux

3位 @naota344

というふうになってます。

 特に気に入ったツイート

じゃあ本題の、ふぁぼった中で特にお気に入りのツイートを紹介していきます。

リア充にめげず、「彼女」というキーワードをふぁぼに持っていく、そんなとしぁさんにシビレます

開発頑張ってください!!!

学校から帰ってきて、数十ふぁぼ送っただけで反応してくれるとしぁさん

さいごに

明らかにふぁぼ数が少ないので、いまからちょっとふぁぼってきますヽ(‘ω’)ノ三ヽ(‘ω’)ノ

 

 

OSS奨励賞を受賞しました

http://ossforum.jp/ossaward7th2

OSS奨励賞を受賞しました

中学3年生ながら、セキュリティ&プログラミングキャンプ等を通じてLinuxカーネルの内部構造と開発方法を理解し、グローバルな開発コミュニティに機能向上を提案し、採択されるに至る。自らチャレンジを重ね、カーネル開発者視点での成果発表や、未踏ユースでのOSSプロジェクト推進など若年層開発者の模範となる活動を行っている。

部活でも後輩にておくれた姿しか見せられてないし、模範というほど立派なことできてるのかという感じもありますが、とってもうれしいです。

なかなか「表彰」という形のものを受けたことが無いっていうのもあるかもしれなせん。

果たしてどなたが推薦してくださったのでしょうか…

というわけで、3/16-17のOSC東京に出没しますので、よろしくおねがいします。

# 未踏に採択された話ここに書いてなかったような

Mozilla Vision 2012に行ってきた

Mozilla Vision 2012 – http://mozilla.jp/events/vision/2012/

1/21-22にMozilla Visionというイベントに行ってきました。

参加したのは21日のConference Dayです。

ロボットクリエーターの高橋氏やサイエンス作家の竹内氏などの

教育に関するセッションはなかなか興味深かったです。

一般のセッションはずっとRoom Aで聞いていたのですが、

特に「pdf.js – HTML5とJavaScriptの限界に挑戦する」という

セッションが一番面白かったです。

JavaScriptだけでFontを変換するエンジンを書くという話や、

レンダリングされた文章を選択できるようにするために

Canvasに透明な文字を重ねるという話はあまりにも凄かったです。

僕自身はLTで「Firefox Syncサーバーを建ててみた」という話をしました。

なかなかサーバーを建てるのに苦労したので、修正点などを話しました。

けっこう好評でよかったです。

年賀状ネタばらし: 4日目

さあ、ここで「賀正」というおおきなAAが出てきたのですが、それをよく見るとソースコードになっています。

AAを崩してみると一目瞭然

++++++++++++++++[>++>+++>++++++<<<-]>>++++++++.>++.<<.>-------.>+++
+.<<.>-..<.>.++++++++.<.>------.+.<.>++++.-

どうみてもBrainfuckのソースコードです。

Brainfuck – Wikipedia: http://ja.wikipedia.org/wiki/Brainfuck

やっと僕の大好きなBrainfuckの登場です。

では、実行してみると…

$ bf output
8b 1f 00 08 23 70 4e ff 03 00 ce ed 0a 31 31 02 85 10 d4 e1 62 9e
c1 bc 70 4c 57 27 b2 b0 4c b7 d4 11 71 62 5c 49 db c4 b2 bb 36 16
cd a2 c2 22 35 ff e6 0f f1 4d d2 fa 3e 5a b0 94 9d 24 6f b8 69 1e
d3 a9 9c d7 0d 45 9e 66 47 92 7c eb 5b ba 18 d4 e8 83 ab a2 c6 9e
c9 76 24 55 4f 1c dc f5 ef 8f 3e ff 7f f5 9b 6a e1 87 bb 26 95 72
c9 7d bd 75 f5 fa 00 1e 00 00 00 00 00 00 00 00 00 00 00 00 77 c0
a4 ee 60 f6 00 2a 00 28 00 00

これはバイナリの中身を表示しているようです。

でも、8b 1fなんていうマジックナンバーはありませんよね…. でも、1f 8bならgzipのマジックナンバーです!

これはすでにバイナリ処理された状態のようです。なので、バイナリエディタとかに打ち込んでもだめなのです!1f 8b 08 00っていう風に逆転させてから打ち込んでいくかプログラムに処理させるかしましょう!

こんな感じのコードを組んでやると行けると思います。

#include <stdio.h>

int main(void)
{
 char c;
 FILE *fp;
 fp = fopen("binary", "wb");
 while(scanf("%x", &c) != EOF)
 fwrite(&c, 1, 1, fp);
 fclose(fp);
 return 0;
}

できたデータをfileコマンドでみてみると…

$ file binary
binary: gzip compressed data, from Unix, last modified: Sun Jan 1 00:00:00 2012

2012年の1/1 00:00:00に作られたgzipのアーカイブのようです。

$ mv binary binary.gz
$ gunzip -d binary.gz

現れたファイルをみてみると、tarアーカイブでした。

$ file binary
$ tar xf binary

すると現れるのはmessasgeというテキストファイル!

中身は…

$ cat message
Happy New Year!

これが答えでした!!

年賀状ネタばらし: 3日目

Zipアーカイブを展開すると現れた怪しいファイル、lazyk

これは開くとすぐわかると思うのですが、Lazy Kのソースコードです。

Lazy K – Wikipedia: http://ja.wikipedia.org/wiki/Lazy_K

翻訳: プログラミング言語Lazy K: http://e.tir.jp/wiliki?%CB%DD%CC%F5%3A%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECLazy_K

Lazy Kは、SKIコンビネータのみを実装している純粋関数型言語かつチューリング完全です。遅延評価が行われます。

ソースをちょっと見てみると、こんな感じになっています。

K(I(S(SI(K(S(K(S(S(KS)K)I))(S(SII)I(S(S(KS)K)I)))))(K(S(SI(K(S(K(S(
S(KS)K)I))(S(SII)I(S(S(KS)K)I)))))(K(S(SI(K(S(K(S(S(KS)K)I))(S(SII)
I(S(S(KS)K)I)))))(K(S(SI(K(S(K(S(S(KS)K)I))(S(SII)I(S(S(KS)K)I)))))

見たまんま、SKIと括弧しか書かれていません。

さっそくiroriさんの処理系を落としてきて実行してみましょう。

$ gcc lazyk.c -o lazy
$ ./lazy lazyk
         ++++++
         ++++++
         ++++[>
++>+++>++++++<<<-]>>+++++++   +.>++.<<.>-------.>++++.
<<.>-..<.>.++++++++.<.>----   --.+.<.>++++.-------.<.>
++++.>-.<<.>>+..<<.>----.++   +.<.>---..<.>>---.++.<<.
      >>.-.<         <.>.>-   --.<<.            >+++.-   -.<.>++.--.<.>-.++.<.>++++++.---.<.>----.-.<.>>+
      ++.<++         ++.<.>   >+.<--            -.<.>+   ++++.----.<.>+++++++.>.<<.>>--.<--------.<.>>-.+
      .<<.>+         +++++.   ------            -.<.>+   +++.>.<<.>+.++.<.>-----.+++++.<.>>-.<-----.<.>>.
   <--.<.            >++++.   >+.<<.            >>-.<+                        ++.<.>
   >++.<-            --.<.>   ---..<            .>++++                        ++.---
   ---.<.            >+++++   .----.            <.>+++                        .>-.<<
.>-.++            +++.<.      >>+.--.<<.>>+.<-----.<.>                        >-.<--
.<.>>.            .<<.>+      .+++.<.>-----.+++++.<.>>                        +.+.<<
.>>---            .<----      .<.>>++.<.<.>..<.>+.++.<                        .>>+++
            ..<<.>>-.<+.<.>------.>+.<<.>>.<+                                 .<.>++
            +.>--.<<.>>.<--.<.>>++.-----.<<.>                                 +.>+++
            +.<<.>++.>----.<<.>>+.<-----.<.>+                                 ++++++
            ++.---                     --.<.>                                 +++++.
            >++.<<                     .>----                                 ---.++
            .<.>++                     .>++.<                                 <.>>--
            --.<++.<.>--.+++.<.>--------.>+++                                 .<<.>>-.<++.<.>>---.<
            ++++++.<.>.>++.<<.>>+.<--.<.>----                                 ---.>.<<.>++++.+.<.>+
            +++.>+.<<.>---..<.>--.+++.<.>++.-                                 ------.<.>+++++.>--.<
            <.>>++                     .---.<                                 <.>--.
            >.<<.>                     >.-.<<                                 .>----
            .+++++                     ++.<.>                                 >+++.<
            ----.<.>>+.<++++.<.>.-----.<.>>--                     --.+.<      <.>>-.
            <-.<.>>++.<++++.<.>+++.>++.<<.>>-                     -.<.<.      >--.-.
            <.>----.++.<.>+..<.>-.>+++.<<.>--                     -.>---      .<<.>>
            +.-.<<                     .>>+++                     .<++++      .<.>>-
            .+.<<.                     >+++.>                     .<<.>-      ----.>
            -.<<.>                     >+..<<                     .>++++      .>.<<.
            >>.<--.<.>++++.>----.<<.>---.>-.<                     <.>>++      ++.<--
            ---.<.>+++++++.-.<.>>---..<<.>---                     --.+++      +.<.>+
            ++.----.<.>++.-----.<.>>+.<++++++                     +.<.>-      -.>+.<
               <.>>--               .++.<<                        .>.--.      <.>>++
               .<.<.>               >.----                        -.<<.>      -----.
               .<.>+.               >++++.                        <<.>-.      .<.>..
            <.>..<                     .>..<.            >..<.>..<.>..<.>..<.>..<.>..<.>..<.>..<.>+++++++
            ..<.>>                     --.<--            -----.<.>>--.<++++.<.>>++++..<<.>++.------.<.>>+
            .<++++                     ++.<.>            ------..<.>++.>-----.<<.>--..<.>++.++++++.<.>---
         -----.                           .<.>..
         <-----                           ------
         ------                           -----.

「賀正」というAAが表示されました!

でも、これが答えではないのです。

年賀状ネタばらし: 2日目

年賀状をPietのソースコードとして実行すると以下のような文字列がでてきます。

UEsDBBQAAAAIAC8Cnj/3XIEAGAwAAESrAwAFABwAbGF6eWtVVAkAA4mE/E6NhPxOdXg
LAAEE6AMAAAToAwAA7Zltlhu3DkT/eyUzS+kzP73/vcSOE2vUFGf0AYBVxO1z3osc61
a3moUCyHy8HW8/334ebx+//vH7f7/+/+f7x/vx/v7vvz/ej6t/+ev68zUIRWL4wuXz+
++/vPzxrIJMrcy4tv9Dx/EgqGA8CIp0PxmKtC2hZUQpmen3rtRO0oPiV8tzPPmQMcUr
9bJz3o3WT+RNIRO//CP0+dPXDthK+Ubgffrj42/3+ntJaa0rquV6ZBYEy04D6t/vRCR
Gu+qre3sjNbvjqFul7Gam1CaJ3nZ6bv4WC0stmRXR/fCxIZmvnvmJv3+JRbv5......

最後のほうをみると….

i4uLi4uLi4uLi4uLi4uLi4tr0+vHj38AUEsBAh4DFAAAAAgALwKeP/dcgQAYDAAARKs
DAAUAGAAAAAAAAQAAALSBAAAAAGxhenlrVVQFAAOJhPxOdXgLAAEE6AMAAAToAwAAUE
sFBgAAAAABAAEASwAAAFcMAAAAAA==

そう、これはbase64です!

デコードしてみると….

$ base64 -d output
P/�?�\�▒
 D�lazykUT...

文字化けてるんじゃなくて、元データがバイナリだったということです!

$ base64 -d output > binaryfile
$ file binaryfile
binaryfile: Zip archive data, at least v2.0 to extract

Zipアーカイブでした。で、展開してみると

$ unzip binaryfile
Archive: binaryfile
 inflating: lazyk

何やらあやしいファイルが….

年賀状ネタばらし: 1日目

年賀状のネタばらし1日目

年賀状の画像はPietという難解プログラミング言語のソースコードになっています。

Piet – Wikipedia: http://ja.wikipedia.org/wiki/Piet

言語仕様: http://www.dangermouse.net/esoteric/piet.html

Pietは色の遷移でスタックを操作するという言語で、実行の向きなどがある面からするとBefungeに近いかもしれません。

ただ、pushするときに同じ色が続く部分の面積がpushされるという点から、面積についても気にしていかなければなりません。

今回は、簡単なジェネレーターを書いたのですべて1 pixelになるように作っています。

で、このPietの処理系はnpietをビルドしてこの画像を動かしてみると….

UEsDBBQAAAAIAC8Cnj/3XIEAGAwAAESrAwAFABwAbGF6eWtVVAkAA4mE/E6NhPxOdXg
LAAEE6AMAAAToAwAA7Zltlhu3DkT/eyUzS+kzP73/vcSOE2vUFGf0AYBVxO1z3osc61
a3moUCyHy8HW8/334ebx+//vH7f7/+/+f7x/vx/v7vvz/ej6t/+ev68zUIRWL4wuXz+
++/vPzxrIJMrcy4tv9Dx/EgqGA8CIp0PxmKtC2hZUQpmen3rtRO0oPiV8tzPPmQMcUr
9bJz3o3WT+RNIRO//CP0+dPXDthK+Ubgffrj42/3+ntJaa0rquV6ZBYEy04D6t/vRCR
Gu+qre3sjNbvjqFul7Gam1CaJ3nZ6bv4WC0stmRXR/fCxIZmvnvmJv3+JRbv5......

こんな文字列が表示されます。

謹賀新年

明けましておめでとうございます。

今年もどうぞよろしくお願いします。

下の画像が年賀状です。

ここに隠されたメッセージを見つけ出してください。

答えがわかったら@hiromu1996まで!

P.S.

1日経過するごとに少しずつヒントを追加して行きます。

1/5に最終的な答えが発表されます。

カーネル/VM Advent Calendar 16日目: USB/IPで遊んでみる

USB/IPはご存知ですか?

その名の通り、USBデバイスをIPネットワーク上で共有しようというプロジェクトです。 このプロジェクトはLinux 2.6.38でカーネルにマージされていて、遊んでみようと思いながらなかなか機会がなかったので、今回のネタにすることにしました。

1. USB/IPについて

USB/IPはもともとNAISTの研究がもとになって作られました。下のページに詳しい論文が掲載されています。

http://kawai.naist.jp/~eiji-ka/publications/remote-dev-j.html

仕組みとしては以下のようになっています。

A. クライアントがUSBデバイスにリクエストを投げる

B. クライアント側のVHCIドライバがホストコントローラーをエミュレーションして、リクエストを受け取る

C. VHCIドライバがリクエストをカプセル化してサーバーに送信する

D. サーバー側のスタブドライバがリクエストを受け取り、実際のデバイスにリクエストを投げる

E. スタブドライバがリクエストの結果をクライアント側に返す

 このVHCIドライバやStubドライバというのはすでにカーネルのstagingに入っています。また、VHCIドライバはWindows向けの実装も進んでいます。

2. サーバー側を準備する

サーバー側(デバイスを提供する側)は現在Linuxしか対応していません。なので、試して見る際はLinuxを用意しましょう。

まず、カーネルコンフィグで”USB/IP support”とその下にある”Host driver”を有効にしてカーネルをビルドしましょう。モジュールにしたならusbip-core.koとusbip-host.koをinsmodしておいてください。

つぎに、ユーザーランドのツールをビルドしましょう。これは上の図の”Device Control Manager”にあたるものです。カーネルのソースのdrivers/staging/usbip/userspaceにソースがおいてあるので、READMEを読みながらビルドしてください。

そして、デバイスマネージャとなるusbipdを起動しましょう。

# usbipd

それからbind_driverコマンドで共有するデバイスを設定してやります。

# bind_driver --list

で、USBデバイスとbusidの一覧がでてくるので、以下のようにしてデバイスを指定します。

# bind_driver --usbip <選択したデバイスのbusid>

3. クライアント側を準備する ーWindows編ー

クライアント側はWindowsも対応しているので、はじめにWindowsで試してみたいと思います。

まず、ここからWindows用のバイナリをダウンロードしてきて、展開します。

そして、デバイスマネージャーを開き、「操作」の「レガシハードウェアの追加」をクリックします。ヴィザードがはじまるので、「次へ」を押して、「一覧から選択したハードウェアをインストールする」を選択します。

ここで、「すべてのデバイスを表示」を選択したまま「次へ」進み、「ディスク使用」のボタンを押して、さきほど展開したディレクトリを選択します。

上のような画面になったら「次へ」を押してインストールを開始させます。 インストールが終われば準備は完了したので、実際に試しましょう。

コマンドプロンプトでさきほど展開したディレクトリに行って、以下のように実行します。

> usbip -l <サーバーのIPアドレス>

すると、サーバー側で共有しているデバイスのリストが出るはずです。

> usbip -a <サーバーのIPアドレス> <デバイスのbusid>

というふうにすると、ちゃんとデバイスが共有されます。

3. クライアント側を準備する ーLinux編ー

まず、カーネルコンフィグで”USB/IP support”とその下にある”VHCI hcd”を有効にしてカーネルをビルドしましょう。モジュールにしたならusbip-core.koとvhci-hcd.koをinsmodしておいてください。それから、先程と同じようにユーザーランドのツールをビルドしましょう。

これで使えるはずです。あと、3240番ポートをSSHポートフォワーディングしたりしても使えます。

# ほんとはscpとUSB/IP over SSHとかでスピードの差とか測ってみたかったんですが
# リモートの仮想マシンでのカーネルビルドが3時間かかっても終わらなかったので
# こんどちゃんと測って結果書きます

 

4. 感想など

すごく面白いです。

手前のノートパソコンにつないだマウスが奥のWindowsでうごいているっていうのはとっても奇妙で楽しかったです。

802.11nでマウスを使用しても気になる程度のタイムラグなどはなかったので、同じLAN内で使うには十分じゃないでしょうか?