« 2007年11月 | トップページ | 2008年1月 »

2007/12/26

[ニッキ] また風邪が酷くなった

社内にいても「今日はなんだか寒いなぁ」と思っていたら、午後からだんだんと頭痛が酷くなってきました。

先週直ったと思っていた風邪が、ぶり返してきたみたいです _| ̄|○

今日は会社で忘年会だったのですが、頭痛がひどいので挨拶が終わったところで帰宅。

早退の意思を伝えたときに思ったんですが、体調が悪くて早退したいという人間に対して 「出席しろよ、残っていけよ」ということを示唆する態度をとるのはどうかと。 体調が悪くてふらついている人に対しては、ゆっくり休めるようにもって行くのが 「優しさ」ってものじゃないだろうか?

というか酒を飲むかどうかは個人の習慣によることであって、「みんな参加するんだから お前も参加しろよ」的な思想が全く理解できない。するつもりもないし合わせるつもりもないけどね。

2007.12.27 追記
熱と頭痛と腹痛のコンボは辛かった・・・_| ̄|○il|!
やっと楽になってきました。

| | コメント (0) | トラックバック (0)

[ニッキ] 変数名

via ときどきの雑記帖 リターンズ

とあるスクリプトの、変数名に、 get_ほげほげというのを発見。

おまい、それはメソッド(関数)に使うべき名前だろおおおおッ!! 変数が get してどうすんだよッ

激しく同意。

変数名get だけじゃなくてupdate とか、メソッド名sys が使われていたり、 c_str っていう関数が定義されているコード読まされてるけどね。

それ以外の変数名も hoge, hoge_, hoge__, hoge___ みたいにアンダーバーを増やすことで区別してるとか。

sys というメソッド名からその正しい動作を連想するのはかなり厳しいと思うんだが。「システムの動作」っていわれて連想するのはひとつじゃないからね。

加えて、予約語と同じとか予約語になりそうな識別子名は使わない、標準関数で使用されている識別子名は使わないってのは、バグ・混乱を避けるための手段の一つだと思うんだけどそれを率先して無視しまくってるのが素敵だ。

今日も疑問に思ったんだが、何で C++ 何ぞやっているんだろうか?
ほかにやりたいことがあるというのに・・・

| | コメント (0) | トラックバック (0)

[ F# / Python ] フィボナッチ数列

via ときどきの雑記帖 リターンズ

MSN相談箱 以下のプログラミング(C++)がわかりません。
以下のプログラミング(C++)がわかりません。
質問者:kens-1813 以下の問題のプログラミング(C++)がわかりません。誰かわかる人いますか?

フィボナッチ数列f1=1,f2=1,f3=2,f4=3…は漸化式
f1=1,f2=1 n≧3でfn=f(n-1)+f(n-2)
で定義されます。
(a)fnを計算する関数f(n)を、再帰的定義を用いて作ってください。

(b)画面から入力された整数nに対して、フィボナッチ数列fnを出力するプログラムを書いてください。かならず、(a)で作った関数を呼び出すようにしてください。

ひでぇ

上の雑記帖では質問が酷いといっているのか回答が酷いといっているのかわからないけど、わたしは質問が酷すぎると思った。 自分で考えたという形跡がまったく見られない。再帰がわからないならそのことを質問するべきだし、 コードを書いてみたんだけどエラーがでてしまって動かないとか、いつまでたっても処理が終わらないなら 自分が書いたコードを添えてどこを直したらいいのかを質問すればいい。

問題をそのまま丸投げでは、そりゃ叩かれる。

まったくの専門外で、一般教養の講義でいきなりこの問題を出されて「再帰」が何なのかさっぱりわからない、 C++ も全くといっていいほどわからないというなら、正直にそのことを書けば解説もついたんだろうけど。 ( 専門外の、専門的な知識が要求される課題の辛さは良くわかっているのでわたしなら回答します )

ついでなので F# と Python で書いてみた。まずは F#


let rec fibonacci = fun integer ->
  match integer with
  | integer when integer <=  0 -> failwith "Invalid Argument"
  | integer when integer <= 2 -> 1
  | integer when integer >  2 -> fibonacci (integer - 1) + fibonacci (integer - 2)
  | _ -> failwith "Invalid Argument";;

で、Python ( 2007/12/28 修正。integer < 0 となっていたのを integer <= 0 に直しました orz )


fibonacci = lambda integer: (None if ((type( integer ) != int) or (integer <= 0)) else 
	(1 if integer <= 2 else (fibonacci( integer - 1 ) + fibonacci( integer - 2 )))
)

追記
C++ でも書いてみた (´・ω・`)


#include <stdio.h>
#include <iostream>

using namespace std;

unsigned long int fibonacci( unsigned long int ordinal_number )
{
	/*
	   関数名 fibonacci
	   引数   ordinal_number 
	   
	   概要:
	   フィボナッチ数列における序数 ordinal_number の時の値を返す。
	   引数が不正だった場合は 0 を返す。
	 */
	
	if( ordinal_number == 0 )
	{
		return 0;
	}
	
	if( ordinal_number <= 2 )
	{
		return 1;
	}else{
		return (fibonacci( ordinal_number - 2 ) + fibonacci( ordinal_number -1 ));
	}
}

int main( void )
{
	for( unsigned long int ordinal_number = 1; ordinal_number <= 10; ++ordinal_number )
	{
		cout << fibonacci( ordinal_number ) << endl;
	}
	
	return 0;
}

どれも漸化式をそのまま実装したのでスピード遅いです(´・ω・`)

2007.12.29 追記
高速版。漸化式をそのまま実装した場合は、引数が 3 以上のとき fibonacci() が (引数 + 1) 回呼び出されるから。 また、再帰の制限をしていないので引数が大きすぎるとスタックを使い果たしてしまう可能性もあります。この問題は、 一般式をちょっと改良したものを実装することで解決できます。

Python の場合

import math
fibonacci = lambda integer: (None if ((type( integer ) != int) or (integer <= 0)) else
    math.floor((((1 + math.sqrt( 5 )) / 2) ** integer / math.sqrt( 5 ) + 0.5))
)

F# の場合

open System;;
let fibonacci = fun ordinal -> 
    match ordinal with
    | ordinal when ordinal <= 0.0 -> failwith "Invalid Argument."
    | ordinal when ordinal <= 2.0 -> 1.0
    | ordinal when ordinal >  2.0 -> Math.Floor( Math.Pow( ((1.0 + Math.Sqrt( 5.0 )) / 2.0 ), ordinal ) / Math.Sqrt( 5.0 ) + 0.5 )
    | _ -> failwith "Invalid Argument.";;

| | コメント (0) | トラックバック (0)

2007/12/25

[ 自作 ] Yorkfiled の出荷が延期されてた

FSBに発生しているノイズの関係で、特定のマザーボードで正しく動作しない可能性がある。具体的にはFSB周りの設計にマージンがとってあるX38のような6層基板で作られたものに関しては問題ないが、P35のように4層基板で作られたものに関しては問題が発生する可能性がある

笠原一輝のユビキタス情報局 ( 2007/12/21, 笠原一輝, Impress Watch Corporation )

ということで、新プロセスの 4 コア CPU Yorkfiled の出荷が延期されるそうな。もともとの出荷予定は1月だったらしいが、それが 2008 年第一四半期後半 -- だいたい 3 月くらい? -- になるらしい。

Intel の天野氏が言っているように、「バグのない CPU は存在しない」というのは事実だ。

しかし、それでも今回の「リファレンスデザインに沿ったマザーでまともに動作しない」というのは酷すぎる気がする。

AMD の Phenom の TLB バグは結構知られているようだけど、Yorkfiled に見つかったバグはあまり知られていないのはなんでだろう?(´・ω・`)?

Phenom の TLB バグは、それを無効にしてしまえばパフォーマンスは低下するが動作はする。いや、CPU を買い換える目的の大半はパフォーマンスの向上にあるので、パフォーマンスダウンというのは致命的だとは思うけど、それでも起動しないよりマシだと思うんだけどな。

Yorkfiled もしばらく様子を見たほうがいいのかもしれない。

# あ、TLB にバグがあるとプログラマも泣くことになるかも。
# やっぱり TLB バグも嫌だなぁ

| | コメント (0) | トラックバック (0)

2007/12/17

[ python ] CRC32 を文字列で取得する

Python で CRC32 を計算する方法はいくつかあって、binascii モジュールか zlib モジュールを使う方法が一般的だと思うんだけど、これらのモジュールにある crc32() で得られるのは整数型のオブジェクトだ。

文字列で CRC32 を得る必要性が出たのでさらっと書いてみた。

convert_crc32_string = lambda message: "".join( [string.rjust( hex( ord( byte ) )[2:], 2, '0' ) for byte in struct.pack( "!i", binascii.crc32( message ) )] )

| | コメント (1) | トラックバック (0)

2007/12/14

[ Vista SP1 RC1 ] Service Pack1 RC1 入れてみた

上司から「Vista に SP1 βをインストールしろ。アップグレードでだ」と言われて仕方なくインストールしてみた。 わざわざ「アップグレード」と指摘してくるあたり、わかってます。

ええ、普段なら絶対にやらないからね。
アップグレードインストールなんて

ベータ版のアップグレードインストールなんて涙が出てきます。が、仕方ないので MSDN のサイトを覗いてみると、RC1 が出ていたのでベータではなく RC1 を入れました。

インストール自体は XP よりも簡単になっています。今まではアップグレードインストールの場合、途中で「再起動してください」というダイアログが何度も表示されてその度に手動で再起動しなければなりませんでしたが、Vista では最初に「自動で再起動する」というチェックボックスを ON にしておけば、勝手に再起動とインストール処理を繰り返してくれます。

省電力機能が働かなければね (T▽T)

インストール処理の途中で省電力機能が動作すると悲しいことになりますので、SP1 のインストールを始める前に必ず電力設定を確認しましょう。

で、やっとインストールが終わったわけですが、軽くなるどころかさらに重くなっているみたいなんですが orz
起動時間延長
もっさり感アップ

原因としては、起動時に読み込むファイルが置き換えられているため、以前デフラグした効果がなくなっていることが考えられます。1週間ほど運用してから defrag /b を行うと変わってくるかもしれません。

ほかに気づいたことがあればだらだらと書いていこうかなと (´・ω・`)

| | コメント (0) | トラックバック (1)

2007/12/13

[ IronPython / VS2008 ] IronPython Studio 登場

IronPython Studio は無料で使える Python のフル IDE ( 統合開発環境 ) です。VS SDK に IronPython のサンプルとして同梱されているものをベースにしています。

IronPython Studio は VS2008 のシェルランタイム ( これはロイヤリティフリーです ) をベースにしており、どのバージョンであっても動作します ( 訳注: ここでの「バージョン」は Standard とか Professional といったものをさしているのだと思います )。

Visual Studio 2008 に IronPython 用の機能を追加する拡張パック IronPython Studio が公開されています。

ダウンロードページは こちら

IronPythonStudioSetup というリンクをクリックすると使用承諾許可証が表示されるのでそれを読んでから "I agree." ボタンをクリックしてください。zip ファイルのダウンロードが始まります。

zip ファイルのダウンロードが終わったら、ファイルを解凍しましょう。 IronPythonStudio.msi というファイルが出てくると思います。これを実行すればインストールすることができます。

なお、IronPython Studio をインストールする前に Visual Studio2008 Shell Isolated Mode をインストールしておく必要があります。IronPython Studio のソースコードを利用するためには Visual Studio2008 SDK 1.0 が必要になります。VS2008 SDK はインストール・実行には必要がないようですが、Standard 以上ならば入れておくことをおすすめします。

実は、まだ VS2008 を持っていないわたし・・・
MDSN サブスクリプションレベル上げようかな・・・

Reference
IronPython Studio
Visual Studio 2008 Shell Isolated Mode
Visual Studio 2008 SDK 1.0
Visual Studio2008 評価版ダウンロードページ

| | コメント (0) | トラックバック (0)

2007/12/10

[ office2007 / MS ] SP1 でやっと修正される MS IME-2007

Office IME 2007 の不具合の原因は、強制的にPCの電源をOFFにしたり、アプリケーションが強制終了されることで辞書が破損してしまう場合があったからだという。そこでSP1では強制的に電源OFFされた場合でも辞書や学習情報の内容が破損されないように修正。さらに異常が認められた場合は自動もしくは手動修復が行なえる機能を追加した。

( マイクロソフト、Office2007/Vista SP1 の概要を発表, Impress Watch Corporation )

ようやく IME の辞書崩壊バグが修正されるらしい。

わたしの環境ではかなり頻繁に IME 2007 の辞書が壊れていた。というのも、シャットダウンとかスリープに移行する時に頻繁に IME 2007 のプロセスが応答しなくなるため、プロセス強制終了を余儀なくされることが少なくないからだ。そして IME 2007 のプロセスを強制終了させた場合は結構な確率で辞書が崩壊し、正常に変換できなくなるのだ。

IME 2003 にはあった「修復」メニューがなぜか IME 2007 では無くなっているので、辞書が壊れてしまった場合はファイルを削除してバックアップから復元するかすべて登録しなおすしかなかった。なぜ IME 2007 で修復機能が削除されたのか、わたしは未だに理解できない。

今回の発表では「異常が認められた場合は自動もしくは手動修復が行なえる機能を追加した。」とのことだが機能の追加という表現は不適切だと思う。この機能は ( 復旧できる確率は別として ) 旧バージョン、少なくとも IME 2003 には存在したからだ。

しかし、バグは修正されるらしいものの、SP1 適用によるデメリットは大きい。

データフォーマットの変更により、これまでユーザーが蓄積した学習データはなくなる。インストールした直後と同様の初期状態になるので注意が必要。

つまり、今まで登録した変換候補はすべてクリアされてしまう。大学で研究を行うなど専門性の高い活動をしている場合、通常の辞書ファイルではまともな変換ができないので単語を登録していくがその数はかなりのものになる。それらがすべて「無かったこと」になってしまうのはかなり痛い。

Vista SP1 は互換性を重視して開発がすすめられたそうだが、Office 2007 SP1 では互換性は重視されなかったのだろうか?せめて変換ツールを出してほしいものだ。

| | コメント (0) | トラックバック (0)

2007/12/07

[ solaris / 備忘録 ] DNS キャッシュをクリアする

Windows で DNS キャッシュをクリアするには ipconfig /flushdns を実行しますが、Solaris ではネームサービスキャッシュデーモン ( nscd ) の機能を利用します。

Solaris で DNS リゾルバキャッシュをクリアするには、root で以下のコマンドを実行します。

/etc/inet.d/nscd stop
/etc/inet.d/nscd start

nscd は DNS キャッシュのほかに passwd, group, hosts ファイルの内容もキャッシュに保存するので、これらの変更を即座に反映させたいときにも使えます。

単独のキャッシュをクリアするだけなら以下のコマンドでも可能です。

/etc/inet/nscd -i (ファイル名)
Reference
Solaris User: ネームサービスキャッシュデーモンとは

パソコン・インターネット | | コメント (0) | トラックバック (0)

2007/12/06

[.NET] WF ( Windows Workflow Foundation )

Windows Workflow Foundation は、プログラムが実行される流れ ( 処理の流れ: workflow ) を定義しやすくするためのフレームワークらしい。つまり、ルールを記述してそのルールに合ったメソッドの実行を整理した形で行うようにするためのフレームワーク。

今までまったく違う先入観があったので見向きもしなかったんだけど、↑で間違っていないならすごく有用なフレームワークだと思う。

havana と話したところによると、リクエストを跨いだトランザクション処理とかをマシに書けるようになるかもしれないんだとか。

WWF は WCF と相性がいいのかもしれない。

で、なんで C/C++ なんて読まされてるんだろう。

| | コメント (0) | トラックバック (0)

2007/12/03

[ C ] 確認したのか?

char* value;

なんて書式のほうがわかりやすかったはずだ。

今は文法的にこれは許されていないから、ポインタ変数の定義をする場合は、普通は仕方なく、

char * value;

と「*」を離して書くくらいしかできない。

実は最近のコンパイラはこのどちらの表現でもちゃんと解釈して「通る」のだが、古いコンパイラではこの文法を通さないものもあったため、教科書ではどうしても、

char *value;

と書いてあるものが多いのだ。

( 三田典玄の「体育館の裏話」 関数の話(5), 2007/10/19 )

えっと、何を何を言っているんだろうか?

char* value; がコンパイルできない???

ちゃんと確かめてからほざいてほしいものだ。gcc 2.95.3, gcc 3.4.4, gcc 4.1.2 で確認したが、全く問題なくコンパイルできるぞ。MSVC コンパイラ Version 14.00.50727.762 でも確認したが問題なくコンパイルできる。

#include 

int main( void )
{
	char* value = "hoge";
	
	printf( "%s\n", value );
	
	return 0;
}

上記サンプルコードをコンパイルしてみよう。まずは gcc 2.95.3

bash-2.05$ gcc --version
2.95.3
bash-2.05$ gcc test.c
bash-2.05$ ./a.out
hoge

gcc 2.95.3 はかなり古いコンパイラだが、エラーはもちろん警告すら表示されない。
gcc 4.1.2 でも確認を行ったが、こちらでもエラー・警告は一切表示されなかった。

では次に Microsoft の C/C++ コンパイラでコンパイルしてみよう。
わたしの環境では以下のようになった。

F:\>cl test.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

test.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj

F:\>test.exe
hoge

みてのとおりこちらでもエラーにも警告にもならない。gcc 2.95.3 以前は全く知らないのだが、少なくとも「今のコンパイラ」ではエラーにも警告にもならないというのは上記の結果の通りだ。もしかしたらエラーになるすごくマイナーなコンパイラがあるのかもしれないが、わたしは char* value; という表記がエラーになると聞いたことは一度もない。

そのほか、char を 「8ビット符号付き変数」と解説している ( 正しくは、C の各型がどの程度の精度を持つのかは実装依存 ) など、全く正しい理解がされていないように思える。

「続く」とあるのだが、続きを書いて無理解をさらすより、C を一通り復習しなおしたほうがいいと思いますよ。

| | コメント (0) | トラックバック (0)

[ 備忘録 ] Inside Amazon

今日はほんとに備忘録。Amazon の内側とそれから lambda expression 。

Consistent Hashing ( steps to phantasien, 2007/12/01 )
コンシステント・ハッシュ法
バベル案内( 原著 Steve Yegge, 訳 青木靖, 2004/09 )
[Lisp] Lambda 式で遊ぶ ( (blog '(Yasuto . Takenaka)), 2007/05/04 )

| | コメント (1) | トラックバック (0)

« 2007年11月 | トップページ | 2008年1月 »