ページ

2009年12月25日

ありえるえりあ勉強会@五反田~テスト編~


ありえるえりあ勉強会@五反田 テスト編」をウノウさんと共催で来年1月29日に開催します。アリエルはあまり人付き合いがよい会社ではないので、どこか別のところと何かをやるというのは珍しいことです。

さて、アリエルと言う会社はプログラマの人が中心となって作った会社ではっきり言って、僕はテストについてよく分からないです。ロータスでもそこそこテストしていましたが、苦手です。 テストに関してドキュメントや本を読むようになったのは、ほんの数年前です。

それでも、社内の人は雑誌にテストに関する記事を書いたりしていますが、 僕は全く自信がありません。以前からウノウさんのブログ(テスト番長)を読んでいてい、直接お話すれば何か分かるかも?と思っていたのですが、直接知り合う機会がなかった(もし、どこかで名刺交換していたらごめんなさい)ので、ちょっと仲良くなるために勉強会をすることにしました。  

テストに関してどんなコミュニティがあるのかも分からないし、ブログとかで断片的な情報だったり、いきなり小難しいことから入っていって読む気が失せたり・・・。 それが今回の勉強会で改善されたらうれしいな、と言う期待があったりします。それから、テストに興味がなくても、IT業界に興味があるひとでもおもしろい内容になるかも。

今回は自分の苦手な分野の勉強会でどうなるか楽しみです。 でわでわ




2009年12月22日

ブレスの位置

さて、golangは(多分trunkだけだと思う)文のセパレータとして基本的に改行が使われるようになりました。;をセパレータに使ってもいいですが、僕はない方が好きです。Pythonの影響です。それと同時にブレスの位置も微妙に厳しくなりました。

func myfunc() {
....
}

はコンパイルできますが、
func myfunc()
{
...
}
はコンパイルエラーになります。基本的に僕は最初の方の書き方しかしないのでいいのですが、今まで書いたコードの中に一カ所だけ下の方のコードのような箇所があり、コンパイルエラーがでました。

そんなことはどうでもいいのですが、それを開発部長に話したら、「そんな書き方するんですか?」と。まあ、間違って改行がはいちゃっただけなのですが。で、下の方の書き方は、C世代のおじさんたち書き方と言う結論になりました。今時のJava世代の若者は上の方の書き方をするのです。「僕はCでも上のような書き方をしてたよ」と言うと、「おおたにさんのAirOneのコードは全部下のかきかたですよ。」と開発部長。なかなかあなどれません。でも、AirOneのC/C++のあとにJavaになって、上の方になれてくると下の書き方は少し、違和感がありますが、開発部長はおじさんなので、「Cは下の方の書き方じゃないと違和感がある」と。おじさんは新しいものになじめません。(うーん、かなり事実をねじ曲げているような・・・)

まあ、言語ごとにコーディングスタイルが統一されていればそれでいいのです。

ブログを書くのは難しい

僕はブログを、多分、2000年頃(2000年はまだブログという言葉はなかったかもしれない)から書いています。最初はtDiaryの本当に日記のようなもの(と言うか日記)でした。そこそこの時間書いているので、特に抵抗もありません。

 アリエルでも、開発者用のブログがあります。僕はそこには書いていませんが、アリエルは割と緩い会社で、どこに書いてもいいというルールになっています。ある程度は業務の一部になっています。

でも、中々社員の人は書いてくれません。よく聞く理由は「時間がない」というものです。僕は大体、一個の記事あたり10分とか15分ぐらいで書いています。個人差があるので一概には言えませんが30分あれば十分でしょう。これぐらいの時間であれば作り出せるはずです。

次によく聞く理由は「忘れていた」です。多分、一週間に一個だから忘れるのです。習慣化するまで、毎日書けばいいだけです。 とか言うものの、業務の一部なので、書かないと給料が上がらない(上がり方が緩い)だけです。

でも、もっとよく聞く理由は、「ネタがない」というものです。なにやら、この手法を使えばネタはどんどん出てきそうな気がしますが、どうなんでしょう?僕は昔よりは書く頻度は減っていますが、全体を平均すると二日に一個は書くようにしています。ネタは、なくなります。一月ぐらいであればストックでなんとか書けますが、それ以上はなくなります。なので、技術的なこととか、アンテナを張ったり調べたりしています。あまりやり過ぎる(強迫観念がある)と本末転倒ですが、常に興味を持って調べるのは技術者には必要なことです。また、それを自分なりにまとめる作業も重要です。それが、他人の役に立てばいいですが、技術的なお話は完全に自分のメモなのです。と理由をつけても、結局自分が好きだからやっているだけです。

でも、ググって最初のページに表示されるのものが自分のページだったりするとがっかりするのはなぜなんでしょう? 

 



2009年12月17日

4階まであがれる体力

アドレナリンジャンキーを読んでいます

基本的には読み終わってからしか書かないのですが、たまには今読んでいるものについても少し書きます。アリエルでは、なぜかアドレナリンジャンキーが今はやっています。アリエルには読み終わった本は会社に捨てるという文化があるので、たまに同じ本が複数あったりします。そして、会社に捨てられたかわいそうなアドレナリンジャンキーの本が数冊あります。

読んでいるとかなりおもしろいです。自分に当てはまったり、納得できたり、ちょっと違うんじゃないかとおもうところもあります。でも、困ったことに読んでもよく分からないことがあります。過去にその状況に直面したことがないからかもしれないし、もっと別の原因かもしれません。

僕は80%の力で走り続けるチームを作りたいと思っていましたが、間違っていなかったかもしれません。開発部長は100%の力で走ろうとしているように見えます。 

 




2009年12月16日

Google Readerの「送信先」

僕はGoogle Readerをかなり前から使っています。Googleに思い入れがあるとかじゃなくって、単にユーザIDとパスワードの管理コストを減らしたいだけです。大昔はクライアントソフトを使っていましたが、iPhoneでも見たいと思うようになってからGoogle Readerだけを使うようになりました。

さて、そんなGoogle Readerですが、かなり前から英語版はSendToとかでInstapaperにエントリを保存できていました。でも日本語版はありませんでした。英語でも日本語でもどっちでもいいのですが、なぜか日本語で使っていました。で、今日、送信先という項目が追加されていることに気づきました。うーん、遅い?

で、送信先でInstapaperを使えるようにしましたが、新しいウィンドウがでて、保存ボタンを押さないと保存してくれません。僕はそんな確認をしてもらわなくても結構です。なので、カスタムリンクで登録します。ブックマークレットの内容をみて、リンク先はこんな感じ。
http://www.instapaper.com/b?v=4&k=よくわからないブックマークレットのキー&u=${url}&t=${title} - ${source}&s=
「よく分からないキー」は、ブックマークレットをみて、&k=の後に続いている文字列で、その次の&までです。。ついでに、アイコンは http://www.instapaper.com/favicon.png としてInstapaperのものを使います。これで、送信先を選択するとウィンドウが立ち上がってInstaperに勝手に保存してからウィンドウが勝手に閉じます。これならそれほどストレスになりません。

めでたしめでたし。

2009年12月15日

言っても伝わらないものは伝わらない

先週、会長が「プロジェクトのもっとうまく運営するためにモチベーションをコントロールしろ」とある人に言っていました。まあ、僕が普段言っていることで、何も目新しいことはありません。(会長に対してひどい物言いですね)

横で聞きながら、多分、相手には伝わっていないなー、と思っていました。僕が10年前に同じことを言われたら、言っていることが分からなかったと思います。まあ、当時分からなかったことが今分かったり、今でもまだ分からないこともあります。

伝わらないのは仕方ないことだと思っています。ただ、それは伝えようとしないこととは別です。伝えようとした上でそれでも伝わらないことがあります。ちゃんと説明すれば伝わるというのは幻想です。特にモチベーションのコントロールとか訳わかんないものはなおさらです。さらにすべてを工数で管理しようとする人にとっては、なおさら意味不明のことです。で、ちょっと前までは、伝えた上で自分で体験すれば、それが分かると期待していました。でも、最近は、同じことを体験しても、それが分かる人と分からない人がいます。体験した上で、やっぱりそれが分からないのは、なぜだか分かりません。それにどうすればそれが分かるようになるか、分かりません。

あと10年すればわかるようになるかもしれません。もっと時間がかかるかもしれません。 



2009年12月14日

websocketsの覚え書き

HTML 5 Web Sockets vs. Comet and Ajax
なかなかおもしろいような、当たり前のような・・・。AJAXは定期的にポーリングするので負荷が高くなりますね。Cometのロングポーリングは、コネクションの管理が大変な上に、HTTPヘッダーのオーバーヘッドの方が大きいよね。だからWebSocketsだよね。と言うお話。

W3Cの仕様。なんだか、HTTPを拡張した方がよくね?
HTTPのGETを使ってネゴシエーションした後に、コネクションをオープンにしたままデータの送受信を行う。wsと言うプロトコルが新たに定義されていて、ポート番号は81。ReverseHTTPとか言うのがあるらしいけど、WebSockets使った方がよくね?

これを使えば、IEなどHTML 5を使っていなくてもWebSocketsでハッピーになれるらしい。Cometみたいな感じでエミュレートするっぽい。サーバサイドでもGateway的に動作できるらしい。

どうでもいいけど、XMPP使ってサーバ同士がもっとおしゃべりしあうのもいいかも、と少し思った。今の会社の製品はデータベースかmemcacheを使っておしゃべりしている。


2009年12月12日

ThunderBird3


Thunderbird3が今週やっとリリースされました。一ヶ月か二ヶ月前までThunderbird2を使っていましたが、あまりの遅さに耐えられず、Thunderbird3のベータ版を使っていました。やっと正式版がでたので、アップグレードして、引け目を感じなくなりました。

Thunderbird3はそれでいいのですが、スケジュールもOutlookのようにメーラの中に表示したいので、Lightningを使っています。でも、この人はまだ、Thunderbird3に対応していないので、Lightingはnightlyビルドを使っています。仕事で使っているのに、冒険のしすぎのような気もします。でも、IMAPでデータはすべてサーバにおいてあるので、いざとなればクライアントを変えるだけです。 

さて、テーマを変えたいのですが、 僕のThunderbirdではメールの詳細画面を開くとアイコンが悲しいことになってしまいます。表示がおかしいです。しかたないので、味気ないデフォルトのテーマのままです。テーマがわるいのか、僕だけの問題なのか分かりませんが・・・。

メールの中で「添付」と入力すると、下の方に添付ファイルを追加を促すようになっています。これはそこそこ便利なんですが、添付ファイルをつけなくてもそのまま送信できてしまいます。添付ファイルをつけないまま送信しようとすると警告ダイアログとかを出してくれるともっとうれしいのだけどな・・・。 

それ以外は、そこそこ快適です。でも、メーラにそれほど機能を求めないので、 スピードさえ速ければ何でもいいです。




2009年12月11日

ChromeとWebSocket

WebSocketの仕組みはまだ、ちゃんと調べていませんが、昨日の続き。Chromeを立ち上げてreloadすると、netstatで見たコネクションの数が一個だったのが二個に増えます。一つのブラウザで三個以上になることはありませんが、気持ち悪いです。

window.onunload = function() {ws.close();};などして、明示的に接続を切ってあげると、コネクションは二個に増殖することはありません。closeを呼んであげないと、サーバの方で接続がまだ維持されているかのように振る舞い続けます。つまり、readは待ち続けるし、writeに至ってはちゃんと書き込めたかのようにみえます。

で、機能のサンプルは書き込み、読み込みそれぞれ、goroutineが作られるので、うれしくありません。クライアントがcloseをコールするとちゃんと、読み込み・書き込みでエラーというかEOFとかでてくれます。

やっぱり、オブジェクトのメモリが破棄されるときはcloseして欲しいですが、メモリが破棄されていないのかもしれません。

まあ、接続は明示的に閉じろと言うことで。

2009年12月10日

WebSocketでChatを作ってみた

MacにChromeを入れたことだし、HTML5のWebSocketでChatを作ってみました。サーバがgolangで作っています。クライアント側のコードは、こんな感じです。
<html>
<head><title>Web Socket Chat</title></head>
<body>
<script>
var ws = new WebSocket("ws://127.0.0.1:1972/chat");
ws.onopen = function() {
};

ws.onmessage = function(message) {
var txtNode = document.createTextNode(message.data);
var brNode = document.createElement('br');
var cnode = document.getElementById("content");
cnode.appendChild(txtNode);
cnode.appendChild(brNode);
};
</script>
<h1>Web Socket Chat</h1>
<div id="content">
</div>
<input id="message" type="text" onChange="javascript:ws.send(this.value);this.value='';"/>
</body>
</html>



ポイントは赤い文字の部分で、簡単にWebSocketのオブジェクトを制御できます。
サーバサイドはgolangでこんな感じ。まあ、いつぞやのチャットサーバを書き換えたものです。


package main

import (
"http";
"log";
"bytes";
"fmt";
"os";
"websocket";
)

const MAXREQSIZE = 0x10000;

func startServer() {
// initialize
queue := make(chan string);
listen_chan := make(map [*websocket.Conn] chan string);

go func() {
for {
mesg := <- queue;
for _, c := range listen_chan {
c <- mesg;
}
}
}();

read := func(ws *websocket.Conn, errChan chan os.Error) {
buf := make([]byte, MAXREQSIZE);
for {
fmt.Print("Reading...\n");
l, err := ws.Read(buf);
if err != nil {
fmt.Print(err);
errChan <- err;
return;
}
fmt.Printf("received: %s¥n", buf[0:l]);
queue <- string(buf[0:l]);
}
};

write := func(ws *websocket.Conn, mesgChan chan string, errChan chan os.Error) {
for {
mesg := <- mesgChan;
_, err := ws.Write(bytes.NewBufferString(mesg).Bytes());
if err != nil {
errChan <- err;
return;
}
}
};

OnConnected := func(ws *websocket.Conn) {
fmt.Printf("Connection Opend\n");
mesgChan := make(chan string);
listen_chan[ws] = mesgChan;
errChan := make(chan os.Error);

go read(ws, errChan);
go write(ws, mesgChan, errChan);
err := <-errChan;
fmt.Printf("Done%d\n", err);
listen_chan[ws] = nil, false;
};

// http handlers
http.Handle("/", http.HandlerFunc(func(c *http.Conn, req *http.Request) {
path := req.URL.Path;
log.Stdout("Request URL: " + path);
http.ServeFile(c, req, "." + path);
}));

http.Handle("/chat", websocket.Handler(OnConnected));

err := http.ListenAndServe(":1972", nil);
if err != nil {
log.Stderr(err.String());
return;
}
}

func main() {
log.Stdout("starting server...");
startServer()
}





これを実行して、Chromeを複数動かして、どれかで何かを打ち込むと、他のブラウザに打ち込んだものが出現します

2009年12月9日

Mac版Chromeを入れてみる


Mac版のChromeベータ版がでたのでインストールしてみました。起動がとても速いです。Safariよりも速いです。レンダリングスピードとか、JavaScriptの実行速度は体感的にはSafariと変わらないですが、タブを開く速さはSafariより快適です。Flashもみれるし、ちゃんと動いています。

全体的な見た目は悪くないけど、ウィンドウのバーの一部にタブが浸食していて、バーをつまんでウィンドウを移動するのがやりにくいです。 5pxぐらいの差なんですけどね。

ベータ版と言うことですが、まだ、実装されていない機能があります。フォントが変えられないとかぐらいは気にならないのですが、「タスクマネージャ」が使えないのが悲しいです。まあ、開発者しかうれしくない機能かもしれませんが・・・。それ以外にもアプリケーションとしてショートカットを作れないとか、寂しいこともありますが、正式版がでればSafariからのりかえてもいいかなー、と感じます。たぶん、Mobile Meとブックマークの同期ができれば、乗り換えるかも。でも、ブックマークに何かを登録したのは、遙か昔のこと。 




iPod TouchにWired Frameをいれた

家には使わなくなったガジェットが転がっています。GoogleがくれたAndroidは子供のおもちゃです。SIMカードがささっていないiPhone 3Gは、音がでるし、カメラはついているので、これも子供のおもちゃです。ゲーム機と化しています。それ以外にもiPod Touchがいます。これはDockみたいなのにつながっていて、時々嫁が音楽を聴いています。でも、あまりつかわれいません。Touchの画面が悲しいです。

なので、もったいないのでデジタルフォトフレームにしようと思って、Wired Frameをインストールしました。デジタルフォトフレームを数千円か数万円をだして買う価値は感じませんが、既存のものをフォトフレームにするのはありです。

Wired FrameはFlickrの画像を表示してくれます。とりあえず、Flickrに登録しようとすると、そのIDは使っているからだめよ、と怒られます。すでに僕はIDを持っていたようです。だからそれを使います。

FlickrにはiPhotoから簡単に写真をアップロードできます。最初はiPhoneで完結しているものを考えていましたが、こっちのほうが管理が楽そうです。

それ以外にも、天気とか、時間とか、RSSとかでて、うれしいです。スケジュールの内容も出たりするともっとうれしいかも。

いろいろ、情報が出ているので、ちらっと見る気になります。iPod Touchはうっちゃおうと思っていたのですが、やっぱり使い続けることにしました。  



2009年12月8日

遅延証明書

電車が遅れたので、遅延証明書をもらいました。まあ、出す必要性はないのですが、今の会社の管理の仕方が?なので、出します。駅でもらった遅延証明書を出すと遅れた時間が書いていません。自分で本当に遅れた時間を書いて出そうとすると、それではだめです。と言われます。ホームページで何分遅れたかのっているのでそれを出してよこせと言います。自己申告だと嘘を書いているかもしれないと言うのです。うーん、駅の人に聞いたら、自分で書いていいって言われたんだけど(これ本当)。
めんどくさくなったのでそのまま出さないでおこうかと思ったんですが、JRのページで調べてみると一時間以上おくれたことになっています。それをそのまま出したら、その通り処理してくれました。うーん、僕は嘘はついていないし、言われた通りにしただけなのに、20分の遅延が1時間以上の遅延に変わっています。インターネットはすごいです。管理の人って馬鹿なの?
数百人規模の会社であればいろな人が混じりますが、顔と名前が一致する規模の会社で「嘘」を申告するかもしれないって言われると、どうなのかなー、と思います。そうやって、みんなきっちり給料分というか、時間分しか働かなくなります。
まあ、開発の人は管理されるのが嫌いなので、宿命かもしれません。

golang楽しんだけど・・・

Googleが先月公開したGoという言語で遊んでいます。最近は積極的に新しい言語を試してみようという気になれなかった(年のせい?)のですが、ちょうど年末なので(理由になっていないけど)ちょっと遊んでいます。言語自体はちょっと気持ち悪いところもありますが、嫌いじゃないです。もしくは、慣れれば平気です。 Goの技術的な話は個人のblogに書いていますが、ここではちょっと別のお話です。

金曜に昔アリエルでバイトしていた人がやってきて、「Goで何か製品を作らないのですか?」と聞いてきました。Goに限らず、言語については意外とアリエルは保守的です。僕が保守的なだけかもしれません。新しい言語を使わない理由は、いろいろあります。

1. 誰かとっても詳しい人はいるか?

会社としてやっていくには、ちょっと勉強しただけの知識ではどうにもならないことがあります。誰も詳しい人がいなければ、採用しません。でも、僕がとっても好きな言語であれば、その詳しい人に自分がなればOKです。

2. 後方互換性があるか?

新しい言語だと、後方互換性があるかどうかすら分からないので、即却下です。これは言語に限らず、ライブラリでも同じ基準で採用を決めています。バージョンアップしてコードを書き換えないといけないと、とてもやっていけません。なので、Pythonでもこの辺はちょっと厳しい。Rubyはもってのほか(誤解していたらごめんなさい)です。Javaぐらい進化が 遅いといいのですが、それだとおもしろくありません。

3. プログラマを集められるか?

一昔前はC/C++プログラマは沢山いました。今はJavaプログラマが腐るほどいるので、Javaプログラマを集めるのは簡単かもしれません。アリエルの場合は、Javaプログラマを募集していますが、ぼくは純粋培養のJavaプログラマはそれほど、重要視していません。僕の知る限り、PythonやRubyをやっている人は、それしかできないということはないはずです。 つまり、その言語でプログラミングができるようになれる人を集められるかどうかです。僕の小さな社会の偏見では、純粋培養のJavaプログラマは他の言語を積極的に覚えようとしません。

それ以外にもいくつか基準はありますが、それはまた、今度。うーん、結論はJava最強?えっ、何それ? 



2009年12月4日

ロータスOB会

昨日はロータスのOB会でした。知らない人もいるかもしれないので、一応言っておくと、ロータスは車の会社ではありません。今はIBMに完全に統合されてしまった会社です。かつて1-2-3やNotesで一世を風靡して、その後かなしーことになった会社です。僕は完全に統合される前にやめちゃったので、ロータスがIBMに統合されてどうだったのかは知りません。

ロータスOBは400人ぐらいいて、200人ぐらいがIBMにまだいると言っていました。全部合計しても数百人ぐらいの会社だったのか・・・。 知らんかった。

さて、同期の人たちはあまり来ていなくて残念でした。ある人は、大企業の人とベンチャーで今もばりばりやっている人の文化の摩擦を嘆いていましたが、まあ、僕は、体調がいまいちよくなくって、よくわかりません。それはいいのですが、名前が思い出せなくて困りました。それから、IBMと言えば、アリエルとはコンペもする競合他社さんです。

僕がロータスをやめてから10年弱だと思いますが、みんな年取ったな。それから、ロータスとは全く違う文化の会社にいつづける気持ちはよく分かりません。でも、ロータスに入ってよかったと思うことは、同期がいることだと思います。それ以外は、うーん、



マズイ

2009年12月3日

マズイ

マンゴーあまり好きじゃないが

OAuth社内勉強会

アリエルでは主に2種類、正確には3種類の勉強会があります。一つが、9月のEmacs勉強会のような社外に対する勉強会です。来年の一月にまあ、勉強会を開きます。Emacsに限らず、今後は定期的に勉強会をする予定です。のこりの二つは社内勉強会です。社内勉強会はなぜか、2種類あります。一つが、「自称20代の人たちの勉強会」です。若者と自認している人たちが名目上は自発的に行っています。これは割と定期的に行われています。それと、不定期に勉強会があります。

社内勉強会はテーマは様々です。今回の不定期な勉強会のテーマはOAuthで開発部長が講師でした。 ちなみに内容は仕事とは全く関係がありません。さて、僕はOAuthとOpenIDの区別があまりついていません。基本的には同じような仕組みで、できることもほぼ同じだと認識しています。ちょっと乱暴ですね。で、OAuthがGoolgeさんでOpenIDがGoogleさんも含めていろんなところで使われているものと思っています。OpenIDでもできることが同じなので、僕はOAuthは過去の技術だと勝手に認定していました。でも、開発部長はそんな風に断定はしていません。

で、GoogleはAuthSubと言う認証の仕組みも持っています。こっちは、OpenIDとか、OAuthと違って簡単です。開発部長はAuthSubをCで実装してマルチスケジューラに組み込んでいます。すがPこと、菅原さんはこっそりEmacs Lipsで実装しています。僕もひっそりとPythonで実装したものをもっています。社内を見渡しただけでも3つも実装がありました。変な会社です。



2009年12月2日

@itのGolangの記事の誤解

第1回 Google Go登場の背景
現状のGoでは関数内に複数のreturnを書くことができない
って、それはすごーい誤解。と言うか、これぐらいはもう少し勉強してから書いて欲しい。if xxx { return x;} else {return y;}のように書けないと言うだけで、if xxx { return x;} return y;のようには書けるし。と言うか、複数のreturn書けないってありえないでしょう。

「クラスの継承」とオブジェクト指向が同一視されているところはなんとなーくJava脳になっているような気がする。で、書き方は変かもしれないけど継承も一応できるし。interfaceがduck typingなところが好き嫌いとか、今までと違うところのような気がする。genericはあまり興味がないけど、例外が欲しいというのは納得できるんだけど、僕はそれは単にjumpしたいから。

文法は、Pascalっぽくって、僕は好きじゃない。なれれば気にならないけど。