« 2007年11月 | メイン | 2008年1月 »

2007年12月29日

無料の暗号化ディスクなどで実現するノートPCのセキュリティ設定Tips
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは、naoyaです。2007 年も残りわずかとなりました。年末は何かとあわただしくなるものですが、普段業務などで使用しているノートPCのセキュリティ設定には気をつけたいものです。

そこで、今日は「無料の暗号化ディスクなどで実現するノートPCのセキュリティ設定Tips」と題して、ノートPCにフォーカスしたセキュリティ設定をいくつか紹介します。

1) 暗号化ディスクを導入する

暗号化ディスクを使うことで、機密性の高いデータを暗号化することができます。暗号化ディスクは、起動するときにパスワードを入力することで、はじめて使うことができるので、機密性の高いデータを守るために暗号化ディスクを導入しておくと便利です。

無料で使える暗号化ディスクで有名なものには、PGPdiskがあります。ウノウではしばらくの間PGPdiskを使っていたのですが、Windows Vistaには対応していません。

そこで、最近はTrueCryptというソフトウェアを使っています。 True Cryptは、WindowsとLinuxで動作可能でウィザード画面に沿って操作をすすめるだけで暗号化ディスクを作成することができます。

True Cryptで暗号化ディスクを作った後は、True Cryptのメイン画面でディスクをマウントしたあと、マウントしているドライブをFavorite Volumesとして保存しておきます。True Cryptの設定画面から、Actions to perform upon log on to Windowsの項目のMount favorite volumesにチェックを入れておくとWindowsが起動したときに自動的にマウントすることができるので便利です。もちろん、このときはパスワードの入力が必要です。

True Cryptはここからダウンロードできます、画面は英語なので注意してください。

余談ですが、ThinkPadにはClient Security Solutionというセキュリティ設定を簡単に行うことができるソフトウェアがあります。現在の最新版は、8.0なのですが、7.0のときにはPrivacy Diskという暗号化ディスクを作成する機能があってとても便利でした。8.0になって、削除されてしまったのがとても残念です。


また、マカーの人はOSXに標準で付属しているFileVaultを使うのが便利なようです。ただし、大きなデータを暗号化すると時間がかかることがあるようなので、必要なデータのみにした方がいいそうです。


暗号化ディスクには、業務で使うデータはもちろんのこと、メールのデータやSSHの秘密鍵などを入れるように徹底します。


2) アンチウィルスソフトウェアを導入する

コンピュータウィルスの被害を防ぐためにアンチウィルスソフトウェアを導入します。最近は無料のアンチウィルスソフトウェアなどもあって、導入するための敷居は下がっています。ウノウでは、AVGというアンチソフトウェアを購入して使っています。マカーの人には、ClamXavを使うといいようです。

アンチウィルスソフトウェアを導入したあとは、必ずソフトウェア本体と定義ファイルのアップデートを手動で行いすぐに最新版にします。また、一定期間おきにウィルススキャンを実行するように設定します。


3) ブラウザに入力する情報を保護する

ブラウザにはたくさんのパスワードを入力して使っていますので、万が一を考えてブラウザに入力する情報を保護するように設定します。

Firefoxには、master passwordという機能があって、これを使うとmaster passwordを入力しない限り、他に入力したパスワードなどの情報を自動的に補完しません。Firefoxの場合は、master passwordを設定すると便利です。IEには同様の機能がないのですが、ThinkPadのユーザはClient Security SolutionにPassword Managerという機能があって、同様の機能が提供されているので便利です。


4) スクリーンセイバーを設定する

席を離れるときのことを考えて、一定時間後にスクリーンセイバーが起動するように設定します。あわせてスクリーンセイバーが起動したとき、コンピュータをロックする設定にするか、スクリーンにパスワードを設定します。


というわけで、今日はノートPCのセキュリティ設定Tipsをいくつか紹介しました。新しい年を迎える前に、もう一度普段使っている自分のノートPCのセキュリティ設定を見直してみてはどうでしょうか?

それでは、よいお年をお迎えください。

2007年12月27日

2007年のお勧めソフトウェアテスト本リスト
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは!やまもと@テスト番長です。

今年も残すところあと僅かとなりました。
年末年始といえば(ほとんどの方は)お正月休みですね。
休み中や、帰省の道中には読書をされるという方も多いのではないでしょうか?
今年発売のテスト関連書籍の中から、お勧めを独断と偏見でピックアップしてみました。
ご参考になれば幸いです。

品質管理手法の体系と資料・論文のガイド。テストを考える上で地図の役割を果たす一冊。
ソフトウェア品質知識体系ガイド―SQuBOK Guide
SQuBOK策定部会
オーム社 (2007/12)
売り上げランキング: 9895


いい物を作るには政治も必要不可欠!

テスト担当者を悩ませる、10の難題克服法 ソフトウェアテストの人間関係的アプローチ
ウィリアム・E・ペリー、ランドール・W・ライス 成田 光彰
日経BP社 (2007/09/13)
売り上げランキング: 53776


貴重なソフトウェアテストの雑誌

ソフトウェア・テスト PRESS Vol.5
ソフトウェア・テスト PRESS 編集部
技術評論社 (2007/07/27)
売り上げランキング: 10688


直交表を使ったソフトウェアテストを行う方は是非

ソフトウェアテストHAYST法入門 品質と生産性がアップする直交表の使い方
吉澤 正孝/秋山浩一/仙石太郎
日科技連出版社 (2007/07/26)
売り上げランキング: 75688
おすすめ度の平均: 4.0
4 科学的手法で品質を上げよう

テストはクリエイティブな作業。挿絵も楽しい。

マインドマップから始めるソフトウェアテスト
池田 暁 鈴木 三紀夫
技術評論社 (2007/06/22)
売り上げランキング: 6144
おすすめ度の平均: 4.0
5 マインドマップとソフトウェアテストとの組み合わせが面白い
5 「ソフトウェアテストとは何をすることか」も理解できる
4 テストという仕事の意義と段取りが理解できる良書


実践的な演習を中心に解説したワークブック形式の本

ソフトウェアテスト実践ワークブック
レックス・ブラック 成田 光彰
日経BP社 (2007/01/18)
売り上げランキング: 121501




ついでに、まだテストの書籍を読んだことがなくて
いい本を探しているという方向けに幾つか定番をご案内してみましょう。
マネージャーをなさっている方にもお勧めです。

色褪せない古典の有名本
ソフトウェア・テストの技法 第2版
J. マイヤーズ M. トーマス T. バジェット C. サンドラー Glenford J. Myers Todd M. Thomas Tom Badgett Corey Sandler 長尾 真 松尾 正信
近代科学社 (2006/08)
売り上げランキング: 45549
おすすめ度の平均: 4.0
4 開発者、テスター、どちらも押さえておきたい一冊


ストレスの多い環境にいる開発チームのテスト担当者に

ソフトウェアテスト293の鉄則
Cem Kaner James Bach Bret Pettichord テスト技術者交流会
日経BP社 (2003/04/22)
売り上げランキング: 41870
おすすめ度の平均: 4.0
3 大爆笑の教訓書
2 テスト屋の業界話に終始
5 テスト関係者だけでなくソフトウェア開発に関わる人に読んで欲しい


プログラマ寄りの人が現実に近い所をさっと読むなら 

若手SEのための ソフトウェアテストの常識
秋本 芳伸 岡田 泰子
ディー・アート (2006/01/25)
売り上げランキング: 52545
おすすめ度の平均: 3.5
2 ちょっと冗長かな・・・
5 ソフトウェアの品質向上におけるテストの重要性がよく理解できました


Webアプリのテストにフォーカスした本

インターネットアプリケーションのためのソフトウェアテスト
フン・Q. グエン マイケル ハケット ボブ ジョンソン Hung Q. Nguyen Michael Hackett Bob Johnson 松村 淳 河崎 伸明 松島 孝仁 森川 隆司
ソフトバンククリエイティブ (2003/11)
売り上げランキング: 158492
おすすめ度の平均: 5.0
5 Web 系システムのテストに関する貴重な和書
5 こんな本は初めてです


どれもとてもいい本ですので、宜しければ読んでみてください。
この他にも良書がありましたら是非教えてください!

2007年12月26日

2007年度ウノウラボ アフィリエイト成果ランキング
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

クリスマスはニコニコ放送局を見ようと思って、結局更新ボタン押下で見れなかったgotandajinです。

ウノウラボでamazonアソシエイトを貼ってみるという試みを始めたのが、去年の12月。
早いものでウノウラボのamazonアソシエイト暦も1年ということになりました。
世間は師走でウェブの世界では年間ランキングも流行っているようですし、
ウノウラボも便乗して、ウノウラボのアフィリエイト成果を2007年度ランキングとして集計してみることになりました。
アフィリエイトランキングの記事というタイトルを掲げることによって、あざとさを全く感じさせずにアフィリエイトリンクを貼りまくることに成功しています。


それでは早速。
(正確な集計期間は2006/12/20~2007/12/26)


2007年度 アフィリエイト成果(販売数)ランキング

1位

Linuxアドバンストネットワークサーバ構築ガイド HAサーバ構築編 (Network server construction guide series (13))
デージーネット
秀和システム (2005/11)
売り上げランキング: 22858
おすすめ度の平均: 5.0
5 ミッションクリティカルなサーバを構築するなら
5 高度だが説明はわかりやすい

記事:DRBDによるコンテンツの相互バックアップ
by satoさん




2位


コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
デイビッド・A. パターソン ジョン・L. ヘネシー David A. Patterson John L. Hennessy 成田 光彰
日経BP社 (2006/03/16)
売り上げランキング: 5298
おすすめ度の平均: 4.5
5 コンピュータ開発者必携の名著
4 定番の教科書

記事:マシン語を学ぶ子ども達
by masatoさん




3位


モバイル大変革時代のケータイ通販ビジネス
柿尾 正之 片岡 俊行 両国 さくら 田中 裕子
翔泳社 (2007/04/11)
売り上げランキング: 78951
おすすめ度の平均: 5.0
5 とても面白くてわかりやすいです

記事:[書評] モバイル大変革時代のケータイ通販ビジネス
by matsumotoさん




3位


詳説 正規表現 第2版
詳説 正規表現 第2版
posted with amazlet on 07.12.26
Jeffrey E.F. Friedl 田和 勝
オライリー・ジャパン (2003/05/26)
売り上げランキング: 22383
おすすめ度の平均: 5.0
4 内容は大満足だけど高いです
5 噛めば噛むほど
5 正規表現の仕組みが分かります

記事:正規表現の勉強法
by bokkoさん




5位

コンピュータの構成と設計―ハードウエアとソフトウエアのインタフェース〈下〉
ジョン・L. ヘネシー デイビッド・A. パターソン John L. Hennessy David A. Patterson 成田 光彰
日経BP社 (1999/05)
売り上げランキング: 80939
おすすめ度の平均: 5.0
5 個人的には
5 必読です
5 これからSEを目指す人にぜひ!!

該当記事なし
 
 
 
 

5位


巨大人脈SNSのチカラ (朝日新書 31)
原田 和英
朝日新聞社出版局 (2007/02)
売り上げランキング: 94073
おすすめ度の平均: 3.5
1 文章が稚拙である
2 おはなし
3 SNS論

記事:[書評] 巨大人脈SNSのチカラ

by 8makiさん
 
 
 
 

7位


こんな僕でも社長になれた
家入 一真
ワニブックス (2007/02)
売り上げランキング: 62217
おすすめ度の平均: 5.0
5 素晴らしい出来栄え
5 啓蒙とかビジネスとかじゃなく、家族愛が描かれてる
5 感動的な一冊

記事:[書評] こんな僕でも社長になれた
by naoyaさん
 
 
 
 

7位


社内ブログ革命 営業・販売・開発を変えるコミュニケーション術
シックス・アパート株式会社 編
日経BP社 (2007/01/18)
売り上げランキング: 11969
おすすめ度の平均: 3.5
3 過渡期の一冊 という使命
4 社内ブログはどうやったらうまくいくか、いまから導入したい人へ

記事:[書評] 社内ブログ革命
by naoyaさん
 
 
 
 

7位


超・極める!MySQL
超・極める!MySQL
posted with amazlet on 07.12.26
坂井 恵 志村 和彦 ひろせ まさあき 松信 嘉範
翔泳社 (2006/10/04)
売り上げランキング: 90586

記事:五反田人がウノウの本棚で見つけた三冊の書籍紹介。
by gotandajinさん
 
 
 
 

10位


Joel on Software
Joel on Software
posted with amazlet on 07.12.26
Joel Spolsky 青木 靖
オーム社 (2005/12)
売り上げランキング: 6163
おすすめ度の平均: 4.5
5 本当のソフト開発を本当の意味でわかってもらうのにいい本
4 楽しい
5 実際に現場で使わせてもらってます

記事:テスターを雇わない経営者の誤った理屈 best5
by yamamotoさん
 
 
 
 

10位


フューチャリスト宣言 (ちくま新書 656)
梅田 望夫 茂木 健一郎
筑摩書房 (2007/05/08)
売り上げランキング: 1693
おすすめ度の平均: 4.0
4 よく出来た企画本、キャッチなータイトルには疑問アリ
4 不特定多数無限大への信頼
4 未来への示唆

記事:【書評】フューチャリスト宣言 梅田望夫/茂木健一郎
by emotoさん
 
 
 
 

10位


脳とクオリア―なぜ脳に心が生まれるのか
茂木 健一郎
日経サイエンス社 (1997/04)
売り上げランキング: 22973
おすすめ度の平均: 4.0
2 得られるものは少ない
3 正直言って、底の浅い本
5 脳の見方が変わる!

該当記事なし
 
 
 
 
という感じになりました。
「該当記事なし」となっているのは、その商品のアフィリエイトリンクが貼られてる記事がなかったものです。
どうやらamazon アソシエイトでは、リンクが貼られた商品以外のものが売れても、アフィリエイトリンクを経由して来たユーザーが商品を買った場合は、その注文が、経由したアフィリエイトリンクのアカウントの成果としてカウントされるようです。

おそらく
5位のコンピュータの構成と設計―ハードウエアとソフトウエアのインタフェース〈下〉は、2位のマシン語を学ぶ子ども達の記事の中のコンピュータの構成と設計―ハードウエアとソフトウエアのインタフェース〈上〉を買った方が一緒に、また10位の脳とクオリア―なぜ脳に心が生まれるのかは、同じく10位の【書評】フューチャリスト宣言 梅田望夫/茂木健一郎を読んだ方が、注文されたのでしょう。
 
 
他にぱっと思ったのは、上位に入っているものには「書評」のような語が入っているタイトルの記事が多いことだったのですが、「書評」のような語が入っていると注文率が上がるのかと思って調べてみると、そもそもアフィリエイトリンクが貼られたエントリ14個のうち8個が、「書評」、「書籍紹介」などの語をタイトルに含んでいるものだったので、「書評」という語がタイトルに入っているエントリが多くランクインしているのは当然のことでした。


さて、こんな感じでそろそろ締めさせて頂こうと思いますが、以下おまけです。
なんでこんなものが??という感じの、およそウノウラボとは何の関係もなさそうな注文がけっこうあったのでネタ的にご紹介させて頂こうと思います。
 
 

計上されていた変な注文達

ラーメンズ DVD-BOX
ラーメンズ DVD-BOX
posted with amazlet on 07.12.26
ポニーキャニオン (2004/12/15)
売り上げランキング: 330
おすすめ度の平均: 5.0
5 FRAMEWORKS ―心という枠にかすかな火が訪れるとき―
5 「若手芸人」からの脱却
5 まず間違いない
 
魔女っ娘つくねちゃん DVD6 (サントラCD付)
キング (2006/01/25)
売り上げランキング: 24021
 
R/C メカトンボ ブルー
R/C メカトンボ ブルー
posted with amazlet on 07.12.26
シー・シー・ピー (2007/05/31)
売り上げランキング: 545
おすすめ度の平均: 4.0
3 屋内の広い場所でなら楽しめる?
5 おもしろい!
 
高田コレクション フェイスバンク グレー
バンプレスト (2007/08/10)
売り上げランキング: 1872
おすすめ度の平均: 1.5
1 硬貨をくわえない
1 ぼろぼろに・・・
3 楽しいのですが
 
猫村さんのおくりもの 手ぬぐいとポチ袋
バンダイ (2007/03/24)
売り上げランキング: 624
おすすめ度の平均: 3.5
4 自分だけの猫村さんの楽しみ方
5 手ぬぐいという文化
4 癒されます。
 
チャイコフスキー:交響曲第4番、第5番、第6番「悲愴」
ムラヴィンスキー(エフゲニ) レニングラード・フィルハーモニー管弦楽団 チャイコフスキー
ユニバーサル ミュージック クラシック (2001/10/24)
売り上げランキング: 92
おすすめ度の平均: 5.0
5 切れ味抜群
5 空前絶後の演奏
5 衝撃の名盤。
 
1976年のアントニオ猪木
柳澤 健
文藝春秋 (2007/03)
売り上げランキング: 7081
おすすめ度の平均: 4.0
1 暴露本の受け売りに過ぎない!!
5 1976年の猪木の4試合をルポ! おもしろい!
4 これは「猪木オールOK」のカリスマ論(プロレス)ではなく、リアルファイト
 
ベトナムめし楽食大図鑑
伊藤 忍 福井 隆也
情報センター出版局 (2006/07)
売り上げランキング: 46187
おすすめ度の平均: 5.0
5 旅の友でした
4 行ってきます!
5 食べて元気になる 食べて楽しくなる そんな1冊
 
遺品整理屋は見た!
遺品整理屋は見た!
posted with amazlet on 07.12.26
吉田 太一
扶桑社 (2006/09/26)
売り上げランキング: 7432
おすすめ度の平均: 4.5
4 今後の生き方を考えさせられた
4 今の日本と将来の日本が抱える問題
4 これを読んで自分が幸せかどうかを考えてみる?
 

以上、内輪ネタ的な企画でしたが、お付き合いくださりありがとうございました。
 
 

2007年12月25日

Merbで Ruby on Rails の pluginを使用する
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは satoです。

最近何かと話題な Rubyでできた新しいwebフレームワーク Merbですが、Merbから railsのプラグインを使用する際に、必要なことをまとめてみました。Merbの詳細な説明やインストールは以下を参考にしました。

優しい Merb の育て方

Rails のプラグインを使用するには まず merb_has_rails_plugins を gem でインストールします

gem install merb_has_rails_plugins

次に ./config/dependencies.rb に 以下を加えます。

dependencies "merb_has_rails_plugins"

さらに ./plugin というディレクトリを作成し、そこに railsのプラグインを設置します。一応これだけで、多くのプラグインは動くようになるのですが、以下の場合には設定の変更かプラグイン自体の修正が必要です。

1) ActionController などを拡張する形のプラグインである

 ActionController::Base.module_eval や ActionController::AbstractRequest.module_eval などの形で actionコントローラなどを拡張する形のプラグインは 該当箇所を Merb::Controller.module_eval や Merb::Request.module_eval などに置き換える必要があります。

2) cookie や session を 扱うプラグインである

 Railsでは ActionController::Cookies を通して行いますが、 Merbでは Merb :: ControllerMixin::set_cookie などで行います。 sessionも同様です。

3) メールを扱う、またはプラグイン中でメールを送信する

 Rails では ActiveMailer を使用するのに対して、Merbでは Merb :: MailController/Mailer を使用します。

4) generate 系のプラグインである

 Merbは まだ 0.x の段階なので まだまだ、Rails互換の generate や それに代わる機能が足りない部分があります。

5) その他 ActiveSupport や ActiveRecord等を拡張したり使用するプラグイン

 Merbには 初期状態で ActiveSupport や ActiveRecordを使用しないため、dependenciesなどで使用するよう設定しないと、そのままの状態では使えません。

まだありそうですが、手元で使用しているプラグインは以上で動くようになりました。テストで Merb は Rails の平均3倍程度のパフォーマンスが出るので(データベースへのアクセスが増えるに従って差がなくなっていく)、Web画面はRallsで作成し、アクセスが多いAPIなどは Merbで開発するなどの使用方法も考えられると思います。

2007年12月24日

意外と身近なphar - PHp ARchive
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは。shimookaです。

今回は意外と古くて身近、でも意外と知られていないphar(PHp ARchive)を取り上げてみました。

pharとは?

pharとはPHp ARchiveの略で、その名の通りPHPスクリプトのアーカイブです。含まれる内容はPHPスクリプトである必要はなく、複数のファイルを含めることができます。Javaの世界で言うjarに近いもので、拡張子は「.phar」となることが一般的です。

pharの特徴としては、以下のものが上げられます。

  • アーカイブするファイルの圧縮をサポート(gzip・bz2)
  • 署名のサポート(md5・sha1)
  • phar拡張モジュールを使用することで、アーカイブを展開することなく透過的に利用可能

pharの中身と使い道

pharファイルは大まかには、データとスタブ、マニフェスト(アーカイブの情報を格納したバイナリデータ)で構成されます。前述のアーカイブに含まれるファイルはデータとして保存されています。スタブは、含まれているデータを処理するためのスクリプトのかたまりです。これをうまく使うことで、インストーラを作ることができます。つまり、

  • データ:インストールしたいファイル
  • スタブ:ファイルをインストールするPHPスクリプト

という構成ということです。Windows版のPHPに付属している「go-pear.phar」という3MBほどのファイルがあります。これをテキストエディタなどで開くと文字化けしているように見えますが、別に文字化けしている訳ではなく、マニフェストの部分が「文字化けしたように見え」ているだけです。

逆に、「何もしない」スタブを用意することで、純粋なアーカイブになります。

pharファイルを作ってみる

では、phar拡張モジュール使ってpharアーカイブを作ってみます。phar拡張モジュールはPHP5.2.0以降が必要で、2007/12/23時点の最新版はphar1.2.3です。

UNIX系OSの場合、インストールはpeclコマンドでOKです。インストール後、php.iniにextensionディレクティブを追加しておきます。

$ sudo pecl install phar
$ sudo echo "extension=phar.so" >> /path/to/php.ini

今回はクラスを定義した3つのPHPスクリプトを1つのpharにまとめてみます。インストーラではない純粋なアーカイブです。まずは、クラスを定義したファイルは以下の通りです。

Foo.class.php

<?php
class Foo
{
    public function getName() {
        return __CLASS__;
    }
    public function execute() {
        return 'This is ' . $this->getName();
    }
}

Bar.class.php

<?php
class Bar
{
    public function getName() {
        return __CLASS__;
    }
    public function execute() {
        return 'This is ' . $this->getName();
    }
}

Hello.class.php

<?php
class Hello
{
    public function getName() {
        return __CLASS__;
    }
    public function greet() {
        return 'Hello, world!';
    }
}

次に、上記3ファイルを1つのphar(test.phar)にまとめるPHPスクリプトですが、簡単な以下のようになります。

create_phar.php

<?php
$files = array('Foo.class.php', 'Bar.class.php', 'Hello.class.php');

// pharインスタンスを生成
$phar = new Phar(dirname(__FILE__) . '/test.phar', 0, 'test.phar');

// ファイルをアーカイブに追加
foreach ($files as $filename) {
    $phar[$filename] = file_get_contents($filename);
}

echo "created\n";

実行結果は次の通りで、pharを作成する際にphp.iniの設定「phar.readonly」が0である必要があります。

$ php -d phar.readonly=0 create_phar.php
created
$ ls test.phar
test.phar
$

また、phar拡張モジュールはストリームラッパーも提供しています。pharストリームラッパーを使う場合は以下の通りです。

create_phar_wrapper.php

<?php
$files = array('Foo.class.php', 'Bar.class.php', 'Hello.class.php');

// ファイルをアーカイブに追加
foreach ($files as $filename) {
    file_put_contents(
        'phar://test2.phar/' . $filename,
        file_get_contents($filename));

}

echo "created\n";

作成されたtest.pharを利用する側のコードですが、以下のような感じです。require/includeする際にpharストリームラッパーを使って、アーカイブされたファイルを指定します。

test_phar_client.php

<?php
// pharに含まれるファイルを取り出す
require_once 'phar://test.phar/Foo.class.php';
require_once 'phar://test.phar/Hello.class.php';

$foo = new Foo();
echo $foo->execute() . "\n";

$greet = new Hello();
echo $greet->greet() . "\n";

実行すると、以下のようになります。

$ php test_phar_client.php
This is Foo
Hello, world!
$ 

まとめ

ざっとですがpharについて紹介してみました。

PHPには発音の仕方が分からない名前のものが多いですが、「phar」はどう発音するんでしょうか。。。これが一番の問題点かも知れません。

phar拡張モジュールは、「PHP5.3でcoreに入れたいよ」とか「次期PEARであるPEAR2で使われるかも」とか、不確定ですがいろいろと情報がありますので、今後pharを見る機会が増えるのではないかと思います。

個人的にはもうちょっと深堀りしてみたいと思っていますので、この続きはDo You PHP?で;-)

2007年12月21日

なんて読むのかわからない
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人(a.k.a BTO)です

韓国大統領選挙に出馬するのを忘れていたと思っていたら、 いつの間にかmixi新CTOにノミネートされてた今日この頃、 みなさんいかがお過ごしでしょうか。 今日はちょっと趣向を変えて、ライトな感じのエントリでいこうかと思います。

ITエンジニアに英語が苦手な方が多いかと思います。 僕も英語が大の苦手で、英語に対してコンプレックスを持つ者の一人です。 そんな僕ですが、なんとか簡単な会話を英語でこなすことができるようになりました。 僕の英語の学習の課程は、以前のエントリ 「海外経験のない典型的理系人間が日常会話レベルの英語を話せるようになるまでの道のり」 で紹介したので、よかったら参照してください。

英語に限らず、IT業界にいると読み方のよく分からない単語が出てきます。 妙に省略された単語だと読み方がさっぱり分からない事がありますが、 通常の英単語であれば辞書の発音記号を見ればなんとなくわかります。 が、そこは英語苦手の多いIT業界。 勘違いやローマ字読みなどで一風変わった読み方に出会う事も少なくありません。

そこで今回は、読み方のよく分からない単語や、 面白い勘違いの読み方がある単語を大募集します。 コメント、TB、はてブなどで読み方のよく分からない単語をぜひ教えてください!!

参考までに僕の方でいくつかあげておきます。

alt - オルト

僕はいつも「オルト」と呼んでますが、 ローマ字読みで「アルト」と発音する方が多いようです。 「alternative - オルタナティブ」からきてるので、 「オルト」と呼ぶのが近いと思ってますがどうなんでしょうか。

warning - ウォーニング

やっぱりこれもローマ字発音で「ワーニング」と呼ぶ方が多いです。

fatal - フェイタル

ローマ字読みで「ファタル」というのを聞いた事があります。

allow - アラウ

(ry

prepare - プリペア

(ry

require - リクワイア

読み方知らない方が以外に多くいます。

MySQL - マイシクー

日本だと「マイエスキューエル」じゃないと逆に通じないでしょうか。

PEAR - ペア

PHPのライブラリを集めたアーカイブ群

CPAN - シーパン

「クーパン」ですか? もう分からない、助けて

参考

新版 UNIX 由来/読み方辞書が非常によくまとまってて面白いです。 これを読むだけでかなり解決するかと思われます。 ぜひ一読をおすすめします。

abbreviationとacronym

最後にちょっとしたトリビア。 IT用語には省略語が多いですが、省略語にはabbreviationとacronymの2種類があります。 acronymはそれを単語のように発音する省略語で、abbreviationはそうじゃないやつ。 なので、SCSI(スカジー)はacronymになりますが、USB(ユーエスビー)はabbreviationになります。

2007年12月20日

「酒徳カンファレンス」を開催します!
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは。さかとくちひろです。ウノウに入社して8ヶ月。名刺を交換する際、「以前お会いしましたよね?」と言われ、「すみません、それ別の酒徳さんです」と答えることに慣れてきた今日この頃、みなさまいかがお過ごしでしょうか。

そんな現状を打破すべく?、酒徳峰章さんと前々からあたためてきたイベント「酒徳カンファレンス」を来る1月26日(土)に開催します。

たんに「酒徳」つながりで話をするだけではイベントの意義が弱いと思いますので、Flash関連の真面目な勉強会にしたいと考えています。ゲストスピーカーとして、「3度の飯よりActionScript」で有名な、Flash界のスーパースター、新藤さかとく愛大さんも迎えることができました。

参加希望される方は、chihiro_sakatoku[at]unoh.netまで「酒徳カンファレンス参加希望」という件名でご連絡ください。

また、「俺もさかとくだから発表/ライトニングトークをしたい」という方や、「さかとくじゃないけど何か話したい」という空気の読めない方も歓迎しますので、お気軽にご連絡ください。

みなさまのご参加をお待ちしております。

12/21追記

おかげさまで募集定員の20名に達し、何名かの方からライトニングトークで話したいという申し出をいただきました。ありがとうございます。

会場の都合もあるので、ここで募集を一旦締め切らせていただきたいと思いますが、立ち見でも構わない、キャンセル待ちをしたいという方がいらっしゃいましたら、引き続きchihiro_sakatoku[at]unoh.netまでご相談ください。

本日まで参加申込していただきました方には、後ほど確認のメールをお送りします。

開催概要

イベント名
Flash勉強会(通称酒徳カンファレンス)
開催日時
2008/1/26(土) 14:00-17:00。終了後、有志で懇談会(渋谷周辺、18:00-)
会場
ウノウ株式会社(地図)
定員
20名(定員に達しましたので一旦締め切ります。詳しくは12/21の追記をご覧ください)
参加費用
無料。懇談会は実費。

スピーカー

酒徳峰章
発表内容 『VB/Delphiの終焉とFlex/AIRの幕開け』
酒徳千尋
発表内容 『Flash Lite Binary Hacks(予定)』
新藤さかとく愛大
発表内容: 未定

※発表時間は質疑応答を含めて一人当たり45-60分を予定しています。

2007年12月19日

プラッシュ(ブラックジャック)で使われているBGM
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは。中村です。先日、無料ゲームポータル「プラッシュ」に新しく追加されたゲーム、ブラックジャックのBGMを作曲担当しました。

Flashで再生している音源は低容量にするためにかなり圧縮されているため、mp3形式をこちらで公開させて頂きます。

もし、気に入ってくださる方がいらっしゃったら幸いです。

ちなみに、作曲はリズムトラック以外は電子ピアノで生(と言ってもライン入力ですが)で弾いてMTRに録音しました。演奏は上手ではありませんが、本職はエンジニアということで大目に見て貰えたらと思います。

2007年12月17日

Emacsでソースコード解析
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

週末に眼鏡と財布が壊れて踏んだり蹴ったりなbokkoです。


最近、週末に他の人が書いたソースコードを解析したりして遊んでいるのですが、
今回はその際によく使っているツールについて紹介したいと思います。


moccur-edit.el

これはソースコードを全体を検索する際によく使っています。
findとgrepをパイプでつなぐだけでも十分な気がしますが、
moccur-grep-findとmoccur-grep-gotoを組み合わせて使うと、
すぐさま該当箇所にジャンプできたりするので、楽々検索できます。
また、moccur-edit.elにはほかにも複数のファイルに散らばっているキーワードを
1つのバッファ上で編集できるなど非常に強力な機能が備わっているので、
Emacsを使うなら必ず入れておくのがオススメです。(tramp経由でmoccur-grep-findを実行するとすごく遅くなるそうですが)


gdb on Emacs

gdbはCやC++だとprintfデバッグだけではどうにもならないことが多々あるので、よく使っています。
基本的なコマンドは一通り使えるようになっといて損はないでしょう。
また、moccur-edit.elはEmacsの拡張なので当然ですが、gdbはEmacs上でも実行することができます。
Emacsのキーバインドがそのまま使えるのはもちろん、いちいちlistコマンドを使わずに、
別のバッファでプログラムの現在位置を確認しながらステップ実行したり、
ブレークポイントを可視化することができるので、Emacsに慣れている人ならgdbはコンソールで実行するよりも
そのままEmacs上で実行してしまう方がオススメです。

2007年12月11日

Ext JS 2.0正式版リリース - 1.xから2.0への移行のメモ
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

isogawaです。

以前紹介したJavaScriptフレームワークExt JSのメジャーバージョンアップである2.0の正式版が、先週末にリリースされました。

Ext 2.0が提供する機能については、以下のサンプルページをご覧いただくのが手っ取り早いでしょう。

さて、Ext 2.0は従来の1.xから大幅に刷新されており、残念ながら1.xとの互換性は高くありません。おそらく1.x用に書かれたコードの殆どは、そのままでは2.0で動作しないでしょう。以下にマイグレーション用のドキュメントが用意されていますが、かなりの量で、ひと通り目を通すだけでも大変です。

以下では、自分がこれまでに作成した1.x用のコードに対して2.0へのマイグレーションを行ってみた際に気付いた点をまとめてみました。ただし、以下の内容がマイグレーションのすべてを網羅しているわけではなく、また実際のところ、細々とした変更が結構あって、すべて覚えてなかったりするので万全ではない点、ご留意ください(例によって、間違ってるところがあるようでしたら、コメントなどで遠慮なくご指摘ください)。

以下のコードは抜粋です。全ソースは、お手数ですがこちらからダウンロードしてご覧ください。

グリッド

Ext.grid.GridはExt.grid.GridPanelに変更になりました。これは親クラスがObservableからPanelに変更されたためで、単なる名称の変更ではなく、従来のExt.gridとExt.GridPanelが統合されたものになっています。

従って根本的には、1.xのExt.grid.Gridと2.0のExt.grid.GridPanelは別物なのですが、Ext.grid.Gridだけのマイグレーションに限れば、従来との互換性はかなり高く、1.xのコードの多くはわずかな修正で移行できるのではないかと思われます。

以下は、Tutorial:Introduction to Ext 2.0にある非常にシンプルなグリッドの例を、1.1.1と2.0の場合で対比できるように書き直したものです。

Ext 1.1.1

var grid = new Ext.grid.Grid('grid-example', {
  ds: new Ext.data.Store({
    data:   myData,
    reader: myReader
  }),
  cm: new Ext.grid.ColumnModel([
    {header: 'Company',   width: 120, sortable: true, dataIndex: 'company', id: 'company'},
    {header: 'Price',     width:  90, sortable: true, dataIndex: 'price'},
    {header: 'Change',    width:  90, sortable: true, dataIndex: 'change'},
    {header: '% Change',  width:  90, sortable: true, dataIndex: 'pctChange'},
    {header: 'Updated',   width: 120, sortable: true, dataIndex: 'lastChange', renderer: Ext.util.Format.dateRenderer('m/d/Y')}
  ]),
  autoExpandColumn: 'company'
});
grid.render();

Ext 2.0

var grid = new Ext.grid.GridPanel({
  renderTo: 'grid-example',
  store: new Ext.data.Store({
    data:   myData,
    reader: myReader
  }),
  columns: [
    {header: 'Company',   width: 120, sortable: true, dataIndex: 'company'},
    {header: 'Price',     width:  90, sortable: true, dataIndex: 'price'},
    {header: 'Change',    width:  90, sortable: true, dataIndex: 'change'},
    {header: '% Change',  width:  90, sortable: true, dataIndex: 'pctChange'},
    {header: 'Updated',   width: 120, sortable: true, dataIndex: 'lastChange', renderer: Ext.util.Format.dateRenderer('m/d/Y')}
  ],
  viewConfig: {forceFit: true}
});
  • これはグリッドに限ったことではありませんが、Ext 1.xでは多くのコンストラクタで、その第1パラメータにそのオブジェクトの描画先となるHTML要素を指定していましたが、Ext 2.0ではこの指定は全面的に廃止されています。コンストラクタのパラメータはコンフィグオプションのみに変更され、要素の指定はコンフィグのapplyToまたはrenderTo(あるいはrender()メソッドのパラメータ)で指定します。

    上の1.1.1の例ではExt.grid.Gridコンストラクタの第1パラメータで指定しているHTML要素ID「grid-example」は、2.0の例ではrenderToコンフィグで指定しています。そして、applyTo/renderToコンフィグが指定してあるインスタンスは、明示的にrender()メソッドを記述する必要はなくなりました。

  • これも全体的に変更された点ですが、1.xでは明示的にインスタンスを生成する必要のあったコンフィグなどの多くが、2.0では簡略化されています。

    上の1.1.1の例ではグリッドでのカラムモデルにExt.grid.ColumnModelのインスタンスを指定していますが、2.0ではコンフィグオプションのcolumnsで、簡単に指定できるようになっています(従来通りの指定も可能です)。

  • グリッドは要素の横幅に対してカラムの幅を自動的に調整する機能があります。これは1.xでは、カラムにIDを割り振った上で、コンフィグオプションのautoExpandColumnにそのIDを指定していましたが、必然的に調整の対象となるのはひとつのカラムに限定されていました。2.0ではコンフィグオプションに「viewConfig: {forceFit: true}」と指定することで、各カラムの幅が調整されます。

グリッドパネルとツールバー

上述の通り、Ext 2.0ではExt.gridとExt.GridPanelがExt.grid.GridPanelに統合されました。Ext 1.xではグリッドをレイアウトに組み込むには、Ext.GridPanelのインスタンスを別途にあらためて作成する必要がありましたが、2.0では、従来Ext.GridPanelに対して行っていた指定を、Ext.grid.GridPanelのコンフィグにまとめられるようになりました。

また、1.xではグリッドパネルにツールバーを組み込むにはそのパネルのヘッダ/フッタを取得し、Ext.Toolbarのインスタンスを作成する必要がありましたが、2.0ではツールバーもtbarコンフィグでまとめて指定できるようになりました。

Ext 1.1.1

var grid = new Ext.grid.Grid('grid-example', {
  // 上のグリッドの例と同じなので省略
  // ...
  autoExpandColumn: 'company'
});
grid.render();

/* Grid Panel and Toolbar */
var gridPanel = new Ext.GridPanel(grid, {title: 'My First Grid'});
var gridPanelToolbar = new Ext.Toolbar(grid.getView().getHeaderPanel(true));
gridPanelToolbar.addButton({
    text: 'Click here to show dialog',
    handler: this.showDialog.createDelegate(this)
});

Ext 2.0

var grid = new Ext.grid.GridPanel({
  // 上のグリッドの例と同じなので省略
  // ...
  viewConfig: {forceFit: true},

  title: 'My First Grid',
  header: false,
  tbar: [{
    text: 'Click here to show dialog',
    handler: this.showDialog.createDelegate(this)
  }]
});

レイアウト

レイアウトは2.0で最も変更の大きいもののひとつで、クラス構造そのものが全面的に変更されています(詳細はExt 1 to 2 Migration Guide - Converting BorderLayout to 2.0をご覧ください)。

東西南北と中央の各リージョンにパネルを配していくというコンセプトは同様ですが、その手順は大きく異なります。

以下の例は、Extの利用例として多く見られる、ブラウザ画面の全体にレイアウトを配置するレイアウトのものです。1.xでは、これはExt.BorderLayoutの描画先にdocument.bodyを指定して行っていましたが、2.0ではExt.BorderLayoutは廃され、こうしたレイアウトを実現する、専用のExt.Viewportクラスが用意されています。

Ext 1.1.1

Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
var layout = new Ext.BorderLayout(document.body, {
  west: {
    title: 'West Panel',
    width: 200,
    split: true,
    collapsible: true,
    autoScroll: true
  },
  center: {
    tabPosition: 'top',
    closeOnTab: true,
    autoScroll: true
  }
});
layout.beginUpdate();
layout.getRegion('west').add(new Ext.ContentPanel('west'));
var center = layout.getRegion('center');
center.add(gridPanel);
center.add(new Ext.ContentPanel('tab', {title: 'Tab', closable: true}));
center.showPanel(gridPanel);
layout.restoreState();
layout.endUpdate();

Ext 2.0

Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
new Ext.Viewport({
  layout: 'border',
  items: [
    {
      region: 'west',
      contentEl: 'west',
      title: 'West Panel',
      width: 200,
      split: true,
      collapsible: true,
      autoScroll: true
    },
    {
      region: 'center',
      xtype: 'tabpanel',
      tabPosition: 'top',
      activeTab: 0,
      items: [
        grid,
        {contentEl: 'tab', title: 'Tab', autoScroll: true, closable: true}
      ]
    }
  ]
});
  • 1.xのExt.BorderLayoutでは、コンストラクタでは各リージョンのプロパティのみを指定し、実際のパネルの配置はbeginUpdate()からendUpdate()の間で順次add()していくという手順でしたが、2.0ではコンフィグで一括して行えるようになりました。

    また、リージョンをネストする場合、1.xでは入れ子ごとにExt.BorderLayoutインスタンスを用意し、Ext.NestedLayoutPanelを使って親のレイアウトに組み込んでいく必要がありましたが、2.0ではitemsコンフィグをネストするだけで、簡単に複雑なレイアウトを実現できるようになりました。

  • Ext.state.Managerを使ったレイアウトの復元は、1.xではrestoreState()を明示的に実行する必要がありましたが、2.0ではこれは必要なくなりました。

ダイアログ

Ext 1.xでのExt.BasicDialogやExt.LayoutDialogは2.0では廃され、Ext.Windowクラスに置き換えられました。Ext.Windowクラスは、Ext.Viewportクラスと同様にレイアウト構成などすべてコンフィグで行え、ボタンやキー操作などの定義もすべてコンフィグで行えるようになっています。

Ext 1.1.1

showDialog: function() {
  if (!dialog) {
    dialog = new Ext.LayoutDialog('dialog', {
      title: 'A Dialog',
      modal: true,
      width: 320,
      height: 240,
      shadow: true,
      proxyDrag: true,
      center: {
        tabPosition: 'top',
        closeOnTab: true,
        autoScroll: true
      }
    });
    dialog.addButton('Close', dialog.hide, dialog);
    dialog.addKeyListener(Ext.EventObject.ESC, dialog.hide, dialog);
    var dialogLayout = dialog.getLayout();
    dialogLayout.beginUpdate();
    dialogLayout.add('center', new Ext.ContentPanel('dialog-body', {title: 'Hello', autoScroll: true}));
    dialogLayout.add('center', new Ext.ContentPanel('tab', {title: 'Tab', autoScroll: true, closable: true}));
    dialogLayout.endUpdate();
  }
  dialog.show();
}

Ext 2.0

showDialog: function() {
  if (!dialog) {
    dialog = new Ext.Window({
      applyTo: 'dialog',
      title: 'A Dialog',
      modal: true,
      width: 320,
      height: 240,
      layout: 'fit',
      items: [{
        region: 'center',
        xtype: 'tabpanel',
        tabPosition: 'top',
        activeTab: 0,
        items: [
          {contentEl: 'dialog-body', title: 'Hello', autoScroll: true},
          {contentEl: 'tab', title: 'Tab', autoScroll: true, closable: true}
        ]
      }],
      buttons: [{
        text: 'Close',
        handler: function() {
          dialog.hide();
        }
      }],
      keys: [{
        key: Ext.EventObject.ESC,
        handler: function() {
          dialog.hide();
        }
      }]
    });
  }
  dialog.show();
}

2007年12月10日

デザイナの立場からの「デザイン依頼のコツ」
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは。yamazakiです。
このブログをご覧になっているのはエンジニアの方が多いと思いますので、デザイナの方とのやりとりをされている方も結構いらっしゃるはず。
社内で「どういうふうに依頼されるのがデザイナとしてはいいもの出てきやすい?」というお話を振られたので今回はそれについて書いてみようと思います。

※もちろんあくまでこれは私個人が思うところであり、全てのデザイナにあてはまるわけではないと思います。
ので、できればこれをご覧になったデザイナーの皆様も、「こういうふうに依頼してくれると力が発揮できる」というポイントなど書いていただけたら非常に嬉しいです。
また逆に、デザイナにはこういう点気をつけて欲しい、といった、エンジニア視点でのデザイナへのリクエストなどもいただけると嬉しいです。

----

ビジョン、ゴールを共有する

これは複数の人間が関わるプロジェクトなら当たり前といえば当たり前かもしれませんが…。

たとえば、サイトのリニューアルをするのであれば、
  • サイトをリニューアルするにいたった理由
  • これまでのサイトが抱えていた問題点についてどう考えているのか
  • リニューアル後に期待している効果は何なのか
など、色々な「事情」、「何をしたいのか」「何を求めているのか」があるはずですし、
新規に作るサイトであれば
  • どういう人向けに作ろうとしているサイトなのか
  • どういうサービスなのか
  • どういうビジネスモデルなのか
  • どうなったら成功なのか
など、色々な野望やコンセプト、ターゲットなどお考えのはずです。

通常、どんなサイトを作るにしても、デザイナよりも依頼者のほうが持っている情報量は多いはずですし、考えていること、こだわり、マインド、色々な部分において依頼者のほうが強いものを持っているはずです。それをできるだけ多く共有し、うまく巻き込んでいただけると、デザイナとしてもアイデア出しや絞り込みがしやすいですし、結果としてアウトプットもよいものが出やすいのではないかと思います。

できるだけ企画の早い段階から関われるように

企画のできるだけ早い段階から関わって口を挟んでいるほうが、デザイナの本来の能力を発揮しやすいです。
たとえば以前、エンジニアのかたがサイト構成や画面構成、UIをほとんど組み上げた段階で、「これをデザインしてください」と言われたことがありました。
正直、そこまで出来上がってしまっていると、変更のコストその他色々な要因で、デザイナとしてできることは、見た目を整える、くらいのことになってしまう場合があります。
もちろん、見た目を整える、というのもデザイナの大事な仕事なのですが、それよりももう少し前の段階から関わることができれば、サービス内容やターゲットに合った画面構成やサイト構成、インタラクションを提案して仕込むことができますので、結果としていいものがアウトプットされやすいと思います。

細かく指定しすぎない

例えば依頼者から「ここはこういうふうに」とこと細かな指示をいただいたり、「●●のサイトと同じような見た目にして」というような形で依頼をいただいた場合、デザイナ側では大抵その指定どおりに作ることになります。それが一番トラブルが少なく、余計な時間(つまりコスト)もかからず、お互いにとって「無難」だからです。
ですが、もしかしたらデザイナは発注者の考えるものよりももっといいアイデアを持っているかもしれません。(というか、持っているべき、ですね…)
指定はある程度細かくいただきたいですが、「ターゲットはこうで、コンセプトとしてはこうで、考えてるイメージとしてあるのは●●のサイトみたいなものなんだけど、もっといいアイデアがあればぜひ提案してほしい」といった、デザイナのアイデアが入り込む余地のある形で依頼をしていただけると、発注される方がどのような事を考えているのか理解しやすく、また色々な提案もしやすいので、最終的なアウトプットとしていいものになる可能性が高まるのではないかと思います。

「どこからどこまでやってほしいのか」をはっきりさせる

プロジェクトによっては、サイトの構成や文章などはすべて別のかたが考えて、デザイナはビジュアルを美しく仕上げること、に注力することもあるでしょう。
逆に文章、構成などひっくるめてサイトのオモテの部分はすべてデザイナがやる、ということもあります。
デザインの依頼をされる場合は、できるだけ「どこからどこまでを任せたいのか」という点をある程度はっきりさせておいていただけるとやりやすいです。

素材のご用意はお早めに

以前あったお話なのですが、依頼をいただいた段階ではロゴが決まっておらず、なかなかロゴなどの素材がいただけないということがありました。
ロゴやサイト内で使いたい素材などは、できるだけお早めにいただけないと、なかなか作業が進められないことがあります。
素材はできるだけ早めに決定稿をご用意いただけると、それだけ実際のデザインに時間の余裕もできますので、結果もよくなると思います。

できる限りのデータを共有する

例えば、サイトリニューアルの案件だった場合、
  • これまでのサイトのアクセスログ
  • ユーザ層、ターゲット層などについての様々なデータ
  • これまでにあった問い合わせ内容
といった何かしらのデータの蓄積がある場合もあると思います。そういったデータは可能な限りデザイナと共有するようにしてほしいと思います。
そうすると、デザイナ側でもデータを見て、依頼いただいた内容をさらに改善する提案もできますし、デザイナ的な視点に基づく疑問点や戦略的な問題など、色々と気づくことがあります。
せっかくデザイナに依頼するのですから、それは「デザイナ視点」での意見を得られるチャンスです。積極的に活用していただきたいと思います。

修正指示はできるだけ具体的に。そしてちゃんと理由を添えて。

例えば、「このページをもっと楽しい雰囲気に」といった類の修正依頼は、デザイナとしてはかなり困ります。
「楽しい雰囲気」というのは、人によって様々です。依頼者の考える「楽しい」とデザイナの「楽しい」がズレていると永遠に平行線になってしまいます。
もう少し具体的に、例えば「このページは子供も見るページなので、子供が喜ぶような、ポケモンとかそういうキャラクターが入ってるような感じで楽しさを出したい」など、例を交えながら伝えていただけると、イメージがつかみやすいです。
また、そこを直したいと思う理由は何なのか、も添えていただければ、「そういうことであれば、こういう形はどうでしょう?」と、修正以上の対応・提案ができる場合があります。「どうしてそのように変更したいのか」の部分も伝えていただけると、いい結果になると思います。

----

以上、ほとんどの部分は、デザイナがヒアリング・打ち合わせの際にできるだけ聞き出すべきところ、も多いのですが、こういったことをデザイナ側で知りたいと思っていることを考慮に入れていただいて、事前に資料などご用意いただくなどしていただけると、プロジェクトがスムーズに進み、よりよいアウトプットも出てくるのではないかと思います。

他にも書き忘れた点や、人によってこうしてほしい、といった部分があると思いますので、そのあたりはきっと他のデザイナの方が何か書いてくれるに違いない…と無駄に煽りつつ、今回は締めさせていただきます。

2007年12月 7日

Linuxをネットワーク経由で自動インストールする方法(後編)
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは、miyakeです。早く書くつもりだったのに前回からずいぶんと時間が空いてしまいました。今日は前回構築したPXEブート環境を用いて、いよいよOSの自動インストールに取りかかります。

■前回のフォロー

まず初めに、前回の内容について追加です。前回の手順でうまくインストールできなかったという情報がありましたので、ご紹介させて頂きます。

next-serverの指定をしないとインストール出来なかったという事例が紹介されています。前回の内容でうまく動かなかった方は、/etc/dhcpd.confへの追加設定を、

filename "pxelinux.0";
next-server 192.168.10.10;

のようにしてみてください。next-serverに指定するIPアドレスは、tftpサーバとして使用するマシンのIPを指定してください。前回の記事に沿って設定した場合は、dhcpdを動かしているマシンと同一になるはずです。

通常、next-serverの指定がない場合は、dhcpサーバのIPが適用されるはずなのですが、こういうケースもあるということで、指定しておいた方が無難かも知れません。

自分でいくつかの環境で試した限りではnext-serverの指定はあっても無くても問題なく動作したのですが、もしかするとルータのdhcp設定を有効にしている場合に失敗することがあるのかも知れません。正確な原因は分かっていないので、何かご存じの方はコメント等で教えて頂けるとありがたいです。

では、本題を進めましょう。

■kickstartインストール

CentOSなどRedHat系のLinuxを自動インストールするには、kickstartという仕組みを利用します。「kickstartとは何ぞや」という概略を、RedHat EL3のマニュアルから以下に引用させて頂きます。

システム管理者の多くは、マシンにRed Hat Enterprise Linuxをインストールするのに自動化されたインストール方法を使用したいと考えています。このニーズに応えて、Red Hatはキックスタートインストールを開発しました。キックスタートを使用すると、システム管理者はたった1つのファイルを作成するだけで、一般的なインストールで要求される質問に対するすべての答えをそのファイルに含ませることができます。

要するに「設定ファイル書けば、その内容でサーバインストールできるよ」ということですね。

本稿ではこのkickstartインストールを解説します。他のディストリビューションは知らないのですが、debianではpreseedという仕組みを使って自動インストールができるようです(未検証)。今更ですがエントリのタイトルは看板に偽りありでしたね。RedHat系以外を期待された方、申し訳ありません。

■Apacheのインストール

kickstartファイルやインストールディスクのデータをネットワーク経由で取得するには、HTTP, FTP, NFSのいずれかを使用します。ここでは内部用のApacheを立ち上げて、http経由でデータを読み込む方法を紹介します。

NFS経由でインストールすると、インストール後にNFSからファイルコピーができるというので便利かなと思ったんですが、自分の環境ではNFSを使用するとkickstartインストールはうまく動いてくれませんでした。

NFSエラー
SQUASHFS error: sb_bread failed reading block 0xXXXXX
SQUASHFS error: Unable to read cache block [XXXXXXX:XXXX]
SQUASHFS error: Unable to read inode [XXXXXXX:XXXX]
SQUASHFS error: sb_bread failed reading block 0xXXXXX
SQUASHFS error: Unable to read page, block XXXXXXX, size XXXX

みたいなエラーが出て、途中でインストールが止まってしまうという症状です。どなたか詳細をご存じの方がいらっしゃったらコメント等で情報をお寄せ頂けるとありがたいです。kickstartを使わずに手動インストールでNFSからデータを取得した場合は問題無かったんですが…

なので、今回はhttp経由でインストールすることにします。Apacheのインストール方法については割愛しますが、インストール用のファイルはLAN内からのみアクセス可能にしておくといいでしょう。

■OSイメージの準備

今回はhttpd経由でインストールするので、Apacheの公開領域にインストールデータを置きます。

もちろん、通常のインストールと同様に公開ミラーからインストールすることも可能です。とりあえず試してみるには、その方が手っ取り早いかも知れません。

ここでは一例として、こんな感じで/var/www/html/isoでアクセスできるようにしてみました。

sudo mount -t iso9660 -o loop /share/CentOS-5.0-x86_64-bin-DVD.iso /mnt/iso
sudo ln -s /mnt/iso /var/www/html/iso

■kickstartファイルの準備

kickstartファイルを一から自分で書くのは面倒なので、既存の物を引っ張ってきて、それを修正します。

OSをインストールすると、/root/anaconda-ks.cfg というファイルができます。このファイルは、そのサーバのインストール情報を書いたkickstartファイルになっています。

PXEブート用のサーバのものを使い回してもいいですし、インストール対象のサーバに一度手動でOSを入れて、そこから持ってくるのもありです。

sudo cp /root/anaconda-ks.cfg /var/www/html/ks.cfg

のように、こちらもhttpでアクセスできる場所に置きます。ファイルの所有者、パーミッションは適宜設定してください。

ファイルの内容はインストール方法によって変わりますが、一例としてVMware上に作ったPXEブート用サーバの物を載せておきます。

# Kickstart file automatically generated by anaconda.

install
cdrom
lang ja_JP.UTF-8
keyboard jp106
network --device eth0 --bootproto dhcp --hostname pxe
rootpw --iscrypted XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone Asia/Tokyo
bootloader --location=mbr --driveorder=hda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=hda
#part /boot --fstype ext3 --size=100 --ondisk=hda
#part pv.2 --size=0 --grow --ondisk=hda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512 --grow --maxsize=1024
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

%packages
@base
@core
@development-tools
@japanese-support
kernel-devel

■kickstartのカスタマイズ(基本設定)

こうして用意したkickstartファイルを、インストールしたい構成に合わせてカスタマイズします。

既に述べた通り、anaconda-ks.cfgにはそのサーバのインストール情報が記録されているのですが、HDDの初期化に関する項目はコメントアウトされています(clearpartの行より上は純粋なコメントです)。必要に応じてコメントを解除したり、自分の好みの設定を書いてやるといいでしょう。

次にインストールメディアを指定します。2行目の「cdrom」という記述を

url --url http://192.168.10.10/iso

のように変更します。ここで指定するURLを公開ミラーのもの(http://ftp.iij.ad.jp/pub/linux/centos/5.0/os/x86_64など)にすれば、インストール用のイメージを用意しなくてもOKです。

NFSから取得する場合は、

nfs --server=192.168.10.109 --dir=/mnt/iso/

のようにするといいはずです(自分はうまくいきませんでしたが)。

また、適当なところに「text」という一行を入れてやると、インストーラがテキストモードで動作します。特に指定しない場合は通常のGUIインストーラが立ち上がるのですが、テキストモードの方がサクサク動くし、表示も分かりやすいので個人的にはこの方がお勧めです。

あとは基本的に見たままなのですが、firewallやselinuxの設定も変更できます。CentOS5.0の標準インストーラではこの項目は自動的に有効になりますが、kickstartインストールの場合は、

firewall --disabled
selinux --disabled

とすることで、無効にした状態でインストールできます。

それから、「reboot」という行を書いておくことでインストール作業が終了した後に自動で再起動してくれます。これを入れておかないと相当不便なので、是非とも書いておきましょう。

■kickstartのカスタマイズ(%packageセクション)

%packagesセクションにはインストールするパッケージの一覧が入ります。ここにパッケージ名を書いておくと、標準のインストーラには登録されていない物もインストール可能です(インストールメディアに入っていない物は無理ですが)。

例えば、上記の「kernel-devel」の下にこんな感じで書き加えます。

ntp
zsh
screen
ncurses-devel
ruby
ruby-devel
net-snmp

■kickstartのカスタマイズ(%postセクション)

通常のインストールはパッケージまで入れたらおしまいですが、kickstartでは%postセクションでインストール後に実行するスクリプトを記述できます。

%post
chkconfig ntpd on

# user setting
useradd hoge
usermod -G wheel,apache hoge
chsh -s /bin/zsh hoge

# authentication
echo 'auth required /lib/security/$ISA/pam_wheel.so use_uid' >> /etc/pam.d/su
echo 'SU_WHEEL_ONLY yes' >> /etc/login.defs
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

# mail alias
echo "root: hoge@example.com" >> /etc/aliases
newaliases

echo "Server setup completed!" | mail root

とか。このあたりは好きに書いてください。

上記のように、%postセクションの最後でメールを送信してやると、インストール完了時にメールが飛んでくるので席を離れても安心です(もちろん途中で止まるとアウトですが)。

reboot指定をした場合、再起動がかかるのはこの%postセクションのスクリプトが実行された後になります。

■kickstartのリファレンス

kickstartにはこの他にも様々な機能があります。記述をミスしてもそこでインストール失敗にはならず、クリアできなかった部分だけ手作業での入力を求めたり、かなり賢いので試行錯誤して自分なりのkickstartを作ってみてください。

検索すれば資料はたくさんありますが、まずはRHELの公式マニュアルを一通り眺めてみるのがいいんじゃないかと思います。

■インストールに使用するkickstartの指定

こうして用意したkickstartファイルを、/tftpboot/pxelinux.cfg/default(前回の方法に沿った場合)で指定します。

default centos5_64
prompt 1
timeout 10

label centos5_64
kernel vmlinuz
append ks=http://192.168.116.10/ks.cfg noipv6 load initrd=initrd.img devfs=nomount
#append ks=nfs:192.168.10.10:/tftpboot/ks.cfg load initrd=initrd.img devfs=nomount

のように、appendの行に「ks=」でkickstartファイルを指定します。コメントアウトしているのはNFS使用時の設定です(手元ではうまく動かなかったけど)。

複数のインストール設定を使い分ける場合は、「label」以下をコピーして別名で用意し、「prompt」の設定を長くして(1/10秒単位)ブートプロンプトから「boot:linux ks=…」のようにします。また、IPアドレスでkickstartを使い分ける方法もありますが、ここでは割愛します(未検証)。

■まとめ

以上、自動インストールのTipsを2回に渡ってお送りしました。自分自身まだまだ理解の浅い未熟者ですが、皆さんの参考になれば幸いです。不備や追加情報があればコメント(はてブ含む)やTBなどでご指摘ください(特にNFS関連の情報歓迎)。

またこのエントリを書くに当たってWeb上の様々なページを参考にさせて頂きました。全てを紹介することはできませんが、代表として以下のサイトをご紹介させて頂きます。

2007年12月 3日

symfonyでよくあるトラブル
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

yukiです。

今回はsymfony+MySQLを使って開発していた際に遭遇したトラブルとその対処を紹介したいと思います。

(1) ビルドしたPropelクラスで、DATETIME値が'0000-00-00 00:00:00'の時

SQLとしては問題なくとも、getTimeStampで取得する際にエラーになります。
NULL値を使うのが一番なのですが、外部の設計だったりするなど今回は変更できない場合に該当しました。
symfony側でもtrac で認識はされていますが、Creole の問題として対処しないことになっているようですので、今度はCreoleのtrac を見てみると、対処されているのがわかり、freeze化していれば影響は該当サイトのみにとどまりますので、今回は自作パッチを当てて対処しました。
そのうちsymfony側で対応してくれることを期待しておきます。

(2) カラム名に予約語を使わない

これもありがちですが、カラム名に「count」などの予約語を使うと、自動生成されたPropelのBaseオブジェクトを利用しようとすると、オブジェクト定数として利用しているため二重宣言となり、FATALエラーとなります。(phpNameでエイリアスをつけても駄目)propel-build-modelコマンドは普通に通過しますので見落としますが、注意してください。

(3) redirect での引数の型が違う

これも若干はまりどころですが、redirectする際、'module/action'と文字列で'/'で区切って記述しますが、routingを利用して引数も渡したい場合、素直に書くと'foo/bar/variable'となります。
しかしこのように正直に書いても'variable'が絶ち落とされてしまいます。
この場合はどうするかというと、まずrouting.ymlで下記のように書いてあるものとして、

foo_bar_hoge:
  url:      /foo/bar/:hoge
  param:    { module: home, action: bar }

次に、redirectメソッドの引数は素直に書くのではなく、配列で渡します。

$this->redirect(array('module' => 'foo', 'action' => 'bar', 'hoge' => 'variable'));

これで正しくリダイレクトされ、引数も渡されます。

この様に若干ドキュメントに書いていないトラブルはあるものの、逆に書いていない部分で便利な機能があったりしますので(特にヘルパー)、ぜひ一度ソースを読んでみてはいかがでしょうか。

ソフトウェア開発におけるハリー・ポッターは?
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは! やまもと@テスト番長です。

前回のエントリでご案内したQA勉強会を先日無事開催致しました。
集まってくださった皆様と非常に有意義な時間を過ごす事が出来ました。ありがとうございました。
またいずれ何かしら出来ればと思っておりますので、その際は宜しくお願い致します。

さて、今日は面白い小話を見つけましたので、ご紹介したいと思います。
ITコンサルタントの草分け、「オレンジジューステスト」の話でも有名な、ジェラルド.M.ワインバーグ氏へのインタビューです。

Interview with Jerry Weinberg
http://www.citerus.se/kunskap/pnehm/pnehmartiklar/interviewwithjerryweinberg.5.484cc23b1165f30e75680002483.html

インタビューの後半は品質の問題について話が進んでいくのですが、
一番最後の質問にこうありました。

Q:もしあなたがソフトウェア開発におけるJ.K Rowlingだとしたら、誰をハリー・ポッターにしますか?

A: ええと、私は(J.K Rowlingのような)億万長者ではないので適切かどうか分かりませんが、ハリーは、魔法を使えるのにも関わらず「彼はただのテスターだから」と値切られるテストマネージャーにするでしょう。
ヴォルデモートは、「いいえ」と言うことが出来ないか、ハリーのいうことを聞かないプロジェクトマネージャーたちだと思います。


流石の表現力です。自分も「魔法」を身に付けたいと切実に思いますが、この例えでいくとホグワーツはどこになるのでしょうね。