スキップしてメイン コンテンツに移動

投稿

6月, 2007の投稿を表示しています

次世代DVDの威力

Blu-ray Disk(BD)の映画を観たが、今までのDVDとまるきり違う精細さに驚いた。今までは内容の良し悪しが重要で映像など二の次だと考えていた。ある意味そうなのだろうが、映像の表現力がここまで変わってくると断言できなくなる。今までつぶれて見えなかった部分が見えてくる。映像の情報量が違うのだ。

これからは映像のHD化が進み、2011年7月24日には地上アナログTV放送は姿を消す予定だ。そのため、かなりの世帯でHD対応TVを持つことになるだろうし、そうするとDVDは一般の放送よりも劣った映像になってしまう。対価を払って購入したDVDが普段のTV放送よりも画質が劣っていてはさすがに納得いかない。ここで、BDやHD DVDなどの次世代DVDに存在価値が出てくる。次々世代DVDを待つという人もいるが、2011年にそれが普及しているとはとても思えないので、多分、BDかHD DVDはそれなりに認められ、ある程度普及しているのではないだろうか。BDとHD DVDのどちらがより多く普及しているか現段階では断言できないが、今のところBDが一歩リードしているようだ。

もし、Full HD対応TVで次世代DVDプレイヤーを利用できる機会があったら是非観て欲しい。今までの違いに驚くはずだ。(注: BD/HD DVDのソフトの中には劣悪なものも含まれるのでその辺はちゃんと確認して欲しい。)

たまには独り言

京速コンピュータ…三社連合の複合アーキテクチャは良い。決定が遅すぎるのは悪い。

マスコミ…何であんなにいい加減なことで許されるんだ? 能力の限界か。せめて嘘言うのはやめよう。

Advanced/W-ZERO3[es]…まあまあ良い。多分使う。

次世代ゲーム機…Wiiはまったく興味がなくなってしまった。やりたいゲームも無い。PS3のゲームはかなり期待してる。Xbox360でも良いんだけど、PS3のほうがアーキテクチャが面白かった。やはり、ゲーム機に性能は必須。世間一般のゲームの捉え方と自分の理想との乖離が酷くなってきているようだ。

携帯ゲーム機…PSPは自分のおもちゃになった。NDSは子供のおもちゃになった。

ドリンクの自販機…取り出し口から取り出しにくい。これじゃ駄目だ。失格。そう思っていたら、取り出し口から自動でせり出てくる自販機に出会った。これはすばらしい。合格。

Civilization Revolution

次世代ゲーム機および携帯ゲーム機用にCivilization Revolutionが作成されるらしい。PC用ゲームのCivilizationを元にしているが、コンシューマゲーム用にいろいろと変更を加えるようだ。PC用のCivilization IVは持っているが、腰を据えてプレイするだけの時間がなかなか取れないので、PSPで出ると嬉しい。正式なアナウンスはまだ無いが、対応機種は、PS3, PSP, Xbox360, NDSのようだ。


matplotlib: 多項式によるフィッティング

matplotlibでは、polyfitを使えば簡単に多項式によるフィッティングを行える。図ではオリジナルのデータを赤でプロットし、それに対し、1次(黒)、2次(緑)、3次(青)の多項式によるラインを描いている。

以下、ソースコード。

from pylab import * x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] y = [1, 1, 2, 3, 5, 6, 8, 9, 8, 6] coeffs1 = polyfit(x, y, 1) coeffs2 = polyfit(x, y, 2) coeffs3 = polyfit(x, y, 3) besty1 = polyval(coeffs1, x) besty2 = polyval(coeffs2, x) besty3 = polyval(coeffs3, x) plot(x, y, "ro") plot(x, besty1, "-k", linewidth=2) plot(x, besty2, "-g", linewidth=2) plot(x, besty3, "-b", linewidth=2) grid(True) legend(["Data", "Order=1", "Order=2", "Order=3"], "best", numpoints=3) show()

iGoogleのすゝめ

「Yahoo! Japan」が5月の月間ページビュー数で世界一になったらしい。自分はシンプルなGoogle派なのでごちゃごちゃしてるYahoo!はあまり見ることは無いのだけど、一般には受けるんかね。

単に検索するためだけならブラウザの検索ボックスがあるからページを開く必要は無いんだけど、iGoogleは便利なのでそれを良く使ってる。コンテンツをページの好きな場所に自由に貼り付ける感じもいい。Yahoo!にもMy Yahoo!があるけど、やっぱり広告が邪魔だし、ごちゃごちゃしているので自分の好みじゃないんだよね。

と云うわけで、iGoogleお勧めです。

matplotlibによる線種や色などの指定方法

matplotlibの線の色、線種、線幅の指定方法を記しておく。

線の色はplot上で、青なら"b"、緑なら"g"のように指定する。ここでは、白い線を見せるために背景を灰色にしている。



以下、図の作成に使ったソースコード。

from pylab import * axes(axisbg="#777777") # 背景を灰色に. x = arange(-20, 20, 0.3) plot(x+1, x, "b") # 青. plot(x+2, x, "g") # 緑. plot(x+3, x, "r") # 赤. plot(x+4, x, "c") # シアン. plot(x+5, x, "m") # マゼンタ. plot(x+6, x, "y") # 黄. plot(x+7, x, "k") # 黒. plot(x+8, x, "w") # 白. plot(x+9, x, color="#77ff77") # エメラルドグリーン. legend(["blue", "green", "red", "cyan", "magenta", "yellow", "black", "white", "#77ff77"], "lower right") xlim(2, 12) ylim(-5, 5) show()

次に、線種の指定方法を示す。



以下、ソースコード。

from pylab import * x = arange(-20, 20, 0.3) plot(x+1, x, "-") plot(x+2, x, "--") plot(x+3, x, "-.") plot(x+4, x, ":") plot(x+5, x, ".")…

バーナム効果

まずは、究極の血液型心理検査を実際に試してから続きを読んで欲しい。

誰にでも当てはまるような適当な話をされると、多くの人は自分にだけに当てはまるもののように錯覚し、自分をぴたりと言い当てているように感じる。占いや血液型性格診断で良く当たると思われるものはこのバーナム効果のためだと解釈できる。

まあ、人に迷惑をかけない限り占いや血液型診断を信じるのは構わないが、このバーナム効果のことは知っておいたほうが良いだろう。多くの詐欺に使える手口なので、これを知っていることで騙されることが回避できるかもしれない。まあ、騙される人はそれでもきっと騙されるのかもしれないけど。人を見たら泥棒と思え…とはまで言わないけど、冷静になって客観的に自分を見る目を養うことは重要だと思う。

matplotlibで3次元プロット

一昔前は2次元しか扱えなかったが、最近では3次元プロットも利用できるmatplotlib。Cookbook/Matplotlib/mplot3Dあたりを読めばなんとなく使い方はわかる。利用するには、以下のようにモジュールを読み込んでおく。

import pylab as p import matplotlib.axes3d as p3

ネットで調べてみたらscipy+matplotlibによる3元連立常微分方程式の軌道について書かれているサイトを発見。ふむふむ、参考になる。Gnuplot.pyは知らなかったな。でも最終更新が2003年と古い。numpyではなく古いNumericを使っているっぽい。やはり、matplotlibがいいなぁ。でも、plot3Dだとうまくいかないようなことが書かれている。そうなのか…と思って試してみた。例示されているコード中のscatter3Dをplot3Dに変更するだけ。見た目はまったく問題ないように見えるけど、何か問題があるのかな? バージョンの違い? どちらにしろ自分としてはこれで十分かな。

余談だが、現時点で最新のscipy-0.5.2とnumpy-1.0.3の組み合わせでは正常にコンパイルできない。

svc co http://svn.scipy.org/svn/numpy/trunk numpy svc co http://svn.scipy.org/svn/scipy/trunk scipy

上記のようにsvcで最新のバージョンを取ってくるか、numpy-1.0.2を利用しなければならない。

C言語で実行時間測定

C言語で実行時間を測定する方法。覚書。正確さから言えばgettimeofdayかな。手軽さからならclockあたりで。Unixであれば、timeコマンドがソースの変更もなく手間もかからず簡単。Windowsの場合は、timeitコマンドリソースキットに含まれている。

% time 実行ファイル

以下、Cのコード。

clock

#include <stdio.h> #include <time.h> int main() { clock_t t1, t2; t1 = clock(); /* 処理. */ t2 = clock(); printf("%f\n", (double)(t2 - t1) / CLOCKS_PER_SEC); return 0; }

gettimeofday

#include <stdio.h> #include <time.h> #include <sys/time.h> double gettimeofday_sec() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + tv.tv_usec * 1e-6; } int main() { double t1, t2; t1 = gettimeofday_sec(); /* 処理. */ t2 = gettimeofday_sec(); printf("%f\n", t2 - t1); return 0; }

getrusage

#include <stdio.h> #include <time.h> #include <sys/time.h> #include <sys/resource.h> double getrusage_sec() { struct rusage t; struct timeval tv; getrusage(RUSAGE_SELF, &t); tv = t.ru_uti…

カオス - 新しい科学をつくる

カオス―新しい科学をつくる」は15年も前に読んだ本なのだが、非常に面白かった。以前からマンデルブロ集合やローレンツアトラクタなどに興味を持っていたのだが、素人にもわかりやすく記述されており、世界にはなんて奇妙で不可思議な現象があるのだろうと素直に感じた。事実は小説より奇なりとはよく言ったものだ。こんなこと、事実を目の当たりにしなければ、到底信じられない。

例えば、x(next)=rx(1-x) という式がある。これは一見何の変哲もない式に見えるが、rのパラメータを変化させていき、xがどの値に落ち着くか観察してみるといい。とても奇妙な振る舞いが見られる。xの初期値を0.4としたとき、r=2.8ならばxの値は1つに落ち着くが、r=3.2だと2つ、r=3.5だと4つ、r=3.7だと無数になる。そうかと思えば、r=3.84だと3つに収束する。なんとも不思議だ。こういった予測できない振る舞いがカオスなのである。

上記のグラフはPython+matplotlibで描いたが、そのコードを書いておく。

from pylab import * def calc(r, x, n): values = [] f = lambda r, x: r * x * (1.0 - x) for i in xrange(n): x = f(r, x) values.append(x) return values if __name__ == "__main__": n = 1000 x = 0.4 for r in arange(2.8, 4.0, 0.001): plot([r for i in xrange(n-n//10)], calc(r, x, n)[n//10:], "b.", markersize=1) axis([2.8, 4.0, 0.0, 1.0]) text(2.9, 0.2, r"$x_\rm{next} = rx(1-x)$", fontsize=30) xlabel(r"$r$", fontsize=20) ylabel(r"$x$"…

複数のSPEを利用したCellプログラムの雛形

入力データ in を複数のSPEに割り当てて処理を行う。結果は出力データ out に格納される。

program_ppe.c

/* ppu-gcc -lspe2 -lpthread program_ppe.c -o program_ppe */ #include <stdio.h> #include <libspe2.h> #include <pthread.h> #define SPE_PROGRAM "program_spe" #define NUM_SPE 4 #define SIZE (10000) #define DMA_BY_TYPE (16) /* (16) for char, (4) for int */ typedef struct { unsigned long long ea_in; unsigned long long ea_out; unsigned int size; int pad[3]; } params_t; params_t params[NUM_SPE] __attribute__((aligned(16))); typedef struct { spe_context_ptr_t spe; params_t *params; } thread_arg_t; void *run_spe(void *thread_arg) { int ret; thread_arg_t *arg = (thread_arg_t *)thread_arg; unsigned int entry; spe_stop_info_t stop_info; entry = SPE_DEFAULT_ENTRY; spe_context_run(arg->spe, &entry, 0, arg->params, NULL, &stop_info); return NULL; } void process_spe(unsigned char *in, unsigned char *out) { int i; int size, spe_size[…

氷と炎の歌

久々に寝食を忘れて読める本に出会った。

氷と炎の歌シリーズは、ジョージ・R・R・マーティンが著者のローカス賞受賞作だ。全7部作("A Game of Thrones" (1996), "A Clash of Kings" (1998), "A Storm of Swords" (2000), "A Feast for Crows" (2005), "A Dance with Dragons", "The Winds of Winter", "A Dream of Spring")の予定で、現在、原書で第4部まで刊行されており、日本語訳は第3部(「七王国の玉座(しちおうこくのぎょくざ)」、「王狼たちの戦旗(おうろうたちのせんき)」、「剣嵐の大地(けんらんのだいち)」)まで出ている。

内容は簡単に言えば、戦記もので第1部のタイトルにも入っているように、ある事件がきっかけで複数に分裂した王国の群雄割拠物語である。それだけに登場人物も非常に多い。北部では人外の者である「異形人(The Others)」、現在では死に絶えたと言われる「ドラゴン」、ある種の魔法など、いくつかのファンタジーの要素もあるにはあるが、物語を味付けするためのスパイスとして入れられているに過ぎず、それが主となることはない。この物語は、現実世界となんら変わるところはない人間の生き様や愛憎を扱った、ヒューマンドラマなのだ。それだけに、嫉妬や憎悪など人間の負の面が赤裸々に描かれており、所謂「綺麗な」話を望む人々や子供たちは読まないほうが良いだろう。

この氷と炎の歌で特筆されることは、明確な主人公がいないことである。それぞれの章で登場人物の一人が指定され、その主観で物語が綴られている。その人物が感じたこと考えていることで構成されいるので、同じ物事の描写も章によって大きく異なる。また、選ばれる人物は基本的に立場の弱い人々である。弱いといっても社会的弱者という意味ではなく、その環境で困難な状況にある人物という意味であり、身分としての弱者ではない。このマーティンという作家は弱者を描くのがとてもうまいと思う。

この物語では主人公がいないと書いたが、裏を返せば安全な人物はいないとい…

C++による数値・文字列の変換

C++ではsstreamを使うことで、数値から文字列、文字列から数値への変換を行うことができる。

#include <iostream> #include <sstream> using namespace std; int main() { stringstream ss; double pi; // 文字列から数値に変換. ss << "3.14"; ss >> pi; cout << showpoint << pi << endl; ss.clear(); // 状態をクリア. ss.str(""); // 文字列をクリア. // 数値から文字列に変換. ss << 123 << "NUMBER"; cout << ss.str() << endl; return 0; } 3.14000 123NUMBER

C++マニピュレータ

#include <iostream> // 引数なしマニピュレータ #include <iomanip> // 引数付きマニピュレータ

endl
改行文字"\n"を負荷して出力をフラッシュ。

ends
NULL文字"\0"を負荷して出力をフラッシュ。

flush
出力をフラッシュ。

boolalpha | noboolalpha
boolの値を "true", "false" で出力する/しない(デフォルトでは 1, 0)。

showbase | noshowbase
16進数のとき"0x"、8進数のとき"0"を先頭に付加して出力する/しない。

showpos | noshowpos
正の数のとき + 符号を出力する/しない。

showpoint | noshowpoint
浮動小数点表示で末尾の 0 を出力する/しない。

skipws | noskipws
入力時、空白を読み飛ばす/読み飛ばさない。

uppercase | nouppercase
16進数表示(a~f)や概数表示(e)のときアルファベットを大文字で出力する/しない。

left
フィールド幅が設定されているとき、値を左寄せ。"123 "

right
フィールド幅が設定されているとき、値を右寄せ。" 123"

internal
フィールド幅が設定されているとき、符号を左寄せ、値を右寄せ。"+ 123"

dec
10進数で出力(デフォルト)。

hex
16進数で出力。

oct
8進数で出力。

fixed
概数表示をしない(デフォルト)。"123.456"

scientific
概数表示をする。"1.23456e+003"

setbase(int base)
基数を設定。16進数ならば、setbase(16)

setfill(char f)
詰め文字を設定。setfill('0')の場合、"000123"

setprecision(int p)
浮動小数点表示のときの表示桁数を設定(デフォルトは6)。

setw(int width)
フィールド幅を設定(…

matplotlibの簡単な説明

matplotlibはPythonで利用できるグラフ作成モジュールで、高機能で使いやすい。とても便利なので是非ともインストールしておこう。

以下のようにモジュールを読み込み、matplotlibを利用できるようにする。

from pylab import *

直線を描く。

plot([1, 2, 3]) show()



続けてグラフを描くとき、以前のグラフを残したままだと同じ図にプロットされてしまう。以前の図の内容を消去したい場合は、

clf()

とすればよい。

グラフの範囲をaxisで指定し、x, yに対応したリストでポイントに赤丸を打ち、赤い線で結ぶ("ro-")。

plot([1, 2, 3, 4, 5], [5, 10, 20, 50, 100], "ro-") axis([0, 6, 0, 100]) show()

axisの代わりに、

xlim(0, 6) ylim(0, 100)

でも可。



二次曲線を緑の線("g")で描く。タイトルもつける。

x = arange(0.0, 10.0, 0.01) title(r"Quadratic Curve", fontsize=20) plot(x, x**2, "g") show()



正弦曲線を描く。タイトルとラベルをつける。タイトルやラベルにはTeXの形式で数式を書くこともできる。

t = arange(0.0, 2.0, 0.01) s = sin(pi * t) plot(t, s) title(r"Sine Curve", fontsize=20) xlabel(r"$\theta$", fontsize=15) ylabel(r"$\rm{sin}(\theta)$", fontsize=15) show()



正弦曲線のグラフ内に二次曲線のグラフを埋め込む。さらに、EPS形式でグラフをファイルに書き出す。

t = arange(0.0, 2.0, 0.01) s = sin(pi * t) plot(t, s) title(r"Sine Curve", fontsize=20) xlabel(r"$\theta$…

Pythonで宛先ごとにスパムメール数を調べる

1日200通ほどのスパムメールが来る。ほとんどのスパムメールはフィルターを通して処理されるので実害は少ないが、気持ちの良いものではない。ふと、複数のメールアカウントを使っていてどのアカウントが一番被害があるのかちょっと気になったので、メールアドレスごとにスパムメールを数え上げ、数の多い順に表示するPythonプログラムを書いてみた。Pythonらしからぬばっちぃコードなのであまりコーディングの参考にしないこと。

import re def read_spam(fname, pattern): data = [] for d in [[s for s in l.replace(":", " ").replace("<", " ").replace(">", " ").strip().rstrip().split()[1:] if not re.search("\"", s) if re.search(".+@.+", s)] for l in file(fname) if re.search(pattern, l)]: data.extend(d) data_counts = {} for d in set(data): data_counts[d] = data.count(d) for d in sorted(data_counts, cmp=lambda x, y: cmp(data_counts[x], data_counts[y]), reverse=True): print "%5d %s" % (data_counts[d], d)

普段はThunderbirdを利用しており、デフォルトではスパムメールはJunkファイルに落とされる。その場合、以下のように実行すればOK。

read_spam("Junk", "^To: ")

以下のように表示される。

4652 aaa@mail.address 3745 bbb@mail.address 2176 ccc@mail.ad…

Pythonを利用してプロキシ経由でウェブを読み込む方法

プロキシのリストはCyberSyndromeあたりでどうぞ。

import urllib2 def get_web(url, proxy): proxy_handler = urllib2.ProxyHandler({"http": proxy}) opener = urllib2.build_opener(proxy_handler) web = opener.open(url) print web.read() if __name__ == "__main__": get_web("http://目的のURL/", "http://プロキシのURL/")

Googleのソフトウェア・エンジニアって?

Slashdot.jpGoogleのソフトウェア・エンジニアはこんなことをしていますという記事がしばらく前に掲載された。そこから、へ~たのめも:Google のソフトウェア・エンジニアリングがリンクされているのだが、その記事を読むと20%ルール適用など、Googleの仕事のやり方が垣間見えて面白い。この記事はGoogle Developer Day Tokyoで行われた鵜飼文敏さんのプレゼンの要約らしい。



ところで、GoogleではC++, Java, Pythonが3大言語らしいが、自分ではC++, Pythonを良く使っている。特にPythonは何をする上でも必要になってきてる。numpy, scipy, matplotlibは必須。便利すぎ。

SPE用SIMD演算を利用した大文字変換プログラムにバグ

フィックスターズ3.7 演習問題 (3-2) 大文字変換プログラム解答で示されたSPE用ソースコードにバグがあることを見つけた。

小文字を大文字に変換する単純なプログラムで、サンプルの文字列、"A Quick Brown Fox Jumps Over The Lazy Dog.\0"だと問題ないように見えるが、代わりに"Linux\0"を処理すると、"LINUW"と表示されてしまう。

SPE用ソースコード内の小文字を大文字に変換する部分を以下に示すが、赤字で示すコードが誤りだ。

vpata = spu_cmpgt(va, vin[i]); vpatz = spu_cmpgt(vin[i], vz); vpat = spu_or(vpata, vpatz); vout_upper = (vector unsigned char) spu_sub((vector unsigned short) vin[i], (vector unsigned short) voffset); vout[i] = spu_sel(vout_upper, vin[i], vpat);

無理やりvector unsigned charからvector unsigned shortにキャストしてvoffset(0x20)の引き算を行っているが、これだと、"Linux\0"は"Li", "nu", "x\0"となり、それぞれから"0x20, 0x20"を引くことになる。上位の桁と下位の桁で繰り下げがなければ問題がないが、繰り下げがあると上位の桁に影響が出てきてしまうのである。"Li", "nu"は繰り下げは起きないが、"x\0"の場合、"0x78, 0x00"からそれぞれ0x20を引くわけで、"0x57, 0xe0"となる。0xe0は小文字の文字コード範囲から外れているので無視されるが、0x57は"W"として認識される。よって、出力が"LINUW"となってしまうのだ。

以下のように直せばよ…

PS3からWindows Media Playerを利用したDLNA接続ができないときの対処方法

PS3 WikiDLNAクライアントにPS3からWindows Media Playerを利用したDLNA接続の方法がある。ただし、Windows Media Playerのデジタル著作権(DRM)ファイルが壊れていると、PS3デバイスが認識されず、DLNAを利用できない。

これは以下の方法で修復することができる。

スタート→コントロールパネル→パフォーマンスとメンテナンス→管理ツール→サービス→Windows Media Player Network Sharing Serviceを停止する。

コマンドプロンプトを立ち上げ、

cd "C:\Documents and Settings\All Users\DRM"

と入力する。確認のために、

dir /a /b

と打ち込むと、以下のようなファイルが表示されると思う。

Cache drmstore.hds migration.log v3ks.bla v3ks.sec

続けて以下のコマンドを入力して、そのフォルダにあるファイルを削除。

del *.* /f /a

Windows Media Player Network Sharing Serviceを開始する。

これで修復することができる。ただし、この方法は自己責任で。

gccからppu-gccに変更したらAltiVecを利用したSIMD演算でエラー

フィックススターズCellプログラミングチュートリアルは初めてPS3でCellのプログラムを作るのには丁度良い内容と分量になっている。それほど難しいことは無く、基本を習得できるのだ。しかし、この記事を書いている時点では、最終更新日が2007年2月2日と、内容が若干古い。

PPE用のプログラムもすべてgccでコンパイルするようになっている。PPE用のプログラムはppu-gccを利用したほうがCell用に最適化してくれるので実行効率が良い。なので、gccでコンパイルされているところはすべてppu-gccにすればよいのだが、実はこのチュートリアルではそれではエラーが出てしまうのである。

たとえば、SIMDを使った条件分岐の削除にあるプログラムだが、これをppu-gccでコンパイルすると、

error: incompatible types in assignment

と、エラーが出る。これは

vpat = vec_cmpgt(va[i], vb[i]);

に示すコードの返り値の型が一致していないことが原因である。なので、

vector unsigned int vpat;

の部分を、

vector bool int vpat;

のように変更する必要がある。

別のソースコードも似たようなエラーが起こるが、ほとんどが型の不一致が原因なので、宣言の型を変更したり、目的の型にキャストすればエラーは解消される。

Bloggerに「続きを読む」機能を導入

このBlogger、なかなか使い勝手が良いのだけど、一つ大きな不満がある。「続きを読む」機能がないのだ。英語で言えば"Read more"だ。そこでネット上を検索したところ、クリボウの Blogger Tipsなるページを見つけた。ふむふむ、これならできそうかな…? しかし、すべての記事に「続きを読む」リンクが表示されてしまう。これをどうにかできないかと思ったら、同じサイトでそれを消すやり方が出ていた…が、今度は投稿記事中にその記事自体のURLを埋め込まないといけないらしい。これでは手軽に投稿できる機能に価値を見出していた自分としては意味がなくなってしまう。う~ん、自分でスクリプト書けば何とかなるかなぁ…とも思ったが、広い世の中、同じことを考えている人は絶対いるはずだともう少し探し回ってみたところ、Blogger Beta Tipsなるサイトを見つけた。どうやら、Beautiful BetaというサイトでJavaScriptによって「続きを読む」機能を実装したらしい。早速、使わせてもらったが、素晴らしい!

Blogger Beta Tipsのページとかなり被ってしまうが、Beautiful Betaの日本語訳と日本語化した導入方法を以下に書いておく。

1. まずは「テンプレート」タブから「HTMLの編集」タブを開き、「テンプレートをすべてダウンロード」で現在のテンプレートを保存する。そのテンプレートを編集するのだが、編集前にバックアップファイルは残しておいたほうが良い。

2. 以下のコードをメモ帳などのテキストエディタを使って、</head>タグの直前に書き込む。

<script type='text/javascript' src='http://www.anniyalogam.com/widgets/hackosphere.js' />

3. テンプレートコード中で下記の赤字の部分を書き加える。

<b:includable id='post' var='post'> <div class='post'> <a expr:name='data:post.id'/> <b:if cond…

リンク先のウェブサイトをサムネイル表示 - Snap Shots

まずは下記のリンク上にマウスポインタを置いて欲しい。

Snap Shots

リンク先のウェブサイトのサムネイルが表示されたと思う。この機能、適当なウェブを閲覧していたときに見つけたのだけど、一目で気に入ってしまった。しかも、自分のサイトに導入するのもとても簡単。<head>~</head>内の最後に指定されたHTMLテキストをカット&ペーストするだけ。

リリースとともにすぐに弄り回したJavaのときやまだほとんどの人に存在すら知られていなかったGoogleベータ版のサービスを見たときも絶対流行ると思ったけど(そしてどちらも爆発的に普及した)、これも流行る予感。すでに広まりつつあるしね。

PcCtlCom moduleエラーでウイルスバスター2007が起動しない

タイトルの通りで、少し前からPcCtlCom moduleエラーのダイアログが出てトレンドマイクロのウイルスバスター2007が起動しなくなっていた。ウイルスやスパイウェアなどが悪さしているのかと思い、いろいろ調べたが特にそれらしい形跡は見当たらなかったので、普通にコントロールパネルからウイルスバスターをアンインストールして、再度インストールをしてもやはりエラーが出る。

そこで、ウイルスバスターのインストールディレクトリにできるPCCTool.exeというプログラムを起動して、ファイアーウォールを削除、次いでプログラムの削除を実行し、そのあと再インストールしたら正常に起動するようになった。どうやら、何かの拍子でレジストリが壊れたか競合するようになってしまったらしい。

ウイルスバスターで問題が出たらまずはPCCTool.exeで削除するのが良いようだ。あと、インストールするプログラムは最新のものをダウンロードしておくのが吉。

PLAYSTATION 3を購入

しばらく前にPS3を買った。最近は据え置き型のゲーム機はあまり弄らなくなってきたが、PS3とWiiのどちらかは買ってみようかなと、前々から考えていた。以前はWiiの方が面白いかもと思っていたけど、よくよく自分がやりたいもの・したいことを考えた場合、PS3の方が良いことに気がついた。

まず、うちにはまともなテレビがない。そこで、半分壊れかけた10年近く前のCRTモニタをFullHDのディスプレイに交換して、それに合わせてBlu-ray Disc(BD)/DVD再生機として使ってみることに。
次に、PS3, Wiiのどちらもゲームソフトはまだまだ少ないが、それでも今後のことを考えると自分としてはPS3に分があるように思う。God of War 3, Lair, GT5, Killzone, Assassin's Creedなど。やはり本体のポテンシャルが高いことは重要だ。
で、最後にこれが一番の理由だったのだけど、アーキテクチャが面白い。LinuxでCellを使ったプログラミングができるのが良い。SPEやSIMDを利用したプログラミングはパズルを解いているようで楽しい。ま、これが仕事だとそうもいってられないかもしれないけど、趣味でやるには丁度良いです。

購入後は、Fedora Core 6入れてプログラミングしている時間が一番長いかも。面白いよ。あとは、一つぐらいはゲームソフトも買っておくかということで、MOTORSTORMを買ってみた。こちらも期待していた以上に面白い。まあ、レースゲームは結構好きだからかも。WipeOutとかGTとか。でも毛色の変わったレースゲームであることは確か。車やバイクで格闘する感じ? まだLevel1をクリアしたところだけど今のところ非常に簡単。

あ、そうだ。PS3を買ったとき007カジノロワイヤルのBD版が無料で付いてきたんだけど、再生させてびっくり。こんなにも違うものなのか~。凄く綺麗。24は全シリーズDVDで持っているけど、BDで出して欲しくなった。ずいぶん前にリストに上がっていたんだけどな。出ないかな。

W-ZERO3でssh2によるポートフォワーディング

W-ZERO3でポートフォワーディングを行うことにした。ただし条件があり、

・ssh2を利用する。
・ワンタイムパスワードのため、パスワード入力は利用時に入力。

これらを満たさなくてはならない。

なので、ssh2未対応のPortForwarderは却下。また、zaTunnelはあらかじめパスワードを入れなくてはならない。その都度パスワードを設定してもダメだった。Webを見回してみると、SSH client for Pocket PCを利用すれば良いらしいとのことだったので、Pocket ConsolePocket CMDWindows Mobile Development Power Toysに入っている、cmd.exe, shell.exeを手に入れて、コマンドライン環境を構築。レジストリエディタを持ってきてゴニョゴニョいじって完了。で実際使ってみたが、確かにsshでポートフォワーディングはできているようだが、なぜかターミナルでエラーが出る。どうやらPocketPuTTYのバグらしい。PocketPuTTY単独でもできなかったし、ほかのターミナルソフトでもうまく繋がらなかった。

ほかにもいろいろと試してみたが、どれもうまくいかず。結局、自宅に2台のLinuxマシンが常時起動しているのでそれを介してポートフォワーディングをすることに。なかなか良いものがない。自分で作るしかないかなぁ。そういや、CISCOのVPN互換のVPNクライアントも良いものが見つからなかったな。