サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
中東情勢
yssk22.hatenadiary.org
CouchDB をメインのアプリケーションサーバーとして使っているものの、サーバーサイドで他のサービスと連携したいときにはちょっと不便さを感じてしまいます。 そういうときは、イマドキ?のWeb Frameworkの上で、CouchDBをデータベースとして扱えば良いんですが、CouchDB のアプリと密に連携する(一部の機能のためだけだから)ためには言語も同じにした方が良いだろう、ということで、node.js を使い始めています。 とりあえず、認証をtwitterに任せよう。 CouchDBでアプリ作った場合、ユーザーDB自体はCouchDBに保持されます。。これはちょっとやだ。CouchDBのインスタンス毎にユーザー抱えるとか。。。 で、イマドキ、ということで、twitter を認証サーバーとして使うんです。OAuth ができればOKってことで。 PHPとかPythonとかRubyとかJa
Planet CouchDBでCouchDB 0.9.0を使った実践的な例が紹介されています。すばらしい! 詳細はリンク先を見ていただくとして、感想。 Django + PostgreSQL + Ngixn => CouchApp(CouchDB アプリケーションを作るためのJSライブラリ) + Ngixn って、Ngixn って聞いたことあるけどこんな風にプログラマチックにproxyをかけるのね。そりゃ、Djangoいらねぇよ。 っていうか、 Ngixn Configuration がアプリケーションサーバーのコードに見える。Proxy Pass / Rewrite なんて、ActiveRecord#find()に見えちゃうんだけれど。 Email は、external process で MapReduce結果を監視する。ちょうどGW中に似たようなモニタープロセスをRubyスクリプトで
http://blog.madoro.org/mn/35 という記事を読みました。ここ数ヶ月CouchDBで作ったアプリをMongoに移してみたりしたりとかもあったので、もちょっとコメントします。 複雑なViewを作ろうとすると挫折する。(例えば、A:B=1:N と B:C=1:N のような構造で、Cをキーとして、BとAも持ってくるView、とかはたぶん無理。RDBMS的に言うとJoin2回以上は無理、な感じ。) これは、RDBMS的にやろうとするとはまりますね。でも、Webは巨大なデータベースである、と考えるとハイパーリンク先のハイパーリンク先をジョインしたい、という場面はそうそうあるものではない、と思います。そもそもN-Nのような構造とかを作る必要性を感じないので、Viewが複雑になる段階で、データ設計間違えとるやん!と自覚します。一方で、Mongoのほうは、間違えた、という状況が発生
「ゴミ箱ちゃんと確認した?」とつっこみを受けて、、あーなるほど、、ゴミ箱にあったという罠、お騒がせしてすいません。。。orz。しかし、気になるリンクもあったので、エントリは修正せずに、以下にまとめます。厳密な検証はしていません。 確認できたのは以下の動作です。 Gmail の Google Docs で開くをクリックするとgmailユーザー(a@gmail.com)がオーナーとしてドキュメントが作成され(ファイル名=ドキュメント名だった)、URL(http://spreadsheets.google.com/ccc?key=hogehoge&gmrcpt)が割り当てられる。 上記 googleからGmail自動送信のメールがa@gmail.com宛に届き、ドキュメントへのURLである http://spreadsheets.google.com/ccc?key=hogehoge&gmrcp
以前 node.jsでTwitter ChiarpUserStreamを閲覧するWebアプリを作った - 酒日記 はてな支店 を見て、おもしろいなぁ、と思っていたので、やってみました。 変更点は 単にtwitter streamを垂れ流すのではなく、一度CouchDBに放り込んで、CouchDB から MapReduce した結果をstreamさせるところです。MapReduce のストリーミングは、HadoopでMapReduce に初めて出会ったときからやりたかったので、CouchDB ありがとう。 デモアプリを http://demo.yssk22.info/twitter-couchdb-streaming においておきました。ブラウザを開きながら CouchDB に関するつぶやきをすると、リアルタイムに表示が更新されるかと思います。 以下詳細です。 インフラ構成 実際の構成は下の
明日の勉強会の準備をしていたら、今回の本の範囲外ですが、ちゃんとまとめておかないと、というところを思い出したので書いておきます。だいぶ前に書いた気がしないでもないけど。 CouchDBではMapReduceを工夫することで関係モデルの結合演算を扱えます。なぜかKVSと一緒くたにされて、JOINができないから、だのなんだのいわれますが、SQLの関係演算の本質(? ... いや知らないけど)を見極めていれば、CouchDBのMapReduceであらかたの演算ができます。 という話。だったら非リレーショナルデータベースっていうなよ、という話は抜きです。だってリレーショナルデータベースっていうとめんどくさいことになるんだもの。 まずは普通に外部結合 ブログエントリとブログのコメントのリレーション、だとエンタープライズ脳の人が納得しないようなので、取引伝票と取引明細でいきます。 まずは、取引伝票 {
WebJourney用に新しく開発したCouchDB用のデータマッパー"CouchResource"ですが、ちゃんと公開しないとガラパゴスになりそうなので、RubyGem として利用できるようにしよう、と決心をして作業を始めました。 github のアカウントは作成済みである github でリポジトリを作る方法は知っている RubyGem の作り方は知らない 上記スペックの人間が、jewelerというgemの存在を知り、試用してみたら、[これはべんり]だったので記録しておきます。 続きを読む http://gems.github.com/ より。 gemspec のバージョンがあがったらgemをリビルドするよ! とあるので、gemspec の push とリリースはほぼ同じ作業と思った方がよいようだ。ということで release タスクというのがあるわけですね。
ログの設定とかアラートの設定とか、、いろいろあるとは思うんだけれど、自宅のサーバー運用でわざわざファイルに出すとかsyslogに出すとかgrowlで通知とかmailで通知とか、、、もう面倒なので、twitter 全部飛ばすことにしました。 ソース: http://github.com/yssk22/tweethandler パッケージ情報 http://pypi.python.org/pypi/tweethandler/0.1 今年に入ってPythonをやらなければならなくなった、ということで、はじめてのPythonパッケージ作りをやってみました。 OAuthで認証しておいて、emit するときにupdate_statusするだけです。 尚、同じログが大量にでる場合はtwitterが自動的にブロックしてくれますw ログレベルに応じてDMにするとかmentionにするとかいろいろありそうです
BPStudy32 CouchDB 再入門View more presentations from yssk22. Slideshareにアップしたものの、微妙にフォーマットが崩れたりしてしまいました。オリジナルは http://dl.dropbox.com/u/219436/CouchDB/BPStudy32/BPStudy32-CouchDB.pptx にあるので適当にどうぞ。 必要な分を全部盛りで詰め込んだらちょっとハンズオンの時間が少なくなってしまいました。 http://dl.dropbox.com/u/219436/CouchDB/PythonHackathon3/handson/_build/html/index.html に(作りかけですが)あるので、物足りなかった方はぜひお試しください。 なぜ時間が足りなくなるのか、といえば、ドキュメント指向だとかデータベースがアプリケー
お時間いただいて話した内容の資料あげときました。後半すっかり話すの忘れてましたが、CouchDB OpenSocial って楽しいと思うんですよ、はい。mixi とか goo Home とか iGoogle ってサイトまるごとレプリケーションできないから、面倒なんじゃー、とか。 http://www.slideshare.net/yssk22/couch-db0623-by-yssk22 目下の使い道は、オンラインゲームのコミュを立てたときに、続編が出たらレプリケーションを唱える、とコミュニティが複製されて、でもちゃんとゲームは分かれていて、とか。。そんなことを考えていたら、FF XIVが、FF XI のコミュニティは引き継ぎたいとか、そんな記事がでていて、これは売れる!と思ってたり。いや、FF のオンラインはやったことないんですけどね。 とりあえずあとこの辺もリンク。 http://gr
やってきました。参加された皆様お疲れ様でした。前日 ust の設定をがんばってみたのですが、私のMacbookだとちゃんとしたマイクを買わないと、Macbook自体のCPUファンの音がノイズの固まりになって使い物になりませんでしたorz。それと、実はルノアールではHotspotがないという。。。 資料のリンクは以下に集まると思います。 http://groups.google.co.jp/group/couchdb-jp/web/couchdb-definitive-guide?hl=ja 先に反省と次回方針 もっと広いところでやる / これぐらいの人数でやるのであれば Position Paper 的なものもあってもいいかも。 ちょっと詰め込みすぎた感があるので、Chapterの間をRelax Time(という名の何でもショートセッション)にする。 懇親会は事前に出欠取ろう(移動の間はも
はてなブックマーク - CSSフレームワーク『BlueTrip』が想像以上にすごい - present 盛り上がってますね。 私のようなCSSの文法はわかるけど効率よくCSS書くにはどうしたらいいの?とか、ぶっちゃけ細かいところめんどくさくて span-24 とか、そりゃやりたくなるよ、という人が多い一方で、「おいおい、そんなことしたら font-size="10.5pt" とHTMLに書いているのとかわらんだろうがー」とご立腹な人もいるわけです。 span-24 とかやるのは「デザインとHTMLを分離する目的で使うのではなくて、単にspan-24って書いて別ファイルにした方が効率的に配信できるじゃん」と割り切ってスルーする、というのもあるんですが、ちょっとカウンタークレームをがんばってみました。 less ですよ、less 要するに、span-24をHTMLファイルに書くんじゃなくて、C
Fixtureも変わっています。大きくは、関連オブジェクトをidではなくhuman readableな名前で記述できるようになった点ですが、このエントリは関係ありません。隠れた変更点?として、fixtureのキャッシュ機能が追加されています。 続きを読む 2008年になりました。カウントダウンTVを見ながらコーディングをしつつ年を越えました。 とりあえず昨年の積み残しで、実際のコードで1.2.3ベースのコードを2.0対応させています。とりあえずは、トップページの表示に問題がないレベルまでいってから rake test:unit かまそうと思っています。 environment.rb が変わっています。こんな感じで、config.action_controller.session = {:session_key => .. , :secret => .. } をつけないと怒られます。 cha
http://blog.madoro.org/mn/54 私もRailsいらねーや、ってくちなので、殆ど同じです。というか、自分で作ったRailsアプリは、仕事のものも含めて、CouchDB への移行したし。 そういうのが嫌で、RDBMSとして正しく使おうと、find()で:includeとか:joinsとか使いだすと、今度はどんどんRoR(Ruby)のコードのSQL成分が増していく。全然楽しくない。 それに加えて、私の周りだとXMLDBサポート、なんてものが入って混沌としていました。XMLいいたいだけだろ的な。XQueryとか、全然人に優しくない。 あとは、RESTの議論というかアプリケーションをみていて、多くのアプリが sql://example.com/ をブラウザでやりたかっただけじゃね?ってところで*1、CouchDBはGood Enough Technologyだと思ったわけで
ここにはもうない もうすぐ30歳にもなるし はてなもはてダなのかはてなブログなのかよくわからんし ブログを書く頻度がとてつもなく下がってるし でもSphinx/ReSTで書いたメモは大量にあって公開するのもやぶさかではないし 最近英語で技術文書を書くのが当たり前になってしまったのでもっと鍛錬しないとダメだし ということで、これを気に移動させることにしました。 (2014/03/08 追記) 気がついたらさらに2年たってて CloudFoundry からも Node.js からも離脱しました。 ということで、一からGAE+Goで実装したので今度こそ移転(笑 http://rakugaki.speedland.net/yssk22/ 昨日のことになりますが。github.com でホストされているプロジェクトのトラッキングツールを作って公開しました。 http://yssk22-cf-trac
http://atnd.org/events/6359 すでに満杯なのですが、そして、今年からばりばりPythonで仕事をするようになったのですが、それでもPython Hackathonでnode.js のハンズオンをすることになりました。 Hello World から簡単なWebアプリを書くところまで、データベースは扱うかわかりませんが、扱うとしたらCouchDB。 非同期で動くプログラムのUnitTestの書き方とか Express Web フレームワークとかその辺も広く浅くやろうかなぁと。 自分自身も、実際にコードを書く道具に使うのは始めたばかりですが。 昔々、関数型言語をはじめにやったとき、こういう印象を持ちました。奥に向かって突き進んで戻ってくるような感じ。 その感覚がnode.jsでも味わえます。 node.js の場合、すべてのメソッドが非同期で実行されるので。 var f
_bulk_docs は 0.8 から追加された機能で、そこに0.9.0 からall_or_nothingオプションが追加されました。all_or_nothing を使うと、ドキュメントのrevチェックを回避して強制的に競合状態を作り出すことができるように見えます。が、最新のtrunkでall_or_nothingがドキュメントを削除するときに意図したとおりに動作していないように見えてはまっております。 再現はできそうなので、 明日svn logを眺めて再現テストを書いてMLに投げる! とは思わなかったのだけれど。これで認証、認可が一通りできるようになりそうです。 CouchDBの0.10? あたりから追加される機能で、trunkのバージョンはすでに0.11のストリームになっているのでtrunkで機能を確認できます。 詳細は明日あたり書こうかと。 _bulk_docsがでてきたのでついでに
http://www.opensocial.org/page/specs-1 (のリンク先) 超要約。多少意訳(誤解?)しています。間違いがあったら教えてください。 OpenSocial はソーシャルアプリケーションのAPI の共通化が最終目標。 OpenSocial の実装サイトはOpenSocial Containerと呼ばれ、OpenSocial APIを使用して実装されたアプリケーションを動作させることが可能である。 Container 環境というコンテキスト内で、OpenSocialで定義されたJavaScript APIを呼び出すことができる (Container = HTML ページ + 広告を非表示にする もっと読む コメントを書く RESTful Protocol Specを眺めていて、そういえば、WADL*1ってどうなったんだろう、と思ってみたら、終わってますかね、これ
お疲れ様でした & ありがとうございました。あんなに人が集まっていて、しかも夜まで帰らないなんてすげーな、と。 以下参加記録。 いくつか www.yssk22.info 向きにリンク張ってますが、どうもDNSの契約更新しわすれてたみたいで、一時的にDNSが引けなくなってます。。。振り込みはしたのでそのうち直るはずです。 一度だけやってみたかった「CouchDBは21世紀のLotus Notes/Dominoである」というテーマで挑んだら、案の定、というかNotesユーザーいねぇーーーって状況で、ごめんなさい、でした。もうやりません。 Couch DB in 15minutesView more documents from yssk22. 最後、主催の id:Voluntas さんにFutonもみせて!といわれて、大事なことをわすれていたことに気がつきました。。。しかし、ここ数ヶ月はFut
自分で訳しといてあれですが、http://kuenishi.appspot.com/couchdb_definitive_guide_l10n_jp/21_security.html で言及されていないことがあります。それはユーザーデータベースの存在。動作までは確認していませんが、ソースコード(Erlang/JSのテスト)を確認したのでまとめます。 認証モジュールは入れ替え可能。 CouchDBの認証モジュールはErlangで記述さえすれば入れ替え可能です。etc/couchdb/default.ini に次のように設定します。 authentication_handlers = {couch_httpd_oauth, oauth_authentication_handler}, {couch_httpd_auth, default_authentication_handler}これは c
http://blog.livedoor.jp/habuakihiro/archives/65219163.html 羽生さんのERDレッスンとかSQLドリルなどにはかなりお世話になったので、ものすごく興味深く拝読させていただいた。 物心ついたとき?にはRDBMSが当たり前?になっていた時代*1に生まれたこともあっていろいろと思うところがある、ので感想を書き留めておきたい。 これの何が不便かというと、最初に上限を10とかにしてて、たまたまある売上の明細が11件になってしまった場合に格納できないということになるのです。 これは、Excel で売り上げ管理用のフォーム付きシートを作ってみたものの、Excelの表は固定幅なので自由がきかず、Accessを買ってみた、という感覚でしょうか。Access を RDBMS というと怒られるんだけれども、Excel よりはリレーションの概念に近づけるか、
http://d.hatena.ne.jp/starpos/20090214/1234629921 ブクマコメントにしようと思ったが整理をかねて1日記エントリで。いやー、データベースとしての Lotus Notes/Domino はニッチだなぁwww また,せっかく replica があるのに,読み込みの負荷分散もデータベースシステムとしては現状では意識していないのではないかと思われます. そうですね。replication で 負荷分散 を実現するためにはpartitioningに対する何らかのポリシーが必要で、その辺はMLを眺めていてそろそろ検討/実験しようか、といった感じです。とりあえず現状はmod_proxy_balancer で、という感じでしょうか(L4でバランスさせるのは結構つらい。 最近のMLの話題を拾うと、Clustering/Partitioningについては以下が参考
http://shibuya.pm.org/blosxom/techtalks/200911.html NoSQLと聞いていってきました。ざっと雰囲気というかイメージをつかみたかったんですが、その目的は達成できました。 まず、Non-blocking HTTPの話(by 宮川さん)が Node.js とかの話をWebでみて最近興味を持っていたので、タイムリーで面白かった!WSGIは知っていたけど、PSGIなんてのもあるんですね。 次。KVS大集合。RDBMSもいるよ!の会。とりあえず、総論としてO*a*l* たけーんだよ!というところでしょうか。まぁそうだと思います。ああ、高いかどうかはケースバイケースだと思ってはいるんですが、あの会場だと高いってことで。 やっぱり、私みたいに、「ExcelとかAccessのようにデータのあるところに必要に応じてアプリをadhocに作りたい」という動機から
CouchDBそろそろ誰か見るだろうかなんか書いたほうがいいんじゃね?と思っていたら、発見。 一段落してそろそろコミュニティがあってもいいよね、と思い始めたら、できてた件。 勉強会の本、そろそろ実は翻訳が?とかそんな雰囲気かと思ったら、天の一声。 なんでしょうね、この相性のよさ。申し訳ないぐらい楽しいので、せっかくなので、還元エントリを次に。 OSCで興味を持った人がいるかもしれないので、書いておきます。アプリケーションの構造そのものとかの基本的なことがらはz.ohnamiさんの記事参考にしてください。 そろそろIDEなり使ってがりがりやりたいよ、となってきたら、CouchApp は必須です。 というかcouchapp.js などのJavaScriptライブラリはともかくとしてコマンドラインのPythonツール(couchapp)は必須です。 $ sudo easy_install cou
週末遊びすぎて、頭の中の奥底に技術系の話がとんでいってしまったので、頭の体操がてらエントリを起こす。以下のエントリを注意深く読んだ。 http://satoshi.blogs.com/life/2009/10/restful-mvcなアーキテクチャの話.html 結論はないです。のでタイトルも適当。 個人的にはどういうアーキテクチャーがよいか、というのは関わる人によって変わると思っているので、 もちろん、これもデザイン・パターンの一つでしかないので、どんな場合にも適用できる話ではないが、少なくとも私が関わっているプロジェクトのほとんどすべてにこのアーキテクチャが適用できそうだな、と思っている今日この頃である。 は、おそらくそうなんだろうと思いつつ、ちょっと気になったのはJSがJSで一言片付けられている点。JSの部分をきちんと顧みないと、 { "data" : { "html" : "<p>
昨日の段階で、CouchDBに登録されているJSONのFeedを表示することはできるようになったので、今度は、CouchDB上でFormを作って巡回するフィードのURIを登録できるようにする。 CouchAppにおいて、アプリケーションサーバーのごとく、ドキュメントから動的にページを生成するには、デザインドキュメントのlists, showsなどを用いるが、それ以外に、_attachments に添付ファイルとしてHTMLをおいておけば、静的なページに対応するのは容易だ。しかも、昨今のjQueryパワーを使えば、十分に動的なページになる。 デフォルトで作成される _attachements/index.html は次のようになっている。 <!DOCTYPE html> <html> <head> <title>Generated CouchApp</title> <link rel="st
CouchDB 0.9.0 から show/list など、サーバーサイドでレンダリングを行う機能が追加されました。これは普通に使うとすごく使いにくいので、通常はCouchAppを使って次のように書きます。例えば_show/sample を実装するとき。 function(doc, req){ // !code vendor/couchapp/template.js // !json templates/sample return template(templates.sample, {doc : doc}); } couchapp push コマンドでスクリプトをCouchDBにデプロイできますが、// ! が重要なマクロ展開の機能を持っています。 !code により template.js の内容が couchapp push 時に展開され、デザインドキュメントの中に埋め込まれます。こ
http://thinkingconcurrently.com/2009/05/21/running-bespin-on-the-couch-pt1.html# Railsアプリをブラウザで開発、とかあったと思うんですが、そういうのには全く興味がありませんでした。でも、これは違います。 なぜなら、また一歩、Lotus Notes に近づいているから(違。 というわけではなくて、普通にレプリケーションやリビジョン管理の仕組みを使うと配布プラットフォームもなるのです。 配布プラットフォームになるということは、アプリケーションストア的なこともできまっせ。こんなことをやってみたい人は是非私も誘ってください(ぉぃ。 アプリケーション配布にオーバーレイネットワーク、というのはなんか技術的には微妙そうな気はするんですけれど、それがマーケットとして機能するなら面白そうだと思ってます。って、なんか面白そうだ
という検証。 http://d.hatena.ne.jp/yssk22/20090615#1245080242 の続き。CouchDBがインテリジェントにプロセスハンドリングをしてくれるのであれば、External Process に対して連続してリクエストがきても、前のプロセスが終了していなければ、別途プロセスを起動して処理する、とかそんなことをしてくれるかなー、という淡い期待を抱いて。 結論。シングルプロセス。期待ははずれました。つまるところ、普通のWebのURIエンドポイントとして使っちゃ駄目。バッチ処理のリクエスト先とした方がいい。 続きを読む OpenSocial Containerのサーバー側の実装にCouchDBを使おうとすると、JSON-RPCを何とかする必要がでてきます。Shindig のクライアント側(JavaScript)の実装では、JSON-RPCを使っているからで
次のページ
このページを最初にブックマークしてみませんか?
『Web屋の人の日記 || WebJourney 開発ログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く