有名・人気な「SEの教科書」を読みました。
完全版は1と2の内容が入っていて、お買い得ですね。

SEの教科書 【完全版】 (技評SE選書)
著者/訳者:深沢 隆司
出版社:技術評論社( 2009-10-21 )
定価:¥ 1,659
Amazon価格:¥ 1,659
単行本(ソフトカバー) ( 352 ページ )
ISBN-10 : 4774140163
ISBN-13 : 9784774140162
システム開発での上流工程の重要さを訴えています。
現在プロジェクトマネジメントを勉強中ですが、「なぜ」「どうやって」と分からなかった部分が、少しすっきりしました。
日本では「計画」「マネジメント」などの言葉を使っただけで安心して失敗を繰り返すことが多い、との批判は尤もです。
前半で解説されていた「会議の進め方」「議事録の取り方」は、すぐにでも実践できそうなので、早速試していこうと思います。
読書シリーズ開始です。
社長もおすすめの「仕組み」仕事術 を読んでみました。

最少の時間と労力で最大の成果を出す「仕組み」仕事術
著者/訳者:泉 正人
出版社:ディスカヴァー・トゥエンティワン( 2008-03-03 )
定価:¥ 1,365
Amazon価格:¥ 1,365
単行本(ソフトカバー) ( 172 ページ )
ISBN-10 : 4887596111
ISBN-13 : 9784887596115
BPSで大切にしている価値観の一つである「楽をするための努力を惜しまない」と非常に深く関連する内容で、読みやすい文章も手伝って一気に読み切ってしまいました。
「出来ないのはモチベーションが低いからだ」「彼にはこの仕事をやる能力が無い」などというのは単なる逃げで、仕組み化出来ることはどんどん仕組みにすることで、仕事の効率を圧倒的に高めることが出来る。
同じことを何度も考えるのは無駄なので、記憶せずに記録する。効率化して空いた時間を、より高度な「考える」ことに当てる。
仕事をしている気になって満足しないために、そして自分の時間をより高度に有意義に使うために、自分と会社の「仕組み」作りを進めていこうと思います。
引き続きWPFの小ネタです。
WPFウィンドウのアイコンは、System.Windows.Media.ImageSource型です。
プロジェクトのリソースにアイコンを指定すると(プロジェクト右クリック→プロパティ→リソースから追加)、System.Drawing.Icon型になります。
これらは直接変換できないようですが、以下のようにStreamを介せば変換できます。ただ、もっとスマートな方法が欲しいですね・・・
そもそも、WPFではアイコンをこのように指定することが希なのかも知れません。
System.IO.MemoryStream s = new System.IO.MemoryStream();
(Properties.Resources.myicon as System.Drawing.Icon).Save(s);
window.Icon = System.Windows.Media.Imaging.BitmapFrame.Create(s);
WPFはWindowsFormsに比べ、デザインを柔軟に設定できて良いですね。
また、デザインとロジックの分離がとてもやりやすいです。Visual Studio 2008のエディタがこなれていないのと、Bindingマークアップ拡張が分かりにくいのが普及を妨げている感がありますが(?)、おすすめです。
さて、大した内容では無いのですが、WPFで任意のタイミングでシステムメニューを表示させる方法をご紹介します。
WPFでと言いながらWinAPIのお話で、かなり有名な内容ですが、まあ一応。

システムメニュー
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private void Button_Click(object sender, MouseButtonEventArgs e)
{
//マウス座標を取得し、lParamに加工
int x = System.Windows.Forms.Control.MousePosition.X;
int y = System.Windows.Forms.Control.MousePosition.Y;
IntPtr lParam = new IntPtr(x | y << 16);
//Windowハンドルを取得し、0x313メッセージを送信
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
PostMessage(hwnd, 0x313, IntPtr.Zero, lParam);
}
要するに0×313を送るだけです。これはWinUser.hにも書かれていない隠し定数ですが、いろんなところで紹介されて逆に有名な値です。0×313。
数ヶ月前、「年100冊以上のペースで本を読む」という目標を立てました。
以前は雑誌や技術書など自分の直接興味のある分野しか読んでいなかったのですが、少しずつでも視野を広げ自分を成長させていくには、やはり読書が効果的です。
きっかけは、社長におすすめされた、名著「7つの習慣」を読んだことです。

7つの習慣―成功には原則があった!
著者/訳者:スティーブン・R. コヴィー ジェームス スキナー
出版社:キングベアー出版( 1996-12 )
定価:¥ 2,039
Amazon価格:¥ 2,039
単行本 ( 492 ページ )
ISBN-10 : 4906638015
ISBN-13 : 9784906638017
正直、世界観が変わるほどのインパクトを受けました。
今までのつまらない考え方が恥ずかしくなり、同時に自分を磨いていくモチベーションが生まれました。
まだまだこの偉大な本を100%活用は出来ていませんが、少なくとも出来るところから、と読書を進めています。
今後人生の壁にぶつかることがあったら、「7つの習慣」を思い出して乗り越えていこうと思います。
読書の成果を吸収するために、読んだ本はブログで発信していきます!
Webアプリなどで、JPEGしかアップロードできないことがよくあります。
そのためだけに高機能なソフトを起動するのは重いし、操作も複雑です。
そこで、JPEGに変換するだけのソフトを作成しました。

アイコンにPNGやBitmap、GIFなどの画像をドラッグすると、JPEGファイルが作成されます。
起動してウィンドウにドラッグしてもOKです。
拡張子が間違っているファイル(PNGなのに.jpgと付いているなど)も、ファイル自体が壊れていなければJPEGに変換できます。
詳細データ
- プログラム作成時間:15分
- アイコン作成時間:20分
- 動作環境:.NET Framework 2.0以上(Windows Vista以降ならOK。XPの場合、以下からインストールしてください)
マイクロソフトのページ
一応お決まりの。昼休みに作って試験的に公開しているものなので、使って不具合が生じてもBPSや馬場は責任をとれませんのでご注意ください。もちろん、上手く動かないなどのフィードバックは大歓迎です。
XAMPP最新版1.7.2では、PHPのバージョンが5.3になっています。
この環境でCakePHP(1.2.5)を使うと、以下のようなエラーが出ることがあります
Warning: strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘9.0/no DST’ instead in …
この場合、cakeのapp/config/core.phpで以下の行のコメントアウトを外せばOKです。
date_default_timezone_set(’UTC’)
メッセージそのままで当たり前のことですが・・・
#関係ないですが、なんでCakePHP 1.2.5をインストールすると1.2.4.8284と出るんでしょうね?
BPSは、少し前からMicrosoft BizSpark に参加させて頂いています。
http://www.microsoft.com/japan/mscorp/mic/bizspark/default.mspx
最近はWindowsアプリの開発も増え、開発用のVisual Studio上位版や検証用の古いWindowsが欲しいと思っていたので、好都合でした。
しかし、MSDN Premium Subscription相当が付いているはずなのに、Windows 98やMe、Office 2000などが見つかりません。
↓を見ると、どうやら削除されたようですね。
http://journal.mycom.co.jp/news/2003/12/11/14.html
そう言えば、J++でもめていた頃に、結局MS製Javaが入った製品は出荷停止とか言っていましたっけ。
当時高校生だった僕は、なんでSunが自社サービスの普及を起訴するのか理解できませんでした。今も怪しいですが・・・
いずれにせよ、まだ現役ユーザが以外と多いWindows 98やMeなどを入手する手段が断たれてしまったのは残念です。
(ところで、Windows 95は関係ない気がするのですが、なんで消えたんでしょうね??)
過ぎたことを気にしても仕方ないので、最新のVS2010やOffice 2010で頑張ることにします。
自宅でVirtual Serverをしばらく使っていましたが、
・ホスト再起動後、NICが認識されないトラブルが発生する
・MicrosoftはHyper-Vに移行したので、メンテナンスされる様子が無い
・ちょうどVMWare Playerがバージョンアップした
などの理由で、VMWare Playerに乗り換えました。
ホストはWindows Server 2008、ゲストはUbuntu Serverです。
本当はバックグラウンドサービスで動いて欲しいのですが、VMWare Serverは昔失敗したので、簡単そうなPlayerにしてみました。
VMC→VMXの変換は、何事もないかのようにあっさり完了。ファイル→開く だけでOKでした。
ホストマシンにはNICが2枚積んであって、1枚目は内部LAN、2枚目は仮想マシン専用でDMZに接続されています。
自動設定では内部LANに接続されてしまうので、VMWare Workstationの体験版に入っている vmnetcfg.exe を使ってブリッジ設定を行いました。
MACアドレスが変わるので起動直後はネットワークに接続できませんが、ifconfig up/down を数回やったり、VMWare自体を再起動したりすると接続できるようになります。
やたらとプロセスがたくさん起動するのが好きではないのですが、これが無料なんだからすごいですね。
Playerで仮想マシンの作成も出来るようになったので、今度もう1台くらい仮想マシン増やしてみようと思います。
久々のEthna小ネタです。
Ethnaでのデフォルトアクション名はAppID_Action_Hogeのようなスタイルのアクション名ですが、これを変更したい場合のTIPSです。
例えば、AppID_HogeActionのようにアクションのクラス名を変更したいと思います。
AppID_Action_Hoge => AppID_HogeAction
その場合は下記のようにAppID_Controller.php内にgetDefaultActionClassメソッドをオーバーライドすることで簡単に実現できます。
ちなみに、アクションをコマンドから作る場合にコントローラに下記のコードを書いておくだけで命名規則が変更されるため、アクションを作る前にコントローラに実装しておくことがお薦めです。
また、ビュー(View)やアクションフォーム(ActionForm)などの命名規則も同様にgetDefaultViewClass, getDefaultFormClassをオーバーライドするだけです。
function getDefaultActionClass($action_name, $gateway = null) {
$gateway_prefix = $this->_getGatewayPrefix($gateway);
$postfix = preg_replace('/_(.)/e', "strtoupper('\$1')", ucfirst($action_name));
$r = sprintf("%s_%s%sAction", $this->getAppId(), $gateway_prefix ? $gateway_prefix . "_" : "", $postfix);
$this->logger->log(LOG_DEBUG, "default action class [%s]", $r);
return $r;
}