あまり技術的なことはつぶやかないと思いますけど、twitterはじめました。
個人的メモメモ。
Wordpressでカテゴリごとや、月ごとのRSSを出力するには、基本的に最後にfeedを足したURLで完成。
■カテゴリ
このブログの「filemaker」カテゴリのURLは、
http://agilmente.com/category/filemaker/
ここにfeedを足す。
http://agilmente.com/category/filemaker/feed
■月別
2009年11月のアーカイブURLは、
http://agilmente.com/2009/11/
ここにfeedを足す
http://agilmente.com/2009/11/feed
超簡単。パーマリンク設定をしている場合はこんな感じだけど、してない場合は調べてません。すみません。
あと、これらはPerl/CGIやPHPからアクセスすると、うまく表示できないことがあるかも。そのときは確かUAを偽装するとうまくいった気がする。
IEでJSからsubmit()できないことがある件。
<a href="javascript:;" onclick="doSubmit();">送信!</a> <form action="test.php" method="POST" id="testForm" name="testForm"> <input name="testVal" type="hidden" value="テストだよ"> </form>
上記のようなHTMLがあるとして、
function doSubmit(){
document.getElementById('testForm').submit();
}
上記のようなJS関数を実行してフォームを送信しようとすると、
Firefoxでは問題なく送信できるが、IEでは送信できない(>_<)
まず、HTMLを
<a href="javascript:void(0);" onclick="return doSubmit();">送信!</a> <form action="test.php" method="POST" id="testForm" name="testForm"> <input name="testVal" type="hidden" value="テストだよ"> </form>
と修正して、
function doSubmit(){
document.getElementById('testForm').submit();
return false;
}
JSはこのように変更。
何をしたかというと、<a>のhrefをvoid(0)で無効化して、さらに、onclickはfalseを返すようにする。IEではどうやら、JS関数の中のsubmit()より、<a>の働きが優先されるようで、これらをすべて無効化する必要があるよう。
これで半日悩んだ。
ある意味正しいような、でも、なんか納得いかない(>_<)
IEはツンデレだ・・・いやツンツンしてるだけか(爆
ちなみに、
<a href="javascript:void(0);" onclick="return doSubmit();">送信!</a> <form action="test.php" method="POST" id="testForm" name="testForm"> <input name="testVal" type="hidden" value="テストだよ"> <input type="submit" name="submit" id="submit" value="送信" /> </form>
こんな風に<form>タグの中に「submit」という名前の要素が入ると、submit()ができなくなる。これも注意。
JSは何でもかんでもオブジェクトなので、同じ名前のものがあれば、当然そちらで上書きされる。
迂闊な名前をつけるのはやめよう。
オープンソースECシステムをメモメモ
・osCommerce
だいぶ古くからあるシステム。
今開発やコミュニティがどうなってるのか不明・・・。
選択肢には入らない・・・かな。
・ZenCart http://zen-cart.jp/
osCommerceからの派生プロジェクト
安定度は高いが、環境によってインストールにかなり苦労する。
ZenCartインストールを公式に保障している
ホスティングサービスを利用したほうがいい。
いかんせん、設計が古いので、それなりの見た目にはなってしまう。
・EC-CUBE http://www.ec-cube.net/
近頃よく使われるEC用CMS。
日本製なので、決済モジュールなどが充実しているのがいいところ。
こちらも環境によってはインストールに苦労する。
バグが多くて困る。。。
MySQLを使えるようにはなっているが、使わないほうがいい。
PHPの知識がない人は・・・使わないほうがいいかも。
それでも無難に使えるから、まぁ合格点。
・ONE/DEPO http://www.onedepo.jp/index.html
ダウンロード販売の機能やら、簡易的なショッピングモール機能など、
他にない機能満載のECシステム。
データベースがPostgreSQLを使っているので、商品数もかなりいける。
決済モジュールがないので、
独自に決済方法を組み込まなければならないのが難点。
・Magento http://www.magento-jp.com/
MySQLを使いながらかなりの商品数を扱えるというすばらしいECCMS。
実績では、10万点を越える商品を扱ったサイトもにも耐えられたとのこと。
画像処理システムなどかなり多くの機能を抱え込んだシステムなので、
環境を選ぶのが難点で、
基本的にVPSか占有利用サーバーでの利用を考えたほうが良い。
海外製で、まだ日本コミュニティは成長途中なので、資料が少ない。
決済モジュールはいくつかあります。
個人的に、日本コミュニティの中心の方とお話させてもらったことがありますが、
非常に人当たりが良かったので、
Magentoは今後何某かの形で関わっていきたいなと思っています。
他にも沢山ありますが、使えそうなのはこれくらいですかね。
私はEC-CUBEとMagentoを案件に合わせて選択という感じでいくことになりそうです。
Macの日本語入力プロセッサといえば、
・ことえり
・ATOK
・EGBRIDGE
ですよね。
ことえりはねぇ・・・。いわずもがな・・・。
ATOKはちょっと独特なんだよね・・・。
EGBRIDGEは安くて、シンプルで使いやすく、僕はMS-DOSの頃から使ってます。
そんな、EGBRIDGEは、開発元のERGOSOFT が『信長の野望』シリーズで有名なコーエーに買われてしまって、パッケージングソフトウェアの開発と販売をやめてしまいました。まかー涙目。
そんなまかーに朗報。EGBRIDGEからライセンスを受けて、「物書堂」さんという会社が、EGBRIDGEをベースにした日本語入力システム『かわせみ』を10月にリリースするそうです。ダウンロードのみで、3,990円。安い!

先日のWCAN 2009 SUMMERのレポのお礼(?)のamazonギフト券が届いたよー!わーいわーい♪
他のみなさまのレポはこちらに
WCAN運営の方々、ありがとうございます。
今日は前回に引き続きお友達のWEBデザイナーさんからの依頼で、プログラミングにおける「関数」とは何ぞやという話をしてくれということで書いてみます。
高卒以上のレベルの人でプログラム言語に慣れ親しんでない人が「関数」と聞くと、数学で習った「二次関数」とかの「関数」を思い出すと思います。
※「高卒レベルの人」でと誤解される書き方をしていました。申し訳ありません。正しくは上記の通り「高卒以上のレベルの人」です。
数学で習った「関数」は、ちょっと意味は似ているところがありますが、この際きれいさっぱり忘れたほうがいいです。ということで数学の関数は忘れて話をすすめます。
で、関数っていうのはプログラミング言語やプログラマーによって結構考え方や概念が異なりますので、BASIC(VBではない)やPerlで育ってきた僕の個人的な考えで書いていきます。
お友達デザイナーがActionScriptを勉強していて躓いたらしいですので、僕はASが書けないってことでJSで書いていきます。
まず、簡単なお話から。
Javascriptの入門向け命令辞典を読んでいて、たとえば、「特定の文字列をURLエンコードしたい」というときは以下のような命令を書けと書いてあることがあります。
var str = '文字列'; str = encodeURIComponent(str); document.write( str );
これを実行すると、「%E6%96%87%E5%AD%97%E5%88%97」と表示されると思います。
encodeURIComponent()という命令を使うことで、「文字列」という文字列を簡単にURLエンコードできます。
実はこの「encodeURIComponent()」が「関数」です。
関数とは、ざっくりと簡単に言えば、決まった手順を一まとめにしておいて、再利用できるようにしたものです。
Javascriptの入門書などで「関数」と言えば、上記のような説明をした上で、
function 関数名( 引数1, 引数2... ){
手順;
return 返り値;
}
と書け。みたいなことが書いてあります。
まったくもって、間違いじゃないんですけど、その前に、自分で作らなくても、
Javascriptには最初から前述「encodeURIComponent()」のような便利な関数はたくさん用意されているんです。
たとえば他に
document.write()
alert()
confirm()
window.close()
などなどあります。
こうやって書いてみると、どうでしょうか?プログラミングの初心者でも、これまで書いたプログラムのコードの何割かは関数を使っている部分で埋められているのではないでしょうか?関数は現在の発展したプログラミングにおいては、とても有用なもので、プログラミング言語によって最初からたくさんの関数が用意されています。
前述の「function」を使った「自分で作る関数」は、最初から用意されている関数のほかに、決まった命令をまとめておいたり、それを再利用したりしたい時に作る関数で、一般的に「ユーザー定義関数」などと呼ばれます。言語が最初から用意している関数に対して、自分で作る関数だから「ユーザー定義関数」。分かりやすいネーミングです。はい。
※完全な低級言語やC言語のような低級に近い言語は関数は少なくなるかも。
※window.close()などはオブジェクトのメソッドなので厳密には「最初から用意された関数」ではない。
↑ここの※部分はお友達デザイナは無視したほうがいいですwwww
まず、関数の使いどころです。ここからは入門書を片手に読んでください。
前述の通り、関数は決まった手順をまとめておくもの、そしてそれを再利用できるようにしたものです。
料理で言うと、ダシとかスープみたいなものかな。前もって「一番ダシ」とか用意しておくことがあると思います。関数は、それに近いかな。
「引数」は、そこに醤油や塩などの追加調味料や、メインとなる食材など、目的とする料理に合わせて何かを追加してひとつの料理として完成させたり、また違うひとつの材料にしていったりして行くわけですね。材料を入れたりして加工したものが「返り値」に近いですかね。
では実例。まず関数を使わない例です。
例1
var str_1 = 250; str_1 = Math.floor( str_1 * 1.05 ); alert( str_1 + '円です。' ); var str_2 = 500; str_2 = Math.floor( str_2 * 1.05 ); alert( str_2 + '円です。' );
端数切捨てで消費税額を計算して、その結果をalert()するという内容ですね。
上記例の場合、2つの額に対して消費税計算をしていて、同じような処理を繰り返しています。
この場合同じパターンが2つですから、まだマシですけど、3つ4つ・・・となっていくとなんだかなぁとなります。
こういった決まったパターンがあるときに使うのが関数というわけですね。
では、実際に関数を使って書き直してみましょう。
関数を使うといっても、プログラム全体の設計によっていくつかの関数の実装が考えられます。
例1においてもそうです。
関数実装例パターン1
例1のプログラムを見て重複している部分は、
・変数に1.05をかける。
・1.05をかけた変数を小数点以下切り捨てる。
・この変数のあとに「円です」をつけてalert
という流れです。
ここを関数にします。
例2
//↓ここで関数定義!
function taxAndAlert( str ){
str = Math.floor( str * 1.05 );
alert( str + '円です。' );
}
//↓ここから実行文
var str_1 = 250;
taxAndAlert( str_1 );
var str_2 = 500;
taxAndAlert( str_2 );
こんな感じです。 例1と比べるとMath.floorなどの何回もあった面倒な手続き一式がまとめられています。ここが関数。実行文のところでは作った関数「taxAndAlert」を実行しているだけで、Math.floorを何度も書いたりなど面倒が少しラクになります。
関数には、手続きをまとめてラクにするだけではなくて、後々修正がラクになるという効果もあります。例1・2では消費税計算をしているわけですが、2009年8月現在では、そう遠くない未来に消費税率アップがされることが目に見えています。仮に消費税率が8%になったとすると、例1では「1.05」を「1.08」へ書き換える箇所が複数ありますが、例2ではそれが関数の中1箇所だけで済みます。これは大きなプログラムにとってはメンテ性の向上につながります。
関数実装例パターン2
さて、話は少し戻り、関数の実装パターンはいくつか考えられるということを書きました。次のパターンを考えてみましょう。
例3
//↓ここで関数定義!
function taxAndReturn( str ){
str = Math.floor( str * 1.05 );
return str;
}
//↓ここから実行文
var str_1 = 250;
alert( taxAndReturn( str_1 ) );
var str_2 = 500;
alert( taxAndReturn( str_2 ) );
↑ 例2と比べてみると、関数の中でalertを実行していないことが分かります。
ぱっと見、「あれ?繰り返しやっていることをなぜ関数にしないのだ」と思うかもしれません。確かに例1を関数で書き換えるのであれば、例2が最もいい例なのかもしれません。しかし、消費税計算というのは非常によく使う計算ではありますが、alertを使って表示するということはそれほど多くありません。
関数には返り値(かえりち)というものが用意されていて、返り値を使うことで、関数の中で計算させた結果を、元のプログラムに戻してやることができます。元のプログラムはその返り値を使って、好きなことができるわけですね。たとえば、返り値を積算していけば、合計値を計算することができたりします。返り値をうまくつかうことで、関数の機能をシンプルにして、関数の再利用性をあげることもできるのです。
このように関数は、すべてをひとつにまとめるのではなく、本当に繰り返しが多く、まとめるべき手続きをまとめるのも、関数の利用価値を高めるポイントです。
関数実装パターン3
でも、やっぱりこの際、alertも関数でやっちゃいたいよ!と思うこともありますよね。
次の例はどうでしょうか。
例4
//↓ここで関数定義!
function taxAndReturn( str ){
str = Math.floor( str * 1.05 );
return str;
}
function taxAndAlert( str ){
alert( taxAndReturn( str ) );
}
//↓ここから実行文
var str_1 = 250;
taxAndAlert( str_1 );
var str_2 = 500;
taxAndAlert( str_2 );
例4では、関数を二つ作りました。関数の中から関数を呼び出しています。そう、消費税計算をする関数と、その関数を呼び出してalertする関数の二つを作ったわけです。こうすれば、消費税計算に限定することで利用価値をあげた関数の価値をそのままに、alertを呼び出すという手続きも再利用できるようになったわけです。
かなーりざっくりした話でしたが、以上が、関数の使いどころです。
・繰り返しを関数にすることで、プログラムの可読性があがる。何度も同じことを書かなくていい。
・繰り返しを関数にすることで、プログラムを後日改修するときにラクになる。
というところがポイントで、
・関数はプログラム全体を見渡して、関数の内容はシンプルに。
・関数をいくつかつくり、関数と関数を関連させていくことでさらに便利に。
ここが関数の運用・設計において重要な点です。
個人的には、関数は、プログラミングを嫌いにならないためのひとつの道具でもあると思います。何度も同じことして「うがぁっ!!!」みたいなストレスが一番人間にとってよくないと思うからです。関数。頑張って覚えましょう。
OSCnagoyaに行きました。
お目当ては敬愛してやまないプログラミング言語「なでしこ」の出展となでしこの作者くじら飛行机さんです。
だったんですが、仕事で少しトラブって出発が遅れて、名市大についたのが17時少し前。
なでしこブースは片付けられていました・・・ガーン…orz
WEBの仕事にシステムやサーバトラブルはつきものですが、なぜ今日に限って・・・。
代わりというわけではないですが、収穫がありました。MagentoというEC用CMSのお話を聞くことができました。
担当されていたのがこちらの方です。
ほとんどマンツーマンで詳しく教えていただけました。
Magentoの存在は以前より知っていましたが、試す機会もなかなかなく本当に頭の片隅にいただけでしたが、今回触ってみようと思いました。
【良さそうなところ】
・PHP + MySQLで動作が良さそう。
・MySQL利用にも関わらず、かなりの商品点数を取り扱うECサイトでの運用実績がある。
・海外産のため世界中で利用実績がありバグつぶしは他のオープン製品より優秀。
【懸念される点】
・PHPのオプション拡張にかなり依存しているので、レンタルサーバーの場合、サービスを選ぶ。
・デザインに関して、テンプレートエンジンを利用せず生PHPで組み立てるため、デザイン部門とシステム部門が別になっている企業では、運用の検討が必要。(良くも悪くもある)
・海外製ECシステムによくある、海外商習慣と日本の商習慣の違いによる機能の過不足。
今のところこんなイメージを持っています。あとは、どこまで自分でPHPを使ってカスタマイズがしやすいかもポイントですので、ここは実際に自分で動かして確認したいと思います。
この後、別の要件があり、OCSには30分もいることができませんでした(T_T)
また開催する機会があれば、なでしこのブースを訪れたいと思います。
久しぶりに大学という場所に足を踏み入れました。キャンパスにはバンドサークルのドラムの音が響き渡っていて、大学時代バンドサークルに所属していた私は少しノスタルジーな感じになりました。
近頃はトランザクションを使いたいので、データベースエンジンの選択はもっぱらSQLiteかPostgreSQL。(別にMySQLがトランザクションないわけじゃないけど)
そんな話はまぁどうでもよくて。
久しぶりにPHPでMySQL使ったら文字化け起こしたので、
「SET NAMES」
を使おうとしたら、どうもPHPからSET NAMESを使うのはご法度っぽいΣ( ̄□ ̄;
なるほど。
早速対策しなくちゃ。
要するに、MySQLが悪いわけじゃなくて、PHPがアレなのねと。。。
ちょっと前には当たり前のノウハウも、今やバッドノウハウ。
毎日勉強しないと置いていかれるわい。
WCAN 2009 SUMMERなるイベントにいってきました。
レポ書くと2,000円分のamazonクーポンがバックというムフフな企画があるらしいので便乗で(笑
WCANへの参戦は、今回で4回目だったかな?今回はうちのスタッフとお取引のある印刷会社さんのシステム担当さんを引き連れ3人で参戦でございます。
SESSION(1) CMS導入のメリットを探る。
CMS選定のポイントに関するお話。「できること」より「制約」に注目せよ!というお話だった。確かにそうかも。「何でもできます」って一言に謳ってるCMSが多いのですが、向き不向きがあるのも事実。制約に注視したほうが、選定がラクかもしれない。
データの活用(出力とか)もCMSの重要な要素ということもおっしゃっていた。これはプログラマーを自称する私にとっては非常にグっとくる話だ。CMSに限らず作れたらおしまいっていう案件がおおいので、それじゃぁなぁと。。。
SESSION(2) Lightning Talks
5分の短いお話の詰め合わせ。全部で4組。
1:WPをCMSとして使う際の向き不向きについてお話。このブログもWPでできてますが、使ってみて思うのはやっぱり「ブログツール」なんですよね、WPって。なので、WPをCMSとして使う場合のヒントになりました。
2:XOOPSに関して。正直、「いまさらXOOPSかよ!?」って思ってしまうくらい古参のCMSです。2004年ごろ私も使っていて、2005年ごろには、出力HTMLがアレだとか、プラグインの設計がアレだとか騒がれだし、ここ最近は利用を避けていたのですが、コアの再設計がされたりなど、ずいぶん改善している模様。ちょっと見直したいと思います。
3:Nucleusが生き残っているわけ。というポジディブにもネガティブにもとれるタイトルの話。Nucleusという物自体は知ってましたが、あまりコミュニティが活発ではなさそうだったので利用をさけていたのですが、コミュが死んでいるのではなく、コミュが緩いそうなんです(^-^; 話を聞く限り、思ったよりよさそうなCMSでした。
4:Concrete5について。これは以前使ったことがあります。まだオープンソースになったばかりの頃、日本語版がなかった頃です。オープンソースに精通した中津川篤司さんのブログMoonGiftを拝見し、衝撃を受け、使ってみて衝撃を受け。それくらい非常に良くできたCMSです。知らないうちに日本語版ができてました(^-^;
SESSION(3)クライアントから見た a-blog cms
愛知を代表、いや日本を代表するブログツール「a-blog」の遺伝子を引き継ぐCMS「a-blog CMS」についてのお話。
ポイント
・更新画面がエンドユーザーが見る見た目からできる
・更新画面にWYSIWYGがない
後者は少し衝撃だったが、データをキレイに分割するという意味では、確かにWYSIWYGじゃないほうがいい。
「データとしてのコンテンツをマネージメントするシステム」というスタンスでCMS選びをするときは選択肢の筆頭に上げていいCMSだ。
あと、a-blogCMS専用のDWスニペットが同梱されていて、制作側の作業にも考慮されている点もポイント。いかにも日本人的なCMSのように思った。
SESSION(4)「bingo!CMS」で“ひらめきをドラッグ&ドロップ”
WCAN2009SUMMERの開催をきっかけに知ったCMS。D&Dでブロック配置をしていくという、ありそうでなかったCMS。それが「bingo!CMS」。構築の説明についてお話いただけた。
勉強いらずというコンセプトだが、他のCMSとずいぶん趣が違うので、bingo!用の勉強は必要。その点は気になるところだが、慣れてしまえば確かにこれ以上ないインターフェイスだ。
(機能が制限されたGPL版はあるが)無料のライセンスでないだけに、もう少し、どういった場面で強みが発揮できるのか、話していただけると、よかったなぁと。。。
SESSION(5)SOY CMSのご紹介。こんなときに使ってください!
SOY CMSについてのお話。かなり優秀なCMSだということは公開当初から有名で、私も公開のニュースが出たとき、ちょっと使ってみた。現行バージョンはさらに進んでいた。
・とにかくテンプレートエンジンの設計がすばらしい。
・最も「汎用」という言葉に近いCMSかも?
ここがポイント。
また、SOYと連携できる半独立したアプリケーション「SOY APP」という構想がプログラマー的に最強!
おはなししていただいた、株式会社日本情報化農業研究所の古荘さんが、はおり袴ってとこも最強!
SESSION(6) MTについて
ブログの定番ソフト「MovableType」。ブログの標準仕様そのものといっていいMTの開発元シックスアパートのスタッフさん自らの参戦。実に神々しい。いつの間にかMTも5までバージョンアップ。5ではCMSとしての側面がかなり押し出されて、サイト管理ソフトウェアとして、ようやく一歩を踏み出した感じ。好敵手のWPとの棲み分けが進みそう。
CMSはブログを包括する言葉だが、ここを分けるラインははっきりしていたほうがいいと思っている。ちょっと、その辺で今後MTが迷走したり、ゴチャっとしないか不安。もともと高機能ゆえ導入の敷居は高かったので、余計に。もう少し見守りたい。
まとめ。
個人的にConrete5は最強だよといっておきます。英語版の頃でおもったのだから、日本語になればさらにオススメですよ。
で、今回の収穫はやっぱりSOY CMS。現在ある悩みどころをほとんど解消してくれそう。
サードパーティとしてSOY APPの開発にも参入します。断言。
それと、以前よりオープンなものは金銭的コストは低いが、開発・導入コストは高くなる可能性があるという指摘があり、オープンなものとプロプライエタリなもの両方のお話がありましたが、やはり、オープンなものは、(時間的な)導入コストは高いなと。というのは、やはりオープンなCMSはドキュメントなりAPIなりがしっかり整備されていない印象は否めませんでした。前述のとおりSOY APPの開発に参入を希望し、開発も許可いただきましたが、APIこそありますが、ドキュメントはなく、今公開されているSOY APPを解析して作ってくれということでした。
機能面でなく、オープンかプロプライエタリかも選択の重要な要素のひとつであろうかと思います。
