4/15/2009

DICOM

DICOMという医療用のTag付Media形式規格がある。
これがめちゃめちゃ巨大な規格である。

基本的にはTag+Value(s)みたいな形式のデータ構造。
Tag部分は、Keyデータに当たる部分があり、それぞれ規格によって決められた意味を持ったものと独自のタグが含まれている。

たとえば
GroupNum(2byte)|ElementNum(2byte)|Keyword(2byte)|(reserved)(2byte)|DataLength(2/4byte)|DataValue(DataLength)
という形式のデータがずっと並んでいる。

DataValueの中にふたたびTag+Valueみたいな形式のデータが入る、入れ子構造にもなっている。
人間の可読性は限りなく低い。機械に優しいわけでもなさそうです。
ただ汎用性の面では機械にレベルが近いので、優秀そうです。いまならXMLで構築されていそうです。

これが格納できる画像もしくは動画の形式はオーソドックス(JPG,PNG.RLE、MPGE)なものばかりですが、その格納方法もとい圧縮方法がいまいち分かりにくい。というか、最新の規格書は英語もので、PDFファイルもDeadLinkあるいはそもそも配布禁止っぽいもの。
でもこの規格自体の需要はあるので、OpenSourceでいろいろ公開されています。それはぐぐればいろいろ出てきます。

ただ本当に規格の文章を読むのなら、3,5,6でとりあえずはファイルの内容を読むことが出来るようになります。特に6の文章にはタグのデータの定義集がついているので、必須。5は圧縮されたデータについての情報。3は基本的なDICOMの話がある。もし画像をやるなら5,6は本当に必須。
でもこの5,6の文章が英語でもあまり判明ではない。またそれぞれの数値の実際的な使い方についての記述が少なく、規格からそれを実装するまでの溝が結構ある。

また規格自体が超巨大といってもいいので、それら全てを網羅したものを作れば、普通に販売が出来ます。というか、売っているところがあります。もっともタグに独自にデータを割り振れるところがあるので、完全に解析できることはなさそうですが、互換性がそこで完全ではない分、オーダーメイドの部分をもったソフト販売も夢じゃないですね。もっともそんなところとお付き合いのある会社に雇われていなきゃこんな規格みないでしょうけど…

仕様にしたがってファイル読み込みを作る練習にって思っているなら、やめたほうがいいですね。そもそもこの形式のファイルが手に入らない…w一般的に流布しているファイル形式じゃないところが良いのでしょうけど…ちなみにIrfanViewではみられます。

車輪の再発明

題名は昔どこかのサイトで誰かが言ったすばらしい台詞。
意味としては、すでにあるものを再び発明するために労力を使うなんて馬鹿らしい、という意味だと思う。決して、再発明することによってそれを発明した人の経験を追体験できてすばらしいという意味ではないと思う。

なぜこのことを言うのか。今現在の世界ではあらゆるところで発明が日夜起きている。それの情報にどれだけ多くの人がアクセスすることができるのか、という観点をおいておいて、その発明を新たに知ることはそれを再発明する労力よりは割と軽微だと思う。もっともそれはよく訓練された検索エンジンが動いているからであり、ただその恩恵に対しては十分ありがたいと思うが、それが一般化されてしまうと忘れがちです。
話を元に戻すと、今度はアクセスの問題で、秘匿されている知識、発明はありますが、インターネット網で整備された巨大な図書館の存在は、それが存在していなかった時代に比べて、はるかに知識を手に入れることが容易になりました。またプログラムにおいては肝となる実装部分は本来は秘匿されていて、またあるいは高額な書籍の中に印刷されていました。ここにきて、オープンソースの話をするのですが、彼らは何のためにそれらをアクセス可能な形で残すのか。この動機付けに関して、商業に長く身を置いている人は、アクセス可能であることのありがたさを感じていながら、自身で身に着けた技術を隠すことが多いです。まぁそれで食っているのに、わざわざ手のうちをさらすまでもないのですが。
正直なところ、私もソースコードを公開する動機付けで1つだけいえるとすれば、「前に公開されている情報によって助けられたから」ということしかありません。言うなれば、「情けは人のためならず」ですな。特にプログラミングなんてほとんどどっかの誰かのコピペみたいなソースコードや誰かの提唱した考え方、アルゴリズムをふんだんに使って作っているのに、いまさら自分だけは秘密っていうのも・・・
まぁ、1つだけ大きな公開を躊躇させる懸念事項は、ソースコードの品質。ソースコードにも綺麗と汚いが存在するので、汚いソースコードを出したくないってことです。また誰かに再利用されるときに責任問題があったり、またその利用条件によって使えなかったりいろいろです。ソースコードは基本的に責任取らんから、好きに使って良いけど、「自分のものって言うなよ」って権利がいいのですが、ソースコードの独自性をどこまで認めるのかという問題が出てくると、改変禁止が一番分かりやすくて、でもそれは変えられ場合には誰の権利になるのかということが問題になります。
哲学で言うと、なんたかの舟という問題で、代替可能なもので作られたAを統一体としてのAとして認識させているものは何かって問題です。オリジナルや自己というものの本質を問う題目である。

それで再発明した場合には、発明しているのにすでに誰かのものっていうことで、全ての苦労が水の泡。権利問題もあるけど、なるべくならすでに発明されているものを利用してそれから先に行こうよって言うのが、私の基本スタンス。だってすでにあることを知ったときの脱力感が嫌いなんです。

4/12/2009

いくつかの不満

どうしてもこれだけは許容できない点が私には存在します。
それは、とても主観的な問題で一般化できず、また特定の手順によって確認できるものでもないのです。
  1. 浪費ばかりをし続ける人
  2. 努力しない人
  3. 口だけの人
  4. 今だけしかない人

これらはただこのように並べられていると、どれも例外が存在しています。1.に関しても、資産をもってそれを食い潰している人は、まぁ許容できますが、2.該当するならば許容しがたいです。しかし、私は努力をむやみに礼賛する気もさらさらないのです。努力という言葉はその言葉にすでに善性を表す意味合いが含まれていますが、個人的にはこの努力というのは覚悟をもった労働であり、これによって如何なる結果が導かれても自己への内省を生むようなものをさします。そうでないと、努力であれば全てにおいて許されることになってしまいます。3.の口だけの人は結局は覚悟がないという点で2.と複合的に許しがたい行動をとることが多いので、いやです。4.の今のみに生きているというのも、確かに極限状態で事象の大まかな見通しすら立たないのであれば、それについては問えませんが、私が問題にしたい場合は十分予見可能な範囲のことすらも考慮に入れない人です。これを仮に確かめるならば、説明をしてもらえばいいのです。なぜそうするのか。

大抵の許容しがたさの根本には、自己への無理解であると思います。自己への理解、自己の行動原理の確度。内向きの検討であるけれど、それの題目は将来や外の事象に向けられていることをしっかりしている人を私は評価していますし、そのように私自身なるべきであると思っています。これらを多くなしている人のことは私は尊敬しますし、より少ない人でもこの志向性を持っている人へは敬意を払います。これらの志向性が欠如している人こそ、私がもっとも嫌うものであり、度し難いと思います。

もっとも簡単にたとえると、寄生虫はすべからく排除したい。

童話でたとえるなら、「アリとキリギリス」でのキリギリスは厳冬の雪の中で、アリに頼るようなら死すべきであり、その中でもキリギリスとして生き続けようと覚悟を決めるならば、わずかに助けるべきであろう、ということである。

考えて生きていくことをあきらめた人は、積極的に排除したいです。考えた末に死にたいと願う人にはわずかな憐憫を覚えますが、私は8割もったいないと思います。その覚悟をもって、ことにあたれば本当に困難なことなどないはずですから。死は根本的な無へいたった状態と考えるから、死への志向は生の逆であり、落下速度に近いエネルギーだと思うのです。そのエネルギーで問題を突破できるなら生きれば良いし、突破できなくても本来の覚悟へは至れるから、ただ死ぬことを選ぶことは、本当にもったいないと思う。

「必要とされていないから死ぬ」という人は、考え違いを起こしていると思っています。問題の局地は、他人が先に発生するのか、自己が発生するのが先か、です。「社会的に必要とされていないから死ぬ」という意味で死ぬならば、その前提とされている社会を変えることを考えられないことが哀れみを誘う。そして必要とされるようなことをしてこなかった、あるいはしていないのに、それを望むならそれはないものねだりであり、赤子である。してきて、今はなくなってしまったのなら、次の必要とされることをすればいい。「他人に必要とされる自分」でしか自分を保てないなら、それを満たすようにするか、そもそもの「他人に必要とされる自分」は人格的に壊して、別の人格を作り直すしかない。これを「死」とみられるならば、それでいい。なにもせっかく生きようとしている「身体」まで殺してしまうことはない。ハード的な「身体」はまだ使えるのだから、ソフト的な「人格」を再インストールするか、リカバリするしかない。ソフトの複製が確立されていないので、論理的に身体は根本的な自己といえるかもしれない。これは経年劣化や外的衝撃で破壊されてしまうまで使えばいい。

そして、やはりいいたいのは、どう行きたいのかを明確に自分にだけは説明できるようにしておいてほしい。そうでないと見苦しいし、救いようがない。芯になるものがないとざるにもかからない。本当の意味ですくいようがないw

4/05/2009

AssertとException

アサートとエクセプション

ついさっき、AssertとExceptionの違いを理解した。

端的にいって

  1. AssertはDeveloperのためのもの。
  2. ExceptionはUserとDeveloperのためのもの。

Assertは前からその存在を知っていたのだが、うまく使い方が分からずにずっと放置していた。

とりあえず自分で考えた使い方のルールを備忘録。

  1. Publicなメソッドの中での引数のエラーなどは、Exceptionで処理するか、もしくはそのまま情報を追加してThrowする。
  2. Privateなメソッドの中での引数のエラーなどは、基本的に開発者に責任があるので、それはAssertで警告する。
  3. ProtectedなメソッドでVirtualでないものは基本的にAssert、それ以外はException。
  4. DLLなどの形のときに外部から使われるものは、基本的にはThrowする。それ以外は開発者のみが知ればいい情報なので、それらはAssertで処理する。

例外処理が万能すぎるからついつい多用してしまうので基本的にはこのルールでいいと思う。Trace…に関しては別の話でw。

あと問題だと思うのは、Exceptionでしか捕捉できないもので、なおかつAssertしたほうがいいものがあるけど、これはどうするのか…それとそもそも予期できないエラーはすべてExceptionに飛んでいくのはどうなのだろう…。プログラムの設計の仕方が悪いのかもしれない。

安全で、効率的なコーディングを目指してT&Eしかないのか…

4/03/2009

就職した

1つ、意外と休みが多いこと。
2つ、8時間(9時間)の拘束って意外と苦痛。
3つ、新人だから気を使いすぎて倒れそう。

あとは地味に飲食と音楽聴くのがダメなのがきつい。
普通なのだと思うけれど、きつい。

休みが多いなぁと思った。実家で手伝いをしている感覚だと、拘束時間はゆるく長くて、なおかつ土日はない。休日はむしろ仕事って感じだったから、平日しか仕事がないことが不思議。
普通の会社は拘束時間は割りと長めでみっちりしてる。そしてCRTのモニタの前に8時間はつらいです。目が痛いです。

さらに一応、それなりにプログラミングをしていたので、会社では『期待の新人』らしい。とてもじゃないが、気を使いまくって倒れます。どの面下げて「できる」と言え、と。

・・・あと環境を設定させたいのなら、Officeとかは一番に入れさせて下さい。勤怠表が書けませんw

仕事が終わって帰宅して3時間ぐらいは時間が取れるので、意外と勉強とかできそうです。(今はまだw