<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6187687950281822158</id><updated>2011-11-28T08:44:23.796+09:00</updated><category term='ruby'/><category term='disaster NGO volunteer socialnetwork'/><category term='Redhat'/><category term='ruby on rails'/><category term='Erlang tips Linux'/><category term='tips'/><category term='friendfeed'/><category term='Linux'/><category term='tips linux deployment'/><category term='security'/><category term='web service'/><category term='Erlang test'/><title type='text'>kgbu//EN</title><subtitle type='html'>yet another programmer made-in-Japan.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-4739615671030047415</id><published>2011-05-18T13:43:00.004+09:00</published><updated>2011-05-18T14:09:29.737+09:00</updated><title type='text'>An anatomy of FUMBARO Japan project : why I'm watching</title><content type='html'>"FUMBARO Japan" project is not the only one.&lt;br /&gt;There are so many NGO, NPO, volunteer groups. Of course, Japanese goverment and each public bodies doing best. And, as an Japanese, I thank for so much help from so many countries on the earthquakes and nuclear-plant acceident.&lt;br /&gt;&lt;br /&gt;The reason why I'm following FUMBARO project is,&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It concentrates in matching between needs and relief goods. Out-sourcing logistics to Amazon. This strategy keeps away from bottle-neck problem.&lt;/li&gt;&lt;li&gt;It does not wait for request. It does search for request on foot. (Network is not available there)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Find out key-person from disaster-stricken area. Then ask him/her to be a network-node of the project. Now, FUMBARO project has over 200 nodes, and that number is going up.&lt;/li&gt;&lt;li&gt;Via network nodes in disaster-stricken area, the project detecting changes of needs. Used to be, food is the first priority. Now, victims needs skills to build up their new town. The project began new plans to support them to get license to drive some heavy machinery.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;For some people other than Japanese, it may seem ordinary NGO. But this style is very new and eccentric as a Japanese NGO. So, I'm very interested. Also I'm very worried about its success.&lt;br /&gt;&lt;br /&gt;FUMBRO Japan project : http://fumbaro.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-4739615671030047415?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/4739615671030047415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2011/05/anatomy-of-fumbaro-japan-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/4739615671030047415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/4739615671030047415'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2011/05/anatomy-of-fumbaro-japan-project.html' title='An anatomy of FUMBARO Japan project : why I&apos;m watching'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-7549340730224481408</id><published>2011-05-18T12:59:00.003+09:00</published><updated>2011-05-18T13:13:37.647+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='disaster NGO volunteer socialnetwork'/><title type='text'>FUMBARO Japan project</title><content type='html'>Recently, I'm spending so many hours in Twitter.&lt;br /&gt;There, "FUMBARO Japan" (Never say die Japan!) project &lt;a href="http://fumbaro.org/"&gt;http://fumbaro.org/&lt;/a&gt;  is going on.&lt;br /&gt;&lt;br /&gt;The  project covers "needs vs help matching" in recovery process from that  earthquakes and following nuclear-plant accident.&lt;br /&gt;&lt;br /&gt;Usually, this function  is covered by the Japanese goverment and local public body. But in this  disaster, some of local public body itself were severely damaged. So,  thousand of people are still no-food, no-tapwater, no-electric power,  no-home (some are gathering at relations home).&lt;br /&gt;Many  NGO, NPO, and volunteer groups are busy helping victims. But, still  "needs research on-foot" is not completed yet. The "Fumbaro Japan"  project covers this point.&lt;br /&gt;As  long as you can see on TV, and internet, most of striken areas are  going back to "NORMAL". But, still there are so many people waiting help  without network connection.&lt;br /&gt;&lt;br /&gt;If you have any idea to help them, please contact to @saijotakeo on Twitter. Or, look at &lt;a href="http://www.facebook.com/fumbaro.org"&gt;http://www.facebook.com/fumbaro.org&lt;/a&gt; on Facebook.&lt;br /&gt;&lt;br /&gt;Further, if  you can read some Japanese, you can send goods based on "Wish list" on  Amazon.co.jp .  "Fumbaro Japan project" is working on wish-list making from their  "needs research"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-7549340730224481408?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/7549340730224481408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2011/05/fumbaro-japan-project.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/7549340730224481408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/7549340730224481408'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2011/05/fumbaro-japan-project.html' title='FUMBARO Japan project'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-103077277486491421</id><published>2010-06-15T11:14:00.002+09:00</published><updated>2010-06-15T11:17:51.120+09:00</updated><title type='text'>Cannot click OK button in Google's OAuthAuthorizeToken page using mobile phone</title><content type='html'>I'm trying to make a Buzz viewer for Japanese mobile (not so smart) phones, which cannot execute Javascripts.&lt;br /&gt;&lt;br /&gt;And I'm in trouble to navigate OAuth process.&lt;br /&gt;&lt;br /&gt;To get authorization, first, you need to go&lt;br /&gt;https://www.google.com/buzz/api/auth/OAuthAuthorizeToken&lt;br /&gt;with parameters below (as documented in OAuth API/Buzz API docs).&lt;br /&gt;&lt;br /&gt;   oauth_token&lt;br /&gt;   domain&lt;br /&gt;   scope&lt;br /&gt;   iconUrl(optional)&lt;br /&gt;   hd(optional)&lt;br /&gt;   hl(optional)&lt;br /&gt;   btmpl(optional)&lt;br /&gt;&lt;br /&gt;Expecting rather simple templete, I've set btmpl parameter as 'mobile'.&lt;br /&gt;But it still includes Javascript-assisited-buttons.&lt;br /&gt;Thus, most of the Japanese mobile phones (and its browser) cannot&lt;br /&gt;click "OK, continue" button. Nor OAuth work.&lt;br /&gt;&lt;br /&gt;Is there any solution to show simpler template?&lt;br /&gt;&lt;br /&gt;At first, I planned to post above to Google Buzz API Developer forum.&lt;br /&gt;But I've changed my mind. This is common problem in all Google's OAuth processes.&lt;br /&gt;Where/Who can I ask for?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-103077277486491421?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/103077277486491421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2010/06/cannot-click-ok-button-in-googles.html#comment-form' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/103077277486491421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/103077277486491421'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2010/06/cannot-click-ok-button-in-googles.html' title='Cannot click OK button in Google&apos;s OAuthAuthorizeToken page using mobile phone'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-2867464292358338080</id><published>2010-06-01T05:31:00.003+09:00</published><updated>2010-06-01T05:40:58.859+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>micro(nano?) Auth</title><content type='html'>&lt;span class="misspell" suggestions="micros,micro,micron,micros's,micra's"&gt;&lt;/span&gt;just thinking now... not yet completed memo.&lt;br /&gt;&lt;br /&gt;For  mobile (or whatever computers which run modern OS) device, every  "Native-application" call for kernel would better be under MAC(Mandatory Access Control).&lt;br /&gt;In  this case, request-token can be used.&lt;br /&gt;Request tokens are issued by OS while the application is certified. The token is checked for  Revokation.  MAC on each kernel call realizes "real-time Revokation".&lt;br /&gt;&lt;br /&gt;Of course, periodical check would  be available, and with less load; such a s "on app booting only" or "on OS rebooting only" type.&lt;br /&gt;&lt;br /&gt;I'd better make a survey on   SELinux case...&lt;br /&gt;&lt;br /&gt;For virtualization Hypervisors, MAC can be  useful, because application ACL is almost compatible for various guest  OS.&lt;br /&gt;But it should not degrade performance drastically.&lt;br /&gt;Anyway,  every kernel call is trapped by Hypervisor (CPU may help passing thru  for most of the cases). And there, MAC can be done.&lt;br /&gt;&lt;br /&gt;How to check?&lt;br /&gt; Full  Certification is heavy process. Just check matching of fingerprint? Or,  just booting/loaded to memory as DLL case? I guess short-handed check shall be done on each load of executable objects.&lt;br /&gt;But, "on writable-memory exec" would be the  path to jail-breaking of executable loading check although  some CPU architectures inhibit such operation(Stack area  corruption and jump to anywhere hacker'd like is the very familier  opration.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-2867464292358338080?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/2867464292358338080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2010/06/micronano-auth.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/2867464292358338080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/2867464292358338080'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2010/06/micronano-auth.html' title='micro(nano?) Auth'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-5511778598678223965</id><published>2009-09-05T15:50:00.004+09:00</published><updated>2009-09-05T17:30:54.170+09:00</updated><title type='text'>XML parsing in Erlang</title><content type='html'>XML handling in Erlang is too hard for me. So I've made some survey first.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Characteristics&lt;/h2&gt;&lt;br /&gt;XML handling operation has two major phases.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Parse XML document and make data(tree of elements)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;xmerl_scan (whole element tree is processed at once)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SAX type parser&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;xmerl_eventp&lt;/li&gt;&lt;li&gt;erlsom_sax (developed 3rd party. not bundled with Erlang OTP)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Access (traverse) elements within data&lt;/li&gt;&lt;ul&gt;&lt;li&gt;XPATH (xmerl_xpath)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XSLT (xmerl_xs)&lt;/li&gt;&lt;li&gt;callback (hook) function from SAX type parser&lt;br /&gt;&lt;/li&gt;&lt;li&gt;hand-made logic&lt;/li&gt;&lt;ul&gt;&lt;li&gt;traverse tree&lt;/li&gt;&lt;li&gt;extract tuple from element tree(list) by 'list comprehension' technique&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;So, methodology of XML parsing is characterized by Parsing and Access method&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;matrix of each method&lt;/h2&gt;&lt;br /&gt;&lt;div&gt;&lt;table class="" id="t-eo" bgcolor="#d0e0e3" border="1" bordercolor="#000000" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="15%"&gt;parse method&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;Acceess method&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;samples on the Web&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;by&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="15%"&gt;xmerl_scan&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;xmerl_xpath&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;&lt;a title="Parsing Atom with Erlang" target="_blank" href="http://intertwingly.net/blog/2007/08/28/Parsing-Atom-with-Erlang" id="db6h"&gt;Parsing Atom with Erlang&lt;/a&gt;&lt;/td&gt;&lt;td width="25%"&gt;Sam Ruby&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="15%"&gt;xmerl_scan&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;xmerl_xpath (with useful MACRO)&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;&lt;a title="XML processing in Erlang" target="_blank" href="http://blog.tornkvist.org/blog.yaws?id=1193209275268448" id="yn.-"&gt;XML processing in Erlang&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;Torbjörn Törnkvist&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="15%"&gt;xmerl_scan&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;hand-made (traverse tree by lists:foldl)&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;&lt;a title="Return Erlang Data from XML" target="_blank" href="http://muharem.wordpress.com/2007/08/21/processing-xml-in-erlang/" id="mhhr"&gt;Return Erlang Data from XML&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;Muharem Hrnjadovic&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="15%"&gt;xmerl_scan&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;hand-made (use list comprehension)&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;&lt;table class="" id="l6nm" bgcolor="#d0e0e3" border="1" bordercolor="#000000" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;a title="XML processing in Erlang" target="_blank" href="http://blog.tornkvist.org/blog.yaws?id=1193209275268448" id="dscx"&gt;XML processing in Erlang&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td width="25%"&gt;Hakan Mattson&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="15%"&gt;xmerl_eventp&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;callback(hook) function&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;&lt;table class="" id="eav8" bgcolor="#d0e0e3" border="1" bordercolor="#000000" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;a title="XML processing in Erlang" target="_blank" href="http://blog.tornkvist.org/blog.yaws?id=1193209275268448" id="ez40"&gt;XML processing in Erlang&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td width="25%"&gt;Torbjörn Törnkvist&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="15%"&gt;erlsom_sax&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;callback function&lt;br /&gt;&lt;/td&gt;&lt;td width="25%"&gt;&lt;table class="" id="cja7" bgcolor="#d0e0e3" border="1" bordercolor="#000000" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;a title="XML processing in Erlang" target="_blank" href="http://blog.tornkvist.org/blog.yaws?id=1193209275268448" id="i8xq"&gt;XML processing in Erlang&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td width="25%"&gt;Willem de Jong&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Operation example&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;example-1 : emerl_scan + xpath&lt;/h3&gt;&lt;br /&gt;If you know which elements you need exactly, and source XML file is not so huge, parse by xmerl_scan, access by xmerl_xpath.&lt;br /&gt;Note: As of Erlang/OTP R13B01 supports &lt;a title="XPATH 1.0" target="_blank" href="http://www.w3.org/TR/xpath" id="z.oh"&gt;XPATH 1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;inspired by &lt;a title="Torbjörn Törnkvist's code" target="_blank" href="http://blog.tornkvist.org/blog.yaws?id=1193209275268448" id="wxw4"&gt;Torbjörn Törnkvist's code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;sample xml data ("e.xml")&lt;br /&gt;&lt;/h4&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Courier New;"&gt;&amp;lt;Envelope&amp;gt;&lt;br /&gt;&amp;lt;Title&amp;gt;envelope title&amp;lt;/Title&amp;gt;&lt;br /&gt;&amp;lt;InnerEnv&amp;gt;&lt;br /&gt; &amp;lt;IDNUM&amp;gt;403276&amp;lt;/IDNUM&amp;gt;&lt;br /&gt; &amp;lt;ItemName&amp;gt;Name String&amp;lt;/ItemName&amp;gt;&lt;br /&gt; &amp;lt;Pages&amp;gt;0&amp;lt;/Pages&amp;gt;&lt;br /&gt;&amp;lt;/InnerEnv&amp;gt;&lt;br /&gt;&amp;lt;/Envelope&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;h4&gt;code&lt;/h4&gt;&lt;br /&gt;-module(example1).&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Courier New;"&gt;-export([doit/1]).&lt;br /&gt;-include_lib("xmerl/include/xmerl.hrl").&lt;br /&gt;&lt;br /&gt;-define(Val(X),&lt;br /&gt; (fun() -&amp;gt;&lt;br /&gt;    [#xmlElement{name = N,&lt;br /&gt;                 content = [#xmlText{value = V}|_]}] = X,&lt;br /&gt;          {N,V} end)())&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;doit(File) -&amp;gt;&lt;br /&gt;{Xml, _} = xmerl_scan:File(File),&lt;br /&gt;[&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Courier New;"&gt;?Val(xmerl_xpath:string("/Envelope/Title", Xml)),&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Courier New;"&gt;?Val(xmerl_xpath:string("//IDNUM", Xml)),&lt;br /&gt; ?Val(xmerl_xpath:string("//ItemName", Xml)),&lt;br /&gt; ?Val(xmerl_xpath:string("//Pages", Xml))&lt;br /&gt;]&lt;br /&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;h4&gt;results&lt;/h4&gt;&lt;span style="font-family:Courier New;"&gt;1&amp;gt; example1:go("e.xml").&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;[&lt;br /&gt;{'Title',"envelope title"},&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt; {'IDNUM',"403276"},&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt; {'ItemName',"Name String"},&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt; {'Pages',"0"}]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;example-2 : xmerl_scan + traverse element tree by lists:foldl&lt;/h3&gt;&lt;br /&gt;if you want to translate whole XML data into other scheme, you need to traverse whole tree by lists:foldl function.&lt;br /&gt;&lt;br /&gt;inspired by &lt;a title="Muharem Hrnjadovic's code" target="_blank" href="http://muharem.wordpress.com/2007/08/21/processing-xml-in-erlang/" id="vz6-"&gt;Muharem Hrnjadovic's code&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;sample xml data ("e.xml")&lt;br /&gt;&lt;/h4&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Courier New;"&gt;&amp;lt;Envelope&amp;gt;&lt;br /&gt;&amp;lt;Title&amp;gt;envelope title&amp;lt;/Title&amp;gt;&lt;br /&gt;&amp;lt;InnerEnv&amp;gt;&lt;br /&gt; &amp;lt;IDNUM&amp;gt;403276&amp;lt;/IDNUM&amp;gt;&lt;br /&gt; &amp;lt;ItemName&amp;gt;Name String&amp;lt;/ItemName&amp;gt;&lt;br /&gt; &amp;lt;Pages&amp;gt;0&amp;lt;/Pages&amp;gt;&lt;br /&gt;&amp;lt;/InnerEnv&amp;gt;&lt;br /&gt;&amp;lt;/Envelope&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;h4&gt;code&lt;/h4&gt;&lt;span style="font-family:Courier New;"&gt;-module(example2).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;-export([go/1]).&lt;/span&gt;  &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;-include_lib("xmerl/include/xmerl.hrl").&lt;/span&gt;   &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;go(File) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    {R, _} = xmerl_scan:file(File),&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;  &lt;br /&gt;io:format("~p~n",[lists:reverse(traverse(R, []))])&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    .&lt;/span&gt;  &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;traverse(R, L) when is_record(R, xmlElement) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    lists:foldl(fun traverse/2, L, R#xmlElement.content)&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;traverse(#xmlText{parents=[{'Title',_},_], value=V}, L) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    [{title, V}|L];&lt;/span&gt;  &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;traverse(#xmlText{parents=[{'IDNUM',_},_,_], value=V}, L) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    [{idnum, V}|L];&lt;/span&gt;  &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;traverse(#xmlText{parents=[{'ItemName',_},_,_], value=V}, L) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    [{itemname, V}|L];&lt;/span&gt;  &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;traverse(#xmlText{parents=[{'Pages',_},_,_], value=V}, L) -&amp;gt;&lt;/span&gt;     [{pages, V}|L];&lt;br /&gt;&lt;br /&gt;traverse(_R, L) -&amp;gt;&lt;br /&gt;  L&lt;br /&gt;  .&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;br /&gt;results&lt;/h4&gt;&lt;span style="font-family:Courier New;"&gt;2&amp;gt; example2:go("e.xml").&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;[{title,"envelope title"},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;{idnum,"403276"},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;{itemname,"Name String"},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;{pages,"0"}]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;example-3 : SAX type parsing operation&lt;/h3&gt;&lt;br /&gt;if the computation resouce is limited, whole XML data cannot be processed at once. So, SAX type parser callback functions to process just parsed element.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As SAX type parser, erlsom_sax is welknown. And Willem de Jong posted his code based on erlsom_sax.&lt;br /&gt;see http://blog.tornkvist.org/blog.yaws?id=1193209275268448&lt;br /&gt;&lt;br /&gt;here is the code based on xmerl_sax_parser library which is inspired by above code.&lt;br /&gt;&lt;h4&gt;sample xml data ("e.xml")&lt;br /&gt;&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Courier New;"&gt;&amp;lt;Envelope&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Title&amp;gt;envelope title&amp;lt;/Title&amp;gt;&lt;br /&gt;&amp;lt;InnerEnv&amp;gt;&lt;br /&gt; &amp;lt;IDNUM&amp;gt;403276&amp;lt;/IDNUM&amp;gt;&lt;br /&gt; &amp;lt;ItemName&amp;gt;Name String&amp;lt;/ItemName&amp;gt;&lt;br /&gt; &amp;lt;Pages&amp;gt;0&amp;lt;/Pages&amp;gt;&lt;br /&gt;&amp;lt;/InnerEnv&amp;gt;&lt;br /&gt;&amp;lt;/Envelope&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;h4&gt;code&lt;/h4&gt;&lt;span style="font-family:Courier New;"&gt;-module(example3).&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;-export([go/1]).&lt;/span&gt;  &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;go(File) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;  &lt;br /&gt;Option = [&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;        {event_fun, fun eventfun/3},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;        {event_state, {[], []}}&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;        ],&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    case xmerl_sax_parser:file(File, Option) of&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;      &lt;br /&gt;　{ok,{Stack, Acc}} -&amp;gt; lists:reverse(Acc);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; {Other} -&amp;gt; Other&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;    end&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    .&lt;/span&gt;   &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;eventfun({ignorableWhitespace, _}, _, State) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;  &lt;br /&gt;State&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;eventfun({startElement, _, Tag, _, _}, _Location, {Stack, Acc}) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    {[Tag | Stack], Acc}&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;eventfun({characters, Value}, _Location, {[Tag | _L] = Stack, Acc}) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    {Stack, [{Tag, Value} | Acc]}&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    ;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;eventfun({endElement, _, _, _}, _Location, {[_ | L], Acc}) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    {L, Acc}&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    ;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;eventfun(_,_,State) -&amp;gt;&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    State&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;    .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;br /&gt;results&lt;/h4&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;6&amp;gt; example3:go("e.xml").&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;[{"Title","envelope title"},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;{"IDNUM","403276"},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;{"ItemName","Name String"},&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;{"Pages","0"}]&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-5511778598678223965?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/5511778598678223965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/09/xml-parsing-in-erlang.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5511778598678223965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5511778598678223965'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/09/xml-parsing-in-erlang.html' title='XML parsing in Erlang'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-2691383417196714953</id><published>2009-08-26T09:36:00.006+09:00</published><updated>2009-08-26T17:28:15.006+09:00</updated><title type='text'>Insider's portal - why we need it</title><content type='html'>I've just made a presentation.&lt;br /&gt;&lt;br /&gt;As a system(or network or everything) admin, I thought that user literacy is the key to administration.&lt;br /&gt;&lt;br /&gt;(Disaster-)Preventive education (to get LITERACY) is more important than incident response. (Of course incident response is important. But preparation of it is more important too.)&lt;br /&gt;&lt;br /&gt;But, how?&lt;br /&gt;&lt;br /&gt;Here is my plan. Make an attractive portal site for insiders of your company.&lt;br /&gt;&lt;br /&gt;In the site, &lt;br /&gt;administrators can hide some tricks to kick them to be educated.&lt;br /&gt;both user and administrators can get immediate response.&lt;br /&gt;user could know who is in the server, and hopefully be friend.&lt;br /&gt;we can centralize resource.&lt;br /&gt;we can simplify client-environment enough to keep them clean.&lt;br /&gt;&lt;br /&gt;anyway, if you were interested in, please click my presentation.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/present/embed?id=dcj64892_43cfq22zfz&amp;amp;interval=5" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-2691383417196714953?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/2691383417196714953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/insiders-portal-why-we-need-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/2691383417196714953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/2691383417196714953'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/insiders-portal-why-we-need-it.html' title='Insider&apos;s portal - why we need it'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-5655776703683230254</id><published>2009-08-21T03:48:00.002+09:00</published><updated>2009-08-21T03:49:06.935+09:00</updated><title type='text'>feedchat - chat in valid RSS format</title><content type='html'>This is inspired by the sample code of chat server from "Programming Erlang" by Joe Armstrong&lt;br&gt;&lt;br&gt;Chat Server -&amp;gt; as the sample is&lt;br&gt;feed view -&amp;gt; tail -N of feed history&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or,&amp;nbsp;&amp;nbsp; tail -f -N =:= friendfeed&lt;br&gt;&lt;br&gt;chat server process : implemented by CouchDB&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RSS entry = document&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DB = history (w/ time stamp)&lt;br&gt;&lt;br&gt;this is cheapest implementation of friendfeed&lt;br&gt;&lt;br&gt;&lt;br&gt;Map-Reduce (query against CouchDB) view point&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map : crunch feed via XMPP or Pubsubhubbub...&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Reduce: tail -N of (feed history)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Reduce: tail -f -N of (feed history)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-5655776703683230254?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/5655776703683230254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/feedchat-chat-in-valid-rss-format.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5655776703683230254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5655776703683230254'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/feedchat-chat-in-valid-rss-format.html' title='feedchat - chat in valid RSS format'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-1677422346603242544</id><published>2009-08-12T13:34:00.004+09:00</published><updated>2009-08-12T13:44:11.531+09:00</updated><title type='text'>Quest for Quality Without A Name</title><content type='html'>from the aftermath of FriendFeed acquisition&lt;br&gt;&lt;br&gt;This entry is translated from my Japanese blog(diary) entry&lt;a href="http://d.hatena.ne.jp/kgbu/20090812/1250038947" name="1250038947"&gt; やや感傷的なex-日記オヤジの繰言&lt;/a&gt; Maybe too long, and pointless, sorry. But, it is required to describe my thought exactly (diary is used for).&lt;br&gt;&lt;br&gt;--------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;My first impression&lt;/font&gt; on the news of friendfeed acquisition by facebook was, "Congrats, Good Exit".&lt;br&gt;&lt;br&gt;Because I know a bit about exhausting life in start-ups. I've been a programmer of venture software company just for a half a year. But a half a year is enough for me. Money burns down every second, heavy pressure, too tight schedule, anxiety about future... Venture company almost always stuck in the mud of shortage of money to run. For both growing, shrinking, too little money to survive. Even if you have growing/promissing business, it's too hard to maintain cash flow to catch up growth.&lt;br&gt;&lt;br&gt;So, every venture company would be broken in some sense. &lt;br&gt;Change itself from slim/beauty deer to fat cash-cow, or, just vanish.&lt;br&gt;Anyway, stop running is a relief. I thought.　-- I had a point of view from inside of start-ups.&lt;br&gt;&lt;br&gt;But, soon I noticed the "not-welcome" comments from USERs. I don't know claiming users are majority or not, but they are impressive and they are like a flood of voices.&lt;br&gt;(I just remembered the article on realtime-riot on friendfeed)&lt;br&gt;If you saw that in real-time-line, it would be overwhelming.&lt;br&gt;&lt;br&gt;I just wondered, were "Friendfeed is coolest service, but NO ONE USE" true?&amp;nbsp; But, Look, here so much people crying for help and showing disbelief within friendfeed!&lt;br&gt;&lt;br&gt;It's not only because coolest toy taken away. I guess. They are serious about something more important. What's that?&lt;br&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h3&gt;So, here is my thought.&lt;/h3&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Friendfeed is open-architecture. Not only open, they welcome to questions, requirements, and ready to offer rich API. Only a few guys challenged raw API hacking, but even average users (if active), enjoyed making groups, special feeds based on rich API. Little tweaks they made, would become little treasure of themselvs. So, they invest their small hacks into the friendfeed, and made virtual money(value). Like a sort of SECOND-LIFE without 3D avator, and its value is not money, but rich communication/fun. &lt;/p&gt;&lt;p&gt;&lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/friendfeed"&gt;&lt;br&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;   &lt;p style="margin-left: 40px;"&gt;Once dived into friendfeed and soaked, then you can find out people just like yourself. Even if you are minority in real life, here you have friends. This is common phonomena when the network shrink size of the world. (I've experienced some times. When I made my homepage(Diary) around 1996, its content was very nitch/minor one,, my daily life... But soon, I could found out people like me!)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;br /&gt;   &lt;p&gt;Thus, in friendfeed, communication made community, and flexible system enforced eco-system of value-creation among users.&lt;br&gt;&lt;/p&gt;&lt;br /&gt;   &lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;But, no one(very few, maybe), recognized that. Anyway, such a recognition itself would help too little in value-creation, might be :-p&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Then, the crisis on the basis of community enlightened people. They noticed the existence of community, value of community, and realizing how the system enforced the process of creation.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;br /&gt;   Sooner or later, system itself would be bored by people, then people abandon the system. Thus, divorce of system/user is inevitable.&lt;br&gt;&lt;br&gt;So, I'm asking to myself. What happens next? What's the next friendfeed? I don't know. But one thing is certain.&lt;br&gt;People wouldn't vanish. &lt;br&gt;They will make another community in the long run.&lt;br&gt;Linkage among people also survive for long time.&lt;br&gt;Then, next edge-community may looks drastically changed, but the same face you can find out, I think.&lt;br&gt;Because, My experience assures. &lt;br&gt;&lt;p&gt;In Japan, on Sep 15, 1995, a meeting held which named "Second Summer of Web", it's a milestone event in internet users and Web-diary("NIKKI in Japanse, ancient hand-made blog) community in Japan. Since then about 15years, now I can see some in the front of network community "BENKYO-KAI" in Japan.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;So. Folks, once you recognized the situation, please be calm down. Still, you think you need to take action, go ahead.&lt;br&gt;Then, see you again, in another space, another time, at edge of the net.&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;&lt;h3&gt;Addendum&lt;/h3&gt;&lt;br&gt;Witing nn community and creation, I remembered the name Christopher Alexander. And his book on Design Pattern. "A Pattern Language: Towns, Buildings, Construction". In that book, key phrase "Quality Without A Name(QWAN)" also remembered.&lt;br&gt;Now I don't have enough time to explain it. But it would be interesting to what corresponds to QWAN in friendfeed system/community, I think.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-1677422346603242544?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/1677422346603242544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/quest-for-quality-without-name.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1677422346603242544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1677422346603242544'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/quest-for-quality-without-name.html' title='Quest for Quality Without A Name'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-6952310713012538841</id><published>2009-08-08T23:35:00.002+09:00</published><updated>2009-08-08T23:38:00.772+09:00</updated><title type='text'>FriendSync service design</title><content type='html'>Now, FriendFeed is the best twitter client. But there is a missing-link.&lt;br&gt;Who use twitter, hostiled their follower, are nailed down to twitter.&lt;br&gt;If you can maintain follows automatically on FriendFeed, you'll have Smarter-Twitter.&lt;br&gt;&lt;br&gt;So, I imagined follower-synchronize service. FriendSync.&lt;br&gt;To prove inconvenience FriendFeed user who has so much Twitter followings.&lt;br&gt;&lt;br&gt;But! oH My gOd! FriendSync already exists (2009 Aug 7) ... so I need to change name to Merge2it2ff or Invi2ff&lt;br&gt;FriendSync - Sync w/ Facebook&lt;br&gt;http://appup.net/item/detail/288348190&lt;br&gt;&lt;br&gt;&lt;div style="margin-left: 40px;"&gt;&lt;br /&gt;&lt;i style="color: rgb(0, 255, 0);"&gt;FriendSync syncs your existing iPhone Contacts with Facebook!Syncs your&lt;br /&gt;iPhone's contact pictures, names and birthdays with Facebook.&lt;/i&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;Anyway, here is a memo on security key features.&lt;br&gt;&lt;h2&gt;Key feature : use OAuth (3-legged!)&lt;/h2&gt;To invite followers from Twitter to FriendFeed, the service need to have authorized to access follow information and register follower.&lt;br&gt;For such a process, OAuth is desined.&lt;br&gt;And, OAuth's "easy-to-use" is already proved by  Mobster World :)&lt;br&gt;&lt;br&gt;Service programs can be located on VPS, but secure info (Request Key) is encrypted|digested, and shall be stored in more secure place.&lt;br&gt;So, service system deployment starts from SSL key signing.&lt;br&gt;Every step needs SSL communication between VPS (application server) and secure storage server.&lt;br&gt;If you using trustfull (using all by yourself, and all well-known ports are protected neatly) server, both application and secure storage server can be the same one :-)&lt;br&gt;This would be low performance, slow in latency, but this is not so much frequently used application that it has no problem.&lt;br&gt;&lt;br&gt;&lt;h2&gt;Key feature : Informed concent before OAuth steps.&lt;/h2&gt;&lt;br&gt;&lt;div&gt;It's partly because of complexity of registration step. You want to be informed enough to keep motivation during long way.&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;Usecase&lt;br&gt;&lt;ul&gt;&lt;li&gt;registration&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Inform the risk &lt;br&gt;&lt;/li&gt;&lt;li&gt;Inform how to reboke&lt;/li&gt;&lt;li&gt;force to check reboke page&lt;/li&gt;&lt;li&gt;guide how to use&lt;/li&gt;&lt;ul&gt;&lt;li&gt;add/remove follow from this application&lt;/li&gt;&lt;li&gt;automatic sync follow status on every 30 minutes&lt;/li&gt;&lt;li&gt;manually sync follow status&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;guide registration step (2 step)&lt;/li&gt;&lt;li&gt;start registration&lt;/li&gt;&lt;ul&gt;&lt;li&gt;declear that your id is the same as FriendFeed&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;login&lt;/li&gt;&lt;ul&gt;&lt;li&gt;use FriendFeed OAuth (OpenID of twitter might be straight forward to explain, :-)&lt;/li&gt;&lt;li&gt;need cookie (expires shortly,,,, mmm,&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-6952310713012538841?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/6952310713012538841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/friendsync-service-design.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6952310713012538841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6952310713012538841'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/08/friendsync-service-design.html' title='FriendSync service design'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-6976491980058273261</id><published>2009-06-26T11:46:00.002+09:00</published><updated>2009-06-26T11:56:12.474+09:00</updated><title type='text'>If you love to code in Erlang and read Japanese..</title><content type='html'>Please watch out http://ja.doukaku.org/lang/erlang/unsolved/&lt;br /&gt;There would be many challenges to solve in Erlang programming language.&lt;br /&gt;&lt;br /&gt;(added: In English, you can try to fill vacancies in http://pleac.sourceforge.net/pleac_erlang/index.html)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-6976491980058273261?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/6976491980058273261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/06/if-you-love-to-code-in-erlang-and-read.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6976491980058273261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6976491980058273261'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/06/if-you-love-to-code-in-erlang-and-read.html' title='If you love to code in Erlang and read Japanese..'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-1974397673464247019</id><published>2009-06-05T11:12:00.004+09:00</published><updated>2009-06-05T11:42:52.716+09:00</updated><title type='text'>Hatena Bookmark is killer twitter? No. it's beyond.</title><content type='html'>here is just my humble opinion...&lt;br /&gt;&lt;br /&gt;Japanese visionary, Mochio Umeda recently made controversy comment in his interview.&lt;br /&gt;He said 'So sorry for Japanese-internet-scene. Now, just a underdog'. (this is not precice translation, but most of reader took it as such.)&lt;br /&gt;He is a vice president or such a position in &lt;a href="http://www.hatena.ne.jp/"&gt;Hatena(hatena.ne.jp)&lt;/a&gt;, so, who claimed about his statements, blamed Hatena too.&lt;br /&gt;&lt;br /&gt;I have no spare time to blame anybody.  But I have time to check the status quo.&lt;br /&gt;&lt;br /&gt;Hatene has a lot of laboratory-level ideas. And some of thier major services are very nice and convenient, and "edge", I think.&lt;br /&gt;&lt;br /&gt;Twitter is very simple service. Some one tweets, then others can know that.&lt;br /&gt;Hatena-Bookmark(HATEBU) sevice is more complecated(maybe hard to use), but more powerful.&lt;br /&gt;Hatebu user can tweet anywhere (contents) in the internet. Then, any "contents" in the internet can cite tweets as comments if they want. HATEBU API is open to contents owner. Of course, you can follow anyone, as twitter offers.&lt;br /&gt;Hatebu introduces additional dimension in stream-media. If Hatena sold its armors just now, $10B would be cheap for some VCs. Hatebu may kill twitter.&lt;br /&gt;&lt;br /&gt;In fact, its API is TOO powerful for someone who cares about bad-repuation or silly comments. But, it is easy to mask out such a noice. Just remove embeded script.&lt;br /&gt;&lt;br /&gt;So, I'm so sorry for Hatena who does not sell their ideas at right time....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-1974397673464247019?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/1974397673464247019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/06/hatena-bookmark-is-killer-twitter-no.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1974397673464247019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1974397673464247019'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/06/hatena-bookmark-is-killer-twitter-no.html' title='Hatena Bookmark is killer twitter? No. it&apos;s beyond.'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-3769467659987286390</id><published>2009-05-22T10:18:00.002+09:00</published><updated>2009-05-22T10:25:46.854+09:00</updated><title type='text'>Status update : still alive. has more TODOs</title><content type='html'>These days, I have less time to blog here, for, f2p (http://dev.ctor.org/f2p/ ) has too much fun.&lt;br /&gt;&lt;br /&gt;But, no plan to abandon this blog.&lt;br /&gt;Here, some of my task lists to come.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SELinux user guide translation into Japanese (for my study)&lt;/li&gt;&lt;li&gt;build Small guest-OS for Xen hypervisor (for my study)&lt;/li&gt;&lt;li&gt;try to design helper-tool for Genetic-evolutional Game Framework in Erlang&lt;/li&gt;&lt;li&gt;Summarize filtered GEO-entries in FriendFeed, as plugin module for f2p&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-3769467659987286390?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/3769467659987286390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/05/status-update-still-alive-has-more.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/3769467659987286390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/3769467659987286390'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/05/status-update-still-alive-has-more.html' title='Status update : still alive. has more TODOs'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-6952830627330195008</id><published>2009-03-02T13:25:00.004+09:00</published><updated>2009-03-02T13:30:40.080+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang test'/><title type='text'>Httpd stress testbench in Erlang</title><content type='html'>just for training in Erlang programming, I've made some code for HTTP access test driver.&lt;br /&gt;&lt;br /&gt;It reads existing access log of Apache(and its compatibles), and issues HTTP requests for designated target host.&lt;br /&gt;It cannot,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;issue POST, HEAD and other request than GET method&lt;/li&gt;&lt;li&gt;use cookies&lt;/li&gt;&lt;li&gt;wait for time intervals which are recorded in the log&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To kick the test, you can follow process as below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="syntax-highlight"&gt;&lt;span style="font-size:78%;"&gt;$ cd working_directory_which_has_logdir&lt;br /&gt;$ erlc manager.erl&lt;br /&gt;$ erlc logreader.erl&lt;br /&gt;$ erlc client.erl&lt;br /&gt;$ &lt;/span&gt;&lt;span class="synStatement"  style="font-size:78%;"&gt;ls&lt;/span&gt;&lt;span style="font-size:78%;"&gt; logdir&lt;br /&gt;a.example.com&lt;br /&gt;b.example.com&lt;br /&gt;$ erl &lt;/span&gt;&lt;span class="synSpecial"  style="font-size:78%;"&gt;-noshell&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span class="synSpecial"  style="font-size:78%;"&gt;-s&lt;/span&gt;&lt;span style="font-size:78%;"&gt; manager &lt;/span&gt;&lt;span class="synStatement"  style="font-size:78%;"&gt;start&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span class="synStatement"  style="font-size:78%;"&gt;"&lt;/span&gt;&lt;span class="synConstant"  style="font-size:78%;"&gt;logdir&lt;/span&gt;&lt;span class="synStatement"  style="font-size:78%;"&gt;"&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);font-size:78%;" class="synConstant" &gt;10000&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:78%;" class="synConstant" &gt;20&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:78%;" class="synConstant" &gt;3000&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 255);font-size:78%;" class="synConstant" &gt;1&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span class="synSpecial"  style="font-size:78%;"&gt;-s&lt;/span&gt;&lt;span style="font-size:78%;"&gt; init &lt;/span&gt;&lt;span class="synStatement"  style="font-size:78%;"&gt;stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;The last line is the command to initiate test.&lt;br /&gt;erl is the name of Erlang interpretor.&lt;br /&gt;&lt;br /&gt;-noshell option is to execute script in batch mode.&lt;br /&gt;&lt;br /&gt;-s option (there are 2 blocks of them) designates each Erlang script.&lt;br /&gt;first -s block means "manager:start("logdir", &lt;span style="color: rgb(0, 255, 0);"&gt;10000&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;20&lt;/span&gt;, &lt;span style="color: rgb(255, 0, 0);"&gt;3000&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 255);"&gt;1&lt;/span&gt;)"&lt;br /&gt;   the first parameter specifies the place of logfiles.&lt;br /&gt;   &lt;span style="color: rgb(0, 255, 0);"&gt;second parameter 10000 specifies timeout in msec&lt;/span&gt;.&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;third parameter 20 specifies concurrency (how many clients issue request simultaneously).&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: rgb(255, 0, 0);"&gt;4th parameter 3000 specifies interval in msec between each requests. This is required to save target host server to melt down :-P &lt;span style="color: rgb(153, 0, 255);"&gt;    &lt;br /&gt;5th parameter 1 is for KeepAlive flag.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;  and second -s block means "init:stop()" to exit batch Erlang operation.&lt;br /&gt;&lt;br /&gt;I have confirmed that each client process can run simultaneously. Here is the sample result of tcpdump.&lt;br /&gt;&lt;br /&gt;&lt;pre class="syntax-highlight"&gt;&lt;span style="font-size:78%;"&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;234946&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;58500&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http: S &lt;span class="synConstant"&gt;3505315617&lt;/span&gt;:&lt;span class="synConstant"&gt;3505315617&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;,sackOK,timestamp &lt;span class="synConstant"&gt;86795622&lt;/span&gt; &lt;span class="synConstant"&gt;0&lt;/span&gt;,nop,wscale &lt;span class="synStatement"&gt;3&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;238005&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;44873&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http: S &lt;span class="synConstant"&gt;3499413688&lt;/span&gt;:&lt;span class="synConstant"&gt;3499413688&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;,sackOK,timestamp &lt;span class="synConstant"&gt;86795625&lt;/span&gt; &lt;span class="synConstant"&gt;0&lt;/span&gt;,nop,wscale &lt;span class="synStatement"&gt;3&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;240203&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;60753&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http: S &lt;span class="synConstant"&gt;3510435421&lt;/span&gt;:&lt;span class="synConstant"&gt;3510435421&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;,sackOK,timestamp &lt;span class="synConstant"&gt;86795627&lt;/span&gt; &lt;span class="synConstant"&gt;0&lt;/span&gt;,nop,wscale &lt;span class="synStatement"&gt;3&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;242465&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;45900&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http: S &lt;span class="synConstant"&gt;3500420864&lt;/span&gt;:&lt;span class="synConstant"&gt;3500420864&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;,sackOK,timestamp &lt;span class="synConstant"&gt;86795629&lt;/span&gt; &lt;span class="synConstant"&gt;0&lt;/span&gt;,nop,wscale &lt;span class="synStatement"&gt;3&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;244827&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;50124&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http: S &lt;span class="synConstant"&gt;3495664924&lt;/span&gt;:&lt;span class="synConstant"&gt;3495664924&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;,sackOK,timestamp &lt;span class="synConstant"&gt;86795632&lt;/span&gt; &lt;span class="synConstant"&gt;0&lt;/span&gt;,nop,wscale &lt;span class="synStatement"&gt;3&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;631375&lt;/span&gt; IP www.hoge.com.http &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;58500&lt;/span&gt;: S &lt;span class="synConstant"&gt;320291303&lt;/span&gt;:&lt;span class="synConstant"&gt;320291303&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; ack &lt;span class="synConstant"&gt;3505315618&lt;/span&gt; win &lt;span class="synConstant"&gt;64240&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;&lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;631504&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;58500&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http:&lt;span class="synStatement"&gt; . &lt;/span&gt;ack &lt;span class="synConstant"&gt;1&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;675836&lt;/span&gt; IP &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;58500&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; www.hoge.com.http: P &lt;span class="synConstant"&gt;1&lt;/span&gt;:&lt;span class="synConstant"&gt;108&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;107&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; ack &lt;span class="synConstant"&gt;1&lt;/span&gt; win &lt;span class="synConstant"&gt;5840&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;769805&lt;/span&gt; IP www.hoge.com.http &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;58500&lt;/span&gt;:&lt;span class="synStatement"&gt; . &lt;/span&gt;ack &lt;span class="synConstant"&gt;108&lt;/span&gt; win &lt;span class="synConstant"&gt;64240&lt;/span&gt;&lt;br /&gt;&lt;span class="synConstant"&gt;13&lt;/span&gt;:&lt;span class="synConstant"&gt;19&lt;/span&gt;:&lt;span class="synConstant"&gt;48&lt;/span&gt;.&lt;span class="synConstant"&gt;769812&lt;/span&gt; IP www.hoge.com.http &lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt; &lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;10&lt;/span&gt;.&lt;span class="synConstant"&gt;44873&lt;/span&gt;: S &lt;span class="synConstant"&gt;1269646951&lt;/span&gt;:&lt;span class="synConstant"&gt;1269646951&lt;/span&gt;&lt;span class="synStatement"&gt;(&lt;/span&gt;&lt;span class="synConstant"&gt;0&lt;/span&gt;&lt;span class="synStatement"&gt;)&lt;/span&gt; ack &lt;span class="synConstant"&gt;3499413689&lt;/span&gt; win &lt;span class="synConstant"&gt;64240&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;lt;&lt;/span&gt;mss &lt;span class="synConstant"&gt;1460&lt;/span&gt;&lt;span class="synStatement"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can access the code from &lt;a title="http://github.com/kgbu/erlandom/tree/b661d83d128863667d0cf9fe86b2badb3416d4cd/httpstress" href="http://github.com/kgbu/erlandom/tree/b661d83d128863667d0cf9fe86b2badb3416d4cd/httpstress" id="p69c"&gt;http://github.com/kgbu/erlandom/tree/b661d83d128863667d0cf9fe86b2badb3416d4cd/httpstress&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you can read Japanese, my blog may help you.&lt;br /&gt;&lt;a title="http://d.hatena.ne.jp/kgbu/20080829/1219994676" href="http://d.hatena.ne.jp/kgbu/20080829/1219994676" id="q60z"&gt;http://d.hatena.ne.jp/kgbu/20080829/1219994676&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-6952830627330195008?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/6952830627330195008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/03/httpd-stress-testbench-in-erlang.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6952830627330195008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6952830627330195008'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/03/httpd-stress-testbench-in-erlang.html' title='Httpd stress testbench in Erlang'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-1669952343875837151</id><published>2009-02-19T11:15:00.005+09:00</published><updated>2009-02-19T11:44:50.736+09:00</updated><title type='text'>What is ffp?</title><content type='html'>In &lt;a href="http://ocaokgbu.blogspot.com/2009/02/how-to-setup-your-ffp.html"&gt;my previous entry&lt;/a&gt;, I've posted very messed-up procedure to install ffp(f2p).&lt;br /&gt;But,  don't blame ffp. Ffp(&lt;a href="http://github.com/nahi/f2p/tree/master"&gt;http://github.com/nahi/f2p/tree/master&lt;/a&gt;) itself is very smart and simple(thin-layered) application.  I thank  NaHi, author of this product. He said "ffp is for mobile-FriendFeed users".&lt;br /&gt;&lt;br /&gt;FriendFeed is one of the best tools for re-blogging(twitting) with powerfull aggregation.&lt;br /&gt;Ffp is used for the basis of UI-customization.&lt;br /&gt;&lt;br /&gt;Now ffp offers you&lt;br /&gt;&lt;ul&gt;&lt;li&gt;simple/slim UI for "traditional-mobile phone web-browser" (although iPhone has its special UI from FriendFeed)&lt;/li&gt;&lt;li&gt;grouping messages/entries from various feed-sources into comment-tree structure&lt;/li&gt;&lt;li&gt;"recent-updated" view&lt;br /&gt;&lt;/li&gt;&lt;li&gt;re-share(cite/quote) messages from friend feed and manage it in your feed (So, your another friend may refer interesting post of friend-of-friend. Note: privacy matter might be cleared)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Still ffp seems to be in enhancement process. Feel free to drop in f2p room at FriendFeed.&lt;br /&gt;&lt;a href="http://friendfeed.com/rooms/f2p"&gt;http://friendfeed.com/rooms/f2p&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-1669952343875837151?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/1669952343875837151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/what-is-ffp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1669952343875837151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1669952343875837151'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/what-is-ffp.html' title='What is ffp?'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-7551515619357118261</id><published>2009-02-16T11:50:00.004+09:00</published><updated>2009-02-16T12:06:08.152+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='friendfeed'/><title type='text'>how to setup your ffp</title><content type='html'>ffp takes you out from your desk with FriendFeed.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;source: http://github.com/nahi/ffp/tree/master&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;In case of CentOS5.2 default installation, rubygems is not availabe. &lt;br&gt;&lt;br /&gt;So, installation starts at rubygem, but it requires rdoc... anyway, let's go further.&lt;br&gt;&lt;br /&gt;&lt;h1&gt;Setup framework&lt;/h1&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;install rdoc&lt;/h2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # yum install rdoc&lt;br style="font-family: Courier New;"&gt;&lt;br style="font-family: Courier New;"&gt;Dependencies Resolved&lt;br style="font-family: Courier New;"&gt;&lt;br style="font-family: Courier New;"&gt;=============================================================================&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;Package&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Arch&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Repository&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&lt;br style="font-family: Courier New;"&gt;=============================================================================&lt;br style="font-family: Courier New;"&gt;Installing:&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;ruby-rdoc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i386&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.8.5-5.el5_2.6&amp;nbsp; updates&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 136 k&lt;br style="font-family: Courier New;"&gt;Updating:&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;ruby&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i386&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.8.5-5.el5_2.6&amp;nbsp; updates&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 280 k&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;ruby-libs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i386&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.8.5-5.el5_2.6&amp;nbsp; updates&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.6 M&lt;br style="font-family: Courier New;"&gt;Installing for dependencies:&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;ruby-irb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i386&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.8.5-5.el5_2.6&amp;nbsp; updates&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 69 k&lt;br style="font-family: Courier New;"&gt;Updating for dependencies:&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;ruby-devel&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i386&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.8.5-5.el5_2.6&amp;nbsp; updates&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 555 k&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;install gem&lt;/h2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # tar zxf rubygems-1.3.1.tgz&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # cd rubygems-1.3.1&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # ruby setup.rb&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;install rails&lt;/h2&gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;# gem install rails&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Successfully installed rake-0.8.3&lt;br&gt;&lt;br /&gt;Successfully installed activesupport-2.2.2&lt;br&gt;&lt;br /&gt;Successfully installed activerecord-2.2.2&lt;br&gt;&lt;br /&gt;Successfully installed actionpack-2.2.2&lt;br&gt;&lt;br /&gt;Successfully installed actionmailer-2.2.2&lt;br&gt;&lt;br /&gt;Successfully installed activeresource-2.2.2&lt;br&gt;&lt;br /&gt;Successfully installed rails-2.2.2&lt;br&gt;&lt;br /&gt;7 gems installed&lt;br&gt;&lt;br /&gt;Installing ri documentation for rake-0.8.3...&lt;br&gt;&lt;br /&gt;Installing ri documentation for activesupport-2.2.2...&lt;br&gt;&lt;br /&gt;Installing ri documentation for activerecord-2.2.2...&lt;br&gt;&lt;br /&gt;Installing ri documentation for actionpack-2.2.2...&lt;br&gt;&lt;br /&gt;Installing ri documentation for actionmailer-2.2.2...&lt;br&gt;&lt;br /&gt;Installing ri documentation for activeresource-2.2.2...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for rake-0.8.3...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for activesupport-2.2.2...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for activerecord-2.2.2...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for actionpack-2.2.2...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for actionmailer-2.2.2...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for activeresource-2.2.2...&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;test rails&lt;/h3&gt;&lt;br&gt;&lt;br /&gt;$ mkdir ffp&lt;br style="font-family: Courier New;"&gt;$ rails /home/ocao/ffp&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exists&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/controllers&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/helpers&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/models&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/views/layouts&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/locales&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; db&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; doc&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; lib&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; lib/tasks&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/images&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/stylesheets&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/process&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/fixtures&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/functional&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/integration&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/performance&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/unit&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; vendor&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; vendor/plugins&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/sessions&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/sockets&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/cache&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/pids&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; Rakefile&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; README&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/controllers/application.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/helpers/application_helper.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/test_helper.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/performance/browsing_test.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/database.yml&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/routes.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/inflections.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/mime_types.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/new_rails_defaults.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/locales/en.yml&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/boot.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environment.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments/production.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments/development.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments/test.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/about&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/console&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/dbconsole&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/destroy&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/generate&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance/benchmarker&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance/profiler&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance/request&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/process/reaper&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/process/spawner&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/process/inspector&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/runner&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/server&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/plugin&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/dispatch.rb&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/dispatch.cgi&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/dispatch.fcgi&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/404.html&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/422.html&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/500.html&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/index.html&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/favicon.ico&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/robots.txt&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/images/rails.png&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/prototype.js&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/effects.js&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/dragdrop.js&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/controls.js&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/application.js&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; doc/README_FOR_APP&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/server.log&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/production.log&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/development.log&lt;br style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/test.log&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h3 style="font-family: Verdana;"&gt;Penetrate your firewall (port 3000 default)&lt;/h3&gt;in case of CentOS, iptables setup changed&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;#&lt;font size="2"&gt;&lt;b&gt; &lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;font style="color: rgb(0, 0, 0); font-family: Courier New;"&gt;iptables -A INPUT -p tcp --dport 3000 -j ACCEPT&lt;/font&gt;&lt;br style="color: rgb(0, 0, 0); font-family: Courier New;"&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Courier New;"&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;(if required) reverse proxy server setup&lt;/h3&gt;If you feel port 3000 specific-URL is ugly, you can setup httpd (apache) to reverse-proxy as below.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProxyPass /ffp/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://yourserver:3000/&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProxyPassReverse /ffp/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://yourserver:3000/&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;kick start server(Webrick)&lt;/h3&gt;&lt;br&gt;&lt;br /&gt;$ cd ffp&lt;br&gt;&lt;br /&gt;$ script/server&lt;br&gt;&lt;br /&gt;=&amp;gt; Booting WEBrick...&lt;br&gt;&lt;br /&gt;=&amp;gt; Rails 2.2.2 application started on http://0.0.0.0:3000&lt;br&gt;&lt;br /&gt;=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br&gt;&lt;br /&gt;[2009-02-16 09:30:40] INFO&amp;nbsp; WEBrick 1.3.1&lt;br&gt;&lt;br /&gt;[2009-02-16 09:30:40] INFO&amp;nbsp; ruby 1.8.5 (2006-08-25) [i386-linux]&lt;br&gt;&lt;br /&gt;[2009-02-16 09:30:40] INFO&amp;nbsp; WEBrick::HTTPServer#start: pid=16622 port=3000&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:09:30:48 JST] "GET / HTTP/1.0" 200 7385&lt;br&gt;&lt;br /&gt;- -&amp;gt; /&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:09:33:45 JST] "GET / HTTP/1.1" 200 7385&lt;br&gt;&lt;br /&gt;- -&amp;gt; /&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:09:33:45 JST] "GET /javascripts/prototype.js HTTP/1.1" 200 129738&lt;br&gt;&lt;br /&gt;http://b137053.ppp.asahi-net.or.jp/ffp/ -&amp;gt; /javascripts/prototype.js&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:09:33:46 JST] "GET /javascripts/effects.js HTTP/1.1" 200 38675&lt;br&gt;&lt;br /&gt;http://b137053.ppp.asahi-net.or.jp/ffp/ -&amp;gt; /javascripts/effects.js&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:09:33:46 JST] "GET /images/rails.png HTTP/1.1" 200 6646&lt;br&gt;&lt;br /&gt;http://b137053.ppp.asahi-net.or.jp/ffp/ -&amp;gt; /images/rails.png&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:09:34:02 JST] "GET /rails/info/properties HTTP/1.1" 500 13415&lt;br&gt;&lt;br /&gt;http://b137053.ppp.asahi-net.or.jp/ffp/ -&amp;gt; /rails/info/properties&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;"&gt;&lt;h3 style="font-family: Verdana;"&gt;Welcome ABORT!!!&lt;/h3&gt;you'll see the message below.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h1&gt;MissingSourceFile&lt;br /&gt;  &lt;br /&gt;    in Rails/infoController#properties&lt;/h1&gt;&lt;br&gt;&lt;br /&gt;here is the framework trace.&lt;br&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:521:in `new_constants_in'&lt;br&gt;&lt;br /&gt;(snip!)&lt;br /&gt;/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'&lt;br&gt;&lt;br /&gt;script/server:3&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Thus,&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;/code&gt;no such file to load -- sqlite3&lt;br&gt;&lt;br /&gt;&lt;code&gt;This error occurred while loading the following files:&lt;br&gt;&lt;br /&gt;   sqlite3&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;but, we need SWIG before sqlite3.&lt;br&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;The reason why SWIG is required, see &lt;/code&gt;&lt;a title="http://www.machu.jp/diary/20070117.html" href="http://www.machu.jp/diary/20070117.html" id="byh6"&gt;http://www.machu.jp/diary/20070117.html&lt;/a&gt; &lt;br&gt;&lt;br /&gt;&lt;code&gt;&lt;br&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 style="font-family: Verdana;"&gt;&lt;code&gt;install SWIG&lt;/code&gt;&lt;/h3&gt;&lt;h3&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;br&gt;&lt;br /&gt;download from http://www.swig.org/download.html&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# tar zxf swig-1.3.38.tar.gz&lt;br&gt;&lt;br /&gt;# cd swig-1.3.38&lt;br&gt;&lt;br /&gt;# ./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;install sqlite&lt;/h3&gt;&lt;pre&gt;# gem install sqlite3-ruby&lt;br&gt;&lt;br /&gt;Building native extensions.&amp;nbsp; This could take a while...&lt;br&gt;&lt;br /&gt;Successfully installed sqlite3-ruby-1.2.4&lt;br&gt;&lt;br /&gt;1 gem installed&lt;br&gt;&lt;br /&gt;Installing ri documentation for sqlite3-ruby-1.2.4...&lt;br&gt;&lt;br /&gt;Installing RDoc documentation for sqlite3-ruby-1.2.4...&lt;br&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;Now your Environment seems OK&lt;/h2&gt;&lt;h3&gt;About your application’s environment&lt;/h3&gt;&lt;br /&gt;          &lt;table class="zeroBorder"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="name"&gt;Ruby version&lt;/td&gt;&lt;td class="value"&gt;1.8.5 (i386-linux)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;RubyGems version&lt;/td&gt;&lt;td class="value"&gt;1.3.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Rails version&lt;/td&gt;&lt;td class="value"&gt;2.2.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Active Record version&lt;/td&gt;&lt;td class="value"&gt;2.2.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Action Pack version&lt;/td&gt;&lt;td class="value"&gt;2.2.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Active Resource version&lt;/td&gt;&lt;td class="value"&gt;2.2.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Action Mailer version&lt;/td&gt;&lt;td class="value"&gt;2.2.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Active Support version&lt;/td&gt;&lt;td class="value"&gt;2.2.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Application root&lt;/td&gt;&lt;td class="value"&gt;/home/yourname/ffp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Environment&lt;/td&gt;&lt;td class="value"&gt;development&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Database adapter&lt;/td&gt;&lt;td class="value"&gt;sqlite3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="name"&gt;Database schema version&lt;/td&gt;&lt;td class="value"&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br /&gt;&lt;h1&gt;Setup f2p&lt;/h1&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;download github code&lt;/h2&gt;&lt;br style="font-family: Courier New;"&gt;$ cd working_directory&lt;br&gt;&lt;br /&gt;$ git clone git://github.com/nahi/f2p.git&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;initial boot to confirm setup&lt;br&gt;&lt;br /&gt;&lt;/h2&gt;&lt;br&gt;&lt;br /&gt;$ script/server&lt;br&gt;&lt;br /&gt;=&amp;gt; Booting WEBrick...&lt;br&gt;&lt;br /&gt;Missing these required gems:&lt;br&gt;&lt;br /&gt;&amp;nbsp; httpclient&lt;br&gt;&lt;br /&gt;&amp;nbsp; json&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;You're running:&lt;br&gt;&lt;br /&gt;&amp;nbsp; ruby 1.8.5 at /usr/bin/ruby&lt;br&gt;&lt;br /&gt;&amp;nbsp; rubygems 1.3.1 at /home/ocao/.gem/ruby/1.8, /usr/lib/ruby/gems/1.8&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Run `rake gems:install` to install the missing gems.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;install missing gems&lt;/h3&gt;oh, boy! where is httpclient?&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;$ rake gems:install&lt;br&gt;&lt;br /&gt;(in /home/username/f2p)&lt;br&gt;&lt;br /&gt;** Invoke gems:install (first_time)&lt;br&gt;&lt;br /&gt;** Invoke gems:base (first_time)&lt;br&gt;&lt;br /&gt;** Execute gems:base&lt;br&gt;&lt;br /&gt;** Invoke environment (first_time)&lt;br&gt;&lt;br /&gt;** Execute environment&lt;br&gt;&lt;br /&gt;rake aborted!&lt;br&gt;&lt;br /&gt;no such file to load -- httpclient&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;after all, I need to install following 2 packages (httpclient, json)&lt;br&gt;&lt;br /&gt;&lt;h4&gt;get httpclient&lt;/h4&gt;&lt;br&gt;&lt;br /&gt;at http://dev.ctor.org/http-access2&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# wget http://dev.ctor.org/download/httpclient-2.1.4.tar.gz&lt;br&gt;&lt;br /&gt;# tar zxf httpclient-2.1.4.tar.gz&lt;br&gt;&lt;br /&gt;# cd httpclient-2.1.4&lt;br&gt;&lt;br /&gt;# ruby install.rb&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;but, still rake is making noise on "json"&lt;br&gt;&lt;br /&gt;rake gems:install&lt;br&gt;&lt;br /&gt;(in /home/username/f2p)&lt;br&gt;&lt;br /&gt;rake aborted!&lt;br&gt;&lt;br /&gt;no such file to load -- json&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;(See full trace by running task with --trace)&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h4&gt;get json&lt;/h4&gt;its simple.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;# gem install json&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h2&gt;Kick off again&lt;/h2&gt;it seems ok,&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;$ script/server&lt;br&gt;&lt;br /&gt;=&amp;gt; Booting WEBrick...&lt;br&gt;&lt;br /&gt;=&amp;gt; Rails 2.2.2 application started on http://0.0.0.0:3000&lt;br&gt;&lt;br /&gt;=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br&gt;&lt;br /&gt;[2009-02-16 10:53:05] INFO&amp;nbsp; WEBrick 1.3.1&lt;br&gt;&lt;br /&gt;[2009-02-16 10:53:05] INFO&amp;nbsp; ruby 1.8.5 (2006-08-25) [i386-linux]&lt;br&gt;&lt;br /&gt;[2009-02-16 10:53:05] INFO&amp;nbsp; WEBrick::HTTPServer#start: pid=25199 port=3000&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:10:53:15 JST] "GET / HTTP/1.1" 302 110&lt;br&gt;&lt;br /&gt;- -&amp;gt; /&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:10:53:16 JST] "GET /login HTTP/1.1" 200 863&lt;br&gt;&lt;br /&gt;- -&amp;gt; /login&lt;br&gt;&lt;br /&gt;192.168.0.51 - - [16/Feb/2009:10:54:02 JST] "POST /login/authenticate HTTP/1.1" 500 13753&lt;br&gt;&lt;br /&gt;http://b137053.ppp.asahi-net.or.jp/f2p/login -&amp;gt; /login/authenticate&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;but I came across login-failure&lt;/h3&gt;&lt;br&gt;&lt;br /&gt;&lt;p style="font-family: Verdana;"&gt;&lt;br /&gt;  messages are below.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ActiveRecord::StatementInvalid&lt;br /&gt;  &lt;br /&gt;    in LoginController#authenticate&lt;br /&gt;  &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="font-family: Courier New;"&gt;Could not find table 'users'&lt;/p&gt;&lt;div id="Application-Trace" style="display: block; font-family: Courier New;"&gt;&lt;br /&gt;      &lt;pre&gt;&lt;code&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:29:in `table_structure'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/object/misc.rb:39:in `returning'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:28:in `table_structure'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/sqlite_adapter.rb:189:in `columns'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:1220:in `columns'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2839:in `attributes_from_column_definition_without_lock'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/locking/optimistic.rb:55:in `attributes_from_column_definition'&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:2279:in `initialize'&lt;br&gt;&lt;br /&gt;app/models/user.rb:62:in `initialize'&lt;br&gt;&lt;br /&gt;app/controllers/login_controller.rb:26:in `new'&lt;br&gt;&lt;br /&gt;app/controllers/login_controller.rb:26:in `authenticate'&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;/div&gt;&lt;br /&gt;  &lt;br /&gt;    &lt;div style="font-family: Courier New;" id="Framework-Trace"&gt;&lt;br /&gt;      &lt;pre&gt;&lt;code&gt;/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:29:in `table_structure'&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/object/misc.rb:39:in `returning'&lt;br /&gt;(snip!)&lt;br&gt;&lt;br /&gt;/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'&lt;br /&gt;/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'&lt;br /&gt;script/server:3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style="margin-top: 30px;"&gt;Request&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Parameters&lt;/b&gt;: &lt;/p&gt;&lt;pre&gt;{"name"=&amp;gt;"user",&lt;br&gt;&lt;br /&gt; "commit"=&amp;gt;"login",&lt;br&gt;&lt;br /&gt; "authenticity_token"=&amp;gt;"xxxxxx",&lt;br&gt;&lt;br /&gt; "remote_key"=&amp;gt;"xxxxxxx"}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="session_dump"&gt;&lt;pre class="debug_dump"&gt;--- &lt;br /&gt;:csrf_id: 9xxxxxxxxxxbf&lt;br /&gt;flash: !map:ActionController::Flash::FlashHash {}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-top: 30px;"&gt;Response&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Headers&lt;/b&gt;: &lt;/p&gt;&lt;pre&gt;{"cookie"=&amp;gt;[],&lt;br&gt;&lt;br /&gt; "Content-Type"=&amp;gt;"",&lt;br&gt;&lt;br /&gt; "Cache-Control"=&amp;gt;"no-cache"}&lt;/pre&gt;&lt;br&gt;&lt;br /&gt;migrate db for public_environment?&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;reference: &lt;a title="http://d.hatena.ne.jp/ky2009/20081226/1230278255" href="http://d.hatena.ne.jp/ky2009/20081226/1230278255" id="s2bu"&gt;http://d.hatena.ne.jp/ky2009/20081226/1230278255&lt;/a&gt; &lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;$ rake RAILS_ENV=production db:migrate&lt;br&gt;&lt;br /&gt;(in /home/ocao/f2p)&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateUsers: migrating ====================================================&lt;br&gt;&lt;br /&gt;-- create_table(:users)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.0057s&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateUsers: migrated (0.0062s) ===========================================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateProfiles: migrating =================================================&lt;br&gt;&lt;br /&gt;-- create_table(:profiles)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.0056s&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateProfiles: migrated (0.0060s) ========================================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;==&amp;nbsp; AddUserToProfile: migrating ===============================================&lt;br&gt;&lt;br /&gt;-- add_column(:profiles, :user_id, :integer)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.0104s&lt;br&gt;&lt;br /&gt;==&amp;nbsp; AddUserToProfile: migrated (0.0108s) ======================================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;==&amp;nbsp; InsertProfileOfUser: migrating ============================================&lt;br&gt;&lt;br /&gt;==&amp;nbsp; InsertProfileOfUser: migrated (0.0010s) ===================================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;==&amp;nbsp; AddEntriesInThreadToProfile: migrating ====================================&lt;br&gt;&lt;br /&gt;-- add_column(:profiles, :entries_in_thread, :integer)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.0097s&lt;br&gt;&lt;br /&gt;==&amp;nbsp; AddEntriesInThreadToProfile: migrated (0.0113s) ===========================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateLastModifieds: migrating ============================================&lt;br&gt;&lt;br /&gt;-- create_table(:last_modifieds)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.0058s&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateLastModifieds: migrated (0.0062s) ===================================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateCheckedModifieds: migrating =========================================&lt;br&gt;&lt;br /&gt;-- create_table(:checked_modifieds)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.0057s&lt;br&gt;&lt;br /&gt;==&amp;nbsp; CreateCheckedModifieds: migrated (0.0061s) ================================&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;but, still I have the same error. maybe I'm using development environment, right?&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;$$ ls -l db&lt;br&gt;&lt;br /&gt;total 36&lt;br&gt;&lt;br /&gt;-rw-r--r-- 1 ocao ocao&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Feb 16 10:49 development.sqlite3 &amp;lt;&amp;lt;&amp;lt; nothing!!!!&lt;br&gt;&lt;br /&gt;drwxrwxr-x 2 ocao ocao&amp;nbsp; 4096 Feb 16 06:33 migrate&lt;br&gt;&lt;br /&gt;-rw-r--r-- 1 ocao ocao 10240 Feb 16 11:01 production.sqlite3&lt;br&gt;&lt;br /&gt;-rw-rw-r-- 1 ocao ocao&amp;nbsp; 1696 Feb 16 11:01 schema.rb&lt;br&gt;&lt;br /&gt;$ cd ..&lt;br&gt;&lt;br /&gt;$ rake RAILS_ENV=development db:migrate&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;BINGO!!! now the application starts correctly.&lt;br&gt;&lt;br /&gt;&lt;div id="dlmf" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 721px; height: 470px;" src="http://docs.google.com/File?id=dcj64892_8g448scgt_b"&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-7551515619357118261?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/7551515619357118261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/how-to-setup-your-ffp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/7551515619357118261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/7551515619357118261'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/how-to-setup-your-ffp.html' title='how to setup your ffp'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-2625339505803407161</id><published>2009-02-15T11:28:00.005+09:00</published><updated>2009-02-15T11:38:18.416+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang tips Linux'/><title type='text'>WSSE on Hatena by Erlang</title><content type='html'>&lt;p&gt;I'm a user of HATENA-bookmark web service. It's a major social-bookmark service in Japan.&lt;br&gt;The API of the service is in public. So, I've written some code in Erlang.&lt;br&gt;&lt;br&gt;To initiate operation, WSSE certification is required. &lt;br&gt;For details of WSSE specification, please refer&lt;br&gt;&amp;nbsp;&lt;a title="http://www.ibm.com/developerworks/webservices/library/specification/ws-secure/" href="http://www.ibm.com/developerworks/webservices/library/specification/ws-secure/" id="ku-8"&gt;http://www.ibm.com/developerworks/webservices/library/specification/ws-secure/&lt;/a&gt; &lt;br&gt;For details of HATENA-bookmark API, please refer&lt;br&gt;&amp;nbsp;&lt;a title="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d5%a5%a9%a5%c8%a5%e9%a5%a4%a5%d5AtomAPI?kid=88110#wsse (in Japanese)" href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d5%a5%a9%a5%c8%a5%e9%a5%a4%a5%d5AtomAPI?kid=88110#wsse" id="erhb"&gt;http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d5%a5%a9%a5%c8%a5%e9%a5%a4%a5%d5AtomAPI?kid=88110#wsse (in Japanese)&lt;/a&gt; &lt;br&gt;&lt;br&gt;Following is the wsse module.&lt;br&gt;&lt;/p&gt;&lt;pre&gt;&lt;br style="font-family: Courier New;"&gt;&lt;font size="1"&gt;&lt;span style="font-family: Courier New;"&gt; -module(wsse).&lt;br&gt; -export([new/2]).&lt;br&gt;&lt;br&gt; -define(SHA1DIGESTLENGTH, 20).&lt;br&gt;&lt;br&gt;new (User, Password) -&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {A, B, C} = now(),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; random:seed(A, B, C),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nonce = nonce(?SHA1DIGESTLENGTH, ""),&lt;br&gt;&lt;br&gt;%% create ISO 8601 compling datetime&lt;br&gt;%% $ ruby -e " require 'open-uri' ; p Time.now.iso8601"&lt;br&gt;%% =&amp;gt; "2008-07-31T16:16:14+09:00"&lt;br&gt;%%&lt;br&gt;%%&amp;nbsp; ref) &lt;a title="http://www.trapexit.org/Converting_Between_struct:time_and_ISO8601_Format" href="http://www.trapexit.org/Converting_Between_struct:time_and_ISO8601_Format" id="buw."&gt;http://www.trapexit.org/Converting_Between_struct:time_and_ISO8601_Format&lt;/a&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {{Year, Month, Day}, {Hour, Min, Sec}} = erlang:localtime(),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TZ = os:cmd("date +%:z"),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Created = io_lib:format("~4.10.0B-~2.10.0B-~2.10.0BT~2.10.0B:~2.10.0B:~2.10.0B~6s", &lt;br&gt; [Year, Month, Day, Hour, Min, Sec, TZ]),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; crypto:start(),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Digest = binary_to_list(crypto:sha(Nonce ++ Created ++ Password)),&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "UsernameToken Username=\"" ++ User ++ "\", " ++&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "PasswordDigest=\"" ++&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base64:encode_to_string(Digest) ++ "\", " ++&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Nonce=\"" ++&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base64:encode_to_string(Nonce) ++ "\", " ++&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Created=\"" ++ Created ++ "\"".&lt;br&gt;&lt;br&gt;nonce(0,L) -&amp;gt; L ++ [random:uniform(255)];&lt;br&gt;nonce(N,L) -&amp;gt; nonce(N -1, L ++ [random:uniform(255)]).&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br&gt;&lt;span style="font-family: Arial;"&gt;The HATENA-bookmark service API is using Atom format data.&lt;/span&gt;&lt;br style="font-family: Arial;"&gt;&lt;span style="font-family: Arial;"&gt;Here is the module for it.&lt;/span&gt;&lt;br&gt;&lt;pre style="font-family: Courier New;"&gt;&lt;font size="1"&gt; -&lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/module"&gt;module&lt;/a&gt;(getatom).&lt;br&gt; -export([new/3]).&lt;br&gt;&lt;br&gt;new(User, Password, &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/Uri"&gt;Uri&lt;/a&gt;) -&amp;gt;&lt;br&gt; RequestHeader = [{ "X-&lt;span class="highlight"&gt;WSSE&lt;/span&gt;" , &lt;span class="highlight"&gt;wsse&lt;/span&gt;:new(User, Password)}],&lt;br&gt;&lt;br&gt; inets:start(),&lt;br&gt; {ok, {{_Version, 200, _ReasonPhrase}, _Headers, Body}} =&lt;br&gt; http:request(get, {&lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/Uri"&gt;Uri&lt;/a&gt;, RequestHeader}, [ ], [ ]),&lt;br&gt; Body.&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;span style="font-family: Arial;"&gt;Here is a typical useage from erlang interpreter command line.&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;font size="1"&gt;&lt;span style="font-family: Courier New;"&gt;&amp;gt; Latest = getatom:new("username", "password", "&lt;/span&gt;&lt;a title="http://b.hatena.ne.jp/atom/feed" style="font-family: Courier New;" href="http://b.hatena.ne.jp/atom/feed"&gt;http://b.hatena.ne.jp/atom/feed&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;").&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;[60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; 46,48,34,32,101,110,99,111,100,105,110,103,61|...]&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&amp;gt; io:format("~s",[Latest]).&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&amp;lt;feed version="0.3"&amp;lt;/pp&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; xmlns="&lt;/span&gt;&lt;a style="font-family: Courier New;" href="http://purl.org/atom/ns#" target="_blank"&gt;http://purl.org/atom/ns#&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;"&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; xmlns:&lt;/span&gt;&lt;a style="font-family: Courier New;" class="keyword" href="http://d.hatena.ne.jp/keyword/dc"&gt;dc&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;="&lt;/span&gt;&lt;a style="font-family: Courier New;" href="http://purl.org/dc/elements/1.1/" target="_blank"&gt;http://purl.org/dc/elements/1.1/&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;"&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; xmlns:&lt;/span&gt;&lt;a style="font-family: Courier New;" class="keyword" href="http://d.hatena.ne.jp/keyword/openSearch"&gt;openSearch&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;="&lt;/span&gt;&lt;a style="font-family: Courier New;" href="http://a9.com/-/spec/opensearchrss/1.0/" target="_blank"&gt;http://a9.com/-/spec/opensearchrss/1.0/&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;"&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;a style="font-family: Courier New;" class="keyword" href="http://d.hatena.ne.jp/keyword/xml"&gt;xml&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;:lang="ja"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; &amp;lt;title&amp;gt;kgbu\343\201\256\343\203\226\343\203\203\343\202\257\343\203\236\343\203\274\343\202\257&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; &amp;lt;link rel="alternate" type="text/html" href="http://b.hatena.ne.jp/kgbu/" /&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;...to be continued&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-2625339505803407161?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/2625339505803407161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/wsse-on-hatena-by-erlang.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/2625339505803407161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/2625339505803407161'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/wsse-on-hatena-by-erlang.html' title='WSSE on Hatena by Erlang'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-5203120586568840274</id><published>2009-02-12T05:14:00.003+09:00</published><updated>2009-02-12T05:19:11.153+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang test'/><title type='text'>Web service checker by Erlang</title><content type='html'>web assertion checker by Erlang&lt;br&gt;&lt;br&gt;major functionalities&lt;br&gt;&lt;br /&gt;Here is my initial idea.&lt;br&gt;&lt;br /&gt;&lt;br&gt;Multi-process test-driver : Erlang's multi-processing feature fits&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Root process checks test-completion and report summary&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; page-transition =&amp;gt; inter-process communication via messages (process transition table is given by root process)&lt;br&gt;&lt;br&gt;Minimum wait for Rate limit : to save tested site, 5second minimum wait is inserted.&lt;br&gt;&lt;br&gt;State transition via : request path / cookie / Authentication (Basic|Digest) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for Identity / Secret(password, authorized keys) / Session&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; passed by Messages&lt;br&gt;&lt;br&gt;Assertion : any AND, OR combination of followings&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;equal((text|HTML docs|XHTML docs|XML docs|), state)&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DOM-equal((XHTML docs|XML docs|), state)&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Partial-DOM-equal((XHTML docs|XML docs|), DOM-mask, state)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response-Header-equal(Header, state)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Partial-Response-Header-equal(Header, Header-mask, state)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Location-equal(URL, state)&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-5203120586568840274?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/5203120586568840274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/web-assertion-checker-by-erlang.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5203120586568840274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5203120586568840274'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/web-assertion-checker-by-erlang.html' title='Web service checker by Erlang'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-1817905724656924217</id><published>2009-02-05T05:40:00.005+09:00</published><updated>2009-02-05T05:45:27.000+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Redhat'/><title type='text'>use vmstat command to know about disk access</title><content type='html'>&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:Verdana;"&gt;I love to use vmstat command to measure load of servers.&lt;/span&gt; &lt;span style="font-family:Verdana;"&gt;But, to check disk-intensive overload, usual vmstat output is not device-specific.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family: courier new;"&gt;$ vmstat 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;0  0  25924  11324   3524 135644    0    0     3    20    1    4  0  0 100  0  0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;0  1  25924  11324   3528 135640    0    0     0     6   19   33  0  0 100  0  0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;0  0  25924  11324   3532 135644    0    0     0     1   18   34  0  0 100  0  0&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;So, I looked into /proc/diskstats , but it is cryptic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;$ cat /proc/diskstats&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    0 ram0 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    1 ram1 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    2 ram2 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    3 ram3 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    4 ram4 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    5 ram5 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    6 ram6 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    7 ram7 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    8 ram8 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1    9 ram9 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1   10 ram10 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1   11 ram11 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1   12 ram12 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1   13 ram13 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1   14 ram14 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;   1   15 ram15 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt; 202    0 xvda 1900702 111759 57624068 22798740 21260401 21742422 344022684 149429332 0 25033876 172228060&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt; 202    1 xvda1 1178 2366 2 4&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt; 202    2 xvda2 2011295 57621462 43002835 344022680&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt; 253    0 dm-0 2002226 0 57550986 23818188 42992837 0 343942696 261736148 0 25033368 285554312&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt; 253    1 dm-1 8752 0 70016 102772 9998 0 79984 347408 0 16320 450180&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:78%;"&gt;   9    0 md0 0 0 0 0 0 0 0 0 0 0 0&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Then, I come back to vmstat with "-d" option. Just to see formatted information of /proc/diskstats.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;$ vmstat -d&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;disk- ------------reads------------ ------------writes----------- -----IO------&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;       total merged sectors      ms  total merged sectors      ms    cur    sec&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram0       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram1       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram2       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram3       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram4       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram5       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram6       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram7       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram8       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram9       0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram10      0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram11      0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram12      0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram13      0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram14      0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;ram15      0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;xvda  1900690 111759 57623940 22798620 21260398 21742409 344022556 149429324      0  25033&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;dm-0  2002214      0 57550858 23818068 42992821      0 343942568 261736088      0  25033&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;dm-1    8752      0   70016  102772   9998      0   79984  347408      0     16&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:78%;"  &gt;md0        0      0       0       0      0      0       0       0      0      0&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-1817905724656924217?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/1817905724656924217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/use-vmstat-command-to-know-about-disk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1817905724656924217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1817905724656924217'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/02/use-vmstat-command-to-know-about-disk.html' title='use vmstat command to know about disk access'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-5844686750445238107</id><published>2009-01-24T15:31:00.003+09:00</published><updated>2009-01-24T15:36:02.313+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Why linux filesystems (ext2, ext3) get slow when &gt;1K files in a directory</title><content type='html'>I know that, but don't know in detail.&lt;br /&gt;(this article is English version of &lt;a href="http://d.hatena.ne.jp/kgbu/20080619/1213853868"&gt;my Japanese blog&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Especially, ls command is very slow, so I thought readdir system call is too slow.  But, I was WRONG.&lt;br /&gt;Overhead is in ls command's algorithm.&lt;br /&gt;Mailing List article in linux-users ( &lt;a href="http://his.luky.org/ML/linux-users.6/msg08919.html"&gt;http://his.luky.org/ML/linux-users.6/msg08919.html &lt;/a&gt;) taught me that.&lt;br /&gt;ls command collects information not only the list of filenames but also each file's attributes (size, permission.. etc.).&lt;br /&gt;So, ls command checks attributes for each files. That takes long time.&lt;br /&gt;&lt;br /&gt;In my application, only the list of filenames is required. So, readdir system call just works fine.&lt;br /&gt;Here is the sample code (almost the same as &lt;a href="http://yo-linux.com/cgi-bin/man2html?cgi_command=readdir%282%29"&gt;manpage of readdir&lt;/a&gt;!)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="seemore"&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/char"&gt;char&lt;/a&gt; *argv[])&lt;br /&gt;{&lt;br /&gt;  &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/DIR"&gt;DIR&lt;/a&gt; *dirp;&lt;br /&gt;  struct dirent *dp;&lt;br /&gt;&lt;br /&gt;  if (argc != 2 ) {&lt;br /&gt;      printf("coundn't open &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/dir"&gt;dir&lt;/a&gt;\n");&lt;br /&gt;      return;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  if ( (dirp = opendir(argv[1]) ) == NULL) {&lt;br /&gt;      printf("coundn't open &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/dir"&gt;dir&lt;/a&gt;\n");&lt;br /&gt;      return;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  do {&lt;br /&gt;      errno = 0;&lt;br /&gt;      if ( (dp = &lt;span class="highlight"&gt;readdir&lt;/span&gt;(dirp) ) != NULL) {&lt;br /&gt;          (&lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/void"&gt;void&lt;/a&gt;) printf("%s\n", dp-&amp;gt;d_name);&lt;br /&gt;      }&lt;br /&gt;  } while (dp != NULL);&lt;br /&gt;&lt;br /&gt;  if (errno != 0)&lt;br /&gt;      perror("error reading directory ");&lt;br /&gt;&lt;br /&gt;  (&lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/void"&gt;void&lt;/a&gt;) closedir(dirp);&lt;br /&gt;  return(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Now, I checked the performance of readdir itself.&lt;br /&gt;In the case of over 10K files in a directory, it takes 300msec (Kernel 2.6.9-42.ELsmp: Cent OS4.4 4800 bogomips)&lt;br /&gt;Here is the result of 'strace -c'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# strace -c &lt;span class="highlight"&gt;readdir&lt;/span&gt; . &amp;gt; /dev/null&lt;br /&gt;% time     seconds  usecs/call     calls    errors syscall&lt;br /&gt;------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;80.44    0.442220          14     30821           getdents64&lt;br /&gt;19.48    0.107076           8     13018           write&lt;br /&gt;0.03    0.000149         149         1           execve&lt;br /&gt;0.01    0.000054          11         5           old_mmap&lt;br /&gt;0.01    0.000038          13         3           open&lt;br /&gt;0.01    0.000035          35         1           read&lt;br /&gt;0.01    0.000031           8         4           fstat64&lt;br /&gt;0.01    0.000030           8         4           brk&lt;br /&gt;0.00    0.000022          11         2           mprotect&lt;br /&gt;0.00    0.000014           5         3           close&lt;br /&gt;0.00    0.000013          13         1           munmap&lt;br /&gt;0.00    0.000011          11         1         1 &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/access"&gt;access&lt;/a&gt;&lt;br /&gt;0.00    0.000008           8         1           mmap2&lt;br /&gt;0.00    0.000008           8         1           fcntl64&lt;br /&gt;0.00    0.000007           7         1         1 ioctl&lt;br /&gt;0.00    0.000007           7         1           &lt;a class="keyword" href="http://d.hatena.ne.jp/keyword/uname"&gt;uname&lt;/a&gt;&lt;br /&gt;0.00    0.000003           3         1           set_thread_area&lt;br /&gt;------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;100.00    0.549726                 43869         2 total&lt;br /&gt;&lt;br /&gt;The most time-consuming system-call is getdents64. System(Disk) cache speed up the systemcall.&lt;br /&gt;If cache is full-hit, getdents64 takes only 10usecs for 1M files in a directory.&lt;br /&gt;&lt;/pre&gt;If you tried this on NFS-mounted directory, cache-effect maybe small.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-5844686750445238107?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/5844686750445238107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/whylinuxfilesystemgetslow10kfilesdirect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5844686750445238107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/5844686750445238107'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/whylinuxfilesystemgetslow10kfilesdirect.html' title='Why linux filesystems (ext2, ext3) get slow when &gt;1K files in a directory'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-1359406146812684864</id><published>2009-01-21T03:51:00.008+09:00</published><updated>2009-01-21T05:04:43.631+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang tips Linux'/><title type='text'>Fixing Makefile to install Erlang R12B-5(R12B-4) on CentOS5.2</title><content type='html'>I've noticed incompleteness in the Makefile of Erlang source-tarball package in R12B-4 version.&lt;br /&gt;To build Erlang system from the source files, under CentOS 5 environment, additional library option is required.&lt;br /&gt;&lt;br /&gt;for details, you can see  &lt;b&gt;Peter Lemenkov&lt;/b&gt;'s post to erlang-questions ML.&lt;br /&gt;http://www.erlang.org/pipermail/erlang-questions/2008-August/037237.html&lt;br /&gt;&lt;br /&gt;or, if you are can read Japanese, refer my blog in Japanese.&lt;br /&gt;http://d.hatena.ne.jp/kgbu/20080909/1220984877&lt;br /&gt;&lt;br /&gt;Here is the patch for the&lt;span style="font-family: monospace;"&gt;  &lt;span style="font-family: Georgia,serif;"&gt;"&lt;/span&gt;&lt;/span&gt;lib/ssl/c_src/Makefile.in".&lt;br /&gt;http://cvs.fedoraproject.org/viewvc/rpms/erlang/EL-5/otp-ssl_missing_libs.patch?view=auto&amp;amp;revision=1.1&lt;br /&gt;&lt;br /&gt;Still the bug exists in R12B-5 version of Erlang (latest as of today).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-1359406146812684864?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/1359406146812684864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/fixing-makefile-to-install-erlang-r12b.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1359406146812684864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/1359406146812684864'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/fixing-makefile-to-install-erlang-r12b.html' title='Fixing Makefile to install Erlang R12B-5(R12B-4) on CentOS5.2'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-6912567740439983666</id><published>2009-01-17T16:44:00.008+09:00</published><updated>2009-01-17T16:54:54.303+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips linux deployment'/><title type='text'>Checkpoints　ｔo　Install　rdiff-backup</title><content type='html'>Checkpoints to install rdiff-backup (in Linux)&lt;br /&gt;&lt;br /&gt;in case you are stuck in ...&lt;br /&gt;&lt;br /&gt;1) check python-devel package installation&lt;br /&gt;2) check librsync library dependency&lt;br /&gt;3) check librsync library compile option. You may need to re-comile it with -fPIC option&lt;br /&gt;&lt;br /&gt;see. http://wiki.rdiff-backup.org/wiki/index.php/RdiffBackupWiki&lt;br /&gt;&lt;br /&gt;below, summay of operations (in my environment: Fedora Core 5, x86_64)&lt;br /&gt;(this post is English version of my &lt;a href="http://d.hatena.ne.jp/kgbu/20090116/1232085248"&gt;original blog in Japanese&lt;/a&gt; )&lt;br /&gt;&lt;pre class="syntax-highlight"&gt;&lt;span class="synComment"&gt;# rpm -aq | grep python-devel&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# yum install python-devel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# rpm -aq | grep &lt;/span&gt;librsync&lt;br /&gt;&lt;span class="synComment"&gt;# wget http://downloads.sourceforge.net/librsync/librsync-0.9.7.tar.gz?modtime=1097439809&amp;amp;big_mirror=0&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# tar zxf librsync-0.9.7.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# cd librsync-0.9.7&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# ./configure&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# make AM_CFLAGS=-fPIC&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# make install&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# ldconfig&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# cd ..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.5.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# tar zxf rdiff-backup-1.2.5.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# cd rdiff-backup-1.2.5&lt;/span&gt;&lt;br /&gt;&lt;span class="synComment"&gt;# python setup.py install&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-6912567740439983666?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/6912567740439983666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/checkpointstoinstallrdiff-backup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6912567740439983666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/6912567740439983666'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/checkpointstoinstallrdiff-backup.html' title='Checkpoints　ｔo　Install　rdiff-backup'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6187687950281822158.post-8461216202104090096</id><published>2009-01-07T05:18:00.003+09:00</published><updated>2009-01-07T05:21:52.129+09:00</updated><title type='text'>first post</title><content type='html'>This is my first post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here, I'll make some memoises/frakes of monky-typing codes.&lt;br /&gt;So, please look over them if you have much spare time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6187687950281822158-8461216202104090096?l=ocaokgbu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocaokgbu.blogspot.com/feeds/8461216202104090096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/8461216202104090096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6187687950281822158/posts/default/8461216202104090096'/><link rel='alternate' type='text/html' href='http://ocaokgbu.blogspot.com/2009/01/first-post.html' title='first post'/><author><name>ocaokgbu</name><uri>http://www.blogger.com/profile/15004182602141263968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_2SuYb12ZFt8/SZof2a7PjUI/AAAAAAAAABA/KlHWq4bGMPE/s1600-R/9d0dd61f1da07f8d9e97fe772af213ea.jpg'/></author><thr:total>0</thr:total></entry></feed>
