Hatena::ブログ(Diary)

130単位

2008-03-23

CakePHPでテーブル不使用のモデル作成

ハマったのでメモ。

<?php
class ModelName extends AppModel
{
    var $name = 'ModelName';
    var $useTable = false;
}
?>

「var $useTable = null;」ではダメでした。『CakePHPガイドブック』p.105(初版)のuseTableの項に「NULLを設定することでデータベースを使用しないモデルとすることも可能です。」とありますが、誤りのようです。

以下の記事にはアプリケーション全体でテーブルを使用しない場合の設定方法が載っています。

CakePHP データベースを使わないアプリケーション | Shin x blog
http://www.1x1.jp/blog/2007/08/cakephp_no_db.html

ほか、ハマった点。

2008-03-22

CakePHP メールフォーム設置

f:id:deeeki:20080323034309j:image:w150,left

お問い合わせフォームを設けてみることにしました。全く経験のない分野だったこともあり、正常に動作させるまでにやたら時間がかかりました。

toyosystem | CakePHP::Simple SMTP Mailer ja(メール送信+日本語対応)
http://www.jamboree.jp/cms/archives/17

こちらの記事のソースを使わせていただきました。実現したかったのは、簡単なフォームから管理者宛のメールを送信できるようにすること。なので、シンプルな機能のもので十分でした。送信処理のメソッドに返り値が設定されてませんでしたが、まあ、気にしないことにしました。試してみたところ、うまく受信できていたので良しとします。というか、メール送信の根本的な仕組みがそもそもよく分かってなかったりするんですが…。

以下は調べた中でほかに検討したものです。

toyosystem | CakePHP::メール送信プラグインを書いた
http://www.jamboree.jp/cms/archives/16
codeなにがし::cakePHPで日本語メール送信
http://code.nanigac.com/source/view/316
CakePHPの日本語高機能メールコンポーネントSemail - CPA-LABテクニカル
http://www.cpa-lab.com/tech/086

2008-03-21

わずかなユーザビリティ向上

ラジオボタンにラベル
CakePHPHTMLヘルパーの出力タグを変更して、ラジオボタンにラベルをつける YARETOKO「ヤレトコ」メインブログ
http://mick.blog16.jp/index.php/main/2008/03/12/cakephp_radio_label

無いよりは有ったほうがマシですよね。tags.ini.phpは新規作成でも良いようですが、以下でダウンロード可能です。

/branches/1.1.x.x/cake/config/tags.ini.php - CakePHP : The Rapid Development Framework for PHP - Trac

検索条件の初期化ボタン設置

検索条件はサイドバーとして常に表示させていて、入力値を記憶する仕様になっているため。ページの再読込はせずにJavaScriptで。

AutoPagerize対応
AutoPagerize0.0.11 - SWDYH
http://d.hatena.ne.jp/swdyh/20070701/1183239979

埋め込みの形式は以下の通りです

link要素またはa要素でrel="next" (複数あった場合は、先に現れるものが選ばれます)

classでautopagerize_insert_before (複数あった場合は、先に現れるものが選ばれます)

classでautopagerize_page_element (複数指定可、指定したもの全てが挿入されます)

まだあまり存在は知られてないのかもしれませんが、利用者の中で数人でも「おっ」と思っていただけるのを期待して。

2008-03-20

覚え書き_080320

最近の激安PC、サーバのまとめ - Future Insight
http://d.hatena.ne.jp/gamella/20080316/1205637271

あまりの安さに驚いて全くの素人ながら興味を持ったため、詳しいひとにいろいろ聞いてみました。

  • ECCメモリ
    • メモリエラーを防ぐことができるメモリ
    • ただし最近は普通に使っててメモリエラーは滅多に起きないらしい
    • メモリの中央部にも半導体がついているのが特徴
    • 通常のメモリと比べて販売機会が少ないこともあって、値段は高め
  • サーバ
    • 電源がしっかりしているが、その分ファンの音がうるさい
    • 趣味でWebサイト公開する程度なら通常のデスクトップPCでも問題ない

ちなみに最小構成で買われると間違いなく赤字なのだそうです。その分サポートやらで回収するようにしてるとのこと。

2008-03-18

CakePHP キーワード検索のConditions作成

f:id:deeeki:20080318092927j:image:w150,left

前の記事の続きです。Cakeを用いて1日かけてつくりました。やはりキーワード検索が鬼門でした。

まず、日本語をパラメータとしてURLで渡すため、文字化けを考慮しないといけません。フォームを利用したときは問題なかったのですが、ページャーのリンクで文字化けが起きていました。毎回エンコードしたパラメータオプションとしてページャーに渡すようにして、なんとか解決できました。参考にしたのは以下URLなど。

PEAR Pagerのトラブル回避 : アシアルブログ
http://blog.asial.co.jp/359

そして、キーワード検索にAND検索とNOT検索を実装しようとしたのですが、予想以上に手こずりました。目指したのは、1つのテキストボックスで複数のキーワードに対応し、さらに2つのフィールドに問い合わせること。テキストボックスを分割すればまだ楽だったのでしょうが、そうはしたくありませんでした。で、ライブラリ的なものを探そうとしたものの見つけられず、散々悩んだ末にできたのが以下。

<?php
function makeConditions($keyword)
{
 $word_array = preg_split("/[ | ]+/", $keyword);

 foreach ($word_array as $k => $v) {
  if (mb_strpos($v, '-') === 0) {
   $c = mb_substr($v, 1);
   $cond['AND'][$k]['NOT']['OR']['Tbl.Col_A'] = 'LIKE %'. $c. '%';
   $cond['AND'][$k]['NOT']['OR']['Tbl.Col_B'] = 'LIKE %'. $c. '%');
  } else {
   $cond['AND'][$k]['OR']['Tbl.Col_A'] = 'LIKE %'. $v. '%';
   $cond['AND'][$k]['OR']['Tbl.Col_B'] = 'LIKE %'. $v. '%';
  }
 }
return $cond;
}
?>

見苦しい…ですね。配列にこだわらなければ正規表現ですっきり書けるのでしょうが、自分にはこれが限界でした。いちおう正しく動いてはいる、と思います。

あとは細かい部分を見直して、実際の運用に持っていけると良いです。

※3/19 コードの配列で冗長だった部分を修正

$cond['AND'][$k]['NOT']['OR'][] = array("Tbl.Col_A" => 'LIKE %'. $c. '%');
$cond['AND'][$k]['NOT']['OR']['Tbl.Col_A'] = 'LIKE %'. $c. '%';

2008-03-16

授業情報システムの検索方法

f:id:deeeki:20080317022526j:image:h150,left

趣味の開発に取りかかり始めました。とはいっても、以前行っていた研究の延長的なものです。

紙媒体でしか配布されていない授業の時間割表を、オンライン化してスケジュール検索機能を提供するのが目的です。使用可能なリソースとしては、2008度の授業情報をまとめたCSVファイルがあります。DBに関してはこれを基にインポートすれば良いので、実際の作業は抽出ロジックの作成とデザインのみとなってます。

で、今悩んでいるのがキーワード検索について。パラメータが単純な数値で済むスケジュール検索とは違い、いろいろと考慮が必要です。

実装するかどうか
  • そもそも実装しなければ開発はかなり楽
  • ただ、ニーズは確実にあるはず
  • 複数の時限で開講されている同一の授業を選ぶ際に役立つと思われる
スケジュール検索と別にするか
  • 入力方法やパラメータの展開が異なるので分けた方がすっきりするかも
  • 当然ながら分けない方が絞り込みができて便利
  • キーワードに条件を何か1項目加えて検索したい場面は多そう
  • 分けないならキーワード以外のデフォルト値は「指定なし」にするべきだろう
テキストボックスと対象フィールド
  • 1対1対応だとレイアウトがごちゃごちゃしてきそう
  • 1対多対応のほうがロジックのコード的にもすっきりする感じ
  • 一文字とかでなければ抽出結果は科目名か教員名どちらかに自然に振り分けられるはず

まあ、頭だけで考えていても結論は出ません。とりあえず、スケジュール検索と分けずに、テキストボックス1つで実装してみようかと思います。

2008-03-15

感想_22日目

働き始めて4週間が経ちました。正直なところ、疲れています。刺激や得るものの多い毎日でした。その分、負担もかかってきたのかもしれないです。ただし最たる要因は、通勤電車で毎日1時間弱立ちっぱなしであったことかと思います。かなり足にきています。

それにしても、このような生活が延々続くのかと思うと不安になってきます。自由に使える時間は明らかに減っており、やりたいことができていなかったりします。視野を広げていくためにも、自分の時間というのはしっかりと持ちたいものです。まずは自分で自分の仕事をコントロールできるレベルに達しなければなりません。経験を積むしかないのでしょう。モチベーションの維持と、生産性の向上、この2つも常に意識していきたいです。

といいながら、来週から2週間程お休みをいただきます。プロジェクトはまだ途中で申し訳なくはあるものの、もともと了承は得ていましたし、個人的には良いタイミングではないかと思います。心遣いをしていただいた皆様には感謝したいです。気持ちを新たにして、戻ってきます。

2008-03-14

感想_21日目

本日は、作業開始前に紙にtodoを書き出してみた。分割できるタスクは分割しつつ。およその作業時間の見積もりが立てられ、どれから手を付けていくのが良いかが事前に把握できた。おかげで普段よりもスムーズに作業が進められたと思う。

現在のプロジェクト、コーディングに関しては終盤といったところ。しかし課題はまだまだ残っている。その中でも一番の懸念は、統一性がないことだろうか。命名規則やエラーチェック方法などに、若干のずれが生じてしまっている。これらを統一するとなると、さらに修正に時間を要することになる。設計は重要である、と、つくづく思う。

2008-03-13

メモ_20日目

  • PHP開発
    • 入力パラメータのチェックは何度も行わない
    • 最も適切なメソッド内で、1度のみチェックする
    • システム上のエラーとユーザー入力などのエラーを線引きする
    • exception、リターンコードによる判断を使い分ける
    • 運用時のログは「いつ・誰が・どこで・なに」をしたかを簡潔に記録する

2008-03-12

感想_19日目

なんかだめだ。生産性が良くない。作って動いていたものを、思想というか規約の観点から修正が必要になって、書き直してまた動くまでデバッグしたり。複数人×仕様書無しの開発がここまでしんどいとは。段取り八分という言葉が思い浮かぶ。

たとえ仕様書が無くとも、もう少し良い進め方はあったように思う。例えば、todo、疑問点、作業の割り振り、得たノウハウなどを、Web上に書き留めて共有しながら開発とか。当然ながら自分のスキルが足りないことも原因としてあり、なんとかして改善していかなければいけない。

2008-03-11

メモ_18日目

  • PHP開発
    • 表示用文字列にはすべて定数を使用
    • メソッド呼び出し側では引数として「null」は書かなくてよい*1
    • クラス内変数は明示的に宣言する*2
    • DBからのデータを表示用に整形する際はビュー側で指定する
    • 再利用のためにコントローラーではなくサービスで引数チェック
    • if文の処理は1行で書かず、「{」「}」でくくる
    • 「_」はprivate用、「__」はシステム用 ← C言語に倣っている

*1:だいたいメソッド内でnullで初期化されるようになってるため

*2:若干の高速化が見込めるらしい

2008-03-10

感想_17日目

javascriptが苦手です。

インクルードしたり、先頭または末尾に書いたり、はたまたタグ内に書いたり。その時点ですでに戸惑ってしまいます。あと、やれることが多いって印象。ゆえに難しく感じてしまいます。

しかし、Web系の開発においては避けては通れないものでしょう。時間をかけて基礎から身につけていく必要があると感じます。

そんなわけで、本日から記事は1日10分以内で書くことにしてみます。メモと感想どちらかにします。余った時間をインプットと勉強にまわしたいと思います。

2008-03-09

家計簿ソフト4種類 画像付き簡易比較

3月から改めて家計簿を付け始めることにしました。今まではExcelで管理していたのですが、集計機能とGUIにやや不満がありました。ちょうど節目の時期でもあったため、何か良いソフトはないものか探してみることにしました。以下、実際にインストールして試したソフトの簡単な比較です。画面をキャプチャしたものも添えてます。





この中で自分が使うことにしたのは「うきうき家計簿」です。月々で決まった収支の自動入力、さらにクレジットカードにも対応しているのが良いと感じました。また、分類名や店名などを自分好みに細かく設定できるのも魅力です。フリーソフトですし、分類1つと金額のみでの大雑把な入力も可能なので、初めて家計簿をつける人にもおすすめです。

検討の際は以下も参考になるかと思います。

はてなブックマーク - タグ 家計簿
2ch : 家計簿ソフト 4
2ch : 使える「家計簿ソフト」って無いですか?pt.3

2008-03-07

感想_16日目

第一段階のコーディングは済みました。データの受け渡しも一応うまくいっています。ところどころ無理やりなコードがあったりするので、今後のレビューを通してよりスマートなものにしていければと思います。

全くの未熟者ではありますが、できる限りDRY*1なコードを書きたいと考えています。が、それでは分かりにくいとの指摘を本日受けました。可読性を重視するため、処理ごとにメソッドを分けてほしいとのことです。

しかし、コードの量が増えるのというはどうなんでしょう。似たような処理が並んでしまうことになります。コメントを詳しめに書くようにすれば、十分補えるかと思うんですけどもねぇ。

とまぁそんな葛藤があったりするものの、開発ペースは今のところ順調で、楽しくやれております。

メモ_16日目

  • プロジェクト
    • 画面など動くものが最低限揃ったら、レビューを行う
    • そのあとに設計の見直しやコードのリファクタリングを行う
  • フォーム
    • ファイルを送信する場合は「enctype="multipart/form-data"」を指定する
    • 指定してなくてファイル送信欄があった場合、Firefoxではsubmitボタンが押せなくなるみたい

*1:Don't Repeat Yourself…繰り返さないこと

2008-03-06

感想_15日目

引き続きフレームワークと格闘中。ビューはほぼ出来ているので、コントローラーとモデル(サービス)の土台を作成してるところです。テストデータを用いての動作確認は明日行う予定です。無事に終わると良いです。

メモ_15日目

2008-03-05

感想_14日目

まあまあの生産性でした。まだ始まって2日目ですが、なんとかスケジュール通りにやれているかと思います。

今回のプロジェクトには、きちんとした設計がありません。社長の意向により、リリースのスピードを重視するためのようです。のちのデバッグや修正において、必要以上に時間がとられそうだという不安はあったりします。が、コーディングする傍らで設計にも関与していけるのは、自分にとっては非常に恵まれた環境だと思えます。経験値を増やしていきたいです。

メモ_14日目

2008-03-04

感想_13日目

Cakeの経験はほとんど役立たず、ひどい生産性でした。個人でのCake開発とは異なっていた、大きな要因が2つ。マニュアル本がないこと。と、Bake的な自動生成機能がないこと。

他の開発済みシステムのソースを見てやってほしいということでしたが、そんな柔軟な適応能力はありません。ましてやフレームワークですから、ファイルが多すぎて目的のソースを探すのにも一苦労です。せめて設計かマニュアル、どちらかさえしっかりしてれば助かっただろうなぁと思ったりします。

別の事業部にて、配信予定の動画作成が行われています。その第1弾作品のプロトタイプを見せてもらいました。これが実に面白い。計ってか計らずか、イスに座って揺れているshimizu氏が良い味出しているのに特に感動しました。

メモ_13日目

2008-03-03

感想_12日目

いろいろと新しいことをしました。午前中は新規社内プロジェクトの会議に参加。午後はPCのセットアップと、その簡易マニュアル作成。

セットアップ用マニュアルは元々社内専用wikiに存在してました。が、情報が古かったり内容が煩雑だったりといった課題が残ってました。そこで、直せるところは直してみたというわけです。編集していて感じたのですが、はてな記法とほとんど同じなんですね、wiki記法。ややこしそうだという先入観がありましたが、比較的スムーズに理解することができました。ささいなことでも、趣味での経験が仕事で活かされるのはなんだかうれしいものです。

また、新規プロジェクトはPHPによるフレームワークを用いたサイト構築です。こちらでもCakePHPの開発経験が活かされると良いです。

メモ_12日目

2008-03-02

AutoPagerize体験

先日こちらの記事を読み、「AutoPagerize」というブラウザの機能拡張スクリプトがあることを知りました。「GoogleAutoPager*1」は以前から利用していたのですが、さらに様々なサイトの自動読み込みに対応したものだということです。早速導入してみました。

Firefox
Sleipnir

感想としては、これはすごい、です。GoogleAmazonYouTubeなどの検索結果、さらには各IT系ニュースサイトからTwitterにまで対応しています。クリックすることなくホイールのみで閲覧し続けられるのが非常に快適です。初めてタブブラウザに触れたときと同じくらいの衝撃がありました。慣れてしまったら戻れそうにありません。おすすめです。

*1Google検索結果の次ページを自動で読み込んでくれるもの

2008-03-01

パスワード管理まとめ

3-4月、節目の時期です。身辺整理や意識の変革をするのにはいい機会です。

というわけで、パスワードの管理方法を改めてみようと思い立ちました。はてブを中心に調べた結果をまとめてみます。

参考記事
Webサービス
ソフトウェア

10文字以上かつ、記号含む大小英数字
+
「Password Chart」で数種類のトークンを用意(定期的に変更)
+
自分ルールによってサービス別に異なる文字列を追加
+
「ID Manager」で管理

自分の場合はですが、いいとこ取りでこのようなかたちでいこうと決めました。さんざん悩みました。

Connection: close