2008/10/31

[openID]gmailがopenIDに対応

ちょーいいータイミンgooー♪

お気づきでないかもしれないが、みなさんもたぶん知らず知らずの間にOpenIDはもう持ってると思う。
・・・
そして今日からはGoogleのメールアカウントを持ってる人も、GmailのメールアドレスをOpenIDとして使えるようになった。

via:GmailアカウントもOpenIDに

気づかない、気づかない。

ちょーど来週、PHPセミナーの作品発表会を控えていえ、ちょーどopenidを使いたかったんだけど、ちょうどいいタイミングでした。

ここで、問題になってくるのは、バージョンはいくつなんだろう??
2の場合、以前、作ったCFをちょろよちょろといじればいけそうなのですが。。。

google APIを調べてみると、

Google supports the OpenID 2.0 Directed Identity protocol, and provides authentication support as an OpenID provider.

via:Federated Login for Google Account Users

と書かれていたので、なんとかちょっとの変更でいけそです。

なんとラッキーな!!

2008/10/30

[javascript]文字のバイト数を求める

入力された文字のバイト数を算出する機会があったので、調べてみました。

こちらのサイトを参考にさせていただくと、

function getByte(text){
  count = 0;
  for (i=0; i<text.length; i++){
    n = escape(text.charAt(i));
    if (n.length < 4) count++; else count+=2;
  }
  return count;
}

via:文字列のバイト数を求める

と書かれていました。

他にはないかなーと思って探してみるものの、燈明日記さんのJavaScriptで文字列のバイト数を求めるでも同様のやり方が書かれていました。

というわけで、ちょこっと変更して、

/* バイト数を取得する */
function gf_GetByte(aStr){
if(aStr.length == 0){return 0;}
var count = 0;
var Str = "";
for(var i=0;i <aStr.length;i++){
Str = aStr.charAt(i);
Str = escape(Str);
if( Str.length < 4 ){
count = count + 1;
}else{
count = count + 2;
}
}
return count;
}

としました。もともと、長さが0の場合は、数える必要もないので、for文に行く前に0を返すようにしました。

ってな具合に、これでバイトの計算ができるようになるかなと。

2008/10/29

[javascript]firefoxでのajax~その1

firefoxでajaxを実装する場合のエントリーとしていくつかありそうなので、その1としました。

どうやら同期モードを指定してしまうと、onreadyStateがコールされないという話。

しかし、Firefox (バージョン 1.5.0.4)では同期モードを指定すると、onreadystatechange に指定した関数がコールされません。
なお、readyStateは変化していますので、onload を代わりに使用して対応できます。


via:Firefox で onreadystatechange がコールされない

だけど、非同期にするとコールできるみたいなんだよね。

実装する際に注意したいところです。

2008/10/27

[javascript]日付をyyyy-mm-ddで表現する

今、phpの授業を受けていて、javascirptで、日付を「yyyy-mm-dd」で表す機会があって、少し悩んでしまったので、まとめたいと思います。

var curfrm = document.frm_main;
var yyyy = curfrm.yyyy.value; //年
var mm = "0" + "" + curfrm.mm.value;
mm = mm.slice(-2,mm.length);
var dd = "0" + "" + curfrm.dd.value;
dd = dd.slice(-2,dd.length);

ちょっとはしょりすぎてしまいましたが、前提として、日付の整合性はとれているものとします。

悩んだのは、sliceの使い方、最初、mm.slice(mm.length,-2)と書いていたのですが、デバッグしてみると何もでてこないので、おかしいなーと思い、試行錯誤したらいつの間にかできていたという感じです。

最初に、-2を持ってくるんですね。

こうすることで、例えば、1月2日を01月02日と表現することができます。

あと、数字を文字列に解釈するように、""を前に追加したことぐらいでしょうか。

こうしてまとめておけば後が楽だー。

2008/10/26

[life hack]優秀な人は、さらに優秀な人を雇う!!

仕事をする上でモットーとしているのは、「リーダー(できる人)は、自分よりもさらにできる人と一緒に仕事をする。」ということ。

だいぶ前に、とある本を読んだ時に目にしたのですが、以来、仕事をさせていただいて、この言葉を実感することはありませんでした。

ですが、最近、外注さんが入ってきて、この言葉の重さを実感する機会がありました。

外注さんは、自分よりも年上で、キャリアも積んでいて、色々と仕事を頼むのですが、その際に、思うのが、「どうすれば、外注さんの能力をさらに引き出しつつ、難しい問題(仕事)を頼めるのか?達成することができるのか?」ということです。

これは非常に難しい問題だと思います。

言葉は悪いかもしれませんが、何も知らない人に、1~10まで説明するのは楽なのです。
だって、1wayだから。

だけど、キャリアを積んでいる人は、色々知っていて、一方的にこちらが説明してもいいのかもしれませんが、きっと、心のうちは、「そんなこと知っているから、もっと違うことを話してよ。」と思い、話に聞き飽きてしまい、さらに、眠くなってしまい集中力がきれてしまいます。

そうなってしまうと、そこから仕事をするのって億劫になってしまうと思うのです。
しかも、トークするのに時間がかかってしまい結果的に、全体の工数が増えてしまい、お客様に迷惑をかけてしまいます。

確か、一年前ぐらいの記事ですが、life is beautifulの「Aクラスの人はAクラスの人を採用したがるが、Bクラスの人はCクラスの人を採用したがる」の記事で、下記のようなことが書かれていました。

「スティーブ・ジョブズ・偶像復活」を読んでいて、この映画を見たくなった理由は、Brad Bird
をこの映画のために Pixar に招き入れたことに関する Ed Catmull (Pixar)のコメントが目に止まったからだ。


via:Aクラスの人はAクラスの人を採用したがるが、Bクラスの人はCクラスの人を採用したがる

さらに記事は続きます。

"In all respects, we are looking for people who are better than we are, who do things that we don't do. You aren't looking for somebody who echoes what you're going to say." (p.313-p.314)
【意訳】「なんといっても、(Pixarでは)僕らより優秀な人、僕らがしないことをする人を探しているんです。自分が言うだろうことをそのまま繰り返すだけの人を見つけてもしかたがありませんよね。」

via:Aクラスの人はAクラスの人を採用したがるが、Bクラスの人はCクラスの人を採用したがる

この記事を読んで、考えを後押しされているような気がしてうれしかったです。

話は変わりますが、キャリア(他社での経験)があるからといって、仕事ができるかと聞かれれば、確かに、できない人もいるかもしれません。
でも、それは面接の段階である程度、判断できないのかな~と思っています。

そうすると、今度は、面接で饒舌な人がうまくもぐりこんでしまった場合どうするの?
というリスクが発生します。

こうなってしまった場合は、実際に仕事をふって判断していくしかないのかなと。
この辺は、面接か仕事を振るまでの流れになってしまうので、また別の機会に考えをかけたらと思います。

なので、今回は、あらかじめ「できる人が入った場合」を仮定します。

というわけで記事が長くなってきたので、まとめたいと思います。

「どうすれば、外注さんの能力をさらに引き出しつつ、難しい問題(仕事)を頼めるのか?達成することができるのか?」というテーマで、
1:相手の知っていること、知らないことをあらかじめ、ある程度(完璧には無理)把握しておく。
⇒面接で把握する。(相手のトーク、キャリアシート(ただし学歴ではない。))
2:難しい仕事をあえて振る。
⇒1でダメな人が入った場合、この時点でわかり、逆にできる人は、達成してしまうと思われる。
3:よくコミュニケーションをとり意見を言ってもらうような現場作りを行う。
⇒外で培われたノウハウ、ツールなどがあるし、それを取り入れることで、自社の新陳代謝が行える。
4:Aクラスの人材になれるように自分自身が日々向上する。
⇒そもそも、自分がAクラスにならなければ、Aクラスの人が入ってくるはずもない。

Aクラスの人間ではないですが、確実に上の人(外注さん)が入ってきたので、今回の記事を書きました。

今度は、難しい仕事の振り方について書けたらなーと思いました。

2008/10/25

[php]Smartyでの改行は、not n|2br but nl2br

SmartyでDBからとってきた値を表示する際に、改行を行いたいのですが、ずーと{hoge|n|br2}でやっていてもエラーなので調べてみるとニアミスでした。

実際は、

{$str|nl2br}

via:nl2br:改行文字を <br />に変換

であって、つまり、「|」ではなく、小文字の「l」だったんですね。

紛らわしい~~~><

2008/10/24

[dos]注釈を記述

dosもshellコマンドのように注釈が書けるみたいです。

■rem (注釈)
rem 注釈
|_ rem の右辺に 1 行注釈が記述できる。

via:パソコン基礎知識 DOS 編 (その一) DOS コマンド

2008/10/23

[java][dos]dosの画面をクリアーにする

javaというよりも、dosの技ですが、dosでクラスパスを実行した後、画面がものすごくぐちゃぐちゃになってしまう時があります。

そんな場合は、clsと打って実行すると、画面がすっきりするそうです。

■rem (注釈)
■cls (画面クリア)
cls
|_ 画面がクリアされます。

via:パソコン基礎知識 DOS 編 (その一) DOS コマンド

2008/10/22

[oracle]現在行の取得

pl/sqlでカーソルをオープンするときに、現在どこの行を処理しているのか知りたかったので調べました。

どうやら下の感じでいけるみたいです。

declare
cursor c_hoge
select *
from hoge
;
begin
for r_hoge in c_hoge loop
--現在処理している行を出力
dbms_output.put_line(c_hoge%rowcount);
end loop;
end;
/

2008/10/21

[php]sqliteのselect文実行について

講義で、sqliteを使っているのですが、guiでコントロールできるツールがないので、自作してみようかと模索中で、その中で、カラム名を取得する必要があったので、調べてみました。

ぐぐってみるとall aboutですごくためになる記事を発見!!

SQLiteに接続するPHPプログラム作成 05というコラムで、select文発行時の一連の流れみたいのがあったので、そちらを参考にさせていただきました。

基本的には、以下のような流れです。


/* db オープン */
$db = sqlite_open("./hoge.db");
/* sql文実行 下の$sql変数は、sql文*/
$result = sqlite_query($db, $sql);
/* 検索結果の合計数の取得 */
$recordcount = sqlite_num_rows($result);
/* カラム数を取得する */
$cols = sqlite_num_fields($result);

/* カラム数分ループを行う(0番目スタートに注意) */
for($i=0; $i<$cols; $i++){
sqlite_field_name($result,$i)
}

/* データを出力 */
for($i=0; $i<$recordcount; $i++){
/* 1行フェッチする */
$currentrow = sqlite_fetch_array($a_qRet);
/* カラム数分ループを行う */
for($k=0; $k<$cols; $k++){
$currentrow[$k];
}
}

pl/sqlで似たような処理を行うときがあるので、妙にしっくりする構成です。

phpは、リストや構造体より配列に主を置いている感じをうけるので、これでいいのかなと自己完結。

2008/10/20

[mashup awards 4]表彰式

Photobucket

あ”-あ”-、結局、ダメだった。。。

orz

すんげー悔しい。

久しぶり、こんなに悔しい思いをしたなー。

Photobucket

とは、いえ、どこにも根拠はなかったのですが。。。

Photobucket

ちなみに、最優秀賞を受賞された作品はこちらです↓
ChaMap - Enjoy Geo Communication!

昨日、受賞式を見に行って、下のサイトが一位になるかと思ったのですが。。。
Newsgraphy - 日本のニュースを可視化するサイト
上のサイトは、まじやばいっす。
技術的にどうなっているのか全然、わからなかったし、プレゼンを聞いてて、すごく理にかなった数学が使われていて、間違いないと思っていました。
まじリスペクトですー♪

Photobucket
今回、出品をしてみて、思ったのは、「はてぶ」などで、ぶくま数が多くても、それが最優秀賞にはならないということ。

さらにプレゼンで聞いたのですが、ならべくAPIをたくさん使った方がいいということ。

2つしか使わなかったもんなー。

後、2つに1つぐらいの勢いで、google mapが使われていること。
確かに、わかりやすいけどさー、使いやすいし。

Photobucket

このgoogle mapまみれの流れを止めたくて、あえて今回使わなかったんだけど、結局、最優秀賞にもgoogle map使われていたし。

まー、あんまり考えなくていいと思うんだけど。

とにかく悔しかったです。

最後の写真は、受賞式に参加したときにいただいた粗品。
ハンカチが足りないなーとちょうど思っていたところなので、なんだかうれしかったです。

2008/10/19

[php]Smartyでsubstr

前回、実習時にSmarty上でsubstrをかます機会があったので、やり方を調べました。

<tr><td>{$ym|substr:0:4}年{$ym|substr:4:2}月</td></tr>

via:[備忘][Smarty]Smartyでsubstr():まさぶログ

<tr><td>{$ym|substr:0:4}年{$ym|substr:4:2}月</td></tr>
{assign var=colspan value=$response.pictNumList.DATA[$st_code]|@count}

via:[PHP][Smarty]すべてのPHP関数は、暗黙的に修飾子として...:まさぶログ

と、変数|substr:num1:num2でいけるみたいで、num1は、何文字目(上のブログから0スタートだと思われる)から、num2は何文字分抜き出すか?というパラメータだと推測される。

ってことでためしに、2008-03-04という日付を2008年03月04日にするという処理を考えてみると、下のようになると思います。

{$yyyy-mm-dd|substr:0:4}年{$yyyy-mm-dd|substr:5:2}月{$yyyy-mm-dd|substr:8:2}日

で確かに上を実行してみると、2008年03月04日と表示することができました。

2008/10/18

[php]非同期でサーバーにPOSTした時

クライアントで処理を行うA.htmlと、サーバーで処理を行うB.phpがあったとします。

A.htmlはjavascriptで、B.phpファイルにPOSTでパラメーターを送信するとき(俗に言うajax)、注意したいのが、その送信された、パラメータの取得方法。

ColdFusionの場合は、単純に、変数名で取得できたのですが、phpは、$_POST["変数名"]で書かないと取得できないみたいです。

どうしてこれに気がついたのかというと、最初、$変数名でソースを書いていたのですが、いっこうに取得できず、マニュアルをみたら$_POST — HTTP POST 変数という説明をみて、「ひょっとしたら」と思って試したらできたのです。

確かに、JavaScripからPOST通信しているわけですか、理にかなっているわけです。

追記
ちょっと書いた記事に納得がいかなかったので、ソースレベルで書いていきたいと思います。

Aのプログラムが下のようになっていたとします。

<input type="text" name="hoge" value="">

<script type="text/javascript">

/* IE */
if(Prototype.Browser.IE){
httpObj = new ActiveXObject("Msxml2.XMLHTTP");
・・・処理が続く
/* FireFox */
}else{
httpObj = new XMLHttpRequest();
・・・処理が続く

}
httpObj.setRequestHeader('Content-Type'
, 'application/x-www-form-urlencoded');
httpObj.send('パラメータ名1=値1&パラメータ名2=値2・・・・');
</script>

で、この時にBでは、もらったパラメーターを下のようにして取得します。

$_POST["パラメータ1"];
$_POST["パラメータ2"];
・・・

これで、非同期のパラメータ処理もうまくできるかなと

[php]現在のディレクトリは、getcwdで

マニュアルによると現在いるディレクトリはgetcwd()で取得できるみたいです。

2008/10/17

[php]関数を使う時の注意事項

一般にcfで、ビルトイン関数は、大文字、小文字気にせず、いけますが、phpでは、小文字で書いた方がいいみたいです。

忘れないうちにメモしました。

2008/10/16

[php]フォーム、クッキー、セッション参照時に注意

一般に、フォーム変数、クッキー変数、セッション変数を参照する時に注意したいのが、「_」以降は大文字であること

/* form変数 */
$_POST
/* session変数 */
$_SESSION
/* cookie変数 */
$_COOKIE

開発時に気をつけたいところです。

2008/10/15

[php]Smartyで、外部ファイルを参照するときの注意点

さっきまで、セミナーで使うログイン画面を作っていたんだけど、その時に、つまずいてしまったことをメモしようかなと。

Smartyを使って開発するときに、htmlファイル内に、scriptタグで、外部ファイルを参照するときや、linkタグを使って、外部のCSSファイルを参照するとき、または、imgタグのsrcで、外部ファイルを参照するときは、phpファイルを置いてある場所にしないとエラーが起きてしまうようです。

最初、htmlファイルを置いてある場所に、同じように外部ファイルも置いていたので、エラーがでまくっていて、どうしてかなーと思っていたのですが、ブラウザには、phpファイルでアクセスするので、ディレクトリ構造を考えると当たり前と言っては当たり前なのかもしれないですが。。。

とにかく気をつけたいですね。

2008/10/14

[思い出]同期の結婚式

この前の、日曜日、同期の結婚式がありました。

主催する側になったことはあるのですが、参加する側になったのは初めてだったので、ものすごく楽しみでした。

なんとか、下ネタも、ルネッサーンスも言わず(妻にうざいから、絶対に言うなと止められてた。)2次会終了間際まで楽しくすごすことができましたが、その後は。。。

関係者の皆様、大変、ご迷惑をおかけしました。

うーーーん、お酒は、もうこりごりっす。

特にタクシーで自宅まで送ってくれた、N君と、A君、本当にありがとうございます。

Photobucket

上の写真は、結婚式が終わった後の会場!!
実は、納涼会と同じ場所に、池袋のリビエラ

新郎新婦共にめっちゃよかったです♪
ブログに掲載できないのが残念(肖像権の都合上)

本当に末永くお幸せに!!

2008/10/12

[php]Smartyで、JavaScriptを使うときの注意点

htmlファイル内で、JavaScriptを書きたいときに、そのまま書いてしまうとエラーになってしまうようです。

エラーの内容をみる限り、レンダリングエラーだと思って、いくつか調べてみると的中。

回避方法として、scriptタグの上に、{literal}を使い、閉じタグの下に{/literal}を使えば回避できるみたいです。

参照サイト
BooLog 1.0:SmartyとJavaScript

{literal}
<script language="JavaScript" type="text/JavaScript">
<!--
function func() {
なんとか;
}
//-->
</script>
{/literal}

via:SmartyとJavaScript

2008/10/11

[php]関数内で、グローバル変数の参照

関数内では、_POST配列や、_SESSION配列などを引数に渡さなくとも、参照できるみたいです。

これってすごく便利かなと。

だって、引数にわざわざ、むっこむ必要がないのだから。

[php]関数内の変数宣言が、暗黙的にローカル変数

昨日、質問したのですが、関数内で変数を行ったとき、暗黙的にローカル変数となるみたいです。

例えば、下のようなファンクションがあったとします。


function hoge($args1){
$foo = "Hello".$args1."さん。";
return $foo;
}

この時、返り値として、「Hello引数さん。」と返すのですが、このファンクション内で使われている$fooは、自動的にローカル変数となり、呼び出し元で、この変数を参照しようとすると、$foo=""と返すみたいです。

逆に、関数内で、globalを使うことにより、グローバル変数を呼び出すことが可能みたいです。
例えば、下のようなファンクションがあったとします。


$foo = "test";
function hoge($args1){
global $foo;
$foo = "Hello".$args1."さん。";
return $foo;
}

上の場合、呼び出し元で、$fooを参照すると、「Hello引数さん。」と表示されるみたいです。

phpは、変数スコープをあまり考えないみたいなので、関数内部を作るとき、引数設定には、特に注意したいところかなと。

2008/10/10

[php]配列評価に、構造体を使う

今、Smartyを使っています。

その中で、ちょっと不思議だなーと思ったところがあるのでメモ。

仮に、以下の、ようなphpファイルがあるとします。

・・・(処理)・・・
$hoge = array("brother" => "弟" , "sister" => "姉");
・・・(処理)・・・
assign("foo",$hoge);
・・・(処理)・・・

で、変数fooををhtml側に埋め込むんだけど、その書き方が、

{$foo.brother}<br>
{$foo.sister}<br>

ってのはわかるんだけど、逆に、これだとバグになってしまうのがなんとも不思議

{$foo["brother"]}<br>
{$foo["sister"]}<br>

だって、上の表現って連想配列ってことでしょ。
ってことはアクセスの仕方には問題ないと思うんだけど。。。

調べてみると、確かに、2つ目はダメとのこと。

では連想配列の場合はどうか?
$array["key"] = 1;

という連想配列があった場合は

{$array["key"]}

と想像するかもしれませんが、答えは、

{$array.key}


via:Smarty徹底入門(3):assignした配列を読み込む

うーん、なんとも不思議。

[life hack]アプリ開発方法について

今日、初めて、Smartyというものを知りました。

これは何かというと、デザイン(html)とアルゴリズム系(php)を別にしてファイルを作成し、実行時に、一緒にドッキングできるという便利なツールなのですが、ここで重要だと思ったのは、一般的に、デザイナーさんが作るページ(主に.html)とプログラマが作るページ(.php)を別に切り分けて、開発するということ。

これには、びっくりしました。

だって、いつも開発するとき、デザイナーとかアルゴリズムがーとか考えず、全部、作っていたから。

うーん、会社によっては、デザインチームとアルゴリズムチームを別けているんですね。
というか、これが一般的なのかな??

[php]functionに関して~その2

前回、「[php]functionに関して」で、ファンクションの戻りが、違うような気がしたと書いたのですが、確かに間違っていたみたいです。

よかったぁー。

もし、自分が間違っていたとしたら、どうして、

function bold($test2){
  $test0 = "<b>$test2</b>";
  return $test2;
}

上のファンクションをコールしたときに、結果が、太字になるのか永久に考えてしまうところでした。

確かに、下でいいみたいです。

function bold($test2){
  $test0 = "<b>$test2</b>";
  return $test0;
}

ほっとしました。

[php]cookieを削除する

おととい、PHPセミナーがありました。

その際に、セッションの削除方法が教えていただいたのですが、同様にクッキーの削除についての説明がなかったので、聞いてみると、やはりこの方法いけることが判明。

まずは、セッションの削除は、この方法で、

$_SESSION = array();

なので、クッキーは、

$_COOKIE = array();

でいけます。

2008/10/09

[php]functionに関して

今度の金曜日にセミナーがあって、先生からテキストを頂いて、予習していたのですが、その中で、以下のようなソースがありました。

ここでは著作権の関係があるので、ファイル名、変数名を変更し、さらに値も変更して記載したいと思います。

/* hoge.phpの中身 */
include_once("foo.php");
$test0 = "maito";
$test1 = bold($test0);
print (test1);

/* foo.phpの中身 */
function bold($test2){
  $test0 = "<b>$test2</b>";
  return $test2;
}

via:phpセミナー資料

ってな具合に2つのファイルがあったとします。

片方は、hoge.phpで、include_onceというビルトイン関数はわかりませんが、おそらく名前と引数から、ファイルの内容をインクルードしてくれるのだと予想がつきます。

次に、ここで疑問が発生したのが、foo.phpの中身。
$test0変数に、引数にbタグを追加したものをセットし、引数をリターンしているんだよね。

別にこれ自体バグは起こさないんだけど、資料に、「太文字」になって返されると書かれていたから、納得がいかなくなり、先生に掲示板で聞いてみたら、$test2のままでオッケーだと教えていただいたんだけど、それでも、納得がいかなかったから、実際に実行をかけたら、案の定、太い文字で表示されなかったんだよね。

これって、もし、太文字で表現したい場合、

function bold($test2){
$test0 = "<b>$test2</b>";
return $test0;
}

だと思うのですが、資料の写し間違えかなー。。。(。>0<。)

[設計書]GUIの場合:設計書内に画面を載せる。

今、基本設計書の書き方を教えていただいているのですが、その中で、重要なことを追加。

GUIの場合:設計書内に画面を載せる。

仕事では、画面と文章を独立させて書いていました。
教えていただいた方、いわく、webアプリ全盛期なので、画面ありきとのこと。

あまりにも、画面と設計部分が独立している文章しかみていなかったので、同じファイルに書くという発想がでてこなかった。

何の疑問も持たずに仕事をしてしまうと、考えが凝り固まってしまい、こういった発想がでてこなくなるので、ちょっと危険なことなのかなと。
そういった意味で、意見を聞くことができてよかったと思う。

まぁー「画面と設計書を印刷してしまえば、同じじゃーない??」
と思うかもしれませんが、そう言い切ってしまうと結局、設計書の書き方に対するアプローチが一個しかなくて、他のアプローチがない状態になってしまう。

そうではなくて、プログラムと同様に設計書の書き方にもいくつかのパターンがあったらいいなと。

2008/10/08

goo辞書ガジェット、150000人突破

キセキです。

Photobucket

自作ガジェットでよくここまでこれたかなと。

でも、これで満足してはいけない!!

もっと向上しないと。

これからもがんばります♪

いつも使ってくださるユーザーさんありがとうございます。

これからも応援よろしくお願いいたします。

[java]Eclipseのインストール

前回、T.Sato君に、Eclipseを使うと開発速度が劇的に改善されるということを聞いたので、Java案件がきたことだし、さっそくダウンロードしてみました。

1:まずはダウンロード
2008年10月現在、最新版は、3.4.1がリリースされているんだけど、最新版だとdangerということで、3.4をダウンロードしました。

2:インストール
ダウンロードしたzipファイルを解凍し、「eclipse.exe」を実行します。

3:workspaceの作成
任意のフォルダにworkspaceを作成するみたいなんだけど、とりあえず、「C:\eclipse\workspace」に設定。

毎回、毎回、聞かれるのがうざいので、下のチェックボックス(Use this as the default and do not ask againと書かれている。)にチェックを入れる。

で、インストール完了!!

2008/10/06

[思い出]びっくりドンキーのハンバーグ

がおいしい。

おそらくファミレスの中で、群を抜いておいしいと思う!!

もちろん値段もリーズナブル♪

2008/10/05

[php]文字列と変数の結合は「.」で

文字列と変数の結合は「.」を使って実現できるみたいです。

$hoge = "maito";
print "私は、".$hoge."です";

[php]print内の変数評価

これも慣れの問題だと思うのですが、print関数内で、変数の評価をしちゃうところがすごいかなと。

さすがに、仕様がやさしいcoldfusionですら、これはできない。

ためしに以下を作ってみる。

$hoge = "test";
print '$hogeです<br>';
print "$hogeです<br>";
print "$hoge です<br>";
print "{$hoge}です";

上を実行した結果、下のようになりました。

$hogeです

test です
testです

ここで、強烈なのが、「'」だと変数を評価せず、さらに、「"」の場合、変数に続けて文字列を書いてしまうと評価されず、空表示になってしまい、半角スペースで切り離すと、評価され、さらに「{ }」でくくっても評価されてしまうところ。

「{ }」での評価は、unixでもそうなので、納得がいきますが、やはりここでは、文字列と変数を切り離して評価したいなー。

[php]HTTPの出力時の文字エンコーディング設定

研修時に、文字化けが発生したので、回避方法を質問したところ、mb_http_outputを教えていただいので、さっそく家に帰って使ってみることに。

utf-8で出力したい場合。

<?php mb_http_output ("utf-8") ?>

と設定すればオッケーみたいです。

確かに、実行してみた結果、utf-8に変換されていました。
これで文字化けせずにすみそうです。

[php]IISよりもapacheが推奨

これも気になったので、質問してみました。

やはり、phpは、オープンソース系のコードということで、IISよりも、apacheが推奨らしいです。
(IISだと動きが不安定とのこと)

[php]デバックについて

講師の方(海原さん)に教えていただいたのですが、phpでの開発では、printで変数を出力するのが、一般的とのこと。

coldfusionでは、デバッグ出力機能があるので、どんな変数がきているのか一目でわかるのですが、この変は、aspと同じなのかな。

[php]checkboxの取得について~その2

[php]checkboxの取得について~その1に続いて、気になったことをさらに書きたいと思います。

複数個にチェックを入れて、参照したら、valueが「13」と連続して出力されてしまいました。

coldfusionの場合、リスト化されるので、参照する場合、valueが「1,3」となって便利なのですが、あいにくphpには、それがないらしいので、再度、PHP checkboxの受け渡しPHPを参考にすると、

配列をカンマ区切りの文字データにしてやりたい時は、
$color = implode(",", $_POST["color"]);
のようにimplode関数を使用する。

via:PHP checkboxの受け渡しPHP

と書いてあったので、さらに[php]checkboxの取得について~その1で作ったプログラムを変更してみる。

<body>
<form action="./test.php" method="post">
  <input type="checkbox" name="foo[]" value="1">りんご<br>
  <input type="checkbox" name="foo[]" value="2">オレンジ<br>
  <input type="checkbox" name="foo[]" value="3">バナナ<br>
  <input type="hidden" name="flg" value="1">
  <input type="submit" value="Run">
</form>
<?php
if($_POST["flg"] == 1){
?>
  
  <?php
  /* フォーム変数が存在する場合 */
  if($_POST["foo"] != ""){
    $foo = implode ("," , $_POST["foo"]);
    print ("フォーム変数の値は、");
    print ($foo);
    print ("です。");

  /* フォーム変数が存在しない場合 */
  }else{
    print ("フォーム変数がありません。");
  }
  ?>
  
<?php
}
?>
</body>

確かに、実行してみると、カンマ区切りで返してくれます。

しかも、うれしいことに、1個しかvalueがない場合、「1,」とは返さずに、「1」と返してくれること。
なので、配列の長さを意識せずに使えるという点。

うーん、だけど、チェックボックスに関する仕様がこうだと、トランザクション時に、プログラムがちょっと煩雑になってしまいそうです。

まぁーそこまで意識する必要はないと思うのですが。

[php]checkboxの取得について~その1

一個前に記事に書きましたが、やはりcheckboxのvalueの取得方法について気になったので、調べてみることにしました。

まずは、ためしに以下のソースを作成。(以下、html、head、titleタグを省略)

<body>
<form action="./test.php" method="post">
  <input type="checkbox" name="foo" value="1">りんご<br>
  <input type="checkbox" name="foo" value="2">オレンジ<br>
  <input type="checkbox" name="foo" value="3">バナナ<br>
  <input type="hidden" name="flg" value="1">
  <input type="submit" value="Run">
</form>
<?php
if($_POST["flg"] == 1){
?>
  
  フォーム変数の値は、<?php print ($_POST["foo"]); ?>となりました。
<?php
}
?>
</body>

この場合、下のような挙動をしめしました。
(1)何もチェックをつけない:エラーを起こさず何も表示されない。
(2)1個だけチェックをつける:チェックをつけた値が表示される。
(3)複数個にチェックを入れる:最後のチェックボックスの値だけ表示される。

この時点で、リスト(例えば、1,3のような)的に表示してくれないことが判明。
では、どうすればいいのか??

ぐぐってみると、PHP checkboxの受け渡しPHPで、

<input type='checkbox' name='color[]' value='blue'>
<input type='checkbox' name='color[]' value='red'>
<input type='checkbox' name='color[]' value='yellow'>

PHPでcheckbox内の値の受け渡しメモ。

nameに[]をつけると、配列としてPHP側に受け渡る。

PHP側で、
$color = $_POST["color"]);
のように受け取ると、
変数colorは配列となっている。

via:PHP checkboxの受け渡しPHP

と書かれていたので、下のように書き換えてみました。

<body>
<form action="./test.php" method="post">
  <input type="checkbox" name="foo" value="1">りんご<br>
  <input type="checkbox" name="foo" value="2">オレンジ<br>
  <input type="checkbox" name="foo" value="3">バナナ<br>
  <input type="hidden" name="flg" value="1">
  <input type="submit" value="Run">
</form>
<?php
if($_POST["flg"] == 1){
?>
  
  フォーム変数の値は、
  <?php
  $foo = $_POST["foo"];

  foreach ($foo as $key => $value){
    print ($value);
  }
  ?>
  となりました。
<?php
}
?>
</body>

別にクライアントで「[]」を書かなくてもいいんじゃーねーと判断して実行した結果、警告が表示されました。

やはり「[]」を書かないとダメみたいです。

<body>
<form action="./test.php" method="post">
  <input type="checkbox" name="foo[]" value="1">りんご<br>
  <input type="checkbox" name="foo[]" value="2">オレンジ<br>
  <input type="checkbox" name="foo[]" value="3">バナナ<br>
  <input type="hidden" name="flg" value="1">
  <input type="submit" value="Run">
</form>
<?php
if($_POST["flg"] == 1){
?>
  
  フォーム変数の値は、
  <?php
  $foo = $_POST["foo"];

  foreach ($foo as $key => $value){
    print ($value);
  }
  ?>
  となりました。
<?php
}
?>
</body>

ただ、ここで問題になってくるのは、何もチェックをいれずに、submitをしてしまうと警告が出てしまう点。

なので、さらに正常終了するように処理を追加する必要があります。

<body>
<form action="./test.php" method="post">
  <input type="checkbox" name="foo[]" value="1">りんご<br>
  <input type="checkbox" name="foo[]" value="2">オレンジ<br>
  <input type="checkbox" name="foo[]" value="3">バナナ<br>
  <input type="hidden" name="flg" value="1">
  <input type="submit" value="Run">
</form>
<?php
if($_POST["flg"] == 1){
?>
  
  <?php
  $foo = $_POST["foo"];
  /* フォーム変数が存在する場合 */
  if($foo != ""){
    print ("フォーム変数の値は、");
    foreach ($foo as $key => $value){
      print ($value);
    }
    print ("です。");

  /* フォーム変数が存在しない場合 */
  }else{
    print ("フォーム変数がありません。");
  }
  ?>
  
<?php
}
?>
</body>

if文を追加して、宣言されている場合と、未宣言されている場合とで、処理を分けました。

あと、ちょっと今回の件に関して気になったことがあったのですが、エントリーがさらに長くなりそうなので、次のエントリーで書きたいと思います。

[php]リストの概念ってないの?

金曜日の研修時に気になったのは、配列と変数の説明を受けたのですが、その時に「リストの概念ってあるの?」という疑問が浮上!!

一般的に、フォームにチェックボックスがあって、複数個にチェックある状態で、submitを行うと、coldfusionの場合、リスト化されて「1,2」みたいな感じで、valueが送信されるんだけど、phpの場合、どうなるんだろう??

[php]変数未定義という概念がない

これって結構、強烈。

print $_POST["hoge"];

と仮にクライアントで宣言されていない、hogeという名前のForm変数を参照しようとするとバグるのかなと思い、試したら、何も表示されませんでした。

これは、aspでも同じで、宣言されていないform変数を参照しようとすると何も表示されないようです。

別にこれはバグでもなくて、こういう仕様なのだと理解すればオッケーなのですが、この手の場合、変数宣言されていなくてもバグにならないため、システム開発時にform変数がきていると思って、作っていたら、実際はきていなくて、混乱してしまうことがあります。

2年前にaspのプログラムを修正するときに、この問題にぶち当たりました。

反対にcoldfusionでは、ここはしっかりしていて、未定義のform変数を参照する場合、エラーとなります。
(中途半端なところで厳格なんだよなと突っ込みを入れてみたりして)

と同時にCやJavaにおいても宣言されていない変数を参照しにいこうとするとエラーが起きます。
でも、サーバーサイドの言語ではないので説得力がないかも。。。
(上はjspに触れていません)

クライアントではjavascriptもエラーを起こすから、やはりエラーを起こす仕様の言語が多いのかなと思いました。

perlやrubyをやっていればもっと詳しいことがわかったのかもしれないところが、今回のエントリーで悔しいところかな。

そうそう、schemeもエラーを起こしましたね。

[php]print "hoge"に慣れない

コマンドラインとみなしてしまえば、いいんだと思うんだけど、関数と説明されてしまうと、どーしても納得がいかなくなってしまうprintの使い方。

print "hoge";

上で、「hoge」という文字列が出力されてしまうことに違和感を感じてしまう。

関数なのだから、これでいきたいなーと思ってしまう。

print ("hoge");

この点に関して、少なくともColdFusion、JavaScriptは、きちんと、()ではさむ仕様になっている。

例えば、javascriptでは下のようになっている。
function_foo("hoge");//function_fooをコール

cfでも関数コールは下のようになっています。
now()<--- now関数をコール --->

しかも、Javaですら、メソッドをコールするときにも、()をつけている。

もし、これが、コマンドラインと説明されると、すごく納得!!
確かに、unixコマンドなどでは、変数を出力するときに、「echo $hoge」と書いて、変数を評価し、出力するのだから(変数に$を使っている時点で、unix系の香りがする)

まぁー結果として、あんまり気にすることもないのですが。

[php]始めました!!

金曜日から、phpを始めました。
念願のasialのphpセミナーに参加しています。

講師は同社の海原さんで、すごく丁寧に教えていただいております。

ちょくちょくブログ上で、ColdFusion以外の言語もやらないとと書いていて、新しい言語を学ぶには、きちんと誰かに教えていただくのがいいかと思って、今回、phpにしました。

phpは、最近、たくさんのシステム開発に採用されている言語でもあるので、他の案件に携わったときに使うことができたらなと。

2008/10/04

[life hack]読み書きそろばんの重要性

とても重要なことだと思ったので、一つの記事として書きました。

小野さんのブログプログラマーにとっての読み書きそろばんという記事を読みました。

プログラムにも読み書きそろばんに相当するものがあることが書かれていたのですが、その中で、

ある程度習熟したプログラマーであれば、どんな人が書いたコードでも
相手に合わせて読むことができるし、
どんな複雑なフレームワークから構成されるソースコード群でも、
すらすらと読んで理解してしまうものである。

逆に、そう簡単には人のコードを悪く言わない人が
「これは使い物にならない」という時の重みには、相当のものがある。

via:1. 読み

と書かれていて、普段、他の人が作ったソースを読んだ時に、すぐに「気持ち悪い」とか、「使い物にならない」とか、言わない性分なのですが(というか、言う余裕もないほど、てんぱっているため、まさに、ブログのタイトル通り)、一つのシステムだけ、「うわ、ぐしゃぐしゃだ」と言ってしまったことがあります。

その時、プログラムを作った先輩社員も「確かにぐちゃぐちゃだよ」と言って、納得したのですが、今回のエントリーを読んでみて、安易に言ってはいけないのだと思いました。

できるプログラマーになるためには、ソース内容も相手に合わせる形でないと。

さらに注意したいのが、この部分、

ある程度習熟したプログラマーであれば、どんな人が書いたコードでも
プログラミングにおける「そろばん」には、二つの種類があると思う。

一つは、論理的思考能力である。
たまに、「とりあえず動いたのでこの方法で行きます」とか、
「よくわからないけどこの箇所をコメントアウトすると動きます」
というような発言をする人がいるのだが、
このような対応は、一時的に問題を回避できたように見えて、
後でその何十倍もの重要な問題を引き起こす可能性が高い。

via:3. そろばん

とかくめんどくさがりなので、とりあえず頭の中で、「ここら辺を直せばいけるじゃーねー」的なことを考え、実際に、修正を行い、動作確認をある程度おこなった後、「やっぱりなおった」と言ってしまうことがあります。

これもよくないのかなーと。

小野さんのブログにも書かれていましたが、きちんと、「どうして、ここを修正すればいいのか?」というように、論理立て説明できるようにしておかないと、成長がストップしてしまうのではないかと思いました。

2008/10/03

[設計書]目次とフレーム

忘れないうちに書いておかないと。。。

ちょっと前から短期で派遣の方にきていただいたのが、設計書に関していくつかアイデアをもらいました。

1:目次を追加
2:フレームを追加

1は設計書内に追加します。
目次があることで、最初にある程度の概要をつかめるようになるとのこと。

確かに、一般的に売られている書籍を考えるとタイトルに次に目次がくるのが当たり前で(前書き等の例外を除きますが)それに気づきもしなかったのがやばいことなのかと。
2は一般的に左側になると思うのですが、パワポとかでプレゼン資料を作る時に、左側に目次見たいのが、ずらずらーと並ぶのですが、それをクリックすると該当するページに飛ぶことができるんですよね。
これがあると長い設計書のときに便利なのではないかと言っていました。

ちょっと調べてみると、word 2003から縮小表示と呼ばれる機能もあるので、これを使ってみるのもいいかもしれません。
参考サイト:見出しマップにサムネイル表示をするには-Word2003・2007(インストラクターのネタ帳より)

▼操作方法:縮小表示を行う

※Word 2003の場合
メニュー[表示]
 -[縮小表示]をクリックしてチェックマークをつける

※Word 2007の場合
[表示]タブ
 -[表示/非表示]グループ-[縮小表示]チェックボックスをOnにする

via:見出しマップにサムネイル表示をするには-Word2003・2007

リバースエンジニアリングをして、ろくに設計書を読まずに、いきなりプログラムを見るのが常になってくると、ドキュメントに対するおもてなしが抜け落ちてしまうので、意識して作成したいと思いました。

2008/10/02

[思い出]元同期とラーメン会

かれこれもう1ヶ月ぐらい前になってしまいましたが、元同期のT.sato君と池袋の無敵家と東方見聞録で飲み会(2人ですが)を開催しました。

久しぶりに友達と飲んだのでものすごーく楽しかったです。
(また飲みにいきたいっすね)

色々な話をしましたが、一番、痛感したのは、Javaの重要性。

普段、業務で使わないので、ここら辺できちんと勉強したほうがいいのではないかと。

に加えてエクリプスを使って開発を行う重要性。

テキスト編集ソフトで直打ちでしか、Javaのプログラムを組んだことがないので、IDEを使った開発の重要性を聞いた気がします。

残りの半分以上は、し~もね~た~だったような気がしますが。。。(味の話が強烈だった)

2008/10/01

[coldfusion]本を出版したい

総決算として、これさえあればCFマスター、みたいな本を書きたい。
あわよくば英語版も書きたい。

そろそろ違う言語もやらないとまずいかなと