2007年12月アーカイブ
全力でプログラマーを「人気の職業」に押し上げたい
を読んで思ったこと。
例えばこんなゴール
- 就職人気ランキング1位「SE」「PG」
- 合コンで人気の職種ランキング1位「SE」「PG」
- 平均年収の高い業界2位「IT業界」(1位は金融にゆずってあげる)
- 息子が授業参観で「ボクのお父さんはエンジニアです!」と仕事内容を説明できる
最後の項目に関しては同意できる。
自分の仕事内容を説明するのが難しい職業だと思うので。
例を上げると枚挙にいとまがない。
- 美容院で職業を聞かれて答えた後、それについて会話が弾まない。(主に人格の問題で)
- 友人には単に「何かパソコンに詳しい人」と思われてる気がする。(その前に友達自体が少ない)
- 両親に自分の仕事内容を伝えようとするとぼんやりとした顔をされる。(まずパソコンの説明から始めなければならない)
3つしか思い浮かばなかった。
仕事内容を説明する難しさは確かに「人気」に起因してると思う。
人気があるということは多くの人が関心を持っている職業ということだから。
僕の知人が医者とか弁護士とかだったら、
仕事内容をいろいろ聞いてみたいと思うもん。
聞こうとしてる人にはきっと伝えられる。
だからこの項目をゴールに入れてる id:guri_2 さんがちょっと好きだ。
「自分が息子に」じゃなくて、「息子がみんなに」なのが特に。
僕は「自分が息子に」で十分なので、プログラマという職業自体は人気無くても構わない。
蛇足だけど、僕は常々「妻に説明して伝わらないもの」
を作ってもしょうがないと思ってる。
あと、正月実家に帰ったら
「自分の両親が他人に説明できるようになるまで自分の仕事内容を説明する」
ということを本気でやってみようかとも思ってる。
おもしろそうなので。
WEB 素行調査というサービスがおもしろそうだったので
自分を調査してみた。
その結果がこれ
http://detective.kayac.com/search?q=pm11op
こういう時に「php」や「javascript」と同じくらい、
いや上回るくらいに「うんこ」や「ちんこ」に出てきてもらいたくて、
今まで無理して「うんこ」タグの付くような記事を書いていたのに、
この結果は非常に残念だ。
これじゃプログラマみたいじゃないか。
もっとうんこ道を邁進したい。
それかもういい加減うんこの話題は止めにしたい。
あと、こういう何の毒にもクスリにもならないようなWEBサービスを
おもしろいからっていうだけ(想像)でリリースできる会社ってステキだと思う。
最初に断っておきますが、
いつも参考にしてる CakePHP のおいしい食べ方の
1年以上前のサンプルコードにセキュリティ上問題がある個所があって、
それを何とか中の人(dozono さん)に メールで伝えようと思って
いろいろ検索したり CakePHP の Google group に入ったりしたけど、
結局メールアドレスがわからななかったので、
blog にコメントしようかとも思ったけど、それにしては長くなるし
めんどくさくなって blog に書くことにしました。
07.12.18 追記
現在は修正されています。のでタイトルも変更しました。
本題。
CakePHP Controller の layout はあくまで表示を変えるためのメンバ変数である
問題あると思うのはこちらのコード
class AppController extends Controller {var $components = array(’SdAuth’);
function beforeFilter()
{//for CAKE_ADMIN(admin) rooting.
if(defined(’CAKE_ADMIN’) && !empty($this->params[’admin’])){
//start admin check.
if($this->SdAuth->isloggedin() == FALSE)
{
$this->layout = “login”;
} else {
$this->layout = “admin_default”;
}
}
(以上、原文ママ)
多分、quote が全角になってるのは blog システムの都合だと思うので、スルーで。
このコードで何をしてるかというと、
SdAuth というコンポーネントを使って、
ログインしていなかったら ログイン画面を表示し($this->layout = “login”;)、
ログインしていたら管理画面用のレイアウトを表示する($this->layout = “admin_default”;)
という処理を行っています。
SdAuth という簡単な認証システムの性質上、
例えば以下のような使用を想定しているのではないかと思います。
- news という controller がある
- 管理者(ログイン時)のみが admin_add, admin_edit, admin_delete action を実行できる。
url 的には 下記。 {n}はid の整数。未ログイン時はログイン画面を表示する。
- /admin/news/add/
- /admin/news/edit/{n}
- /admin/news/delete/{b}
- 一般利用者は index, view actionのみが実行できる
- /news/add/
- /news/edit/{n}
ここで僕が問題視しているのは、Controller の layout 変数は
あくまで表示方法を変えるための変数なので、
layout 変数の変更によりログイン画面を表示しても、
リクエストされた action の処理は実行されてしまうということです。
つまり、下記 url にアクセスすると、
ログインの有無に関わらず id=1 の news を
削除できてしまいます。
/admin/news/delete/1
このサンプルコードを実装して debug モードでSQL を表示させつつ
admin しか実行できないはずの url にアクセスすると、
表示はログイン画面のまま、
処理が実行されているのがよくわかります。
対処法としては、下記のように、ログインしてなかったら
別途用意したログイン画面にリダイレクトしつつ、
ちゃんと exit してやる等が思い浮かびます。
if($this->SdAuth->isloggedin() == FALSE) {
$this->redirect('{ログイン画面のurl}');
exit();
} else {
$this->layout = "admin_default";
}
1年以上前の記事ではあるのですが、
「CakePHP acl」でgoogle検索すると割と上位に表示されるので、
修正された方がよいのではないかと思います。
07.12.18 追記
現在は修正されています。
というわけで、もっと CakePHP が盛り上がっていったらよいですね。
追記
少なくとも、 CakePHP1.2 で使用する場合には気を付けたほうがよいと思います。 CakePHP1.1 では試していないので、そっちでは大丈夫なのかもしれないです。
07.12.18 追記
以下のようにすれば変更が少なくてよいですね。
if($this->SdAuth->isloggedin() == FALSE) {
$this->layout = '';
$this->render('../layouts/login');
exit();
} else {
$this->layout = "admin_default";
}
jquery の Nested Sortable jQuery Plugin と
scriptaculous の sortable tree では、scriptaculous の方が全然速かった。
jquery 版のサンプル
scriptaculous 版のサンプル
上記サンプルページで処理の重さを可視化するスクリプトで何となく比較した結果。
というわけで、次回以降 scriptaculouse の sortable の高速化を試みる。
tweditor の編集画面がくそ重い。
自分で作っておいて使ってられないくらい重い。
scriptaculous の sortable tree が重いのだ。
scriptaculous の高速化を試みていもよいが、
jquery にしたらひょっとしたら速くなったりするかもしれない。
で、その比較をするために、1年以上前の記事だけど
id:amachang が実際、Script.aculo.us の Effect はどのくらい高速化できるか - IT戦記
のサンプルで使ってた、タイマの乱れ測定スクリプトを
bookmarklet で好きなページで使えるようにしてみた。
今さら今さらだけど。
このbookmarklet を使いたいページで呼び出すと、
画面右上にタイマの乱れを表示しつづける。
関数の benchmark 取るならもっとよい方法があるはずだけど、
全体の benchmark って結構取り辛いなあと思って作ってみた。
あくまで目安でしかないと思うけど。
しかし1年以上前のちょっとしたコードなんだけど、かっこいいなあ。
例えば、 (time - beforeTime - 40) が正ならそれを使って、
負なら 0 を使いたい時のコードがこれ。
Math.max(0, time - beforeTime - 40)
if 文使わずに Math.max で1行で記述。
人のコード読むって勉強になる。
Kanasan.JS に出てからますますそう思う。
金曜日に東京で CakePHP 勉強会、土曜日に大阪で Kanasan.JS って
そんなアクティブな真似はやはり僕には似合わなかった。
ただでさえ風邪気味だったのに。
今回の Kanasan.JS は、主に体調面の不調が原因で途中でドロップアウトした。
内容に全く付いて行けなかったのは、体調不良のせいだけではないと思うけど。
フリートーク
コの字型に並べたテーブルに座った状態でフリートークはちょっと辛かった。
今度こういう機会があるのであれば、各自レジャーシート持ち寄って車座でピザ食いながらだらだら喋ったらもうちょっとまったりしてよいんじゃないかと勝手に思う。距離は近い方がよいなあ。と思った。
nanto_vi さんのプレゼン
ver1.5 と ver1.6 の違いをものすごくわかりやすく解説されてた。
例えば、Class.create が便利になってる(Ruby の mixin 風?)とか、
methodize が便利ぽいとか。
add = function(a,b){return a+b;}
Number.prototype.add = add.methodize();
(1).add(2)
これが メソッドチェーンだということを隣に座った id:awawa が教えてくれた。
つまりこういうことができる。
(1).add(2).add(3).add(4) //10
因みに、 id:awawa とは大学時代に同じレンタルビデオ屋で働いていた。
それ以降会うこともなかったのだが、
前回の Kanasan.JS においてばったり再会するというミラクルぶりだった。
前回の Kanasan.JS で僕が一番最初に話し掛けたのが彼だったのだ。
Kanasan.JS はそんな再会も演出してくれるステキな勉強会です。
CodeReading
CodeReading 中はかなり意識が朦朧としてたので復習しないとまとめも書けない。
しょっぱなの Template のとこでいきなり力尽きた感じ。
でも、使って便利そうだと思った。というか、必要。
あと、native な関数(reverse)が破壊的だから
非破壊 method を作るという発想はなるほどねと思った。
というか、配列が参照な世界でなぜに破壊する?
他にももっとポインツはあったと思うので、要復習。
こんな役立たずが 3つしかない Firefox ストラップをジャンケンで真っ先に勝ち取った。すいませんすいません。
他にも Mozilla ステッカーとかピンバッジとかいただいた。
Kanasan.JS はそんなステキな勉強会です。
主催の kanasan さん、ujhisa さん、プレゼンたーの nanto_vi さん、
参加された皆さん、長時間お疲れ様でした。
遠路はるばる東京まで行ってきました。
新幹線が思ったよりも遅くてしかもちょっと道に迷ったので、
10分遅刻した。
EZナビウォークがこの世にあってよかった。
無ければ迷ったことにも気づかないまま途方にくれてたに違いない。
以下、発表の感想とか
「CakePHPを業務で導入する」(shin1x1さん)
聴衆巻き込み型プレゼンだった。
ちょいちょい参加者に挙手アンケートしたり、
簡単な質問を投げたりされてたので、
いろいろとその場にいた人たちの CakePHP 動向がわかって
おもしろかった。
1.2 使ってる人が結構少なかったのは意外だった。1.2 楽しいのに。
業務でこなしてる人なら「あるある」な話。
業務上絶対必要なデザイナさんとの共同作業において、
いかにお互い気持ちよく仕事できるようにするかみたいな話とか。
「CakePHPをさらにDRYにする、ドライケーキレシピ」(akiyanさん)
model の find を便利にするための TIPS と、それが生まれるに至る過程を高橋メソッドでテンポよく解説されてた。
DRY = Don't Repeat Yourself
専用 method 作って泥沼の経験は自分にもある。
というか、単にテストしやすいという理由で泥沼泥沼 Component 化したことがあった。
今後もすると思う。
「CakePHP1.1 to 1.2」(yandoさん)
CakePHP1.1 で作られたアプリの 1.2 への移行を実演。
意外と動くよというお話。
あと、1.2 のよいところ紹介とか。
実演系のプレゼンに引き込まれる。おもしろかった。
全体の感想
普段 web でしか見たことない人に実際にお目にかかれたのはでかかった。
shin1x1さん、akiyanさんとは懇親会で少しだけお話したけど、気さくな人たちだった。
懇親会では席移動が難しかったのであんまりたくさんの人とは話せなかったけど、
あれだけの人数の php をやる人を一度に見たのは始めてのことだし、そういう人たちと php について語ったりするのは初めての経験だったので、すごくおもしろかった。
あと、名詞交換いろんな人としたけど、名刺もらう人もらう人悉く「取締役」とか「CTO」とか書いてあって、しかもみんな若いし、何か凹んだ。
2次会行った後、終電を逃した studio15 さんと p4life さんと朝までメイド喫茶でいろいろと話した。
メイド喫茶に行ったのはよく覚えてないけど、その時間に空いてるのがメイド喫茶しかなかったからだったと思う。
僕が「秋葉原のメイド喫茶」に強い関心を示したせいではなかったと思う。
宿も取らずに関西くんだりからやって来た僕に気を使ってくれたのかもしれないと思うと申し訳ない気もしたけど、おもしろかったー。2人とも超いい人。
p4life さんには「10分で作るCakePHPアプリ for Windows」5回くらい見た件、伝え忘れた。
トキワ荘構想とか聞くとやっぱり関東いいなーとか思っちゃう。
多摩だと家賃が安くて都心までも電車で数十分とか聞くと、特に。
まあ当分は関西でがんばるけど。
みなさん、おつかれさまでした。
また東京の勉強会行きたいな。
メモ。
cake_1.2.0.5875-pre-beta で多言語対応が使いやすくなってる。
この辺に以前のバージョンの多言語対応の解説がある。(英語他)
http://omeck.net/2007/08/31/i18n-w-cakephp-12/
http://blog.csdn.net/wuliangxia/archive/2007/07/25/1707166.aspx
CakePHP の多言語サポートは2系統あって、
静的テキスト用 gettext とDB データ用の i18n がある。ぽい。
というわけで、i18n テーブルを使用するためのメモ。
- app/config/sql/i18n.sql を元に i18n テーブル作成 1.2.0.5875-pre-beta から i18n_content はなくなって、 i18n テーブルのみで完結するようになった
- 試しに news table でも作成、 field は id, title, comment, created bake コマンド等で model, controller, view を作っておく
- news に適当にデータ登録
id, title, comment, created 1, ニュース, ニュースですよ, 2007-11-22 .. 1, ニュース2, ニュース2ですよ, 2007-11-22 .. - i18n テーブルに他言語の対応テキストを登録
id locale model foreign_key field content 1 en News 1 title it's news. 2 en News 1 comment yes, it's news. - News Model に actsAs 追加
class News extends AppModel { var $name = 'News'; var $actsAs = array('Translate' => array('title', 'comment')); } - News Controller で言語の設定
class NewsController extends AppController {var $name = 'News';
var $helpers = array('Html', 'Form' );function beforeFilter() {
$this->News->locale ='en';
return true;
}
(略)
}
この時、
・locale に 「en」を指定すれば、i18n テーブルで locale フィールドが「en」のやつを表示してくれる
・i18n テーブルに該当するテキストがない場合、表示されない。(そのレコードは無かったことにされる)→無かったらデフォルト言語を表示するとかしたい気もする
ソース読んでたら Model での locale は配列でも指定できるようにしようとしてるぽいし、優先順位決められるようにはその内なるかもしれない。
・locale に 「」(空文字)を指定すれば、翻訳は行われない。→ news テーブルに登録したものがそのまま表示される
・locale に 「en」を指定した状態で News を登録すれば i18n テーブルにも insert される
実際に使うには
このままだと翻訳テキストの登録が面倒だ。
そこで、以下のような感じに作れば、かなり便利になるんじゃないかなと思う。
実際には作ってない。
・サイトで使用する言語を配列で持っておく
・Model の afterSave 等で actsAs に Translate が指定されてたら自動的に i18n テーブルに上記言語のフィールドを作る
・i18n テーブルから言語別にCSV で出力
・CSV上で翻訳
・CSV インポート
あと問題なのは、gettext といかに共存させるか。
あっちは po ファイルなので、2フォーマットできてしまう。
全部 db で管理できるようにできればいいのにね。
明日は CakePHP 勉強会。あさっては Kanasan.JS
京都→大阪(勤務)→東京(CakePHP)→大阪(Kanasan.JS)
ってまるでアクティブな人みたい。週末引きこもり人間なのに。
楽しみだ。
うんこついでにちんこの話
前のエントリでうんこの話は心に刺さると書いたが、
「ちんこ」の話はあまり挿さらない。
ちんこだけに。
心に残る「ちんこ」を使った言葉とかないし、
「ちんこ」を使って上手いこと言いたいとも別に思わない。
だからちんこについてはあまり突っ込んだ話ができない。
ちんこだけに。
今ちょっだけ上手いこと言ったかもしれないと思って、
他に誰か言ってなかったら記事にするつもりで
「ちんこ」「突っ込んだ話」で検索しようかとも思ったが止めた。
検索結果はだいたい予想できるし、
大体そんなに上手くもない。
それに少々かぶっててもいいんじゃないかとも思ったからだ。
ちんこだけに。
最近個人で作るWEBサービスにかまけてて
うんこタグが小さくなってきたので、うんこ成分を補充しなくてはいけない。
僕のような下ネタ嫌いの人間には大変な作業だ。
僕はダウンタウン直撃世代なので、やはりそれなりに松本人志の影響を受けている。
彼の言葉の中で特に心に残っているのは、「下ネタ」の定義である。
以下「松本坊主」より引用
”うんこ”とかいう単語だけで下ネタと決めるなって。その周りのヒストリーというか、そこに至るまでの間のうんこの使い方によて下ネタか下ネタじゃないかっていうのは、僕の中ではちゃんとわかれるんですよね。
そのうんこっていうものを何かおもしろいものにたとえて、うまく料理できれば、僕の中では全然下ネタじゃないんですけど。
そういうわけで、僕は「うんこ」を飼いならすことに成功した言葉に出会うと、
頭から離れなくなってしまう。
例えば、Quick Japan で笑い飯がコラムに「うんこの臭いを外に漏らさない人間の密閉力はすごい」と書いていたことや、
WEBやぎの目の人が「うんこより大事な用事はない」と書いていたことや、
うちの会社のディレクターがゆるいうんこのことを前触れなく「ゆんこ」と言った事などが心に刺さってしまう。
僕もうんこを飼いならしたい。
ウィットに富んだうんこ発言をしたい。
ウェットに富んだうんこではない。
それはゆんこだ。
Firebug を disable にすると確かに Drag & Drop もできなくなったし
checkbox もでなくなりました。
これはひどい。
こんなことがあるなんて。逆は聞いたことあるけど。
動作チェック甘すぎです。ごめんなさい。ごめんなさい。
07.12.01 18:35 追記
現在、既にこの問題には対応済みです。 詳細は後日アップします。07/12/04 さらに追記
いや、詳細も何も console.log をコメントアウトし忘れていただけです。 Firebug は何一つ悪くないです。※Tweditorは Twitter のまとめサイトを「手動」で作成するためのサービスです。
編集機能の需要がありそうだったので、機能を追加しました。
そのためには認証が必要になるので、livedoor Auth を利用することにしました。
livedoor ID をお持ちの方はlivedoor Auth によりログインすることで下記の機能が利用可能になります。
- 自分の作ったページの編集
- 自分の作ったページの削除
- 自分の作ったページの公開状態の変更
ログインした状態でページを作成した場合、
作成者として livedoor ID が表示されるのでご注意ください。
未ログインの場合でも、今まで通りページの作成は可能です。
(ゲストユーザという扱いになります)
ゲストユーザが作成したページは、作成者欄に(guest)と表示されます。
ゲストの場合、上記の編集機能は使用できませんが、
セッションの有効期限中は上書き保存が可能です。
ページ作成画面でうっかり「seve」ボタンを押してしまっても、
引き続き編集した後、「save」ボタンを押すことで上書き保存することができます。
実はちゃんとページ作成画面がちゃんと動いていないんじゃないか疑惑
ところで今回、機能を追加しましたが、
Drag & Drop が動作しないという方が結構いるようです。
ひょっとして動くのは自分だけなんじゃないかという気がしてきています。
この件は引き続き調査中です。
せっかく使ってくれようとしてるのに、すいません。。。
あと、僕は下記の RSS を購読しているので、 Twitter 上で 「tweditor」や「つえでたー」を含むつぶやきをしていただければ、僕に届きます。
http://twitter.1x1.jp/search/?source=&keyword=tweditor+OR+%E3%81%A4%E3%81%88%E3%81%A7%E3%81%9F%E3%83%BC&lang=
ご要望とか、不具合とか、その解決方法とかありましたら、是非つぶやいてください。
今後とも Tweditor をよろしくお願いします。
追記
07.12.01 18:35 現在、ページ作成画面がまともに動作しない問題には対応済みです。 ご報告くださったみなさん、本当にありがとうございました。詳細は後日アップします。