サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
yssk22.hatenadiary.org
はてなブックマーク - CSSフレームワーク『BlueTrip』が想像以上にすごい - present 盛り上がってますね。 私のようなCSSの文法はわかるけど効率よくCSS書くにはどうしたらいいの?とか、ぶっちゃけ細かいところめんどくさくて span-24 とか、そりゃやりたくなるよ、という人が多い一方で、「おいおい、そんなことしたら font-size="10.5pt" とHTMLに書いているのとかわらんだろうがー」とご立腹な人もいるわけです。 span-24 とかやるのは「デザインとHTMLを分離する目的で使うのではなくて、単にspan-24って書いて別ファイルにした方が効率的に配信できるじゃん」と割り切ってスルーする、というのもあるんですが、ちょっとカウンタークレームをがんばってみました。 less ですよ、less 要するに、span-24をHTMLファイルに書くんじゃなくて、C
今こんなのを作っています。 exports.setup = function(site, done){ site.all('/posts/admin/*', oauth.requiredWith('twitter')); site.install('posts', function(app){ var posts = app.model; site.get('/', $.title('Home'), posts.byTag('news'), $.render('index.ejs')); done(); }); } node.js とCouchDB で動く、アプリケーションコンテナ的な何か。 フロントエンドからサーバーサイド、果てはデータベースまですべてJavaScriptでやってやろーじゃん、的な勢いで。 普通にアプリを作るだけならCouchDBだけでもいいんですが、認証情報を持ちたくな
ES5 の仕様書 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf JSON.stringify(”ほげほげ") は "ほげほげ" となるのが正しい模様。 一方で、RFC http://www.ietf.org/rfc/rfc4627.txt によると、"ほげほげ" は "\\u307b\\u3052\\u307b\\u3052" になってもよいよ、とある。 で、CouchDB は後者のエスケープバージョンのJSONしか受け付けないので、node.js 0.2.30.3 以降, あるいはES5をちゃんと実装しているモダンな(笑 ブラウザだと連携できなくなる.... なんだってー [追記] id:t_43z さんから 0.3 以降じゃね ? という指摘をいただいて、改めてソース確認。 macbo
WebSocket やらない、という選択肢はなさそうなので、家で使っているtwitterボットをパッケージ化しました。 EventEmitter のサブクラスとして再定義しなおして、いろいろできるように。 $ npm install twbotで入ります。 WebSocket のサンプル作るときに使おうと思います。 ちょうどやっている最中に Twitter / cakephper: 英語のTweetを定期的に取得して、Sayに突っ込め ... というのを聴いて、実装してみた。何人か海外の人のtweetみているんだけれど、聴けばいいんじゃね?ってことで。 https://github.com/yssk22/node-twbot/blob/master/lib/plugins/say.js 受け取ったツイートを何も考えずにsayコマンドの入力に与えているだけです。 他にすべてのイベントを Co
http://atnd.org/events/6359 すでに満杯なのですが、そして、今年からばりばりPythonで仕事をするようになったのですが、それでもPython Hackathonでnode.js のハンズオンをすることになりました。 Hello World から簡単なWebアプリを書くところまで、データベースは扱うかわかりませんが、扱うとしたらCouchDB。 非同期で動くプログラムのUnitTestの書き方とか Express Web フレームワークとかその辺も広く浅くやろうかなぁと。 自分自身も、実際にコードを書く道具に使うのは始めたばかりですが。 昔々、関数型言語をはじめにやったとき、こういう印象を持ちました。奥に向かって突き進んで戻ってくるような感じ。 その感覚がnode.jsでも味わえます。 node.js の場合、すべてのメソッドが非同期で実行されるので。 var f
以前 node.jsでTwitter ChiarpUserStreamを閲覧するWebアプリを作った - 酒日記 はてな支店 を見て、おもしろいなぁ、と思っていたので、やってみました。 変更点は 単にtwitter streamを垂れ流すのではなく、一度CouchDBに放り込んで、CouchDB から MapReduce した結果をstreamさせるところです。MapReduce のストリーミングは、HadoopでMapReduce に初めて出会ったときからやりたかったので、CouchDB ありがとう。 デモアプリを http://demo.yssk22.info/twitter-couchdb-streaming においておきました。ブラウザを開きながら CouchDB に関するつぶやきをすると、リアルタイムに表示が更新されるかと思います。 以下詳細です。 インフラ構成 実際の構成は下の
CouchDB をメインのアプリケーションサーバーとして使っているものの、サーバーサイドで他のサービスと連携したいときにはちょっと不便さを感じてしまいます。 そういうときは、イマドキ?のWeb Frameworkの上で、CouchDBをデータベースとして扱えば良いんですが、CouchDB のアプリと密に連携する(一部の機能のためだけだから)ためには言語も同じにした方が良いだろう、ということで、node.js を使い始めています。 とりあえず、認証をtwitterに任せよう。 CouchDBでアプリ作った場合、ユーザーDB自体はCouchDBに保持されます。。これはちょっとやだ。CouchDBのインスタンス毎にユーザー抱えるとか。。。 で、イマドキ、ということで、twitter を認証サーバーとして使うんです。OAuth ができればOKってことで。 PHPとかPythonとかRubyとかJa
ご無沙汰しております、生きています。 さて、CouchDB 1.0 がでて、incremental replication もだいぶ安定した感があるので、自宅の CouchDB でロードバランスしたくなりました。 Apache mod_proxy_balancer という手もあるのですが、Incremental (MapReduce + Replication) という環境では、High Performance な Caching Proxy になる Varnish という選択肢もおもしろそうなので試しています。 構成 CPU: Opteron Dual Core 1.8 GHz Memory: 8GB Servers: http://relax:5984/, slave: http://relax:15984/ (master と slave は同じサーバー上。ただし、ディスクは別) で
ログの設定とかアラートの設定とか、、いろいろあるとは思うんだけれど、自宅のサーバー運用でわざわざファイルに出すとか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 に(作りかけですが)あるので、物足りなかった方はぜひお試しください。 なぜ時間が足りなくなるのか、といえば、ドキュメント指向だとかデータベースがアプリケー
引用の引用です。 その答えは「Webらしい設計」にある、と筆者は考えています。サービスをWebらしく作ると、ほかのシステムと簡単に連携でき、将来の拡張も楽になるのです。良い設計のWebサービスは、Web全体のアーキテクチャと調和しています。Webらしい良い設計をするためには、Webのアーキテクチャを理解して意識することが大切です。 本書は、WebサービスをいかにWebらしく設計するかをテーマとしています。クライアントとサーバはどのように役割分担するのか、望ましいURIとはどのようなものか、HTTPメソッドはどのように使い分けるのか。Webサービスにおけるこれらの設計課題について、現時点でのベストプラクティスを紹介します。このテーマを実現するために、本書は次の2つの目的を持って執筆しました。 だから、ドキュメント指向とはWebらしく指向することであり、Webは超大規模なドキュメント指向データ
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だと思ったわけで
(たしかRelaxed Incの) @mikell 先生がView Server作っていました。 http://github.com/mikeal/node.couch.js/blob/master/viewserver/main.js CouchDB <-> ViewServer間のプロトコルって、こんなに簡単だったっけ?という感じではあるものの(CouchDBについているデフォルトのViewServerはかなり面倒なことをしている)、これでCommonJSが使えるようになるはずです。 id:shase_lab さんの記事がでてました。 http://www.atmarkit.co.jp/fdb/rensai/09_couchdb/03/couchdb01.html P.3にJScriptがでてきたり、Windowsへのインストール方法が説明されていたりするので、広まりそうですね。 とこ
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のほうは、間違えた、という状況が発生
CommonJSをCouchDB上で動かしてみる試み、ということで、node.js(http://nodejs.org/) を試します。 Mac OS X 10.6, CouchDB 0.10.1, node.js 0.1.26 です。 $ ./configure $ make $ sudo make install でインストール完了。/opt/local/bin/node ができあがっています。 次にCouchDB。 $ curl -X PUT -d '"/usr/local/bin/node /usr/local/share/couchdb/server/main.js"' http://localhost:5984/_config/query_servers/javascriptと設定をしてあげます。local.iniいじってもいいですが、私の開発環境のように、たくさんのlocal
お疲れ様でした & ありがとうございました。あんなに人が集まっていて、しかも夜まで帰らないなんてすげーな、と。 以下参加記録。 いくつか www.yssk22.info 向きにリンク張ってますが、どうもDNSの契約更新しわすれてたみたいで、一時的にDNSが引けなくなってます。。。振り込みはしたのでそのうち直るはずです。 一度だけやってみたかった「CouchDBは21世紀のLotus Notes/Dominoである」というテーマで挑んだら、案の定、というかNotesユーザーいねぇーーーって状況で、ごめんなさい、でした。もうやりません。 Couch DB in 15minutesView more documents from yssk22. 最後、主催の id:Voluntas さんにFutonもみせて!といわれて、大事なことをわすれていたことに気がつきました。。。しかし、ここ数ヶ月はFut
今年もよろしくお願いします。たぶんにもれず、年越しプログラミングをしてました。 昨日、twitter のTLで流れてはっとしたのですが、確かにtwitterの検索結果、履歴がさかのぼれなくなることがあって、これはこれで不便だなぁ、というときがあります。ということで、例によってCouchDBに放り込んじゃいましょう。今回は年も変わったということで、今後触る機会が減るであろうPythonで書きました(去年はPython結構仕事で書いた...)。 twitter の search API は twitter.com/search.json?q=XXX でとれて、認証がいらない、その上、必ず次のページへのリンクを"next_page"というフィールドに含めてくれるので非常に使いやすかったです。pagingをするAPIを提供する場合は、next/prev はHTMLだろうがJSONだろうがXMLだろ
私事ですが、本日が今の職場の最終出社日でした。今年いっぱいで大変お世話になった今の職場を離れることにして、来年から別のところにやっかいになることにしてみました。まだ辞令がでているわけではないのでこのエントリのせいでw なかったことになるかもしれませんが。 ひとまず有休を消化中です*1。今年の頭に30日あったので、20日以上あるかと思いきや11日しかなかったのは、笑えます。 と、ところで、帰ってtwitterのTLみて気がついたのですが、Damien Katz氏もIBMを離れたようです。 http://www.techcrunch.com/2009/12/10/stealth-startup-relaxed-raises-2-million-from-redpoint-ventures-for-couchdb-support/ 日本語が早い。 http://jp.techcrunch.com
昔はMapReduceだとかErlangだとかRESTだとか、Append Only Storageだとか、そんな話をしていたんですが、最近では CouchDBはLotus Notesだアプリケーションサーバーだよ!っていうことが多くなりました。Webというデータベースの世界で、ロジックとデータを切り分ける必要性がそれほどないことは何となく感じているので、これはよいことだと思います。 で、 普通はいいことが多いけれども、こういう制限事項があるとか、短所はこうだとか、ベンチマークはこうだとか、何らか具体的記述があってもいいのに、一般論的記述に終始していましたので、逆に胡散臭いものを感じました。 http://slashdot.jp/~taro-nishino/journal/493582 ということで、ミゼラブルな点をば。あ、でも、あくまでアプリケーションサーバーとしてのCouchDBの話で
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に作りたい」という動機から
自分で訳しといてあれですが、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
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ではMapReduceを工夫することで関係モデルの結合演算を扱えます。なぜかKVSと一緒くたにされて、JOINができないから、だのなんだのいわれますが、SQLの関係演算の本質(? ... いや知らないけど)を見極めていれば、CouchDBのMapReduceであらかたの演算ができます。 という話。だったら非リレーショナルデータベースっていうなよ、という話は抜きです。だってリレーショナルデータベースっていうとめんどくさいことになるんだもの。 まずは普通に外部結合 ブログエントリとブログのコメントのリレーション、だとエンタープライズ脳の人が納得しないようなので、取引伝票と取引明細でいきます。 まずは、取引伝票 {
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 時に展開され、デザインドキュメントの中に埋め込まれます。こ
世間的にはシルバーウィークのようですが、木曜日も金曜日も、挙げ句の果てにその次の月曜日も有給を取得したので、プラチナに格上げ。全国行脚中のため、まとまった時間がとれないので開発はしていないんだけれど、移動中/ホテルなどで暇なときを見つけてMacBookのCouchDBで遊ぶ。 それはともかく、先日OAuthの話を書く、といっておいてまだできていない。なんか、ちょっと解せない挙動をするのがあって。 銀行トランザクションの話を書きました。せっかくがんばって書いたのに、Definitive Guide をみたらRecipeに書いてありましたorz。なので追加を書こうと思います。 あのドキュメントを使うと、 // map function(doc){ if(doc.doc_type == "振り込み"){ emit(doc.from, (-1) * doc.amount); // 振り込み元にとっ
_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がでてきたのでついでに
やってきました。参加された皆様お疲れ様でした。前日 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(という名の何でもショートセッション)にする。 懇親会は事前に出欠取ろう(移動の間はも
Partuza のソースを追うに当たって、2-legged oauthは納得したので後は実際のユーザーストーリーの流れに即してコードを追うことに。 ということで、手元にインストールして試してみたメモをベタバリ(インストールログじゃないです)、したものを徐々に編集しつつ。 Story 0. End User がガジェットを追加する。 エンドユーザーはGadget定義であるXMLファイルのURIを直接指定して自分のページにガジェットを追加します。iGoogle などだとURIを直接書くのではなくクリックして選べるようになってますが、要するにどのXMLファイルを使うか、ってことなので、partuzaだと、URIを直接指定できるようです。 とりあえず、試しにCouchDBでホストとしている以下のXML定義を読ませます。 http://webjourney.local/webjourney-defa
次のページ
このページを最初にブックマークしてみませんか?
『Web屋の人の日記 || WebJourney 開発ログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く