Monthly Archive for August, 2006

コーヒーメーカーサーバー

語感が良いです。

コーヒーメーカのサーバ

ついつい洗い物してるときに割っちゃったコーヒーメーカーのサーバを、なんとかしなきゃと思い、無印のお店で相談してみました。そしたら、ちゃんと部分売りしてくれると。さっそく頼んでおきました。

やっぱりこういうふうに部品ごとに入手可能になっているのがアフターサービスでは大事なんではなかろうかと思ったりします。それと、年月が過ぎて型落ちしてしまっても、ちゃんと交換部品が手に入るようになっていることも大切なんだろうなと。後者は難しそうですけれどね。

ともあれ、無印の高感度++でした。


ドイツ

妻がドイツに出張になりました。

これまで6年くらい前に生協で買ったちっちゃなスーツケースしかなかったので、しっかりしたやつを探しました。 ポイントは、

  • 4輪
  • 軽い
  • 丈夫
  • やや大きめ

SUPER LIGHTS PCというのを買いました。100% ポリカーボネイトで軽くて丈夫とのこと。たしかに、横にあったABS樹脂でできている同じくらいの大きさのものと持ち較べしたら、圧倒的な差が。

あと、ドイツに限らず英語圏外のヨーロッパのひとびとは英語でしゃべってくれないと聞いたことがあるので、ドイツでも困らないように、旅の指さし会話帳DS ドイツ も持たせることにしました。

何せ、無事に帰ってきて欲しいものです。


【送料無料!】【プレゼント付★】最軽量ポリカーボネート100%『SUPER LIGHTS PC』/ハードキャ... 【送料無料!】【プレゼント付★】最軽量ポリカーボネート100%『SUPER LIGHTS PC』/ハードキャ…

LL Ring

LL Ring

去年に引き続き、LLの集いであるLL Ringに行ってきました。新木場遠い。

感想

  • 関数型が勢いづいてる
  • やはりプロジェクタは鬼門
  • リング硬かった
  • 「キミならどう書く」のお題。家計簿アプリは自分もRailsでつくっているので、興味深かった
  • リング上でプレゼンするのは難しそう
  • 休み時間が妙に長かったような
  • 素人さんのSICP会で見かける顔がちらほらいたり
  • リング上の人達に重きが置かれすぎているような。もっと観衆参加型のほうがよいんじゃないかな
  • 技術すごいひとはプレゼンも素晴らしい。流石だと思う
  • Mac多い。MacBook羨まし
  • 生Matz氏見た。感激
  • みんな普段何して飯食ってんだろう?
  • 飯といえば、新木場の吉野家には鰻丼があるのだな
  • スタッフのみなさまありがとうございました。

個別

関数型

  • デバッグ (難しそう | めんどそう)
  • 頭良い人にはピッタリだけど、そうでないひとには厳しい。実際、周りの人達に広めようとしたら、そういう声が返ってきたし。そうでない人達にとっては、命令型言語のほうが直感的なのだということ

Scripting For Java Platform

  • ScriptからJavaのオブジェクトを触りに行くとか、なんか卒論を思い出した (cf : ぶぶ )
  • いろいろなLLが使えるのは素晴らしい

ActionScript

  • やっぱFlashは生産性高いと思った。フレームベースでアニメーションの状態を確認できたり、グラフィックスとスクリプトの連携が見て解かるというのは素敵。
  • Eclipseで開発できるのもGood
  • でも開発環境が6万もするのはBad

L.L Gong

  • c-wrapper素晴らしい。凄い。
  • Sumibi.org。僕もあちらSKKとかやってます。アクセス数伸びる一方なようで羨ましす
  • Plaggerやっぱ凄い。MVCのCだという説明がすごい納得だった

まとめ

やっぱりイベントに来るとモチベーションが上がります。Haskellもうちょっと練習して、SICPもちゃんと読み進めて、Railsアプリをじゃかじゃか書いて、ActionScriptでグラフィカルなプログラムを書きたいと思いました。

1年後には、あの場で何か発表できるものをつくっていたいと思います。

爆発炎上するバッテリー on PowerBook

Engadget.jp:アップル、180万本のソニー製バッテリーをリコール を読んで、うちのは大丈夫かいなと調べてみました。そしたら見事にビンゴ

PowerBook 15

PowerBook 15”のバッテリーがiBook G4およびPowerBook G4バッテリー交換プログラム のA1078に合致してしまいました。PowerBook 12”はセーフ。

PowerBook 12

慌てふためきながら、アップルのリコールプログラムに申し込んで交換してもらうことにします。爆発炎上はしゃれになりません。


と、フォームに入力して送信してみたのですが、

このシリアル番号は無効または本プログラムに該当しません。

と返されました。よくよく元のページを見ると、対象バッテリーのシリアル番号は、3X446 – 3X509なので、このバッテリー (3X435…) は対象外なのでした。よかった。


しかし、いい加減このはやとちりの癖直さないとな… :(

W-ZERO3キャンペーンのイヤホンマイク

W-ZERO3キャンペーンのイヤホンマイク

7月初めくらいに送っていたキャンペーンの景品がやっと届きました。

これで、あのでかい筐体を持って話す違和感から解放されるのでしょうか。されないだろうな。

さっそく試してみたところ、マイクは思ったよりも感度が良くて、普通にしゃべれそうです。

イヤホンの方が驚きで、ちゃんと密閉型のインナーイヤホンでした。電車の中でも遮音できるぞ、とな。

さっそく明日使ってみようと思います。

Google Code Jam Practice

Practiceに2つ取り組んでいるうちに思ったこと。

求められているのは、

  • 問題が何を問うているかを見抜くこと
  • 最適なアルゴリズムを導きだせること
  • アルゴリズムを素早くコードに移すこと

あと、過去問を調べてみたところ、アルゴリズムとしてはグラフや文字列のマッチングが問題になることが多いみたい。Googleで実際に解くような問題っぽいですね。

こうした現実的な問題に対して、いかに素早く適切な解を出せるかというところが、Googleでは大事なのかなと思ったりしました。

Google Code Jam 2006 Practice 500

この前書いた Google Code Jam 2006 に続いて、500点問題にも取り組んでみました。

結果

  • 得点 : 150.1pts
  • 所要時間 : 4時間

だめだ…

感想

今回の問題は、割とアルゴリズムをイメージしやすかったので、けっこういけるんじゃないかなぁと期待していたのですが、だめでした。

  • きつい条件が1つだけあって、そこをクリアできない
  • 問題の理解間違い x 2

というか、どうも問題に納得いかないのです。例で上げられている答えのうち、最後のやつがどうしても14にならなくて。


結局240行くらいのコードになってしまいました。 高得点者のコード見てみたら、もうぜんぜんシンプルな。そんなんでできるんかい、と突っ込みChallengeしてみたら、見事に玉砕してしまいました。

世界にはすごい人々がいるのだなぁと。でもまだあきらめずにやってみます。

A Search Engine That’s Becoming an Inventor

A Search Engine That’s Becoming an Inventor を読んで。

引用

Google’s biggest rivals, Microsoft and Yahoo, certainly write much of their own software, and they work to configure their computers and data centers to their own needs. But they largely buy machines from existing manufactures like Dell, Sun Microsystems and Rackable Systems.

ライバルもソフトは自前で書いてる。でもハードはそのへんのベンダから買ってきてる。

Despite those boasts, some argue that Google’s home-brew approach is unnecessary and inefficient, a headstrong indulgence masked for now by the growth and profitability of its advertising business. And Google’s rivals say their networks are plenty efficient and powerful.

ぜんぶつくらんでええやろ、との声もある。

These … paint a picture of a company devoted to pushing the boundaries of modern computer science, and applying those concepts on a vast scale.

最新のコンピュータサイエンスをビジネスでフル活用させてるのがGoogle。

例えば並列計算機で動くソフトウェアについて。

MapReduce : Lispチックな。問題をたくさんのコンピュータにばーっとばらまいて、結果を集める。これがものすごく良い出来なのだと。MSもDryadという似たような技術をつくったよ! とはMr.Gatesの弁。

“If they can get a 30 percent cost advantage, in operating a service on the Internet that is a huge difference,” said John M. Lervik, the chief executive of Fast Search & Transfer, a Norwegian search company.

インターネットの世界で30%のコスト削減を実現できるなら、それはものすごい差を生むことになる。

“Having lots of relatively unreliable machines and turning them into a reliable service is a hard problem,” Mr. Hölzle said. “That is what we have been doing for a while.”

たくさんの信頼できないマシンを、1つの信頼できるシステムに仕立て上げるという、むつかしい問題に取り組んでるよ。

感想

Googleのもってるような超大規模並列計算機を使う場合、一番の問題はその強大なパワーをフル活用できるかというところだと思います。次が、信頼性。

並列計算機で動かすプログラムをつくるとなると、昔やってたMPIとかを思い出します。 MapReduceは、それよりもさらに抽象度の高いものなのかと想像します。 データを自動的に計算ノードにばらまいて、そこで関数を適用 (map) し、自動的に集める (reduce) と。 待ち合わせとかを気にしないでプログラムが書けるのでしょうか。 あと、SIMDスタイルだなーと。 Googleが扱うようなプログラム&データだと、なんとなくMIMDスタイルの方が多いんじゃないかな、とか思ったんだけど。うまいことパイプラインを組んだり、条件分岐にひっかからないようにするとかしないとSIMDは活かせないと思うのですが、そのへんどうなってるんでしょう。


最新の研究成果をどんどん地球規模のビジネスで試せる。そんな環境は研究者にとって最高なんじゃないかなとか思いました。

Hikiでタグクラウド

Rubyで書かれているWikiエンジンであるHikiで、タグクラウドを実現するプラグインを書きました。

ダウンロード

CodeRepos

背景

やっぱりカテゴリよりもタグの方が手軽です。 HIkiにはもともとキーワードというタグのような機能があったので、これを利用できないかと思い、keywordプラグインを使ってみたところ、ほぼ期待通りのことができて小躍りしていました。

んじゃせっかくだし、タグクラウド (tag cloud) みたいな表示もできないかな、とkeywordプラグインを改造してみました。フォントサイズのアルゴリズムなんかは、blosxomでのタグクラウド実装の1つであるBLOGGING IS FUTILE : Blosxom plugin tagging を参考にしました。

ライセンスは、Hiki及びBlosxom plugin taggingに従って、GPL v2以降です。

ソースは続きにて。

ソース

# show keywords like tag-cloud
# Licensing: GPL v2 or newer, http://www.gnu.org/licenses/gpl.txt
 
#
# Original:
# $Id: keyword.rb,v 1.5 2005/09/30 11:45:49 fdiary Exp $
# Copyright (C) 2003 TAKEUCHI Hitoshi <hitoshi@namaraii.com>
 
THRESHOLD = 1
MAX = 156
MIN = 32
 
def keyword_cloud(*key)
  # sort by category
  list = keywords(*key).to_a.sort {|a,b| a[0].downcase <=> b[0].downcase}
 
  max = 1
  min = 0
  list.each do |j|
    sz = j[1].size
    next if sz < THRESHOLD
 
    max = sz if sz > max
    min = sz if sz < min
  end
 
  diff = max - min
 
  s = ''
  list.each do |j|
    sz = j[1].size
    next if sz < THRESHOLD
 
    category = j[0]
    p = j[1]
 
    fts = MIN + (((MAX-MIN)/diff.to_f) * (sz-min+1))
 
    ## for debug
    # s << "<h4>"
    # s << [sz, max, min, MIN, (MAX-MIN), diff, (MAX-MIN)/diff.to_f, (sz-min+1), fts].join(', ')
    # s << "</h4>"
 
    s << "<span id='tag' style='font-size:#{fts}%'>#{view_title(category)}</span> "
  end
 
  s
end
 
def keywords(*keyword)
  keyword.collect! {|a| a.unescapeHTML}
 
  key = Hash::new
  @db.page_info.each do |info|
    next unless info.values[0][:keyword]
    info.values[0][:keyword].each do |k|
      if keyword.size == 0 || keyword.index(k)
        key[k] = [] unless key[k]
        key[k] << info
      end
    end
  end
  key
end
 
def keyword_entries_n(pages)
    p = j[1]
 
end
 
export_plugin_methods(:keyword_cloud)

Google Code Jam 2006

Google Code Jam 2006 に参戦します。世界最高レベルのプログラマと対決するのです。

ということで、さっそくPracticeに挑んでみました。250pts問題を選んで、Problem Statementを読み、Constraintを理解し、手元の落書き帳でアルゴリズムをうんうん考えて、コードを書いてはテスト。テストが全て通ったところでsubmitしました。

結果

  • 得点 : 75.11pts / 250pts
  • 所要時間 : 4時間

しょぼっっっっっっっっっっ。(´・ω・`) 君にはがっかりだよ… (´・ω・`)

感想

簡単と言われる問題に対して、

  • 見通し悪く
  • 汚く
  • 見苦しく
  • テストも不十分な

コードを書きあげるのに、こんなに苦労するなんて。自分の腑甲斐無さにこみ上げてくる涙を押し止めることができません。

反省

高得点者のソースを見ながら自分の不足部分を考えてみました。

  • アルゴリズムに疎すぎ
  • グラフのアルゴリズム知らなすぎ
  • C++だから書きにくいんだ! なんて思いこんでいたけど、C++でも十分すっきりとしたコードは書けることを再確認

次はがんばるぞう。