GUIアプリケーションはCocoaのお陰で非常に簡単に作れるのはサンプルチュートリアルで体感したのですが、ちょっとした実験や勉強用のプログラムで、Interface Builderをいじくるのは面倒だったのでコマンドラインをチョイス(こうやってInterface Builderの勉強が遅れるという)。
続きを読むでHello Worldスクリプト。
]]> まずXcodeで、新規プロジェクトを作成する普通にMacアプリケーションを作るのであれば
を選択するのだけど、今回はコマンドラインで作りたかったので、
を選択。
適当に保存ディレクトリとプロジェクト名を入力して準備完了。今回は「HelloWorld1」というプロジェクト名に。
「HelloWorld1.m」というソースファイルがあるので、それを開くと実はすでにHello Worldが表示出来るサンプルコードが入っていたりする。が、いったんそれを消して教科書通りに自分で打ち込んでみる。
#include <Foundation/NSObject.h> #include <stdio.h> @interface HelloWorld : NSObject - (void) hello; @end @implementation HelloWorld - (void) hello{ printf("Hello World.\n"); } @end int main(int argc, char **argv){ id obj = [HelloWorld alloc]; [obj hello]; return 0; }
もうね、一つ一つのコードの意味を調べていったらキリがなかったので、これはこうゆうものだと今は流しておくことにした。作っているうちに理解が進むと…いいなぁ。ほとんどC言語と一緒なので分かりやすいといえば分かりやすいけど、そもそもC言語自体を勉強したのが数年以上前でその間、いっさい使っていなかったので忘れたに等しい。
こいつを「ビルドして進行」すると、~/HelloWorld1/build/Release/HelloWorld1 というバイナリが出来るので、ターミナルで ./HelloWorld1 と実行すると「Hello World.」と表示される。
Xcodeのメニュー「実行」→「ターミナル」(ショートカット:コマンド+シフト+R)でXcode内にターミナルが表示されて、そこにコンパイルから実行結果まで表示することができるのでお手軽。
次回は、標準入力を使ったHello Worldを作ってみよう。
]]>うわぁぁ…
年齢が41歳って!41歳って!!
もう少し頻繁に書いてみませんか。
すいません><
でもフリーター目指すのはどうかと思います><
]]>CakePHPじゃなくてもカスタマイズすれば使えますが、基本的にはCakePHPのコンポーネントとして使うように設計しました。データベースを使って全絵文字を取得する方法なのでパフォーマンスはあまり宜しくないです…。どなたかCakePHPらしい使い方で、なおかつパフォーマンスの優れた方法をご存知であればご教授くださいませ。
それでは、続きを読むで。
]]> 仕様DoCoMoとau、Softbankの絵文字の互換性を持たせていますが、一番絵文字の少ないDoCoMoに合わせてあります。
また、それでも対応する絵文字の存在しないものはだいたいテキストを表示するようにしています。そこら辺は、データを編集すればカスタマイズが可能なので、ご自由にどうぞ。
以下のZIPファイルをダウンロードしてください。
色々入っていますが、必要なのは/components/emoji.phpとemoji_datas.sqlと/images/emoji/*の3つです。
それ以外のファイルは、サンプルファイルなので、いちいちコントローラを作るのが面倒な人は利用してみてください。たぶん動きます。
絵文字のデータを格納しているテーブルを作成します。phpMyAdminか、直接SQLを実行してデータをインポートしてください。emoji_datas というテーブル名にしていますが、適宜名前を付け替えても大丈夫です。
emoji.php を components に配置したら、コントローラを作成します。
$emojiData = $this->EmojiData->findAll(); $this->set('emoji',$this->Emoji->EmojiData($emojiData));
こんな感じで、emoji_datas からデータを取得して、コンポーネントの Emoji->EmojiData に渡して $emoji としてビューに出力しています。これだけで終わりです。
ビュー側では、渡された絵文字データを絵文字ID指定して表示すれば各キャリア/端末に合った形で出力します。
echo $emoji['1']; echo $emoji['15'];
どの数字を指定すればいいの?ってな時のために対応表を置いておきます。基本的にDoCoMoに合わせているので、DoCoMoの絵文字番号と一致しています。
ID | 画像 | 説明 |
---|---|---|
1 | 晴れ | |
2 | 曇り | |
3 | 雨 | |
4 | 雪 | |
5 | 雷 | |
6 | 台風 | |
7 | 霧 | |
8 | 小雨 | |
9 | 牡羊座 | |
10 | 牡牛座 | |
11 | 双子座 | |
12 | 蟹座 | |
13 | 獅子座 | |
14 | 乙女座 | |
15 | 天秤座 | |
16 | 蠍座 | |
17 | 射手座 | |
18 | 山羊座 | |
19 | 水瓶座 | |
20 | 魚座 | |
21 | スポーツ | |
22 | 野球 | |
23 | ゴルフ | |
24 | テニス | |
25 | サッカー | |
26 | スキー | |
27 | バスケットボール | |
28 | モータースポーツ | |
29 | ポケットベル | |
30 | 電車 | |
31 | 地下鉄 | |
32 | 新幹線 | |
33 | 車(セダン) | |
34 | 車(RV) | |
35 | バス | |
36 | 船 | |
37 | 飛行機 | |
38 | 家 | |
39 | ビル | |
40 | 郵便局 | |
41 | 病院 | |
42 | 銀行 | |
43 | ATM | |
44 | ホテル | |
45 | コンビニ | |
46 | ガソリンスタンド | |
47 | 駐車場 | |
48 | 信号 | |
49 | トイレ | |
50 | レストラン | |
51 | 喫茶店 | |
52 | バー | |
53 | ビール | |
54 | ファーストフード | |
55 | ブティック | |
56 | 美容院 | |
57 | カラオケ | |
58 | 映画 | |
59 | 右斜め上 | |
60 | 遊園地 | |
61 | 音楽 | |
62 | アート | |
63 | 演劇 | |
64 | イベント | |
65 | チケット | |
66 | 喫煙 | |
67 | 禁煙 | |
68 | カメラ | |
69 | カバン | |
70 | 本 | |
71 | リボン | |
72 | プレゼント | |
73 | バースデー | |
74 | 電話 | |
75 | 携帯電話 | |
76 | メモ | |
77 | TV | |
78 | ゲーム | |
79 | CD | |
80 | ハート | |
81 | スペード | |
82 | ダイヤ | |
83 | クラブ | |
84 | 目 | |
85 | 耳 | |
86 | 手(グー) | |
87 | 手(チョキ) | |
88 | 手(パー) | |
89 | 右斜め下 | |
90 | 左斜め上 | |
91 | 足 | |
92 | くつ | |
93 | 眼鏡 | |
94 | 車椅子 | |
95 | 新月 | |
96 | やや欠け月 | |
97 | 半月 | |
98 | 三日月 | |
99 | 満月 | |
100 | 犬 | |
101 | 猫 | |
102 | リゾート | |
103 | クリスマス | |
104 | 左斜め下 | |
105 | phoneto | |
106 | mailto | |
107 | faxto | |
108 | iモード | |
109 | iモード(枠付き) | |
110 | メール | |
111 | ドコモ提供 | |
112 | ドコモポイント | |
113 | 有料 | |
114 | 無料 | |
115 | ID | |
116 | パスワード | |
117 | 次項有 | |
118 | クリア | |
119 | サーチ(調べる) | |
120 | NEW | |
121 | 位置情報 | |
122 | フリーダイヤル | |
123 | シャープダイヤル | |
124 | モバQ | |
125 | 1 | |
126 | 2 | |
127 | 3 | |
128 | 4 | |
129 | 5 | |
130 | 6 | |
131 | 7 | |
132 | 8 | |
133 | 9 | |
134 | 0 | |
135 | 決定 | |
136 | 黒ハート | |
137 | 揺れるハート | |
138 | 失恋 | |
139 | ハートたち(複数ハート) | |
140 | わーい(嬉しい顔) | |
141 | ちっ(怒った顔) | |
142 | がく〜(落胆した顔) | |
143 | もうやだ〜(悲しい顔) | |
144 | ふらふら | |
145 | グッド(上向き矢印) | |
146 | るんるん | |
147 | いい気分(温泉) | |
148 | かわいい | |
149 | キスマーク | |
150 | ぴかぴか(新しい) | |
151 | ひらめき | |
152 | むかっ(怒り) | |
153 | パンチ | |
154 | 爆弾 | |
155 | ムード | |
156 | バッド(下向き矢印) | |
157 | 眠い(睡眠) | |
158 | exclamation | |
159 | exclamation&question | |
160 | exclamation×2 | |
161 | どんっ(衝撃) | |
162 | あせあせ(飛び散る汗) | |
163 | たらーっ(汗) | |
164 | ダッシュ(走り出すさま) | |
165 | ー(長音記号1) | |
166 | ー(長音記号2) | |
167 | カチンコ | |
168 | ふくろ | |
169 | ペン | |
170 | 人影 | |
171 | いす | |
172 | 夜 | |
173 | soon | |
174 | on | |
175 | end | |
176 | 時計 | |
177 | iアプリ | |
178 | iアプリ(枠付き) | |
179 | Tシャツ(ボーダー) | |
180 | がま口財布 | |
181 | 化粧 | |
182 | ジーンズ | |
183 | スノボ | |
184 | チャペル | |
185 | ドア | |
186 | ドル袋 | |
187 | パソコン | |
188 | ラブレター | |
189 | レンチ | |
190 | 鉛筆 | |
191 | 王冠 | |
192 | 指輪 | |
193 | 砂時計 | |
194 | 自転車 | |
195 | 湯のみ | |
196 | 腕時計 | |
197 | 考えてる顔 | |
198 | ほっとした顔 | |
199 | 冷や汗 | |
200 | 冷や汗2 | |
201 | ぷっくっくな顔 | |
202 | ボケーっとした顔 | |
203 | 目がハート | |
204 | 指でOK | |
205 | あっかんべー | |
206 | ウィンク | |
207 | うれしい顔 | |
208 | がまん顔 | |
209 | 猫2 | |
210 | 泣き顔 | |
211 | 涙 | |
212 | NG | |
213 | クリップ | |
214 | コピーライト | |
215 | トレードマーク | |
216 | 走る人 | |
217 | マル秘 | |
218 | リサイクル | |
219 | レジスタードトレードマーク | |
220 | 危険・警告 | |
221 | 禁止 | |
222 | 空室・空席・空車 | |
223 | 合格マーク | |
224 | 満室・満席・満車 | |
225 | 矢印左右 | |
226 | 矢印上下 | |
227 | 学校 | |
228 | 波 | |
229 | 富士山 | |
230 | クローバー | |
231 | さくらんぼ | |
232 | チューリップ | |
233 | バナナ | |
234 | りんご | |
235 | 芽 | |
236 | もみじ | |
237 | 桜 | |
238 | おにぎり | |
239 | ショートケーキ | |
240 | とっくり(おちょこ付き) | |
241 | どんぶり | |
242 | パン | |
243 | かたつむり | |
244 | ひよこ | |
245 | ペンギン | |
246 | 魚 | |
247 | うまい! | |
248 | ウッシッシ | |
249 | ウマ | |
250 | ブタ | |
251 | ワイングラス | |
252 | げっそり |
勉強するにはまずチュートリアル系のサイトを見て回るのが一番良いだろうと検索してみた所、以下のサイトが初心者にぴったりな内容でした。
そして、昨日帰りに寄った本屋で見つけて即購入した詳解Objective-C 2.0 荻原 剛志(著)は素晴らしい内容でした。
でした、っていうかまだ全然読み切れてないんですが、これがあれば当分は大丈夫そうです。あと、どうでも良いですけど、帯にMacOS X iPhone
とか書いてありましたが、内容にiPhoneはいっさい出てきません。まぁ、最新情報だよーという編集のあおり文句なのだと思いますが。
これからどんどん勉強して、アプリケーションを作って、ブログで公開していきます。なにか勉強用に良いサイトや本などありましたら教えてくださいませ。
]]>こんな風に、レベルと経験値が表示されて、6つの項目のグラフが生成されます。ただ、一通りランキングに入っているサイトのグラフを見てもどれもみな同じ形をしているような…。もう少し差別化されてもいいのかなーとは思います。
こういったブログを元にしたランキング系サービスは、アイデア次第でいろいろできそうですね。
個人的にはブログバトラーは秀逸なサービスだと思います。
]]>先日、紹介したCakePHPでメールを送信すると一緒に、CakePHPの初期セットとしておけば、サイト開発がさらに楽になるかと思います。
簡単な仕様としては
って感じで、特に目新しい機能はないですが、公開しておきます。
]]> インストール方法インストールは非常に簡単。以下の、thumbmake.php を保存してコンポーネントディレクトリに配置するだけです。
拡張子が .phps になっていますが、 .php に変更して 配置してください。
サムネイルコントローラ(今回は thumb_controller.php とします)から Thumbmake を読み込みます。
class ThumbController extends AppController { var $name = 'Thumb'; var $uses = null; //modelを使わない var $autoRender = false; //layoutを使わない var $components = array ('Thumbmake'); var $pageTitle = 'サムネイル'; function index(){ //サムネイルの画像サイズを指定 $width = 100; $height = 100; //元画像のファイルパスと保存先をセット $this->Thumbmake->setImage(WWW_ROOT . 'files' . DS . 'src.jpg', WWW_ROOT . 'files' . DS . 'thumb' . DS . 'dst.jpg'); //リサイズ(どちらかに合わせてリサイズした上で、指定の大きさに切り抜く) if($this->Thumbmake->resizeCrop($width,$height)){ //リサイズしたサムネイル画像を表示する $this->Thumbmake->disp(); }else{ $this->cakeError('error404',array(array('url'=>'Error'))); } } }
ソースとなる元画像のファイルパスと、サムネイルの保存先のファイルパスを setImage() で指定し、width と height を決めて、 resizeCrop() でリサイズして、 disp() で画像を表示しています。disp() は単にサムネイル画像を読み込んで表示しているだけなので、viewに画像のパスをセットすれば、普通に view を使うことができます。
if($this->Thumbmake->resizeCrop($width,$height)){ $this->set('image', 'files' . DS . 'thumb' . DS . 'dst.jpg'); //view へセット }else{ $this->cakeError('error404',array(array('url'=>'Error'))); }
リサイズ方法には3つの方法があります。
この Thumbmake はキャッシュなどはしないので、常にサムネイル画像を生成して上書き保存しますので気をつけてください。
最近よくある、URLにパラメータを指定してサムネイル画像を生成する方法を利用することもできます。例えば以下のような感じです。
これだけだと意味が分かりませんね。
CakePHPは、URLをスラッシュ区切り(環境によって違いますが)にして、パラメータを受け取っているので、それを利用して、thumbコントローラの urlImage() というメソッドに /100x80/list/files/src.jpg というパラメータを受け渡しています。
となっています。
上記の例だと、 /files/src.jpg という画像を /files/src_100x80_list.jpg というサムネイル画像で保存します。こちらの方法は、基本的に元画像と同じディレクトリに保存されます。変更したい場合は、 thumbmake.php を直接いじってください。
urlImage() メソッドは以下のようになります。
function urlImage(){ $this->autoRender = false; //URLのパラメータを取得 list($width,$height) = $this->Thumbmake->getParam($this->params); //リサイズ if($this->Thumbmake->resizeCrop($width,$height)){ $this->Thumbmake->disp(); }else{ $this->cakeError('error404',array(array('url'=>'Error'))); } }
普通のサムネイル化と変わりませんが、URLからパラメータを受け取るために getParam() というのを使っています。これが、setImage() の代わりになります。その後は、resizeCrop() / width() / height() と好きなのを選んでリサイズしてください。
ただ、こちらの方法もキャッシュはしないので、アクセスされるたびにサムネイル画像を生成して、サーバによろしくありません。というか、実験した所、専用サーバでも簡単にCPUが100%になってしまいました。そこで、CakePHPも積極的に利用している mod_rewrite を使って回避してみます。
サムネイル画像がすでに生成されていた場合は、普通に画像へのアクセスにし、生成されていなかった場合は、urlImage()メソッドに渡して生成してあげる…といった感じです。
を開いて、以下のように記述してください。
<IfModule mod_rewrite.c> RewriteEngine On #It passes to the controller who resizes it when there is no image of the object, and it generates it. RewriteCond %{REQUEST_FILENAME} files/[a-z0-9_]+_list¥.jpg$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/([a-z0-9_]+)_([0-9]+x[0-9]+)_list¥.jpg$ /thumb/urlImage/$2/list/files/$1.jpg #↓元からあったやつ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
環境に合わせて適宜変更してください。正規表現など強力な記述ができるので、色々な活用方法があると思います。
ただ、この方法は元画像に変更があったとしてもサムネイル画像を変更しないので、1日に1回サムネイル画像を全て削除する cron を動かすなど工夫が必要になります。
thumbmake.php を覗いてもらえれば分かりますが、非常に単純なスクリプトなので、欲しいなーという機能があれば自前で実装しちゃってください。もし、要望等あれば zaru@tofu-kun.org かコメントなどでお願いします。
]]>コンポーネントと言っても、実際はPHPMailerのラッパーです。しかも、PHPMailerを日本語環境で使いやすくしたJPHPMailerのラッパーにCakePHPのVIEWを使えるようにカスタマイズしただけで、僕が書いたコードは10行ちょっとです(汗)。
PHPMailerとJPHPMailerに感謝をしつつ公開します。
]]> インストール方法インストールはいたって簡単で、まずはPHPMailerをダウンロードしてきます。
ダウンロードして解凍したフォルダをそのまま /vendors ディレクトリに配置します。
次に、cakemail.php をダウンロードして /app/controllers/components ディレクトリに配置します。
これでインストール自体は完了です。
メール送信コントローラ(今回は mail_controller.php とします)から cakemail を読み込みます。
class MailController extends AppController { var $name = 'Mail'; var $uses = null; var $components = array ('Cakemail'); var $helpers = array('html','javascript'); var $pageTitle = 'メール送信'; }
なお、モデルは使わないので、 var $uses = null; としています。
CakePHPを使うなら、メールのテンプレートもCakePHPのVIEWを使いたい、ということで、 /app/views/ 以下にそれぞれ VIEWファイルと LAYOUTファイルを設置します。
テキストメールとHTMLメールどちらでも送ることができます。それぞれ使いたい方のディレクトリにファイルを配置してください。
mail_controller.php にメール送信するコードを書きます。
class MailController extends AppController { var $name = 'Mail'; var $uses = null; var $components = array ('Cakemail'); var $helpers = array('html','javascript'); var $pageTitle = 'メール送信'; function index(){ //メール本文の設定 $content = array('hoge' => 'ほげですよー', 'piyo' => 'ぴよぴよですよー', ); //メール送信の設定 $to = 'zarutofu@gmail.com'; $cc = 'zaru@tofu-kun.org'; $subject = 'メールタイトル:長いタイトルもOK?CakePHPでメールを送信するコンポーネントテスト'; $from = 'zaru@tofu-kun.org'; $fromname = 'CakePHP テスト'; //添付ファイルの設定 $file = array(WWW_ROOT . 'files/attach.jpg', WWW_ROOT . 'files/attach.zip', ); $this->Cakemail->ClearAddresses(); //アドレスクリア $this->Cakemail->addTo($to); $this->Cakemail->ClearCCs(); //CCアドレスクリア $this->Cakemail->addCc($cc); $this->Cakemail->setFrom($from,$fromname); $this->Cakemail->setSubject($subject); $this->Cakemail->setType = 'text'; //html or text //添付ファイル追加 $attach = array(); if(isset($file)){ foreach($file as $fileName){ if(file_exists($fileName)){ $this->Cakemail->AddAttachment($fileName); } } } $this->Cakemail->setBody($content,'mailsend_view','mailsend_layout'); //viewとlayoutの設定 if (!$this->Cakemail->send()){ echo("メールが送信できませんでした。エラー:".$this->Cakemail->getErrorMessage()); } } }
使い方自体は PHPMailer と同じなので、難しくはないと思います。注意点としては本文をセットする setBody でVIEWファイルとLAYOUTファイルを指定してあげることと、$this->Cakemail->setType でHTMLメールかテキストメールか指定することです(デフォルトでテキストメールになっているので、HTMLメールを送るとき以外はコメントアウトでもOK)。
上記のコントローラを使って、VIEWファイルとLAYOUTファイルの例を出しておきます。
メール送信します。 このファイル mailsend_view.thtml 自体の文字コードは UTF-8 で保存しています。 ■hoge:<?php echo h($content['hoge']); ?> ■piyo:<?php echo h($content['piyo']); ?>
<?php if($session->check('Message.flash')){ $session->flash(); } echo $content_for_layout;
これで添付ファイルもHTMLメールもテンプレートも簡単に使うことができるようになりました。
プロフィール検索を使って誰かいないかなーと思って探していたら、こんなメッセージが。
友達があまりいないのは、プロフィール検索が多分便利じゃないと思っているようですね。
って余計なお世話(笑)。
とりあえずもう少し調べてみて活用方法を考えよう。
Google マイマップ EXPO AWARDというイベントに行ってきました。凄かったです。
一番驚いたのが受賞者の年齢層の高さ。最年少で(お子さんを除いたら)30代後半だったという…。上はおそらく70代くらい?全ての地図がこだわりぬいて作った作品で圧倒されました。普通にやってたんじゃ、他人を感動させられないなぁ。
受賞した作品の大半は、自分で現地に赴いて取材をしたり、絵を描いたり、ビデオを撮影したりと労力と時間のかかるものばかりでした。こういった現地の人の情報だったり、なににもとらわれない人の意見だったりを集約している(していこうと目指している)Googleの今後を想像するだけで、なんとも言えない気持ちに。
]]>前述の記事でも紹介されていましたが、1万円以下で大分幸せになれると思います。もし、既にOffice2008/2004を持っていたとしても購入して損はないです。いや、Office2008は使ったことないので断言できないですけど、Office2004よりも使い勝手は良いと思います。
リリース当初は、Appleの表計算ソフト Numbers が注目されがちでしたが実際のところ素晴らしいのは Keynote と Pages です。
僕は、Keynote で営業用資料や媒体資料/プレゼン資料などガシガシ作っています。Pages ではメモ帳代わりやレポート/議事録など。どちらもデフォルトテンプレートが美しいので気分良く作ることができます。ただ、Officeとは操作性が違ったりするので、慣れるまで大変かもしれません。
Numbers はグラフ機能が少し貧弱なのと、あまり数字関係に強くないっぽい(科学計算など)ので、僕は完全な表を使った資料作成用として割り切って使っています(見た目の美しさは素晴らしいので)。
MacのFTPクライアントソフトは、Windowsに比べると少々見劣りするのですが、この Transmit は素晴らしいです。FTP・SFTP・TLS/SSLに対応しています。サイドバーやリンクフォルダナビゲーション(ローカル/リモートでディレクトリ移動すると、もう片方も自動に移動してくれる)、プレビュー機能、移動ヒストリー、カラム表示/リスト表示、タブ表示など機能満載です。
ただし、SCPに対応していないので、そこは Cyberduck で補っています…。
機能的には Cyberduck も見劣りしないのですが、複数のサーバとやりとする際にタブ表示できる Transmit を日常的には使っています。
Transmit を作っている Panic さんのHTMLオーサリングソフトです。見た目の美しさもさることながら、シンプル&軽いという僕が求めていたソフトです。僕は Dreamweaver を持っていますが、メインは Coda を使って、Dreamweaver は以下の機能を使う時だけ立ち上げています。
ただ、この2つも必要ないといえば必要なく、Codaだけでも十分です。Coda の魅力としては、
まぁ、SSH以外は Dreamweaver でもある機能ですが…値段は全然安いです。ちなみに Transmit を持っていると1000円くらい安くなります。
2008-09-05 追記:現在、バージョンアップされて値段が$20上がっています。普通に購入すると$99。Transmitを持っていると$85です。
ER図を書くのに便利なソフトです。MySQLがメインで使っている方には是非オススメです。PostgreSQL/SQLite/sybase/Oracle/Rails/OpenBaseにも対応していますが、カラムの種類を自前で追加する必要があります(MySQLの場合は、ほぼ全てのカラムが初期設定されています)。
使い方も直感的で、作成したER図から吐き出したSQLもきちんと使えます。
紹介するかどうか迷いましたが…、間違って消してしまったファイルや、ディスクの故障で認識しなくなった時の救急ソフト。僕のMacでは使ったことないですが、会社の同僚や友達によく頼まれるので…。PC使った仕事していると、よくあるよね?!
OS9のディスクでも使えるのが素晴らしいです。IDE-USB変換コネクタを使って活用しています。
VMWare Fusion でも良いのですが、最初に購入したのがこっちなので。ローカル開発サーバや、Windowsを入れての動作チェックなどに大活躍。MacBookPro 2.2Ghz 2GBでもWindows/CentOSなど不満なく動作しています。4GBないと厳しいという人がいますが、おそらくWindowsなどで複数のアプリケーションを動かしてガシガシ使っている人だと思います。
僕は Macで複数のアプリケーションを立ち上げた状態で、WindowsXPに512MBメモリを割り当てて、Windows内Excel2007を使っても遅いとは思いませんでした。CentOSの場合は、256MB割り当てで立ち上げまで5〜10秒ぐらいです。ちなみに、FreeBSDはうまくインストールできなかったのでLinux(CentOS)を入れて使っています。(たぶんFreeBSDも普通に使えるはずです)
テキストエディタです。以前は mi を使っていたのですが、タブ表示を犠牲にしてでも CotEditor の方が優れているなぁ、と思っている点として、名前をつけて保存する時に、既存のファイルのディレクトリ位置がデフォルトで選択されており、ファイルをどんどん作りたいときには重宝しています。あとは、表示が綺麗なのとシンプルさ…ですかね。機能は mi なみに十分あります。
個人的には、アンチエイリアスをOffにして、黒背景/白文字で使っています。
以前、このブログでも紹介しましたが、MySQL/PostgreSQLのクライアントソフトです。シンプルで機能はあまりありませんが、基本データの閲覧ぐらいにしか使わないので十分です。
MSNメッセンジャーやYahooメッセンジャーなど、複数のメッセンジャーアカウントを1つにまとめて使える便利ソフト。テーマやアイコン/サウンドセットなど細かいカスタマイズが可能で、文句なしなクライアントソフトです。常時立ち上がっている必携ソフトです。ただ、ファイル転送はやたら遅いです。
ランチャソフトです。キーボードショートカットで立ち上げて、何文字かタイプすると、その文字にマッチしたアプリケーションやディレクトリ候補が表示されて開くことができます。キーボードだけで操作できるので非常に楽です。
スクリーンキャプチャソフトですが、キャプチャした画面に文字を入れたり、絵を書いたりできて、そのままメールで送ったり、ファイルとして保存したりとなんとも便利なソフトです。こんなにキャプチャして楽しいソフトは他にはないです。メッセンジャーで「この画面のここを修正して!」ってやり取りするときに、ささっとキャプチャソフトして文字入れて、そのままドラッグで送信…と出来るので、遠方の人ともストレスなく仕事ができます。
こうやって見てみるとWeb制作に直接関わる部分は、ほとんど有料ソフトでやっていますね。おそらくプログラマの方はここに Emacs が入って他のソフトはいらない、みたいな人もいると思います。デザイン面では、贅沢を言えば PhotoshopCS2以上/Fireworks8以上/IllustratorCS以上があれば文句なしなんですが…。そんなお金は正直ないです。FlashだけはCS3にVerUPしたいですが。
そう考えるとWebプログラマはあまりお金をかけずに仕事ができますね。かけようと思えば際限なくかけられますけど。
]]>疲れているからかネガティブな組が多いなー。
個人的には「うなだれ組」が好き。
]]>今回は勉強用ということでシンプルな掲示板を作ります。
テーブルの構造は以下のようにしました。
CREATE TABLE articles ( id serial NOT NULL, name text, email text, uri text, message text NOT NULL, status boolean DEFAULT true NOT NULL, "password" text, created timestamp without time zone NOT NULL, modified timestamp without time zone NOT NULL ); ALTER TABLE ONLY articles ADD CONSTRAINT articles_pkey PRIMARY KEY (id);
まずはモデルを作成します。モデルは app/models/テーブル名の単数形.php として作ります。
<?php class Article extends AppModel { var $name = 'Article'; }
モデルは必ず AppModel クラスを継承して作ります。また、var $name には頭文字が大文字のモデル名を指定します。
次にコントローラを作成します。コントローラは app/controllers/コントローラ名_controller.php として作ります。コントローラ名は命名規則に従っていれば自由につけられます。今回は、articles とするのでファイル名は articles_controller.php になります。
<?php class ArticlesController extends AppController { var $name = 'Articles'; var $uses = array('Article'); }
モデルと同じように、AppController クラスを継承させます。また、var $name にも同じように頭文字が大文字のコントローラ名を指定します。
var $uses = array(); には使用するモデル名を指定します。Article という名前でモデルを作ったので、var $uses = array(‘Article’); とします。また、複数のモデルを指定することも出来ます。
次にコントローラにアクションの定義をします。掲示板として必要なアクションは
の7つに分けられます(フレームワークを使うのはほぼ初めてなので、ここですでに間違っているかもしれないです><)。
アクションはコントローラクラスのメソッドとして登録します。前述した通り、アクションへのアクセスは /コントローラ名/アクション名 になります。アクション名を指定しなかった場合は、index アクションが呼び出されます。
まず、アクションの中身はいいとして定義だけしてみます。
<?php class ArticlesController extends AppController { var $name = 'Articles'; var $uses = array('Article'); //通常表示 function index() { } //記事単体の表示 function messageDetail() { } //新規追加 function add() { } //編集時のパスワード確認 function editPassword() { } //編集 function edit() { } //削除時のパスワード確認 function delPassword() { } //削除 function del() { } }
実際にアクションの中身を作ります。(続きます)
]]>今までは、社内独自ライブラリやら独自テンプレートエンジンやらを使っていましたが、それもPHP5に移行するにあたって問題点が浮上したり、その使い方を学習するコストがあまりにも無駄。ということで、本格的にフレームワークを業務で使うことを検討してみました。
まずは、フワームワークを実際に使ってみてどんなものか感じるために、掲示板を作ってみました。
]]> CakePHPの基本CakePHPはMVCというソフトウェアデザインパターンで構成されています。
この3つの頭文字を取ってMVC(Model View Controller)です。CakePHPのマニュアルによると、それぞれの意味付けは
つまり、モデルはデータベース、ビューは表示、コントローラはリクエスト処理ということになります。
ファイル名はアンダースコアでつなげた形を使いします。例えば、articleAdd というクラスを作った場合は、そのファイル名は article_add.php です。これはクラス名以外にもモデル/コントローラなど全てに通じてます。
モデルクラス名は英語の単数形です。また、最初の一字は大文字で、複数の単語がつながる場合は各単語の最初の一字を大文字にします(例:ArticleIItem)。
コントーラのクラス名は英語の複数形です。モデル名と同じように最初の一字+各単語の最初の一字を大文字にします。メンバ関数を外部から見られたくない場合は、頭にアンダーバーを追加してください。
ビューのファイル名は、アクション名を小文字にし、各単語をアンダーバーでつなげたものになります。
データベースのテーブル名は英字の複数形です。これは、単純に単語の末尾に「s」を付けるのではなく、英単語として正しい複数形にする必要があります(例:entry→entries)。
プライマリキーの名前は「id」です。アソシエーションする場合は、外部キーはテーブル名(単数形)_idとします。
例えば、articles と users というテーブルがあり、articles に user_id という外部キーを作成します。articles.user_id = users_id という条件のとき、 $this->article->findAll() とすると users テーブルのデータも一緒に取得することが出来ます。
CakePHPでは、追加タイムスタンプを「created」、更新タイムスタンプを「modified」にするとデータを追加更新する際に自動的に更新してくれます。
ただし、DBや環境によっては modified が自動更新されないこともあるみたいです。僕の環境では自動更新をしてくれなかったので、以下の方法で無理矢理更新させるようにしました。
$article['Article']['modified'] = null;
その他、細かい規約についてはCakePHPのドキュメントを参照してください。
CakePHPはPHP4.3.2以降がインストールされており、データベース(MySQL/PostgreSQL/ADODB)が使えるサーバなら大抵使えると思います。.htaccess などで mod_rewrite が使えればベストです。
まず、CakePHPの公式サイトにアクセスしCakePHPをダウンロードします。
2008年2月8日現在では、安定板として1.1.19.6305がリリースされています。ベータ版の1.2.0を使うことも出来ますが、今回は1.1.19を使うことにしました(1.2.0では結構な機能追加が行われているので魅力的ではありますけど)。
ダウンロードして解凍すると「/app」「/cake」「/vendors」の3つのディレクトリが出てきます。それを設置し、.htaccessなどで公開用ディレクトリの設定をします。
DocumentRoot /home/user/html/app/webroot
この設定をしなくても使用することが出来ますが、/app や /vendors などのディレクトリにもアクセスできてしまうため、なるべく設定した方が良いと思います。
この設定をすると、アクセスする際のURIは以下のような物になります。
http://www.example.com/コントローラ名/アクション名/パラメータ1/パラメータ2...
また、 /app/tmp はキャッシュファイルなどを書き込む際に必要なのでパーミッションを変更してください。その他、細かいインストール方法もあるので、CakePHPのセットアップを参照してください。
app/config/database.php を開いてデータベースの設定を記述します。以下の例はPostgreSQLの場合です。
<?php class DATABASE_CONFIG { var $default = array( 'driver' => 'postgres', 'connect' => 'pg_connect', 'host' => 'localhost', 'login' => 'ログイン名', 'password' => 'パスワード', 'database' => 'データベース名', 'prefix' => '', 'encoding' => 'utf8', ); }
MySQLの場合は
'driver' => 'mysql', 'connect' => 'mysql_connect',
とするだけです。
これで、基本的な設定は全て完了しました。次は掲示板を実際に作ってみます(続きます)。
]]>早生まれなので1984となってますが、本当は1983の方と同学年です。でも、あまり年代にはこだわってないので、1984生まれじゃなくても参加可能です。体は大人、頭は子供…じゃなくて、気持ちは198[3-5]な方はぜひ参加してやってください。
メンバーで集まって、わいわい盛り上がりたいなー。
ちなみに、グループ用にアイコンを作ってみました。
非常に適当ですが、とりあえず。
]]>