日記緑ログ

2005/11/03 ~ 2005/11/28

目次

戻る

Blog

生存確認 2005-11-03

[Create: 2005/11/03 21:25] [LastUpdate: 2005/11/03 21:28]

ビデオカードが変わると色合いすら劇的に変化する。

.NET Frameworkが入るとWindowsの起動までの時間が長くなる。

しかしながら.NETは便利だ。少なくとも開発側にとっては。環境も重かったりするので困りものだけれど。

生存確認2005-11-05

[Create: 2005/11/05 09:41] [LastUpdate: 2005/11/05 09:48]

生きてます。

メインPCを変えようかと思って色々やっているんですがメモリあたりでエラーが出るようなマシンだったので(メモリは換えたが)色々と不安です。スペックも大して変わらないので何の意味があるか微妙ですが。

とりあえず暴走しないか起動しっぱなしでしばらくテストする予定。

でも真夏にテストしないとあまり意味はないかもしれない。ちなみにキーボードとディスプレイが確保できないので旧メインマシンはしばし封印。

切り替え器は高価ですし、キーボードは安価なものがありますし(とはいいつつもキーボードはマウスより触っている時間が長いので多少値がはっても自分にあったものを選ぶつもりですが)、ディスプレイは今のやつじゃあ輝度が低すぎてお話にならないので。

USB1.1ばかり6ポートもあったり、マウスには通電しっぱなしだったりでメインマシンにはどうかと思うのですが…。

P2PBBSの話その1 - Freenet

[Create: 2005/11/06 18:25] [LastUpdate: 2005/11/07 19:12]

連続して何回かP2PのBBSについてちょろっと話を出します。

今回は金字塔ともいえるFreenetです。

Freenetは匿名性を持たせたネットワークを実現するために作られたソフトウェアです。GPLでソースも公開されていたりします。

そもそもの目的は自由な言論ということですが、例として中国や中東諸国の言論統制、検閲を挙げています。(政府にとって)不穏な動きを見せるとたちまちシャバからオサラバできる国でも匿名なネットワークであれば自由な(あらぬ疑いをかけられる心配も無く)発言可能です。

あくまでも自由な言論ということですから、違法な行為や、本当にやばい行為をするために作られているわけではありません。

一 次発信元が分からないようにするため、一次発信元が流した情報を各ノードでどんどんPUSHして、他のノードに転送することで一次発信元を分かり辛くして います。一番初めに情報を流した人が一次発信者となります。すべてのノードを囲い込んで通信を逐一チェックしていれば一次発信者を特定できるでしょうが現 実的ではありませんし、もしかすると通信経路が一つではない可能性もあるわけで真に一次発信者であることを確認するのは困難だということです。

原理上大量の情報を発信する事に使用するのは難しく、情報がネットワークの隅々まで伝播するためには少々時間がかかります。これは匿名性を高めるために仕方ないところでしょう。

Freenetはインフラなのでその上にガワを乗せて使います。掲示板はFrostというものを使うのが一般的です。

WinMXで逮捕者が出たときににわかに盛り上がりましたが、サイズの大きなファイルの転送に非常に時間がかかること、Winnyが出たこと等の理由から利用者は一気に減ったようです(このころに飛びついた人は利用目的を勘違いしていたということでしょう)。

P2PBBSの話その2 - WinnyBBS

[Create: 2005/11/07 18:47] [LastUpdate: 2005/11/07 19:10]

今回はWinnyBBSです。

Winny といえば匿名性があるファイル共有ソフトですが、WinMXでの逮捕者が出たのを機にFreenetを参考に作られました。FreenetではPUSH配 信で常に帯域を使うため容量の大きなファイルでは効率が悪いのが難点でした。Winnyはファイル共有ソフトということでここをクリアするためにPull 型のプロトコルになったということです。

ある程度バージョンがあがるとBBSを実現できるかもしれないということでBBS機能が簡易ながらもつけ られました。Winnyの肝は中継とキャッシュにあるわけですが、BBSではスレッド(2chを参考にしたということで、大カテゴリーを分類する板と小カ テゴリー(というよりはカテゴリ内で分けられた話題という感じだろうか)にあたるスレッドがある)を立てた(作成した)人がスレ主となって、その人とほぼ 直接データの受け渡しをします。転送も稀にするらしいですが。つまり、BBSに限ってはまるっきり通常のサーバークライアントモデルと変わらないわけで す。ただキャッシュは転送したりするので主がいなくても読むだけならしばらく何とかなることもあったりします。

WinnyはWinny2になると大規模BBSの実験に乗り出しました。これによって2chブラウザのような3ペインの見やすいインターフェイスが搭載されBBS専用モードが追加されました。パラメータの調整も進められかなり使えるシステムになっていきました。

中 央があるシステム(とはいってもスレッドごとに中央は異なるわけで一つのスレッドが落ちても他には影響しない)ですから、書き込みは即座に反映されます。 PureP2Pではどうしても全体の同期に時間がかかってしまうためこうしたシステムになったのでしょう。ちなみにFreenetでは書き込みが伝播する まで丸一日と言われていたりしました。

このように使いやすいシステムだったため(このころ2chでは書き込み者のIPを記録しだしたこともあり) WinnyBBSは次第に大きくなっていったわけですが、逮捕事件を境にWinnyを使う人自体が減り、さらに逮捕に踏み切った時の操作方法の解説で WinnyBBSの匿名性の低さから足がついたという話がでてきて使う人はめっきりいなくなっていきました。

こんなWinnyBBSですが今でも健在であり、NYchと呼ばれるゲートウェイサービスもあります。

BBS専用モードにすれば怪しげなファイルを中継することもなく、利用帯域も減り、軽く使いやすくなりますので一つ試してみるのもいいのではないでしょうか。

P2PBBSの話その3 - 新月

[Create: 2005/11/08 21:42] [LastUpdate: 2005/11/08 21:43]

今回は新月の話ですが、その前にP2P、2ch、P2PBBSの話題をまとめてざらっと書いておきます。

P2P が流行ってきだしたのが2000年から2001年ぐらいじゃないかと思いますが(Napsterが発表されたのが1999年の元旦、2000年3月14日 にgnutellaということです)、2001年5月20日に2chに[2chのような掲示板システムってP2Pで]というスレッドが立っています。その ころ既にFreenetは存在しており(論文が1999年7月に発表されている上にsourceforge上にプロジェクトを立ち上げたのが1999- 12-28 10:44 となっている)、当初それをもとに開発をするという話で進んでいました。2001年の8月には2chの転送量が大変なことになったのでにわかにP2Pが注 目されたりしたようなことがあったりしました。そこで2chのdatを分散させるような話が出てきたりしましたが、結局gzip圧縮で切り抜け、計画はう やむやになって頓挫。2000年にはバスジャック事件、2002年頃からよく裁判とかが起きた、犯行予告書き込みなどの増加、2chで2003年1月7日 からIP記録開始。という2ch側の流れとあいまってP2PBBSでも面白い流れがあります。

常に2chと関連させますが2001年の8月危機の ときに[P2Pでサーバに依存しない掲示板を作るの巻]というスレッドが立ちました。01/08/27ということです。ここで上で述べたキャッシュ、 vojta、zigumo、tiara、などがそれぞれ発生します(vojtaはネットサービス板で出現したかもしれない)。このなかでvojtaは純粋 には掲示板を目指していたわけではないようですが、zigumo以外は実質動いていましたが開発が活発で続いていたのはVojtaです。2002年の初頭 には既に十分稼動していました。またWinnyでBBS機能がついたのが02年7月25日発表のβ18.0です。1系の開発はまだしばらく続いて2系の開 発が03年4月9日に宣言されることになります。

さてここで今回の主役の新月が登場します。03年8月29日に発表。この年の1月7日か ら2chではIPを記録するようになり、匿名性が失われることを懸念した連中が活発に動いていました。Winny2も多少なりとも影響されていると思いま す。そうこうしていたら2003年11月27日にはWinnyで逮捕者が出ます。逮捕者が出ると盛り上がる2chではWinnyの後継のP2Pファイル共 有ソフトの開発が叫ばれるようになります。そこである程度の規模にまで成長したのがShareですが(Shareは拡散アップロード等を搭載し、 FreenetのようなPush性を持たせた匿名性を実現しつつも中継もせず、基本的にはPull型でありWinnyよりも洗練されたインターフェイスで 高速だったりするソフトです。他の開発者は実用段階以前に企画倒れやら開発頓挫やらで大規模ネットワークには至っていません)、掲示板の需要もあったらし く、ここでP2PNS(Alpha、Pre-Alpha、RinGOchと同じ、以下RinGOch)が03年12月4日に開発を宣言、したとおもったら RinGOch(ちなみにRinGOchはゲートウェイとしての名前で正式名称ではないが他の呼び名よりもユニーク性があるためこちらを使うことが多い気 がする)は六日でした。ということでRinGOchは次の機会に詳しくやるとして、ShareでもShareNTTP(NTTPというのはニュースグルー プのプロトコルだがつまりニュースグループはメーリングリストを参考にしたような掲示板システムでありShareNTTPは掲示板をShareで実現する プラグインということだ。)というものが微妙に出たりしているがプラグインであるため使っている人はごく少数だと思われる。とはいっても新月や RinGOchもかなり少数だとは思う。

という黒歴史を適当に、しかし長々と解説してきたわけですが、新月というのは初めPerlで実装 されました。開発が進むとDelphiで実装した猛者が現れました。その後プロトコル互換を捨て去ったりしたためにその系統は使えなくなりましたが、また してもDelphiで実装した野郎が出てきました。また、Perl版は安定したためJava版(Selene)が実装され、現在はPython版(朔)の 開発が進められています。公式の現在のお勧めは朔になるのかな。新月は簡単なプロトコルで実装されている割には結構まともに動きます。匿名性で言えば WinnyBBSよりはずっと上になる気がします。中央はなく、管理者も無く、軽く使いやすいです。WindowsであればDelphi版の NanaSHIがネイティブで動きますから(ポート開放さえ行えば)すぐに利用できます。ただ、ユーザーが少ないようで、大規模なネットワークに拡大した ときに問題が出てきそうな気はします。初めからオープンソースで開発されており、後にsourceforgeに登録されます。ライセンスはGPLというこ とです。新月はUNIX系の堅そうなイメージがあるのですが主に見た目のせいだと思います。実に堅実というかシンプルというか最小限の構成と思えるような 状態です。

公式サイトは新月 - P2P匿名掲示板になります。ゲートウェイも常設されていてこちらが公式のゲートウェイになります。一度試してみるといいのではないでしょうか。

P2PBBSの話その4 - P2P Network Service(Alpha/RinGOch)

[Create: 2005/11/09 19:36] [LastUpdate: 2005/11/09 21:14]

P2P Network Service(以下ゲートウェイであるRinGOchという名称を同義として使います。混ぜこぜにしていると問題がありそうですが気にしないことで す。)は前回の黒歴史で触れたとおりWinnyで逮捕者が出たときに次世代のP2Pソフトを開発すべく立てられたスレッドで生まれたソフトです。

.NET で作られており少々メモリ食いというか重いのですがこれは内部で暗号化をゴリゴリ(必要でないと思われるような部分にまで)使用しているということも少な からず(むしろかなり多く)関係していると思われます。またデザインは洗練されていると思います。初めの方のバージョンではラジオとか匿名チャットなどの 面白い機能があったのですが後のバージョンでは消失ました。後のバージョンがAlpha2とかRinGOchとか呼ばれているのですがこちらはラジオとか つける前にソースがHDDごと消滅してしまっており現在ではほぼ更新されていないといっていい状態です(それでもRinGOchモジュールなどは更新され ていたりする)。新月などの前進のシステムを参考に作成されていて、スレ主が居なくてもスレッドは見えますし(他のノードがキャッシュする)、スレ主が 戻ってくれば(多分ほとんど問題ない確立で)同期します。また、スレ主がレスを削除することも可能。掲示板だけでなく、チャット、blog、wikiなど の機能もあって遊べます。

優れたRinGOchですが実は荒らしとの戦いの歴史があります。1系では荒れまくって大変だったり、2系でも相変わら ず荒れていたりします。ちなみに新月の作者はRinGOchよりも前に似たようなシステムできっちり動くシステムを作っていたわけですが、デザインの関係 か、それとも堅いイメージがあるからか、はたまたPerlだからか、世界観が違うからかなんにせよ後発のRinGOchに水をあけられたような形になりま す。初めのうちはRinGOchの存在を知らなかったようですが知り合ったあとはライバル視して(いたかどうかは知る由もありませんがお祭り状態の RinGOchに参加できず悔しがってはいたようだ)新月の開発をごりごり進めます。

どうにもRinGOch側に常駐しているような人の一部は新 月の作者を敵視しているようで色々と大変ですが(基本的には(一部のよく分からない人を除いて)新月とRinGOchは良好な関係なのですがね)、それは さておき、作者の気質が表れたかというデザインのせいか、RinGOchにはくだらないようなスレッドが数多くあります。なんとなく新月にはくだらないス レッドを立てたりしたらまずいのではないかという感覚を持つんでしょう。多分。

こんなRinGOchも一時期はgatewayも数多くあったのですが自分で利用するだけならいざ知らず数百規模のアクセスを裁くには少々システムが重いので(これは欠点ではなく公開gateway自体おまけと考えるのが多分正しい)がっくり減ってしまいました。

一応http://gateway.ringoch.info/は動いているようですが、高負荷状態になると一時停止する場合もあります。導入方法はデムパキョウジンに詳しく書いてあります。

http://about.ringoch.jp/やhttp://today.ringoch.jp/はRinGOch内のページを公開ページにしている例です。

gateway からではAlpha2の面白さは十分には分かりません(書き込みやスレ立ては性質上制限されている)。少しでも興味をもったなら自分で導入して試してみる ことをお勧めします。できれば日記でもつけてみるとか、適当なスレッドやblogにレスをつけてみるのもいいんじゃないでしょうか。

ちな みに.netということでmonoとかでも動くかと期待しますがWindowsのDLLを直接呼び出している部分が有るので動かないでしょう。Wineと 併用ってできるんでしょうか?できるならわけのわからないAPIも.netの機能も使ってないような感じですから動きそうな気もします。

P2PBBS番外 - ShareNNTP

[Create: 2005/11/12 19:26] [LastUpdate: 2005/11/12 19:41]

ShareはWinnyで逮捕者が出たことをきっかけに開発されたP2P匿名ファイル共有ソフトです。

仕 組みとしては、拡散アップロード+ハッシュにより(一次発信者の)匿名性を確保しています。拡散アップロードとはファイルをばらばらにして、第三者に強制 的にキャッシュさせる方式で、ばらばらになったファイルは、それぞれ、ばらばらに別々の人に送られます。このあたり、PUSH型でFreenetに似てい ます。Shareには中継は無いので中継によるキャッシュの拡散は無いわけで、ダウンロードと拡散アップロードによってキャッシュが拡散します。帯域を有 効に利用するための策で、拡散アップロードもダウンロードもユーザーが自発的に行わなければ起こらないわけです。後々のバージョンではクエリーの送信も無 くなって、より匿名性が高くなったようです(こちらは受信者の匿名性だが、ダウンロード自体は一対一で行うためそこにはばれる。クエリーを投げないことで 不特定多数の人に何を求めているかを知られない仕組み。)。

それはさておき、Shareには先進的な機能としてプラグイン機能があります。これによって、フィルタやらなにやらの機能を追加できるわけですが、これにShareNNTPプラグインというものがあります。

NNTP とはネットニュース(あるいはニュースグループ)のことでメーラーのおまけとして、大抵のメーラーにはこの機能がついていますし、普通はプロバイダなどで もニュースサーバーが用意されています。ネットニュースというのは早い話がwwwベースではない掲示板です。今では2chなどのwwwベースの大規模掲示 板が発達したため寂れてしまっていますが、海外ではまだまだ数多く投稿があるようです。

ShareNNTPとはShareのファイル共有機能を使って掲示板を実現しようというプラグインで、実際色々と遊べるわけですが途中参加すると古い記事やら新しい記事やら集めるのが大変な気がします。

ただ、試みとしては非常に面白くて、うまく使えばShareの匿名性そのままに使い慣れたメーラーを使ってメッセージのやり取りが可能になるというわけです。

D言語

[Create: 2005/11/13 20:47] [LastUpdate: 2005/11/13 21:08]

遅ればせながらD言語です。

CやC++ライクで、Java、C#、Delphi(は、あまりないか…でもプロパティとか?)の良いとこ取りしたような言語ですが、言語仕様はC++などと比べると非常に軽く、かつ、(JavaやC#のように)現代的です。

C/C ++でのincludeなどのディレクティブはマシン性能が貧弱なころの策であって、軽く、かつ強力で単純ですが、副作用も大きいためたまにうっとうしく 感じることもあります(念のため言っておくとincludeでは指定したファイルを“そのまま”取り込み一つの長大なファイルにします)。プリプロセッサ は強力な仕組みで、Javaなどでもしばしば、define文が使いたくなることも無いわけではありません。しかし、includeに限って言えば現代の メモリが豊富にある環境ではファイル毎に多重includeを行ったりするため(時間をかけるけどメモリをケチる仕組みだったため)時間がかかります。

Borland Pascalではunitの仕組みによってCよりもはるかに高速にコンパイルが可能で、その仕組みは現代的な言語のJavaやC#でもimportやら uses等に変化して(というか名前空間を使って階層化しているのも一つ面白いところだが)使われています。

そのためD言語のコンパイル時間はCよりもしばしば高速です(初めDelphi並に早いのでびびりましたが考えればこういうことなので納得したのでした)。

また、D言語にはガベージコレクタがついています。ガベージコレクタはメモリ管理を一部(解放の部分を)隠蔽するため好まない人もいたりするのですがこれが結構便利で大規模なプログラムを組む場合(よっぽど卓越した人でない限り)効果は抜群です。Digital Mars純正のD言語に付いているガベージコレクタはスコープから抜けたりしたときにしょっちゅう処理を行っているようで、(JavaやC#のように)メモリを食いつぶしてからやっと解放を行い始め、処理が重くなったりするようなことがあまりない気がします。

ライブラリはPhobosというものが純正のライブラリとして用意してあります。このPhobosはJavaやC#と比較すると(あるいはANSI C/C++と比較しても)軽く、貧弱ですが直接Cの関数やOSのAPIをたたけるのでそれほど重要でもないかもしれません。

D言語はMore Cを求める人の選択肢の一つとしてかなり印象がいい言語です。C++は強力でパワフルですがその機能を十全に使っている人は少ないはずです。Pascalの文法に馴染めない人でもD言語ならとっつきやすいと思うので一つどうでしょうか。

D言語でリソースファイル(.rc)を使う

[Create: 2005/11/14 20:23] [LastUpdate: 2005/11/14 20:33]

D言語でリソースの扱い方について触れているものが見当たらない?ようなので少し書きましょう(Windowsの話です)。

D言語のパッケージにはリソースコンパイラが無いようなのでその辺から拾ってきます。

とりあえずDigital Marsか らDownload Digital Mars free C++ compilerを拾ってきましょうその中にrcc.exeというリソースコンパイラが付いていますのでそれを使います(日本語がうまく通らなくて嘆く人 はBorland C++ compilerからリソースコンパイラを拾ってくれば動くようです)。

リソースを使うときはrcc(Borlandのやつだとbrcc32)で~.rcをコンパイルして.resにします。

それをdmdにソースといっしょに指定してあげるとリソースが.exeに含まれます。

まあこれだけの話なので話が出ないだけかもしれません。

D言語の日付

[Create: 2005/11/15 22:21] [LastUpdate: 2005/11/15 22:32]

D言語の日付の扱いに関して一つ。

日付の表示についてはデファクトスタンダードとしてANSI Cタイプの表示とHTTPタイプの表示の二つが大きな割合を占めている(気がする)。

Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123

Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036

Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format

のようなパターンがあるが、一番下がANSI Cタイプで一番上がHTTPタイプだ。真中はHTTPタイプの旧タイプと思ってもらうといい。

これはHTTPのヘッダの解釈をするときにできればすべて受け付けるようにするべきで、しかもいちいち解析するのは結構面倒だ。

Windows だとWininet.dllにInternetTimeToSystemTimeというAPIが定義してあって、一発で扱いやすい(数値形式の)時間にし てくれるのだが普通にCで解析しようと思うと泣きがくる。で、D言語ではどうなのかというとPhobosではきっちりと対応してくれているようだ。

std.dateのperseを使うとすんなりとd_time型に変換してくれる(解析の実態はdateparseモジュールでやっているようだが)。

ただ、toStringで変換された文字列はANSI Cに準拠した物になるようなので、くれぐれもHTTPで使わないように(上記の3タイプのうち一番上を使うことが強制されています)。

UTF-8

[Create: 2005/11/18 21:39] [LastUpdate: 2005/11/18 21:46]

UTF -8はUnicodeのエンコード方式の一つで00h~7FhまではASCIIと同じになるという利点があるとかいうことですが、一番の利点というかファ ンシーな点はUCS-32の文字集合をリニアに扱えることでしょう。UTF-16はサロゲートによって一部ではっちゃけたポイントがあるわけで、それを 嫌っている節があるようです。

サロゲートを無視しても問題が出ることは稀でしょうが、UTF-16をUTF-8にコンバートするコードをあげておきます。一応サロゲートも見ていますが十分なテストをしたわけではないので期待はし過ぎないように。

std::string ret;

for(std::string::size_type i = 0;i < s.length();i++){

if(0xd800 <= s[i] && s[i] <= 0xdfff){

// Surrogate

uint16_t c1 = s[i++];

uint16_t c2 = s[i];

uint32_t c = ((c1 ^ 0xd800) << 10) | (c2 ^ 0xdc00);

ret += ((c >> 18) & 0x07) | 0xf0;

ret += ((c >> 12) & 0x3f) | 0x80;

ret += ((c >> 6) & 0x3f) | 0x80;

ret += (c & 0x3f) | 0x80;

}else if(0x00 <= s[i] && s[i] <= 0x7f){

ret += (char)(uint8_t)s[i];

}else if(0x0080 <= s[i] && s[i] <= 0x07ff){

ret += ((s[i] >> 6) & 0x1f) | 0xc0;

ret += (s[i] & 0x3f) | 0x80;

}else if(0x0800 <= s[i] && s[i] <= 0xffff){

ret += ((s[i] >> 12) & 0x0f) | 0xe0;

ret += ((s[i] >> 6) & 0x3f) | 0x80;

ret += (s[i] & 0x3f) | 0x80;

}

}

return ret;

UTF-8 その2

[Create: 2005/11/19 20:50] [LastUpdate: 2005/11/20 19:27]

前回、UTF-16からUTF-8への変換をあげたので、逆変換をあげておきます。

相変わらずサロゲートペアあたりの処理が怪しいので、期待はし過ぎないように。それと、文字列長のエラー処理も少々微妙な所です。

std::wstring ret;

for(std::string::size_type i = 0;i < s.length();i++){

uint8_t c = (uint8_t)s[i];

if((c & 0x80) == 0){

ret += (wchar_t)c;

}else if((c & 0xe0) == 0xc0){

uint8_t c2 = (uint8_t)(i + 1 >= s.length() ? 0 : s[i + 1]);

ret += (wchar_t)(((c & 0x1f) << 6) | (c2 & 0x3f));

i++;

}else if((c & 0xf0) == 0xe0){

uint8_t c2 = (uint8_t)(i + 1 >= s.length() ? 0 : s[i + 1]);

uint8_t c3 = (uint8_t)(i + 2 >= s.length() ? 0 : s[i + 2]);

ret += (wchar_t)(((c & 0x0f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f));

i += 2;

}else if((c & 0xf8) == 0xf0){

// Surrogate

uint8_t c2 = (uint8_t)(i + 1 >= s.length() ? 0 : s[i + 1]);

uint8_t c3 = (uint8_t)(i + 2 >= s.length() ? 0 : s[i + 2]);

uint8_t c4 = (uint8_t)(i + 3 >= s.length() ? 0 : s[i + 3]);

uint32_t uc = (uint32_t)(((c & 0x07) << 18) | ((c2 & 0x3f) << 12) | ((c3 & 0x3f) << 6) | (c4 & 0x3f));

if(0x010000 <= uc && uc <= 0x10ffff){

uc -= 0x010000;

ret += (wchar_t)(((uc >> 10) & 0x03ff) | 0xd800);

ret += (wchar_t)((uc & 0x03ff) | 0xdc00);

}

else{

// Error.

if(uc < 0x010000){

ret += (wchar_t)uc;

}

else{

// Error.

}

}

i += 3;

}else{

// Not first byte charctor.

}

}

UTF-8 その3 フォロー

[Create: 2005/11/20 19:40] [LastUpdate: 2005/11/20 19:58]

前回と前々回で作成した関数ですが、MultiByteToWideCharとWideCharToMultiByteで一発だよと言われそうなのでフォローを入れておくのですが、

まず第一にWindows95あたりではUTF-8に対応していないのです。

そして第二に(こちらは非常に面白いのですが)手元のテストではASCII範囲内の文のみで構成された文字列を渡すと変換に失敗してしまったのです(MultiByteToWideCharで)。

この場合コードページをACPにすると変換できるのですが、わけがわからないのでさくっと製作。

[Create: 2005/11/25 20:33] [LastUpdate: 2005/11/25 20:36]

あんまり適当な日記だと殴られそうなのであまり書いていないのですが(多分この記事も即座に削除しますが)柿の季節なのです。

このあたりだと干し柿が99%占めていてまあ0.5%ぐらいは焼酎で渋抜きしたもの。あとは甘柿だったりしそうですが。

というわけで干し柿の生産まっしぐらです。冬の風物詩ということで街中でもベランダあたりに柿を干している姿が見られますはい。

.NET Framework 2.0

[Create: 2005/11/26 18:22] [LastUpdate: 2005/11/26 18:25]

http://msdn.microsoft.com/netframework/downloads/updates/default.aspx

.NET Framework 2.0 出てるのに気づきました(前から気づいていましたが)。ただ、日本語版はまだ。ランタイムに日本語も何もあんまり関係ありませんがね。

今のところ必要性を感じていないので入れていませんが、SDKも出てるのでそのうちフリーのIDEでもまた出てくるんじゃないでしょうかね?

鶏のえさ

[Create: 2005/11/27 14:57] [LastUpdate: 2005/11/27 15:16]

正確にはチャボなんですが、家では鶏を飼っています。

もっと正確には雑種なので純粋のチャボよりも一回り大きく、鶏よりも一回り小さい鶏です。飛びます。

以前はうさぎも飼っていたんですが毛の需要が落ちた(というよりはもっと大規模にやるのが海外とかでできて買われなくなったためですが)ので今は買っていないんです。

(蛇足ですが、戦後しばらくは豚と山羊も飼っていました。山羊はミルクを取るためですが豚は売るためで肉屋に豚を持っていくと天秤ばかりで若干重さを誤魔化されて買っていかれたそうです。)

まあ鶏を飼っている目的は主に卵になるのですがこいつは鶏ほど卵を産みません。春先にちょっと産むぐらい。卵がある程度たまると暖めるので奪って食うのが普通なのですがそうしても1羽で30個ぐらいしか生さないのではないでしょうか。

まあこれもいったいいつからいる鶏なのか私には分かりませんが戦争の前後では鶏を飼っている家は結構あったはずで、卵を農協とかに毎朝もっていっていたというエピソードもあります。このチャボたんは卵も小さいので売れませんが。

で、 この鶏の餌なのですが放し飼いにしてやって草とか虫とか食わせるのも一つの手です。しかしながら、危険が一杯で猫、狐、狸、鳶、犬、烏などにやられます (実際それぞれやられた経験があるものばかりです)。まあ、家の飼い猫は鶏に危害を加えようとするやつらを見張っていますので大型犬だろうが、鷲だろうが 追っ払った兵ですが(ちなみにメス)そろそろ10歳を超えて歳をとってしまったようです。こいつが面白いやつで、マーキングしますし、オス猫と縄張り争い をします。まあ鶏も1羽で飼っていると、雌鳥がコケコッコーと鳴くことも確認されていますのでいいでしょう。

というわけで鶏を放し飼いに すると逃げることもあり(こいつは飛ぶ)、もっぱら小屋の中で飼っている訳ですが、そうすると餌はなんなの?というと大体野菜くずとか神棚や仏壇に上げた ご飯だったりして(そういやこのご飯をぽん煎餅にしたりするのも手ですがそれは知らない人も多いか)います。野菜くずというと例えば白菜なんかでは外側の 丸まっていない部分あたりはざらりとした毛が生えていて食べても硬いし普通食べません(市販されているものにはもちろんつけておかない)。というわけで刻 んで米ぬかと混ぜてとりの餌です。残念ながら足りない場合があるので配合飼料をあげていますが。

というかこういう野菜くずを鶏にくれるという話は戦後あたりによくやっていたと言う話をよく聞くのですがこれは私の家では時代が停止しているということでしょうか。

デバッガ

[Create: 2005/11/28 18:37] [LastUpdate: 2005/11/28 18:38]

別にどうってことないのですが、デバッガが無いので開発に使えないとかどうとかいう話がたまにあって、そんなことは無いだろうと思うのですがどうでしょうか。