OSC Tokyoに参加した。#osc2014tk

1年ぶりにオープンソースカンファレンス東京に参加しました。

たまに外でいろいろな話しを聞くことは刺激になります。

今回の収穫。

  • RaspberryPiの本をじゃんけん大会で貰った。これはRaspberryPiを買えということか。
  • nginxに映像のストリーミングのモジュールがあるらしい。見てみよう。
  • baserCMSがCakePHPの2に対応したそうだ。試してみよう。
  • Yeomanが面白そう。試してみよう。
  • MongoDBは楽しそうだな。今度の案件で提案してみよう。
  • 懇親会でLibreOfficeユーザー会の人に話しかけたら逃げられた。流行らす気はないのかな?
  • マイクロソフトのクラウディアさんと名刺交換してお話しした。娘に自慢しよう。

それにしてもOSCの会場の明星大学は遠いな。南武線を乗ると寂しい気分になります。教室はきれいで広いのは素晴らしいけど。

WiMAXが繋がらないのは困りもの。WiMAXが繋がらないのは毎年書いているな。もう別のものにしてやめようかな。

名刺印刷のメモ

A4用紙で切り離すタイプの名刺用紙は、角がギザギザになるのがイヤだから(今は進歩したかもしれないが)、あらかじめ切り離した名刺用紙を使っています。

しかし、用紙が小さくなるので、プリンタを選びます。しかも、縦しか印刷できないので横にデザインしたときに困ります。余白なしで用紙一杯にデザインしたときも。

そこで名刺印刷を行う方法を、忘れないようにメモをしておきます。

作成は、Inkspaseです。ドローソフトです。大昔はCorelDRAWを使っていましたが、さすがに5から使っていませんので、今回はオープンソースのInkspaseを、使いながら習得していきます。

Inkspaseから直接印刷できればいいのですが、どうしても名刺用紙に印刷できないので、一旦PDFに出力します。PDFを出力するには、PDFのプリンタドライバで出力するのではなく、Inkspaseのファイル出力機能で保存します。

印刷は、Adobe Readerから行います。PDF xChange Viewerからだは、余白がでてしまい、ピッタリ印刷できませんでした。

プリンタの設定は、用紙サイズを名刺(55x91mm)、フチなし、印刷方向を横にします。この設定は毎回使うのでプリンタドライバに保存しておきます。プリンタには用紙は縦に入れておきます。

以上で名刺の印刷ができます。

Google+: View post on Google+

#CakePHP でOGPの対応

今、サポートしているゲームのブログランキングのサービスで、OGPへの対応の要望がありました。

Htmlヘルパーを地道にビューに設定すればいいのですが、何かよい方法がないかと調べてみました。

やはりありました。既にCakePHPのプラグインを作成してくれていました。しかもCakePHP2に対応されています。

Ogphttps://github.com/monsat/Ogp

オリジナルのままだと、作っているサービスには機能不足なので、機能を追加します

  • og:url に自動的に自分のURLを挿入する。
  • プリフィックスがog:以外に、Facebookのためのfb:を設定できるようにする。

いろいろとソースを修正できるのも、オープンソースのいいところ。

Githubにリポジトリを公開されていたので、Pull Requestして追加したソースの差分を取り込んでもらいました。

とりあえずユーザー会を作るのか?

PHPのマイナーなフレームワークを調べていたら、既に日本人によるユーザー会が立ち上がっていた。

オープンソースのカンファレンスに行くと、とってもたくさんのユーザー会が存在することがわかる。まるでユーザー会立ち上げマニアがいるみたいだ。立ち上げたらキチンとユーザー会としての活動をしてくれればいいのだが、飽きたかどうかわからないが、放置されているユーザー会も多いこと。

ちなみに前述のユーザー会のホームページの最終更新日は、去年の11月でした。国内のユーザー会が分裂してしてグダグダになって、周りから取り残されてしまったオープンソースのCMSもあったけ。

MongoDBをCakePHP2で使う。

MongoDBのようなNonSQLに向いたサイトを作成を検討中。現在CakePHPは2に移行しつつあるので、CakePHP2からMongoDBに接続できるかのテストから始める。結果は、笑ってしまうくらい簡単に接続できた。MongoDBに対応したCakePHPのデータソース(仮にCake Mongoと呼んでおく)の開発者に感謝する。

CakePHPとMongoDBがインストールされたものとする。

PHPとMongoDBと接続するドライバーが必要である。WindowsのXAMPP上のテストなので、PeclからのインストールではなくMonboDBのサイトからWindows用のドライバのバイナリファイルを持ってくる。Apacheのバージョンに合わせてダウンロードする。php.iniの設定をして、phpinfo()で確認する。

以上は、検索すると出てくるので、詳細は各ページを参照する。

以下は、Cake Mongo開発者のプレゼン資料からの抜粋である。

データソースをGitから取得する。WindowsなのでGit Bashを使う。以下のコマンドを実行する。

[bash gutter=”false”]

> cd app/Plugin
> git clone git://github.com/ichikaway/cakephp-mongodb.git Mongodb
> cd Mongodb
> git checkout -b cake2.0 origin/cake2.0

[/bash]

これで、CakePHP2用の CakeMongoがダウンロードできる。

CakePHPのファイルの修正は以下の通り。まずはデータベースの接続の設定

/app/Config/database.php

[php]

class DATABASE_CONFIG {
public $default= array(
‘datasource’=>’Mongodb.MongodbSource’,
‘host’ => ‘localhost’,
‘database’=> ‘blog’,
‘port’=>27017,
}

[/php]

次に/app/Config/bootstrap.phpでCakeMongoのプラグインを読み込ませる。

[php]

CakePlugin::load(‘Mongodb’);

[/php]

後は、CakeMongoに付いてくるサンプルを動かしてみる。

データベースの設定をしなくていいので、簡単に動くことが確認できた。あっさり動くことに、逆に驚き。

CakePHP2での開発一段落

試しにCakePHP2で開発してきましたが、とりあえず一段落しました。

いろいろな命名が1.3から変わっていますので注意が必要です。HTMLヘルパーは必ず$this->Htmlにしなければいけないとか、Appの下のディレクトリが頭が大文字になっているとか、細かい変更がありますが、だんだんと慣れていくことでしょう。

一番変わったのは、Authコンポーネントです。こちらは参考となるサイトはありませんでした。やはりCakePHPの本家サイトのCookBookが一番まとまっています。というよりも、ここしか参考となる資料は今のところありません。ここで何回も言いましたが、CakePHP2の情報を知りたければ、絶対にCookBookを読む必要があります。

こいうことで、今年の営業はこれでおしまいにしていいかしら。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

Cakephp2でTextHelper::truncate()がおかしいとき

Cakephp2でTextHelper::truncate()を動かすと、1回目の処理が文字化けしてしまいました。どういう訳か2回目以降は正常に切り取ってくれます。

/lib/Cake/View/Helper/TextHelper.phpのソースを追ってみると、mb_strlen()が正しい文字列の長さを返していません。strlen()と同じ値を返してくれます。それで後のmb_substr()で正しく切り取ってくれていませんので文字化けしているようです。

strlen()になっているということは、予想通りmb_strlen()の第4パラメータにエンコードを指定しておけばOKでした。ということは、php.iniのmbstringの項目を正しく設定していないのが原因です。そこで、

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8

なんて設定してApacheを再起動すると、ソースに手を入れずにエンコードなしで文字化けしないで表示します。/app以外のソースはいじらないのが基本。

つまり、日本語のサイトを作成するときは、mbstringをサボらずに設定しましょうというという基本を忘れるなということでした。

テストから始めてみます。

最近はまじめにプログラムを書いています。あるサイトを再構築しているのですが、これまた大昔に作ったものでフレームを使っています。

試しにCakePHPで作成してみます。しかも、最新のCakePHP2です。

CakePHP2になるとUnitTestがSimpleTESTからPHPUnitiに変わりました。いろいろとカンファレンスに話しを聞いていると、アジャイルとか自分は感化されやすいので、まずはUnitTestでのテスト駆動開発を導入してみます。バージョン管理は前に導入していましたが、徐々に試してみます。

こうでも新しいことをしていないと、だんだんを開発のモチベーションが上がらないので。何でも試すことができるのは、一人で動いているせいでしょうか。

CakePHP2で使うPHPUnitの情報は、Googleさんに聞いてもほとんどありません。日本語での情報はありません。一番詳しいのは、CakePHP2のCook Bookです。ますはこちらを読むことを薦めます。結局、本家CakePHPにたどり着きました。英語ですけど、何とか読めます。

PHPUnitも開発元のサイトが一番詳しいということになりました。こちらは日本語に翻訳されています。

Fixruresのファイルは、CakePHPのBakeで作成するのが簡単のようです。DBから直接Fixturesにインポートすると、ちょっと大きなテーブルだとメモリが一杯になります。ソースを追ってみたところ、メモリにテーブルデータをすべて展開しているようです。最初は、何かバグでもあるのかと思っていました。Bakeで途中で聞いてきますが、一部を切り出した方がよさそうです。

テスト駆動開発は最初にテストコードを書いてからソースコードを書くのですが、まだまだテストコードを書くのを忘れて、直接コードを書いてしまいます。こちらは癖を付けなければいけません。

恩恵としては、リファクタリングするときはやはり効果があります。あとはエラーの赤を消して、緑にするという目標があって、プログラミングは楽しくなりそうです。

しかし、まだまだ、どうやってテストを書くのがいいのか迷います。我慢してしばらく続けようと思います。

Google+: View post on Google+

PoeditをWindows7 64bitで使うときの注意と回避方法。

CakePHPを使っていると、翻訳を処理するgettextのmoファイルを出力しなければいけません。そのためにpoファイルをPoeditで編集します。このPoeditは、WordPerssでも使われます。

しかし、PoeditをWindows7の64bit版で使うと、検索のダイアログが表示できないという障害あるため、Poeditは使いにくいものでした。しかし、調べてみると、Poeditのサイトでその障害の回避方法が載っていました。既出の障害らしいです。

その回避方法通りにすると、正常に検索ダイアログが表示されて検索できます。

回避方法は下記のリンク先に書かれていますが、regeditで、

  HKEY_CURRENT_USERSoftwareVaclav SlavikPoedit

にあるfind_pos_x と find_pos_yの2つのキーを削除するだけです。

これでWindows7の64bit版でPoeditが使えるようになりました。

Embedded Link

#437 (Search Window not visible in Windows 7)
– Poedit

Description. I am using POEDIT 1.4.6 on Windows 7 64 bit and have used the search option several times but now all of a sudden I can't access the search screen anymore. I see it is there in the ta…

Google+: View post on Google+

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

CakePHPでタイムゾーンを明示しないとUTCでcreatedに格納される

CakePHPで発生した障害の対応のメモ。

config/core.phpに

date_default_timezone_set('Asia/Tokyo');

とタイムゾーンを明示してあげないと、モデルからテーブルにレコードを追加したとき、UTCの世界標準時でcreatedに現在時間が格納されてしまいます。

PHP5.3からのようです。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解