DoCoMo iモードブラウザ2.0でCSS

DoCoMoではFOMAから使えるようになったCSSですが、変な仕様として、httpのヘッダとして「application/xhtml+xml」を送らないとCSSが効かない。
逆にこのヘッダを送ってしまうと、fontタグ等が効かないという面白仕様がありました。
DoCoMoでCSSを効かせる方法 - maru.cc@はてな


今回、iモードブラウザ2.0では、このヘッダを送らなくても色がつくようになっていました。

<html>
<body>
<span style="color:red;">red</span>
<font color="blue">blue</font>
</body>
</html>

これでちゃんと色が付きます。

DoCoMo iモードブラウザ2.0でJavaScript

JSも動くようになったということで、気になるこれを。

無限alert

<html>
<body>
<script type="text/javascript">
var i=0;
while (1) {
i++;
alert(i);
}
</script>
</body>
</html>

しっかり無限してますw
130ぐらいまでは数えましたが、電話を切るボタンでiモードを終了させちゃいました。

いわゆるブラクラ

window.open も動きますが、「サイトの指定により新ウィンドウを開きます よろしいですか?」というダイアログが開きました。

<html>
<body>
<script type="text/javascript">
while(1) {
window.open('./');
}
</script>
</body>
</html>

こんなのをやってみたら、YESでもNOでもダイアログが出続けるというブラクラ状態に。

無限ループ

<html>
<body>
<script type="text/javascript">
while (1) {
}
</script>
</body>
</html>

なにやらずーっと読み込み中でしたが、気が付くと止まってました。

無限ループその2

どのくらい回ってるのかなーと思ってこんなのやってみました。

<html>
<body>
<script type="text/javascript">
var i=0;
while (1) {
i++;
document.write(i+' ');
}
</script>
</body>
</html>

読み込み中の表示は、CLRキーで消えましたが、その後、戻るボタンや、機能ボタンが効きません。。。
電話閉じるボタンも効かない。でも、マルチ機能は動いていました。


マルチ機能でメニューを出して、電話切るボタンで機能を停止させたらiモードを終了できました。
ただ、これは次に同じことをした場合に普通にボタンが効いたので、その時だけだったのかもしれません。

さいごに

よい子はまねをしないように。


あとは、どの場合でも、iモードブラウザを単体で終了出来たので、携帯OSごと持ってかれるということはなさそうでした。

追記(2009-05-28)

i-mode2.0は前途多難 - ockeghem(徳丸浩)の日記
こちらのページを見て、あららと思って、N-06Aでも確認してみたところ、JavaScriptが動かなくなっていました。

ZendFramework勉強会@Tokyo に参加してきた

ちょっと遅くなってしまったが、4/4にZendFrameworkの勉強会に参加してきました。
ZendFramework勉強会@Tokyo - events.php.gr.jp

ZendFrameworkはほとんど使ったことがないのですが、ライブラリとしても有用という声を聞くので、実際に使っている人たちの生の声が聞ければと思い、参加してきました。


まずは、恒例の自己紹介。
その後、プロジェクターへの接続の問題で順番を入れ替えて発表スタートです。

ZFではじめる携帯サイト

発表者:id:Bayside さん

モバイルに関する一般的な内容でした。
その中で、メール配信など、ZFでのどうやるのかというコードが具体的に乗っていました。

面白いと思ったのは、ソースコードSJISで書いているということ。DBにもSJISで保存しているそうです。

思い立ったらZF 〜 今日の目次 〜

発表者:junichiro

野球とサッカー、将棋と囲碁をたとえに出した自由度の高さとルールの縛りに関しての分析が面白い。
それを、CakePHPとZendFrameworkに当てはめてのたとえもわかりやすかった。
日本人はMらしいw


思い立ったらZFを実践したい。

話のテンポがよくて聞きやすかったです。


ZFを使ったプロジェクトをスタートしやすくするように、フォルダ構造等を決めたものを落としてきてそこからスタートというものだそうです。
githubにあるので見てみると参考になるかもしれないです。
http://github.com/junichiro/zf-starter/tree/master


実際にライブコーディングで簡単なフォームと確認画面まで作る手順が見れました。


zshemacsなのですねー なんかかっこいい。


レイアウトテンプレートとかは、なかなか良さげなのですが、cssの定義とかをphpのコード内にかかれているのは、デザイナーさんとの分業がある場合に大変なのではないかと思いました。
実際に、発表後に質問してみたところ、やはり分業が永遠のテーマだそうでした。

http://github.com/junichiro/zf-starter/blob/a0b957a2653259fc8fed4a8ff08612fab6097e57/application/sample/views/layouts/main.phtml

http://github.com/junichiro/zf-starter/blob/a0b957a2653259fc8fed4a8ff08612fab6097e57/application/sample/views/scripts/index/index.phtml
このあたり。


個人的に思ったことですが、デザイナーとの分業を考えた場合に、phpテンプレートと呼ばれる phpタグを書く形式はどうなんだろうというのが思いました。

はじめてのZend_Form

発表者:twkさん

開発環境はPDTみたいでした。

サンプルを交えて、というかサンプルOnlyで初歩的な段階からのいろいろなフォームの使いかたを紹介していました。
フォームの形式ですが、QuickFormのような addElementする系のソースは、Ethnaフォームを知ってしまうといまさら出来ないなぁというのが個人的な感想です。みなさん不便していないのでしょうか?

Phwittrについて

発表者:id:heavenshellさん

PhwittrのZF版を作成するにあたって、気づいたりしたことなどなど。
いまも手を加えられているそうです。

見習わなければ。。

自作のZFコンポーネントなど (仮)

発砲者:wadsさん

Zned_Logでローテーションをする自作コンポーネント


ZendFrameworkですべてやりたいのでコンポーネントが増えるといいなと思っているので、発表したとのことでした。

たとえばZned_Cache

発表者:id:noopableさん

必要な処理、例えばユーザからのアクションに対してのことなどを遅延実行するというのをおっしゃっていましたが、どういうことなのか気になります。
残念ながら時間がきて途中までになってしまったので、あとで聞いてみたい。

たとえばZend_Cache

発表者:noopableさん

前提知識がないのでちょっと、という部分も少しありましたが、わかりやすい発表でした。
何にしても使って見ないと聞いた実感はわかないなぁというところ。

ZFにまつわる何か

発表者:m-takagiさん

ZFのマニュアル翻訳しようという話。

飛び入り

発表者:wozozoさん

飛び入りで wozozoさんが過去に作ったライブラリの紹介してました。

最後に

ZFは、まだまだこれから触ってみるという感じなのですが、ライブラリという側面もあるので、うまく今使っているものと折り合いを付けて使ってみたいと思いました。

Ethnaオフラインミーティング @Cake開発合宿 に参加してきた

id:yandodさんの発案で、CakePHPの開発合宿というものがありました。
4/10〜4/12 CakePHP開発合宿アルファ版を行います! - yandodの日記

それに、Ethna組として参加をしてきました。
CakePHP合宿でEthna工作員が大爆発するそうです - 肉とご飯と甘いもの @ sotarok


詳しい成果はこの辺を。


参加してみて、CakePHPredmineの移植組は、かなり大変そうでしたが、その分充実度合いがすごかったと思います。
なにより、よこから見ていただけなのですが、gitがこういったある程度の人数での同時開発でもかなり力を発揮するというのはすごかったです。
やっぱ、中心でマージをしたりとか進める人次第なところもあるのかなとは思いました。


Ethna組は、1月のEthna焼肉MTG以来のコミッターがオフで会う機会でした。
いままで、IRCなどで議論はしても、やはり顔を合わせて話すのはかなり違うなと感じました。
行きの車の中から、温泉入っている間も、出てから湯冷めするまで、延々いろいろなことを話してました。

その中のいくつかは、実際にコードにしてコミットをし、他にも sf.jpのチケット を使って、どんどん目に見える形にしていこうということになりました。
また、新しい試みとして、Trunkにコミットは出来ないけど実装案などを、ブランチをどんどん切って試していくことになりました。ちょっとgitのような使い方でしょうか?

うまくいくかわからないけど、いろいろ試していきたいと思います。


今のEthnaは、ActionFormは、他のフレームワークと比べてもいいところだとは思いますが、いかんせん他(DB接続とかその他いろいろ)が弱いので、なんとか使えるレベルにはしたいところです。

最後に

今回、「CakePHP開発合宿」という中に、Ethna組を入れてくださってありがとうございました。

svnリポジトリ、Tracのパスが気に入らなくなったら

うちの会社では、プロジェクトをスタートするときに、まず、バージョン管理のsvnSubversion サブバージョン)と、Trac(トラック)というプロジェクト管理ツールの設定から作業をします。

このSVNリポジトリと、Tracは、サイトを表す文字列を指定することになり、それが、リポジトリTracのURLとなります。
例えば、あるプロジェクトのリポジトリTracは、弊社の社内環境の場合、以下のようになります。

この「project_a」という文字列を変えたくなった場合の対処方法です。


今回、とある案件の仮リポジトリを、「project_a」という名前で作成していましたが、ドメインが仮確定したので、ドメインに則した名前「examplesite」に変更することにしました。

SVNリポジトリの名前変更

リポジトリの物理パスを変更します。(※パスは環境により違います)

cd /var/svn/
mv project_a examplesite

これで完了です。ちょっと拍子抜けですね。

各個人の作業リポジトリは、もちろんパスを変更しなければなりません。
作業リポジトリのトップで、以下のコマンドを実行することで変更できます。

svn switch --relocate http://svn.local/project_a/trunk http://svn.local/examplesite/trunk

--relocate がミソです。

Tracのパスの変更

Tracも同様に物理パスを変更します。(※パスは環境により違います)

cd /usr/share/trac/projects/
mv project_a examplesite

これで、移動は完了ですが、SVNリポジトリを変更すると以下の作業が必要になります。


trac.iniのリポジトリに関する設定の変更

vi trac.ini

[trac] セクションの以下を修正します。
repository_dir = /var/svn/project_a
を変更するついでに、nameも変更をしたほうがいいでしょう。

diff trac.ini.20090402 trac.ini
81c81
< name = project_a
---
> name = examplesite
171c171
< repository_dir = /var/svn/project_a
---
> repository_dir = /var/svn/examplesite


これだけでは、足りないので以下の trac-admin コマンドを実行します。

trac-admin /usr/share/trac/projects/examplesite resync

まとめ

初期段階で正式名称が決まっていなくてスタートする場合もありますが、コードネームだと後々分かりにくくなってしまうこともあると思います。こんな方法で初期に名前変更はありではないでしょうか?

無線LANがぶちぶち切れる

Ubuntu無線LANにつないでいるのだが、ぶちぶち切れる。
ので、おもいっきりアドホックな対応。

つないでいるルータに PING を打ちまくる。

$ ping -i 5 192.168.0.1

切れても、手動でネットワークを探さなくても復旧してくれた。

64 bytes from 192.168.0.1: icmp_seq=580 ttl=64 time=0.882 ms
64 bytes from 192.168.0.1: icmp_seq=581 ttl=64 time=2.71 ms
From 192.168.0.2 icmp_seq=592 Destination Host Unreachable
From 192.168.0.2 icmp_seq=593 Destination Host Unreachable
64 bytes from 192.168.0.1: icmp_seq=594 ttl=64 time=0.894 ms
64 bytes from 192.168.0.1: icmp_seq=595 ttl=64 time=0.884 ms

なんか、本質的な対応では無いが。。


こーいう場合に、どこを確認すればいいのだろうか?
ちなみに、同じ無線LANのルータにつないでいる、MacBookはまったく問題ないので、ぐぐって出てきたDHCPの期限とかそーいうのではないかと思う。

ECナビさんの社内勉強会に参加させてもらった

ECナビさんの社内で行っている勉強会に、誘われて参加してきました。社外からの参加者も少しいるみたいでした。

定期的に行っているようで、5分のLTを10人の方が話すという感じ。話される内容も幅が広く、ネタっぽい面白いものから、ハイレベルなちょっと理解がおよんでいるか自身のないようなことまであり、とても刺激になりました。


スタート時点からピザやビールが出てきて、雰囲気としてはPHP懇親会みたいな感じでしょうか(参加したことないけど)


途中、10分間の休憩の時に、飛び入りで何か話してと言われ、せっかくの機会だと何か話さなければーということに。。。
そこから何を話すか考えて、なにかプロジェクタに表示するものを考えてとかとか。。すいません、後半の発表が記憶から飛んでいます。。。


Emobileを持っていたので、適当に話す内容のWebページをFirefoxのタブに開いて、Ctrl+PageDownで送りながらという、なんとも無茶なLTになってしまい、しかも、直前に話されたお二人の発表がとても高度な内容で、トリで話す内容ではないよーと思いながら、どのくらいの時間話したかもわからずに終了。。


まぁ、お酒が入ってなかったら無理ですねw


何はともあれ、参加してよかったし面白かったです。お誘いくださった@ntakaakiさん、ありがとうございました。