12/25/2011

MIT メディアラボ所長 伊藤穰一さん のお話

2012年1月号のクーリエジャポンにMIT特集が掲載されている

COURRiER Japon (クーリエ ジャポン) 2012年 01月号 [雑誌]に MIT メディアラボの特集がある。その中にメディアラボ所長の伊藤穰一さんのインタビューがあって、
若い人たちは権威を疑って、自分で考えることが大事です。
と語られている。この特集を読んだ後、Google Japan Developer Relations Blog で伊藤穰一さんのインタビュー動画が紹介されていて、「これは見なきゃ!」ということで早速見てみた。


まだあんまり再生されてないみたいだけど、すごくおもしろい動画だった。クーリエジャポンを読んだ後だと、そこで書かれていた内容が伊藤穰一さんの言葉で補足されてるというか、そんな感じ。

興味深かったのは、エンジニアとデザイナの交流について。伊藤穰一さん個人の仮説として、シリコンバレーのサウスパークというエリアにシリコングラフィックスがあり、そこにレイヴのフライヤー(ちらし)を作る人たちが集まって、いいデザイナーがいるからそこにワイアードが本社をそこに置いて、こんどはワイヤードを中心にエンジニアとデザイナが交流するパーティが開かれて、という感じで、シリコンバレーではエンジニアとデザイナがうまく融合していったのではないかという話がされる(10:00付近から)。

あと、ISO の7レイヤーモデルでいうと、上のレイヤにいけばいくほどアートと文化の面が大事になっていく、という話。シリコンバレーよりもサンフランシスコ、サンフランシスコよりもニューヨークのほうが文化的に豊か。だんだんレイヤーがあがってコンテンツ寄りになっていくとシリコンバレーかからサンフランシスコ、それからニューヨークと、東海岸のほうに広がってくんじゃな、という分析がされてる(24:10付近から)。

自分が多少違和感があるところにいないと学びが無いと思っている
伊藤穰一さんのこの言葉が気に入った。

12/21/2011

バージョン管理システムの歴史

Francis さんがバージョン管理システムの歴史をダイジェストでお届けしてくれてた!

そのダイジェストをざっくり日本語にするとこんな感じ?
  1. 1960年代:テキストファイルにソースコードが保存される
  2. 1960年代:コードのバージョンが人手で管理される
  3. 1972年-1982年:ひとつのファイルに複数のバージョンが管理できるようになる(SCCS
  4. 1982年:自分用にソースコードのコピーをチェックアウトできるようになる(RCS
  5. 1986年:複数のファイルをまとめてバージョン管理できるようになる(CVS
  6. 1986年:同時にふたり(複数人)がひとつのファイルを編集でき、その変更がマージできるようになる
  7. 1994年:共有リポジトリをリモートに置けるようになる
  8. 1999年:フリーのリポジトリホスティングサービス登場(SourceForge
  9. 2005年:分散バージョン管理システム登場(MercurialGit
  10. 2008年:簡単に、しかもオンライン上で fork できるようになる(GitHub
マージって魔法みたいだよなー。diff(1) も何をどうやればあんなことができるんだろ。。これは、冬休みの自由研究ネタかな!

12/18/2011

東京観光2011年冬

東京タワー!

東京観光してきた。とってもいい天気で、青い空に、赤い東京タワーがきれい。池の中で鯉がすいすい泳いでいたけど寒くないのかな。

こんなビルに囲まれたところで鯉が泳いでる
船にも乗った。川の両岸にマンションとか、オフィスビルとか、おっきい建物がいっぱい。このビルの向こう側は月島?こんどは月島でもんじゃ焼きを食べようっと。

東京湾まですぐそこの地点から、川上のほうを振り返ってみた

12/15/2011

Android 版 Google 日本語入力いけてるかも

思いどおりの日本語入力をモバイルでも。Android 版 Google 日本語入力をリリース。

ということで、各所で話題になってるみたい。で、早速僕もインストールした。

第一印象は、「変換うんぬん以前に、結構入力しやすい!」。いままで、GALAXY S II にデフォルトでインストールされてたインプットメソッド(?)のフリック入力モードを使ってたんだけど、それより入力がスムーズにできる気がする。

ただ、英語入力は GALAXY のデフォルトインプットメソッドのほうがいいかも。GALAXY のほうはアルファベット入力に切り替えたときに英語の予測入力機能が動くんだけど、Google のほうは英語の予測入力が(いまのところは?)ないみたい。だから、"Google" って入力するのに綴り全部のアルファベットを入力しなきゃいけない。そりゃ、Google 「日本語入力」だからしょうがないかもだけど!or なんかの設定で英語の予測入力を有効にできるのかな。。

ちょっとためしたところ、GALAXY のデフォルトインプットメソッドよりも Google 日本語入力のほうが入力しやすいんだけど、英語の予測入力のことがあるから、Google 日本語入力への乗り換えはしばらく見送ることにしたー。

12/11/2011

Google マップのストリートビューの時のあの黄色い人の名前は「ペグマン」


知らなかったー。ペグマンっていうんだ。ペグマンについてなんてページもあるね!
ペグマンという名前は、形が洗濯バサミに似ていることに由来しています(洗濯バサミはイギリスで「クロース ペグ」といいます)。
だって!

12/05/2011

Protocol Buffers in Ruby

ちょっとしたサーバ・クライアントのプログラムを書こうかな、と思ったら、Google さんの Protocol Buffers を思い出した。
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler.
実際に、Google さんのシステムでいっぱい使われてるらしい(Protocol Buffers の Overview より)。
Protocol buffers are now Google's lingua franca for data – at time of writing, there are 48,162 different message types defined in the Google code tree across 12,183.proto files. They're used both in RPC systems and for persistent storage of data in a variety of storage systems.
でも、Google さんのページにある実装は C++ か、Java か Python 用の Protocol Buffers ライブラリで、僕はどの言語も書けないんだよね。。。と思って、サードパーティの実装 Wiki を見たら、Ruby の実装がある!!
ぱっと見た感じ、beefcake はちょっと機能面でものたりない感じ?ruby-protobufruby-protocol-buffers はどっちもよさげなんだけど、RPC のためのサーバ・クライアントのクラスが定義されてることと、Author(s) の方々が日本人っぽいお名前で勝手に親しみを感じたから ruby-protobuf を使うことにした!

しっかし、みんな自分で実装したものを GitHub に公開していて、すごいなあ。来年の目標は GitHub デビューにしようかな。。

12/04/2011

Make: Tokyo Meeting 07 に行ってきた

会場になった東京工業大学の門。

はじめて Make: Tokyo Meeting に行ってきた!今回は、Make: Tokyo Meeting 07 ということで7回目だったらしい。やっと一年前くらいに Make: を知って、それから電子工作とかに興味があったんだけど、ますます興味がわいてきた。

特におもしろかったのは:
  • tangible-design.org  さんの  White Vision : めがねをかけると真っ白画面が映像に変わる
  • Dagik さんの ダジック・アース : 球面に映像投影、高臨場感なディスプレイにもなるし、貸し出しもしてるらしい
  • Yohei Yasukawa さんの Weekend Fabrication : 「素早く失敗し、素早く学習する」手法を取り入れた教育プロジェクト
  • wooven  さんの「よちもち☆モチオネア」 : QuartzComposer を使うとお手軽に動画でいろいろ遊べるらしい(メインは「ゆるべん」という勉強会の紹介だったのかも)
  • @stamefusa さんの リアル sl コマンド : ターミナルに sl コマンドを入力すると、プラレールが走り出す
  • @kimio_kosaka さんの Bottled Circuits :ウイスキーの瓶の中に電子回路

リアル sl コマンド。いろんなオプションがある。こういうセンス大好き。man まであって、仕事が丁寧。

瓶の中に電子回路。鉗子を使ったり、工具も自作したり...たぶん世界にひとりだけの職人。

@kimio_kosaka さんにはいろんな苦労話をしていただいたんだけど、表情が生き生きしててとってもかっこいい。こんなすてきな人になりたいと思った。

僕もいつか Make: Tokyo Meeting  に何か出展できるようになりたいなー。

11/30/2011

CloudCore VPS がすっごく安い!

CloudCore VPS のトップページのコピー
11月15日にリリースされた CloudCore VPS っていう、KDDI さんがやってる仮想化サーバ提供サービス。なんてったって、安いし、いろいろ OS 選べるし!!
CPU 1コア・メモリ2 GB・ディスク容量100GBという高スペックながら、月
額945円※2~という低価格での提供が可能になりました。このほかに、万
が一の時でも過去の時点に戻すことができるVMイメージの自動バックアッ
プ・リカバリ機能やLinux系OSだけでなく、FreeBSD、Solarisなどにも対
応した豊富なOS選択肢を設けるなど、今後もさまざまな機能を追加する予
定です。
さっそく大人気みたいで、「CloudCore VPS 新規受付の一時停止につきまして」 ってアナウンスがでてる。それだけ、みんなも「イイ!」って思ったってことだ。再開したら申し込んで、遊んでみようかなー。

11/28/2011

Wired の写真をブログに貼っても OK!(商用利用は除く)

Steve Wozniak captured by Jon Snyder/Wired.com 
ちょっと前に technology review の記事 で知ったんだけど、Wired が所有するいくつかの写真が Creative Commons ライセンスの下で自由に使えることになったらしい。


Wired のアナウンス から写真の利用に関する部分を抜粋すると:
Placing our photos under CC BY-NC license means that designated images are free for all to republish, with minor restrictions, as follows:
  • Photos must be properly attributed to the photographer and Wired.com, and, if used online, we ask for a link back to the original story where the photo first appeared.
  • We welcome editorial use by bloggers or any other publisher, but we are not authorizing commercial use, like using one of our photos in an advertisement.
  • Remixes and mashups are allowed.
要約(超訳?)すると:
  1. 写真がその写真を撮った写真家と Wired に帰属することをちゃんと表示すること。もし、オンラインで使う場合には、写真が使われているオリジナルの記事にリンクを張ること。
  2. 商用利用は禁止する。たとえば、写真を広告に使ってはいけない。
  3. 写真の二次利用(リミックスやマッシュアップ)をしてもいい。
すごいのは、なんで写真を第三者が自由に使えるようにしたのか、てところ。「許可なくリンクを張ることは禁ずる」的なサイトもあるのに、写真を自由に使ってもいいなんてっ!それは、technology review の記事 によると、Wired に対して外部からリンクをいっぱい張ってもらうのが目的。なんで、リンクを張ってもらおうとするかというと:
Google search rankings work in part based on how many incoming links reference a story.
ってことで、いっぱいリンクを張ってもらえばもらうほど、Wired のサイトの価値が上がってくわけ。これが、technology review の記事のタイトル、Link Marketing Scheme ってことだ。やばい、Wired さん、頭よすぎっ!!

というわけで、Steve Wozniak’s 9 Favorite Gadgets という記事にある、僕が好きな Woz さんの写真を貼ってみた!http://www.flickr.com/photos/wiredphotostream/ もどうぞ。

11/25/2011

雷家@川崎



お気に入りのラーメン家さんのひとつ。
今日は 中味濃め固めのりたま とキャベチャ を食べた!
おいしかったー

中味濃め固めのりたま

キャベチャ
お店の場所は川崎駅からちょっと離れてる。けど、その間、歩いてるときに期待が高まる感じがまたいいのよねー。雷家の食べログのページ の地図はちょい場所がずれてるので注意!

川崎駅からはやや離れている

11/22/2011

青木靖さんが Charlie Todd さんの講演を翻訳してる!

こないだブログに書いた TED での Charlie Todd さんの講演を青木靖さんが訳してくれる!!わーい。

字幕を見てても理解できてなかった部分がいっぱいあるから、青木靖さんの訳を見て、英語の勉強のつもりでもっかい TED を見てみよー。と、さらに!青木靖さんのページ には付録として、Improv Everywhere の人気がある動画も貼り付けてあるー!



夢のような試合 : Best Game Ever

Improv Everywhere のミッションの中でお気に入りのもののひとつ、Best Game Ever。なんでもない少年野球の試合が、メジャーリーグの試合みたいになっちゃった!選手の子供たちも監督も、観客として参加したエージェントもいい思い出になっただろうなあー。


 

NBC sports の実況が始まるところとか、 Good Year の飛行船(?)が現れるところとかが特に好きっ!


11/19/2011

Google 日本ブログによる、緯度・経度の調べ方

Google 日本ブログの「Google マップの使い方講座 第一回 緯度経度編」 に名所の緯度・経度の調べ方が書いてある。ちょっと前に、僕が書いた内容とテーマが同じ。奇遇だなあ。

Google 日本ブログで紹介されている緯度・経度を知りたいときに使える Labs 機能
でも、Google 日本ブログが紹介している方法は僕の方法と違う。Labs 機能を使うらしい。個人的には、僕が見つけた方法のように、緯度・経度を知りたい場所を右クリックする方法のほうが好きだけど、いくつもやり方があるということで。

あと、奇遇な点は、名所の例が東京タワーだったことだ。

11/17/2011

ルイーダの酒場@六本木


ルイーダの酒場というと、アリアハンのしか頭に浮かばなかったんだけど、実はいろいろあるらしい。で、さらに、六本木にもあるらしい。

お店の雰囲気、店員さんの服装とか内装とか、メニューもドラゴンクエストワールド。おもしろいのは、入場のご案内にあるように、土日祝日と平日の混んでるときは75分制だということかな。ドラクエがわかる人といってみるにはいいお店かも。

しかし、六本木なんて、数えるほどしか行ったことないなあ。もしもルイーダの酒場にいくなら、ドラクエもわかって、六本木にも詳しい人といかないと路頭に迷いそうだ。。



ルイーダの酒場は六本木5丁目の信号の近く!

11/16/2011

Improv Everywhere のミッションに参加したらどんな気分になるんだろう

TED で Charlie Todd さんの The shared experience of absurdity を見た。この講演は Improv Everywhere の話。
Improv Everywhere is a New York City-based prank collective that causes scenes of chaos and joy in public places.
英語が難しくってよく話の内容はよくわからなかったんだけど、Improv Everywhere がやってることはとっても楽しそう。講演で紹介されてたミッションの中だと、僕は High Five Escalator が好き。巻き込まれた人たちの心の広さというか、一緒に楽しんでるところ、表情がいい!アメリカって怖そうなイメージがあるんだけど、こういうの見てると楽しそうで、文化的に豊かな印象を受けた。世界は広いなあ。


11/15/2011

Google マップ画像をブログに埋め込む方法

どうやれば Google マップの地図画像をブログに埋め込めるのかな?と思って調べてみたら、結構簡単だった。先走って Maps API キーってのを取得しちゃったんだけど、商用とかじゃなくて、地図画像をブログに貼るだけなら、もはやいらないらしい。
注: Google Static Maps API は、Maps API キーがなくても使用できるようになりました。
画像取得のための API に関するドキュメントはStatic Maps API V2 デベロッパー ガイド。これを読むと、表示したい場所を緯度経度か住所で指定するらしい。日本語で住所を指定しようとするとちょいめんどくさそうな気がしたから、僕は緯度経度で指定することにした。

目的の場所の緯度経度を取得する方法はどうすればいいのかな?いろいろあるかもだけど、僕がやった方法は次の3ステップ。

[1] 目的の場所、ここでは東京タワーを Google マップ で表示。


[2] 目的の場所(東京タワー)を指しているマーカーを右クリックして「この場所について」を選択。このときのポイントは、なるべく地図を拡大してから右クリックすること。そうじゃないと、目的の場所からちょっとずれた緯度経度がとれちゃうかもしれない。



 [3] Google マップの検索窓に緯度経度が表示される。

以上で、東京タワーの緯度経度が取得できた。あとはStatic Maps API V2 デベロッパー ガイドに従ってやりたいことをすればおk!たとえば、上の例で取得した東京タワーの場所に「T」の文字がついたマーカーを置いて、400x400の画像(32ビットPNG)が欲しければ
http://maps.google.com/maps/api/staticmap?markers=color:blue|label:T|35.658565,139.745471&zoom=16&size=400x400&format=png32&maptype=roadmap&sensor=false
というURLを作ればいい。 マーカーは複数置けるし、拡大・縮小は zoom のパラメータで調整。sensor はユーザの位置を GPS とかのセンサーで取得するかどうかを指定する。ブログに何かの地図を貼り付けるだけなら sensor=false でいいと思う。下の画像は maptype を roadmap じゃなくて satellite にしたバージョン。




よし、これで、東京タワーに「T」のマーカーを置いた衛星画像(地図)がゲットできた!

あとはブログの画像埋め込み機能を使って、画像のソースのところにさっき作った URL を貼ってあげれば、ブログに地図を埋め込むことができるぅー。

11/14/2011

FreeBSD と GNU coreutils の yes(1) のコードを読んで

すっごくすっきりしてる FreeBSD の yes(1) の実装と、GNU coreutils のお決まり処理をいろいろやってる GNU coreutils の yes(1) の実装。僕はすっきり実装の FreeBSD のほうが好きだなあ。

今回初めて知ったのは、FreeBSD と GNU coreutils の yes(1) の挙動の違い。

Ubuntu (11.04) で yes a b c を実行すると、
$ yes a b c | head -n1
a b c
 て感じだけど、FreeBSD (8.2-RELEASE) だと
% yes a b c | head -n1
a
になっちゃう。シェルスクリプトとかで yes(1) を使うときでスペース区切りの文字列を扱いたければダブルクォートとかでくくればどっちの場合でも動きそうだ。

ふたたび、Ubuntu (11.04) だと、
$ yes "a b c" | head -n1
a b c
 って感じだし、FreeBSD (8.2-RELEASE) も
% yes "a b c" | head -n1
a b c 
ということで、おんなじ結果になる。よかったよかった。

ところで、yes(1) の使い道についてのヒントは en.wikipedia.org の yes (Unix) の記事に書いてある。へー、(テスト目的とかで?)適当なファイルを作りたい時にも便利なんだねー。

よし、今度は tail(1) に挑戦してみよー。ちょっと難しそうだけど...


11/13/2011

GNU coreutils の yes(1) を読む(後編)

GNU coreutils の yes(1) を読む(前編) の続き、yes.c の残りは次のようになっている。
     75   if (argc <= optind)
     76     {
     77       optind = argc;
     78       argv[argc++] = bad_cast ("y");
     79     }
     80
     81   for (;;)
     82     {
     83       int i;
     84       for (i = optind; i < argc; i++)
     85         if (fputs (argv[i], stdout) == EOF
     86             || putchar (i == argc - 1 ? '\n' : ' ') == EOF)
     87           {
     88             error (0, errno, _("standard output"));
     89             exit (EXIT_FAILURE);
     90           }
     91     }
最初の if 文は、引数の数(argc)が argv の中で次に処理されるべき要素を示すインデックス(optind)以下の場合に実行される、ということで、典型的には yes(1) が引数無しで呼ばれたときに if 文の中に入る。if 文の bad_cast() は、src/system.h で定義されていて、const char * を引数にして、char * で返す関数。const だったものを強引に const 外すから、bad_ なのかな。

次の while 文が、yes(1) の出力処理を実行してる。argv の optind から順に fputs していって、最後の要素を fputs したら改行文字を putchar(3) する。というわけで、

$ yes a b c
のように実行すると、"a b c" が出力されるわけだ。
$ yes
みたく、引数がない場合は、argv[optind] に "y" が設定されるから、"y" が連続して出力される。

この yes.c を読んで気になったのは、78行目、
     78       argv[argc++] = bad_cast ("y");
の部分。これ、メモリ破壊起こすんじゃないのかな....argv の要素数は argc で与えられているわけで、argv[argc] は与えられた領域を超えちゃってるような。ググって調べてみたけど、78行目みたいなことができる根拠がわからなかった。。誰か教えて!!

argc <= optind になる場合とか、そのほかいろんな制約がわかってないけど、たとえば、↓のようになってればすっきりするんだけど。。
@@ -74,8 +74,8 @@

   if (argc <= optind)
     {
-      optind = argc;
-      argv[argc++] = bad_cast ("y");
+      optind = argc - 1;
+      argv[optind] = bad_cast ("y");
     }
ま、いいやっ!

11/10/2011

暗証番号無しで iPad2 のロックを解除できるバグ?

Bruce Schneier さんのブログ で紹介されてたんだけど、Smart Cover があれば 暗証番号を入れなくても画面ロックが解除できちゃうバグ(不具合)が iPad2 にあるみたい。 紹介されていたのは この Casey Chan さんの記事。何がどうなるのかは、この動画を見れば(英語がわからなくても)大体わかる。


思ったことはふたつ:
- こういう不具合とかバグ見つける人すごい!
- セキュリティって大変....

MetaWatch が欲しい!

Make: Onlineの "Tool Review: MetaWatch Android-Compatible Wristwatch" ていう記事MetaWatch を知った!Android-Compatible... というところだけでも「おっ?」と思うのに、見た目もすっごくかっこいいし、しかも、$199 だって!これすっごく欲しいよ!!

TI の e-store で買えるらしい。TI といえば、eZ430-Chronos が前から気になってるんだけど、これ系の何かが MetaWatch のベースにもなってるのかな。eZ430-Chronos のときは、これに書いてあるように技適とらなきゃいけなかったんだけど、MetaWatch は日本でも手軽に使えるようになってくれるとうれしいなあー。

11/08/2011

Madeon さんの Pop Culture はノリノリ!

2,3ヶ月前だったか、はてぶ  で知った Madeon さんの Pop Culture。
こんな楽器(?)があるの知らなかったよ。



みんながすごいすごいと言ってたのは↑の live mashup バージョンなんだけど、Music Video バージョンを見るとすごさが倍増。知らない曲ばっかりでわからなかったけど、いろんな曲が使われてるのだ。


僕が一番気に入ってるのは↓の Dance Video バージョン。ダンスそのものも超ノリノリで楽しいんだけど、特に 2:48 付近の展開が大好き!


みんな才能ゆたかだかなー。

11/06/2011

GNU coreutils の yes(1) を読む(前編)

FreeBSD に続き、GNU coretutils の yes.c を前編、後編の2回に分けて読んでみる。対象のソースは Ubuntu 11.04 上で以下のコマンド実行してダウンロードできた coreutils-8.5 の yes.c。
$ apt-get source coreutils
 今回は前編。yes.c の main() 関数の前半部分、yes(1) のメイン処理に移る前の部分を読む。
     62   initialize_main (&argc, &argv);
     63   set_program_name (argv[0]);
     64   setlocale (LC_ALL, "");
     65   bindtextdomain (PACKAGE, LOCALEDIR);
     66   textdomain (PACKAGE);
     67
     68   atexit (close_stdout);
     69
     70   parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE_NAME, Version,
     71                       usage, AUTHORS, (char const *) NULL);
     72   if (getopt_long (argc, argv, "+", NULL, NULL) != -1)
     73     usage (EXIT_FAILURE);
[initialize_main]
gnu.core-utils.bugs に Bernard Giroud さんが投稿したメイルによると、initialize_main() は VMS ていうシステム上で redirect を実現するためのアイデアが起源になってるらしい。VMS 上では必ずしも bash (シェル) 上でコマンドが実行されなくて、redirect するのにちょっと工夫がいるみたい。この VMS は OpenVMS のことかな?

initialize_main() の定義は coreutils/src/system.h にある。さっきの VMS とか、そのほか、ちょっと変わった環境で redirect とか実現したい場合は、system.h 内の initialize_main() を適切な形で定義すればいい。こうすれば、それぞれのコマンドのソースを変えなくて済むからイケてる感じ。
/* Redirection and wildcarding when done by the utility itself.
   Generally a noop, but used in particular for native VMS. */
#ifndef initialize_main
# define initialize_main(ac, av)
#endif
[set_program_name]
set_program_name() は argv[0] から実行されたコマンド名だけを取り出して program_name ていうグローバル変数に設定する。program_name 変数は lib/progname.h で extern 定義されてるから、set_program_name(argv[0]) した後は、program_name 変数にアクセスすることでコマンド名が取れるってこと。
/* String containing name the program is called with.  */
extern const char *program_name;
[setlocale, bindtextdomain, textdomain]
このあたりは、ロケール関係。いままで使ったことないから、これはどっかで改めて勉強しよう。

[atexit]
atexit(3) はプロセスが通常終了するときに呼ばれるべき関数を登録する。yes.c だと、標準出力を閉じてそうな、close_stdout() を atexit(3) で登録してる。atexit(3) もいままで使ったことなかったけど、これは便利そうだ。

[parse_long_options]
yes(1) が --help か --version 付きで呼ばれたときの設定をする。--help と --version は coreutils のコマンドで共通みたい。このあたりの作りもかっこいいな。

[getopt_long]
第三引数の "+" の意味は man 3 getopt に書いてある。
If  the first character of optstring is '+' or the environment variable POSIXLY_CORRECT is set, then option  processing  stops as soon as a nonoption argument is encountered.
yes.c の getopt_long(...) を呼び出してるところ、オプション以外の引数があったらそこで解析をやめるし、何かオプションが指定されてたらそれはエラーだよ、って意味。getopt_long(3) は正しく解析できたときに -1 を返すから。

---
後編に続く。

scrumblr を勉強すれば node.js と仲良くなれるかも?

最近興味があるもののひとつが node.js。
昨日、ちょっと時間があったから、node.js をキーワードにして Google で検索していたら、かちびと.net がヒットして、scrumblr を知った。

scrumblr
a web-based simulation of a physical agile sprint board that supports real-time collaboration. it is built using node.js, websockets (using socket.io), CSS3, and jquery. i hope you like it.
とのことだけど、すっごく簡単にいうと、ホワイトボード+付箋紙 のウェブサービス。
デモページ で遊べば雰囲気がつかめるはず。

scrumblr が実現していること、さくさく感もさることながら、この見た目、フォント、すっごくいい!僕好み。github でソースコードを公開してくれてるし、せっかくだから勉強させてもらおうかなあ。






11/05/2011

Kickstarter に大注目!

MAKE: Japan のブログ で知ったんだけど、Kickstarter っていう、資金援助のプラットフォームがあるらしい。MAKE: Japan のブログ の記事中の Ryo Chijiiwa さんの言葉を借りると、Kickstarter は:
Crowd-funding(クラウドファンディング:大衆から資金を調達する仕組み)
Kickstarter から一番多くの資金を得たという an iPod nano watch の画像みたら、なにこれすごい!かっこいい!ほしいよ、これ(下に動画貼りました)。

Kickstarter については、また改めて MAKE: Japan のブログ をじっくり読むとして、やっぱり、ハードもできるようになりたいなあと思う。




11/03/2011

ブログに本の画像を貼る方法

dankogai さんのブログ の書評の記事には本の画像がのっている。こういうのを僕のブログでもやりたいな、と思ったので、やり方を調べてみた。

やり方のひとつとして、Amazon アソシエイト(アフィリエイト) を利用する方法があるみたい。Amazon のアカウントがあれば、数分で画像をはりつけるための URL が作れるようになる。ほかにもいろいろな機能があるみたいだけど、それはまた今度調べよう。

というわけで、おととい?書いた WEB+DB のブログ記事のところに画像を追加した。

11/02/2011

「アイデアを目に見える形にしてこそのエンジニア」


WEB+DB PRESS Vol.65 に掲載されている、中島聡さんの「Software is Beautiful」の第10回のテーマは「アイデアを目に見える形にしてこそのエンジニア」。



こういう風になりたい、と思うことがそのまま書かれてた。思いついたアイデアをサクっと作れるようになりたいなあ。

関係ないけど、この記事の中に出てくる、中島聡さんの高校生のころの話がすごい。僕の高校時代とはまったく違うなあ、と思ったけど、でも、そういえば、僕、高校のとき何してたんだっけ。。。

10/31/2011

ミルクラッパー Shibori さんのラップを聴いて、ミルキーハイ!

夏休みにバスの中で読んだ雑誌で知った、Shibori さんのラップ。
僕は特に「酪農」が好きで、「牛舎」を連発するところが気に入ってます!






10/30/2011

FreeBSD の yes(1) を読んでみる。

yes(1) は引数で渡された文字列か、"y" を繰り返し表示するコマンド。
お勉強のために、FreeBSD の HEAD にある rev. 1.6 を読んでみる。

プログラムの本体はすっごいすっきり。無駄がない。
int
main(int argc, char **argv)
{
 if (argc > 1)
  while (puts(argv[1]) != EOF)
   ;
 else
  while (puts("y") != EOF)
   ;
 err(1, "stdout");
 /*NOTREACHED*/
}
puts(3) は "return a nonnegative integer on success and EOF on error." だそう。err(3) はエラーメッセージを標準エラー出力に出してくれる。

yes.c の先頭のほうの、#ifndef lint から始まるあたりについては、openbsd-newbies って ML で Chris Palmer さんがやさしく教えてくれるう。
#ifndef lint
static const char copyright[] =
"@(#) Copyright (c) 1987, 1993\n\
 The Regents of the University of California.  All rights reserved.\n";
#endif /* not lint */

#ifndef lint
#if 0
static char sccsid[] = "@(#)yes.c 8.1 (Berkeley) 6/6/93";
#else
static const char rcsid[] = "$FreeBSD: src/usr.bin/yes/yes.c,v 1.6 2010/12/11 08:32:16 joel Exp $";
#endif
#endif /* not lint */
この copywrite とか rcsid はバイナリに埋め込んでおくってことだと思ったんだけど....strings(1) とかで見えないなあ。。ま、また、なんかのときに調べてみよ。

ところで、
$ yes a b c
を FreeBSD の上でやると、"a" が連続して表示されるんだけど、cygwin 上だと、"a b c" が連続されて表示される。今度、GNU coreutils の yes(1) を読んでみよう