フィクションの世界でよく見かける光景。
2010/04/30
2010/04/29
アフリカではカバが最も人命を奪っているとか
日常生活では決して出会う事のないカバ。
かばと聞いてもマヌケそうで、足がとろく、人も襲わないだろうと
思ってました。
出会ったことの無い存在だから、勝手にイメージしてたのですね。
…これを見るまでは。
かばの事を調べてみると、
アフリカで最も人命を奪っているのはライオンでもなくワニでもなくカバだとか。
また逃げようにも、野生のカバは時速50Kmにも達するとのことで、直線に逃げても
厳しそうですね。
2010/04/28
「ケーキカピカピ」を早口で10回言うと…
「ケーキカピカピ」を早口で10回言ってみてください。
私は無理でした…
リトライチャレンジ2回(計3回)以内に、噛まずに言い切れる人がいたら
すごいと思う。
繰り返していると、
ケーキパピパピ、
ケーキカキカキ、
ペーキパピパピ、
けーきぱぴpぃあーーー
ってなります。試して見たい方は、人がいないと所でチャレンジを!
個人的には、日本の早口言葉一覧に追加しても良いと思う。
回復コンソールにて System Volume Information には普通に移動できた
パソコンネタ。
マシンがぶっ飛んで、正常な状態まで回復させる方法についての補足。
WindowsXP の回復コンソールにて、cd コマンドで自由自在にディレクトリを
移動する為には、レジストリの
HKEY_LOCAL_MACHINE→SOFTWARE→Microsoft→Windows NT→CurrentVersion→Setup→RecoveryConsole
の中にある、
SetCommand
SecurityLevel
を 1 にマシンがぶっ飛ぶまでに事前に変更して、いざって時に回復コンソールを使い
set allowallpaths = true
で有効にしてやらなければいけません。
しかし、この作業を行わなくても、
復元ポイントのフォルダにアクセスできました。
特になにもしていません。
ポイントとしては略式(短いファイル名)ではアクセス拒否されることです。
NG: cd "system~1"
OK: cd "system volume information"
これが可能なら、いざマシンがぶっ飛んでも C ドライブの復元ディスクを有効に
しておけば、cd / copy コマンドを駆使して、レジストリ復旧できますね。
ただ回復コンソールでは、キー入力が非常にめんどくさいので事前に
自分専用の回復コンソールを作っておき、bat ファイルなんかで、
backup.bat
ren c:\windows\system32\config\sam sam00
ren c:\windows\system32\config\security security00
ren c:\windows\system32\config\software software00
ren c:\windows\system32\config\system system00
ren c:\windows\system32\config\default default00
ren c:\windows\system32\config\security security00
ren c:\windows\system32\config\software software00
ren c:\windows\system32\config\system system00
ren c:\windows\system32\config\default default00
copy _REGISTRY_MACHINE_SAM c:\windows\system32\config\sam
copy _REGISTRY_MACHINE_SECURITY c:\windows\system32\config\security
copy _REGISTRY_MACHINE_SOFTWARE c:\windows\system32\config\software
copy _REGISTRY_MACHINE_SYSTEM c:\windows\system32\config\system
copy _REGISTRY_USER_.DEFAULT c:\windows\system32\config\default
copy _REGISTRY_MACHINE_SECURITY c:\windows\system32\config\security
copy _REGISTRY_MACHINE_SOFTWARE c:\windows\system32\config\software
copy _REGISTRY_MACHINE_SYSTEM c:\windows\system32\config\system
copy _REGISTRY_USER_.DEFAULT c:\windows\system32\config\default
を回復コンソールCD の中にコピーしておいて、いざとなったら目的の復元フォルダ
の回復ディレクトリまでは頑張って cd で移動して
copy d:\backup.bat .\
batch backup.bat
と実行するだけで完了させる方がラクで良いかと思います。
回復コンソールって再配布して良いのだろうか。もし良いなら、bat ファイルを入れた
iso イメージを公開したいのだけど。
2010/04/27
2010/04/26
CreateWindow はメインスレッドのみ有効
きちんと検証したこと無かったのですが、今までの経験から避けていた
別スレッドでのウィンドウ作成
は CreateWindow() の仕様上、対応していなかったみたい。
これだけだと語弊があるので言い直しますが、
GetMessage() / DispatchMessage() / TransalteMessage()
を実装していないスレッド上で、CreateWindow() を行っても、メッセージループ処理
が行われない為、フリーズするということです。
メインスレッド以外でウィンドウを作成する場合は、そのスレッドでもメッセージループ
を実装してやらないとダメ。
昔、DirectX の初期化を別スレッドでやろうとして、一部どうしてもうまくいかない時が
あったのですが、それもこれ関連かも。
DestroyWindow() がメインスレッド以外では無効というのは昔から知っていたのですが、
それもメッセージループのと関係していたってことか。
あと非常にハマりやすいのが、
SetDlgItemText() や SetDlgItemInt() や SetWindowPos()
などは全部 SendMessage() で行われる為、別スレッドにてロックオブジェクトを使い
ロックした状態で Setxx() を呼ぶコードがある場合は、
メインスレッドでロックオブジェクトを使ってるシーン(関数)に入ろうとするとフリーズ…
というよりデッドロックが、起こりえます。
ウィンドウメッセージは、あくまでメインスレッド(CreateWindowをしたスレッド)から
呼び出されるという点が重要ですね。
デッドロックするシーンがあるか紙に書いてみると、当たり前のようにあった。
そもそも Set XXXX 系の関数をロックオブジェクトをロックしたまま呼び出すコードは、
危険な可能性は秘めていると痛感しています。
デッドロックするわけないだろと思ってたのですが、SendMessage() を利用している関数
という意識が外れると、中々気づかないものですね。
2010/04/25
2010/04/24
【ツール】vista でも使える fport に類似した機能を持つコマンド
PCのポートがどれくらい開かれているのか調べるのに、
Windows XP まででは fport というコマンドが非常に手軽で、便利で利用して
いた方も多いと思います。
このツールは vista 以降の OS ではドライバの関係から、動作しなくなって
しまいました。
その代わり、組み込みコマンドの netstat の方が充実してきたので、これでも
ある程度把握する事は可能なのですが、プロセスID のみで表示されるので、
どのプロセスかを調べるのに、直感的では無く不便だったりします。
そんなとき psr というコマンドラインツールを利用すれば、fport に非常に似た
状態でプロセスのポート番号を確認が出来ます。
Windows7 ではこんな感じ↓
使い方はコマンドライン上で、
psr /c fport
と入力するだけで可能です。実行できない場合、VisualStduio 2005 の
セキュリティホール 対策DLL が必要なので、そちらをインストールする必要が
あります。
コマンドを打つのがめんどくさい人は、fport.bat というファイルを作成し、
その中に先ほどのコマンドをコピ&ペーストすれば、fport と打つだけで表示
できるようになります。
コマンドラインからバッチファイルを作成するなら、以下のようにすれば可能です。
echo psr /c fport>fport.bat
このツールの実行環境は Windows XP, Vista, 7 対応なので、
vista 以降の人は fport の変わりにコマンドラインから手軽に確認出来る psr は
オススメです。
初めての eclipse で flash 開発を行おう!環境構築 ~後編~
前回の eclipse で flash を開発しよう!の続きです。
過去の投稿記事は以下から。
さて長いようで短かった…初心者の為の flash 作成講座、今回で最終回です。
後日、Java も含めて開発環境一式全て、分割して skydrive にアップロードする予定です。
アップロードしました。2009年11月21日 時点での最新環境です。
skydrive の仕様上 1 ファイル50M制限があるので…公開している4ファイルをダウンロード後、
bat ファイルを実行する事によって zip ファイルが復元されます。
中に、eclipse、eclipse日本語化, mtasc, flashout 全てがパッケージ化されています。
A. HellowActionScript.flashout を作成する。
flashout を用いて開発する手順に、作成したプロジェクトに
プロジェクト名.flashhout
という 0 バイトのファイル を 作成する必要があります。こちらの作成手順から
説明していきます。
左ツリーにあるプロジェクト HellowActionScript をマウスで「右クリック」を行い
「新規」→「ファイル」と進みます。
作成するファイル名に
HelloActionScript.flashout
と入力します。
入力後、完了を押したら Flashout のプロジェクトへの組み込みは完了です。
作成したファイルが eclipse 編集ウィンドウで開かれたら、今は閉じてください。
B. 出力フォルダを作成する。
今回作成される swf ファイルの出力先となるフォルダを作成します。
出力フォルダ名は
bin
と入力してください。入力後、完了を押します。
C. Flashout 編集画面を表示する。
いよいよ来ました。今回のステップから最後のステップで swf を作成し eclipse 上で
実行まで行います。
A で作成した HellowActionScript.flashout をダブルクリックします。
そうすると以下の画面になるはずです。
下のタブ、
「SWFプレビュー」「ロガー」「コンパイル状態/設定」「MTASC」「Flashout ヘルプ」
となっているところの「コンパイル状態/設定」を選択してください。
画面を最大化しないと所々見づらくなっているので、見えづらくなってるウィンドウを広げるなりした方が
良いかもしれません。
D. 各プロジェクト固有の環境設定を行う。
C で行った画面から引き続き、SWF メニューを選択します。
そうすると 「swf のパス」「ルート(メイン)クラス」というのがあるので、それを
現在のプロジェクトに応じて設定します。
[swf のパス]
c:\eclipse\workspace\HellowActionScript\bin\out.swf
[クラス]
c:\eclipse\workspace\HellowActionScript\src\HellowActionScript.as
[ワークスペース]\HellowActionScript\bin\out.swf
[ワークスペース]\HellowActionScript\src\HellowActionScript.as
になりますね。
続いて「追加」メニューを選択し、「コンパイラの追加パラメーター」に下記
パラメーターを追加します。
-version 100 -header 240:240:10
E. swf を作成し実行する。
いよいよです!
ここまでで全ての準備が整ったので、画面の真ん中に表示されている「コンパイルの試行」
をクリックするか、上部に表示されている「コンパイル」をクリックします。
結果、
「Hellow ActionScript World!!」
と表示されれば完璧です。
コンパイルエラーが出た方は、手順を見直してみてください。
F. Flasshout を用いたデバッグ出力を確認する。
Flasshout のデバッグ関数 trace() がすでにソースに埋め込まれているはずです。
そこで出力したログは、
「SWFプレビュー」「ロガー」「コンパイル状態/設定」「MTASC」「Flashout ヘルプ」
にある「ロガー」を選択することによって確認可能です。
お疲れ様でした。
今回で、初めての eclipse で flash 開発を行おう!環境構築編は終了です。
初心者の方は開発環境が整ったら後…言語をガリガリコーディングして覚えていくのが
一番だと思います。
今はネットで色々調べられるとは言え、技術本も参考にしながらコーディングする方が
短期間での成長率は高いような気もします。
開発の参考本をいくつか紹介しておきますので、ご参考までにどうぞ。
2010/04/23
スパイシーレッドチキンを買ったが…コンビニは店員の質による、本当に
セブンイレブンでスパイシーレッドチキン、フライドチキンを買ったのですが、
専用の切点線 のある入れ物に入れてくれなかったようだ。
びみょーに残念。
これだけならまぁ…間違える事もあるよな、と思うのだが。
この時ホット商品以外にも冷凍食品や アイス も買ったのだけど、この店員、
「袋は一つに入れてよろしいですよね?」
と自動選択肢「はい」と流れで答えるような質問を投げかけ、
フライドチキン(ホット)の真横にアイス、ホットの真下に冷凍食品を置くと言う
常識ではありえない詰め方をされた。
自分自身は、初めてレジやってもらってる店員だと思うんだが、これは恨みなのか?
これを許容してしまった今の俺は、心が寛容なのか、それともめんどくさっただけなのか。
まぁ後者ですね。
コンビニの店員では、おばちゃん店員の方がはるかに接客が良いし気持ち良い。
若い大学生の男がやると、こーいう気遣いを知る事が無いからか、微妙なところで不満を
感じることが決して少なくない。
偏見を持つつもりは無いけど、
コンビニでは若い大学生の男がやる接客と、おばちゃんがやる接客では、見えにくい所での
気遣いが全く違うという事なんだ。
自分の中の統計としては、これは事実であり真実である。
さてこのフライドチキン、
普通に美味しいのでたまに食べたくなるのですが、実は連続で2つ食うだけでも
胃がもたれるような感じになります。時間差で。
連続で4つ食べると、気持ち悪くなるのがほぼ確実な感じ。
初めての eclipse で flash 開発を行おう!環境構築 ~中編02~
前回の 初めての eclipse で flash 開発を行おう!環境構築 中編01 の続きです。
前回までで eclipse 環境の方は整ったので、今回はフラッシュプロジェクトの作成に
入り、ソース作成まで行います。
A. プロジェクト HellowActionScript を作成する。
eclipse のメニュー「ファイル」→「新規」→「プロジェクト」を選択します。
プロジェクト選択画面が出てきたら、ActionScript の中にある
新規ActionScript2プロジェクト
を選択します。
次へを押し、プロジェクト名入力画面になったら今回作成するプロジェクト
[プロジェクト名] HellowActionScript
と入力します。
完了ボタンを押せば、プロジェクトの作成は完了です。
ようこそ画面が開かれている人は、ようこそ画面の×をクリックすると、作成された
プロジェクト画面に切り替わるはずです。
B. ソースファイル Hellow.as を作成する。
いよいよ ソースファイルの作成に入ります。
プロジェクトツリーから src フォルダを右クリックして「その他」を選択します。
新規ActionScript2 クラス を選択します。
クラス名に HellowActionScript と入力し、完了を押せば作成完了です。
C. Hellow.as を編集する。
ソースファイルを編集します。Hellow.as を編集画面にしたのち、下記ソースを
コピー&ペーストして下さい。
/**
* @author mfsocket
*/
class HellowActionScript {
* @author mfsocket
*/
class HellowActionScript {
//コンストラクタ
function HellowActionScript(mc:MovieClip) {
//テキストを表示
mc.createTextField( "tf", mc.getNextHighestDepth(),0,0,200,20);
mc.tf.text="Hello ActionScript World!!";
}
function HellowActionScript(mc:MovieClip) {
//テキストを表示
mc.createTextField( "tf", mc.getNextHighestDepth(),0,0,200,20);
mc.tf.text="Hello ActionScript World!!";
}
//メイン
static function main() {
trace(Flashout.DEBUG +"デバッグ");
trace(Flashout.INFO +"情報");
trace(Flashout.WARN +"警告");
trace(Flashout.ERROR +"エラー");
trace(Flashout.FATAL +"致命的なエラー");
trace(Flashout.SERVER_IN +"サーバ入力");
trace(Flashout.SERVER_OUT+"サーバ出力");
var app:HellowActionScript=new HellowActionScript(_root);
}
static function main() {
trace(Flashout.DEBUG +"デバッグ");
trace(Flashout.INFO +"情報");
trace(Flashout.WARN +"警告");
trace(Flashout.ERROR +"エラー");
trace(Flashout.FATAL +"致命的なエラー");
trace(Flashout.SERVER_IN +"サーバ入力");
trace(Flashout.SERVER_OUT+"サーバ出力");
var app:HellowActionScript=new HellowActionScript(_root);
}
}
ペースト出来ましたでしょうか。
今回はここまでになります。
次回、コンパイル&実行まで進み HellowWorld を表示させます。次回が最終回の予定です。