去年の自分

ふと去年の今頃のブログを見てみると,すごいことになってた.

去年の今頃は,ちょうど修士論文真っ最中で徹夜しまくりの日々.

ところで,最近↑のブログにアクセスが多くなってきた(といっても絶対量は少ないが).昨年修士論文からの現実逃避で始めたブログだけど,現実逃避で見に来る人が今年も結構いるらしい.

Factory Method

デザインパターンの「FactoryMethod」の意味(というかメリット)を今日理解した.でも言葉で説明するのは難しいな….

たとえば,

Product item = new HogeProduct(); // HogeProductはライブラリとして提供される

というコードがあるとする.これは,ライブラリとして提供されるHogeProduct(これはProductクラスのサブクラス)のインスタンスを生成し,HogeProductという「製品」を作る例である.

プログラムがこのように書かれていると,ライブラリ作者がHogeProductの名前をHigeProductに変更したときに,ライブラリを使う側の人も作ったプログラムを変更する必要がある.つまり

Product item = new HigeProduct(); // HogeProductの名前が変わった

に書き換えなければならない.これは大変.

そこで,Factory Methodの出番.

Factory Methodでは,CreatorクラスにProductクラスを「作る」メソッドを用意しておき,それぞれを継承したさまざまなConcrete Creatorクラスからそれに対応するConcrete Productクラスを「作る」.ここで「作る」というのは,Concrete Productクラスのコンストラクタを呼び出してインスタンスを生成することになる.

このとき,これらのクラスを使う側としては,何かのCreatorクラスのインスタンスをもっておけば,何がどうやってできるかを知らなくても何かのProductが手に入る.つまり,

Creator factory = new HogeCreator();// 何らかのConcrete Creator(ライブラリとして提供される)
Product item = factory.create(); // 何が作られるかは知らない

で,これの何が嬉しいかというと,使う側はHogeCreatorクラスが「作る」Productのクラス名を知らなくてよい,つまり,HogeCreatorクラスを作る人がある時勝手に名前を変更したとしても,その影響が使う側には及ばないということ.これは,newによるコンストラクタ呼び出しを隠ぺいすることによって実現されている.

Java言語で学ぶリファクタリング入門

Java言語で学ぶリファクタリング入門

では,Factory Meghodの使う例として,Creator,Concrete Creator,Productクラスがひとつになっているのがある.

public class Hoge(){                // ProductでCreatorでConcrete Creator
public static Hoge newHige(){
return new Hige();
}
~略~
private class Hige{                 // Concrete Product
~略~
}
}

実用的にはこんな感じで使うのかな~.この場合,Higeクラスの名前はなんでも良い(つまり,いつ勝手に変更しても他に影響は及ばない)ということになる.

読書

本屋に行って,そのあと近くのカフェに行ってきた.河原町通り沿い,三条と四条の間の路地裏にあるカフェ.

f:id:yasutomo57jp:20090125150000j:image

で,本屋では何を買ったかというと…

エンジニアのための時間管理術

エンジニアのための時間管理術

時間管理は大切.エンジニアじゃないけど,ほとんどそれに近い生活をしてるので参考になるかと.

もう一冊,

Java言語で学ぶリファクタリング入門

Java言語で学ぶリファクタリング入門

今後いろいろ他人が書いたコードを見る機会が出てくるので,リファクタリングの勉強もしておこうかと思って.ざっと見た感じ,デザインパターンとも絡んでいて面白そう.

先日買った「集合知プログラミング」,「RESTful Webサービス」も早く読まないと….

そろそろPythonもかじっておくか

「集合知プログラミング」という本を読み始めた.これは集合知の使い方やそれを使ったサービスの作り方に関する本.

で,この本ではサンプルコードがPythonで書かれてある.そこでRuby党だけどPythonも押さえておこうということで,Pythonをちょっとかじってみた.

とりあえず何も読まずにカンだけでどこまでいけるかやってみる.(とりあえず,ブロックはインデントで表現されるということだけ知ってる)

まず最初はhello worldから.

print "hello world"

実行してみると,

hello world

よし.動いた.

次に関数を作ってみる

def hello():
print "hello world"
hello

実行してみると

(何も起きなかった)

あれ?Rubyと違って括弧は省略できないぽい.(嘘かも知れません.知らないので.)

def hello():
print "hello world"
hello()

実行してみると.

hello world

よし,動いた.

で,さっきの括弧なしでhelloを呼び出したときの実行結果を思い出してみる.エラーではなかった.ということは・・・?もしかして関数ポインタ的(?)なことができる?と思ってやってみた.

def hello():
print "hello world"
var = hello
var()

実行してみると.

hello world

お~!!素晴らしい.調子に乗って指定した回数だけ指定した関数を実行する関数を書いてみた.

def iter(num,func):
for i in range(num):
func()
def hello():
print "hello world"
iter(5,hello)

実行してみると

hello world

hello world

hello world

hello world

hello world

できた~.素晴らしい.Pythonは面白いかもしれない.

集合知プログラミング

集合知プログラミング

一段落

とあるプロジェクトSの仕事が一段落した.*1

このプロジェクトでは迷子探しとかの基礎となる人物検出・追跡のプログラムなどなどを作った.

で,焼肉に連れて行ってもらうことになった!

id:gabariさんも一緒にどう?焼肉小倉優子とか.

*1:と言っても,プログラムが完成しただけで,現地(このプログラムを稼働させるショッピングモール)に持ち込んでチューニングとかいろいろ必要だけど.

インストアライブ

梅田のタワレコでの広沢タダシのライブ(※高校の時だから・・・8年くらい前.その頃は熊木杏里のインストアライブにも行ってた.)以来,久しぶりにインストアライブを観た.

先日,三条のJEUGIAで山田兎という人のライブを観て,今日はCanteという2人組のライブをちらっと観た.

インストアライブは客とパフォーマーの距離が近くて好き.今日は時間がなくて観たというよりほとんど通りかかっただけだったけど,今度はあらかじめ時間をチェックして見に行きたい.

さらにSQLiteManagerをインストールしてみた

PHPがインストールできていれば*1SourceForgeのSQLiteManagerのページにあるDownloadからsqlitemanagerをダウンロードし,解凍してApacheから見える(ブラウザでアクセスできる)適当な場所に解凍する.

SQLiteManagerをインストールしたページ(index.php)をブラウザで開くと,英語のページが出てくる.右の方のlanguageでJapaneseを選択すれば日本語になるが,EUC-JPなので,文字化けする.

そこで,ここにしたがってUTF-8化する.少し補足すると,ファイルをダウンロードし,解凍するとlangというフォルダができるので,そのlangの中身を上でインストールしたSQLiteManagerのlangフォルダへ上書きする.

Windows VistaにApache+PHPをインストールしてみた

まずは,Apacheのインストール.Apacheのサイトからダウンロードしてくる.インストーラなので楽勝でインストール.

%Apacheインストール先%\conf\http.confを編集するときにいちいち管理者権限を聞かれるのがうざいのでhttp.confの編集権限を自分につける.(右クリック⇒プロパティ⇒セキュリティ⇒編集⇒追加⇒選択するオブジェクト名を入力してください 欄に自分のユーザ名を入れる⇒グループ名またはユーザ名のところに自分が追加されるので,それを選択⇒下のアクセス許可の欄の,フルコントロールにチェック)

次に,PHPのサイトからダウンロードしてくる.適当に解凍して,C:\phpとかにコピー.

そしてPHP実行ファイルの場所をVistaに教えてあげる(パスを通すというやつです).

やり方は,マイコンピュータのアイコンを右クリック⇒プロパティ⇒設定の変更⇒詳細設定⇒環境変数⇒システム環境変数の表の中に,Pathという行があるので,ダブルクリック⇒変数値の欄に,C:\phpなど先ほどPHPをコピーしたフォルダを追加.このとき「;」で区切る.

これでPHPのパスが通りました.

あとは,ここここを見ながら設定をする.

最後に,

<?php phpinfo(); ?>

とだけ書いたファイルを test.php とかいう適当な名前でApacheのDocumentRootなフォルダ(デフォルトだと%Apacheインストール先%\htdocs)にぶち込み,ブラウザからアクセスしてみる.バージョン情報みたいなやつが表示されたら勝ち.

なんか悲しい

今日,とあるプロジェクトの実装ミーティングに参加しました.

あるDBシステムを作るんですが,DBMSとして何を使うかというときに,Aさん:「MySQL使ってます」Bさん:「やっぱMySQLだよね~」的な空気に.大したシステムではないので,SQLiteをプッシュしたんですが,「何それ?」的な感じ.

で,DBにアクセスするCGIを作る話になって,何でやるかというときに,また….PHPしかない的な空気に.RubyかPythonでやりたかったけど,知名度低い?おかしいな….

Visual Studio (Visual C++) 2005/2008で特定のWarningを黙らせる方法

Visual Studioでコンパイルしていると,C4290とかC4996がうざいので黙らせる.

  1. プロジェクトのプロパティを開き
  2. 構成プロパティ⇒C/C++⇒詳細
  3. 指定の警告を無視する の欄に,番号をセミコロンで区切って入力

f:id:yasutomo57jp:20090105033925j:image

ちなみに,C4290は,VC++がthrowを完全にサポートしていないのが原因.

C4996はよくわからないけど,「VC++がもっといい(安全な)関数を用意してやってるんだからこっちを使っとけ,将来的にはこの関数は使えなくします」的な警告ぽい.VC++独自拡張ぽいので従う必要なし.

というかgccとVC++で同時に開発してるといろいろうざいな….