2008年10月30日木曜日

suz-lab月末レビュー(2008/10)

スズキです。

自己啓発宣言から一ヶ月たちました。
http://suz-lab.blogspot.com/2008/09/blog-post_25.html

月末に、それがどれだけ実現できてるか
レビューすることにしました。

【やること】
▼ブログ
・毎日1エントリ以上 → 問題なし
・毎日1エントリ以上、毎週14エントリ以上に
・たぶん可能でしょう。
▼書評
・毎週一本以上 → かろうじて
・毎週一本以上、毎月、あるテーマに対して
いくつかの本(書評の本も含む)を読んでのまとめも行う
・これはチャレンジだなー。
▼フットサル
・毎週一回以上 → 問題なし
・毎週二回以上に
・月・日でいけるでしょう。
▼中国語
・毎日1時間以上 → まったくしてない…
・来月環境がかわるので、それで方向性が見えるかも!?
▼IT系作品発表
・毎月1作品 → PHPフレームワーク0.0.1リリースということで
・毎月1作品のまま
・来月はPHPフレームワーク0.0.2リリースしよう

【やらないこと】
・毎日"Google Analytics"をみること(週末だけ)
・平日2chをみること(週末だけ)
・スナック菓子を食べること
・酒

近頃、いろいろ忙しく、
どう時間を使うかがポイントになってきているので、
【やらないこと】も決めて実施できるよう努めることもしました。

もっと最適化したい…

--
http://suz-lab.blogspot.com/

今日のブックマーク 10/30/2008


Posted from Diigo. The rest of my favorite links are here.

2008年10月29日水曜日

ギョイゾー!

スズキです。

すごすぎです。
http://blog.livedoor.jp/habuakihiro/archives/65118149.html

あこがれます。

僕もできるだけ早く、
こういうことができるベースを作りたいと思っています。

まずは、ワークフローを
DBくらい自然に使えるようにしなければ!

--
http://suz-lab.blogspot.com/

2008年10月28日火曜日

C#で"Hello World!"

スズキです。

今、Silverlightがんばってます。
C#でがんばってます。

でも、C#久しぶりすぎて、全部忘れてました。

ということで、お約束の"Hello World!"からです。

--------【C#】
using System.Diagnostics;
namespace HelloWorld {
  static class Program {
    static void Main() {
      Debug.WriteLine("Hello World!");
    }
  }
}
--------

Debug.WriteLineは
「ぎゅう☆ぎゅう倶楽部(http://ushi.donburi.net/)
から教えてもらいました。

まだまだ、いろいろ教えてもらうと思うので、
よろしくお願いします。

--
http://suz-lab.blogspot.com/

2008年10月27日月曜日

AnkhSVNで"Visual Studio 2008"からSVN

スズキです。

こちらでも書きましたが、Silverlightやることになりました。
http://suz-lab.blogspot.com/2008/10/silverlight.html

当然、"Visual Studio 2008"をメインで使っていくのですが、
ソース管理は今まで慣れ親しんできた、SVNでやりたいところです。
(MS系ならVSSということだと思いますが...)

で、いろいろ探していたら、やっぱりありました。
▼AnkhSVN
http://ankhsvn.open.collab.net/

インストーラーがあるので、簡単に導入できます。

次はSilverloghtプロジェクトをSVNにインポートだ!

--
http://suz-lab.blogspot.com/

おちまさと企画塾(1日目)

スズキです。

以前、デジハリの「おちまさと企画塾」に参加します
http://suz-lab.blogspot.com/2008/10/blog-post.html
と書きました。

そして、今日(昨日)がその一日目です。

最初の一時間は、おちさんのお話、
残りの一時間は質疑応答という形で進められました。

まず「企画」という言葉ですが、こんな感じです。
-予言(爪先立ちして遠くを見る)
-記憶の複合(2以上くっついたら企画)
-「立案 - 実践 -結果」まで

そして次にいい企画に関してですが、こんな感じです。
-出所がわからない
-ポジティブプランニングとネガティブシミュレーション
-プライオリティ(背骨)がぶれない
-ありそうでなかった(1工程先をサービス)
-振り幅が大きい

ま、実際に参加しないと、何書いてるんだ?って感じですね。
たぶん、このあたりの書籍に書いてあることだと思います。
▼企画の教科書 おちまさとプロデュース
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4140807822
▼おちまさとプロデュース企画の教科書2 企画火山!
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4140810025

宿題がんばろう!

--
http://suz-lab.blogspot.com/

2008年10月26日日曜日

(書評) フォーカス・リーディング

スズキです。

今回も速読ネタで、フォーカス・リーディング
「1冊10分」のスピードで、10倍の効果を出す いいとこどり読書術
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4569701620
です。

まずは目次です。
--------
▼理論編
【1. あなたがはまりがちな"読書のワナ"】
【2. 読書に何を求めるのかをはっきりさせる】
▼鍛錬編
【1. 速読は体育会系のノリで身につける】
【2. 「体」を極める】
【3. 「技」を極める】
【4. 「心」を極める】
▼実践編
【1. フォーカスの力を最大限引き出す読書術】
--------
目次の詳細はこちら(ほとんど一緒)
http://www.amazon.co.jp/gp/product/toc/4569701620/?tag=iretsuzusblog-22

「おわりに」に書いてあるのですが、
この本の著者は、「多読、速読」に対して反省しているようです。
びっくりしました。

それは、本文中の下記のフレーズからも伺うことができます。

「読書をすればするほど、自分の頭で考えなくなる」
(本の思考プロセスをトレースしただけで満足してしまう)

「量は質に転化しにくい」
(個々の質(本の内容、理解度)が悪ければ、意味が無い)

今、たくさん本を読もうと思っている僕にとって、
これらは衝撃的な言葉です。

「本は読むだけでなく、そこからのアウトプットを常に心がけ、
手当たり次第に手を出さず、本の質にはこだわらなければならない。」
ということでしょうか?(肝に命じときます...)

ということをふまえて、読書術の方法が紹介されています。
つまり、「TPOに応じて読書方法を切り替える」ための、
そのひとつの方法である速読術の紹介、といった感じでしょうか?

速読術に関しては、よく耳にする、「集中について」「目の使い方」
などが書かれており、まあ、手段はどこでも一緒なのかなー
、といった印象です。
ただ、練習方法が結構具体的なので、じっくり読んで、
試してみたいところです。

僕にとってこの本は、多読について戒めとなる貴重な一冊でした。
今、読めてよかった...

--
http://suz-lab.blogspot.com/

2008年10月25日土曜日

Silverlight開発環境のインストール

スズキです。

ついに、Silverlightデビューすることになりました。

ということで、早速、開発環境をインストールです。
基本的には、こちらの情報に沿って進めることになります。
http://silverlight.net/GetStarted/

具体的には以下のものを、以下の順番で
ダウンロード&インストールしました。

「Visual Studio 2008 (英語版)」
(自前で用意する必要があるのかな?)

「Visual Studio 2008 Service Pack 1 (英語版)」
(Microsoftのサイトからダウンロードできます)

「Silverlight Tools for Visual Studio 2008 SP1 (英語版)」
(Microsoftのサイトからダウンロードできます)

「Expression Blend 2 Trial (英語版)」
(Microsoftのサイトからダウンロードできます)

「Expression Blend 2 SP1 (英語版)」
(Microsoftのサイトからダウンロードできます)

全部インストールするのに時間かかりすぎ...

--
http://suz-lab.blogspot.com/

2008年10月24日金曜日

(suz-php-jquery) Dao.phpのメソッド名のルール

スズキです。

とりあえず、Dao.php関係の最後の独り言です。

$dao = new Dao();
$dao->selectHogeList();

といった感じで使うわけですが、
このメソッド名には下記のような実はかなりの制約があります。

▼selectXxxList
SELECT文で取得データが複数の場合。
戻り値は取得データ(連想配列)の配列となります。

▼selectXxxItem
SELECT文で取得データが単一の場合
戻り値は取得データ(連想配列)となります。

▼insertXxx/updateXxx/deleteXxx
INSERT文/UPDATE文/DELETE文の場合。
戻り値は追加/変更/削除した行数です。

まあ、要は下記ソースです。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/lib/Dao.php

まだ、恥ずかしいコードなので、リファクタリングしないと...

--
http://suz-lab.blogspot.com/

(suz-php-jquery) Dao.phpでSQLのパラメーターに値をバインドするには?

スズキです。

以前、簡単なDao.phpの使い方を紹介しました。
http://suz-lab.blogspot.com/2008/10/suz-php-jquery-dao.html

当然、下記のようなSQLのパラメーターに値をバインドしたくなります。

--------【SQL】--------
SELECT *
FROM AREA_MST
WHERE area_id = :area_id
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/sql/app/example/selectHogeItem.sql

このように、メソッドの引数に連想配列与えることにより、
パラメーターに値をバインドすることができます。

--------【PHP】--------
require_once "Dao.php";
class ExampleAction {
  public function select2() {
    $dao = new Dao();
    $params = array(
      "area_id" => 1
    );
    return $dao->selectHogeItem($params);
  }
}
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/app/Action/ExampleAction.php

SQLのパラメータ名と連想配列のキーを
合わせることがポイントです。

あと一つで、Dao.phpの最低限の説明は終わりだ...

--
http://suz-lab.blogspot.com/

Apache(PHP:pdo_mysql)起動時にlibmysql.dllがないよエラー、再び

スズキです。

以前、下記の記事にて、表記の問題とその対策法を書きました。
http://suz-lab.blogspot.com/2008/04/apachephppdomysqllibmysqldll.html

記事では、MySQLインストール(一式そろっている)
というのが前提だったのですが、
一式なくても可能な対策方法がありました。

それは
「libmysql.dllをhttpd.exeがあるフォルダに置く」
です。

PHPからクライアントとしてつなぐだけなら、
この方法のほうが、お気楽でいいですね。
(Apacheのアップデートには注意が必要です)

そろそろ、Silverlightの制作環境、インストールしないと...

--
http://suz-lab.blogspot.com/

Eclipseでログの監視(Logfile Viewer)

スズキです。

現在、Eclipse(3.4)を使ってPHPの開発していて、
当然、Apacheのエラーログを逐次チェックする必要があるので、
ちょっと、Eclipseのプラグインを調べてみました。

とりあえず、Pleiades入れたら日本語になって欲しいので、
下記からの選択となります。
http://sourceforge.jp/projects/mergedoc/wiki/Pleiades%E5%AF%BE%E5%BF%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%B8%80%E8%A6%A7

該当するものは、

▼LogWatcher
http://graysky.sourceforge.net/
▼Logfile Viewer
http://logfiletools.sourceforge.net/update/
▼NTail
http://www.certiv.net/products/ntail.html

の三つです。

メンテナンス性を考えて、アップデートサイトのあるものに絞ると、
必然的に、"Logfile Viewer"になります。
http://logfiletools.sourceforge.net/update/

ということで、早速、上記サイトからインストールして、
エラーログの監視が簡単にできるようになりました。

そろそろ、Eclipseの日本語化がしたい...

--
http://suz-lab.blogspot.com/

(suz-php-jquery) srcフォルダに置くもの

スズキです。

suz-php-jqueryでは、プロジェクト直下に
srcというフォルダを用意しています。

このフォルダは、運用時に存在しなくても、
動作することを想定しています。

ですので、FLAファイル、PSDファイル、DBのDDL
そして、仕様のドキュメントなどは、このフォルダに置くべきです。

ファイルの種類で、さらにサブフォルダに分けるようにしているので、
実際にはこんな感じです。

src/doc : 仕様などのドキュメント
src/ddl : DBのCREATE文など
src/fla: FlashのFLAファイルなど
src/psd: PhotoshopのPSDファイルなど
src/...: その他必要に応じて

とりあえず、好きに使ってくださいって感じですね。
(動作に関係ないし、どっちかというとガイドラインかな?)

--
http://suz-lab.blogspot.com/

(suz-php-jquery) "Google Code"のIssues

スズキです。

"suz-php-jquery"のTODO管理を
"Google Code"のIssuesでやることにしました。
http://code.google.com/p/suz-lab/issues/list

とりあえず、"EMP WORDS"(http://blog.emp.fem.jp/)
に依頼されたもの3件入れておきました。

とりあえず、忘れないようリストですが、
有効に使っていきたいところです。

--
http://suz-lab.blogspot.com/

(suz-php-jquery) Daoの使い方

スズキです。

まず、DB接続情報に関してですが、こちらの記事でふれています。
http://suz-lab.blogspot.com/2008/10/suz-php-jquery_24.html

そして、DBアクセスは下記のようなコードで
実現できるようにしています。

--------【PHP】--------
require_once "Dao.php";
class ExampleAction {
  public function select() {
    $dao = new Dao();
    return $dao->selectHogeList();
  }
}
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/app/Action/ExampleAction.php

上記は実際、"sql/app/example/selectHogeList.sql"の
SQLファイルが実行され、その結果がJSONになります。
(デフォルトフォルダはActionのフォルダに準じています)

SQLファイルのフォルダを指定したいときは、下記のようにします。
$dao = new Dao("lib");

そうすると、"lib"以下のSQLファイルが対象となります。
(共通SQLなどはこのように共通フォルダを指定して使います)

最後に、実際のDaoのソースはこちらになります。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/lib/Dao.php

まだまだ、リファクタリングが必要だ...

--
http://suz-lab.blogspot.com/

(suz-php-jquery) 定数管理ファイル

スズキです。

定数は下記のようにdefineで設定します。

--------【PHP】--------
define("DAO_DSN" , "mysql:host=localhost;port=3306;dbname=test");
define("DAO_USER", "");
define("DAO_PASS", "");
----
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/app/Define/DaoDefine.php

で、この定数設定ファイルを"php/app/Define"に
置くことにしています。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/app/Define

とりあえず、現状、

DaoDefine.php: データベース接続情報など
StompDefine.php: Stomp接続情報など
AppDefine.php: プロジェクト固有の定数
App/XxxDefine.php: サブプロジェクト固有の情報

といった感じにしています。

次は、DaoDefine.phpがらみで、ようやく、DBアクセス部分です。

--
http://suz-lab.blogspot.com/

2008年10月23日木曜日

Shadowbox.jsでフォームを表示してvalidateプラグインを適用

スズキです。

いろいろ試行錯誤しましたが、こんな感じです。

--------【HTML】--------
<p>
  <a href="#login" rel="shadowbox;width=500px;height=400px"
    title="ログイン">ログイン</a>
</p>
<div id="login">
  <form class="login">
    <dl>
      <dt>ユーザー</dt>
      <dd>
        <input name="username" type="text"/>
      </dd>
      <dt>パスワード</dt>
      <dd>
        <input name="password" type="password"/>
      </dd>
    </dl>
    <div>
      <input name="login" type="submit" value="ログイン"/>
      <input name="cancel" type="button" value="キャンセル"/>
    </div>
  </form>
</div>
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/example/shadowbox.html

--------【JavaScript】--------
$(function(){
  var options = {
    enableKeys: false,
    onFinish : validate
  };
  Shadowbox.init(options);
});

function validate() {
  $("#shadowbox .login").validate({
    rules: {
      username: "required",
      password: "required"
    }
  });
}
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/app/example/shadowbox.js

【ポイント】

▼formにclassをつけて、classで特定するようにしています。
idにしなかった理由は、Shadowbox.initをかけると、
同じformがShadowbox表示部分にコピーされて、
同じidが二つ存在し、気持ち悪いので、classにしています。

▼validateプラグインをShadowboxのonFinish時に適用している。
onFinishはShadowboxが開き中身のコンテンツが
表示された後に実行されるイベントです。また、
class="login"のタグは二つ存在するので、
Shadowbox内のものに特定するためにセレクタを、
"#shadowbox .login"にしています。

そろそろ、form/validateプラグイン、Shadowbox.jsを使った、
汎用ログイン機能の作成にとりかかれそうかな?

その前にDBアクセスまわり、やらないと...

--
http://suz-lab.blogspot.com/

Shadowbox.jsでフォームを表示

スズキです。

こんな感じで表示できます。

--------【HTML】--------
<p>
  <a href="#login"
      rel="shadowbox;width=500px;height=400px"
      title="ログイン">ログイン</a>
</p>
<div id="login">
<form>
<p><input type="text"/></p>
</form>
</div>
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/example/shadowbox.html

--------【JavaScript】--------
var options = {
  enableKeys: false
};
Shadowbox.init(options);
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/app/example/shadowbox.js

ここで注意点ですが、Shadowbox.jsの
initメソッド実行時のオプションに、
enableKeys: false
を指定する必要があります。

これを指定しないと、キー入力ができなくなります。

でも、"validate plugin"がきかないらしい...

--
http://suz-lab.blogspot.com/

2008年10月22日水曜日

(suz-php-jquery) "jQuery Form Plugin"の利用

スズキです。

suz-php-jqueryでのJSONを軸とした非同期通信部分は
大体できたので、最後に"jQuery Form Plugin"を
使ったサンプルを作りました。
http://www.malsup.com/jquery/form/

こんな感じで簡単に実現できます。
(詳しくは"CTOA日記"でも紹介されています)
▼jQuery Form Pluginの使い方 その1
http://blog.livedoor.jp/hiroki0907/archives/51070303.html
▼jQuery Form Pluginの使い方 その2
http://blog.livedoor.jp/hiroki0907/archives/51071455.html

--------【HTML】--------
<head>
<script type="text/javascript" src="../JS/ext/jquery.js"></script>
<script type="text/javascript" src="../JS/ext/form.js"></script>
<script type="text/javascript" src="../JS/app/example/form.js"></script>
</head>
<body>
<form id="myForm">
<input type="text" name="key1"/>
<input type="text" name="key2"/>
<input type="submit" value="test"/>
</form>
</body>
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/example/form.html

--------【JavaScript】--------
var options = {
  url: "../PHP/json.php/Example/test",
  type: "POST",
  dataType: "json",
  success: function(json, status) {
  alert(json.key1);
  alert(json.key2);
    alert(status);
  }
};
$("#myForm").ajaxForm(options);
--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/app/example/form.js

後は、別で動いている"EMP WORDS"の
FormプラグインとValidateプラグインとShadowbox.jsが
連動したものの完成を待ちつつ、
DBアクセスまわりの作りこみです。

(それも明日完成させよう!)

--
http://suz-lab.blogspot.com/

(suz-php-jquery) postJSONの組み込み

スズキです。

以前「jQueryにpostJSON」という記事を書きました。
http://suz-lab.blogspot.com/2008/10/jquerypostjson.html

これを、suz-php-jqueryにも取り込みました。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/lib/prototype.js

でサンプルです。

--------【JavaScript】--------
var params = {
 "key1": 1,
 "key2": "two"
}
$.postJSON(
  "../PHP/json.php/Example/test",
  params,
  function(json) {
 alert(json);
});
--------【JavaScript】--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/app/example/post_json.js

--------【PHP】--------
class ExampleAction {
 public function test() {
  $obj = array();
  $obj["key1"] = $_POST["key1"];
  $obj["key2"] = $_POST["key2"];
  return $obj;
 }
}
--------【PHP】--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/php/app/Action/ExampleAction.php

POSTで送ったパラメーターをPHP側で
そのままJSONにして返しています。

そろそろ、DBアクセスまわりも整備しなくては...

--
http://suz-lab.blogspot.com/

(suz-php-jquery) JSON出力の仕組み

スズキです。

ようやくPHPです。今回の枠組みは、
jQueryでのJSONを使った非同期通信をメインとしているので、
まずは、JSON出力のところを作成しました。

ポイントは"webapp/PHP/json.php"です。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/PHP/json.php

下記のようにPATH_INFOを利用して、
対象となる"php/app/Action"下のActionクラスのメソッドを実行し、
その結果をJSONとして出力します。

▼http://localhost/PHP/json.php/Example/select
ExampleAction.phpのExampleActionクラスが持つ
selectメソッドを実行

▼http://localhost/PHP/json.php/Example/Sub/select
Example/SubAction.phpのSubActionクラスが持つ
selectメソッドを実行

▼http://localhost/PHP/json.php/Example/Sub/SubSub/select
Example/Sub/SubSubAction.phpのSubSubActionクラスが持つ
selectメソッドを実行

エラー処理など細かいところはありますが、
とりあえずということで。

--
http://suz-lab.blogspot.com/

(suz-php-jquery)にShadowbox.jsを採用

スズキです。

suz-php-jqueryフレームワークのダイアログ関係は、
Shadowbox.jsを利用することにしました。
http://www.mjijackson.com/shadowbox/

こんな感じで使えるようにしています。

--------【HTML】--------
<head>
  <meta http-equiv="Content-Type"
    content="text/html; charset=utf-8" />
  <title>Shadowbox</title>
  <script type="text/javascript"
    src="../JS/ext/jquery.js"></script>
  <script type="text/javascript"
    src="../JS/ext/shadowbox.js"></script>
  <script type="text/javascript"
    src="../JS/app/example/shadowbox.js"></script>
</head>
<body>
  <p>
    <a rel="shadowbox"
        href="../IMG/app/example/shadowbox.jpg"
        title="テスト">テスト</a>
  </p>
</body>
--------【HTML】--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/example/shadowbox.html

--------【JavaScript】--------
var BASE_DIR = "../JS/app/example";
Shadowbox.loadSkin(
  "SHADOWBOX", BASE_DIR
);
Shadowbox.loadLanguage(
  "ja", BASE_DIR + "/SHADOWBOX"
);
$(function(){
Shadowbox.init();
});
--------【JavaScript】--------
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/app/example/shadowbox.js

"ext/shadowbox.js"は、ダウンロードページより、
--------
Adapter: jQuery
Language: None
Players: img, html, iframe, swf, flv
--------
で作成しています。

また、lang、skinはプロジェクト毎に変更するものなので、
JS/app下の任意の位置のSHADOWBOXフォルダ下に
置くようにしています。
(skin, langフォルダ別にもしていないので注意が必要です)

よし、次はPHPだ!

--
http://suz-lab.blogspot.com/

"JSONICで文字化け"が修正されました

スズキです。

以前、JSONICで文字化けするよー、といった記事を書きました。
http://suz-lab.blogspot.com/2008/10/jsonic.html

そしたら、作者の方が、この記事を見つけてくれて、
本体を修正してくれました。(ブログコメントでやり取りしています)
http://www.haloscan.com/comments/iretsuzuki/2757705857423133486/

修正版は下記になります。(バージョン1.0.3です)
http://sourceforge.jp/projects/jsonic/downloads/33354/jsonic-1.0.3.zip
なおしていただいた内容は、ChangeLogの
http://sourceforge.jp/projects/jsonic/releases/33354/changelog

> Encode/Parse時にJSON stringにて
> \\\\uXXXX形式で文字を指定した場合に
> 変換に失敗していた問題を修正しました。

の部分です。

このバージョンのJSONICを使うことにより、
{"sample1":"\u30c6\u30b9\u30c81","sample2":"\u30c6\u30b9\u30c82"}
といったJSONデータが入った変数jsonを
SampleDto dto = JSON.decode(json, SampleDto.class);
と単純にJavaBeansに変換しても、
文字化けしないようになりました。
(コードがシンプルになってうれしいです!)

ということで、作者の方、ありがとうございました!
(独り言も言ってみるもんだなー...)

--
http://suz-lab.blogspot.com/

Pidgin Portable 2.5.2 リリース

スズキです。

表記の通りです。
http://portableapps.com/news/2008-10-20_-_pidgin_portable_2.5.2
早速、アップデートです。問題もありません。

ChangeLogは下記となります。
http://developer.pidgin.im/wiki/ChangeLog
特に気になる内容はありません。

この辺のバージョン管理を半自動化したいなー。

--
http://suz-lab.blogspot.com/

今日のブックマーク 10/22/2008


Posted from Diigo. The rest of my favorite links are here.

TinyURL.comで短いURLを作成

スズキです。

今さら説明する必要もない非常に有名なサービスですが、
今日、初めて使ってみました。
http://tinyurl.com/

どこで利用したかというと、Amazonのインスタンスストアで、
書評を書いた書籍を管理するようにしているのですが、
http://astore.amazon.co.jp/iretsuzusblog-22
インスタンスストアの書籍へのコメント入力欄に、
長いURLを入れると、レイアウトがおかしくなってしまうので、
このサービスを利用して、短いURLでメモするようにしました。

ということで、suz-labインスタンスストアから、
書評(suz-lab)も確認することができます。(自分用です)

--
http://suz-lab.blogspot.com/

2008年10月21日火曜日

(suz-php-jquery) DateFormatter.js導入

スズキです。

以前、Javascriptの日付フォーマット変換ライブラリをいろいろ調べ、
http://suz-lab.blogspot.com/2008/08/javascript.html
その中の"DateFormatter.js"いいかなー、って感じになりました。
http://clonedoppelganger.net/javascript/DateFormatter.html

で、せっかくなので、suz-php-jqueryに取り込んで、
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/ext/dateformatter.js
簡単に使えるよう、下記をprototype.js(独自)に実装しました。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/lib/prototype.js
--------
Date.prototype.format = function(pattern) {
  return DateFormatter.format(this, pattern);
}

日付オブジェクトのformatメソッドで日付フォーマットの変換が
簡単にできます、ってことです。

下記は、その利用例です。

http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/example/date_format.html
--------
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Date Formatter</title>
  <script type="text/javascript" src="../JS/ext/jquery.js"></script>
  <script type="text/javascript" src="../JS/ext/dateformatter.js"></script>
  <script type="text/javascript" src="../JS/lib/prototype.js"></script>
  <script type="text/javascript"
src="../JS/app/example/date_format.js"></script>
</head>
<body>
  <p id="date1">DATE_TIME</p>
  <p id="date2">DATE_TIME</p>
</body>

http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/JS/app/example/date_format.js
--------
$(function(){
  var date = new Date();
  $("#date1").html(date.toString());
  $("#date2").html(date.format("Y/m/d H:i:s"));
});

サンプルはもっと充実させたいなー。

--
http://suz-lab.blogspot.com/

(suz-php-jquery) YUI Reset CSS

スズキです。

今さらですが、YUIの"Reset CSS"です。
http://developer.yahoo.com/yui/reset/

説明する必要もないほど、有名なものですが、
今、なぜ、かというと、suz-php-jqueryに組み込んだからです。
(ここにあります)
http://code.google.com/p/suz-lab/source/browse/trunk/suz-php-jquery/webapp/CSS/ext/reset.css

こんな感じで、プロジェクトの共通CSSにimportすることを
想定しています。

webapp/CSS/app/common.css
--------
@charset "utf-8";
@import url("../ext/reset.css");

CSSはこの程度でいいかな?

--
http://suz-lab.blogspot.com/

2008年10月20日月曜日

(suz-php-jquery) フォルダ構成(主にHTML/CSS/JS/画像)

スズキです。

プロジェクト直下のフォルダは下記のようになります。
http://code.google.com/p/suz-lab/source/browse/#svn/trunk/suz-php-jquery

php: PHPクラス群を配置
sql: PHPから呼び出されるSQLファイル群を配置
webapp: HTML/CSS/JS/画像などを配置
※この"webapp"がドキュメントルートとなります。

"webapp"下は下記のようになっています。
http://code.google.com/p/suz-lab/source/browse/#svn/trunk/suz-php-jquery/webapp

CSS: CSSファイル群を配置
IMG: 画像ファイル群などを配置
JS: JavaScriptファイル群を配置
PHP: 直接アクセスされるPHPを配置
example: HTMLを格納する任意の名前のフォルダ

"CSS/IMG/JS"下は下記のようになっています。
http://code.google.com/p/suz-lab/source/browse/#svn/trunk/suz-php-jquery/webapp/CSS

ext : 外部ライブラリのものを配置
lib : "suz-php-jquery"共通ライブラリのものを配置
app: プロジェクト固有のものを配置

今までいろいろ試してみましたが、とりあえず、こんな感じで落ち着いています。

--
http://suz-lab.blogspot.com/

(suz-php-jquery) "suz-example-php/suz-demo-php"タグを統合

スズキです。

suz-labの"Google Codes"にsuz-example-php、
suz-demo-phpというプロジェクトがありますが、
この辺のノウハウをsuz-php-jqueryにまとめて、
PHP・jQuery関係は、このプロジェクトに一本化したいので、
本ブログのタグも表記のように統合しました。

ノウハウが取り込まれ次第、
上記二つのプロジェクトは削除しようと思っています。

氾濫してるタグの整理が少しできたぞ!

--
http://suz-lab.blogspot.com/

(suz-php-jquery) プロジェクト作成!

スズキです。

今までスズキ専用だったPHPフレームワークを、
社内の人と一緒に育てていこうプロジェクトです。
http://code.google.com/p/suz-lab/source/browse/#svn/trunk/suz-php-jquery

このフレームワークは、PHPとjQueryを用いた、
非同期通信ベースのフレームワークにする予定です。

まずは僕の方で、0からの状態から、
今までのノウハウを詰め込んだ形にします。
(でも今日、明日中には形にしないと...)

で、次に、"EMP WORDS"(http://blog.emp.fem.jp/)
がShadowbox.jsを使ったダイアログシステムを
組み込んでくれる予定です。
http://mjijackson.com/shadowbox/

そのうち、"物欲の罅"(http://butsuyoku360.blog18.fc2.com/)
も参加するはずです。

時間があまり無いので、ドキュメント的なものは、
とりあえず、本ブログに書き散らかしていきます。

なんか、楽しくなってきた。

--
http://suz-lab.blogspot.com/

2008年10月19日日曜日

(書評) 読書進化論

スズキです。

今回は、最近読みだした、勝間和代さん系のほんの一つである、
「読書進化論~人はウェブで変わるのか。本はウェブに負けたのか~」
です。
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4098250012

まずは目次です。
--------
【1. 人を進化させる読書がある】
【2. 進化している「読む」技術】
【3. 「書く」人も進化する】
【4. 「売る」仕組みを進化させる】
【5. これから「読みたい」「書きたい」「売りたい」と思っているみなさんへ】
--------
目次の詳細はこちら
http://www.amazon.co.jp/gp/product/toc/4098250012/?tag=iretsuzusblog-22

まず目に付いた言葉は、
【 読者が進化して著者になると、上場株(=パブリックな人材)になる】
です。
言葉通りの意味であり、僕も、人生のステージを変えるため
本一冊書けるような人間になることを、改めて目標にしました。

次に目に付いた言葉は、
【「読んでおしまいにしない」が究極の技術】
です。
ここでは、知識、理解、応用、分析、統合、評価
の6段階のレベルを紹介しています。
詳しくは、「勝間和代のビジネス頭を創る7つのフレームワーク力」
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4887596391
に書かれてるようなので、こちらも近いうちに読んでおこうと思います。

こちらに関しては、僕もできるだけ、「読んでおしまい」にせず、
実践、ブログ化しているつもりです。実際、「弾言」読んで、
日報を書くようにしたし、毎週、書評的なものも書くように
努力しています。上記の本を読むことで、
このあたりもレベルアップできれば、と期待してしまいます。

最後に目に付いた言葉は、
【勝間式「相手がわかりやすく読みやすく書く」ための4つの技術】
1.「自分の事例」「アンソロジー形式」を利用して親しみを持たせる
2.「役に立つフレーズ」を必ず入れ、読書だけに体験を閉じない
3.「共通体験」や「流通していることば」を使って行動を促す
4.「コンテンツ力」と「編集力」で進化していく
です。

上記の技術に関しては、本編で詳しく紹介されています。
僕も、今後文章を書くときは、
常に意識するよう心がけるつもりです。

ということで、この本は僕にとって、読書に対するロードマップを
示してくれました。文中で紹介された書籍を読んだり、
ノウハウを実践したりと、一つ一つ試していければ、
と思っています。

フォトリーディングの講座、受講したいなー...(でも時間が...)

--
http://suz-lab.blogspot.com/

@Bindingじゃなくて@Resourceを使おう(Seasar2)

スズキです。

以前、表記とは逆の記事を書きました。
http://suz-lab.blogspot.com/2007/08/searsar2resourcebinding.html

ただ、最近のSeasar2のML見てると、表記のようです。

▼@Resourceと@Bindingについて
http://ml.seasar.org/archives/seasar-user/2008-October/015990.html
http://ml.seasar.org/archives/seasar-user/2008-October/015991.html
http://ml.seasar.org/archives/seasar-user/2008-October/015992.html

理由は、

-@ResourceはEJB3アノテーションから
共通アノテーション(Java6)になった。

-Seasar2自体にもう大きな変更はないので
@Bindingより@Resourceのほうがいい。

といったところです。

@ResourceってJava6から共通アノテーションになったんだ...
僕も知らなかった...

--
http://suz-lab.blogspot.com/

2008年10月18日土曜日

reCAPTCHAで連絡先メールアドレス

スズキです。

たまに、このブログの連絡先は?
って話が出るので、本ブログの右上に、
連絡先アドレスを表示するようにしました。

当然、そのまま表示すると、スパムの餌食なので、
reCAPTCHAというサービスを利用してみました。
http://recaptcha.net/

メールアドレスの...のリンクをクリックすると、
例のやつが表示して、それをクリアすると、
実際のメールアドレスが表示されます。

ということで、何かありましたら、
本ブログの右上から取得できるメールアドレスに
メッセージいただけると幸いです。
(誰に言ってるんだろう!?)

--
http://suz-lab.blogspot.com/

2008年10月17日金曜日

JavaでYouTubeにアップロード

スズキです。

まずは、下記よりクライアントIDとデベロッパーキーを
取得します 。
http://code.google.com/apis/youtube/dashboard/

次に、下記よりgdata-samples.java-x.x.x.java.zipを
ダウンロードします。
http://code.google.com/p/gdata-java-client/

そして、下記のjarファイルをライブラリフォルダにコピーします。
gdata-client-1.0.jar
gdata-client-meta-1.0.jar
gdata-core-1.0.jar
gdata-media-1.0.jar
gdata-youtube-1.0.jar

最後にこんなコード書くと、指定したユーザーで、
対象の動画ファイルをYouTubeにアップロードできます。
--------
import java.io.File;
import java.net.URL;
import com.google.gdata.client.youtube.YouTubeService;
import com.google.gdata.data.media.MediaFileSource;
import com.google.gdata.data.media.mediarss.MediaCategory;
import com.google.gdata.data.media.mediarss.MediaDescription;
import com.google.gdata.data.media.mediarss.MediaKeywords;
import com.google.gdata.data.media.mediarss.MediaTitle;
import com.google.gdata.data.youtube.VideoEntry;
import com.google.gdata.data.youtube.YouTubeMediaGroup;
import com.google.gdata.data.youtube.YouTubeNamespace;

public class YouTubeMain {
  private static final String CLIENT_ID
      = "CLIENT_ID";
  private static final String DEVELOPER_KEY
      = "DEVELOPER_KEY";
  public static final String UPLOAD_URL
      = "http://uploads.gdata.youtube.com/feeds/api/users/";

  public static void main(String[] args) {
    String username = "username";
    String password = "password";
    String file = "sample.mov";

    YouTubeService service = new YouTubeService(
      CLIENT_ID, DEVELOPER_KEY
    );
    VideoEntry entry = new VideoEntry();
    YouTubeMediaGroup group = entry.getOrCreateMediaGroup();
    group.addCategory(new MediaCategory(
      YouTubeNamespace.CATEGORY_SCHEME, "Tech"
    ));
    group.setTitle(new MediaTitle());
    group.getTitle().setPlainTextContent("test");
    group.setKeywords(new MediaKeywords());
    group.getKeywords().addKeyword("gdata-test");
    group.setDescription(new MediaDescription());
    group.getDescription().setPlainTextContent("test");
    MediaFileSource source = new MediaFileSource(
      new File(file), "video/quicktime"
    );
    entry.setMediaSource(source);

    try {
      service.setUserCredentials(username, password);
      service.insert(
        new URL(UPLOAD_URL + username + "/uploads"), entry
      );
    } catch(Exception e) {
      System.out.println(e.getMessage());
      e.printStackTrace();
    }
  }
}

"Google App Engine"でもできるのかなー?

--
http://suz-lab.blogspot.com/

WinMerge Portable 2.10.0 リリース

スズキです。

表記の通りです。
http://portableapps.com/news/2008-10-16_-_winmerge_portable_2.10.0

いつものごとく、何も考えずにアップデートです。

でも、さすがにリリースノートは見てみました。
http://www.winmerge.org/docs/releasenotes.php

ざっと見た感じ、気になる部分はありません。

ということで、いつも通りのルーチンワークでした。

--
http://suz-lab.blogspot.com/

2008年10月16日木曜日

JSONICで文字化け

スズキです。

PHPからStompでデータを下記のようなJSONでActiveMQに送信し、
{"sample1":"\u30c6\u30b9\u30c81","sample2":"\u30c6\u30b9\u30c82"}
S2JMSで受信して、JSONICでJavaBeansに入れたら、
マルチバイト文字が文字化けしてました。(また文字化けかー...)

つまり、
--------(引数:json)
SampleDto dto = JSON.decode(json, SampleDto.class);
で文字化けです。

いろいろ試したのですが、スマートな解決法が見つからず、
下記のようにJSONデータのマルチバイト文字部分を、
泥臭く変換して対応しました。
--------(引数:json)
Pattern pattern =
Pattern.compile("u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]");
Matcher matcher = pattern.matcher(json);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
  char tmp = (char)Integer.parseInt(matcher.group().substring(1), 16);
  matcher.appendReplacement(sb, String.valueOf(tmp));
}
matcher.appendTail(sb);
SampleDto dto = JSON.decode(sb, SampleDto.class);

どうせなら、この辺、S2JMSのFilterで隠せないかなー?

--
http://suz-lab.blogspot.com/

2008年10月15日水曜日

PHP & Stomp & ActiveMQ

スズキです。

今まで下記のようにいろいろ準備してきましたが、

▼本気でActiveMQ(5.1.0)
http://suz-lab.blogspot.com/2008/10/activemq510.html
▼"Eclipse 3.4.1"で"PDT 2.0"
http://suz-lab.blogspot.com/2008/10/eclipse-341pdt-20.html

ようやくStompを使ったPHPからActiveMQへの
メッセージの送信です。

まず、下記よりPHPのStompクライアントをダウンロードします。
http://code.google.com/p/stompcli/downloads/list
そして展開すると、StompフォルダとStomp.phpができるので、
それらを適当に配置します。

ここで一つ注意点ですが、Stomp.phpの457行目の
$header = array();

$headers = array();
に修正する必要があります。

そして、次のようなPHPスクリプトを実行すると、
ActiveMQにメッセージがたまります。
--------
<?php
require_once("../../php/ext/Stomp.php");
$con = new Stomp("tcp://localhost:61613");
$con->connect();
$con->send("/queue/test", "Hello MQ!");
$con->disconnect();
?>

確認は、展開したActiveMQフォルダの
bin\activemq-admin.bat start
を実行して、下記URLでできます。
http://localhost:8161/admin/queues.jsp

なので、ActiveMQの起動スクリプトは
このようにしたほうがいいかもしれません。
--------
set JAVA_HOME=\sbin\java\1.6.0
set PATH=%JAVA_HOME%\jre\bin
start \sbin\activemq\bin\activemq.bat
start \sbin\activemq\bin\activemq-admin.bat start
exit

次は、S2JMSでキューにたまったメッセージの処理です。
(もう少しだ!)

--
http://suz-lab.blogspot.com/

"Eclipse 3.4.1"で"PDT 2.0"

スズキです。

以前、下記のような記事を書き、
http://suz-lab.blogspot.com/2008/09/eclipse34pdt103.html
3.4にはPDT入らないなー、と思っていたのですが、
本格的にPHPの開発環境が欲しくなったので、
もう一度調べてみると、こんな記事がありました。

▼Eclipse 3.4.1 & PDT 2.0
http://pub.ne.jp/naka_jima/?entry_id=1693255

上記に従い、Eclipseを3.4.1にし、
動的言語ツールキット(DLTK)0.95の
動的ツールキット-コア/フレームワーク(インキュベーション)
をインストールし、pdt-runtime-I200809241021.zip
をダウンロード&展開&導入し、
無事PDTが使えるよになったと思いきや、
PHPファイルを開くところでエラーになってしまいました。

エラーを見るとDLTKがよくないようなので、アップデートサイトを、
http://download.eclipse.org/technology/dltk/updates-dev/1.0
にして、最新のものを導入したら、無事、
PHPファイルも開くようになりました。

プロジェクト直下に強制的にbinというフォルダが
できてしまうのが気に入りませんが、
何とかPDT環境の出来上がりです。

PHPフレームワーク関係もまとめなおさないと...

--
http://suz-lab.blogspot.com/

本気でActiveMQ(5.1.0)

スズキです。

ようやく、前からやりたいと思っていたActiveMQを
本気で使える状態(いろいろな意味で)になりました。

今の最新バージョンは5.1.0です。
http://activemq.apache.org/activemq-510-release.html

とりあえずWindows環境での実験なので、
apache-activemq-5.1.0-bin.zip
をダウンロードして、展開して、
bin\activemq.bat
をコマンドプロンプトで実行したら、あっさり動作しました。

バッチファイルを作るなら、下記のような感じでしょうか?
--------
set JAVA_HOME=\sbin\java\1.6.0
set PATH=%JAVA_HOME%\jre\bin
\sbin\activemq\bin\activemq.bat

次は、PHP&StompでActiveMQと連携だ!

--
http://suz-lab.blogspot.com/

2008年10月14日火曜日

SAStrutsで"?hoge=1&hoge=2"を配列で取得

スズキです。

下記のように、同じ名前で値の違う複数のパラメータを送ったとき、
http://suz-lab.blogspot.com/2008/10/jquerygetjsonp2v21.html
サーバ側(SAStruts)でどう取得するか?についてです。

まあ、下記のように配列を使うことで、
簡単に実現することができ、非常に直感的です。

-------- リクエスト
hoge/receive?hoge=1&hoge=2

-------- コード
public class HogeAction {
  public String[] hoge;
  @Execute(validator = false)
  public String receive() {
    System.out.println("##############" + hoge[0]);
    System.out.println("##############" + hoge[1]);
    return null;
  }
}

-------- 結果
##############1
##############2

ただ、値が数字ということで、

public int[] hoge;

とすると、以下のような例外が発生します。

--------
org.seasar.framework.beans.IllegalPropertyRuntimeException:
[ESSR0059]クラス(suz.example.sastruts.action.HogeAction)
のプロパティ(hoge)の設定に失敗しました。理由は
org.seasar.framework.beans.IllegalPropertyRuntimeException:
[ESSR0059]クラス
(suz.example.sastruts.action.HogeAction$$EnhancedByS2AOP$$8b8a47)
のプロパティ(hoge)の設定に失敗しました。理由は
org.seasar.framework.exception.SIllegalArgumentException:
[ESSR0094]IllegalArgumentExceptionがクラス
(suz.example.sastruts.action.HogeAction)の型
(class [I)のフィールド(hoge)に
型([Ljava.lang.String;)の値([Ljava.lang.String;@bcb23e)
を設定するときに発生しました。対象のクラスは
(suz.example.sastruts.action.HogeAction$$EnhancedByS2AOP$$8b8a47)
です。
--------

public Integer[] hoge;

としても、ほぼ同様の例外が発生します。

--------
org.seasar.framework.beans.IllegalPropertyRuntimeException:
[ESSR0059]クラス(suz.example.sastruts.action.HogeAction)
のプロパティ(hoge)の設定に失敗しました。理由はorg.seasar.framework.beans.IllegalPropertyRuntimeException:
[ESSR0059]クラス
(suz.example.sastruts.action.HogeAction$$EnhancedByS2AOP$$8b8a47)
のプロパティ(hoge)の設定に失敗しました。理由はorg.seasar.framework.exception.SIllegalArgumentException:
[ESSR0094]IllegalArgumentExceptionがクラス
(suz.example.sastruts.action.HogeAction)の型
(class [Ljava.lang.Integer;)のフィールド(hoge)に
型([Ljava.lang.String;)の値([Ljava.lang.String;@bcb23e)
を設定するときに発生しました。対象のクラスは
(suz.example.sastruts.action.HogeAction$$EnhancedByS2AOP$$8b8a47)
です。
--------

これで、jQueryとSAStrutsがかなりつながってきたぞ!

--
http://suz-lab.blogspot.com/

2008年10月13日月曜日

jQueryのgetJSONで"?p2=v21&p2=v22"のようなパラメータを送る

スズキです。

表記(下記)のGETパラメータを作る方法です。
http://localhost/sample.html?param2=value21&param2=value22

こんな感じで配列を使います。
--------
var params = {
  "p1": "v11",
  "p2": ["v21", "v22"]
};
$.getJSON("sample.html", params, function(json){ ... }
--------
※実際は"p1=v11"のパラメータもつきます

そして、こちらはNGです。
--------
var params = {
  "p1": "v11",
  "p2": "v21",
  "p2": "v22"
};
--------
※最初こちらで試そうとしてしまいました...

近頃、jQueryネタ、多いなー...

--
http://suz-lab.blogspot.com/

弱者の心得!?

スズキです。

今日は貴重な体験をしました。

最近、フットサルをやっていて、休日とかも、
積極的に初心者用のレッスンなどに参加し始めました。

で、同じノリで、今朝、試合ベースのものに参加したのですが、
他の人がうますぎて、久しぶりに「やばい...」状態でした。

他の人がどれくらいうまいかというと、
リフティングが無限にできそうなくらい、うまい人ばかりでした。
それも、全員...(ちなみに僕は、最高で20回です...)

早速、逃げようと思いましたが、よく考えたら、
わかってたら絶対申し込まない、貴重な経験だし、
死ぬわけじゃないので、ひらきなおって、
チーム分けに参加してしまいました。

そして、僕は、この環境でダントツの最弱者として、
どうしたら、ゲームを壊さないように振舞えるか考えました。

まずは自分の分析です。

-フットサル初心者
-中学、高校、大学とハンドボールをやっていた
-フットサルスクールで、パスの練習はいっぱいした
-でも左足は簡単なトラップ以外使い物にならない

こんな感じです。で、以下のような作戦を立てました。

-左足は基本的に使わない
-ドリブルも基本的にしない
-ボールもあまりキープしない
-まわりをよく見てすぐにフリーの人に右足でミスのないパスをする
-ハンドボールの経験を生かしてディフェンスはしっかりと
-とにかくいいポジションに走る(がんばる)

つまり、ゲームを壊さない程度の精度を持つ「できること」を見極め、
この「できること」に関しては、相手が信頼して
プレーを委ねてくれるように努めました。

そこそこ、この作戦はうまくいったと思うのですが、
作戦のキーである、とにかくいいポジションに走る(がんばる)が、
試合を重ねるたびに機能しなくなり、1時間(全部で2時間)で
リタイア(体力切れ)してしまいました。

仕事では、どちらかというと、スキル的にも権限的にも、
強い方の立場にいることが多いので、
非常に新鮮な経験ができました。(悔しいですが...)

ということで、いつかリベンジできるよう、
今日の夜もフットサルの練習(初心者向け)に行ってきます。

リベンジするもの(英語、東大)が増えてしまった...

--
http://suz-lab.blogspot.com/

2008年10月12日日曜日

(書評) あなたもいままでの10倍速く本が読める

スズキです。

近頃、意識して本を読むようにしているのですが、
そろそろ、より短時間で、より多くの情報を吸収したいという
欲求にかられ、表記の本を手にとってしまいました。
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4894511193

まずは目次です。
--------
【1. 選択肢を広げる】
- フォトリーディングはこうして生まれた
- 古い読書法に固執するか?それとも…
【2. フォトリーディング・ホール・マインド・システムを学ぶ】
- ステップ1―準備
- ステップ2―プレビュー
- ステップ3―フォトリーディング ほか
【3. スキルを活用し、マスターしよう】
- フォトリーディング・ホール・マインド・システムを生活の一部に
- グループ・アクティベーションで情報を共有する
- シントピック・リーディングで生涯学習 ほか)
--------
目次の詳細はこちら(ほとんど一緒)
http://www.amazon.co.jp/gp/product/toc/4894511193/?tag=iretsuzusblog-22

フォトリーディングは下記5つのステップで構成されており、
最初に全体を薄く把握(?)して、繰り返し文章に目を通すことで、
だんだんと、自分が必要な部分を濃くしていくといった
読書法だと思われます。

▼ステップ1 準備
目的を明確にして、「ミカン集中法」により、
文章を読む理想的な状態にする。

▼ステップ2 プレビュー
タイトルや目次などのメタデータを調査し、
キーワードをいくつかピックアップする。

▼ステップ3 フォトリーディング
「高速学習モード」と呼ばれる状態にし、
本のページを画像イメージとして頭の中に写し取る。

▼ステップ4 アクティベーション
自分の知りたいことを具体的な質問にし、
興味を引かれたセクションにもう一度すばやく目を通し、
答えになりそうな文章を選んで読む。

▼ステップ5 高速リーディング
自分が適当だと思うスピードで、
初めから終わりまでとまらずにいっきに読む。

ポイントはやはりステップ3のフォトリーディングでしょう。
「本のページを画像イメージとして頭の中に写し取る」
という作業には、かなりのコツが必要な気がします。

また、ステップ4のアクティベーションのところでは、
「文章についてのマインドマップを書く」、という話もあり、
マインドマップに対する知識の必要性も感じてしまいました。

とにかく、内容はわかったので、あとは実践です。
(フォトリーディングとマインドマップはもっと知識を深めてみよう)

--
http://suz-lab.blogspot.com/

WindowsでPerl(ポータブル)

スズキです。

とある事情で、WindowsにPerlの環境が必要になりました。
一昔前は、WindowsでPerlを利用する場合、
僕は何も考えず、ActivePerlをインストールしていました。
http://www.activestate.com/Products/activeperl/index.mhtml

ですが、今、改めて調べてみると、選択肢は下記に示されてるように
いろいろあるようです。
http://win32.perl.org/wiki/index.php?title=Win32_Distributions

せっかくなので、今回はポータブル環境でも使えそうな、
"Strawberry Perl"を利用することにしました。
http://strawberryperl.com/

zip版をダウンロードして、展開して、コマンドプロンプト立ち上げて、
"perl\bin"下で"perl - v"を実行したら、
いつものメッセージが表示されました。
--------
S:\tmp\perl\perl\bin>perl -v

This is perl, v5.10.0 built for MSWin32-x86-multi-thread

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic
License or the GNU General Public License, which may be
found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists,
should be found on this system using "man perl" or
"perldoc perl". If you have access to the Internet, point your
browser at http://www.perl.org/, the Perl Home Page.
--------

さあ、次は、
"S60 Platform SDKs for Symbian OS, for C++, 3rd Edition, FP 1"
のインストールだ。

--
http://suz-lab.blogspot.com/

2008年10月10日金曜日

jQueryでチェックボックスの扱い

スズキです。

こんなHTMLに対して、
--------
<ul>
  <li><input type="checkbox" value="1"/>チェック1</li>
  <li><input type="checkbox" value="2"/>チェック2</li>
  <li><input type="checkbox" value="3"/>チェック3</li>
</ul>
--------

▼チェックされた最初項目の値を取得する場合
$("input:checkbox:checked").eq(0).val()

▼valueが3の項目をチェックにする場合
$("input:checkbox[value='3']").attr("checked", true)

と、操作することができます。

jQueryはセレクタどれだけ使えるか?、だなー。

--
http://suz-lab.blogspot.com/

jQueryのeq(position)とget(index)の違い

スズキです。

今まで、どちらも使う機会があまりなかったので、
違いがよくわかってませんでした。(ぜんぜん違います...)

【eq(position)】
http://semooh.jp/jquery/api/core/eq/position/
ポイントは戻り値がjQueryオブジェクトです。

【get(index)】
http://semooh.jp/jquery/api/core/get/index/
ポイントは戻り値がDOMエレメントです。

なので、
$(".hoge").eq(0).val()
はできますが、
$(".hoge").get(0).val()
はできません。

また、以前紹介した"Google Maps"の
new google.maps.Map2($("#map").get(0));
にもつながってきます。
▼$("#id").get(0) = getElementByID() !?
http://suz-lab.blogspot.com/2008/09/idget0-getelementbyid.html

まだまだ、インプットにアウトプットが追いついてない...

--
http://suz-lab.blogspot.com/

VLC Media Player Portable 0.9.4 リリース

スズキです。

表記の通りです。
http://portableapps.com/news/2008-10-09_-_vlc_media_player_portable_0.9.4

とりあえず、DropBoxに入れてるポータブル環境は
アップデートしておきました。
(ChangeLogのようなドキュメントが見つけられなかった...)

--
http://suz-lab.blogspot.com/

2008年10月9日木曜日

jQuery連載-第4回の公開

スズキです。

以前、紹介した"iret R&D team"によるjQuery連載の
第4回が公開されました。

▼第4回 メニューを彩るプラグイン(1)
http://gihyo.jp/design/serial/01/jquery-plugin/0004

(第1回、第2回の紹介)
http://suz-lab.blogspot.com/2008/09/jquery.html
(第3回の紹介)
http://suz-lab.blogspot.com/2008/09/jquery-3.html

今回は、メニューに関するプラグインを3点ピックアップし、
さらにKwicksについては詳しく紹介をしています。

"iret R&D team"の皆様お疲れさまでした。
第5回もがんばってください。

--
http://suz-lab.blogspot.com/

"remember the milk"のSignupのバリデーションをjQueryで

スズキです。

有名な"remember the milk"のSignup情報登録時の
リアルタイムバリデーション!?
をjQueryのプラグインを使っての実現です。

利用するプラグインはこちらです。(有名どころですね)
http://bassistance.de/jquery-plugins/jquery-plugin-validation/

日本語のメッセージファイルはこちらにありました。
http://www.goodpic.com/mt/archives2/2008/06/jqueryjqueryval.html

で、こんな感じで、emailに関しては、必須とEmail形式を、
passwordに関しては必須と8文字以上を条件にした、
リアルタイムバリデーション!?を実現することができます。

--------
<head>
  <script src="jquery.js"></script>
  <script src="validate.js"></script>
  <script src="messages_ja.js"></script>
  <script>
  $(function(){
    $("#login").validate({
      rules: {
        email: {
          required: true,
          email: true
        },
        password: {
          required: true,
          minlength: 8
        }
      }
    });
  });
  </script>
</head>
<body>
  <form id="login">
    <input type="text"
        id="email" name="email"/>
    <input type="password"
        id="password" name="password"/>
    <input type="submit" value="ログイン"/>
  </form>
</body>
--------

詳しくはこちらです。
http://docs.jquery.com/Plugins/Validation

今後のHTMLフォームはデフォルトでこれ使うようにしよう。

--
http://suz-lab.blogspot.com/

2008年10月8日水曜日

JSONICの"Web Service Servlet"を使ってみた

スズキです。

気分的にjQueryと通信するJavaの簡単な環境が欲しくなったので、
前々から試してみたいと思っていた、表記を実験してみました。

まずは、ダウンロードです。(http://jsonic.sourceforge.jp/)
必要なものは"jsonic-1.0.2.jar"のみです。
(今時めずらしく、他の依存JARはありません)

で、web.xmlを下記のように書いて、

-------- web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
  <display-name>suz-example-jsonic</display-name>
  <servlet>
    <servlet-name>jsonic</servlet-name>
    <servlet-class>net.arnx.jsonic.web.WebServiceServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>
      {
        "debug" : true,
        "encoding": "UTF-8",
        "expire" : true,
        "mappings": {
          "/JSON/[class].json": "suz.example.jsonic.service.${class}Service"
        }
      }
      </param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>jsonic</servlet-name>
    <url-pattern>/JSON/*</url-pattern>
  </servlet-mapping>
</web-app>
--------

対応するクラスを下記のように作成して、

-------- suz.example.jsonic.service.MapService
package suz.example.jsonic.service;
import java.util.HashMap;
import java.util.Map;
public class MapService {
  public Map<String, String> find() {
    Map<String, String> map = new HashMap<String, String>();
    map.put("key", "value");
    return map;
  }
}
--------

下記URLにアクセスすると、

--------
http://localhost:8080/suz-example-jsonic/JSON/map.json
--------

下記のような結果(JSON)が取得できます。

-------- map.json
{"key": "value"}
--------

詳しくはドキュメントということで...
(本命の"jQuery plugin: Validation"試す時間がない...)

--
http://suz-lab.blogspot.com/

Teedaの初期化(initialize)メソッドと描画前(prerender)メソッドの使い分け

スズキです。

この辺、実は、自分の中でもあいまいなので、
情報のまとめとして。(振る舞いの違いはわかるんだけど...)

まずは各メソッドの説明です。

▼初期化(initialize)メソッド
http://teeda.seasar.org/ja/extension_features.html#initialize

▼描画前(prerender)メソッド
http://teeda.seasar.org/ja/extension_features.html#prerender

簡単に言うとinitializeはポストバック時によばれず、
prerenderはとにかく呼ばれるという認識でいいのかな?

ちなみに"ポストバック"とはPOST先が同一のページである事です。
http://teeda.seasar.org/ja/extension_features.html#postback

次に、下記サイトへのkoichikさんのコメントに
使い分けに関することが書いてありました。
http://d.hatena.ne.jp/atsumaru/20080617/1213717396

> 他の画面から遷移してきたときに、DB から読み込んで
> ポストバックではそれを引き継ぐという場合は、initialize()、
> 描画の度に、DB から読み込み直す場合は、prerender()、
> のように使い分けてください。

で結局、何が言いたいか?というと、
フォームの初期化処理をinitializeに書けば、
入力値不正でポストバックしたときにinitializeは呼ばれず、
再初期化もされず、ユーザーが入力した値が残ります
ってことです。

今回の文章が支離滅裂すぎだなー...

--
http://suz-lab.blogspot.com/

TeedaのSelectOneMenuでMapをそのまま使う

スズキです。

今までListを使っていたのですが、そういえばMapも使えたなー、
と思い、試してみました。

--------
public Map hogeItems;
public int hoge;
public String prerender() {
  this.hogeItems = new ListOrderedMapMap();
  this.hogeItems.put("hoge1", 1);
  this.hogeItems.put("hoge2", 2);
  this.hogeItems.put("hoge3", 3);
  return null;
}
--------

まあ、下記の内容です。
https://www.seasar.org/issues/browse/TEEDA-339

hogeItemsにListや配列を使うときに比べ、
記述が非常にシンプルになりうれしいのですが、
Mapの実装にHashMapを使うと表示順がListのような
追加順になりません。

これを回避するために、"Apache Commons Collections"の
ListOrderedMapMap使うようにしました。
http://commons.apache.org/collections/api-release/org/apache/commons/collections/map/ListOrderedMap.html

このクラスは、Listのように追加した順番を保持するので、
HTMLに表示したときも追加順で表示されます。

結局OVal使わなかったなー...どっかで使いたいなー...

--
http://suz-lab.blogspot.com/

HotDeployだとOKでCoolDeployだとTooManyRegistrationRuntimeException(Seasar2)

スズキです。

表記、たまに遭遇するので...

まあ、同じキーで複数のコンポーネントが登録されてるってことです。
でも、HotDeployだと、必要になるクラスしか登録されないので
OKになってしまいます。

この辺、よく読むとなんとなくわかります。
▼CoolDeploy 時に登録されないコンポーネント
http://ml.seasar.org/archives/seasar-user/2007-July/010939.html
▼S05: 車がぶつかりました
http://d.hatena.ne.jp/masataka_k/20040325/1124691344

どっかで、DI/AOPちゃんと勉強しないといけないなー。

--
http://suz-lab.blogspot.com/

"HTML(MS932) ⇔ Java(Tomcat) ⇔ MySQL(UTF-8)"での波ダッシュ問題の扱い

スズキです。

この辺の話の続きです。
http://suz-lab.blogspot.com/2008/09/mysqlutf8javams932.html

▼MySQL(UTF-8) → Java(Tomcat) → HTML(MS932)
MySQLから取得した"0x301c"を"0xff5e"に変換してHTMLに出力。
※波ダッシュ以外の文字も下記のように変換すべきです。
http://javatec.blog105.fc2.com/blog-entry-41.html

▼HTML(MS932) → Java(Tomcat) → MySQL(UTF-8)
HTMLから入力された"0xff5e"を"0x301c"に変換してMySQLに登録。
※他の文字も上記の逆の変換を行えばOK(のはず)

ということをTeedaのコンバーターで実現してみました。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-s2-converter/src/main/java/jp/co/iret/suz/s2/converter/teeda/impl/UnicodeFromSqlConverterImpl.java

明日(今日)はバリデーション系、がんばろう!

--
http://suz-lab.blogspot.com/

2008年10月7日火曜日

スーパーゴロ寝クッション

スズキです。

前に一度見かけて、どこにあるかわからなくなって、
ずっと欲しいと思ってて、たまたま今日見つけた一品です。
http://astore.amazon.co.jp/iretsuzusblog-22/detail/B001BRDEZ4

ゴロゴロしながらノートPCいじることがデフォルトになってる
僕には、必須アイテムです。(もっと早く欲しかった)

これで、さらに生産性があがるはず!?

--
http://suz-lab.blogspot.com/

2008年10月6日月曜日

"おちまさと企画塾"(デジハリ)受講予定

スズキです。

表記のデジハリ講座(3日間)を受けてみようと思っています。
http://school.dhw.co.jp/c/kikaku/

この手のものは、時間とお金がゆるす限り、参加していこう。
(まだ、足りない…)

--
http://suz-lab.blogspot.com/

ブロックレベル要素のセンタリング(CSS)

スズキです。

とても有名な話(marginにautoを指定する話)で、
今さらですが、自分メモとして。

-------- HTML
<div id="wrapper">
  ブロックレベル要素
</div>
-------- CSS
#wrapper {
  width: 800px;
  margin-left: auto;
  margin-right: auto;
}
--------
※ブロックレベル要素もwidthを指定する必要があります。

IE6の場合など実際は上記プラスαで
いろいろ調整しないといけませんが…

--
http://suz-lab.blogspot.com/

2008年10月5日日曜日

(書評) 年商100億の社長が教える、丸投げチームのつくり方

スズキです。

まだまだ無理やり書いてる感が多々ありますが、今週の書評は、
「年商100億の社長が教える、丸投げチームのつくり方」
http://astore.amazon.co.jp/iretsuzusblog-22/detail/4756912311
です。

"手ばなれよく自分の仕事を部下任せるためには、どうしたらいいか?"
をテーマに書店で見つけて、読んだ本です。

まずは目次です。
--------
【1. リーダーの仕事とは何か?】
リーダーには・余裕・が必要、より高度な仕事に取り組む、
感情的に怒ることをやめる、リーダーに落ち込んでいる暇はない、
会議・ミーティングでチームをまとめる、本当のリーダーシップ

【2. 丸投げリーダーの時間術】
自分の仕事をカイゼンする、時間管理のマトリックス、
大切なことに集中する、ブログでタイムマネジメント
マインドマップでタイムマネジメント

【3. 丸投げしたら年商100億円】
変化に対応できるチームをつくる、ビジネスはそう簡単にいかないもの
丸投げチームを決心する、「丸投げ」が会社の危機を救う
100億企業のつくり方

【4. 丸投げチームへのステップ】
「丸投げ」について考える、チームメンバーの準備をする
丸投げチームのステップアップ

【5. 部下への仕事の任せ方】
仕事を任せる目的を確認する、任せる仕事を分析する
一番は、自分で手を挙げてもらうこと、自分の仕事を部下に渡す
仕事を任せるときに押さえるポイント、
問題処理ランク・・・自発的な問題解決の切り札
任せられる人の増やし方、新卒新人への仕事の任せ方
部下のモチベーションの上げ方

【6. マネジメントの丸投げ】
もし、自分が社長だったらどうするか?、経営者の4つの顔
マネジメントを任せるとは?、マネジメントを誰に任せる?
マネジメントをどうやって任せる?、家庭も丸投げマネジメント

【7. システムでチームを動かす】
経営のシステムとは?、経営のシステム事例
会社を大きくしていく仕組み

【8. 次のビジョンを描く】
時間ができたらビジョンをつくろう、ビジョンって何?
ビジョン達成の3つのプロセス
--------
目次の詳細はこちら(ほとんど一緒)
http://www.amazon.co.jp/gp/product/toc/4756912311?tag=iretsuzusblog-22

目次からでもわかるとおり、
自分の仕事をどのように部下に効率よく任していくか?
のHowTo本です。

一通り読んで、今の自分にどう生かしていくかを考えると、
まずはアクションする前に、下記のような責任の視点での現状リソース分析です。
--------P.17
1. 業績責任(計画の立案、利益の管理)
2. 部下育成責任(採用、教育、人事、ビジョンの共有)
3. 報告責任(上位者に業績と情報発信)
4. 業務開発責任(新商品、新規事業開発)
5. 構造改革提案責任(ルール・仕組みを変える)
--------

そして、次のフレーズを徹底することでしょうか?
(まあ、当たり前といえば、当たり前ですが...)
--------P.55
"丸投げするにも相手を見て相手のレベルに合わせることが大事"
--------

また、丸投げ、丸投げ言ってますが、その実態は、
--------P.086
お互い目的やゴールを確認しあったうえで、
相手にほとんどすべてをまるまる任せること
--------
で、"お互い目的やゴールを確認しあったうえで"
を見落とさないようにしないといけません。

そして、次のように段階的に、様子をみながらじっくりと
進めていくことは忘れないように。
--------P.109
ワンマン→任せる→巻き込む→丸投げする
--------
(僕はせっかちなので、ここは常に意識しないといけません)

最後の、この言葉は非常に心に残っています。
--------P.205
組織はトップの器以上は大きくならない
--------

もっともっと勉強して、もっともっと器を大きくしなければ...

--
http://suz-lab.blogspot.com/

2008年10月4日土曜日

jQueryにpostJSON

スズキです。

jQueryにはGETメソッドでJSONでデータを取得する、
getJSONというメソッドが用意されています。
http://semooh.jp/jquery/api/ajax/jQuery.getJson/+url%2C+data%2C+callback+/

しかし、POSTメソッドで取得するpostJSONはありません。
パラメータが多くなると、GETではなく、
POSTを使いたいことは多々あります。

で、なければ作ればいいということで、下記です。
http://d.hatena.ne.jp/a666666/20080311/1205231417

--------
jQuery.postJSON = function(url, data, callback) {
  jQuery.post(url, data, callback, "json");
};
--------

早速、自分用prototype.jsに追加しておこう。
http://code.google.com/p/suz-lab/source/browse/trunk/suz-gae-lab/htdocs/JS/lib/prototype.js

--
http://suz-lab.blogspot.com/

2008年10月3日金曜日

"MySQL ユーザコンファレンス 2008"参加予定

スズキです。

表記の通りです。下記セッションに参加予定です。
http://jp.sun.com/company/events/mysql/?cid=926530

【10月30日(木)】
▼17:30-19:00
BOF-4 MySQLの通信プロトコルの中身
【10月31日(金)】
▼10:00-10:50
J-5 ストレージエンジンまとめて概要説明
▼11:00-11:50
E-6 MySQL 5.1で押さえておくこと
▼13:00-13:50
S-D5 仮想化環境の活用とx86サーバの進化
▼14:00-14:50
J-8 フルマネージドホスティングサービスを支えるMySQL Enterprise Unlimited
▼15:00-15:50
J-9 東京ガスのGISにおけるMySQL導入事例(仮題)
▼16:00-16:50
J-10 インデックスを使いこなす
▼18:20-19:50
REC 懇親会

チューニング、バックアップ、レプリケーション系のセッションが
埋まっていたのが痛い...(行動はもっと迅速に...)

--
http://suz-lab.blogspot.com/

2008年10月2日木曜日

"jQuery Fancyzoom"はaタグのhrefがjpg/png/gifで終わってないと効かない

スズキです。

表記、はまりました。

簡単な実験のときは問題なく効いてたのに、
何で、今は効かないんだー、とソースを追っていたら、
こんな記述を見つけてしまいました。

!/\.jpg|\.png|\.gif/i.test(imgTargetSrc)

おそらく、aタグのhrefのアドレスにjpg/png/gifがないと
Fancyzoomの適用はスキップされているのでしょう。

確かに、今試してるhrefのアドレスは、
"HeartRails Capture"で生成したサムネイル画像で
http://capture.heartrails.com/large?http://suz-lab.blogspot.com/
といったアドレスでjpg/png/gifがありません。

ということで、アドレスを
http://capture.heartrails.com/large/dummy.jpg?http://suz-lab.blogspot.com/
としたところ、案の定、Fancyzoomが適用されました。

そういえば、他のLightBox系ライブラリでも
同様の現象があったなー…

--
http://suz-lab.blogspot.com/

bromptで毎日ブログ

スズキです。

bromptというブログを書いてないとリマインドメールしてくれる
サービスがあります。(http://brompt.com/)

毎日ブログ書く宣言している僕としては、
ちょうどいいなー、と思い、早速、登録してしまいました。

それも、1日ブログ書かなかったらリマインドメールするよう、
設定しておきました。

で、いきなり下記メールが届いてしまいました。

--------
Guess what?! You've either never posted to your blog before...
or it's been so long since the last time you've posted that
we've run out of fingers to count the moons with.
So maybe you should get on that:

http://suz-lab.blogspot.com/
--------

リマインド、早すぎ…

--
http://suz-lab.blogspot.com/

2008年10月1日水曜日

iretの中の人のブログランキング整理

スズキです。

表記の並び順、久しぶりに整理しました。
でも面倒なので、対象は戦闘力30以上です。

今のところ、戦闘力100超えたら、社内αブロガーかな?

--
http://suz-lab.blogspot.com/