2009年12月29日
2009年12月25日
ありえるえりあ勉強会@五反田~テスト編~
ありえるえりあ勉強会@五反田 テスト編」をウノウさんと共催で来年1月29日に開催します。アリエルはあまり人付き合いがよい会社ではないので、どこか別のところと何かをやるというのは珍しいことです。
さて、アリエルと言う会社はプログラマの人が中心となって作った会社ではっきり言って、僕はテストについてよく分からないです。ロータスでもそこそこテストしていましたが、苦手です。 テストに関してドキュメントや本を読むようになったのは、ほんの数年前です。
それでも、社内の人は雑誌にテストに関する記事を書いたりしていますが、 僕は全く自信がありません。以前からウノウさんのブログ(テスト番長)を読んでいてい、直接お話すれば何か分かるかも?と思っていたのですが、直接知り合う機会がなかった(もし、どこかで名刺交換していたらごめんなさい)ので、ちょっと仲良くなるために勉強会をすることにしました。
テストに関してどんなコミュニティがあるのかも分からないし、ブログとかで断片的な情報だったり、いきなり小難しいことから入っていって読む気が失せたり・・・。 それが今回の勉強会で改善されたらうれしいな、と言う期待があったりします。それから、テストに興味がなくても、IT業界に興味があるひとでもおもしろい内容になるかも。
今回は自分の苦手な分野の勉強会でどうなるか楽しみです。 でわでわ
2009年12月22日
ブレスの位置
func myfunc() {....}
func myfunc(){...}
ブログを書くのは難しい
僕はブログを、多分、2000年頃(2000年はまだブログという言葉はなかったかもしれない)から書いています。最初はtDiaryの本当に日記のようなもの(と言うか日記)でした。そこそこの時間書いているので、特に抵抗もありません。
アリエルでも、開発者用のブログがあります。僕はそこには書いていませんが、アリエルは割と緩い会社で、どこに書いてもいいというルールになっています。ある程度は業務の一部になっています。
でも、中々社員の人は書いてくれません。よく聞く理由は「時間がない」というものです。僕は大体、一個の記事あたり10分とか15分ぐらいで書いています。個人差があるので一概には言えませんが30分あれば十分でしょう。これぐらいの時間であれば作り出せるはずです。
次によく聞く理由は「忘れていた」です。多分、一週間に一個だから忘れるのです。習慣化するまで、毎日書けばいいだけです。 とか言うものの、業務の一部なので、書かないと給料が上がらない(上がり方が緩い)だけです。
でも、もっとよく聞く理由は、「ネタがない」というものです。なにやら、この手法を使えばネタはどんどん出てきそうな気がしますが、どうなんでしょう?僕は昔よりは書く頻度は減っていますが、全体を平均すると二日に一個は書くようにしています。ネタは、なくなります。一月ぐらいであればストックでなんとか書けますが、それ以上はなくなります。なので、技術的なこととか、アンテナを張ったり調べたりしています。あまりやり過ぎる(強迫観念がある)と本末転倒ですが、常に興味を持って調べるのは技術者には必要なことです。また、それを自分なりにまとめる作業も重要です。それが、他人の役に立てばいいですが、技術的なお話は完全に自分のメモなのです。と理由をつけても、結局自分が好きだからやっているだけです。
でも、ググって最初のページに表示されるのものが自分のページだったりするとがっかりするのはなぜなんでしょう?
2009年12月17日
アドレナリンジャンキーを読んでいます
基本的には読み終わってからしか書かないのですが、たまには今読んでいるものについても少し書きます。アリエルでは、なぜかアドレナリンジャンキーが今はやっています。アリエルには読み終わった本は会社に捨てるという文化があるので、たまに同じ本が複数あったりします。そして、会社に捨てられたかわいそうなアドレナリンジャンキーの本が数冊あります。
読んでいるとかなりおもしろいです。自分に当てはまったり、納得できたり、ちょっと違うんじゃないかとおもうところもあります。でも、困ったことに読んでもよく分からないことがあります。過去にその状況に直面したことがないからかもしれないし、もっと別の原因かもしれません。
僕は80%の力で走り続けるチームを作りたいと思っていましたが、間違っていなかったかもしれません。開発部長は100%の力で走ろうとしているように見えます。
2009年12月16日
Google Readerの「送信先」
http://www.instapaper.com/b?v=4&k=よくわからないブックマークレットのキー&u=${url}&t=${title} - ${source}&s=
2009年12月15日
言っても伝わらないものは伝わらない
先週、会長が「プロジェクトのもっとうまく運営するためにモチベーションをコントロールしろ」とある人に言っていました。まあ、僕が普段言っていることで、何も目新しいことはありません。(会長に対してひどい物言いですね)
横で聞きながら、多分、相手には伝わっていないなー、と思っていました。僕が10年前に同じことを言われたら、言っていることが分からなかったと思います。まあ、当時分からなかったことが今分かったり、今でもまだ分からないこともあります。
伝わらないのは仕方ないことだと思っています。ただ、それは伝えようとしないこととは別です。伝えようとした上でそれでも伝わらないことがあります。ちゃんと説明すれば伝わるというのは幻想です。特にモチベーションのコントロールとか訳わかんないものはなおさらです。さらにすべてを工数で管理しようとする人にとっては、なおさら意味不明のことです。で、ちょっと前までは、伝えた上で自分で体験すれば、それが分かると期待していました。でも、最近は、同じことを体験しても、それが分かる人と分からない人がいます。体験した上で、やっぱりそれが分からないのは、なぜだか分かりません。それにどうすればそれが分かるようになるか、分かりません。
あと10年すればわかるようになるかもしれません。もっと時間がかかるかもしれません。
2009年12月14日
websocketsの覚え書き
2009年12月12日
ThunderBird3
Thunderbird3が今週やっとリリースされました。一ヶ月か二ヶ月前までThunderbird2を使っていましたが、あまりの遅さに耐えられず、Thunderbird3のベータ版を使っていました。やっと正式版がでたので、アップグレードして、引け目を感じなくなりました。
Thunderbird3はそれでいいのですが、スケジュールもOutlookのようにメーラの中に表示したいので、Lightningを使っています。でも、この人はまだ、Thunderbird3に対応していないので、Lightingはnightlyビルドを使っています。仕事で使っているのに、冒険のしすぎのような気もします。でも、IMAPでデータはすべてサーバにおいてあるので、いざとなればクライアントを変えるだけです。
さて、テーマを変えたいのですが、 僕のThunderbirdではメールの詳細画面を開くとアイコンが悲しいことになってしまいます。表示がおかしいです。しかたないので、味気ないデフォルトのテーマのままです。テーマがわるいのか、僕だけの問題なのか分かりませんが・・・。
メールの中で「添付」と入力すると、下の方に添付ファイルを追加を促すようになっています。これはそこそこ便利なんですが、添付ファイルをつけなくてもそのまま送信できてしまいます。添付ファイルをつけないまま送信しようとすると警告ダイアログとかを出してくれるともっとうれしいのだけどな・・・。
それ以外は、そこそこ快適です。でも、メーラにそれほど機能を求めないので、 スピードさえ速ければ何でもいいです。
2009年12月11日
ChromeとWebSocket
window.onunload = function() {ws.close();};などして、明示的に接続を切ってあげると、コネクションは二個に増殖することはありません。closeを呼んであげないと、サーバの方で接続がまだ維持されているかのように振る舞い続けます。つまり、readは待ち続けるし、writeに至ってはちゃんと書き込めたかのようにみえます。
で、機能のサンプルは書き込み、読み込みそれぞれ、goroutineが作られるので、うれしくありません。クライアントがcloseをコールするとちゃんと、読み込み・書き込みでエラーというかEOFとかでてくれます。
やっぱり、オブジェクトのメモリが破棄されるときはcloseして欲しいですが、メモリが破棄されていないのかもしれません。
まあ、接続は明示的に閉じろと言うことで。
2009年12月10日
WebSocketでChatを作ってみた
<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日
遅延証明書
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の記事の誤解
現状のGoでは関数内に複数のreturnを書くことができない




