Linuxを中心とした話題を投稿予定。 使用ディストリビューションであるFedoraが中心になると思われます。http://oedipa.wiki.fc2.com/にてTips Wikiを公開してます。
[PC][Program]CouchDBで検索ってどうすりゃいい?
会社で必死に検索システムを構築しようとPHPカリカリ書いている今日この頃。
ようやくデータの登録フォームを作ってデータ登録までは出来たんですが、検索に悩んでいる次第。

CouchDBで検索をしようと思ったらViewを作ってkeyで絞るしかないようなんですが、その絞った結果に対してさらに別のキーで絞るとかができそうにない。当然検索システムとしてはANDで絞って検索とかしたいんだからそこをどうにかしないとなぁ。

Viewのkeyに配列でも指定したらいいのかな? けどそれだとその配列にみごと合致するものしかヒットしないだろうし、startkeyとendkeyはそういう与え方できなさそう・・・。

となるとやっぱりMySQLに逆戻り・・・? なかなか難しいな。どうすりゃいいんだ? 登録はCouchDBが圧倒的に楽だけど、検索はMySQLが非常に柔軟。検索が複数キーでできたらCouchDBで決まりなんだけどなぁ。

とりあえず、明日には方針を考えよう。うーん、Viewで全部取ってきてPHP内で検索してもいいけど、なんだかなぁ。すごく微妙な気分だ・・・Orz
スポンサーサイト



[Program]ちょっと楽しいZendFramework
発端は会社にて。TLに
「こで君て、データベースとか検索システムって作れたりするん? 外注じゃなくて内製の方が融通利くから、作れるなら作って欲しいんやけど」
って言われたところから。

現状、ベンチマークでばらしたり、試作品作ったりして性能を見たりしてるわけですが、そいつらのまとまった情報が無い。だので、それを整理しつつ引っ張ってこれるシステムを構築したいとのこと。

まぁ言われた当初はめっちゃ要求がアバウトで、できるできないを回答し辛かったので、まずは要求をより具体化するところからスタート。来年度から私が飛び込むチームの方々は私以外全員非ソフト屋さんということで、ソフト屋の常識は一切通用しないんですね。そも、データベースといわれたもののどんな情報を貯めていきたいかも決まってないし、フロントエンドのイメージもない。

逆に言えば多分に私の意見が通るというわけでもあったんですが、作ったはいいけれどお蔵入りするのも嬉しくないのでイメージはしっかりすり合わせたつもり。

どうも話し合いを続けていくと、検索システムは通販サイトをお手本にしたらよさそうだって感じまして。
で、通販サイトを構築するOSSってのはいつくかあったよなーって早速ググる。

有名どころではEC-CUBE(EC-CUBE‐日本発の「ECオープンソース」)なんてのがあるのは知ってたので、早速ローカルにインストール。こいつインストールに意外と手間取ったんですよね。なぜかパーミッションが正しく無いとか言われて。Windowsでしかも全員に書き込み権限があるようなファイルを権限がないとか言われてしまったからどうしたものかと思っていたらTipsが本家フォーラムで提示されてました。Linux環境だと多分起きなかったんでしょう。

インストールして、商品登録をやってみたんですが、これが実に面倒くさい。まぁ通販サイトなんで商品画像がないってことは有り得ないだろってことで必須なんでしょうけれど、私が使いたい機能としては画像がない場合も多々ありまして。これはちと流用するのは難しいなーってことで却下。

続いて、かなり新しそうなLiveCommerce!(Live Commerce ! オープンソースECサイト構築プラットフォーム - 買うのは簡単売るのはもっと簡単に)ってのを発見。サイトはすごくおしゃれで、これは使える!って思ったんですが、非常に惜しかった。後一歩、痒いところに手が届きませんでした。
ただ、すごく惜しかったので、こいつを拡張できたらかなりいいんじゃなかろうか、私が1から作るよりはるかに完成度が高いしないよりおしゃれだ!(そう、私は見た目重視w)ってことでソースを眺めてみることに。

が、ソースが全くわからないOrz

どうもZendFrameworkというものを使っているらしく、こいつはMVCをかなり厳密に提供しているそうで。そのためLiveCommerceでは見た目とロジックは綺麗に分離されてました。

ただ、ZendFrmeworkについてまったく知らなかったので、まずはZendFrameworkについてお勉強。

するとまぁ、PHPってこんなに進んでたのねと目から鱗。私がPHPに触れたのはもう6、7年前なので、その頃からするとびっくりするほど進化していたようで。今必死でZendFrameworkをお勉強してますが、これかなり楽しいですね。実によくできてるなーと思います。

あと、CSSでそげなことできたのね!ってのも大きな収穫。そもそもHTMLを直で打ってサイト構築とかこれまた6、7年前に作ってたHP以来だし、もうそんなのやる元気ないなぁと思っていたので今更HTMLをゴリゴリ書く羽目になろうとは夢にも思ってませんでしたが。

まぁでもCSSでサイトデザインを行うのはすごく理に適ってるんですね。今頃そんなことに気がついたわけで。FireBug最高! これまでただぼんやりと眺めていたWebサイトも、今はFireBugでもって「へぇ、こうなってるのね」とか興味津々。いやはや、Webデザイナーは変態ぞろいだな・・・!

残念ながらLiveCommerceを拡張するのは骨だったので、結局1からサイトを構築してます。と言ってもZendFrameworkを使ってるのでかなり楽。Zend_Layoutでサイトレイアウトは自動的に共通化できるし、Zend_Navigationでカテゴリメニューも作れる。Zend_Formでフォームも作れるし、DBとの連携も抽象化されてるしACLやらAuthまで用意されていてもう何から何まで至れり尽くせり!

こんだけライブラリが提供されているので、あとはサイト構成とDB構成を考えるだけ。まぁ問題はDB構成かな。Webサイト構築もやったことなければ認証システムもやったことなければDB設計もやったことがないというこの状況。実に無茶ぶりだよね! 楽しいからいいんだけど!w

もちろん、そんな無茶を楽しんでいるのはこのシステムを外に公開する気が一切ないから。外に公開するようなシステムだったら絶対にやりませんが。うちうちなのでなんとかなるでしょう。

お面はそろそろ完成しそう。あとは中身ってことで、DBの設計やなぁ。その先はDBの編集というか、レコードの登録やら削除もWeb経由でできるようにしたいところ。

DBは盛り込む内容もまだFixできてないからなぁ。こっちの方が大変そうだ。どうすんのが理想的かしらなぁ。
既にDBがあったのなら引っ張ってくるだけだからいいんだけど、作るのは初めて。さてさてどうしたもんでしょかね。
[PC]TwitterのBot作ってた
ひょんなことから、GoogleAppEngineを使ってBotを作って見ようと思い立ちましてこの土日にひっさびさに家でプログラムなんぞ組んでました。いやまぁ組んだなんて大層な事言えたものは作ってないですが!

そもそもGoogleAppEngine(以下GAE)なんてものを全く知らず、まずはそこから。
どうやらPythonやJavaで作ったプログラムをGoogleのサーバ上にアップし、そこにアクセスしたらPythonやJavaのプログラムが実行されるという仕組みらしい。ようするにCGIみたいなもんかな?

Googleさんがやってるサービスってことでこれもまた無料。ただし登録できるアプリは10個で、しかも削除はできないということらしいのでテストで1個潰すのには躊躇しちゃうかも。
って場合にも大丈夫なように、サンドボックス環境は提供されております。SDKに同梱されているのでそこでがっつり試しておいていざ本番用にアップロードって形ですね。

で、いざBotをつくろうってたってまずはTwitterのAPIを扱わなきゃ仕方ない。ってことでAPIを調べようかと思ったんですが、どうやらtwiter-pythonってなPython用のライブラリがあるらしく、そちらを使うととても簡単にTwitterとやりとりができるとか。

しかもGAEはPythonに対応してるのでまさにうってつけ。つーことでPythonで作ってみることに。
ただ、私はPythonは全くの初心者。かろうじてインデントが重要な意味を持つってことを把握してるくらいで、構文も予約語も知らない状態ですw

まー習作って事で、cronでアクセスする度にてけとーなことをつぶやくBotを作成しました。
一応アカウントを晒しておくとします。
胡散臭い髭の男 (usankusai_hige) on Twitter

ただ、私の作り方が悪いのかなかなか呟いてくれません・・・。ランダムで適当に喋らせてはいるのですが、それがうまく反映されないようです。API制限に引っかかるほど呟いちゃいないんだけどなぁ。15分に1回だし。エラーは発生してないけど、つぶやきの内容が一切更新されないという謎。よー分からんので放置。忘れた頃に呟きます(笑)

後は追々台詞を増やしていくとか、フォロワーの発言からキーワードを拾ってリプライするとかいろいろやりたいんですが、実装ができないとかじゃなくてやって楽しそうな内容が思いつかないので(台詞を増やす以外)やってません。

ただ、思いのほか簡単にGAEは扱えたので、なんぞWebサービスを開発したいなら使い勝手がよさそう。いろいろと制約もきついですが、PythonやJavaがほぼネイティブで動かせるというのは大きいんじゃないかな?
twitter-pythonのライブラリもかなりGAEと相性いいし、ものすごく自分の趣味に特化したBot(情報収集系)を作るには向いていそうだ。

うーん、久々にプログラムした気がするなぁ。いやまぁ会社でもやってるんですけどね?Orz
[PC][プログラミング]たいふーん!
USBブートできない件について、一昨日GIGABYTEのサポートセンターへ質問メールを投げました。

その結果、
「なんとも言えんから代理店に聞いてくれ!箱に代理店のシール貼ってるだろ? そこに連絡してちょ」
という旨のメールがすぐ帰って来ました。定型文かもしれません^^;まぁ、すぐに回答が来たことはありがたい話です。

ということで、GIGABYTEに引き続き(というかたらい回された)、代理店のマスタードシード株式会社さんのサポートに質問を投げてみました。

その結果、これまた1日で回答が。

「まず、Linuxって対応OSじゃないからそこんとこ自己責任でよろしくな。 あと、USBブートできねぇってことだけど、うちでUSBメモリにVista SP2のセットアップイメージ作って、パーティションをアクティブにしてブートしたらHDDにインスコできたぜ? ちなみにUSBメモリはADATA製C801だったぜ!」(※注:超フランクに書き直してます)

ということで、できるらしいです。USBメモリのイメージを見直してみるかな・・・。あとはアクティブになっているかどうか。いずれにせよ、ボードとしては可能らしいので頑張ってみよう。サポートさんありがとう!

閑話休題。

教授より依頼されたプログラム変更ですが、本日無事に終了しました。ちょいと細かい部分を忘れていて過去と同じ結果をなかなか出せなくて試行錯誤しましたが、なんとかリカバリー。昨日はnewでstd::bad_allocなんて例外吐かれたからなぁ。原因がコンパイラのバージョン違いによるリンカミスとは思いも寄らなかった。

学生の時はVC++2005EE+PlatformSDK、今はVC++2008EEで、クリーンせずにリビルドしたからダメだったという罠。横着はいけませんね。そのバグ解消に半日潰しましたOrz

で、今日ちょこちょこ修正を施して過去の結果を再現成功。ついでにプログラムの見通しがよくなるように#ifdefとかで場合分けしまくっておきました。今後このプログラムを使うことがあるか知りませんがw

一応教授が欲しがっているデータは揃った(はず)なので、明日メールで提出しておきましょう。

とはいえ、やっぱ気にくわない部分も多いなぁ・・・。もう少しスマートに書けたら最高だったのだけれど。まぁ数学的にアヤシイ部分が数ヶ所あるので、そこを直したいけれどもう細かい計算をしたくないというのが本音ではありますが^^;

けどFFTWをC++のcomplexとコンパチで使っているのは使い勝手良さそうだから、もうちょっとしっかりとラッパークラスを整理して、チーム内に展開してもよいかもしれない。C/C++でシミュレーションプログラムを書いている人がどれくらいいるか分かりませんが・・・^^;

ま、信号処理のシミュレーションはMATLABが主流ですよねそうですよね・・・。だがうちの部署にそんなお金はないので、Octaveで動くスクリプトを書くと喜ばれます。MATLABは数台のPCにしか入っていないのですよ!

社内でまとめてライセンス買ってくれたらいいんだけどな。他にも使ってる部署あるんだし。提案したら通るかしら・・・?
[3行日記][プログラム]VC++6.0はほんと大嫌いだ・・・
仕様という名の壁に阻まれた今日の3行日記!

・VC++6.0では「complex<float> I(0,1);」は正しく動かない。値は不定となる(欲しいのは虚数単位)。
・VC++6.0では「#define _USE_MATH_DEFINES」を定義してもM_PIが定義されていない。(M_PIがANSIで定義されていないのである意味仕方ない)
・VC++9.0(VC++2008)では上記は両方とも正しく動く。

VB6用のDLLを作ろうとしてただけなんだけどね・・・。VB6だからVC++6.0の方がいいかなーと思ってVC++6.0を使ったのに無駄なところで時間を取られた。

VC++6.0、ほんとは使いたくないんだよなぁ。ANSIに準拠してない部分が多すぎて使いたくない。テンプレートに滅茶苦茶弱いし、特に信号処理で多用する複素数型のクラスがあんまりにも貧弱・・・。

個人的に作っているプログラムはVC++2008とかVC#2008、VB2008で作ってるけれど、チーム員に展開する必要がある可能性があるプログラムはプロジェクトが開けなくなると困るのでVC6.0で作っている。フリーなんだし、みんな移ってくれないかな・・・。VC++6.0って不安定なのに、みんななぜ気にならないの・・・?