次世代DVDの多重層による高容量化

東芝、3層51GB容量のHD-DVD ROMを開発したらしいので、容量的な不利はなくなりつつあるのかもしれない。

eetimes.jp [CEATEC 2006] 6層で200Gバイトの 高容量BD媒体をTDKが開発 (2006/10/05)によるニュースでは200Gバイトのメディアを開発したとされている。

次世代DVDの売れ行きは容量よりも生産プロセスの容易さやコーデック、その他の要素が絡んできそうな予感がする。

カテゴリー: HD, HDTV | 4件のコメント

TCPタイムアウトの変更(2)

前回の投稿において、タイマ粒度はどうなっているのか、という疑問があったが、良く見るとHZの値がキーであることに気がついた。

#define TCP_RTO_MIN ((unsigned)(HZ/5))

Linux KernelにおけるHZについて詳しい説明があるのが@IT:Linux Kernel Watch 8月版 割り込み頻度変更で消費電力は低下するか?(1/2)で、

 カーネル2.6.13-rc1にて、タイマー割り込みの頻度「HZ」が変更可能になりました。その際に、デフォルトの値が以前の
HZ=1000

から
HZ=250

になりました。このデフォルト値変更は多くの議論を巻き起こしました。

と説明している。実際に/boot/config-2.6.18-3-686を見てみると、

# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250

と、それらしきことが書いてある。よってTCP_RTO_MINはHZ/5=250/5=50ということだ。

で、おそらく、このHZがKernelの割り込みであるのだから、TCPの割り込みもそれで入っているのかもしれない。また、興味深い事実として、

 デフォルト値を250から1000に戻してほしいという要求に対して、Linusは「それが必要なユーザーが1000に変更したらよいだけだろう」と反論しました。そして、「『デフォルトを1000にするべきだ』と主張するのであれば、それが本当に良いということを示すデータを見せろ」というのです。

と書かれている。すなわち、もしTCPのタイマの粒度=Kernelのタイマの粒度であるのなら、HZを1000にしてより細かい粒度のタイマを試すことも可能かもしれない。

4msタイマと1msタイマの違いがどれほどあるのか分からないが、レイヤ2との協調性を実現する道具としては魅力的ではある。誤差の範囲にしかならないかもしれないが…

カテゴリー: TCP, プログラミング, 未分類 | コメントする

TCPタイムアウトの変更(1)

Linux kernelの2.6.18のTCPのタイムアウト時間を変更したいため、kernel実装を見つめる。

RTO(Retransmission TimeOut)が関係していることは分かっていたので、grep。RTOについてはたtcp_input.cが一番多く出てきた。見てみると、ACK受信時の処理やRTT、RTOの計算などTCPの入力系が書かれる。

中でも気になったのはTCP_RTO_MINで、includeのnet/tcp.cの中で、

#define TCP_RTO_MAX ((unsigned)(120*HZ))
#define TCP_RTO_MIN ((unsigned)(HZ/5))
#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ)) /* RFC 1122 initial RTO value */

と定義されている。TCP_RTO_MINがHZ/5ということはすなわち、1s / 5 = 200ms。Omicron TCP/RTOにて

Linux の tcp_set_rto を見る限り,”RTO = SRTT + 4 * RTTVAR” になっている気がするけど.最小値(TCP_RTO_MIN)は 200ms,最大値(TCP_RTO_MAX)は 120s.

と書かれているので、ほぼ間違いないだろう。さらに

最小が 200ms なのは,TCP/遅延ACKタイマが 200ms だから,これ以上小さくすると不必要な再送が増えるため.で,遅延 ACK はなぜ 200ms なのかというと…

とも言及している。確かに遅延ACKが200msだと遅延ACKが入る前にタイムアウト再送してしまう…。遅延ACKについて調べてみると、

#define TCP_DELACK_MAX ((unsigned)(HZ/5)) /* maximal time to delay before sending an ACK */
#if HZ >= 100
#define TCP_DELACK_MIN ((unsigned)(HZ/25)) /* minimal time to delay before sending an ACK */
#define TCP_ATO_MIN ((unsigned)(HZ/25))
#else
#define TCP_DELACK_MIN 4U
#define TCP_ATO_MIN 4U
#endif

TCP_DELACK_MAXはHZ/5でTCP_RTO_MINと同じ。ほうほう。

ちなみにOmicronさんのTCP/RTOページにはLinux kernelのpatchが置いてあって、ページ内でそのできることに言及はしていないが、実はsysctlで動的にTCP_RTO_MAXとTCP_RTO_MINを変更できるコードが書いてある。素晴らしい…

もし遅延ACKが問題になるようであれば、TCP_DELACK_MIN / MAXともに変更できるようにpatchを変更しよう。そこまでやれば後は現在のTCP_RTO_MINである200msより下限なRTOがRTTによって適切に決められることだろう。

TCP における確認応答と再送制御 – The all-round Dictionary of Network Terms技術フェチ日誌(2006-11-02)が参考になるかもしれない。もし、RTOが上限と下限を決めても上手く動作しない場合は、RTOのインスタンス値であるtp->mdevの計算ロジックを変更する必要がありそうだ。

後、調べておくべきことはタイマの粒度だが、タイマの粒度を調べるには、”いつRTO(tp->mdev)が待ち時間と「比較」されて再送ロジックに入っているのか”を調べればいいだろうと思っている。しかし、再送ロジックに入るところがまだ探せて確定できてない。もしタイマの粒度が最低200msだったら嫌だなと思っているが、遅延ACKの最低値がHZ/25(40ms)なので、そこまでなら大丈夫な気がしている。

ここまで調べておけば何とかなるか。

カテゴリー: TCP, プログラミング, 未分類 | コメントする

USBメモリ上のJava開発環境

開発環境を持ち歩いたり、また納品を求められる場合がある。その場合に非常に有効なのがUSBメモリを使うというアイディアである。

Eclipseは基本的にインストーラなしで利用できるので、当然のことながらUSBメモリ上に展開しても使える。さらにプロジェクトによっては、以下のコンパイル環境をプロジェクトディレクトリ自体に含めてしまう。

  • GCJ(GCC)
  • UPX
  • WiX

実際にWindowsネイティブで動作するexeを作成する場合にはbuild.xmlを作成してantからビルドをかける。そうすることによって、antビルドでEclipse-(gcj)->exe-(upx)->exe-(WiX)->msi(Windows向けインストーラ)が一連の動作で完成する。デバッグのときにはgcjを使わずにJava VMを使うことでコンパイルの時間を削減できる。美しい…

そうしてEclipseごとzipで固めたり、USBメモリに入れてしまえば、どこでも利用できる開発環境の出来上がりである。WindowsネイティブGUIアプリケーションを制作できる環境でここまでメンテナンスがしやすいものは他にはないだろう。

全てOSSなのでライセンスの問題が発生しないことも大きい。

別の手段として無償で利用できるようになったVmware等の仮想化PCを利用する手段が存在するが、Windowsなどプロプライエタリな製品を含む場合はライセンスの処理が必要になる。そこでLinuxという考えもあるが、開発環境を渡す相手によっては使いこなせない可能性が高い。

そこで無償のものを利用することを目的としたソリューションを今回構成した。開発言語がJavaという点でもメンテナンスしやすいことであろう。

今回のことで、つくづくOSSの素晴らしさを感じた。

カテゴリー: Windows, プログラミング, 未分類 | 2件のコメント

gcjのリンクでハマる

gcjによるjavaのネイティブコンパイルで下記のコマンドで実行するとundefined referenceエラーでリンクが上手くいかない。

gcj –main=HelloSWT –classpath=swt/win32/3218/swt.jar -Lthisiscool-gcc/swt/win32/3218 -lswt HelloSWT.java swtgif.o

で、2時間ほど色々試した結果、

gcj –main=HelloSWT –classpath=swt/win32/3218/swt.jar -Lthisiscool-gcc/swt/win32/3218 HelloSWT.java swtgif.o -lswt

で上手くいった。違いは”-lswt”と”.o”の順番である。

Manpage of GCCを見ると、

リンクは、オプション -c, -S, -E を指定して抑制しないかぎり(もしくはコンパイルエラーによってすべての処理が中断しないかぎり)、常に最終ステージで実行されます。リンクのステージにおいては、ソースファイルに対応した全ての .o ファイルと、 -l で指定したライブラリと、認識されなかったファイル名 (名前に .o のついたオブジェクトファイルや .a のついたアーカイブを含む) は、コマンドラインに並べられた順番でリンカに渡されます。

と、書いてあった。知るか、そんなん…

カテゴリー: プログラミング, 未分類 | コメントする

SWTで縦横比を確保したままのウィンドウサイズ変更

SWTを使ってGUIを構成するスタンドアロンのJavaのローカルアプリケーションを作成していて気になったのが「縦横比を確保したままウィンドウサイズの変更」ができるかどうか。

SWTでは基本的にウィンドウサイズのリサイズはaddControlListener(ControlAdapter)とcontrolResized(ControlEvent)によって可能である。

この方法では、ウィンドウの端っこをマウスカーソルが矢印に変化したときにドラッグすると、ウィンドウサイズの変更ができるが、ドラッグが終了しないとアプリケーションの処理が入らない。つまりウィンドウサイズの変更をしようとしているその瞬間にアプリケーションの制御がかけられない。よってドラッグ中に縦横比の制御がかけられない。

win32apiの方面から調べてみたが、ウィンドウサイズ変更後の動きはWM_SIZEが関係していて、ウィンドウサイズ変更中の動きはWM_SIZINGが関係しているらしいことまでは分かった(縦横の比率を一定にしてサイズ変更)。

SWTのソースコードに対してWM_SIZEでgrep検索かけると出てくる。が、WM_SIZINGでgrep検索をかけても出てこない。つまり、SWTではWM_SIZINGの制御は行っていない。自分でWM_SIZINGを書くしかない。

SWTに対してWM_SIZINGを組み込むことを考慮してWM_SIZEがどのようなロジックで動作しているのか見てみた。

org/eclipse/swt/widgets/Control.java
int windowProc (int hwnd, int msg, int wParam, int lParam) 中の
switch (msg) {
case OS.WM_SIZE: result = WM_SIZE (wParam, lParam); break;
}

によってwindowProcを返す。


org/eclipse/swt/widgets/Control.java
LRESULT WM_SIZE (int wParam, int lParam) {
sendEvent (SWT.Resize);
// widget could be disposed at this point
return null;
}

でWM_SIZEのイベント(SWT.RESIZE)を送る。


org/eclipse/swt/internal/win32/OS.java
public static final int WM_SIZE = 0x5;

で、OS依存のコードであるWM_SIZEを定義するというところまではつかんだ。

後はWM_SIZINGのコードを書くだけだが…面倒だ…orz

カテゴリー: Windows, プログラミング, 未分類 | コメントする

ワイドショーのコメントは蛇足

正直、民法のワイドショーのコメントに腹を立てる場合が多く「何でお前が、さも国民の代表かのようにコメントするのだ」と思うことが多い。それは個人的な特殊な感情なのだろうと思っていたら、池田信夫 blog メディアはマッサージであるにもそういう意見があった。

ふだんはほとんどテレビを見ないが、正月ずっと家にいたので、いやでもテレビを見てしまう。しかし特に民放の番組は、ほとんど5分と見ていられない。せりふを字幕でなぞり、映像を見ればわかることをコメントでなぞり、ビデオ素材の内容をスタジオで「気の毒ですねぇ」などとなぞる。このしつこく相槌を打つ傾向はワイドショーでもっとも顕著だが、最近はニュース番組にも広がり、「報道ステーション」などはスタジオの時間の半分ぐらいはキャスターの個人的な感想だ。

(中略)

これって実は、男の感覚なのである。男同士で、たとえば困っているとき「気持ちはわかるよ」などと相槌ばかり打ってもらってもしょうがないし、そういう余計なことはいわないが、女同士の会話を横で聞いていると、この種の無意味な相槌が実に多い。この特徴はメディアでも顕著で、立花隆氏は女性週刊誌のアンカーをつとめていたころ、記者の書いた記事に「なんと悲しい話だろう」といった形容詞をたくさんつけて読者を感情移入させるのが編集の仕事だったと語っていた。

この話を読むと、納得してしまった。コメンテーターの感情に腹を立てていたことに気づいた。この先どうすればよいのかなど建設的で意味のあるコメントをするコメントは感覚で一割以下に感じる。それは当然で全てのニュースに対して造詣深く切り込める人間なんて存在しない。だから自分がネット上のニュースの議論に耳を傾けることにも納得がいった(ただしネット上の議論でも建設的な意見を求めるのはかなり厳しい)。

で、自分なりにスラッシュドット2ちゃんねるの議論の質の違いとはなんだろうかと今まで疑問に思ってきたが、建設的な議論と感情的な議論の違い、男性的な議論と女性的な議論の違いに結論づけられるのではないか、という仮説を持つことができた。

そもそも、2ちゃんねるが存在するのに価格.comスラッシュドットが存在する理由はなんだろうか、と考えると、”文化が違う”というしかなかったが、今後はより深い角度から切り込めそうな気がする。

ただし2ちゃんねるでも板(板住人)ごとに議論の質が違っているので、板ごとに男性傾向・女性傾向があるとは考えている。少なくとも技術系の板は男性傾向が強いと思うし、痛いニュースは女性傾向が強いと思う。

と、思うと、やはり、技術系の板もスラドも男性傾向なのに違うのはなぜか、と考え込んでしまう。昨日スラドを調べていて傾向がつかめてきたが、おそらく、かなりの確率で官公の中の人が入り込んでいる。官が意見を投下して建設的な意見(パブリックコメント)を集めているのではないか、と思えるくらい。なんなのだろうか…。

カテゴリー: テレビ | 1件のコメント

フォントの経済効果

Microsoft Windows Vistaって何がいいの?という質問をされることが多いですが、その1つとして挙げられるのはメイリオを導入したことではないでしょうか。

WindowsXPでmeiryo(メイリオ)フォントを利用する:ダウンロード -[Di]で公開されています。

aki’s STOCKTAKING: メイリオ Meiryo……..明瞭にて、メイリオのデザイナーである河野英一氏の功績として、BTの電話帳のフォントを作成したことを挙げ、

それまでの英国の電話帳には、アメリカ生れの伝統的な書体「Bell Gothic」が使われていたそうだが、この新フォントの採用によって、電話帳自体を10%圧縮・減量、1989年の改訂時点で年間2億5000万円の節約を電話会社にもたらしたという。文字のデザインはカッコだけではなく、そんな大きな社会を動かす力でもあるのだ。すばらしい。

と紹介されています。Windowsという基本ソフト上においての経済効果はどれほどのものとなるのでしょうか。気になります。

ちなみにメイリオはVistaのClearTypeを使わないと9ptあたりが綺麗に表示されないようです。XPでもClearTypeフォントの表示方法を調整する − @ITの記事にあるようなClearType Tuner Step 1: Turn on Windows XP ClearTypeをインストールすれば改善はされるようです。

Vistaが一般化するにつれ、フォントの経済効果がどのように反映されるのか興味深いです。

カテゴリー: フォント | コメントする

空前のHDブームの予感

高精細度テレビジョン放送を国が義務化することによって、テレビの新陳代謝が起こり、HDなデジタルテレビが普及してきました。

今までは現行の地上波デジタル放送でそのHDスペックを引き出しきることができないという事情があり、解像度をケチってきた事情がありましたが、Blu-ray DiscHD DVDの登場によって、ようやく高解像度としての意味が出てきた感じです。プレイステーション3Xbox 360もHD品質を堪能するに最適であることでしょう。

このようにハイデフな機器が出回り、いわゆる「認知」がされ始めるにしたがって、その要求も一般化されていくような気がしてきています。こうした要求のベクトルとして大きく2つの方向性として「多様性」と「高品質」が存在していると感じています。

今までインターネットの文化は「多様性」の要求を満たすことにあったと感じています。分かりやすい例でいえばyoutubeであり、youtubeの画質は通常のテレビ以下ですが、多くのユーザーを集めています。その理由はグレーですが、コンテンツとして面白ければユーザーは満足するという言い方ができると思います。

しかしながら、ハイデフを求める向きとしてH.264 高精細映像配信の取り組みというHDTVをVODなどで行おうとする動きが目立ってきました。そもそもインターネットで高品質のストリームを流すためには高品質かつ広帯域が不可欠で、一般的に普及しているADSLでは最悪の場合は回線断が発生するなど難しい事情がありました。これからはFTTH契約者数が700万件突破、総務省発表 | IBTimes(アイビータイムズ) : 一般に見られるとおり、ADSLは減りFTTHが増えて一般化していくことは見えています。

よって将来的にはHDテレビと連携したFTTHがメジャー化していくことでしょう。その場合、PS3やX-BOX 360のような安価なゲーム機がインターネットの出口としてのHD出力デバイスとして機能していくのではと考えています。AV向けの高級版プレイステーション3が登場 – Engadget JapaneseにあるようなAVPS3が登場すればマニア向けによく売れることでしょう。

また映像だけでなく、HDなサウンドへの探求としてavex HD SOUND LABORATORYのような試みも行われています。繊細な音へのこだわりは現在では真空管世代に比べて盛り下がっていますが、今後は映像と共にオーディオもHDを冠するようになっていくのではと考えています。こうした動きはインテル® ハイ・デフィニション (HD) オーディオからも見えます。

このようにHDブームが今年出るのでは?と考えています。こうしたサービスをリアルタイムに実現する必要があるのであれば、NGNも必要かもしれません。2011年までの重要な考察案件です。

カテゴリー: HD, HDTV, テレビ, 未分類 | コメントする

プラネットアース見ました

BSハイビジョンでNHKスペシャル|「プラネットアース」(全11集)が第1集から第7集まで放送しているので、見ています。

うわさどおり素晴らしい映像で、見入ってしまいます。

が、MUSE方式かつM/Nコンバーター(MUSE2NTSCコンバーター)の環境ではやっぱり不満です。

ハイビジョンテレビが映るディスプレイを買えばいい話なんですが…

カテゴリー: HD, HDTV, テレビ | コメントする