Syntax highlighter

2010-12-15

R6RSのライブラリ その3

この話題ばかりだ・・・

展開のフェーズの話。(というよりは依存関係か)
たとえばこのコード
(library (my-lib)
    (export sub)
    (import (rnrs))
  (define (bigger? x)
    (or (> x test)))
  (define-syntax sub
    (lambda (x)
      (syntax-case x ()
 ((_ a b)
  (or (bigger? (syntax->datum #'a))
      (syntax (let ((x b))
         (- x 10))))))))
  (let ()
    (sub 10 x)))
このコード、一見何もないように見えるけど、走らせると死ぬ。
一見何もないように見えるという段階でR6RSのライブラリについて理解してないのだが・・・orz
問題は、subの中で使われているbigger?がフェーズ0でしか参照されないこと。
subが展開されるのはひとつ前のフェーズ1なので、単純にunbound variableな例外を投げてくる。
これを解決するには、bigger?を別ライブラリにして、expandで読み込む必要がある。

まさにこれにはまっていて、
自前実装のコンパイラにライブラリを実装して、R6RSのライブラリにコンバートしてコンパイルなんてことをやっているのだが、
依存関係の解決が面倒くさすぎる。
たとえば、こんなコード
(define something 10)
(define-macro (generate)
  `(make-vector ,(- something 5)))
(define generated (generate))
こんな感じのをライブラリにするとなると、somethingは外出しにしないと上記の理由で死ぬ。
というか、すでに死んでいる・・・
(逆に考えれば、意外と適当に実装したのに、その辺もうまいこと動いているということだが・・・)

これはライブラリの仕組みが悪いのか、Schemeにマクロがあるのが悪いのか(そもそも良い悪いの問題ではないと思うが)
わからないけど、あまり相性が良くない気がする。
プログラマがいろいろなことを気をつければいいのだけど、R5RSで書いてて、R6RSにコンバートするって時に(まさに今)非常に不便・・・

2010-12-14

続 R6RSのライブラリ その2

よく考えたら(define id expr)の形式で定義されるidは自前VMだとライブラリをプロパティとして持つので、
そこを参照すればいいことに気づいた。
(もともとそのためのものなので早く気づけよ)

とりあえず、importのforキーワードについてはガン無視することにした。
あまりに理解して無さすぎなのと、明確にマクロ展開時((meta 2)以降はそれ以前になるの?)とコンパイル時と分かれているわけではないので、
実装しても煩雑になる上にあまりメリットが享受できそうになかったから。(単なる言い訳)

いい加減ながらライブラリの実装がほぼ完了。あとはバージョンを残すのみ。
でも、バージョンなんてどう管理すんだ?ということで少し整理。
現在のライブラリの構造。
top-libraries - 単なるハッシュテーブル
library       - name, imported, exported, tableを持つクラス(もしくは構造体)になる予定
                (現在は単なるベクター)

構造として
top-libraries = (lib1 => (lib1 instance)
                 lib2 => (lib2 instance))
こうなってるので、このどこかにバージョンをねじ込む必要がある。

案1:
もう一枚かませる。こんな感じ。
top-libraries = (lib1 => (version1 => (lib1 v1 instance)
                          version2 => (lib1 v2 instance))
                 lib2 => (version1 => ... ))

案2:
キーにしてる名前にバージョンをくっつける。
top-libraries = (lib1version1 => (lib1 v1 instance)
                 lib1version2 => (lib1 v2 instance))
                 lib2version1 => ... )

案3:
そんなことよりカラオケ行こうぜ!
3は無いとして(当然)、2だと微妙にメモリ消費が少なくなる気がするけど、バージョンマッチで死ぬ気がする。
1は現状の構造をいじる必要があるので、少し大掛かりになりそう(そうでもないが)

あぁ、そもそも、キーを(name version)みたいにして、やればいいのか。
(rnrs (6))みたいな例だと(rnrs (6))ってそのままになるな。
(com hoge fuga)ってのだと、適当にバージョン振る必要があるから、まぁ1だろう、こうなる?(com hoge fuga (1))
ということは、バージョンが無いものに関してはバージョンを振って、あるものはそのままキーにすればいいのか。
っで、参照する際に名前とバージョンを解決すればOKと。
とりあえず、この方法で行ってみよう。

どうでもいい話題で、export-allなんてのを作れないかなとか考えていたのだが、
結構大変そうだなぁということに気づいた・・・
importしたシンボルはまぁいいとして、中で定義されてるのを引っ張り出すのが大変そう・・・
でも、rnrsとかの巨大ライブラリを書くときに、export句に全部書き出すのって大変じゃね?っていうだけの話。

R6RSのライブラリ その2

前回の投稿にコメントをいただいて、ちょっと舞い上がっていたり。
(と同時に、Googleか何かの検索エンジンで調べた結果、役立たずなブログにぶつかったぞ、この野郎!と思われてないか不安にもなったり・・・)

自前実装で、簡単なimportとexportを実装したら不思議な現象(いや、原因はわかっているが)に出くわした。
R6RSのライブラリのフェーズの部分というかimport句の部分なの(か?)
前回syntax-caseで書いた部分、
(library (my-lib2)
         (export sub)
         (import (for (my-lib1) expand)
                 (rnrs))
  (define-syntax sub
    (er-macro-transformer
     (lambda (form rename compare)
       (or (bigger? (cadr form))
    `(let ((x ,(caddr form)))
       (- x 10)))))))
(library (my-lib3)
         (export result)
         (import (my-lib2)
                 (rnrs))
  (define (result x)
    (sub 10 x)))
(import (my-lib3)
        (rnrs))
(display (result 10))
my-lib2は展開するためにbigger?をimportしてる。
っで、これが実際に呼ばれる部分はmy-lib3内なので、問題が起きる。
(er-macro-transformerをsyntax-caseの代わりに使ってるからかもしれんが・・・)


書いてる途中で、単に名前解決の仕方がおかしいだけということに気づいた。
考えをまとめるのに、何かに書くというのは有効であるw
my-lib3読み込み → マクロ展開※1 → ライブラリコンパイル
という流れで、※1の展開時にmy-lib2内でexportされてないけど必須になるbigger?の解決を行えばいいのだろう。
一時的にmy-lib3内に取り込んで、展開終了時に開放すればいいか?
まじめにフェーズを実装すればいいんだろうけど、大変そうだしなぁ・・・(よく理解してないし。。。)

2010-12-13

R6RSのライブラリ

とりあえず、ここを読んでからR6RSを読んでみた。
まぁ、理解できたが、じゃあ既存の実装はどうなってるの?と思い調べてみた。

調査対象:Petite Chez Scheme、Ypsilon、mosh(nmosh)
調査プログラム
(library
    (my-lib1 (1))
    (export bigger?)
    (import (rnrs))
  (define (bigger? x)
    (or (> x 10))))
(library (my-lib2)
    (export sub)
    (import (for (my-lib1) (meta 1)) ; run expand (meta 0) (meta 1) (meta 2)に適宜変更
     (rnrs))
  (define-syntax sub
    (lambda (x)
      (syntax-case x ()
 ((_ a b)
  (or (bigger? (syntax->datum #'a))
      (syntax
       (let ((x b))
  (- 10 b)))))))))
(library (my-lib3)
    (export result)
    (import (my-lib2)
     (rnrs))
  (define (result x)
    (sub 10 x)))
(import (my-lib3)
 (rnrs))
(display (result 10))
こんなの。特に何の意味もないプログラムだが、フェーズを調べるには必要十分なのでOK。

で、結果。
run:
petite: 0
Ypsilon: 0
nmosh: error bigger?がない
expand:
petite: 0
Ypsilon: 0
nmosh: 0
(meta 0):
petite: 0
Ypsilon: 0
nmosh: error bigger?がない
(meta 1):
petite: 0
Ypsilon: 0
nmosh: 0
(meta 2):
petite: 0
Ypsilon: 0
nmosh: error bigger?がない

見た感じとして、Petite、Ypsilonはフェーズ関係をガン無視してるくさい。Shibuya.lisp #2か#3だかの資料によると、バグくさいのも実装したと言っているので、意図的?なものかもしれない。Petiteはよく知らん。
逆にnmoshはこの辺の宣言がきちんとされていないとまずいみたい。これはAndre Van Tonderのexpanderがそういう実装なのだろう。
この辺は仕様書に明確に書いてあるので、nmoshが正解なのだろうが、そんなもの考えてプログラム書きたくないなぁと思うとYpsilon実装にした方がいいのか?

2010-12-05

昨日の風景

今日は3度と暖かいので、雪が融けてきてる。いいことだ。

ライデン中央系の様子。
どこが道だか分からんw

近所の川(というか溝というか運河というか)の様子。
どこが水だった場所でしょう?
正解は中央部分。木の柵に見えるのは橋なのでその周りの雪は水だった場所です。
今は融けてるはず。(今日は確認して無いので不明)

今週からは暖かいはずなので、ちょっと一息といったところか。

2010-12-01

寒い!!

今週くらいから急に、しかもとてつもなく寒くなった。
現在午前7時、気温-6度!!
天気予報によると、風が強いので体感は-20度(!?)くらいらしい。

ようこそミニ氷河期へ。
地球温暖化とはいったいなんだったのか・・・

2010-11-15

メジャーデビュー決まりました

Mixiで変なバトンを踏んだので・・・
これ、マイミクの部分どうすればいいんだよ・・・
しかも、足跡残らねえよ・・・

内容は以下。
☆☆☆☆☆☆☆☆☆☆☆☆

バンドバトン♪♪

見てしまった人は必ずやること♪

足跡に残るので逃げられませんよ♪

タイトルは『メジャーデビュー決まりました』にすること♪

見た以上は必ずコメントすること♪



♪本名は?

⇒外部ブログなのでさすがに伏せさせてくださいm(_ _)m

♪ステージネームは?

⇒ねえよ

♪担当パートは?

⇒Topテナー

♪そのパートを選んだ理由は?

⇒低音が出ないから、High Cとかその辺の音が出る人があんまりいないから

♪メインで使ってる楽器はどんなの?

⇒ファルセットと実声の中間

♪それを選んだ理由は?

⇒高音をきれいに出すにはと試行錯誤した結果、あんまり力まずそこそこ張れるから

♪その楽器のPRポイントは?

⇒High G(ソプラノのG)くらいまでがんばれば出せます(使い物にはならんが・・・)

♪歴はどれくらい?

⇒そろそろ10年か(でも、ここ2年はやってないからもっと少ないか)

♪初めて完コピーした曲は?

⇒ゴスペラーズの星屑の街かな

♪その曲を選んだ理由は?

⇒アカペラの曲で有名なのは少ないのよ

♪憧れのミュージシャンは?

⇒昔はパバロッティ、今は誰だろ?

♪好きなミュージシャンは?

⇒たくさん

♪好きな曲を1曲挙げるとすると?

⇒一曲なんて無理です・・・

♪好きなジャンルは?

⇒最近はHipHopとかも聞くようになったし、おそらく演歌以外すべてかと
でも、あんまり意味不明なジャンルは聞かない

♪今バンド組んでる?

⇒組んでない。
オランダ在住で、アカペラやりたい人やりませんか?w

♪バンド組んでる人はバンド名を教えて下さい

⇒組んでない

♪プロは目指してる?

⇒プロってなに?

♪ライブの失敗談はありますか?

⇒結婚式で歌ったときに、オルガンの演奏がまったく聞こえず、意味不明になった

♪担当パートの楽器にいくらぐらい遣った?

⇒無料、タダ、Free、Gratis

♪生まれ変わってもバンドをやるならパートは何がいい?

⇒楽器を使うパートかな・・・でもアカペラも楽しいんだよね・・・

♪付き合う前の好きな異性をライブに呼んだことはある?

⇒ない

♪その異性とはいい感じになった?

⇒ない

♪その異性と今は?

⇒何の質問だこれ?

♪このバトンを見た人は必ずやらなければなりませんが、中でも特にやってほしいマイミクを5人挙げて下さい

⇒マイミク少ないのに・・・
Rogさん
Zestさん
まっけんじーさん
ラフマさん
うまmiさん

バンド組んでない人は、架空のバンドを想定してくださいm(_ _)m
上三人はB.G.M.でOKだと思います。

♪最後になりますが、音楽は世界を救うと思いますか?

⇒戦闘なんてくだらねぜ、俺の歌を聞け~!!!
こうですか?

以上

☆☆☆☆☆☆☆☆☆☆☆☆

2010-11-12

syntax-case続き

とりあえず、こういう方針でいこうという考えをまとめておく。

syntax-case自体はコンパイラとは関係ない(ないことはないが)、ライブラリとする。
define-syntaxで定義された構文は変換器を返し、変換器が変換する。
(Gaucheはそうしてると思う。ソース見る限り・・・今のところsyntax-rules限定っぽいけど)
define-syntaxで定義された構文にS式が与えられた場合、構文オブジェクトとしてすべての引数を与える。
こんな感じ?
(define-syntax sample
  (lambda (x)
    (syntax-case x ()
      ....)))
(sample 1 2 3) ;; <- この1 2 3っていうのがsyntax-caseによって処理されるために構文オブジェクトになる
ということは、マクロを展開する際に、S式をいったん構文オブジェクトにする必要がありそう。 これで、syntax-caseを定義するとすると
(define-syntax syntax-case
  (lambda (x)
    ... ;; いろいろ定義がいりそう?
    ;; x は構文オブジェクト。matchはAndrew Wrightみたいなの(構文オブジェクトにも対応)
    (match x
      ((_ e ((? literal? literals) ...) clauses ...)
        ...)))) ;; きっといろいろする
っで、こいつ自体が変換器なので、syntax-rulesはこう書いて
(define-syntax with-syntax
  (lambda (x)
    (syntax-case x ()
      ((_ () e1 e2 ...)             (syntax (begin e1 e2 ...)))
      ((_ ((out in)) e1 e2 ...)     (syntax (syntax-case in ()
                                              (out (begin e1 e2 ...)))))
      ((_ ((out in) ...) e1 e2 ...) (syntax (syntax-case (list in ...) ()
                                              ((out ...) (begin e1 e2 ...))))))))
(define-syntax syntax-rules
  (lambda (x)
    (define clause
      (lambda (y)
        (syntax-case y ()
          (((keyword . pattern) template)
           (syntax ((dummy . pattern) (syntax template))))
          (_
           (syntax-violation 'syntax-rules "Invalid expression" x)))))
    (syntax-case x ()
      ((_ (k ...) cl ...)
       (for-all identifier? (syntax (k ...)))
       (with-syntax (((cl ...) (map clause (syntax (cl ...)))))
         (syntax
          (lambda (x) (syntax-case x (k ...) cl ...))))))))
syntax-rulesで定義された構文は 構文 -> syntax-rules変換器 -> syntax-case変換器 -> ごにょごにょ という感じになるはず。 こんなのは
(define-syntax print
  (syntax-rules ()
    ((_ o)
     (begin (display o) (newline)))
    ((_ o1 o2 ...)
     (begin
       (display o1)(newline)
       (print o2 ...)))))
(print 1 2)
こうなる?
(print 1 2) -> (transformer syntax-rules '(syntax-object (print 1 2)))
: with-syntaxは略
-> (transformer syntax-case '(syntax-object ...#;多分この辺にsyntax-rulesで作られたtempleteが入る (print 1 2)))

正しいのかよくわからん。その上、どう実装していいのかもよくわからん・・・

syntax-caseの実装

Schemeの話。

マクロの展開を実装しようとした際に、syntax-caseがどうしてもキーワードになる。
これはなんだ?
いや、何かはわかっているんだけど、R6RSの仕様書を見ると、こいつはライブラリだと書かれている。

っで、いろいろなR6RS準拠の処理系で試したところ、
どうもこいつはキーワードっぽい動きをする。(defineとかlambdaとか見たいな)

ということは、組み込みか、(define-syntax ...)で定義されたものかという気がする。
っで、仕様書にはライブラリと書かれている・・・
syntax-rulesとかはsytax-caseで定義できるみたいだが、
syntax-caseはどうやって定義するのだろう?
こんな感じ?
(define-syntax syntax-case
   (lambda (form literal rules)
     ...))
っで、適当にパースすればOK?

ちなみに、psyntaxはよく知らないけど、
YpsilonとかAndre van Tonderのexpanderとかだと割りと組み込みみたいな書き方してる。
(コンパイラが持ってるわけじゃないからライブラリ?)
細かいこと考えなくてもいい?
う~ん。

2010-11-05

【尖閣ビデオ】見た!!!!

昨日の夜(といっても日本時間なら午前5時か6時くらい)にYoutubeにアップされていたビデオを見た。
中国は真っ黒です!!

これみて、コツンと当たったとか、日本側が悪いとか言ってるアホ議員がいるということが正直信じられない。
個人的な意見だけど、これ逆の立場だったら中国は最大級の外交カードとして使うだろう。
そもそも、領海侵犯してる漁船が体当たり+逃亡なんてロシアとかアメリカに対してやったら船がこの世から消えてるレベル。

この動画の2分くらいのところから:

明らかにぶつけにきて、かつ逃亡。

こっちの方は海保の船「みずき」が黒煙を上げてる:


これで
こんな穴が船体右側に空くわけがない!!!
ってか、仮に先端部が当たってあいたとして、真四角の穴が開くわけないだろ!!

これで船員を釈放した無能議員とか死んでいいんじゃね?

2010-11-02

Infoseekが終了した

まぁ、2ヶ月くらい前から知っていたことではあるが、自分の過去のHPも一緒に消えた。
(メンテナンスしてなかった上に、FTPのパスワード忘れちゃったのでどうにでもなれ状態ではあったが・・・)

困るなぁと思うのは、自分のとは違って有益な情報を載せてるサイトが結構多かったので、移転せずに消えてしまったらいやだなぁということ。
有料のサービスは残るとのことなので、有益サイトがそっちだったらいいなぁ・・・

2010-10-28

Movie: It Could Happen to You(邦題:あなたに降る夢)

1994年なんだこれ・・・
実話をヒントに作られた映画。ジャンルはラブコメでいいのかな?
あらすじと実話は適当にググってください。

感想。ニコラス・ケイジ演じるチャーリーの駄目男っぷりと、その妻の強欲っぷりが素敵な映画。
ブリジット・フォンダ演じるイヴォインヌの薄幸ぶりもかな?
いや、まだ観てるんだけど実は、今のところの感想として、宝くじは結婚してから買っては駄目だね。当たったらいろいろ火種にしかならない気がする。
ってか、ニューヨーカーとマスコミは主人公2人に振り回されすぎ。宝くじが当たったからといってそこまで追跡されんと思うぞ。
(書いてる途中で終わった)

なんというか、女が腐ったような男(イヴォインヌの元夫)とか嫌いなタイプの人間が出てくる映画ってあまり好きじゃなかったり・・・
借金背負わせて逃げたくせに、2億入ったから戻ってくるって、どの面下げて(ryって感じ。

個人的に最後のお約束は要らないんじゃないかなぁとは思った。別に強欲妻は勝ち逃げでもよくね?金手に入れるために裁判して、60過ぎのおじいちゃんと結婚までしたんだから?
ま、お約束がないといかんのだろうけど、ハリウッド映画って。

見る価値は、野郎だけでなら0かな。

2010-10-20

寒い!!!

先週くらいから急激に寒くなった。
最低気温が3度とかある・・・

んで、今日は雹が降ってきた!!!
どうやら上空には寒気団があるくさい。

まだ10月なのに冬の到来を感じる。
12月とかになったら氷点下確定コースかなぁ?
-10度とか去年だけのことだと思いたい・・・

2010-10-15

契約更改の話

僕自身の契約更改は順調に終わり、無事に正社員になったわけだが、
そうでは無い人もいたという話。

実際知ったのは今日(昨日?)なのだが、僕より二週間早く入社した人が8月の段階で契約延長(もしくは正社員になる契約)をしないということだった。
そういえば今週の頭から姿を見てないなぁ、と思っていたらその通知のメールと、PC撤去が同時できた。
(ちなみに、席は僕の目の前)
理由は知らない。あまり一緒に仕事したことはないが(一時期同じプロジェクトにいたくらい)、可もなく不可もなくという感じの仕事ぶりだった気がする。
(個人的には汚いコードを書くなぁとは思っていたが・・・)

まぁ、理由は以下のどれかなのは自明で、
・解雇
・自主退職
ってか大別するとこの2つしかないわけで。

8月の時点ですでに話し合っていたということは、おそらく後者かな?
僕が契約更改の話を受け取ったのは9月に入ってからだし。最近まで何かのプロジェクトに参加してたみたいだし。
もし、解雇だとしたら、当然それは僕だったかもしれなくて、なんて考えるとちょっと複雑な気分であった。

2010-10-01

ハッシュテーブルの検索

超有名なデータ格納の方法の一つ。
諸事情により、自前でハッシュマップとハッシュセットを作る必要があったので、作ってみた。
理論上計算回数がΟ(1)でいけるはずなんだけど、どうもそんな感じがしない。

っで、STLのsetと自作ハッシュセットで比較してみた。
結論だけ言うと、
ハッシュセットは早いけど遅い。
なんのことだ?と思うかもしれないけどそんな感じ。
実装の都合上、衝突が起きた際に得られたハッシュ関数で得られたハッシュ値を増やして空きを探したり、
要素が存在しているか検索しているのだが、これがまずい。
無限の箱があってハッシュ値も衝突がおき得ないのならΟ(1)なんだろうけど、箱は有限。っで箱が50000とか超えた時に、存在しない値の検索をすると、ループが50000回走る。つまりΟ(n)になる。
う~ん、存在する値だとものすごく早くてそれこそΟ(1)に近い値が出るんだけど、う~ん。
衝突時にリストにしてもいいけど、メモリ管理が面倒な気がする・・・う~ん・・・

どうでもいいけど、
「Ο」これ「O(アルファベット)」じゃなくて「Ο(オミクロン)」だったのね。初めて知った^^;

契約更改

今の職場についてほぼ1年が過ぎようとしている。
契約は最初は1年契約なので、今日契約の更新の面接があった。

結果、無事正社員に昇格!
昇給もしたし、う~ん、いいことだ。

オランダだと一年で正社員になるというのは珍しいらしく、普通はなんだかんだ契約の延長だけというのが間々あるらしい。
マネージャー(日本語に直すとなんだ?部長とかそれ以上?)との面接で、
働きぶりに満足してるし、ここで働いてほしいというようなことも言ってもらえたのだが、
しかし、正直ほとんど何もしてないに近いくらい楽な仕事なのだが、
いいのだろうかと不安になる。
(もちろんやることはやっているのだが、いかんせん楽すぎる)

ま、プログラマは天職なんだということにしておこう。

iPhone

いろいろな経緯からiPhoneが今手元にある。
3Gなので一つ前のだ。

PDAかつiPodに電話がついてる感じで、正直もてあましてる感が大きいが今のところ気にいっている。

誰か、お勧めアプリを教えてくれ!

2010-09-26

Cygwinのメモリ

Cygwinだけなのか、Mingwもなのか、そもそもC++の企画なのか分からんけど、メモリの確保ではまった話。

Cygwin上のGCCで(正確にはG++)1M以上のメモリを確保して、そのメモリに生でアクセスしようとしたらセグメンテーションフォールトが起きた。
なんでだろうと思ったが、プログラム全体で見ると動いていたのでとりあえず放置していたのが、やっぱりおかしいよなぁと思って検証してみた。

検証プログラム
#include "test-a.h"
#include 
int main()
{
  void* p = (void*)new char[1024* 1024];
  printf("%p\n", p);

  test t;
  t.print();

  test *t2 = new test();
  t2->print();
  delete t2;
  return 0;
}
test-a.hはtestクラスを持ち、そのコンストラクタ内で1Mのメモリをoperator newで確保し、printメソッドでメモリアドレスをプリントする。それだけ。
実際はtestクラスの詳細はスタティックライブラリにしてある。スタティックライブラリの制限かなとも思ったので。

結果。
そもそも最初のnewで死んでた。
帰ってきたアドレスが、0x7fea0008。完全に死亡アドレスです。
理由は分からんが、アウトなんだろう。

しょうがないのでとりあえずWin32APIのVirtualAllocを使って回避。こっちならOKっぽい。
この制限があると、多き目のメモリープールとか不可能になる気がするが、どうなんだろう?
ってか、一気にメガ単位で確保しちゃ駄目ってこと?
誰か理由教えて(´;ω;`)

2011/10/25 追記
ひょっとしたらこの辺と関係あるかも=>Cygwinのヒープ

2010-09-13

英語の発音について

英語の発音で日ごろ理不尽に感じてることをちょっと書いてみる。
(なんで今更こんなことをとか自分で突っ込み)

同スペル、異発音
Houston:
/ˈhjuːstən/ ≒ ひゅーすとん と発音すればテキサス州の都市(が有名、ほかにもある)
/ˈhaʊstən/ ≒ はうすとん と発音すればニューヨーク市の通りの名前(が有名、ほかにもある)

読みにくい系
simultaneously:
/ˌsī-məl-ˈtā-nē-əs-ly/ ≒ さいみゅるてにあうすりぃ。
ちなみにsimulateは/ˈsim-yə-ˌlāt/ ≒ しみゅれいと だったりする。(個人的に前者は米語だと思ってる)。

cupboard:
/ˈkʌbərd/ ≒ かばーど。知らなきゃ読めない。
ちなみに、boardは/bord/ ≒ ぼーど なので、後半だけ見ると同スペル、異発音かも。

nature:
/ˈnā-chər/ ≒ ねいちゃー。でもこれ、naturalになると/ˈna-chə-rəl/ ≒ なちゅらる になる。

英語と米語で発音が違う系
tomato:
「これが、"とめいと"だと!」と中学に入ってまず間違いなくショックを受けた言葉の一つだと思う。でも、英語(イギリス系)だと"とまーと"と発音したりする。ちなみに、tamagoは「ためいご」ではないのであしからず。

あんまりぱっと思いつかなかった。
この手のねたは需要があるかテストもかねて投稿してみたり。

2010-09-03

Java: Preferenceクラス

Javaのことを書くなんて本当はしたくないがあまりにネタがないので。
(Schemeの方は遅々として進まん・・・orz)

仕事は当然Javaを使うのだが、APIではまった話。
Preferenceというクラスがあるのだが、こいつは設定とか値をプラットフォーム固有の方法で永続化して使いまわせる便利なもの(のはず)
っで、今のプロジェクトでこいつを使っているのだが、なんか値がおかしい。
Windowsなので、レジストリに登録されるのだが、どうも1個しか値が存在してない。
っで調べてみた。

JavaDocによると、こいつはノードを取得する際にクラスを要求するくせに、値の保存はパッケージごとに行われるということ。クラスを要求するのは、パッケージ名を取得するためだけみたい。
つまり、
foo.bar.Hogeと、foo.bar.FugaっていうクラスでPreferenceを使うと値が共有されるらしい。
この方がありがたい人もいれば、そうじゃない人もいるだろう。僕は後者なわけだが・・・

foo.bar.configなんてパッケージを作ってその下にいくつかの設定値クラスなんかを作った場合問題になる、というか僕の問題はまさにこれ。
パッケージごとに一個の永続値って需要があるのだろうか?
ドキュメントをしっかり読めば早期発見できた問題ではあるが・・・