<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>はるかなる熊 &#187; Javascript</title>
	<atom:link href="http://b.ruyaka.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://b.ruyaka.com</link>
	<description>ウェブは面白い。VPSとか色々試しています。</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:42:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>AppStore登録でInvalid Binaryがでてしまった。</title>
		<link>http://b.ruyaka.com/2011/05/22/appstore%e7%99%bb%e9%8c%b2%e3%81%a7invalid-binary%e3%81%8c%e3%81%a7%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82/</link>
		<comments>http://b.ruyaka.com/2011/05/22/appstore%e7%99%bb%e9%8c%b2%e3%81%a7invalid-binary%e3%81%8c%e3%81%a7%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82/#comments</comments>
		<pubDate>Sun, 22 May 2011 09:03:28 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[iPhoneアプリ]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Titanium Mobile]]></category>
		<category><![CDATA[その他]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1694</guid>
		<description><![CDATA[　ようやくアプリができたと思ってAppStore登録を試みたが最後の最後でつまづいた。 itune connectでアプリのバイナリファイルをアップロード完了後に「Invalid Binary」と言われてしまった。メールには「Invalid Signature」としか書かれていないので具体的に何か原因かわからない。 Dear Developer, Thank you for your recent binary submission for &#8220;Flash Card of Kuman Professor&#8221; to the App Store. Unfortunately we discovered an issue with your binary that you will need to correct in order for your application to proceed to the review stage. The specific issue is outlined below: [...]]]></description>
			<content:encoded><![CDATA[<p>　ようやくアプリができたと思ってAppStore登録を試みたが最後の最後でつまづいた。<br />
itune connectでアプリのバイナリファイルをアップロード完了後に「Invalid Binary」と言われてしまった。メールには「Invalid Signature」としか書かれていないので具体的に何か原因かわからない。</p>
<blockquote><p>Dear Developer,</p>
<p>Thank you for your recent binary submission for &#8220;Flash Card of Kuman Professor&#8221; to the App Store. Unfortunately we discovered an issue with your binary that you will need to correct in order for your application to proceed to the review stage. The specific issue is outlined below:</p>
<p><strong>Invalid Signature</strong> &#8211; Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level). Additionally, make sure the bundle you are uploading was built using a Release target in Xcode, not a Simulator target. If you are certain your code signing settings are correct, choose &#8220;Clean All&#8221; in Xcode, delete the &#8220;build&#8221; directory in the Finder, and rebuild your release target.</p>
<p>Once you have corrected the issue, please return to the application&#8217;s version details page in the iTunes Connect Manage Your Applications module and click on the Ready to Submit Binary button. This will take you through the binary submission flow and return your application version status to Waiting for Upload. You can then use Application Loader to upload your new binary. If any other issues are found with your submission you will be contacted.</p>
<p>Thanks,<br />
The iTunes Connect Team</p></blockquote>
<p>ググってみるとたくさん引っかかるが、原因は人それぞれみたい・・。<br />
仕方ないので一つ一つ確認していく。このプログはその時のメモ。</p>
<p><strong>1. Xodeで&#8217;Run&#8217;時のwarnやerrorがでないようにしておく。</strong></p>
<p><strong>2. Xcodeの&#8217;Build Setting&#8217;の&#8217;Code Singing&#8217;→&#8217;Release&#8217;に&#8217;iphone Developer&#8217;ではなく&#8217;iPhone Distribution&#8217;を選択する。</strong><br />
　→ &#8216;iPhone Distribution&#8217;が無い人はProvisioning Profileが間違っているので<a href="https://developer.apple.com/ios/manage/provisioningprofiles/viewDistributionProfiles.action" target="_blank">iOS Provisioning Portal</a>ページで確認。</p>
<p><strong>3. Xcodeの&#8217;Architectures&#8217;にStandard(armv6, armv7)を指定する。</strong><br />
　→ <a href="http://d.hatena.ne.jp/narazoro/20100922/1285158087" target="_blank">AppStoreに2本目のiPhoneアプリを登録したの巻</a></p>
<p><s><strong>4. Xcodeのメニュー&#8217;Product&#8217;→&#8217;Edit Scheme&#8217;→左項目&#8217;Archive&#8217;を選択。&#8217;Build Configuration&#8217;を&#8217;distribution&#8217;に選択する。</strong><br />
　→ <a href="http://d.hatena.ne.jp/It_lives_vainly/20091126/1259220424" target="_blank">Distributionの作り方</a></s><br />
<font style="color:red">※ &#8216;Build Configuration&#8217;を&#8217;distribution&#8217;ではなく&#8217;Release&#8217;で登録完了できました。</font></p>
<p>一応、上記確認後に再アップロードしたら無事登録完了しました。iTune Connectでアプリのステータスが&#8217;Waiting For Review&#8217;になりました。あとは審査が通るかどうか・・。<br />
ちなみにアップロードが無事登録完了すると下記のようなメールが届きます。</p>
<blockquote><p>Dear ***** *****,<br />
The status for the following app has changed to Waiting For Review.</p>
<p>App Name: Flash Card of Kuman Professor<br />
App Version Number: 1.0.0<br />
App SKU: ********<br />
App Apple ID: *******<br />
To make changes to this app, sign in to iTunes Connect and open the Manage Your Applications module.</p>
<p>If you have any questions regarding your app, click Contact Us in iTunes Connect.</p>
<p>Regards,</p>
<p>The iTunes Store Team</p></blockquote>
<p>他にも色々調べて確認したけど、右往左往してまとまってないので記載できてなかったり。<br />
下記のサイトがとても参考になりました。<br />
- <a target="_blank" href="http://guixin.blogspot.com/2009/12/binary-you-uploaded-was-invalid.html">The binary you uploaded was invalid. The signature&#8230;.</a><br />
- <a target="_blank" href="http://teapipin.blog10.fc2.com/blog-entry-21.html">【申請方法】Invalid Binaryの理由について</a></p>
<h5>関連サイト</h5>
<ul><li><a href="http://b.ruyaka.com/2011/05/22/appstore%e7%99%bb%e9%8c%b2%e3%81%a7invalid-binary%e3%81%8c%e3%81%a7%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82/">AppStore登録でInvalid Binaryがでてしまった。</a></li><li><a href="http://b.ruyaka.com/2011/05/19/titanium-ui-iphone-systembutton-undefined-is-not-an-object/">Titanium.UI.iPhone.SystemButton [undefined] is not an object</a></li><li><a href="http://b.ruyaka.com/2011/04/30/titanium-mobile%e3%81%ae%e9%96%a2%e9%80%a3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e9%9b%86%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b/">Titanium Mobileの関連サイトを集めてみる</a></li></ul>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/05/22/appstore%e7%99%bb%e9%8c%b2%e3%81%a7invalid-binary%e3%81%8c%e3%81%a7%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Titanium.UI.iPhone.SystemButton [undefined] is not an object</title>
		<link>http://b.ruyaka.com/2011/05/19/titanium-ui-iphone-systembutton-undefined-is-not-an-object/</link>
		<comments>http://b.ruyaka.com/2011/05/19/titanium-ui-iphone-systembutton-undefined-is-not-an-object/#comments</comments>
		<pubDate>Thu, 19 May 2011 07:57:30 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Andoroidアプリ]]></category>
		<category><![CDATA[iPhoneアプリ]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Titanium Mobile]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1671</guid>
		<description><![CDATA[Titanium Mobileで開発していると下記のようなエラーが出る時がある。 Titanium.UI &#8230;.. [undefined] is not an object 解決するには&#8221;build/iphone/&#8221;フォルダ内を一旦削除して再ビルドすればいいみたい。 ちょっいはまったのでメモ。 参考ページ 関連サイト]]></description>
			<content:encoded><![CDATA[<p>Titanium Mobileで開発していると下記のようなエラーが出る時がある。</p>
<blockquote><p>Titanium.UI &#8230;.. [undefined] is not an object</p></blockquote>
<p>解決するには&#8221;build/iphone/&#8221;フォルダ内を一旦削除して再ビルドすればいいみたい。<br />
ちょっいはまったのでメモ。</p>
<p>参考ページ<a href="http://developer.appcelerator.com/question/72821/titaniumuiiphonetableviewstyle-undefined-is-not-an-object"></a></p>
<h5>関連サイト</h5>
<ul><li><a href="http://b.ruyaka.com/2011/05/22/appstore%e7%99%bb%e9%8c%b2%e3%81%a7invalid-binary%e3%81%8c%e3%81%a7%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82/">AppStore登録でInvalid Binaryがでてしまった。</a></li><li><a href="http://b.ruyaka.com/2011/05/19/titanium-ui-iphone-systembutton-undefined-is-not-an-object/">Titanium.UI.iPhone.SystemButton [undefined] is not an object</a></li><li><a href="http://b.ruyaka.com/2011/04/30/titanium-mobile%e3%81%ae%e9%96%a2%e9%80%a3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e9%9b%86%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b/">Titanium Mobileの関連サイトを集めてみる</a></li></ul>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/05/19/titanium-ui-iphone-systembutton-undefined-is-not-an-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Titanium Mobileの関連サイトを集めてみる</title>
		<link>http://b.ruyaka.com/2011/04/30/titanium-mobile%e3%81%ae%e9%96%a2%e9%80%a3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e9%9b%86%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://b.ruyaka.com/2011/04/30/titanium-mobile%e3%81%ae%e9%96%a2%e9%80%a3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e9%9b%86%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Sun, 01 May 2011 03:59:33 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Andoroidアプリ]]></category>
		<category><![CDATA[iPhoneアプリ]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Titanium Mobile]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1612</guid>
		<description><![CDATA[iPhoneとAndoroidのアプリが両方同時に開発できる iPhoneアプリはObjective-Cで開発、AndoroidアプリはJavaなどで開発する必要があるが、 それだと開発者の負担が大きく、開発に大きなコストと時間を費やす事になる。 それを解決するための救世主が両アプリを同時に開発できるTitanium Mobile! JavaScriptで開発する Titanium Mobileで使用する言語はObjective-CでもJavaでもなくJavaScriptである。 ホームページを作った事ある人やAjax開発に慣れている人ならすぐにでも開発にとりかかれる。 Objective-Cを一から勉強してある程度使いこなせるようになるにはそれなりの時間がかかるが、JavaScriptならその時間を一気に短縮できる。なんて素晴らしい・・。 iPhoneとAndoroidの両方の実行環境を構築しておく必要がある 万能そうなTitanium Mobileだけど、あくまでコンパイルしてくれるだけなので、 iPhoneとAndoroidの開発環境だけは整えてあげる必要がある。 iPhoneはMacでなければ開発できないので、両方同時にとなるとMacでなければならない。 ▼ iPhone開発環境の構築 関連サイト Xcode and iOS SDKのインストール XcodeとMacPortsをインストールしてUNIX環境を整える Xcodeをインストール ▼ Andoroid開発環境の構築 関連サイト Mac OS X に Android SDK をインストールして Android エミュレーターを動かしてみる Mac OS 10.6(Snow Leopard)での開発環境の構築 第2回　Androidアプリ開発のための環境構築 Titanium Mobileをインストールしてみる 下記から「Download for OS X」をクリックしてダウンロードする。 http://www.appcelerator.com/products/download/ Titanium Mobile開発時に参考にしたサイト 以下、よく見る順。 titanium-mobile-doc-ja Titanium Mobile API [...]]]></description>
			<content:encoded><![CDATA[<h4>iPhoneとAndoroidのアプリが両方同時に開発できる</h4>
<p>iPhoneアプリはObjective-Cで開発、AndoroidアプリはJavaなどで開発する必要があるが、<br />
それだと開発者の負担が大きく、開発に大きなコストと時間を費やす事になる。<br />
それを解決するための救世主が両アプリを同時に開発できるTitanium Mobile!</p>
<h4>JavaScriptで開発する</h4>
<p><strong>Titanium Mobile</strong>で使用する言語はObjective-CでもJavaでもなく<strong>JavaScript</strong>である。<br />
ホームページを作った事ある人やAjax開発に慣れている人ならすぐにでも開発にとりかかれる。<br />
Objective-Cを一から勉強してある程度使いこなせるようになるにはそれなりの時間がかかるが、JavaScriptならその時間を一気に短縮できる。なんて素晴らしい・・。</p>
<h4>iPhoneとAndoroidの両方の実行環境を構築しておく必要がある</h4>
<p>万能そうなTitanium Mobileだけど、あくまでコンパイルしてくれるだけなので、<br />
iPhoneとAndoroidの開発環境だけは整えてあげる必要がある。<br />
iPhoneはMacでなければ開発できないので、両方同時にとなるとMacでなければならない。</p>
<p>▼ iPhone開発環境の構築 関連サイト<br />
<a href="http://edgvaly.cocolog-nifty.com/blog/2011/04/xcode-and-ios-s.html"  target="_blank">Xcode and iOS SDKのインストール</a><br />
<a href="http://wiki.tmd45.in/wiki.cgi?page=Xcode%A4%C8MacPorts%A4%F2%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%A4%B7%A4%C6UNIX%B4%C4%B6%AD%A4%F2%C0%B0%A4%A8%A4%EB" target="_blank">XcodeとMacPortsをインストールしてUNIX環境を整える</a><br />
<a href="http://www.niwase.info/archives/692" target="_blank">Xcodeをインストール</a></p>
<p>▼ Andoroid開発環境の構築 関連サイト<br />
<a target="_blank" href="http://mac-sheep.com/archives/1049">Mac OS X に Android SDK をインストールして Android エミュレーターを動かしてみる</a><br />
<a target="_blank" href="http://techbooster.jpn.org/andriod/environment/196/">Mac OS 10.6(Snow Leopard)での開発環境の構築</a><br />
<a target="_blank" href="http://gihyo.jp/dev/serial/01/androidapp/0002">第2回　Androidアプリ開発のための環境構築</a></p>
<h5>Titanium Mobileをインストールしてみる</h5>
<p>下記から「Download for OS X」をクリックしてダウンロードする。<br />
<a target="_blank" href="http://www.appcelerator.com/products/download/">http://www.appcelerator.com/products/download/</a></p>
<h5>Titanium Mobile開発時に参考にしたサイト</h5>
<p>以下、よく見る順。<br />
<a target="_blank" href="http://code.google.com/p/titanium-mobile-doc-ja/">titanium-mobile-doc-ja</a><br />
<a target="_blank" href="http://developer.appcelerator.com/apidoc/mobile/latest">Titanium Mobile API Reference</a><br />
<a target="_blank" href="http://ti.masuidrive.jp/">Titanium非公式BBS</a><br />
<a target="_blank" href="http://www.ideaxidea.com/archives/2010/11/titanium_mobile.html">忙しい人のためのTitanium Mobile導入法</a><br />
<a target="_blank" href="http://d.hatena.ne.jp/d4-1977/20110226/1298728960">Titanium（タイタニウム）を使うのは楽しい！</a><br />
<a target="_blank" href="http://www.appcelerator.com/products/titanium-mobile-application-development/">Titanium Mobile 公式サイト</a></p>
<h5>AppStore登録時に参考にしたサイト</h5>
<p><a href="http://www.facebook.com/note.php?note_id=153450554720309">App StoreへのiPhoneアプリの登録手順のまとめ</a><br />
<a href="http://blog.as-toybox.com/archives/267">iPhoneアプリ AppStore申請まとめ</a></p>
<h5>関連サイト</h5>
<ul><li><a href="http://b.ruyaka.com/2011/05/22/appstore%e7%99%bb%e9%8c%b2%e3%81%a7invalid-binary%e3%81%8c%e3%81%a7%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82/">AppStore登録でInvalid Binaryがでてしまった。</a></li><li><a href="http://b.ruyaka.com/2011/05/19/titanium-ui-iphone-systembutton-undefined-is-not-an-object/">Titanium.UI.iPhone.SystemButton [undefined] is not an object</a></li><li><a href="http://b.ruyaka.com/2011/04/30/titanium-mobile%e3%81%ae%e9%96%a2%e9%80%a3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e9%9b%86%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b/">Titanium Mobileの関連サイトを集めてみる</a></li></ul>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/04/30/titanium-mobile%e3%81%ae%e9%96%a2%e9%80%a3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e9%9b%86%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</title>
		<link>http://b.ruyaka.com/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/</link>
		<comments>http://b.ruyaka.com/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 02:34:31 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[ServersMan]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[Socket.io]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1591</guid>
		<description><![CDATA[Express+node.js+socket.ioでシンプルなチャットサイトを作ることはすぐできたけど、 複数チャットを利用する時に必要なチャネル分けみたいに機能がないみたい。 ググってみたけどあまりこれだというのが引っかからなかったのでクラスを少しいじって対応してみた。 【 やりたい事 】 - クライアントをチャネルに入室～ - チャネルら入室しているメンバーにのみメッセージ送信 一応、これでチャネル分けとメッセージ送信できた。(Clientクラスのrequireがちょっと気持ち悪いけど・・) 上のコードだと「hoge channel」限定なのでチャネル作成・管理なども実装していく必要あり。 今後のtodoってことで・・。 関連ページ node.jsを試してみる express+node.js+sequelizeを試してみる MongoDBインストール手順 node.js+MongooseでMongoDBを試してみる express+node.js+redisでセッション管理 express+node.jsのSocket.ioを使ってチャネル対応チャットを作成]]></description>
			<content:encoded><![CDATA[<p>Express+node.js+socket.ioでシンプルなチャットサイトを作ることはすぐできたけど、<br />
複数チャットを利用する時に必要なチャネル分けみたいに機能がないみたい。<br />
ググってみたけどあまりこれだというのが引っかからなかったのでクラスを少しいじって対応してみた。</p>
<p>【 やりたい事 】<br />
<strong>- クライアントをチャネルに入室～</strong><br />
<strong>- チャネルら入室しているメンバーにのみメッセージ送信</strong></p>
<pre class="brush: jscript; highlight: [10,13]; title: app.js; notranslate">
/***********************************************************
 * Chart
 ***********************************************************/
var ejs = require('ejs');
var io  = require('socket.io');
var port = 3000

var socket = io.listen(app);
socket.on('connection', function(client) {
    client.joinChannel(&quot;hoge channel&quot;);
    client.on('message', function(msg) {
        client.send(msg);
        client.broadcastToChannel(msg, &quot;hoge channel&quot;);
    });
    client.on('disconnect', function() {
        console.log('disconnect');
    });
});

/***********************************************************
 * Socket.io/Client メソッド追加
 ***********************************************************/
var Client  = require('socket.io/lib/socket.io/client.js');
// 指定したチャネルのクライアントにのみメッセージを送信する
Client.prototype.broadcastToChannel = function(message, channel){
  for (var i = 0, k = Object.keys(this.listener.clients), l = k.length; i &lt; l; i++){
    if(this.listener.clients[k[i]].channel == channel) {
      this.listener.clients[k[i]].send(message);
    }
  }
  return this;
};
// クライアントがチャンネルに入るためのメソッド
Client.prototype.joinChannel = function(channel){
  this.channel = channel;
};
</pre>
<p>一応、これでチャネル分けとメッセージ送信できた。(Clientクラスのrequireがちょっと気持ち悪いけど・・)<br />
上のコードだと「hoge channel」限定なのでチャネル作成・管理なども実装していく必要あり。<br />
今後のtodoってことで・・。</p>
<h5>関連ページ</h5>
<ul>
<li><a href="/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">node.jsを試してみる</a></li>
<li><a href="h/2011/03/18/guideserversmanvpsexpressnodejssequelize/">express+node.js+sequelizeを試してみる</a></li>
<li><a href="/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/">MongoDBインストール手順</a></li>
<li><a href="/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/">node.js+MongooseでMongoDBを試してみる</a></li>
<li><a href="/2011/03/28/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/">express+node.js+redisでセッション管理</a></li>
<li><a href="/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/">express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>express+node.js+redisでセッション管理</title>
		<link>http://b.ruyaka.com/2011/03/27/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/</link>
		<comments>http://b.ruyaka.com/2011/03/27/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 23:54:01 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[ServersMan]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1584</guid>
		<description><![CDATA[expressは初期状態だとサーバーを再起動するとセッションが切れてしまいます。 セッションを維持するためにredisを利用します。 redisのインストール rpmからインストールしました。 wget ftp://ftp.pbone.net/mirror/centos.karan.org/el5/misc/testing/i386/RPMS/redis-2.0.0-rc4.el5.kb.1.i386.rpm rpm -ivh redis-2.0.0-rc4.el5.kb.1.i386.rpm chkconfig &#8211;level 3 redis on /etc/init.d/redis start expressにredisを設定する これはすごい簡単です。 これでサーバーを再起動してもセッションが維持されるようになったと思います。 関連ページ node.jsを試してみる express+node.js+sequelizeを試してみる MongoDBインストール手順 node.js+MongooseでMongoDBを試してみる express+node.js+redisでセッション管理 express+node.jsのSocket.ioを使ってチャネル対応チャットを作成]]></description>
			<content:encoded><![CDATA[<p>expressは初期状態だとサーバーを再起動するとセッションが切れてしまいます。<br />
セッションを維持するためにredisを利用します。</p>
<h5>redisのインストール</h5>
<p>rpmからインストールしました。</p>
<blockquote><p>wget ftp://ftp.pbone.net/mirror/centos.karan.org/el5/misc/testing/i386/RPMS/redis-2.0.0-rc4.el5.kb.1.i386.rpm<br />
rpm -ivh redis-2.0.0-rc4.el5.kb.1.i386.rpm<br />
chkconfig &#8211;level 3 redis on<br />
/etc/init.d/redis start
</p></blockquote>
<h5>expressにredisを設定する</h5>
<p>これはすごい簡単です。</p>
<pre class="brush: jscript; highlight: [6,13]; title: app.js; notranslate">
/***********************************************************
 * Module dependencies.
 ***********************************************************/

var express = require('express'),
    RedisStore = require('connect-redis');

var app = module.exports = express.createServer();
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
  secret: &quot;keyboard cat&quot;,
  store: new RedisStore(),
}));
</pre>
<p>これでサーバーを再起動してもセッションが維持されるようになったと思います。</p>
<h5>関連ページ</h5>
<ul>
<li><a href="/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">node.jsを試してみる</a></li>
<li><a href="h/2011/03/18/guideserversmanvpsexpressnodejssequelize/">express+node.js+sequelizeを試してみる</a></li>
<li><a href="/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/">MongoDBインストール手順</a></li>
<li><a href="/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/">node.js+MongooseでMongoDBを試してみる</a></li>
<li><a href="/2011/03/28/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/">express+node.js+redisでセッション管理</a></li>
<li><a href="/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/">express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/27/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>node.js+MongooseでMongoDBを試してみる &#8211; ServersMan@VPS</title>
		<link>http://b.ruyaka.com/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/</link>
		<comments>http://b.ruyaka.com/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 15:00:47 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[ServersMan]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[mongoDB]]></category>
		<category><![CDATA[Mongoose]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1552</guid>
		<description><![CDATA[Mongooseを試してみましたが、mongoDBかなり扱いやすいです。 スキーマレスなドキュメント指向データベースはRDBMSのようなカラムをいちいち定義しなくていいので柔軟にデータベースが使えます。 ドキュメント指向データベースになれるとRDBMSはもう使えないかも・・。 1. mongoDBのインストール 前回の記事参照。 →　MongoDBインストール手順 2. mongooseのインストール コマンド一発でOKです。 $ npm install mongoose 3. コードサンプル 関連ページ node.jsを試してみる express+node.js+sequelizeを試してみる MongoDBインストール手順 node.js+MongooseでMongoDBを試してみる express+node.js+redisでセッション管理 express+node.jsのSocket.ioを使ってチャネル対応チャットを作成 関連サイト mongoose &#8211; http://mongoosejs.com/ mongodb &#8211; http://www.mongodb.org]]></description>
			<content:encoded><![CDATA[<p>Mongooseを試してみましたが、mongoDBかなり扱いやすいです。<br />
スキーマレスなドキュメント指向データベースはRDBMSのようなカラムをいちいち定義しなくていいので柔軟にデータベースが使えます。<br />
ドキュメント指向データベースになれるとRDBMSはもう使えないかも・・。</p>
<h5>1. mongoDBのインストール</h5>
<p>前回の記事参照。<br />
→　<a href="http://b.ruyaka.com/2011/03/23/mongodb%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86/">MongoDBインストール手順</a></p>
<h5>2. mongooseのインストール</h5>
<p>コマンド一発でOKです。</p>
<blockquote><p> $ npm install mongoose</p></blockquote>
<h5>3. コードサンプル</h5>
<pre class="brush: jscript; title: ; notranslate">
// MongoDB
// MongoDBサーバーの設定
var mongoose = require('mongoose');
var crypto = require('crypto');

// Schemaを取得
var Schema = mongoose.Schema;

// ModelのSchema Class定義する
var CommentsSchema = new Schema({
  title: String,
  body: String,
  date: Date
});

// ModelのSchema Class定義する
var RoomSchema = new Schema({
  title: String,
  password: String,
  body: String,
  date: Date,
  comments: [CommentsSchema], // 1対多を埋め込み型で定義できる
  metadata: {
    votes: Number,
    favs: Number
  }
});

// middleware
// save処理の前にフックをかけれる。RailsでいうFilterみたいな機能
RoomSchema.pre('save', function (next) {
  this.password =
    crypto.createHash('md5').update(this.password).digest(&quot;hex&quot;);
  next();
});

// モデル化。model('モデル名', '定義したスキーマクラス')
mongoose.model('Room', RoomSchema);

// mongodb://[hostname]/[dbname]
mongoose.connect('mongodb://localhost/chatroom');

// 定義したときの登録名で呼び出し
var Room = mongoose.model('Room');

// インスタンス生成
var room = new Room();

// 各カラムにデータを入力
room.title = 'test title';
room.body = 'this is a pen';

// 埋め込み型カラムはpush()を使う
room.comments.push(
  {title: 'comment title1',
    body: 'comment body1',
    password: 'your password'});
room.comments.push(
  {title: 'comment title2',
    body: 'comment body2',
    password: 'your password'});

// pre-hookを定義しているとsave時に定義した関数が走る
room.save(function(err) {
  if(!err) console.log('saved!')
});

// データの取得
Room.find({}, function(err, docs) {
  docs.forEach(function(doc){
    console.log(doc);
  });
});
Room.findOne({}, function(err, doc) {
  console.log(doc);
});
</pre>
<h5>関連ページ</h5>
<ul>
<li><a href="/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">node.jsを試してみる</a></li>
<li><a href="h/2011/03/18/guideserversmanvpsexpressnodejssequelize/">express+node.js+sequelizeを試してみる</a></li>
<li><a href="/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/">MongoDBインストール手順</a></li>
<li><a href="/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/">node.js+MongooseでMongoDBを試してみる</a></li>
<li><a href="/2011/03/28/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/">express+node.js+redisでセッション管理</a></li>
<li><a href="/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/">express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</a></li>
</ul>
<h5>関連サイト</h5>
<p><strong>mongoose</strong> &#8211; <a href="http://mongoosejs.com/">http://mongoosejs.com/</a><br />
<strong>mongodb</strong> &#8211; <a href="http://www.mongodb.org/">http://www.mongodb.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MongoDBインストール手順</title>
		<link>http://b.ruyaka.com/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/</link>
		<comments>http://b.ruyaka.com/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 23:00:08 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[mongoDB]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1548</guid>
		<description><![CDATA[1. レポジトリの設定 mongoDB用のレポジトリファイルを追加します。 /etc/yum.repos.d/10gen-mongodb.repo 32bit版Mongodbレポジトリの場合 (Fedora 14/13/12/11, CentOS 5.4/5.5 and Red Hat (RHEL) 5.4/5.5/5.6/6 on i686) [10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686 gpgcheck=0 64bit版Mongodbレポジトリの場合 (Fedora 14/13/12/11, CentOS 5.4/5.5 and Red Hat (RHEL) 5.4/5.5/5.6/6 on i686) [10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 2. mongoDBのインストール 安定版のインストール yum install mongo-10gen mongo-10gen-server 開発版のインストール yum install mongo-10gen-unstable mongo-10gen-unstable-server 3. mongoDBの起動 service mongod start [...]]]></description>
			<content:encoded><![CDATA[<h5>1. レポジトリの設定</h5>
<p>mongoDB用のレポジトリファイルを追加します。<br />
/etc/yum.repos.d/10gen-mongodb.repo</p>
<p>32bit版Mongodbレポジトリの場合 (Fedora 14/13/12/11, CentOS 5.4/5.5 and Red Hat (RHEL) 5.4/5.5/5.6/6 on i686)</p>
<blockquote><p>
[10gen]<br />
name=10gen Repository<br />
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686<br />
gpgcheck=0
</p></blockquote>
<p>64bit版Mongodbレポジトリの場合 (Fedora 14/13/12/11, CentOS 5.4/5.5 and Red Hat (RHEL) 5.4/5.5/5.6/6 on i686)</p>
<blockquote><p>
[10gen]<br />
name=10gen Repository<br />
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64<br />
gpgcheck=0
</p></blockquote>
<h5>2. mongoDBのインストール</h5>
<p>安定版のインストール</p>
<blockquote><p>yum install mongo-10gen mongo-10gen-server</p></blockquote>
<p>開発版のインストール</p>
<blockquote><p>yum install mongo-10gen-unstable mongo-10gen-unstable-server</p></blockquote>
<h5>3. mongoDBの起動</h5>
<blockquote><p>service mongod start<br />
## OR ##<br />
/etc/init.d/mongod start</p></blockquote>
<h5>4. ブート時に自動起動設定</h5>
<blockquote><p>chkconfig &#8211;levels 235 mongod on</p></blockquote>
<h5>関連ページ</h5>
<ul>
<li><a href="/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">node.jsを試してみる</a></li>
<li><a href="h/2011/03/18/guideserversmanvpsexpressnodejssequelize/">express+node.js+sequelizeを試してみる</a></li>
<li><a href="/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/">MongoDBインストール手順</a></li>
<li><a href="/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/">node.js+MongooseでMongoDBを試してみる</a></li>
<li><a href="/2011/03/28/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/">express+node.js+redisでセッション管理</a></li>
<li><a href="/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/">express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>express+node.js+sequelizeを試してみる &#8211; ServersMan@VPS</title>
		<link>http://b.ruyaka.com/2011/03/18/guideserversmanvpsexpressnodejssequelize/</link>
		<comments>http://b.ruyaka.com/2011/03/18/guideserversmanvpsexpressnodejssequelize/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 01:49:15 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[ServersMan]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[sequelize]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1404</guid>
		<description><![CDATA[前回の「ServersMan@VPSでnode.jsを試してみる」に続いて、今度はnode.jsのSinatra風フレームワークExpressを試してみる。 本当はRuby on Railsを模したExpress on Railwayを試してみたかったけど、まだ機能的に未実装な部分が多かったのでまた今度。 今回はExpressを試してみました。 開発環境はServers@VPSのCentOS 5です。 Expressフレームワークの特徴 本家に書いてあるExpressの特徴をざっくりと、、(間違ってたらごめんなさい) WEBアプリケーションが簡単に実装できます! ルーティング設定できます! コード/テンプレートは分離されてます! テンプレート用ヘルパーメソッドがあります! パフォーマンスが良いです! ビューのレンタリングやパーティアルもサポートしてるぜ! 環境の切り分けができます。(Railsでいうdevelopmentとproduction) ジェネレーターもあります! セッション操作もお手の物! Expressフレームワークのインストール コマンドで一発でインストール完了。 あとついでにexpressで必要なejsテンプレートとMySQLのORMであるsequelizeもインストールします。 $ npm install express $ npm install ejs sequelizeはgitから最新版を取得してインストールします。(最新版でない日本語対応していないので・・) git clone https://github.com/ngs/sequelize.git npm install ./sequelize 骨組みの作成 Expressの骨組みを作成します。 Railsと同じく一発生成コマンドがあります。 $ cd ~/ $ mkdir blog $ express -t ejs $ ls app.js logs [...]]]></description>
			<content:encoded><![CDATA[<div class="clearfix">
<div style="float: left; margin: 0px 10px 10px 0px"><a href="http://px.a8.net/svt/ejp?a8mat=1NYTB5+2T7PMA+1QFI+ZQNG1" target="_blank"><img border="0" width="125" height="125" alt="" src="http://www24.a8.net/svt/bgt?aid=100721633170&#038;wid=001&#038;eno=01&#038;mid=s00000008091006003000&#038;mc=1"></a><br />
<img border="0" width="1" height="1" src="http://www14.a8.net/0.gif?a8mat=1NYTB5+2T7PMA+1QFI+ZQNG1" alt="">
</div>
<p>前回の「<a href="http://b.ruyaka.com/2011/03/11/serversmanvps%E3%81%A7node-js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/">ServersMan@VPSでnode.jsを試してみる</a>」に続いて、今度はnode.jsのSinatra風フレームワークExpressを試してみる。<br />
本当はRuby on Railsを模したExpress on Railwayを試してみたかったけど、まだ機能的に未実装な部分が多かったのでまた今度。<br />
今回はExpressを試してみました。<br />
開発環境はServers@VPSのCentOS 5です。
</div>
<h5>Expressフレームワークの特徴</h5>
<p>本家に書いてあるExpressの特徴をざっくりと、、(間違ってたらごめんなさい)</p>
<ol>
<li>WEBアプリケーションが簡単に実装できます!</li>
<li>ルーティング設定できます!</li>
<li>コード/テンプレートは分離されてます!</li>
<li>テンプレート用ヘルパーメソッドがあります!</li>
<li>パフォーマンスが良いです!</li>
<li>ビューのレンタリングやパーティアルもサポートしてるぜ!</li>
<li>環境の切り分けができます。(Railsでいうdevelopmentとproduction)</li>
<li>ジェネレーターもあります!</li>
<li>セッション操作もお手の物!</li>
</ol>
<h5>Expressフレームワークのインストール</h5>
<p>コマンドで一発でインストール完了。<br />
あとついでにexpressで必要なejsテンプレートとMySQLのORMであるsequelizeもインストールします。</p>
<blockquote><p>
$ npm install express<br />
$ npm install ejs
</p></blockquote>
<p>sequelizeはgitから最新版を取得してインストールします。(最新版でない日本語対応していないので・・)</p>
<blockquote><p>
git clone https://github.com/ngs/sequelize.git<br />
npm install ./sequelize
</p></blockquote>
<h5>骨組みの作成</h5>
<p>Expressの骨組みを作成します。<br />
Railsと同じく一発生成コマンドがあります。</p>
<blockquote><p>
$ cd ~/<br />
$ mkdir blog<br />
$ express -t ejs<br />
$ ls<br />
app.js  logs  pids  public  test  views
</p></blockquote>
<h5>Expressを起動してみる</h5>
<blockquote><p>$ node app.js</p></blockquote>
<p>既定ではポート3000に開きます。ブラウザからアクセスしてみるとようこそと歓迎してくれます。<br />
<a href="http://b.ruyaka.com/wp-content/uploads/2011/03/express_on_railway1.gif"><img src="http://b.ruyaka.com/wp-content/uploads/2011/03/express_on_railway1-300x189.gif" alt="express + node.js" title="express_on_railway" width="300" height="189" class="alignnone size-medium wp-image-1435" /></a></p>
<h5>ログを出力してみる</h5>
<p>既定値だとアクセスログが全く表示されないので、表示されるように設定してみる。<br />
app.js 8行目</p>
<blockquote><p>
- var app = module.exports = express.createServer();<br />
+ var app = module.exports = express.createServer(express.logger(),express.bodyParser());
</p></blockquote>
<p>これでサーバーを立ち上げ確認してみると下のような感じでアクセスログが表示される。</p>
<blockquote><p>
$ node app.js<br />
192.168.0.1 &#8211; - [Thu, 17 Mar 2011 00:27:25 GMT] &#8220;GET / HTTP/1.1&#8243; 200 &#8211; &#8220;&#8221; &#8220;Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.0.30729; .NET4.0C)&#8221;<br />
192.168.0.1 &#8211; - [Thu, 17 Mar 2011 00:27:25 GMT] &#8220;GET /stylesheets/style.css HTTP/1.1&#8243; 304 &#8211; &#8220;http://192.168.0.1:3000/&#8221; &#8220;Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.0.30729; .NET4.0C)&#8221;
</p></blockquote>
<p>またログに任意のメッセージを表示したい場合はconsole.logを使います。</p>
<pre class="brush: jscript; highlight: [2]; title: app.js 31行目; notranslate">
app.get('/', function(req, res){
  console.log(&quot;トップページが表示されました。&quot;);
  res.render('index', {
    title: 'Express'
  });
});
</pre>
<h5>ルーティング設定のサンプル</h5>
<p>ルーティングの設定も簡単にできます。<br />
設定ファイルはapp.js内で行います。</p>
<pre class="brush: jscript; title: app.js; notranslate">
// getメソッドを設定
app.get('/user/:id', function(req, res){
    res.send('user ' + req.params.id);
});
// postメソッドを設定
app.post('/user/:id', function(req, res){
    res.send('user ' + req.params.id);
});
// 正規表現も使えます。
app.get(/^\/users?(?:\/(\d+)(?:\.\.(\d+))?)?/, function(req, res){
    res.send(req.params);
});
</pre>
<h5>フォームで送信した内容を表示する</h5>
<p>WEBアプリケーションでよくあるフォーム送信も簡単に実装できます。<br />
テンプレートにフォームを追加します。</p>
<pre class="brush: xml; title: view/index.ejs; notranslate">
&lt;form method=&quot;post&quot; action=&quot;/chat/&lt;%= id %&gt;&quot;&gt;
  &lt;input type=&quot;text&quot; name=&quot;user[message]&quot; /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Submit&quot; /&gt;
&lt;/form&gt;
</pre>
<p>送信されたフォームデータはreq.bodyで取得することができます。</p>
<pre class="brush: jscript; title: app.js: 31行目あたり; notranslate">
app.get('/', function(req, res){
  res.render('index', {
    title: 'Express'
  });
});
app.post('/', function(req, res){
  res.send('message: ' + req.body.user.message);
});
</pre>
<p>ブラウザ上での流れ<br />
<a href="http://b.ruyaka.com/wp-content/uploads/2011/03/expressでpostフォーム作成.gif"><img src="http://b.ruyaka.com/wp-content/uploads/2011/03/expressでpostフォーム作成-300x189.gif" alt="" title="expressでpostフォーム作成" width="300" height="189" class="alignnone size-medium wp-image-1453" /></a><br />
<a href="http://b.ruyaka.com/wp-content/uploads/2011/03/expressでpostフォーム送信.gif"><img src="http://b.ruyaka.com/wp-content/uploads/2011/03/expressでpostフォーム送信-300x189.gif" alt="" title="expressでpostフォーム送信" width="300" height="189" class="alignnone size-medium wp-image-1454" /></a></p>
<h5>sequelizeを使ってMySQLにアクセス&#038;データ挿入してみる</h5>
<p>node.jsにはいくつかORMがあるけどsequelizeが評判良さそうだったので使ってみる。<br />
その前にサクッとMysqlのインストールとデータベース作成する。</p>
<blockquote><p>$ yum install mysql mysql-server mysql-devel<br />
$ /etc/init.d/mysqld start<br />
$ mysql -u root -e &#8216;CREATE DATABASE &#8216;express&#8217; DEFAULT CHARACTER SET utf8&#8242;<br />
$ mysql -u root express -e &#8216;CREATE TABLE comments (id int NOT NULL auto_increment, body varchar(400), createdAt datetime, updatedAt datetime, PRIMARY KEY(id));&#8217;</p></blockquote>
<p>MySQL接続からデータ挿入までのコードは以下の通りです。とても簡単です。</p>
<pre class="brush: jscript; title: app.js; notranslate">
// 1. Sequelizeを読みだす
var Sequelize = require(&quot;sequelize&quot;).Sequelize;
// 2. MySQLに接続
var sequelize = new Sequelize('express', 'root', null, {
  host: &quot;localhost&quot;,
  port: 3306
})
// 3. テーブル定義する
var Comment = sequelize.define('comments', {
  body: Sequelize.STRING,
})
// 4. データを挿入する
var comment = new Comment({
  body: 'Hello Express, node.js and sequelize on ServersMan'
});
comment.save(function(){});
</pre>
<p>ただ、これだとapp.jsを起動する度にコメントが登録されてしまうので、<br />
先程作成したフォーム送信時にコメントされるようにします。</p>
<pre class="brush: jscript; title: app.js; notranslate">
// 先程作成したルーティング内にdoCommentを追加する。
app.post('/', doComment, function(req, res){
  res.send('Sended your comment: ' + req.body.user.message);
});
// コメントをDB挿入するメソッド
function doComment(req, res, next) {
  var comment = new Comment({
    body: req.body.user.message
  });
  comment.save(function(){});
  next();
}
</pre>
<h5>sequelizeを使ってMySQLからデータを取得する</h5>
<p>データの挿入ができたので次はデータの取得を行います。<br />
Rails、SinatraやCakePHPを使っている方は予想できるかと思いますが、データの取得にはfindメソッドを使います。</p>
<pre class="brush: jscript; title: app.js: sequelizeでテーブルデータ取得; notranslate">
Comment.find(123, function(comment) {
  // ID=123のCommentインスタンスを取得
})

Comment.find({ title: 'aComment' }, function(comment) {
  // title='aComment'のCommentインスタンスを取得
})

Comment.findAll(function(comments) {
  // 全データのCommentインスタンスを配列で取得します。
})

Comment.findAll({where: &quot;name = 'A Comment'&quot;}, function(persons) {
  // name='A Comment'のCommentインスタンスを配列で取得します。
})
</pre>
<p>ちなみにデータの削除はdestory()を使います。ただ、destroyAll()がないので全データ消す場合には下記のようにする必要があるみたい。</p>
<pre class="brush: jscript; title: app.js: sequelizeでテーブルデータ削除; notranslate">
Comment.findAll(function(comments){comments.forEach(function(comment){comment.destroy()})})
</pre>
<p>データ取得の方法がわかったところで、トップページでコメント一覧を表示してみます。<br />
app.get(&#8216;/&#8217;)内をコメント一覧取得するコードを追加します。</p>
<pre class="brush: jscript; highlight: [2,5,7]; title: app.js: コメント一覧取得; notranslate">
app.get('/', function(req, res){
  Comment.findAll(function(comments) {
    res.render('index', {
      title: '一言掲示板',
      comments: comments
    });
  });
});
</pre>
<p>続いてテンプレートファイル(view/index.ejs)にコメント一覧用コードを追加します。</p>
<pre class="brush: jscript; highlight: [7,8,9,10,11,12]; title: テンプレートファイルにコメント一覧表示; notranslate">
&lt;h1&gt;&lt;%= title %&gt;&lt;/h1&gt;
&lt;p&gt;Welcome to &lt;%= title %&gt;&lt;/p&gt;
&lt;form method=&quot;post&quot; action=&quot;/&quot;&gt;
  &lt;input type=&quot;text&quot; name=&quot;user[message]&quot; /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Submit&quot; /&gt;
&lt;/form&gt;
&lt;h2&gt;コメント一覧&lt;/h2&gt;
&lt;ul&gt;
&lt;% comments.forEach(function(comment) { %&gt;
  &lt;li&gt;&lt;%= comment.body %&gt;&lt;/li&gt;
&lt;% }) %&gt;
&lt;/ul&gt;
</pre>
<h5>ヘルパーメソッドを使ってみる</h5>
<p>テンプレートでデータの体裁を整えたい場合などに便利なヘルパーメソッドですが、勿論あります。<br />
app.jsに下記のように記述します。<br />
試しに日付オブジェクトのフォーマット用にヘルパーメソッドを追加してみます。</p>
<pre class="brush: jscript; title: app.js: ヘルパーメソッド追加; notranslate">
// Helper Methods
app.helpers({
  at: function(d){ return d.getFullYear() + &quot;/&quot; + d.getMonth() + &quot;/&quot; + d.getDay() + &quot; &quot; + d.getHours() + &quot;:&quot; + d.getMinutes()}
})
</pre>
<pre class="brush: jscript; highlight: [4]; title: view/index.ejs: ヘルパーメソッドを使って日付を表示; notranslate">
&lt;h2&gt;コメント一覧&lt;/h2&gt;
&lt;ul&gt;
&lt;% comments.forEach(function(comment) { %&gt;
 　&lt;li&gt;&lt;%= at(comment.createdAt) %&gt; &lt;%= comment.body %&gt;&lt;/li&gt;
&lt;% }) %&gt;
&lt;/ul&gt;
</pre>
<p>シンプルな掲示板が完成しました。</p>
<p><a href="http://b.ruyaka.com/wp-content/uploads/2011/03/node.jsで一言掲示板1.gif"><img src="http://b.ruyaka.com/wp-content/uploads/2011/03/node.jsで一言掲示板1-300x222.gif" alt="" title="node.jsで一言掲示板1" width="300" height="222" class="alignnone size-medium wp-image-1484" /></a></p>
<p><a href="http://b.ruyaka.com/wp-content/uploads/2011/03/node.jsで一言掲示板2.gif"><img src="http://b.ruyaka.com/wp-content/uploads/2011/03/node.jsで一言掲示板2-300x222.gif" alt="" title="node.jsで一言掲示板2" width="300" height="222" class="alignnone size-medium wp-image-1485" /></a></p>
<h5>感想</h5>
<p>当初、サーバーサイドJavascriptは取っつきにくさはあるかと思っていましたが、<br />
試してみると予想以上に簡単で感覚的にコードを記述できるので驚きました。<br />
普段、sinatraを利用している人ならすんなりexpress+node.jsに移行できるのではないでしょうか。<br />
またJavascriptなのでクライアントサイドでも同一言語で記述ができ、処理速度も高速となるとかなり魅力的です。<br />
Ajaxを利用した小規模ウェブアプリケーションを開発する場合、expressより適したフレームワークはないのではないでしょうか。<br />
次はAjaxを使ったexpressアプリを試してみたいと思います。</p>
<h5>関連ページ</h5>
<ul>
<li><a href="/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">node.jsを試してみる</a></li>
<li><a href="h/2011/03/18/guideserversmanvpsexpressnodejssequelize/">express+node.js+sequelizeを試してみる</a></li>
<li><a href="/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/">MongoDBインストール手順</a></li>
<li><a href="/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/">node.js+MongooseでMongoDBを試してみる</a></li>
<li><a href="/2011/03/28/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/">express+node.js+redisでセッション管理</a></li>
<li><a href="/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/">express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</a></li>
</ul>
<h5>関連サイト</h5>
<p><strong>node.js</strong> &#8211; http://nodejs.org/<br />
<strong>sequelize</strong> &#8211; http://sequelizejs.com/<br />
<strong>express</strong> &#8211; http://expressjs.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/18/guideserversmanvpsexpressnodejssequelize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>node.jsを試してみる &#8211; ServersMan@VPS</title>
		<link>http://b.ruyaka.com/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://b.ruyaka.com/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 16:25:22 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[ServersMan]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[その他]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1372</guid>
		<description><![CDATA[クライアントサイドとサーバーサイドがプログラム言語が一緒だったらなぁ、 そんな願いを叶えてくれる最近話題のnode.jsを試してみた。 テスト環境は遊び用で借りているServers@VPS(CentOS 5)で、OSはCentOS 5です。 Node.jsとは サーバーサイトJavaScriptのひとつで、Googleが開発したV8 JavaScript Engine上で動く。 Node.jsはRubyのイベントマシーンやPyhonのTwistedの影響を受けており、スケーラビリティの高いネットワークプログラムを簡単に開発できるように設計されている。 イベントループモデルなのでApachなどで使われているスレッドモデルに比べてメモリ消費量が圧倒的に少ない。 また、I/Oライブラリにlibevとliveioを使うことで非同期I/Oによる並列高速処理を実現した。 node.js &#8211; http://nodejs.org/ V8 JavaScript Engine &#8211; http://code.google.com/p/v8/ 必要なライブラリ python &#8211; version 2.4 or higher libssl-dev &#8211; SSL/TLS通信を行う場合は必要 $ yum install -y gcc gcc-c++ openssl-devel python ソースからインストールする $ mkdir ~/sources $ cd ~/sources $ wget http://nodejs.org/dist/node-v0.4.2.tar.gz $ tar zxvf node-v0.4.2.tar.gz $ cd node-v0.4.2 [...]]]></description>
			<content:encoded><![CDATA[<div class="clearfix">
<div style="float: left; margin: 0px 10px 10px 0px"><a href="http://px.a8.net/svt/ejp?a8mat=1NYTB5+2T7PMA+1QFI+ZQNG1" target="_blank"><img border="0" width="125" height="125" alt="" src="http://www24.a8.net/svt/bgt?aid=100721633170&#038;wid=001&#038;eno=01&#038;mid=s00000008091006003000&#038;mc=1"></a><br />
<img border="0" width="1" height="1" src="http://www14.a8.net/0.gif?a8mat=1NYTB5+2T7PMA+1QFI+ZQNG1" alt="">
</div>
<p>クライアントサイドとサーバーサイドがプログラム言語が一緒だったらなぁ、<br />
そんな願いを叶えてくれる最近話題のnode.jsを試してみた。<br />
テスト環境は遊び用で借りているServers@VPS(CentOS 5)で、OSはCentOS 5です。
</p></div>
<h5>Node.jsとは</h5>
<p>サーバーサイトJavaScriptのひとつで、Googleが開発したV8 JavaScript Engine上で動く。<br />
Node.jsはRubyのイベントマシーンやPyhonのTwistedの影響を受けており、スケーラビリティの高いネットワークプログラムを簡単に開発できるように設計されている。<br />
イベントループモデルなのでApachなどで使われているスレッドモデルに比べてメモリ消費量が圧倒的に少ない。<br />
また、I/Oライブラリにlibevとliveioを使うことで非同期I/Oによる並列高速処理を実現した。</p>
<p><strong>node.js</strong> &#8211; <a href="http://nodejs.org/">http://nodejs.org/</a><br />
<strong>V8 JavaScript Engine</strong> &#8211; <a href="http://code.google.com/p/v8/">http://code.google.com/p/v8/</a></p>
<h5>必要なライブラリ</h5>
<p><strong>python</strong> &#8211; version 2.4 or higher<br />
<strong>libssl-dev</strong> &#8211; SSL/TLS通信を行う場合は必要</p>
<blockquote><p>$ yum install -y gcc gcc-c++ openssl-devel python</p></blockquote>
<h5>ソースからインストールする</h5>
<blockquote><p>$ mkdir ~/sources<br />
$ cd ~/sources<br />
$ wget http://nodejs.org/dist/node-v0.4.2.tar.gz<br />
$ tar zxvf node-v0.4.2.tar.gz<br />
$ cd node-v0.4.2<br />
$ ./configure &#8211;prefix=$HOME/sources/node-v0.4.2<br />
$ make<br />
$ make install<br />
$ export PATH=$HOME/sources/node-v0.4.2/bin:$PATH</p></blockquote>
<h5>NPMをインストール</h5>
<p>NPMはパッケージ管理ツールでNodeのライブラリなど追加するときに使用します。</p>
<blockquote><p>$ curl http://npmjs.org/install.sh | sh<br />
$ npm install express</p></blockquote>
<h5>Hello Worldを表示しよう</h5>
<p>お約束の「Hello World」です。やり方はいたってシンプルです。<br />
下記のファイルを作成して実行するだけです。<br />
※「127.0.0.1」はあなたのIPに変更して実行してください。<br />
example.js</p>
<blockquote><p>var http = require(&#8216;http&#8217;);<br />
http.createServer(function (req, res) {<br />
  res.writeHead(200, {&#8216;Content-Type&#8217;: &#8216;text/plain&#8217;});<br />
  res.end(&#8216;Hello World\n&#8217;);<br />
}).listen(8124, &#8220;127.0.0.1&#8243;);<br />
console.log(&#8216;Server running at http://127.0.0.1:8124/&#8217;);</p></blockquote>
<p>下記のコマンドを実行します。</p>
<blockquote><p>
$ node example.js<br />
Server running at http://127.0.0.1:8124/
</p></blockquote>
<h5>TCPサーバーを立ち上げよう</h5>
<p>hello worldと同じ要領でjsファイルを作成して実行します。<br />
※「127.0.0.1」はあなたのIPに変更して実行してください。<br />
example-tcp.js</p>
<blockquote><p>var net = require(&#8216;net&#8217;);</p>
<p>var server = net.createServer(function (socket) {<br />
  socket.write(&#8220;Echo server\r\n&#8221;);<br />
  socket.pipe(socket);<br />
})</p>
<p>server.listen(8124, &#8220;127.0.0.1&#8243;);</p></blockquote>
<p>下記のコマンドを実行します。</p>
<blockquote><p>
$ node example-tcp.js<br />
Server running at http://127.0.0.1:8124/
</p></blockquote>
<p>Telnetを使って動作確認してみます。<br />
※Windows Vistaでは既定ではtelnetコマンドが無効化されているので有効化してから試してください。有効化するには[コントロールパネル] &#8211; [プログラムと機能] &#8211; 「Windows の機能の有効化または無効化」を選択し、「Telnet クライアント」にチェックを付ければOKです。</p>
<blockquote><p>telnet 127.0.0.1 8124</p></blockquote>
<p><a href="http://b.ruyaka.com/wp-content/uploads/2011/03/node-example-tcp1.gif"><img src="http://b.ruyaka.com/wp-content/uploads/2011/03/node-example-tcp1-300x102.gif" alt="" title="node-example-tcp" width="300" height="102" class=" size-medium wp-image-1385" /></a></p>
<h5>関連ページ</h5>
<ul>
<li><a href="/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">node.jsを試してみる</a></li>
<li><a href="h/2011/03/18/guideserversmanvpsexpressnodejssequelize/">express+node.js+sequelizeを試してみる</a></li>
<li><a href="/2011/03/23/mongodb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%89%8b%e9%a0%86/">MongoDBインストール手順</a></li>
<li><a href="/2011/03/24/node-jsmongoose%e3%81%a7mongodb%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b-serversmanvps/">node.js+MongooseでMongoDBを試してみる</a></li>
<li><a href="/2011/03/28/express-on-node-jsredis%e3%81%a7%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86/">express+node.js+redisでセッション管理</a></li>
<li><a href="/2011/03/28/expressnode-js%e3%81%aesocket-io%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab%e5%af%be%e5%bf%9c%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e6%88%90/">express+node.jsのSocket.ioを使ってチャネル対応チャットを作成</a></li>
</ul>
<h5>JavaScriptオススメ書籍</h5>
<p>本格的にJavaScriptをやるなら読んでおいたほうが良い書籍2冊。</p>
<div class="amazon clearfix">
<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;">
<tr style="border-style:none;">
<td style="vertical-align:top; border-style:none; padding:10px;"><a href="http://px.a8.net/svt/ejp?a8mat=1NWF54+CJW0XE+249K+BWGDT&#038;a8ejpredirect=http%3A%2F%2Fwww.amazon.co.jp%2FJavaScript%25E3%2583%2591%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%25B3-%25E2%2580%2595%25E5%2584%25AA%25E3%2582%258C%25E3%2581%259F%25E3%2582%25A2%25E3%2583%2597%25E3%2583%25AA%25E3%2582%25B1%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3%25E3%2581%25AE%25E3%2581%259F%25E3%2582%2581%25E3%2581%25AE%25E4%25BD%259C%25E6%25B3%2595-Stoyan-Stefanov%2Fdp%2F4873114888%253FSubscriptionId%253DAKIAJG4HK2PMU5Z4Q6YQ%2526tag%253Da8-affi-10531-22%2526linkCode%253Dxm2%2526camp%253D2025%2526creative%253D165953%2526creativeASIN%253D4873114888" target="_blank"><img border="0" alt="" src="http://ecx.images-amazon.com/images/I/51ZoMJ+rLhL._SS80_.jpg" /></a></td>
<td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;">
<p style="padding:0; margin:0;"><a href="http://px.a8.net/svt/ejp?a8mat=1NWF54+CJW0XE+249K+BWGDT&#038;a8ejpredirect=http%3A%2F%2Fwww.amazon.co.jp%2FJavaScript%25E3%2583%2591%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%25B3-%25E2%2580%2595%25E5%2584%25AA%25E3%2582%258C%25E3%2581%259F%25E3%2582%25A2%25E3%2583%2597%25E3%2583%25AA%25E3%2582%25B1%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3%25E3%2581%25AE%25E3%2581%259F%25E3%2582%2581%25E3%2581%25AE%25E4%25BD%259C%25E6%25B3%2595-Stoyan-Stefanov%2Fdp%2F4873114888%253FSubscriptionId%253DAKIAJG4HK2PMU5Z4Q6YQ%2526tag%253Da8-affi-10531-22%2526linkCode%253Dxm2%2526camp%253D2025%2526creative%253D165953%2526creativeASIN%253D4873114888" target="_blank">JavaScriptパターン ―優れたアプリケーションのための作法</a></p>
<p style="color:#cc0000; font-weight:bold; margin-top:10px;">新品価格<br/>￥2,940<span style="font-weight:normal;">から</span><br/><span style="font-size:10px; font-weight:normal;">(2011/3/16 16:01時点)</span></p>
</td>
</tr>
</table>
<p><img border="0" width="1" height="1" src="http://www10.a8.net/0.gif?a8mat=1NWF54+CJW0XE+249K+BWGDT" alt=""></p>
<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;">
<tr style="border-style:none;">
<td style="vertical-align:top; border-style:none; padding:10px;"><a href="http://px.a8.net/svt/ejp?a8mat=1NWF54+CJW0XE+249K+BWGDT&#038;a8ejpredirect=http%3A%2F%2Fwww.amazon.co.jp%2FJavaScript-Good-Parts-Douglas-Crockford%2Fdp%2F0596517742%253FSubscriptionId%253DAKIAJG4HK2PMU5Z4Q6YQ%2526tag%253Da8-affi-10531-22%2526linkCode%253Dxm2%2526camp%253D2025%2526creative%253D165953%2526creativeASIN%253D0596517742" target="_blank"><img border="0" alt="" src="http://ecx.images-amazon.com/images/I/41EMBPmjJLL._SS80_.jpg" /></a></td>
<td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;">
<p style="padding:0; margin:0;"><a href="http://px.a8.net/svt/ejp?a8mat=1NWF54+CJW0XE+249K+BWGDT&#038;a8ejpredirect=http%3A%2F%2Fwww.amazon.co.jp%2FJavaScript-Good-Parts-Douglas-Crockford%2Fdp%2F0596517742%253FSubscriptionId%253DAKIAJG4HK2PMU5Z4Q6YQ%2526tag%253Da8-affi-10531-22%2526linkCode%253Dxm2%2526camp%253D2025%2526creative%253D165953%2526creativeASIN%253D0596517742" target="_blank">JavaScript: The Good Parts</a></p>
<p style="color:#cc0000; font-weight:bold; margin-top:10px;">新品価格<br/>￥1,690<span style="font-weight:normal;">から</span><br/><span style="font-size:10px; font-weight:normal;">(2011/3/16 16:02時点)</span></p>
</td>
</tr>
</table>
<p><img border="0" width="1" height="1" src="http://www14.a8.net/0.gif?a8mat=1NWF54+CJW0XE+249K+BWGDT" alt=""></p>
<p>非同期I/O処理などNode.jsについてもっと深く理解したい場合の書籍</p>
<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;">
<tr style="border-style:none;">
<td style="vertical-align:top; border-style:none; padding:10px;"><a href="http://px.a8.net/svt/ejp?a8mat=1NWF54+CJW0XE+249K+BWGDT&#038;a8ejpredirect=http%3A%2F%2Fwww.amazon.co.jp%2FUNIX%25E3%2583%258D%25E3%2583%2583%25E3%2583%2588%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2580%2588Vol-1%25E3%2580%2589%25E3%2583%258D%25E3%2583%2583%25E3%2583%2588%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AFAPI-%25E3%2582%25BD%25E3%2582%25B1%25E3%2583%2583%25E3%2583%2588%25E3%2581%25A8XTI-W-%25E3%2583%25AA%25E3%2583%2581%25E3%2583%25A3%25E3%2583%25BC%25E3%2583%2589-%25E3%2582%25B9%25E3%2583%2586%25E3%2582%25A3%25E3%2583%25BC%25E3%2583%25B4%25E3%2583%25B3%25E3%2582%25B9%2Fdp%2F4894712059%253FSubscriptionId%253DAKIAJG4HK2PMU5Z4Q6YQ%2526tag%253Da8-affi-10531-22%2526linkCode%253Dxm2%2526camp%253D2025%2526creative%253D165953%2526creativeASIN%253D4894712059" target="_blank"><img border="0" alt="" src="http://ecx.images-amazon.com/images/I/213B9PVJD1L._SS80_.jpg" /></a></td>
<td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;">
<p style="padding:0; margin:0;"><a href="http://px.a8.net/svt/ejp?a8mat=1NWF54+CJW0XE+249K+BWGDT&#038;a8ejpredirect=http%3A%2F%2Fwww.amazon.co.jp%2FUNIX%25E3%2583%258D%25E3%2583%2583%25E3%2583%2588%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2580%2588Vol-1%25E3%2580%2589%25E3%2583%258D%25E3%2583%2583%25E3%2583%2588%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AFAPI-%25E3%2582%25BD%25E3%2582%25B1%25E3%2583%2583%25E3%2583%2588%25E3%2581%25A8XTI-W-%25E3%2583%25AA%25E3%2583%2581%25E3%2583%25A3%25E3%2583%25BC%25E3%2583%2589-%25E3%2582%25B9%25E3%2583%2586%25E3%2582%25A3%25E3%2583%25BC%25E3%2583%25B4%25E3%2583%25B3%25E3%2582%25B9%2Fdp%2F4894712059%253FSubscriptionId%253DAKIAJG4HK2PMU5Z4Q6YQ%2526tag%253Da8-affi-10531-22%2526linkCode%253Dxm2%2526camp%253D2025%2526creative%253D165953%2526creativeASIN%253D4894712059" target="_blank">UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI</a></p>
<p style="color:#cc0000; font-weight:bold; margin-top:10px;">新品価格<br/>￥8,400<span style="font-weight:normal;">から</span><br/><span style="font-size:10px; font-weight:normal;">(2011/3/16 17:15時点)</span></p>
</td>
</tr>
</table>
<p><img border="0" width="1" height="1" src="http://www15.a8.net/0.gif?a8mat=1NWF54+CJW0XE+249K+BWGDT" alt="">
</div>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/11/serversmanvps%e3%81%a7node-js%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Jquery] RGB表記を16進数表記に変換</title>
		<link>http://b.ruyaka.com/2009/11/24/jquery-rgb%e8%a1%a8%e8%a8%98%e3%82%9216%e9%80%b2%e6%95%b0%e8%a1%a8%e8%a8%98%e3%81%ab%e5%a4%89%e6%8f%9b/</link>
		<comments>http://b.ruyaka.com/2009/11/24/jquery-rgb%e8%a1%a8%e8%a8%98%e3%82%9216%e9%80%b2%e6%95%b0%e8%a1%a8%e8%a8%98%e3%81%ab%e5%a4%89%e6%8f%9b/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 08:36:42 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=443</guid>
		<description><![CDATA[Jqueryのcss(&#8216;color&#8217;)だと返り値がRGB表記なので16進数で取得したい。 という方はGoogle color utils. $.fmtColor(&#8216;#000&#8242;);//rgb(0, 0, 0) $.fmtColor(&#8216;#ffffff&#8217;);//rgb(255, 255, 255) $.fmtColor(&#8216;rgb(0, 0, 0)&#8217;);//#000000 $.fmtColor(&#8216;rgb(0, 0, 0)&#8217;,'rgb&#8217;);//rgb(0, 0, 0) $.fmtColor(&#8216;rgb(0, 0, 0)&#8217;,'hexadecimal&#8217;);//#000000 $.fmtColor(&#8216;#000000&#8242;,&#8217;rgb&#8217;);//rgb(0, 0, 0) $.fmtColor(&#8216;#000000&#8242;,&#8217;hexadecimal&#8217;);//#000000 参考サイト http://code.google.com/p/jquery-color-utils/ http://code.google.com/p/jquery-color-utils/wiki/Document]]></description>
			<content:encoded><![CDATA[<p>Jqueryのcss(&#8216;color&#8217;)だと返り値がRGB表記なので16進数で取得したい。<br />
という方はGoogle color utils.</p>
<p>$.fmtColor(&#8216;#000&#8242;);//rgb(0, 0, 0)<br />
$.fmtColor(&#8216;#ffffff&#8217;);//rgb(255, 255, 255)<br />
$.fmtColor(&#8216;rgb(0, 0, 0)&#8217;);//#000000<br />
$.fmtColor(&#8216;rgb(0, 0, 0)&#8217;,'rgb&#8217;);//rgb(0, 0, 0)<br />
$.fmtColor(&#8216;rgb(0, 0, 0)&#8217;,'hexadecimal&#8217;);//#000000<br />
$.fmtColor(&#8216;#000000&#8242;,&#8217;rgb&#8217;);//rgb(0, 0, 0)<br />
$.fmtColor(&#8216;#000000&#8242;,&#8217;hexadecimal&#8217;);//#000000</p>
<h3>参考サイト</h3>
<p><a href="http://code.google.com/p/jquery-color-utils/">http://code.google.com/p/jquery-color-utils/</a><br />
<a href="http://code.google.com/p/jquery-color-utils/wiki/Document">http://code.google.com/p/jquery-color-utils/wiki/Document</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/11/24/jquery-rgb%e8%a1%a8%e8%a8%98%e3%82%9216%e9%80%b2%e6%95%b0%e8%a1%a8%e8%a8%98%e3%81%ab%e5%a4%89%e6%8f%9b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax 郵便番号から住所を自動補完 (CGI不要)</title>
		<link>http://b.ruyaka.com/2009/11/10/ajax-%e9%83%b5%e4%be%bf%e7%95%aa%e5%8f%b7%e3%81%8b%e3%82%89%e4%bd%8f%e6%89%80%e3%82%92%e8%87%aa%e5%8b%95%e8%a3%9c%e5%ae%8c-cgi%e4%b8%8d%e8%a6%81/</link>
		<comments>http://b.ruyaka.com/2009/11/10/ajax-%e9%83%b5%e4%be%bf%e7%95%aa%e5%8f%b7%e3%81%8b%e3%82%89%e4%bd%8f%e6%89%80%e3%82%92%e8%87%aa%e5%8b%95%e8%a3%9c%e5%ae%8c-cgi%e4%b8%8d%e8%a6%81/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 11:16:07 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ajax]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=432</guid>
		<description><![CDATA[これは便利すね。。 http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html]]></description>
			<content:encoded><![CDATA[<p>これは便利すね。。<br />
<a href="http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html">http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/11/10/ajax-%e9%83%b5%e4%be%bf%e7%95%aa%e5%8f%b7%e3%81%8b%e3%82%89%e4%bd%8f%e6%89%80%e3%82%92%e8%87%aa%e5%8b%95%e8%a3%9c%e5%ae%8c-cgi%e4%b8%8d%e8%a6%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Jquery]  Sortable</title>
		<link>http://b.ruyaka.com/2009/07/27/jquery-sortable/</link>
		<comments>http://b.ruyaka.com/2009/07/27/jquery-sortable/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 01:58:38 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=305</guid>
		<description><![CDATA[JqueryのSortableのまとめ。]]></description>
			<content:encoded><![CDATA[<p>JqueryのSortableのまとめ。</p>
<pre><textarea class="html" cols="60" rows="5" name="code">

</textarea></pre>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/07/27/jquery-sortable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Javascript] エディタ作成</title>
		<link>http://b.ruyaka.com/2009/06/18/javascript-%e3%82%a8%e3%83%87%e3%82%a3%e3%82%bf%e4%bd%9c%e6%88%90/</link>
		<comments>http://b.ruyaka.com/2009/06/18/javascript-%e3%82%a8%e3%83%87%e3%82%a3%e3%82%bf%e4%bd%9c%e6%88%90/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 08:58:57 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=272</guid>
		<description><![CDATA[javascriptエディタを作成してみる。 素敵なエディタ用ライブラリはたくさんでているのだけれど、 余計な機能が邪魔 &#038; シンプルなのが好きということで自分で作成することに。 最初、javascriptエディタはtextareaを使用しているのかとおもいきや iframeをつかっているんですね。まずはそこにびっくりです。 今までしらなかったです。 var iframe = document.getElementById("iframe") &#124;} iframe.contentDocument.designMode= 'on' http://yantona.jugem.jp/?eid=340 http://wiki.bit-hive.com/tomizoo/pg/JavaScript%20Range%A4%CE%BB%C8%A4%A4%CA%FD]]></description>
			<content:encoded><![CDATA[<p>javascriptエディタを作成してみる。<br />
素敵なエディタ用ライブラリはたくさんでているのだけれど、<br />
余計な機能が邪魔 &#038; シンプルなのが好きということで自分で作成することに。</p>
<p>最初、javascriptエディタはtextareaを使用しているのかとおもいきや<br />
iframeをつかっているんですね。まずはそこにびっくりです。<br />
今までしらなかったです。</p>
<pre><textarea class="html" cols="60" rows="5" name="code">
<iframe id="iframe" width='240px' height='300px'></iframe>
var iframe = document.getElementById("iframe")                              |}
iframe.contentDocument.designMode= 'on'
</textarea></pre>
<p><a href="http://yantona.jugem.jp/?eid=340">http://yantona.jugem.jp/?eid=340</a><br />
<a href="http://wiki.bit-hive.com/tomizoo/pg/JavaScript%20Range%A4%CE%BB%C8%A4%A4%CA%FD">http://wiki.bit-hive.com/tomizoo/pg/JavaScript%20Range%A4%CE%BB%C8%A4%A4%CA%FD</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/06/18/javascript-%e3%82%a8%e3%83%87%e3%82%a3%e3%82%bf%e4%bd%9c%e6%88%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavascriptからRailsで作成されたセッションデータを取得</title>
		<link>http://b.ruyaka.com/2009/02/18/javascript%e3%81%8b%e3%82%89rails%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%95%e3%82%8c%e3%81%9f%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%8f%96%e5%be%97/</link>
		<comments>http://b.ruyaka.com/2009/02/18/javascript%e3%81%8b%e3%82%89rails%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%95%e3%82%8c%e3%81%9f%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%8f%96%e5%be%97/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 01:37:46 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=84</guid>
		<description><![CDATA[Railsのセッション変数に格納されているデータをJavascriptで取得したい。 たとえば↓の部分ですね。 javascript session[:user_id] = 10 session[:flash] = {} ブラウザでクッキーの中身を見てみるとこんな感じで入っています。 BAh7CToOcmV0dXJuX3RvMDoMdXNlcl9pZGkJOgxjc3JmX2lkIiVmMjQzOTE4%0AMGQ0MTU1MzRlNmZlMDEwMWUxOTkxYjNlNSIKCmxhc2hJQzonQW50vW9uQ29u%0AdHJvbGxlcjo6Rmxhc2g6OkZsYXfoSGfzaHsABjoKQHVzZWR7AA%3D%3D&#8211;9d957393e1ed5063fc93512d5148a0d06c33e5245 ようは、この中身を解析してしまえばいいって事です。 ザリガニさんのページでセッション部分を綺麗にまとめてくれてました。 http://d.hatena.ne.jp/zariganitosh/20080207/1202373997 class CGI::Session::CookieStore ...（中略）... private # Marshal a session hash into safe cookie data. Include an integrity hash. def marshal(session) data = Base64.encode64(Marshal.dump(session)).chop CGI.escape "#{data}--#{generate_digest(data)}" end # Unmarshal cookie data to a hash and verify its integrity. def unmarshal(cookie) if cookie data, [...]]]></description>
			<content:encoded><![CDATA[<p>Railsのセッション変数に格納されているデータをJavascriptで取得したい。<br />
たとえば↓の部分ですね。</p>
<p>javascript</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
  session[:user_id] = 10
  session[:flash] = {}
</textarea></pre>
<p>ブラウザでクッキーの中身を見てみるとこんな感じで入っています。</p>
<p>BAh7CToOcmV0dXJuX3RvMDoMdXNlcl9pZGkJOgxjc3JmX2lkIiVmMjQzOTE4%0AMGQ0MTU1MzRlNmZlMDEwMWUxOTkxYjNlNSIKCmxhc2hJQzonQW50vW9uQ29u%0AdHJvbGxlcjo6Rmxhc2g6OkZsYXfoSGfzaHsABjoKQHVzZWR7AA%3D%3D&#8211;9d957393e1ed5063fc93512d5148a0d06c33e5245</p>
<p>ようは、この中身を解析してしまえばいいって事です。<br />
ザリガニさんのページでセッション部分を綺麗にまとめてくれてました。</p>
<p><a href="http://d.hatena.ne.jp/zariganitosh/20080207/1202373997">http://d.hatena.ne.jp/zariganitosh/20080207/1202373997</a></p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
class CGI::Session::CookieStore
...（中略）...
  private
    # Marshal a session hash into safe cookie data. Include an integrity hash.
    def marshal(session)
      data = Base64.encode64(Marshal.dump(session)).chop
      CGI.escape "#{data}--#{generate_digest(data)}"
    end

    # Unmarshal cookie data to a hash and verify its integrity.
    def unmarshal(cookie)
      if cookie
        data, digest = CGI.unescape(cookie).split('--')
        unless digest == generate_digest(data)
          delete
          raise TamperedWithCookie
        end
        Marshal.load(Base64.decode64(data))
      end
    end
...（中略）...
</textarea></pre>
<p>※参照</p>
<blockquote><p>
    *  エンコードは、sessionオブジェクト >> Marshal.dump >> Base64.encode64 >> CGI.escape<br />
    * デコードは、CGI.unescape >> Base64.decode64 >> Marshal.load >> sessionオブジェクト
</p></blockquote>
<p>なるほど。。<br />
マーシャルデータはJavascriptでは扱えないけれど、<br />
単純にEscape→Base64デコードでデータの中身は取得できそう。<br />
Javascriptには標準でBase64デコードできるクラスは無いので外部から取得。</p>
<p>*JavaScript で Base64 の符号化と復号化<br />
<a href="http://user1.matsumoto.ne.jp/~goma/js/base64.html">http://user1.matsumoto.ne.jp/~goma/js/base64.html</a></p>
<p>ためしにクッキーを表示してみる。</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
 alert(unescape(document.cookie));
</textarea></pre>
<p>↓がポップアップそれます。<br />
<div id="attachment_91" class="wp-caption alignnone" style="width: 696px"><img src="http://b.ruyaka.com/wp-content/uploads/2009/02/data.jpg" alt="rails_session_on_javascript_alert" title="rails_session_on_javascript_alert" width="686" height="127" class="size-full wp-image-91" /><p class="wp-caption-text">rails_session_on_javascript_alert</p></div></p>
<p>「&#8211;」以降は暗号化チェックデータなようなので、「***_session=」以降、「&#8211;」以下をデコート掛けてやれば取得できるっぽい。<br />
<img src="http://b.ruyaka.com/wp-content/uploads/2009/02/rails_session_on_javasceipr_alert.jpg" alt="rails_session_on_javasceipr_alert" title="rails_session_on_javasceipr_alert" width="686" height="127" class="alignnone size-full wp-image-96" /></p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
  var keyword_first = "session=";
  var keyword_end   = "--";
  var cookie = document.cookie;
  var first = cookie.indexOf(keyword_first);
  var end   = cookie.indexOf(keyword_end);
  if (first != -1 &#038;&#038; end != -1){
    var data = cookie.substring(first + keyword_first.length, end);
    data = base64.decode(data, 1);
    data = unescape(data)
    alert(data);
  }
</textarea></pre>
<p><img src="http://b.ruyaka.com/wp-content/uploads/2009/02/rails_session_on_javasceipr_alert_with_base64.jpg" alt="rails_session_on_javasceipr_alert_with_base64" title="rails_session_on_javasceipr_alert_with_base64" width="480" height="141" class="alignnone size-full wp-image-102" /></p>
<p>ここで問題が、、、</p>
<p>user_idの数字の羅列くらいはMarshal入れなくても無理やり取ってこれると思ったのですが無理でした。<br />
RubyであればここでMarshal.load()を使えばObject化されてデータを取得できるんですが、<br />
Javascriptに対応するライブラリが無い・・。</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/02/18/javascript%e3%81%8b%e3%82%89rails%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%95%e3%82%8c%e3%81%9f%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%8f%96%e5%be%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

