2010年12月19日日曜日

Simple@Idx 2010/12/19

本年度最後のSimple勉強会です。
気がつけば終わってました。

◆特許について

特許取得を考えてます。
詳細は以降。

◆Dioモジュール

もう6年目も昔に書いた、いまだに使っているクラスを書き換えてました。

実は一昨年に書き換えようと思い立って90%ぐらい作ったのがあるんですが、気に入らなくて没にしてました。もう一度、インターフェースを考え直してみました。

名前だけは思いついてます。
Data Input/Output、すなわちDIO!

が、だらだらと書いているうちに、
気がつけば勉強会終了。

2010年12月10日金曜日

NetBeansでPHPのデバッグ

今まで何度も試してみたPHPのデバッグ。
WebStudio、TruStudio、PDTと試したけれど、うまく動かない。
やはり自分は設定作業が苦手らしい。

で、本日NetBeansでPHPのデバッグ出来るようになりました。
ブレークポイントで、一行ずつPHPを実行できる気持ちよさ。

面倒なので、Twitterのまとめです。

2010年11月20日土曜日

Cenaとは何?特徴は?

Cenaを使うと何が便利になるのか?
前回のエントリーで書いたローカルデータベースを使った場合の問題を解決できます。

つまり、データのシンクロナイズ、ローカル上のデータをサーバーにアップロードする処理が簡単になります。
  • 新規登録および既存データのID(プライマリキーですね)の追跡が簡単になるため、レコード間のリレーションを含めてアップロードできる
  • 更新したデータのみをサーバーにアップロードできる。
    しかもレコード単位でなく、修正した項目のみのアップロードが可能
  • 一度に複数の更新および新規登録データのシンクロが可能。
そもそもが難しい問題(と思う)ので、簡単にシンクロが出来るというよりは「(比較すれば)簡単になる」と書くべきかもしれません。

また、HTML5などのようなサーバー&クライアントといった関係でのみ対応が可能と考えてます。全てのどんなデータベースでも通信、というのは解決できてません。

2010年11月19日金曜日

HTML5のローカルDBを使う場合の問題点

Cenaというフレームワーク、のようなものを作ってますが・・・
なぜCenaを作る|使うのか?

HTML5が登場し、ブラウザーにローカルデータベースが出来たことで、ウェブアプリケーションの機能が飛躍的に向上します。サーバーと通信することなく、大量のデータを変更したり追加することが可能となります。リレーショナルデータベースを扱えるので、複雑な構造のデータでも扱える利点があります。

ただし、ローカルデータベースを使った場合、
難しい問題がいくつかあります。

2010年10月30日土曜日

Simple@Idx 2010/10/30

台風(ほぼ?)直撃の中のSimple勉強会。
作業は、いつものCena開発。

前回までに、既存データの
→ サーバーからダウンロード
→ ローカルHTMLでデータ修正
→ サーバーにアップロード
の一連の作業が動くようになった。

今回は、新しいデータをローカルで追加→サーバーにアップ、の部分。

2010年10月22日金曜日

PHP5.3でJavaScriptのようにメソードを上書きする(ように見せる)方法

JavaScriptをしばらくいじくった後、PHPに戻ると、一旦メソードを上書きでいないのにいらいらします。継承するか、インスタンス化して別クラスに委譲して別メソードをかぶせる、とかぐらいしか出来ません。

で、PHP5.3のクロージャー(無名関数)と__callを使って、
メソードを上書きできる、ように見せることが出来ました。


2010年10月2日土曜日

Simple@Idx 2010/10/02

今回のSimpleは朝倉さんの事務所にて。
自転車で4km。明大前→下北沢経由で16kmに伸ばしてきました。

前回から、Html5のWeb Sql Databaseと格闘。
昨日、やっと動き始めました。

で、Simpleでは残りの開発。

サーバー上のDBからデータをダウンロード
→ローカルのWebSqlDBにデータを登録。
→Html5+JavaScript(jQuery)のみでデータの表示・修正。
→データのアップロード、サーバー上のDBを書き換え。

までできました。

これで
-差分アップロード(修正した部分のみの変更)
-参照関連の変更(別項目へのリンクの変更)
ができるようになりました。

まだ新規データの登録ができてませんので、
次回への宿題?ということになりました。

2010年8月17日火曜日

Cena/HTML5でのローカルアプリ開発を考えてみる

開発中のCenaですが、
本命はHTML5のローカルアプリの開発です。
それもIndexed Databaseを使って、ローカル側のDBを使ったアプリです。Cenaを使えば、そういうウェブサイト・アプリが「簡単に」出来るような気がするもので。

と書いておいて、Indexed DatabaseのAPIを読み始めたばかりという状態なので、どれだけ「簡単」なのかは検討もつきません。少なくとも頭の中で考える分には・・・簡単なはず。

2010年8月16日月曜日

「Restっぽいやつ」あらためcenaに

例の「Restっぽいやつ」ですが、
リファクタリングを機に名前付けました。

クラス名をつけるときに統一しないとめちゃくちゃになるので。
で、

cena :Chained Entity Notation and Augumentation

です。
すでにインパクトにかけるとか悩んでますが。

2010年8月10日火曜日

「Restっぽいやつ」を書き直し

ざーっと開発していた「Restっぽいやつ」ですが、
さすがに書き直すことに決定。

今まで、DAO(Data Access Object)というパターンを使っていて、AR(Active Record)というのは横目でうらやましいなぁと思いながらも使ってませんでした。

が、この「Restっぽいやつ」はARと親和性が高い。
というかARを想定して考えてるようなもの。

なので、がーっと作ったら、ARとRestっぽいやつが混ざり合ったクラスになってしまいました。ということで、AR+RestっぽいRecord+Restっぽいマスター、の3レベルに分離。

が、元のコードが350行、分離して→合計700行に増えた。
まだ無駄なコードが少しあるけど、すっきりとした。

2010年8月6日金曜日

PHPUnitで一度の複数のテストを実行(addTestFile)

日本語の情報が少なかったので…
PHPUnitでテストを書いてますが、複数のテストクラスを一度に実行する方法。
PHPUnitの第7章「Organizing Test Suites」を読んだのですが、いまひとつ理解不能でした。で、ググって見たら簡単な方法を見つけました

2010年8月3日火曜日

HTML5のローカルストレージまとめ

ローカルで動くウェブアプリケーションを作ってみたいと思い立って、HTML5関連について調べてます。今はローカルストレージ中心。

たくさんありすぎのローカルストレージ

ちょっと調べたところ「cookie」「SessionStorage」「LocalStorage」「Web SQL Database」「Indexed Database」の5種類がありました。多すぎっ!

ただし、「Web SQL Database」はドロップされる模様。
このあたりを参考に。
http://groups.google.co.jp/group/...
http://www.publickey1.jp/blog/09/websql.html

SQL互換地獄に陥らなくてよかった…

また「SessionStorage」「LocalStorage」は大きく「Web Storage」という括りで理解すべきみたい。そして「Cookie」は、もういいでしょう。

となって、要するに

  • Web Storage (Session+Local)
  • Indexed Database


の2つを追いかければよさそうです。
ただ肝心のIndexed Databaseは、正式サポートしてるブラウザーがない・・・

簡単なサンプルデモを作るだけならLocal Storageで出来るかも。でも、ちょっと複雑なことをする必要があれば、今のところ「Web SQL Database」で作るしかなさそうですね。

2010年6月26日土曜日

Simple@Idx 2010/06/26

PHP5.3のPDOでMYSQL_ATTR_INIT_COMMANDが未定義だと?!!

お隣のY本さんがささやいた。
phpMyAdminで文字化けすると。

2010年6月24日木曜日

PDFLibで「Invalid UTF-16 string (odd byte count)」エラー

久々にPDFlibをいじくってたら、エラー。
ppsでfill_textblockした際に発生する。

動いてたコードを、そのまま持ってきたのになぁ…
バージョンの問題?CMapがおかしい?

2010年6月3日木曜日

PDOとPrepared Statementへ対応するぞ、と

こちらも長年の課題だったPrepared Statement。
なにしろ今使っているSQLマッパー(ORMなのか?)は2002年ごろ作ったコードを基にしてます。改良を加えつつ、使ってたのですが、いよいよPDOとプリペアドステートメントへ対応させることに決定。

しかし・・・PDOも、そしてPrepared Statementも、
なんて使いづらいんだ!

2010年5月28日金曜日

SQLのストアドプロシージャー使ってCMS多言語化の設計を考えてみた

ここしばらくCMS評価をしてましたが、 
「多言語化がサードパーティのプラグインでサポートされてる」
場合が多いのが気になります。本体をバージョンアップしたら多言語化プラグインが対応してない場合、最悪はサイト全てがダウンするかも(試してないので分からないけど)。

ということで、CMSなどで多言語化に対応するためのデータベース設計について考えてみました。で、今回は初めてストアドプロシージャーを使ってみました。

なんて、実際に走らせてないので動きませんが、上手に使えば便利そうですね→ストアドプロシージャー。

2010年5月27日木曜日

2010年5月24日月曜日

RESTっぽいHTMLフォームについて考えてみる

RESTのようなHTMLフォームについて考えてみた。
何を言いたいのか上手に説明できないので例を使って説明してみる。

◆まずは下記のようなHTMLフォームがあったとして・・・

2010年5月18日火曜日

遅まきながらの・・・PHPUnit

前からやろうと思いつつ、後回しにしていたユニットテスト。
遅まきながら手を動かすことにしました。

2010年5月14日金曜日

Joomlaのセクション/カテゴリとMenuについて

Joomla!で迷ったこととしてセクション・カテゴリがあります。
ちょっと思ったことがあるので、書いて見ます。

2010年5月13日木曜日

Joom!Fishで多言語の管理について

前回は、Joomla!にJoom!Fishを導入してウェブサイトを多言語化しました。

が、ひとつ不満だったのが、どの記事が翻訳されたのか分からなかったことでしたが、素晴らしい管理者画面が用意されてました。

2010年5月10日月曜日

CMSを試してみる

出世払いでウェブサイトの構築をすることになった。
簡単にページの更新ができて、そして複数言語(日本語、英語、それから色々)サポートが必要ということで、CMSを使ってみることにした。

2010年4月24日土曜日

Simple@Idx 2010/04/24

Simple勉強会@中山にて。
今日は何をしようか…
ひたすらPHPのコーディングをすることにした。

2010年4月1日木曜日

PHP:エラー処理いろいろ

例外について書いていて、本当に楽になるのかエラー処理を何通りか書いてみたくなりました。元ネタはこちらのページで、コードをそれっぽく写したものです。

2010年3月30日火曜日

PHP:例外をメッセンジャーとして使ってみる

プログラミングで一番重要で面倒でつまらないのがエラー処理で、
少しでも楽にならないかと、例外を使うことにしたわけですが・・・

エラー処理の中でも、一番面倒でつまらないエラーメッセージの扱いが楽にならないか例外使ってみました。って、簡単な話で、例外中にエラーメッセージ入れて飛ばします。

2010年3月29日月曜日

PHP:例外の投げ方を考えてみる

長い間悩んでいたが、PHPの例外を使うことを決心しました。
ただしキャッチの話じゃなくてthrowの方です。例外を投げるライブラリを使うと、catchしないといけません。ずっと「勝手に例外を放り投げるなよ」と思ってたのは秘密です。

2010年3月13日土曜日

Simple@Idx 2010/03/13

前回から3週間と短い間隔でSimple。
う、何しよう?
面倒なので、思いっきり仕事することに決定。

2010年2月16日火曜日

Synergyに感動した・・・

世の中バンクーバーで盛り上がってるみたいですが、
私は、Synergyというソフトで一人で盛り上がりました。

2010年2月2日火曜日

クラス設計は難しい

この一年近く、ライブラリを全面的に書き直している。
PHP5も出て随分経つし、早く移行したかったのだけど、なかなか機会がなくって。つい後回しにしてたのです。

2010年1月23日土曜日

Simple@Idx 2010/01/23

2010年、最初のSimple。
お題目は「俺々ツールの拡張」 。
ツールの名前はfmDB3。面白くない名前だ。何をするかというと、DBの登録・修正・削除を簡単に行うツール。なんというかRailsみたいな感じだろうか。

2010年1月21日木曜日

PHP::いろんな日付のフォーマットを統一するクラス

知り合いがTwitterでつぶやいたので、PHPでさくっと作ってみた。
いろんな日付+時間の入力を統一するクラスです。




使い方:
echo my_datetime::parse_datetime( 'Wed, 21 Jan 2010 11:41:25 +0000' );

出力:
2010-01-27 11:41:25

コード:

class my_datetime {
 /* ------------------------------------------------------------ */
 function parse_datetime( $str )
 {
  $date = self::std_date( $str, $e_part );
  $time = self::std_time( $str );
  
  return trim( "$date $time" );
 }
 /* ------------------------------------------------------------ */
 function std_time( $time )
 {
  if( preg_match( '/([0-9]{1,2})[:]([0-9]{1,2})[:]([0-9]{1,2})/', $time, $regs ) ) {
   list( $h, $m, $s ) = array( $regs[1], $regs[2], $regs[3] );
   $t_part = sprintf( "%4d:%02d:%02d", $h, $m, $s );
  }
  else 
  if( preg_match( '/([0-9]{1,2})時([0-9]{1,2})分([0-9]{1,2})秒/', $time, $regs ) ) {
   list( $h, $m, $s ) = array( $regs[1], $regs[2], $regs[3] );
   $t_part = sprintf( "%4d:%02d:%02d", $h, $m, $s );
  }
  return $t_part;
 }
 /* ------------------------------------------------------------ */
 function std_date( $date, &$e_part )
 {
  if( preg_match( '/([0-9]{4})[-.\/]([0-9]{1,2})[-.\/]([0-9]{1,2})(.*)/', $date, $regs ) ) {
   list( $year, $month, $day ) = array( $regs[1], $regs[2], $regs[3] );
   $d_part = sprintf( "%4d-%02d-%02d", $year, $month, $day );
   $e_part = $regs[4];
  }
  else 
  if( preg_match( '/([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日(.*)/', $date, $regs ) ) {
   $e_part = NULL;
   list( $year, $month, $day ) = array( $regs[1], $regs[2], $regs[3] );
   $d_part = sprintf( "%4d-%02d-%02d", $year, $month, $day );
   $e_part = $regs[4];
  }
  else 
  if( ereg( '([0-9]{4})([012][0-9])([012][0-9])(.*)', $date, $regs ) ) {
   list( $year, $month, $day ) = array( $regs[1], $regs[2], $regs[3] );
   $d_part = sprintf( "%4d-%02d-%02d", $year, $month, $day );
   $e_part = $regs[4];
  }
  else 
  if( ( $utime = strtotime( $date ) ) !== FALSE ) {
   $d_part = date( 'Y-m-d', $utime );
  }
  return $d_part;
 }
}

すでに似たようなクラスを持ってたので、ちょっと手を加えてみました。
と、ひとまず、こんな感じでどうでしょう?

新サイトアップとメール設定完了

ふぅ、新サイトのアップが完了しました。
トップページだけ、jQueryを使って簡単な動きを出しました。まったくの静的ページじゃ面白くないし、凝ると大変だし。結局、画像の透過率(Opacity)の変化だけになりました。余り意味のある動きではないのですが、まぁいいでしょう。

2010年1月5日火曜日

SQLでの空白をどうしよう?

SQL文をPHPで生成させる場合、空白のデータをどう扱うか悩んでいます。ウェブフォームでテキスト(form_text)や日付(form_date)という入力があったとして、何も入れていない場合です。ここから次のようなSQLを作成すると、
UPDATE table SET form_text='', form_date='';
日付は空白設定できないといって怒られるはずです。