余談2

あ.そいえばこんな会話が.
僕:「昔仕事でWindows DNAというのを使って…」
MSの人:「古っ!」
その時はそんなに古いかなぁ…と思ったのですが.…よく考えたら10年前だもんなぁ.そりゃぁ古いなぁ(苦笑
あの頃はSQL Serverも6.4でMSDEじゃなかったしなぁ.JETよかったなぁ…(懐古モード

マイクロソフトとOSSの距離.

…話は一通のメールから始まりました.
「情報システムの運用管理について是非id:s1061123さんにご意見をお伺いできないかと考え…」

え?俺開発系だけれどいいの?そんなに管理なんてしないよ?…昔やってたけれど.
本当にそんな(駄目)人間でも行っていいのかなぁ…と若干の逡巡を経た結果,まぁきっといいんじゃないかいう軽い考えで参加することにしました.何かというとマイクロソフトの方(エヴァンジェリストの方)4人とこうやって集まった4人のエンジニアのグループディスカッションです.スタート30分、ガチ緊張。周りを見るとやっぱり緊張。思わず背筋を伸ばしてしまう感じ.自己紹介をやっている間にだんだん打ち解けてきました.

ちなみに今回のマイクロソフトさんのディスカッションは以下のような目的とのこと.やはりOSS v.s. Microsoftという関係になっている現状をどうにかしてOSSMicrosoftといった非対立状態にしたいようです…

その時話したことは確かこんな感じ.

  • どうしてもOSSの関係は試用とかフィードバックがベンダーに比べて早いから使いやすい
    • OSSだと問題あったらメールで即プログラマに送れるけれどベンダーだとSE経由だし…
    • OSSの場合試用した感想とかをblogに載せてるからそれを見て使おうとか考えやすい
  • 運用の情報がどうしてもOSSに比べると少ない
    • エラーメッセージが出てもそのエラーが何かネットでも見つからない時とか…
    • 分からないエラーでもOSSだったらコード見ればわかるけれどさすがにクローズドコードだと…

またマイクロソフトさんからこんな事を教えて頂きました.最近だとやっぱりそういったギャップを埋めるためにいろいろ努力されているのですね.

中盤から後半は本当に色々な話をマイクロソフトの方や他のエンジニアの方から聞けて非常に有意義な時間を過ごすことができました.最近仕事場だとそんな会話しないから特に楽しかった…

マイクロソフトのソリューションがマイクロソフトの製品でエンクロージャーするのと同様にOSS関係のコミュニティだとどうしてもOSSのソフトウェアでエンクロージャーしてしまう気がします.それはそれで十分に普通の発想なんだと思うのですが,システム的にはOSS+Microsoftというソリューションというのもあっていいんですよね.そういった事を支持するエンジニアが増えればきっとMicrosoftさんとOSSコミュニティの距離は少しは縮むのではないのかなぁ…と帰りの京王線でふと思いますた.

自然数の無限リストはInt?それともInteger?(別解説)

と、id:kazu-yamamotoさんの記事に書いていたようだったのでhaskell使用歴10日程度の僕は興味を持って調べてみることにしました。というのが背景です。ポリシーとしては基本仕様から調べるということで。
自然数の無限リストはInt?それともInteger?


とりあえず、[1..]ってのがhaskellではどう定義されているかを見てみませう。
http://haskell.org/onlinereport/exps.html#arithmetic-sequences ←こんな感じ。
[0..]や、[0..10]に代表されるリスト内包表記(list comprehensions)はhaskellの糖衣構文なのですね。つまり、[1..]と書くとそれは(enumFrom 1)といった式に内部で変換されてから、処理が行なわれるのです。ならばenumFromの型を見れば[1..]の型が判明するのです!! をぉ。簡単! ということで、Hugsでお試し。

Hugs> :t enumFrom
enumFrom :: Enum a => a -> [a]

えーと。なんですか? 型クラス(Enum a)において、aを受けとってaのリストを返す関数ですか。つまりenumFromは型クラス(Enum a)をサポートしていれば使えると。んじゃ、Enum aを継承しているDoubleとかでもできるの?!
…試してみた (トリビアの泉風に)。

#Hugs ver. Sep 2006
Type :? for help
Hugs> [0.22..2.33]
[0.22,1.22,2.22]
Hugs> [0.22..2.22]
[0.22,1.22,2.22]
# GHCi 6.8.2
Prelude> [0.22..2.22]
[0.22,1.22,2.2199999999999998]
Prelude> [0.22..2.23]
[0.22,1.22,2.2199999999999998]

をぉ。できるやん。GHCiは返り値がなんとなく微妙だけれど。まぁ、型的に納得できる。納得できるけれどさぁ…俺の求めている答はどこにあるのさぁ!!
(ここで少しの苦悩と逡巡があった)
…で結局はそうなると「"10"とhaskellって書いたとき、それは何の型を持つの?」という問題になる訳ですね。10って数字はIntかもしれないし、Integerかもしれないし、Doubleかもしれないのです。言語の評価機としては与えられた数値に対して、なにかしらの型を与えて処理をしないといけない訳です。特に型推論とか持っているhaskellならばなおさら。で、その規約もhaskellの言語仕様にはありました! さすが言語仕様書。
「貴様らの歩んでいる道は、我々がすでに通った道 だ!(from グラップラーバキ)」 と言われんばかりですね。
http://haskell.org/onlinereport/decls.html#default-decls ←ここ
ということで、ここを見るとモジュール内でdefault(型1, 型2)と宣言した順番にマッチさせようとすることになっています。何も指定しない場合(つまりdefaultのdefault)は"default (Integer, Double)"になっているとのこと。よって、

  • [1..]と打つとenumFrom 1として計算される。型はEnum a => a -> [a]
  • 特にdefault()で指定しない場合haskellは"1"をIntegerの"1"として認識する
  • つまりenumFrom 1の型は Integer -> [Integer] になる

結果、無限リストになる訳ですね。

んじゃ、こんなファイルを作って、Hugsでテストしてみましょう。

module Test 
    where
default (Int, Double)
k = let a=[2..] in a
Hugs> :load hogefuga.hs
Test> :t k
k :: [Int]

をぉ。Intになったね。という話ですた(オチなし)。

SPS2をNetBSDで動かしてみる。前哨戦その3

で、SDL .Netのインストールです。最新版のSDL.Netではどうやらlibgdiplus(http://www.mono-project.com/Libgdiplus)が必要になるみたいです。ということでそれもインストールをする必要があります。NetBSDではpkgsrcになっているのでそれを使えば幸せです。

libgdiplusのインストール

#cd /usr/pkgsrc/graphics/libgdiplus
#make install

SDL.Netのインストール

#cd sdldotnet-6.1.0/source
#nant mono-2.0 package

SPS2をNetBSDで動かしてみる。前哨戦その2

本日のお題はTao Frameworkをインストールすることです。

Tao FrameworkはLuaとかOpenGLとかのwrapperとのこと。今度俺も使ってみよっと。で、Tao Frameworkのソースはここからゲットして下さい。(http://www.taoframework.com/) また、ソースからコンパイルしたい猛者の方はnant(http://nant.sourceforge.net/)が別途必要なのでそれもゲット。

さてコンパイルです。unixではmakeでjavaだとantをビルドに使うように.Netはnantを使うみたいですね。初めて知りますた。

#gmake
#gmake install
#nant

次はきっとsdldotnetです。