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

投稿

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

LittleBigPlanet

LittleBigPlanet は一言で説明するには難しい新ジャンルのコミュニティベースのクリエイティブアクションアドベンチャーゲームだ。最初はそれほど興味は無かったが、世界中の人たちと自分の分身である人形を操って協力しながらプレイする様は見ているだけで楽しくなる。 結構前から知られているタイトルだがまだ発売日も決まっていないので、のんびり待つことにしよう。PS3のタイトルが本格的に揃いだすのは来年になるだろうな。 以下、LittleBigPlanetのトレイラー。

一家に1枚周期表

一家に1枚周期表第3版について (文部科学省) 元素それぞれにその用途や写真などを載せてあり、見てるだけで楽しい周期表。教科書に載っているような味気ないものよりもこちらのほうが断然良い。

diNovo Edgeキーボード

diNovo Edge™ キーボード(DN-1000)が日本でも8月10日に出るらしい。充電式Bluetoothワイアレスキーボードだ。ガラスのような質感で外観もスタイリッシュでよい感じ。パナソニックのLet's noteでお馴染みのぐるぐるスクロールも搭載している。価格は24,800円と、現在、自宅でも職場でもメインで使っている HHKB Professional とほぼ同じ値段。 リビングにTV兼用のPCを購入したのでそこで使いたいが、子供たちも利用するのでちょっと考えてしまうなぁ。すぐに壊されてしまいそうだ…。

C99におけるrestrictポインタの存在意義

ベクトル型スーパーコンピュータでは必要不可欠。ポインタをrestrictで修飾することで、そのポインタは別名を持たない、つまり、どの変数からも参照されないことが保証される。なので、ベクトル・プロセッサやSIMD演算での最適化を効率よく行うことができる。因みに、C99以前でも拡張仕様でrestrictは使われていた。 尚、restrictについては、 プログラミング言語 C の新機能 - restrictポインタ での説明が詳しい。

色が濃い方のタイルはどちら?

上の図のAのタイルとBのタイルでどちらの色の方が濃い? 答えは、どちらも同じ濃さ。疑うのであれば、画像ファイルの問題のタイルだけ切り出して比べてみると良い。人間の目は信用ならないという話でした。 MITの Edward H. Adelson教授 の Checkershadow Illusion から。

echochrome

エッシャーの騙し絵の中を歩く人形を誘導するゲーム。まずは トレイラー を見て欲しい。これは面白そう。見ているだけでも楽しいね。OLE Coordinate Systemってのを使っているらしいんだけど、その 解説サイト からPC用のお試し版がダウンロードできる。ほかに、ウェブサイト上でJavaを利用したデモプレイもできる。PS3, PSP用。

ソースコードにコメント書かなくなったかも…

以前に比べてプログラムのソースコードにコメント書くことが少なくなった。まあ、大抵は自分だけが見るものだから他人に迷惑はかからないと思うのだけど、改めてそのことについて考えてみた。 確かに以前はそれなりにコメントを入れていたけど、それはそのコードを数ヶ月後に見たとき、何をしているのかわからなくなっていたからだ。しかし、今はコメントが書かれていなくても以前作ったコードを見て何をしているのかわかる。それは、クラス名、関数名、変数名を付けるときかなり慎重に決めるようになったのが大きいと思う。その関数や変数を見れば、大体何をしているかわかるのだ。関数や変数を見れば何をしているかわかるのに、わざわざコメントを付けるのもなぁ、と考えて付けなくなってきたのだと思う。 後は、クラスを使ったオブジェクト指向なプログラミングのおかげだろう。それぞれのクラスが独立しているおかげで、互いの依存関係をほとんど無視できるから、そのクラスや関数の動作も理解しやすいのだ。デザインパターンに沿っていれば、全体の動作はすぐに頭に浮かぶ。 そのようなわけで、コメントが減った。まあ、共同作業ではそうも言っていられないのだろうけど。因みに自分がよく使うプログラミング言語はC++とPythonだ。

なぜこの方程式は解けないか? - 天才数学者が見出した「シンメトリー」の秘密

なぜこの方程式は解けないか?―天才数学者が見出した「シンメトリー」の秘密 を読んだ。群論の基礎を築いたエヴァリスト・ガロアの波乱万丈の人生を中心に、群論にかかわる様々な出来事やそのすばらしい応用をわかりやすい例をとって語っている。軽く読める数学史と言ったところ。軽く読めるからといって内容が軽薄というわけではなく、できるだけ多くの専門外の人々にわかるように、数学、物理学、生物学、果ては音楽まで関わってくる群論の凄さと面白さを伝えている。 正直に言うと、自分は昔からあまり群論は好きではなかった。しかし、これを読んだあとは群論に強い興味を抱いた。もう少し群論について学んでみようかなぁ。やはり、好きこそ物の上手なれ、だ。

WS011SHを使う際にまずやっておくこと

Advanced/W-ZERO3[es] WS011SHが7月19日に発売された。事前に予約しておいたこともあり、当日に問題なく購入できた。今まで利用していた無印W-ZERO3に比べ、画面解像度が640×480から800×480になり、幅50mm×高さ135mm×厚さ17.9mmと大幅に小さくなって軽くなり、CPUの性能が上がり、USBホスト機能が搭載され、メモリが倍に増えた。 性能はこのように大幅に上昇したわけだが、使う前にいくつか気をつけるべき点がある。まず、このWS011SHにはソフトキーが無い。これは非常に不便だ。そこで、スタートメニューから[設定]-[ボタン]-[ソフトキー]を選んで、ソフトキーを使えるようにする。この設定はちょっとわかりにくかったので、もう少し解りやすくしてもいいのではないかな。個人的にはデフォルトでもいいくらいだ。電話掛けるときとかメール書くときとかソフトキーを使いまくる自分としては、もしこの設定が無かったらWS011SHの個人的評価は限りなく下がっていたと思う。 次に、電波状態ランプをOFFにする。無印W-ZERO3でもそうだったのだが、これで電池の持ちがかなり変わるので必ずやっておくこと。スタートメニューから[設定]-[パワーマネージメント]で設定できる。 そして、microSDを用意する。いろいろとデータは溜まるもので、容量は多いに越したことは無い。自分はWS011SHを受け取りに行った際に、近場で購入した。2GBで約3,200円だった。安くなったものだ。そうそう、購入と言えば、ストラップも必要だ。今回はタッチペンが内蔵型ではなく、ストラップにつけて使うようになっているので、もし、適当なストラップを持っていなければ用意しておく必要がある。 後は、音やマナーモードの設定を変更したり、文字の大きさやToday画面を変更したり、メールやActiveSyncの設定を行ってまずは完了。使い勝手はなかなか良いかな。もう少し慣れればもっと使いやすくなると思う。Xcrawlキーも初めのうちは動作がぎこちなく使い勝手が悪いんじゃないかと思ったが、使っているうちにこなれてきてうまく動作するようになった。 後は、無印のときでもそうだったように、便利なアプリケーションをインストールすればもっと良くなるだろうな。そういや、普通の操作では

新型PSP

軽量・薄型に進化し、ビデオ出力機能を標準搭載した 新型 PSP®「プレイステーション・ポータブル」(PSP-2000) カラーバリエーションとともに9月発売決定 新型のPSPが9月に発売らしい。これは欲しいかも。今までのPSPからの変更点は、重さが2/3、厚さが4/5、UMD読み込み短縮、外部ディスプレイへの出力などで、利用してるFull HDディスプレイにD端子で接続できるのは嬉しい。

matplotlib: 3次元プロットの雛形

matplotlibで3次元プロットする際の雛形を示す。たったこれだけ。 from pylab import * import matplotlib.axes3d as p3 x = [2.36, 1.33, 1.10, 1.33, 2.36] y = [10.0, 8.00, 6.00, 4.00, 2.00] z = [1.10, 1.20, 1.44, 2.07, 4.30] ax = p3.Axes3D(figure()) ax.plot3D(x, y, z, color=(0.0, 0.0, 1,0)) ax.scatter3D(x, y, z, color=(1.0, 0.0, 0.0), marker="o", s=10) show() 以下はもう少しコメントと装飾を加えたソースコード。 from pylab import * import matplotlib.axes3d as p3 # データ. x = [2.36, 1.33, 1.10, 1.33, 2.36] y = [10.0, 8.00, 6.00, 4.00, 2.00] z = [1.10, 1.20, 1.44, 2.07, 4.30] ax = p3.Axes3D(figure()) # ラベル. ax.set_xlabel("X") ax.set_ylabel("Y") ax.set_zlabel("Z") # 青線を引く. ax.plot3D(x, y, z, color=(0.0, 0.0, 1,0)) # サイズ10の赤丸で表示. ax.scatter3D(x, y, z, color=(1.0, 0.0, 0.0), marker="o", s=10) # 表示範囲. ax.set_xlim(1.0, 3.0) ax.set_ylim(1.0, 12.0) ax.set_zlim(1.0, 5.0) # DPI=100でPNGファイル(plot3d.png)を作成. savefig("plot3d.png", dpi=100) # 画面に表示. show()

37%ルール

たくさんある中でより良いものを選びたい場合、最初の 37% まで確認した後、それまでよりも良いものに出会った時点でそれ採用するのが確率的にもっとも成功率が高い。群論から。因みに 37% は 1/ e に近い数だ。

銀行で暗証番号を変更しようとしたときのこと

まだ、ATMでキャッシュカードの暗証番号が変更できなかったころのこと。自分が利用していたキャッシュカードの暗証番号が推測されやすいものだと思ったので、銀行に変更を申し出た。ところが変更するのに手数料として1,500円かかるとのこと。よっぽど解約して新規に作成してやろうかと思ったが(それなら無料)、矛盾したシステムだと思いながらも、その場は結局変更せずに済ました。 それから半年もせずにATMで暗証番号を変更できるようになった。すぐに変更を済ませたことは言うまでもない。 銀行の自分本位な、もしくは何も考えていない体質が良くわかる出来事だった。

セカンドライフとPS3のHome

最初に言っておくが、セカンドライフ(Second Life)とPS3のHomeは別物だ。どちらも3D空間をアバター(プレイヤーの操作するキャラクター)が自由に動き回れる。しかし、ユーザーコンテンツを主体とするセカンドライフに対して、PS3のコミュニティの場を主眼としてるHomeでは根本的な存在意義が違うのだ。 セカンドライフではユーザーが自由に「モノ」を作ることができる。たとえば、野球のボールでも、公園の滑り台でも、天を突くような高層ビルでも作ることができる。それは形だけではなく動作などもプログラムを組むことにより実現できる。また、そうしたものをほかのユーザーに売ることもできる。さらに売った金は現実の金に換金できるのだ。つまり、セカンドライフはそれ自体で完結した世界を持つコンテンツなのだ。 一方、PS3のHomeではどうか。発表された資料によれば、まず、ユーザーがコンテンツを自由に作成できない。また、Homeでユーザーが金を稼ぐこともできない。そして、コミュニティの場を提供するというコンセプトからHome自体が独立したコンテンツとはならないだろう。 では、セカンドライフはすべてにおいてHomeより秀でているのだろうか。それは違うと思う。 まず、第一にグラフィックはHomeの方が格段に良い。実行する環境の性能の違いというわけではなく、ソフトウェア側のデザインの問題である。最初に選べるアバターがあんなに酷いはわざとではないかと勘ぐってしまうほどだ。ユーザーが作成したものはかなり良いものもあるが、それらは購入しなければならない。腕に自信のあるユーザーは自分で作成することもできる。それでも、大抵の人は最初に選べるものよりも良いものはなかなか作れないだろう。 まあ、アバターはどうにかできるとしても、セカンドライフ内の環境を変更することは難しい。ここでいう環境とはプログラム動作のことだ。ネットワーク回りの出来の良し悪しに関わるのか、周りの建物や木などの「モノ」が一つ一つ描画されるのが見て取れるほど表示が遅い。さらに、たくさんの人が集まる場所に行くと止まったかと思うほど動きが遅くなる。これは、プレイアビリティを著しく低下させている。自分は1999年に発売されたEverQuest(EverQuest2ではない)をかれこれ8年もプレイしているが、この古いネットゲー

SciPyの使い方: 行列演算

PythonのモジュールであるSciPyを使った行列演算を示す。scipy.linalgではBLASやLAPACKを利用しているので、高速な演算が可能になっている。 >>> from scipy import * >>> a = [[1, 3, 5], [2, 5, 1], [2, 3, 8]] # リスト >>> A = mat(a) # リスト→行列 >>> A.tolist() # 行列→リスト [[1, 3, 5], [2, 5, 1], [2, 3, 8]] >>> A # 行列 matrix([[1, 3, 5], [2, 5, 1], [2, 3, 8]]) >>> A.I # 逆行列 matrix([[-1.48, 0.36, 0.88], [ 0.56, 0.08, -0.36], [ 0.16, -0.12, 0.04]]) >>> A.H # エルミート行列 matrix([[1, 2, 2], [3, 5, 3], [5, 1, 8]]) >>> A.T # 転置行列 matrix([[1, 2, 2], [3, 5, 3], [5, 1, 8]]) >>> A.A # 行列→配列 array([[1, 3, 5], [2, 5, 1], [2, 3, 8]]) >>> A.A1 # 行列→1次元配列 array([1, 3, 5, 2, 5, 1, 2, 3, 8]) >>> A[1] # 2番目の行を取り出す matrix([[2, 5, 1]]) >>> A.T[1] # 2番目の列を取り出す matrix([[3, 5, 3]]) >>>

虚数のテトレーション

虚数 i の「 i の i 乗」乗はテトレーション(tetration)として以下のように表すことができる。 3 i = i i i で次のような計算を行ってみた。 ∞ i = 0.438282936727…+0.360592471871… i 実数部と虚数部は収束してそれぞれ0.43828…と0.36059…となる。 これって何か意味がある数なのか?

オイラーの等式を実際に計算してみる

e i π + 1 = 0 をPythonで実際に計算してみる。証明などは Wikipedia あたりでどうぞ。 >>> from math import * >>> exp(1)**(1j*pi)+1 1.2246063538223773e-016j という訳で、1.22×10 -16 i という極小の虚数が出てきたが、これは計算誤差ということでオイラーの等式は正しく計算されることがわかった。 ついでに Googleでも計算 してみた。

iGoogleのテーマを「スイートドリーム」にして午前3時14分になると…

iGoogle はテーマを選ぶことでサイトの見た目を変えることができる。自分は時刻によって背景や明るさの変わる「スイートドリーム」が気に入っている。 ところで先ほど気がついたのだが、午前3時14分になると、夜空に円周率πの文字が浮かび上がることを発見した。こういうちょっとした洒落は嬉しくなるね。

C++の規格書

CD2とはSecond Committee Draft(修正された2度目の委員会での草案)のこと。 ftp://ftp.research.att.com/dist/c++std/WP/CD2/ ここからPDFファイルを取ってこられる。無料だけど、草案なので実際の規格と違うことが多々あり。 FDISとはFinal Draft International Standard(国際標準の最終草案)のこと。ISO/IEC FDIS 14882:1998 http://www.kuzbass.ru/docs/isocpp/ ここでHTML文書を読める。無料で、しかも最終草案だけあってISとあまり違いはない。 ISとはInternational Standard(国際標準)のこと。ISO/IEC 14882:2003 (古いバージョン ISO/IEC 14882:1998) http://www.plumhall.com/ この辺で買う。もっとも信頼できるけど有料(PDFファイルで$30)。 JTC1/SC22/WG21 - The C++ Standards Committee http://www.open-std.org/jtc1/sc22/wg21/ http://www.open-std.org/jtc1/sc22/wg21/docs/projects ISで見つかった間違いなどの修正リストがある。ISと合わせてここを読めば完璧。 因みに、JIS規格のC++はこちら。 JIS X 3014:2003 基本的にISの翻訳かな。17,325円はちょっと高いなぁ。 C++ 11のIS - INCITS/ISO/IEC 14882-2012 INCITS/ISO/IEC 14882-2012 ($30) C++ 11(0x)の草案 - N3337 - 2012-01-16 Working Draft, Standard for Programming Language C++ (PDF) JTC1/SC22/WG21 - Papers 2012 C++の最新の標準規格。2011年に制定され、C++0xからC++11となった。規格を読むだけであれば草案で十分だと思われる。制定された年は2011年だが、0xは16進数なので先頭

マスコミと中立性

「一部報道に関するマイクロソフトの見解」 から。 「コンピュータソフトの政府調達において、原則として、マイクロソフト製品(Microsoft(R) Office Word、Microsoft(R) Office Excel(R))を新規購入しない」という報道が一部の報道機関であったそうだ。その報道機関というのは NHKらしい のだが。 この手の話はよくある事だ。マスメディアは偏った報道をする。一部の人間の考えの反映でしかない。 以前asahi.comで、読売ジャイアンツの元オーナーを大変な剣幕で扱き下ろす記事をトップが掲載された。こんなこと書いて平気なのかと思ったが、ほんの数分で記事は消されていた。クラックされたのでなければ、似たようなことが数度あったことからも、元オーナーに大して不満を持っている編集者が内部にいたのだろう。程度の差こそあれ、マスメディアではいつだって同じことが繰り返されている。 マスコミが中立になることは無理だとしても、偏りすぎる報道は避けるべき。もしくは始めから「我社では○○な立場を取っています」、「右派・左派」、「アンチ○○」等々、宣言するとかね。

Xbox360の故障率は33%らしい

前々から故障率が高いといわれていたXbox360。 GIGAZINE で知ったのだけど、ここに来て衝撃の記事が。 DailyTech - Retailers Estimate Xbox 360 Failure Rate High as 33 Percent (販売小売店ではXbox360は33%という高い故障率であると見積もっている) 販売小売店で調べた結果、Xbox 360の故障率は30~33%にも達しているらしい。PS3を含むほかのゲーム機は1%にも満たないとのことなのに。ちゃんとした商品ならそれが普通だと思うけどね。そう言えば、しばらく前に ある夫婦が買った7台ものXbox360が1年半で全部壊れた とかいう話を聞いたな。 人には必ず間違いはある、故障はあって当たり前…という精神を持つアメリカ製品でもこれは酷いよなぁ。

連続した静止画を動画にする方法

mplayer に付属しているmencoderを使う。 MPlayer - Download からダウンロードできる。Windowsでも、Unixでも利用できる。Windowsでは コマンドプロンプト 上で使う。詳しくは マニュアル を参照のこと。 連続した複数のPNG画像をフレームレート30でAVI動画ファイル(output.avi)に変換する。 mencoder "mf://*.png" -mf fps=30 -o output.avi -ovc lavc -lavcopts vcodec=msmpeg4v2 ついでに、 ImageMagick を利用した画像フォーマットの変換についても載せておく。 mencoderはBMP画像を取り扱えないので、BMP画像を動画にしたい場合は予め変換しておく必要がある。ImageMagickについては、 Googleあたりで検索 すれば詳しいインストールや扱い方が見つかると思う。 PostScript画像(input.ps)をGIF画像(output.gif)に変換する。 convert input.ps output.gif 複数あるBMP画像を同じ名前でPNG画像にする。拡張子だけが変わる。 mogrify -format png *.bmp

The Python Challengeのヒント

The Python Challenge のヒント集。とは言っても、自分が使ったプログラムで利用したモジュールを列挙しただけだけど。模範解答のプログラムではないので、不要なモジュールもあるかも。あと、こちらが解いたlevel 22までの問題のみ。 一部、標準以外のモジュールも含まれる。特に、 PIL(Image) は必須っぽい。ほかは多分いらないと思う。 自力で解きたい人は、これ以降は読まないように。 level 0 : なし level 1 : string level 2 : string level 3 : re level 4 : urllib, re level 5 : pickle, urllib level 6 : os, re, zipfile level 7 : Image, urllib, StringIO level 8 : bz2 level 9 : Image, ImageDraw level 10: re level 11: Image, ImageDraw, urllib, StringIO level 12: os, Image, ImageFile level 13: xmlrpclib level 14: Image, ImageDraw, urllib, StringIO level 15: calendar level 16: Image, urllib, StringIO level 17: re, urllib, ClientCookie, bz2 level 18: urllib, difflib, Image level 19: email, urllib, wave level 20: urllib2, re, sys level 21: zlib, bz2, sys level 22: sys, os, Image, urllib, StringIO

FizzBuzz問題

「どうしてプログラマに・・・プログラムが書けないのか?」 に、 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 という問題が載っていて、一時期話題になった。この記事によると自称上級プログラマが10-15分ほどもかかったそうだ。かなりひどいと思う。まあ、自称だから仕方がないか。 かなり前の話になるが、知り合いがある有名大学の情報系にいた。そこでは、学部の4年になってもまともなプログラムどころかコンピュータさえろくに扱えない学生ばかりだったそうだ。 因みに、こちらはPythonで書いて1分ぐらいだった。大抵のプログラマならば、やり方は一瞬で理解できるだろうから、あとはコーディング速度の問題になる気がする。なので、タイプ量が少ないコンピュータ言語のほうが有利かもしれない。ただ、プログラムの技巧に凝ろうとすると時間がかかるかも。

The Python Challenge

The Python Challenge をしばらく前にやってみた。これは、Pythonを利用してウェブの画面をヒントに謎を解く。最初は何のことかぜんぜんわからなかったりもするが、いろいろと推理していくうちにこうすれば良いかもとピンとくる。下手なアドベンチャーゲームよりもよほど面白い。かなりやり応えのある難問が揃っているのでぜひ挑戦してみてはどうだろうか。問題をこなしていくうちにPythonの理解力も格段に上がると思う。 現在のところ全部でlevel 33までの問題があり、こちらはlevel 23の問題まで行った。さすがにこの辺になってくると解くのに時間がかかる。 最初のlevel 0の問題については以下にヒントを書いておく。どうしてもわからない場合にだけ見て欲しい。 2 38 と画面に出てるが、これを計算するだけである。あとはURLで示されている"0.html"を" 計算の答え .html"に変更すれば良い。