<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5762104224722516841</atom:id><lastBuildDate>Sat, 03 Mar 2012 23:48:33 +0000</lastBuildDate><category>TOEFL iBT</category><category>web application</category><category>Unix</category><category>imasara</category><category>Background</category><category>mistake</category><category>PaaS</category><category>Zen</category><category>Titanium</category><category>English</category><category>HowTo</category><category>Review</category><category>Announce</category><category>Neta</category><category>Report</category><category>Announcement</category><category>Lecture Note</category><category>internship</category><category>presentation</category><category>programming language theory</category><category>Diary</category><category>Computational Intelligence</category><category>SoC</category><category>Git</category><category>survey</category><category>python</category><category>AI</category><category>Conference</category><category>Mac</category><category>Emulator</category><category>Language Processor</category><category>database</category><category>thinking</category><category>jQuery</category><category>miscellanea</category><category>Rails</category><category>Design</category><category>IAESTE</category><category>Racket</category><category>RePost</category><category>android</category><category>lxml</category><category>blogger</category><category>iPhone</category><category>Ruby</category><category>Django</category><category>Linux</category><category>twitter</category><category>optimization</category><category>server</category><category>EyeBot</category><category>Sports</category><category>writing</category><category>OS</category><title>しゃべれる理系</title><description>プロジェクトとモノづくりが大好きな新米フリーランサーのアレやコレや。</description><link>http://yasulab.blogspot.com/</link><managingEditor>noreply@blogger.com (yasulab)</managingEditor><generator>Blogger</generator><openSearch:totalResults>282</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blogspot/yasulab" /><feedburner:info uri="blogspot/yasulab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-3453387955386954703</guid><pubDate>Mon, 02 Jan 2012 06:18:00 +0000</pubDate><atom:updated>2012-01-02T23:18:29.590+09:00</atom:updated><title>Simple TimeKeeper for Happy New Year</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-PWsiucCxb3E/TwFCmh6I3MI/AAAAAAAABvc/8LHHsyinnRM/s1600/osscafe.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-PWsiucCxb3E/TwFCmh6I3MI/AAAAAAAABvc/8LHHsyinnRM/s400/osscafe.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
最近、某沖縄でよく使われるという &lt;a href="http://simpletimekeeper.com/"&gt;Simple TimeKeeper&lt;/a&gt; ですが、先日の大晦日、&lt;a href="http://osscafe.net/"&gt;下北沢OSSCafe&lt;/a&gt; の 「Just Do(土) It!」というイベントで、HappyNewYear な機能を実装しました。で、今日は、その後日談な話をしようかと。&lt;br /&gt;
&lt;br /&gt;
この新機能では、URLの末尾に次の年を入力すると、上の写真のように、コントロールパネルが消えて、謎のカウントダウンが始まります。ナニを隠そう、このカウントダウンが０になると、"HappyNewYear #{new_year}!!" って感じになるわけですね。&lt;br /&gt;
&lt;br /&gt;
例えば、今年の場合は、今年の12月31日に http://simpletimekeeper.com/#2013 にアクセスすれば、カウントダウンが始まります。ただ、12月31日以外の日に上述のURLにアクセスしてしまうと、&lt;a href="http://d.hatena.ne.jp/h6n/20111213/1323801216"&gt;Set Time by URL&lt;/a&gt;&amp;nbsp;という、URLで時間をセットする機能が代わりに動きます。すなわち、2013秒がセットされてしまいます。ご注意を。&lt;br /&gt;
&lt;br /&gt;
「気付いたらうっかり年を越えてしまった...」なんてことにならないように、今年の年末はこの機能を使って、迫り来る HappyNewYear な雰囲気を存分に味わいましょう！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみにこの Simple TimeKeeper、次のような感じで、iPadでも何でも、&lt;a href="http://simpletimekeeper.com/"&gt;http://simpletimekeeper.com/&lt;/a&gt; にさえアクセス出来れば、うまく表示できます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-N9rXicDRaW4/TwFFZYdcW2I/AAAAAAAABvo/4ECoFBNgv7Y/s1600/stk2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-N9rXicDRaW4/TwFFZYdcW2I/AAAAAAAABvo/4ECoFBNgv7Y/s320/stk2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
iPadでも,&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-nLX3xI9kNaw/TwFFw27CaZI/AAAAAAAABwU/_tv2v0JXSJo/s1600/stk3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-nLX3xI9kNaw/TwFFw27CaZI/AAAAAAAABwU/_tv2v0JXSJo/s320/stk3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
大型 Screen でも,&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-JiT-cRY4iRI/TwG8hQyckTI/AAAAAAAABwg/9ThgGHBC_iY/s1600/tv.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-JiT-cRY4iRI/TwG8hQyckTI/AAAAAAAABwg/9ThgGHBC_iY/s320/tv.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
テレビでも,&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-gmd19IiOVzI/TwFFcnMDnNI/AAAAAAAABvw/jtp3gE5qDDQ/s1600/stk-error.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-gmd19IiOVzI/TwFFcnMDnNI/AAAAAAAABvw/jtp3gE5qDDQ/s320/stk-error.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
MacBook でも,&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
何でも動きます！&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;span style="font-size: xx-small;"&gt;ただ、放置していると時差が発生してしまったりも... orz&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;span style="font-size: xx-small;"&gt;更新すれば直りますが、まぁデバッグするのは今年の大晦日ですかね。&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
最後に、使用例のご紹介。この Simple TimeKeeper の HappyNewYear 機能を使って、下北沢OSSCafe な方々と、こんな感じで盛り上がることが出来ました。今年の年末は是非使ってみて下さい。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-b4ea950282cdce1d" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;
&lt;param name="bgcolor" value="#FFFFFF"&gt;
&lt;param name="allowfullscreen" value="true"&gt;
&lt;param name="flashvars" value="flvurl=http://v2.nonxt6.googlevideo.com/videoplayback?id%3Db4ea950282cdce1d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1333388412%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2516E5C5F93E4BF067E329B59DA34BA6A6C87E05.3F6A96FF1751B0B56FA81965A70997C217DA93C7%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db4ea950282cdce1d%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dfwg1V9oDuow75dJ29WaAz_m_gLw&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;
&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"
width="320" height="266" bgcolor="#FFFFFF"
flashvars="flvurl=http://v2.nonxt6.googlevideo.com/videoplayback?id%3Db4ea950282cdce1d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1333388412%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2516E5C5F93E4BF067E329B59DA34BA6A6C87E05.3F6A96FF1751B0B56FA81965A70997C217DA93C7%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db4ea950282cdce1d%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dfwg1V9oDuow75dJ29WaAz_m_gLw&amp;autoplay=0&amp;ps=blogger"
allowFullScreen="true" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span style="font-size: xx-small;"&gt;全然ギリギリセーフではない件 orz orz orz。&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span style="font-size: xx-small;"&gt;録画に夢中で完全に機を逸しました。&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
今年の年末...ってのは大分遠い話ですが、本来の機能は勉強会などでのタイムキーピングなので、そちらの機能も是非是非。&lt;br /&gt;
&lt;br /&gt;
以上、後日談な話でした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
P.S.&lt;br /&gt;
&lt;br /&gt;
ソースコード（もとい、う◯コード）は GitHub に上がっているので、興味あればコチラも是非。特に、「UIを改善してもいいよー」という方がいれば、是非僕の方までお声かけ下さい。&lt;br /&gt;
&lt;br /&gt;
GitHub - SimpleTimeKeeper&lt;br /&gt;
&lt;a href="http://github.com/yasulab/simpletimekeeper"&gt;github.com/yasulab/simpletimekeeper&lt;/a&gt;&lt;br /&gt;
&lt;div id="fastlookup_top" style="display: none;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-3453387955386954703?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2012/01/simple-timekeeper-for-happy-new-year.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-PWsiucCxb3E/TwFCmh6I3MI/AAAAAAAABvc/8LHHsyinnRM/s72-c/osscafe.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-7897585744201436109</guid><pubDate>Sat, 24 Dec 2011 11:09:00 +0000</pubDate><atom:updated>2012-01-18T14:02:34.008+09:00</atom:updated><title>Fluxflex＋Dozens＋ムームードメインで、独自ドメインなWordPress製HPをサクッと作ってみた</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div style="text-align: -webkit-auto;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-D4W2buOBX6M/TvW_7JbUt4I/AAAAAAAABvQ/xJ2ENDTjf6s/s1600/Screen+shot+2011-12-24+at+21.04.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-D4W2buOBX6M/TvW_7JbUt4I/AAAAAAAABvQ/xJ2ENDTjf6s/s400/Screen+shot+2011-12-24+at+21.04.36.png" width="332" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
突然ですが、沖縄の（変態）エンジニアが集う eXtreme HAGO というLT大会の公式HPを作りました！&lt;br /&gt;
&lt;br /&gt;
eXtreme HAGO&lt;br /&gt;
&lt;a href="http://xhago.net/"&gt;http://xhago.net/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
せっかくHP作ったので、沖縄の&lt;strike&gt;（禁則事項です）&lt;/strike&gt;っぷりを、このブログで紹介したい...気持ちは山々なんですが、そういう紹介は&lt;a href="http://xhago.net/"&gt;公式HP&lt;/a&gt;に任せておいて、この記事では、そのサイトを作るまでにやったことについて話します。具体的には、&lt;a href="http://wordpress.com/"&gt;WordPress&lt;/a&gt; + &lt;a href="http://www.fluxflex.com/"&gt;Fluxflex&lt;/a&gt; + &lt;a href="http://dozens.jp/"&gt;Dozens&lt;/a&gt;&amp;nbsp;+ &lt;a href="http://muumuu-domain.com/"&gt;ムームードメイン&lt;/a&gt;を使って、独自ドメインのWordPress製HPを作る過程について、サクッとまとめます。&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;注１：以下の"xhago" という文字列は、自分のプロジェクト名に適宜変換して下さい。&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;注２：各サービスの登録手続きなどは省力します。全部説明すると長いので。&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0. 前提&lt;br /&gt;
- fluxflex / dozens / ムームードメインに Sign Upしてること（当然）&lt;br /&gt;
- fluxflexの Casual プラン以上の契約をしていること。（じゃないと独自ドメインが使えない）&lt;br /&gt;
- 1,000円ぐらい（ドメイン取得代）を持っていること。&lt;strike&gt;（世の中お金です）&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. &lt;a href="http://fluxflex.com/"&gt;fluxflex&lt;/a&gt; でプロジェクト（"xhago"）を作成します。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-RWrGGOKlshU/TvW741tsYmI/AAAAAAAABuU/FUa5Jy6lcHo/s1600/Screen+shot+2011-12-24+at+20.47.19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://2.bp.blogspot.com/-RWrGGOKlshU/TvW741tsYmI/AAAAAAAABuU/FUa5Jy6lcHo/s640/Screen+shot+2011-12-24+at+20.47.19.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
2. &lt;a href="http://www.fluxflex.com/"&gt;fluxflex&lt;/a&gt; の App Garage から、WordPress(jp) をポチって、"xhago"をターゲットにする。&lt;br /&gt;
&lt;br /&gt;
&lt;span id="goog_1334897006"&gt;&lt;/span&gt;&lt;span id="goog_1334897007"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-hnW_HkoW-iM/TvWzHE2WGuI/AAAAAAAABtM/jY4RlRK4pHI/s1600/Screen+shot+2011-12-24+at+20.08.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-hnW_HkoW-iM/TvWzHE2WGuI/AAAAAAAABtM/jY4RlRK4pHI/s320/Screen+shot+2011-12-24+at+20.08.43.png" width="291" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-AyUt0UczERc/TvW8ZCaCWyI/AAAAAAAABug/-GiAoYn4GCI/s1600/Screen+shot+2011-12-24+at+20.49.37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="306" src="http://4.bp.blogspot.com/-AyUt0UczERc/TvW8ZCaCWyI/AAAAAAAABug/-GiAoYn4GCI/s640/Screen+shot+2011-12-24+at+20.49.37.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. &lt;a href="http://muumuu-domain.com/"&gt;ムームードメイン&lt;/a&gt;から、独自ドメイン（例："xhago.net"）を購入。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-g5JEqDDtORQ/TvW2DEWbrQI/AAAAAAAABtk/6ZmiLNjjYtA/s1600/Screen+shot+2011-12-24+at+20.22.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-g5JEqDDtORQ/TvW2DEWbrQI/AAAAAAAABtk/6ZmiLNjjYtA/s320/Screen+shot+2011-12-24+at+20.22.28.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
＊&lt;a href="http://www.xhago.net/"&gt;xhago.net&lt;/a&gt; は既に僕が購入したので、登録出来ません。&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
4. 言われた通りに登録手続きを行い、「ドメイン取得」まで進む。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. 「ドメイン取得」時の、ネームサーバを設定する画面で、次のように設定。他は適当に。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-5uqH3Ld2WRw/TvW22werF1I/AAAAAAAABtw/wBMAmWozqQY/s1600/Screen+shot+2011-12-24+at+20.25.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://1.bp.blogspot.com/-5uqH3Ld2WRw/TvW22werF1I/AAAAAAAABtw/wBMAmWozqQY/s320/Screen+shot+2011-12-24+at+20.25.43.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
（上記は、世界に４つ点在するという伝説の&amp;nbsp;Dozens ネームサーバです。&lt;strike&gt;四天王？&lt;/strike&gt;）&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
6. &lt;a href="http://www.fluxflex.com/"&gt;fluxflex&lt;/a&gt; から"xhago" -&amp;gt; Admin-&amp;gt; Domain にアクセスし、取得した独自ドメイン名を入力。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-hnvDSuWCjgQ/TvW1IfXEi3I/AAAAAAAABtY/eGFrv3Romlk/s1600/Screen+shot+2011-12-24+at+20.15.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" src="http://3.bp.blogspot.com/-hnvDSuWCjgQ/TvW1IfXEi3I/AAAAAAAABtY/eGFrv3Romlk/s640/Screen+shot+2011-12-24+at+20.15.20.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
7. "Update" をクリックして、出て来た CNAME をメモります。&lt;br /&gt;
&lt;br /&gt;
* "Verify Now"は、ここでは一旦無視します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. &lt;a href="http://dozens.jp/"&gt;Dozens&lt;/a&gt; にログインして、コントロールパネルから独自ドメインを入力。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-sU8Xo53tGDg/TvW5OZPtTMI/AAAAAAAABt8/OeIvK9OZS6w/s1600/Screen+shot+2011-12-24+at+20.35.49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" src="http://3.bp.blogspot.com/-sU8Xo53tGDg/TvW5OZPtTMI/AAAAAAAABt8/OeIvK9OZS6w/s640/Screen+shot+2011-12-24+at+20.35.49.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
9. "xhago.net" -&amp;gt; "Add a record"に進み、次のように設定。"CONTENT"はさっきメモったヤツに置換して下さい。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-5fzD0uKn74g/TvW59tS1ufI/AAAAAAAABuI/4jLWN32VfM4/s1600/Screen+shot+2011-12-24+at+20.37.45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="114" src="http://3.bp.blogspot.com/-5fzD0uKn74g/TvW59tS1ufI/AAAAAAAABuI/4jLWN32VfM4/s640/Screen+shot+2011-12-24+at+20.37.45.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. &lt;a href="http://www.fluxflex.com/"&gt;fluxflex&lt;/a&gt; に戻り、さっき無視した"Verify Now"をクリックして、"Verified"となったら成功。&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;追記：TTLが7,200秒になっているため、場合によっては"failed"になることもあります。その場合は、１時間ほどおいてから再度お試し下さい。それでも"failed"になる場合は、もう一度設定した項目をご確認下さい。&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11.最後に、取得した独自ドメインのURL（"www.xhago.net"）アクセスし、WordPressの画面が出て来たらOKです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
とまぁ、こんな感じでサクッと独自ドメインのWordPress製HPが作れます。世の中便利になりましたねー。&lt;br /&gt;
あとは、WordPressを使って、煮るなり焼くなり好きにして頂ければよいかと。&lt;br /&gt;
&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/5762104224722516841-7897585744201436109?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/12/fluxflexdozenswordpresshp.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-D4W2buOBX6M/TvW_7JbUt4I/AAAAAAAABvQ/xJ2ENDTjf6s/s72-c/Screen+shot+2011-12-24+at+21.04.36.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-2442540436771724269</guid><pubDate>Fri, 23 Dec 2011 03:45:00 +0000</pubDate><atom:updated>2011-12-23T13:07:14.131+09:00</atom:updated><title>Xv6 Commentary の Scheduler の章をオレオレ翻訳してみた</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-EilwZuWZVmg/TvP7SxEh8eI/AAAAAAAABss/ggKs8n7L7LA/s1600/Screen+shot+2011-12-23+at+12.53.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="121" src="http://3.bp.blogspot.com/-EilwZuWZVmg/TvP7SxEh8eI/AAAAAAAABss/ggKs8n7L7LA/s320/Screen+shot+2011-12-23+at+12.53.08.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
最近よくお世話になっている&lt;a href="http://www.osscafe.net/"&gt;下北沢OSSCafe&lt;/a&gt;で、なにやら&lt;a href="http://www.facebook.com/events/196497697099874/"&gt;Smooth CoffeeScriptの翻訳プロジェクト&lt;/a&gt;という、とても面白そうなプロジェクトが走っているみたいです。「すげぇ！僕も参加してぇ！」というわけで、その勢いに追従して（？）、１年前ぐらいに僕がオレオレ翻訳した &lt;a href="http://pdos.csail.mit.edu/6.828/2011/xv6/book-rev6.pdf"&gt;xv6 commentary&lt;/a&gt;&amp;nbsp;の Scheduler の章を公開します。ちなみにこの xv6 とは、教育用のOSで、MIT の強者どもが、OSの授業のためだけに作ったという伝説の一品です。ソースコードは約1万行ありますが、コメントやらなんやらが色々挿入されているので、実際のところは1万行未満です（な、なんだってーΩΩΩ）。&lt;br /&gt;
&lt;br /&gt;
ただ、言い訳ですが、元々は誰かに見せるつもりではなかったので、翻訳は結構適当です。また、&lt;a href="http://pdos.csail.mit.edu/6.828/"&gt;xv6&lt;/a&gt; も毎年アップデートされてるみたいなので、可能であれば原本を見た方が良いと思います。とまぁ、そんな状態ではありますが、それでも参考になれば幸いです。ライセンスは&lt;a href="http://ja.wikipedia.org/wiki/MIT_License"&gt;MITライセンス&lt;/a&gt;だそうです。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href="https://docs.google.com/Doc?docid=0AWFvmcJSggmCZGd0eDl0a3hfMjM1ZjhqZmo3ZGQ&amp;amp;hl=en_US"&gt;Xv6 - Scheduler オレオレ翻訳, Google Docs&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/yasulab/xv6-commentary-jp"&gt;GitHub版&lt;/a&gt; (勢いで repos も作ってみたでござる.）&lt;br /&gt;
&lt;br /&gt;
上記のリンクはいずれも"Allow anyone to edit"な状態なので、一応、現状の Snapshot を以下にコピペしておきます。ご参考（になるのか？）まで。&lt;br /&gt;
&lt;br /&gt;
追記：&lt;br /&gt;
さっきちょっと確認してみたところ、さっそく章構成やらなんやらが変わってました。５章ではなく４章になってて、タイトルも"Scheduling"になってます。しかも、僕が読んでたときよりもっと図解が多くなってる！ということで、やっぱし英語読める人とかは原本を読んで下さいね。&lt;br /&gt;
&lt;br /&gt;
以下、オレオレ翻訳&lt;br /&gt;
=======================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chapter 5&lt;br /&gt;
&lt;br /&gt;
[Scheduling]&lt;br /&gt;
&lt;br /&gt;
OSは、実際に持っているプロセッサの数よりも多くのプロセスを走らせているかのように見える。プロセス間でプロセッサを、タイムシェアするためには、いくつかの機構が必要である。一般的なアプローチは各プロセスに仮想プロセッサを割当て、OSが仮想プロセッサを多重化させて１つの物理プロセッサに割り当てることである。&lt;br /&gt;
&lt;br /&gt;
Xv6は、複数のプロセスを並列に実行するための機構を持っている。もし二つの異なったプロセスが１つの物理CPUを競合しているとき、Xv6はその２つのプロセスを多重化する。そして、実行プロセスと実行待ちプロセスを、１秒間に複数回スイッチさせている。Xv6は多重化を用いて、各プロセスがそれぞれ１つのCPUを独占させているかのように振る舞っている。これは、Xv6がメモリアロケーターと　HWセグメンテーションを用いて各プロセスにメモリを割り当てたときと似ている。&lt;br /&gt;
&lt;br /&gt;
多重化を実装するためには、いくつかの課題を乗り越えなくては成らない。１つ目は、どうやってあるプロセスと、他のプロセスをスイッチさせるか、である。Xv6はコンテキストスイッチの標準的なメカニズムを使用している。そのメカニズムはシンプルであるが、OSの中では最も難解のコードである。２つ目は、どうやって透過的にコンテキストスイッチを行うか、である。Xv6はタイマ割り込みを用いてコンテキストスイッチを行うという、標準的なテクニックを用いている。３つ目は、プロセスが並列に走るかもしれない、ということである。これによって発生する競合には、ロック機構を用いて対処している。４つ目は、プロセスがその処理を終えたとき、そのプロセスは他のプロセスと共に多重化することができない、ということである。プロセスを消去することは容易ではない。プロセスは自分自身を消去できない。なぜなら、そのプロセスを消去するためには、そのプロセスを実行しなければならないからである。Xv6はこういった問題に対して、出来るだけ直接的な方法を用いて解決しようと試みている。しかしながら、結果的に出来上がったコードは、ややトリッキーである。&lt;br /&gt;
&lt;br /&gt;
一度多重化されたプロセスが実行されると、Xv6はその実行プロセスと他のプロセスとを協調させなくてはならない。しばしば、あるプロセスは、他のプロセスの何らかのアクションの実行が終わるのを待つことがある。その処理が終わったかどうかを繰り返しチェックするために、CPUを無駄に浪費することは無駄である。従って、Xv6はプロセスにsleepという機構を持たせて、他プロセスのある処理が終わるまで眠らせることが出来る。また、他のプロセスは、眠っているプロセスを起こすことが出来る。ただし、プロセスは並列に実行されるため、眠っているプロセスを起こし忘れる危険性がある。そういった問題と解決策の例として&lt;br /&gt;
、本チャプターでは、pipeの実装についても触れている。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Code: Scheduler]&lt;br /&gt;
２章では、ユーザスペースにおけるスケジューラについて俯瞰した。本章では、スケジューラのもっと深い部分について触れてみよう。各プロセスは、ブート時にmpmain()を走らせている。mpmain()の最後部では、scheduler()を呼び出している(1263)。&lt;br /&gt;
&lt;br /&gt;
scheduler()は単純なループを実行している(1908)。つまり、(1)次に走らせるプロセスを探し、(2)そのプロセスが止まるまで実行し続ける、ことである。このループの最初部では、scheduler()はsti()を用いて明示的に割り込みを許可している(1914)。これにより、もしHW割込みが処理されるの待っているような場合でも、スケジューラのCPUは、HW割込みを先に処理出来るようになる。その後、スケジューラはプロセステーブルの中から実行可能なプロセスを探す。実行可能なプロセスとは、"p-&amp;gt;state == RUNNABLE"となるプロセスのことである。スケジューラが実行可能なプロセスを発見すると、現在のプロセスを変数cpに格納する。その後、スケジューラはusegment()を用いてユーザセグメントを更新し、そのプロセスの状態をRUNNINGにセットする。最後に、swtch()を呼ぶことで、そのプロセスの実行を開始する(1922-1928)。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Code: Context Switching]&lt;br /&gt;
Xv6の各プロセスはkernel stackとregister setを持っている(2章参照)。各CPUはkernel stackを持っていて、スケジューラを走らせるときにそのkernel stackを用いる。swtch()はスケジューラのコンテキスト情報(stack + register)を保存する。そして、現在のプロセスのコンテキスト情報と、次に実行するプロセスのコンテキスト情報とをスイッチする。プロセスがCPUを手放すとき、プロセスはswtch()を呼び出して自身のコンテキスト情報を保存し、returnを用いてスケジューラにコンテキスト情報を返す。各コンテキスト情報はstruct context *よって宣言されている。つまり、関係のある情報の構造体に対するポインタである。swtch()は２つの引数を取る。struct context **oldと、struct context *newである。swtch()は現在のコンテキスト情報を保存し、ポインタをoldコンテキストに格納する。そして、newによって与えられた新たなコンテキスト情報を復元する。&lt;br /&gt;
&lt;br /&gt;
スケジューラのswtch()の振る舞いを追う代わりに、まずユーザプロセスがどのように復元されるかを追ってみよう。私たちは、３章で割り込み処理の末端でtrap()がyield()を呼び出す様子は理解した。yield()は、swtch()を用いて現在のコンテキスト情報をcp-&amp;gt;contextに格納するsched関数を呼び出す。そして、スケジューラのコンテキストを情報を、以前保存されたc-&amp;gt;contextの状態にスイッチさせる(1967)。&lt;br /&gt;
&lt;br /&gt;
swtch()は、eaxレジスタとedxレジスタを読み込むことで開始する(2202, 2209-2210)。swtch()は、swtch()がスタックポインタを変更する前に、この操作を行わなければ成らない。そして、espレジスタを通して引数にアクセス出来ないようにする。そして、swtch()はレジスタの状態をプッシュし、現在のスタック上にコンテクスト情報の構造体を生成する。呼び出し元が保存するレジスタは、保存される必要がある。つまり、x86の慣習により、ebp,ebx,esi,ebp, そして, espレジスタを保存する必要がある。swtch()は最初の４つのレジスタを明示的にプッシュする(2213-2216)。struct context*は*oldに書かれているため(2219)、swtch()は暗黙的にespレジスタを保存する。また、さらにもう１つ重要なレジスタが存在する。それは、eipというプログラムカウンタである。eipはswtch()を呼び出した命令の場所が保存されている。そして、その命令の場所は、スタックに置ける、ebpレジスタの丁度真上にある。古いコンテキスト情報を保存したら、swtch()は新しいコンテキスト情報の復元の準備を行う。swtch()は、新しいコンテキスト情報を指すポインタを、スタックポインタに移動させる(2220)。新しいスタックは、swtch()が先ほど使っていた古いスタックと同じフォームを持っている。新しいスタックは、swtch()を呼び出す前までは、古いスタックであった。つまり、swtch()は、新しいコンテキスト情報を復元するために、シーケンスを逆転させることが出来る。swtch()はedi,esi,ebx,ebpレジスタの情報をポップし、そして、返り値として返す(2223-2227)。swtch()はスタックポインタを変更し終わったため、各レジスタの値は復元され、戻されたアドレスには新しいコンテキスト情報がある。&lt;br /&gt;
&lt;br /&gt;
私たちの用いる例では、sched()は、c-&amp;gt;contextとスイッチさせるためにswtch関数を呼び出した。c-&amp;gt;contextとは、各CPUが持つスケジューラのコンテキスト情報である。その新しいコンテキスト情報は、scheduler()のswtch関数の呼び出しによって、保存される(1928)。私たちが追っているswtch関数がreturnされるとき、swtch関数は、sched()ではなく、scheduler関数にreturnされる。そして、スタックポインタは、initproc()のkernel stackではなく、スケジューラのスタックを指すことになる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Code: Scheduling]&lt;br /&gt;
最後のセクションとして、swtch()の低レベルの詳細を見てみよう。具体的には、swtch()の、プロセスからスケジューラまでの振る舞いと、スケジューラからプロセスに戻ってくるまでの振る舞いを見てみよう。Xv6の慣習として、CPUを手放したいプロセスは、必ずプロセステーブルのptable.lockに鍵をかけなくてはならない。また、取得したロックは必ず解放されなければならない。次に、自分自身の状態(cp-&amp;gt;state)を必ず更新し、最後にsched関数を呼び出さなくてはならない。yield関数は、この慣習に従っている(1973)。つまり、sleep()とexit()を実行している。これらの関数は後で見ることにしよう。sched()は自分たちの状況と、その予想される結果に対して、二重のチェックを行っている。というのも、ロックが取得されてからは、CPUは、割り込み不許可の状態で動作しているからである。最後に、sched関数はswtch()を呼び出し、現在のコンテキスト情報をcp-&amp;gt;contextに格納している。そして、スケジューラのコンテキスト情報をc-&amp;gt;contextにスイッチさせている。swtch()は、スケジューラのスタック情報を返す。これは、スケジューラのswtch関数がスケジューラのスタック情報を返す状況に似ている。スケジューラはforループを繰り返し行い、実行可能状態のプロセスを探す。そして、スイッチを行う。スケジューラはこれらのサイクルを繰り返す。&lt;br /&gt;
&lt;br /&gt;
私たちはXv6がswtch関数の呼び出しを跨いでptable.lockが取得されるのを見てきた。つまり、swtch関数を呼び出す関数は必ずロックを取得していなければならない。そして、ロックのコントロールはスイッチ後のコードを通る。この関数は、一般的なロック機構とは異なる。ロック機構の典型的な慣習は、ロックを取得したスレッドが、そのロックの解放する責任を持つことである。これにより、正しく動作していることを簡単に確認することが出来る。というのも、コンテキストスイッチは、典型的な慣習を破る必要がある。なぜなら、各プロセスの構造体において、ptable.lockは、stateとcontextのフィールドを保護する必要があるからである。ロック機構を用いない場合、コンテキストスイッチ中に、プロセスがyield関数を呼び出す可能性がある。つまり、プロセスの状態をRUNNABLEにして、CPUを手放すためのswtch()を呼び出す前に、異なるCPUがswtch関数を用いてそのプロセスを実行する危険性がある。他のCPUがswtch関数を呼び出すことで、古いコンテキスト情報を使う可能性がある。また、ロック機構を用いない状態では、２つのCPUが同じスタックを同時に使う危険性もある。そして、いずれの状態も正しくない。&lt;br /&gt;
&lt;br /&gt;
この問題を回避するために、Xv6は、プロセッサを解放するスレッドがptable.lockを取得する、という慣習に従っている。そして、そのスレッドが、プロセッサが次に解放するロックを取得する。この慣習を簡潔にするため、スレッドは、sched関数の中で常にプロセッサを手放すようにしてる。これにより、もしあるスレッドが、Xv6がスレッド間をスイッチする部分の行をプリントアウトしている場合、次の簡単なパターンを観測することが出来るだろう(1928,1967,1928,1967などなど)。様式化されたスレッド間スイッチングが起こるプロシージャは、ときどき、対応する２つのco-routinesを参照している。例えば、sched()とscheduler()は、それぞれが互いに参照し合うco-routinesである。&lt;br /&gt;
&lt;br /&gt;
新しいプロセスにスイッチするためのスケジューラのswtch()が、sched関数の中で終わらないケースが存在する。私たちは２章でそのケースを理解した。つまり、新しいプロセスが最初にスケジュールされたとき、そのプロセスはforkret()によって始まる(1984)。forkret()は、ptable.lockを解放を用いて、xv6の慣習に従うためだけのために存在している。それ以外の場合では、新しいプロセスはtrapret()によって始まる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Sleep and Wakeup]&lt;br /&gt;
&lt;br /&gt;
ロックは、CPUとプロセスが互いに干渉することを回避するのに役立ちます。また、スケジューリングは、プロセスがCPUを共有するときに役立ちます。しかしながら、今までの内容には、プロセス間の通信を簡単にする抽象化機構はありません。Sleep/wakeup機構は、あるプロセスが何らかのイベントを待つために眠り、そのイベントが発生したら他プロセスがそのプロセスを起こすという機構を用いることで、その穴を埋めてくれます。&lt;br /&gt;
&lt;br /&gt;
具体的な例を見るために、シンプルなproducer/consumerのキューを見てみましょう。そのキューは、あるプロセスが、他のプロセスに対して0でないポインタを送ることを許可します。もしたった１つのsenderとreceiverしかいなく、また、それぞれが別々のCPUで実行されている場合、次の実装は正しいと言えるでしょう。&lt;br /&gt;
&lt;br /&gt;
struct q {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; void *ptr;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void* send(struct q *q, void *p){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while(q-&amp;gt;ptr != 0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; q-&amp;gt;ptr = p;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void* recv(struct q *q){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; void *p;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while((p = p-&amp;gt;ptr) == 0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; q-&amp;gt;ptr = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; return p;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
send()は、キューが空になるまで(ptr == 0になるまで)ループする。その後、send()はポインタpをキューの中に置く。recv()はキューが空でない間、ポインタpを外に取り出す。２つの異なったプロセスが走るとき、send()とrecv()は、両方ともq-&amp;gt;ptrを編集する。しかしsend()は、ポインタが0であるときだけ、ポインタに書き込む。また、recv()は、ポインタが０でないときだけ、ポインタに書き込む。従って、send()とrecv()は相互にステップを踏むわけではない。&lt;br /&gt;
&lt;br /&gt;
上述の実装は正しいかもしれないが、非常に高価である。もしsenderが時々send()する場合、receiverはポインタの値が変わるまでの間、常にwhileループでスピンし続けなくてはいけなくなるだろう。もしsend()がポインタへ到達したことをreceiverに対して通知する何らかの方法があったのだとしたら、receiverのCPUは、もっと生産的な仕事をすることが出来たかもしれない。sleep()とwakeup()は、そのような機構を提供する。sleep(chan)は、wait channelと呼ばれるポインタ"chan"の上でsleepする。chanは、参照されるためではなく、アドレスとして使われるため、chanはどんな種類のポインタであっても良い。sleep()は、呼び出し元のプロセスをsleepさせ、CPUを他の仕事のために解放する。sleep()は、プロセスが再び起きるまでreturnしない。wakeup(chan)は、chanの上で眠っているプロセスがあれば、各sleep()にreturnを実行させることで、chanの上で眠っている全てのプロセスを起こす。sleep()とwakeup()の機構を使うことで、上述の実装は次のように書き換えることが出来るだろう。&lt;br /&gt;
&lt;br /&gt;
void* send(struct q *q, void *p){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while(q-&amp;gt;ptr != 0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; q-&amp;gt;ptr = p;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; wakeup(q); &amp;nbsp; &amp;nbsp;/* wake recv */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void* recv(struct q *q){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; void *p;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while((p = q-&amp;gt;ptr) == 0) &amp;nbsp; &amp;nbsp;/* (1) */&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sleep(q); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* (2) */&lt;br /&gt;
&amp;nbsp; &amp;nbsp; q-&amp;gt;ptr = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; return p;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
このコードはより効率的であるが、もはや正しくはない。なぜなら、このコードは"lost wake up"問題を起こすからである。recv()が、(1)の箇所で"q-&amp;gt;ptr == 0"であることが分かり、sleep()を呼ぼうとするとしよう。recv()がsleepする前は、send()は他のCPU上で走っている。つまり、send()がq-&amp;gt;ptrを0で無い値に書き換え、wakeupを呼びだしたとき、どのプロセスの眠っていないことが分かる。このとき、recv()は(2)の箇所でsleep()を実行するだろう。recv()はsleep()を呼び、sleepする。このとき、"lost wake up"問題が発生する。つまり、recv()は、既に0以外の値に書き換えられているポインタに対して、sleep()をして待ち続けることになる。次のsend()は、recv()がキューの中のポインタが消費されることを期待して、sleepして待ち続けるだろう。このような現象を、システムがデッドロックしたという。&lt;br /&gt;
&lt;br /&gt;
この問題の原因は、recv()がq-&amp;gt;ptr==0のときにだけsleepするという不定状態が、send()が間違ったタイミングで走ることで、侵害されることによって発生される。この不定状態を保持するためには、ロック機構を導入し、呼び出し元プロセスが眠っているときのみsleep()はロックを解放できるようにすれば良い。一度呼び出し元プロセスが再び起こされたとき、sleep()はreturnの直前でロックを取得する。次のコードは正しく、また、recvがwaitしているときも、CPUを効率的に使うことが出来る。&lt;br /&gt;
&lt;br /&gt;
struct q {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; struct spinlock lock;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; void *ptr;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void* send(struct q *q, void *p){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; lock(&amp;amp;q-&amp;gt;lock);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while(q-&amp;gt;ptr != 0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; q-&amp;gt;ptr = p;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; wakeup(q);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; unlock(&amp;amp;q-&amp;gt;lock);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void* recv(struct q *q){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; void *p;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; lock(&amp;amp;q-&amp;gt;lock);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while((p = q-&amp;gt;ptr) == 0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sleep(q, &amp;amp;q-&amp;gt;lock);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; q-&amp;gt;ptr = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; unlock(&amp;amp;q-&amp;gt;lock);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; return p;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
１つの完全な実装は、receiverが１つ前のsend()の値の消費を待っているようなsend()時においても、sleepできるようにすることだろう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Code: Sleep and Wakeup]&lt;br /&gt;
&lt;br /&gt;
Xv6におけるsleep()/wakeup()の実装を見てみよう。基本的なアイデアは、sleep関数で、カレントプロセスにSLEEPINGとマークすることである。次に、sched関数を呼び出し、プロセッサを解放する。wakup()は与えられたポインタの上で眠っているプロセスを探し、発券したらそのプロセスにRUNNABLEとしてマークする。&lt;br /&gt;
&lt;br /&gt;
sleep()は、いくつかの健全なチェックから始まる(2003)。そのチェックとは、カレントプロセスがあることと(2005-2006)、sleep()はロックを通過し終えたばかりであることである(2008-2009)。次に、sleep()はptable.lockを取得する(2018)。このとき、sleepしようとしているそのプロセスは、ptable.lockとlkを両方とも保持している。lkを保持することはcaller(e.g. recv())にとって必要なことであった。カレントプロセスは、他のどのプロセス(e.g. send())もwakeup(chan)を開始することが出来るだろう。このとき、sleep()はptable.lockを保持していて、sleep()は安全にlkを解放することが出来る。言い換えると、ある他のプロセスがwakeup(chan)を開始させたとき、wakeup()はptable.lockを取得できるまでの間、wakeup()が動くことは無い。よって、wakeup()は、sleep()を見失わないように、sleep()の実行が終了するまでの間、待たなければならない。&lt;br /&gt;
&lt;br /&gt;
やや一般的ではない複雑性も存在する。もしlsと&amp;amp;ptable.lockが同じであるとき、sleep()は、&amp;amp;ptable.lockと同様の方法でlkを取得したり、lkと同様の方法で&amp;amp;ptable.lockを解放することによって、デッドロックを起こすかもしれない。この場合、sleep()はacquireとreleaseが互いにキャンセルしてしまったり、また、完全にスキップしてしまったりすることを考えなければならない。&lt;br /&gt;
&lt;br /&gt;
sleep()がptable.lockを保持し、他のどのロックも取得していないとき、sleep()は、sleep channelを記録し、プロセスの状態を変更し、また、sched()を呼ぶことによって、プロセスをsleepさせることが出来る(2023-2025)。&lt;br /&gt;
&lt;br /&gt;
いくつかのチェックポイントを過ぎると、プロセスはwakeup(chan)を呼び出す。wakeup()はptable.lockを取得し、実際の仕事を行うwakeup1関数を呼ぶ(2053)。wakeup()関すがptable.lockを保持するということは、wakeup()がプロセスの状態を操作するという点と、ptable.lockがsleep()とwakeup()が互いに見失い合わないという点から、重要なことだと言える(wakeup1()は分離された機能である。というのも、スケジューラは、既にptable.lockを取得しているとき、wakeup()が実行する必要があるからである。この例は後で見ることにしよう。)。wakeup1()はプロセステーブルを走査する(2053)。schedulerは、適切なchanを持つSLEEPING中のプロセスを発見したとき、schedulerはそのプロセスの状態をRUNNABLEに変更する。これにより、次にschedulerが動作されるとき、schedulerは、そのプロセスが実行可能であることが分かる。&lt;br /&gt;
&lt;br /&gt;
※ 他にも、Spurious Wakeups(偽りのwakeups)という複雑な問題も存在する。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SCR輪講 後半&lt;br /&gt;
===========&lt;br /&gt;
[Code: Pipes]&lt;br /&gt;
&lt;br /&gt;
本章の序盤で私たちが使ったシンプルなキューはオモチャであった。しかし、Xv6が実際に使っているキューでは、readersとwritersを同期させるために、sleep()とwakeup()を使用している。Xv6のキューとは、pipeの実装である。私たちはpipeのためのインタフェースを０章で見た。具体的には、pipeの末端に書かれるバイトは、kernel buffer内にコピーされ、その後、そのpipeの他端から読み出す事が出来る(FIFO Queue)。今後の章では、pipeの周りにあるファイルシステムのサポートについて触れていく。本章では、pipewrite()とpiperead()の実装について見てみよう。&lt;br /&gt;
&lt;br /&gt;
各pipeはstruct pipeとして宣言される。struct pipeはlockとdataバッファを持っている。nreadとnwriteというフィールドは、バッファから読み出した／バッファに書き出したバイト数をカウントする。また、そのバッファはラップされている。つまり、buf[PIPESIZE-1]の直後に書かれている次のバイトはbuf[0]である。しかし、カウンタはラップされない。この慣習により、(nwrite == nread+PIPESIZE)という状態の満杯のバッファと、(nwrite == nread)という状態の空のバッファを見分けるときに役立つ。しかし、一方で、バッファのインデックスの際は、buf[nread]やnwriteの代わりに、buf[nread % PIPESIZE]を使わなければならない。なお、piperead関数やpipewrite関数は、別々のCPUによって同時に呼び出される可能性がある事に注意する必要がある。&lt;br /&gt;
&lt;br /&gt;
pipewrite()はpipeのロックを取得する事から始まる(5230)。ロックを取得する事により、count,dataなどの変数を保護する事が出来る。このとき、例えばpiperead()も同様にしてロックを取得しようとしたとしても、ロックを取得する事は出来ない(5251)。この場合、piperead()はロックが取得出来るまでスピンし続けるだろう(1373)。piperead()が待っている間、pipewrite()は、交互にaddr[0], addr[1], ..., addr[n-1]を書き換える動作を繰り返す(5244)。このループの間、pipewrite()はバッファを満たしていく(5236)。バッファが満杯になった場合、pipewrite()はwakeup関数を呼び出し、sleepしているreaderに対してデータが読み込み待ちであることを伝える。そして、pipewrite()は&amp;amp;p-&amp;gt;nwriteに対してsleepを行い、readerがbufferからデータを取り出すのを待つ。sleep()は、pipewrite()がsleepするプロセスの途中で、p-&amp;gt;lockを解放する。&lt;br /&gt;
&lt;br /&gt;
p-&amp;gt;lockが取得可能なとき、piperead()はp-&amp;gt;lockの取得を管理し、その後、pipeからデータを読み出す。具体的には、piperead()は(p-&amp;gt;nread != p-&amp;gt;nwrite)であることをチェックする(5256)。つまり、pipewrite()は、p-&amp;gt;nwrite == p-&amp;gt;nread+PIPESIZEのとき、sleepし始める(5236)。従って、piperead()は、forループを抜けると、pipeからデータをコピーし、コピーしたバイト数だけnreadの値をインクリメントする(5263-5267)。最初は、pipeに多くのバイトを書き込む事が可能である。よって、piperead()はwakeup関数を呼び出し、眠っているwriterを起こす。&lt;br /&gt;
&lt;br /&gt;
wakeup関数は&amp;amp;p-&amp;gt;nwriteに対して眠っているプロセスを見つけ、プロセスの状態をRUNNABLEに変更する。このとき、眠っているプロセスとは、pipewrite()を走らせていたが、bufferが満杯であるためにsleepしたプロセスのことである。&lt;br /&gt;
&lt;br /&gt;
他CPU上のスケジューラが異なるプロセスを走らせようとしている場合、pipewrite()はすぐに走り始める事は無い。代わりに、piperead()は、piperead関数を再び呼んだcaller関数に戻る。初めてpiperead()がpipe内のバッファを全て読み出したときは、(p-&amp;gt;nread == p-&amp;gt;nwrite)という条件式が成立する。その後、piperead()は、&amp;amp;p-&amp;gt;nread上でsleepし、データが書き出されるのを待つ(5261)。piperead()を呼び出しているプロセスがsleep状態のとき、sleep関数をreturnさせることで、CPUはpipewrite()のプロセスを走らせる(5242)。pipewrite()は、bufferに残ったデータをコピーした後、このループを終わらせる(5244)。新しいデータを待っているreaderが存在する場合、returnする直前で、pipewrite()をwakeup関数を呼ぶ。残されたpiperead()は走り続け、pipeから新しいデータをコピーする(pipe.c/piperead-sleep/)。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Code: Wait and exit]&lt;br /&gt;
sleep()とwakeup()は、キューの実装時に必ず必要というわけでは無い。sleep()とwakeup()は、チェックしたいコードや待つ必要がある状況において、動作する。0章で見たように、親プロセスは、子プロセスがexitするのを、wait関数を呼ぶ事で待つ事が出来る。Xv6においては、子プロセスがexitしたとき、子プロセスはすぐに死ぬわけではない。代わりに、子プロセスはZOMBIEというプロセス状態にスイッチして待つ。親プロセスがwait関数を呼んで、子プロセスがexitしたことを知るまで、子プロセスはZOMBIE状態で待つ。親プロセスが子プロセスを回収したとき、子プロセスが所有しているメモリを解放する。そして、struct procが再利用出来るように準備する。各プロセスの構造体は、p-&amp;gt;parentに親プロセスへのポインタを格納する。もし子プロセスがexitする前に親プロセスがexitしてしまった場合は、initプロセスが、子プロセスのexitに対応する。これは、親プロセスが、子プロセスが終了する前にexitしてしまったときのために必要なステップである。全てのプロセスの構造体はptable.lockによって保護されている。&lt;br /&gt;
&lt;br /&gt;
wait関数は、ptable.lockを取得することから始まる。wait関数は、プロセステーブルを走査し、子プロセスを探す。wait関数は、まず、カレントプロセスに子プロセスが存在し、また、そのどれも未だexitしていないかどうかをチェックする。この場合、wait関数はsleep関数を呼び出し、子プロセスのいずれかがexitするのを待ち、ループする。ここで、sleep状態から解放されるlockはptable.lockである。上述したケースは、その一例である。&lt;br /&gt;
&lt;br /&gt;
exit関数はptable.lockを取得し、その後、カレントプロセスの親プロセスを起こす(2126)。exit関数は未だカレントプロセスをZOMBIEプロセスに変更していないので、ロックの取得は未だ早過ぎるかもしれない。しかし、このロック取得は安全である。親プロセスはRUNNABLE状態に変更されるかもしれないが、wait関数にループは、exit関数がsched関数からスケジューラに入り、ptable.lockを解放するまでの間、走る事は出来ない。従って、プロセスの状態がZOMBIEになるまでの間、wait関数がexitするプロセスをチェックする事は無い(2138)。exit関数がリスケジュールする直前で、親プロセスは、子プロセスからinitプロセスまでの全てのプロセスをチェックする。最終的に、exit関数は、shed関数を呼び出す事でCPUを手放す。&lt;br /&gt;
&lt;br /&gt;
スケジューラは、wait関数によってsleep状態に成っている、exitするプロセスの親プロセスを選ぶ事が出来る(2188)。sleep関数の呼び出しは、ptable.lockをreturnする。具体的には、wait関数はプロセステーブルを再び走査し、exitしたプロセス(state == ZOMBIE)を見つける。wait関数は、子プロセスのPIDを記録する。その後、その子プロセスに関わるメモリを解放し、struct procをクリアする(2168-2175)。&lt;br /&gt;
&lt;br /&gt;
子プロセスは、exit関数の中で上述のクリア作業を行う。重要な事は、親プロセスが、親プロセス自身によってp-&amp;gt;kstackを解放することである。子プロセスがexit関数を走らせるとき、子プロセスのスタックは、p-&amp;gt;kstackとして確保されたメモリに置かれる。子プロセスのスタックは、子プロセスがshed関数のswtch関数を通して解放される。そして、子プロセスの状態を移行する。こうする理由は、(1)スケジューラの処理がスタック上で走っているからである。また、(2)xv6は、sched関数とscheduler関数を相互ルーチンとして管理するからである。xv6は、子プロセスから直接scheduler関数の処理を呼び出す事は出来ない。なぜなら、scheduler関数の処理は、スタック上で走るからである。また、そのスタックは、wait関数を呼んでいる親プロセスによって削除される可能性がある。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Scheduling concerns] /* 下書き */&lt;br /&gt;
&lt;br /&gt;
- Spurious wakeupsについて&lt;br /&gt;
- p-&amp;gt;killedのチェックについて&lt;br /&gt;
- thundering herdについて&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Real world]&lt;br /&gt;
&lt;br /&gt;
sleep関数とwakeup関数はシンプルで効率的な同期メソッドである。しかし、他にも同期をする方法はある。そのうちの１つは、本章の序盤で見た"missed wakeups"問題を避ける同期メソッドである。オリジナルのUnixカーネルのsleep関数は、割込を禁止する。この方法で同期をすることができる理由は、Unixは１つのCPU上で動くシステムであるからである。xv6はマルチプロセッサ上で動かす事を想定しているため、xv6は明示的なロック機構をsleep関数に導入している。FreeBSDのmsleep関数も同じアプローチを取っている。Plan 9のsleep関数は、callback関数を使っている。callback関数は、sleepする直前で取得する、スケジュール用のロックと共に動作する。具体的には、callback関数は、直前のsleepの状況をチェックするときに役に立つ。これにより、"missed wakeups"問題を避けることが出来る。Linuxカーネルのsleep関数は、waitチャネルの代わりに、明示的なプロセスキューを使っている。Linuxカーネルのプロセスキューは、内部用のロックを持っている。(一見、コードは十分でないように見える。実際にはどうなるだろうか？)&lt;br /&gt;
&lt;br /&gt;
chan関数とマッチするプロセスのために、wakeup関数内で全体のプロセスリストを走査する事は、非効率的である。より良い解決策は、sleep関数やwakeup関数内のchan関数を、sleep状態のプロセスリストを持っているデータ構造体に置換することである。Plan 9のsleep関数とwakeup関数は、待ち合わせ箇所やRendezの構造体を使う。多くのスレッドライブラリは、変化可能な条件としてその構造体を参照する。つまり、sleep関数とwakeup関数の処理はwait関数やsignal関数によって呼び出される。これらのメカニズムは、同様の手法を共有する。具体的には、sleepの条件は、sleepしている間、アトミックに解放されたロックによって保護される。&lt;br /&gt;
&lt;br /&gt;
セマフォは、異なった協調メカニズムである。セマフォは、２つのオペレーション(increment/decrement, up/down)を持ったint型の値である。セマフォは、いつでもインクリメントする事が可能である。しかし、セマフォの値がゼロを下回る事は許されない。よって、他プロセスによってそのセマフォがインクリメントされるまで、ゼロのセマフォをデクリメントはsleepする。そして、２つのオペレーションはキャンセルされる。int型の値は、典型的には、実際のカウンタの値(e.g. pipeバッファのバイト数, プロセスが持っているZOMBIEプロセスの数)と呼応する。抽象化の１つとして明示的なカウンタを使用する事によって、"missed wakeup"問題を避ける事が出来る。このため、wakeupの発生回数の明示的なカウンタが存在する。このカウンタは、条件変数による"spurious wakeup"問題や、"thundering herd"問題を避けることも出来る。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Exercises] /* 下書き */&lt;br /&gt;
&lt;br /&gt;
sleep関数は、デッドロックを避けるために、(lk != &amp;amp;ptable.lock)であることをチェックしなければならない(2017-2020)。sleep関数は次のコードを&lt;br /&gt;
&lt;br /&gt;
if(lk != &amp;amp;ptable.lock){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; acquire(&amp;amp;ptable.lock);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; release(lk);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
次のコードに置き換える事によって、特別な状況を無視する事が出来るだろう。&lt;br /&gt;
&lt;br /&gt;
release(lk);&lt;br /&gt;
acquire(&amp;amp;ptable.lock);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .P2&lt;br /&gt;
&lt;br /&gt;
これによりsleepをbreakする。どうやって？&lt;br /&gt;
&lt;br /&gt;
ほとんどのプロセスのcleanupは、exitまたはwaitによって処理される。&lt;br /&gt;
上述のケースはexitを使っている。&lt;br /&gt;
このとき、freeを使ってはならない。&lt;br /&gt;
&amp;nbsp; &amp;nbsp; p-&amp;gt;stack&lt;br /&gt;
これにより、プロセスは、exit関数はopenファイルの近くにいなければならなくなる。&lt;br /&gt;
何故？&lt;br /&gt;
答えはpipeと関係している。&lt;br /&gt;
&lt;br /&gt;
xv6においてセマフォを実装すること。&lt;br /&gt;
ミューテックスを使っても良いが、sleep関数とwakeup関数は使わないこと。&lt;br /&gt;
xv6のsleep関数とwakeup関数をセマフォに置換する。&lt;br /&gt;
結果を比較せよ。&lt;br /&gt;
&lt;br /&gt;
[Additional reading]&lt;br /&gt;
&lt;br /&gt;
cox and mullender, semaphores.&lt;br /&gt;
pike et al, sleep and wakeup.&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;br /&gt;
&lt;br /&gt;
&lt;div id="fastlookup_top" style="display: none;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-2442540436771724269?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/12/xv6-commentary-scheduler.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-EilwZuWZVmg/TvP7SxEh8eI/AAAAAAAABss/ggKs8n7L7LA/s72-c/Screen+shot+2011-12-23+at+12.53.08.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-4105315676474811172</guid><pubDate>Fri, 16 Dec 2011 11:51:00 +0000</pubDate><atom:updated>2011-12-20T22:04:56.978+09:00</atom:updated><title>コワーキングと沖縄とお仕事募集中</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-hAMRdTyn60s/TusAxHq6BnI/AAAAAAAABsM/XMynebIt5us/s1600/okinawa-island.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-hAMRdTyn60s/TusAxHq6BnI/AAAAAAAABsM/XMynebIt5us/s320/okinawa-island.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
このブログを書くまでに至った経緯を簡単に説明しよう（キリッ。&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;最近、Advent Calendar っていうブログのリレーが今流行りらしい。なんか面白そう。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://atnd.org/events/20450"&gt;Fluxflex Meetup&lt;/a&gt;&amp;nbsp;で知り合った&amp;nbsp;&lt;a href="https://twitter.com/#!/mzdakr"&gt;@mzdakr&lt;/a&gt; さんが Coworking 版のソレをやってるらしい。&lt;/li&gt;
&lt;li&gt;って「Coworking」って何ぞや？まぁいいか。それは置いといて...&lt;/li&gt;
&lt;li&gt;ポチッ（イベント参加登録ボタンを押した音）&lt;/li&gt;
&lt;li&gt;さて、とりあえず Coworking について調べるか...&lt;/li&gt;
&lt;li&gt;&lt;a href="http://osscafe.net/"&gt;OSSCafe&lt;/a&gt; と &lt;a href="http://pax.coworking.jp/"&gt;PAX Coworking&lt;/a&gt;&amp;nbsp;を訪問。&lt;/li&gt;
&lt;li&gt;うおー！Coworking 超面白い！&lt;/li&gt;
&lt;li&gt;でも沖縄では未だ Coworking 出来る場所が無いっぽい...&lt;/li&gt;
&lt;li&gt;じゃあとりあえず沖縄で広めるか！　　（←今ココ）&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;
...というわけで、今に至ります。ナニはともあれ、まずはブログを書かにゃナニも始まりません。そこで、この記事では、「Coworkingとは何ぞや？」という疑問に答えるべく、初歩的な内容を書いていきます。そして後半では、沖縄におけるCoworkingの現状や、僕がやっている事などについて記します。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;で、Coworkingって何ぞ？&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
僕の乏しい参加経験から勝手に推測すると、Coworkingとは、大中小の組織の規模を問わず、仕事の種類を問わず、各々あるいはグループ毎に、場所を共有して仕事をすることのようです。Coworking Space（Coworkingをする場所）についても、最初のうちは「IT系の個人や小規模な組織のためだけのスペースなのかなー」と思っていたけど、どうやらそういうところではないみたい。実際、コクヨや富士ゼロックス、NECのようないわゆる大手のところでも、&lt;a href="http://lockerz.com/s/156644459"&gt;こういった Coworking Space を設けて、Coworking を推奨する動きを見せています&lt;/a&gt;。なので、個人的には「色々な方々が、色々な方法で、Coworking する」といった理解をしています。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;で、どんな人が来るの？&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
まず、僕のようなフリーランスな人だけが利用するスペースではないことは確かです。グループで、誰かと一緒に仕事をしに来る人もいます。最近は、&lt;a href="http://hitoshi.hatenablog.com/entry/2011/12/08/162206"&gt;コワーキングスペースを利用するため、オフィスを引き払った会社&lt;/a&gt;もあるようなので、今後は、より色んな形でコワーキングスペースを利用する人達が増えてくるのかもしれません。例えば、学生が勉強しに来るとか、子連れで仕事しに来るとか、etc.。いずれにせよ、僕は多様性のある環境が結構好きなので、こういった動きは、僕個人としては歓迎です。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;で、どんな仕事してるの？&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Coworking する人も色々いますが、彼ら／彼女らの仕事の種類も色々あります。一見、IT系の人向けの特殊な共有スペースかと思いきや、全くそうじゃないです。プログラマやデザイナだけでなく、コピーライター、ジャーナリストの方々もいます。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
例えば、僕が OSSCafe を訪問していたとき、「スクリプトを書きに来ました」という方々と会いました。「なるほどやっぱしIT系の人が来るのね」と僕は思ったのですが、ところがどっこい彼らは全然 Lisp とか Python とか Ruby とか全然書いてない！「おいおいおいどういうことだよ...」って思ったら、コピーライターの業界では、どうやらキャッチコピーを創ることを「スクリプトを書く」と表現するみたいです。長くIT業界に浸かっていると、こういう他分野の表現に出会わないので、刺激的ですね。人も色々、仕事も色々、って感じ。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;余談&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
PAX Coworking にいるときに、こんな会話を聞きました。&lt;br /&gt;
&lt;br /&gt;
1. トゥルルルルル...（電話が鳴る）&lt;br /&gt;
&lt;br /&gt;
2. 「もしもし、社長とお話したいのですが、社長はいらっしゃいますか？」&lt;br /&gt;
&lt;br /&gt;
3. 「えーっと、&lt;b&gt;どこの&lt;/b&gt;社長でしょうか？」&lt;br /&gt;
&lt;br /&gt;
4. 「... ... ...」&lt;br /&gt;
&lt;br /&gt;
当然ですけど、Coworking Space には、いわゆる社長な方が結構います。１人とは限りません。こういう、従来の働き方ではありえないような展開と巡り会える環境というのも、Coworking の面白い点の１つではないでしょうか。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;ここまでのまとめ&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
僕はまだまだ駆け出しのフリーランスで、仕事もほとんど沖縄でしか取れていません。しかし、こういった Coworking Space の環境を使わせて頂くことで、能力と実績さえあれば、ネットワーキングがより簡単に出来ると考えています。フリーランスとしては非常に心地良い環境が構築されつつあると感じるので、個人的には嬉しいかぎりです。&lt;strike style="font-size: x-small;"&gt;ときどき「もっと安くならないかなー」とか考えたりしますが、つまりは僕がもっと稼げばいいということなのでしょう。&lt;/strike&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
"""&lt;br /&gt;
↑ここまで東京の話&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
↓ここから沖縄の話&lt;br /&gt;
"""&lt;/blockquote&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;沖縄の現状&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
さて、じゃあ沖縄の現状はどうでしょうか？ Coworking するスペースが既にあるかと聞かれると、僕の知る限り、今のところ沖縄には Coworking Space にあたる場所はほとんど無いです。ただ、僕は沖縄に対して&lt;a href="http://www.slideshare.net/yasulab/iaeste-returnee-report-6025672"&gt;ヨーロッパに似た雰囲気&lt;/a&gt;を感じているので、もし沖縄に Coworking Space があったら、沖縄で「遊び半分、仕事半分」な Work Life Balance が気軽に体験出来て、非常に面白そうな気はしています。&lt;br /&gt;
&lt;br /&gt;
僕は友達もコネも全くゼロの状態から始めたので、沖縄でフリーランスとして活動出来るようになるまでに、少々時間がかかってしまいました。しかし、もし Coworking Space が沖縄に既に出来ていたら、より簡単に、より早く沖縄でフリーランスとして活動出来ていたかもしれません。もしそんな環境が構築出来たら、ちょっとワクワクするでしょう？&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;なぜ沖縄？&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ところで、この記事を読んでいる方の中には、もしかしたら「何で沖縄で活動する必要があるの？」って感じる方がいるかもしれません。そう思った方は、是非&amp;nbsp;&lt;a href="http://twitter.com/sayobs"&gt;@sayobs&lt;/a&gt; さんが書いた記事「&lt;a href="http://www.lastday.jp/2011/07/25/stayed-in-okinawa-one-month"&gt;沖縄に１ヶ月生活 – ノマドしてきた感想とか&lt;/a&gt;」を読んでみて下さい。きっと沖縄で「遊び半分、仕事半分」な Work Life Balance を体験したくなると思います。沖縄に Coworking Space 、あるいはそれに準ずる環境が出来た際には、皆さんも是非沖縄に来てみて下さい。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;話を戻して...&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
現状で、Coworking Space に類するプロジェクトが１つも無い訳ではないです。名前こそ Coworking ではありませんが、それっぽいところ、それっぽい活動はちらほら見受けます。ここでは、その一部をご紹介しようと思います。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;1. SHDH Okinawa&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
例えば、僕もちょっとお手伝いしている活動ですが、&lt;a href="https://sites.google.com/site/okinawashdh/"&gt;SuperHappyDevHouse Okinawa&lt;/a&gt; という活動があります。コンセプト自体は Coworking に非常に近いと思います。しかも無料！ただ、開催が月に一回なので、どちらかというと、勉強会と Coworking の中間ぐらいに位置する活動なのかなーと僕は思います。あと、開催地が沖縄の中部にあるので、車が無いとアクセスがつらいのも、やや難しい点です。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;2. ギークハウス沖縄&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
他にもあります。&lt;a href="http://geekhouse-oki.fluxflex.com/"&gt;ギークハウス沖縄&lt;/a&gt;というプロジェクトです。&lt;a href="http://www.slideshare.net/yasulab/weekend-fabrication"&gt;週末ものづくり講座&lt;/a&gt;の受講生が一枚噛んでいるので、僕もちょくちょく現況を聞いています。ただ、こちらはまだオープンしていないので、今後どういった形態で活動が行われていくのかは、まだまだ分かりません。しかし、非常に面白い試みだと思うので、今後に期待です。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;3. 名称不明なプロジェクト&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
で、最後に、僕のプロジェクト。名前は未だありません（Online Study Shared Space? OS3? ）。とにかく、出来立てホヤホヤ。&lt;a href="http://www.it-college.ac.jp/"&gt;ITカレッジ沖縄&lt;/a&gt;という学校の教室が、月・木の夕方と、土曜日を終日借りれそうなので、「そこで何か面白いこと色々やろうぜ」的なプロジェクトです。早ければ来週ぐらいから始まるかもしれないし、永遠に始まらないかもしれません。とりあえず決定している事は、「電源や無線が使える場所を無料で提供してもらえる」ということだけです。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
当初は Coworking Space っぽさをバリバリ出そうかなーと思ったのですが、無料で場所を提供して頂く関係で、「（学内外を問わず）学生に何らかのメリットがあること」が条件になります。あと、オープンソースであること。加えて、僕がアッチいったりコッチいったりするので、僕が常駐する事も出来ません。そこで、僕の辿り着いた（とりあえずの、暫定的な）結論は、次のようなスペースを創ることです。&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;勉強したり開発したり仕事したり&lt;/b&gt;出来るスペースだけど、&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;基本的に一緒に&lt;b&gt;&amp;nbsp;&lt;a href="http://www.publickey1.jp/blog/11/saas1.html"&gt;StanfordのOpen Course&lt;/a&gt;&amp;nbsp;や&amp;nbsp;&lt;a href="http://www.publickey1.jp/blog/09/9_mityoutube.html"&gt;MIT／Berkleyの講座&lt;/a&gt;&amp;nbsp;を受講したり&lt;/b&gt;、&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;僕が&lt;a href="http://weekend-fabrication.yasulab.com/"&gt;週末ものづくり講座&lt;/a&gt;を&lt;b&gt;リモートで講義したり&lt;/b&gt;するための、&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;
そんな感じのスペースを創ろうかと考えています。Coworking というよりは、Costudying に近いような感じですかね。ただ、実施されるその瞬間までは、僕の脳内妄想に違いありません。なので、実施されるその日までは、生暖かい目で見守って下さい。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;最後に&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a href="http://atnd.org/events/22266"&gt;Coworking Advent CalendarのATND&lt;/a&gt;には、次のような文章が書かれています。&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;i&gt;１０分で考えて５分で書く、気軽な内容でOKです。&lt;/i&gt;&lt;/blockquote&gt;
&lt;div&gt;
全然ムリです。軽く１０倍以上の時間がかかってます。来年はもっとサクサク書きたいですね。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
ところで、来年の１月末から数ヶ月間シリコンバレーに滞在する予定なのですが、&lt;br /&gt;
その資金として、お仕事を絶賛募集中です。リモートでも出来る仕事だと嬉しいです。&lt;br /&gt;
仕事とは関係なくても、何か面白そうな話があれば yasulab@gmail.com までご連絡頂けると嬉しいです。&lt;br /&gt;
僕の最近の活動記録は&amp;nbsp;&lt;a href="http://www.yasulab.com/"&gt;http://www.yasulab.com/&lt;/a&gt;に書いてあります。&lt;/div&gt;
&lt;div&gt;
ではでは、皆さんからのお便りをお待ちしております。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id="fastlookup_top" style="display: none;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-4105315676474811172?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/12/blog-post.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-hAMRdTyn60s/TusAxHq6BnI/AAAAAAAABsM/XMynebIt5us/s72-c/okinawa-island.jpg" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-5309669153247270194</guid><pubDate>Sun, 04 Dec 2011 11:31:00 +0000</pubDate><atom:updated>2011-12-05T20:27:29.148+09:00</atom:updated><title>Make: Tokyo Meeting 07 に出展してきました！</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-U65fw-QdsoQ/TttbGeMGDDI/AAAAAAAABsE/_3qDntJKjaM/s1600/MTM07_201112041-600x397.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://4.bp.blogspot.com/-U65fw-QdsoQ/TttbGeMGDDI/AAAAAAAABsE/_3qDntJKjaM/s320/MTM07_201112041-600x397.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
「ブログを書くまでが勉強会です」ということで、早速レポート。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://jp.makezine.com/blog/2011/12/mtm07.html"&gt;Make: Tokyo Meeting 07&lt;/a&gt; に出展してきました！前日に沖縄で終日の講義があったので、若干弾丸ツアー的な部分もありましたが、なんとか間に合いました。&lt;br /&gt;
&lt;br /&gt;
僕が出展した内容は、「週末ものづくり講座」というプロジェクトの紹介です。このプロジェクトは、「とにかく早く作って早く公開する」をモットーに、色んな物を作るプロジェクトです。具体的には、&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
仕事が終わった後の金曜夜から日曜の終わりまでに, アイデアからプロトタイプまでを一気に作成し, 月曜日にドヤ顔で「こんなん作っちゃったんだぜ（キリッ」と周りの人に発表する.&lt;/blockquote&gt;
&amp;nbsp;といった感じで、毎週末活動をします。毎週１作品作るのが目標。&lt;br /&gt;
&lt;br /&gt;
元々（というか元凶）は、&lt;a href="https://market.android.com/details?id=org.sorarier.whistle"&gt;ホイッスルアプリ&lt;/a&gt;が&lt;a href="http://www.slideshare.net/yasulab/abc2011-summeryasulab"&gt;３ヶ月で5万ダウンロード&lt;/a&gt;されたことです。小さい成功ではあるけれど、この結果から「サクッと作れるシンプルなモノ(*1)でも、皆が使ってくれるモノは、まだまだ結構あるんじゃね？」と考えるようになりました。&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;*1 ちなみに、ホイッスル on Androidの中身は30行。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
「とりあえず実験してみよう」ってことで、勢いに任せて色々創ってみました。例えば、&lt;a href="http://timekeeper.fluxflex.com/"&gt;Simple Timekeeper&lt;/a&gt;とか&lt;a href="https://chrome.google.com/webstore/detail/bkmhgfacjlbplglbimpdbbeligolfadl"&gt;Nico Rank Inverter&lt;/a&gt;とか。結果としてうまくいったのはほんの少しで、残りのほとんどは失敗でしたが、しかし、やってみるとこれが案外面白い。&lt;br /&gt;
&lt;br /&gt;
面白いので、皆にこの面白さを是非共有したい。IaaSとかPaaSとか、最近はモノを作って公開するための環境が非常によく整って来ているので、もっとアプリ作る人が増えてもいいと思うしね。なので、「じゃあ講座でも開くか」と考え、紆余曲折（告知とか交渉とか）を経て、&lt;a href="http://weekend-fabrication.yasulab.com/"&gt;週末ものづくり講座&lt;/a&gt;のカリキュラム（ver. 0.01）を完成させました。これが9月の話。で、10月から&lt;a href="http://www.it-college.ac.jp/"&gt;ITカレッジ沖縄&lt;/a&gt;という学校で、実験的な授業がスタート。そして、11月の末に、無事１期生の授業が終わる（←今ココ）。といった感じです。&lt;br /&gt;
&lt;br /&gt;
ちなみに、１期生の作品は&lt;a href="http://weekend-fabrication.yasulab.com/products"&gt;コチラ&lt;/a&gt;で順次公開していく予定です。また、ハッカソンというイベントで、１期生の１人とコラボって作った作品が&lt;a href="http://www.slideshare.net/yasulab/weekend-fabrication"&gt;コチラ&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
こんな感じの、わりと勢いと衝動任せのプロジェクトですが、反応は中々良いみたい。社交辞令かもしれないけど、例えば、&lt;a href="http://d.hatena.ne.jp/h6n/20111130/1322639161"&gt;こんな感じの反応&lt;/a&gt;を頂いたり。&lt;br /&gt;
&lt;br /&gt;
最近は、&lt;a href="http://www.lexues.co.jp/info/?p=769"&gt;レキサスアカデミー&lt;/a&gt;という沖縄のアプリ開発塾みたいなところで、専属講師としてものづくりのアレコレを教えています。定員は15名なんですが、既に満員間近。聴講生（正式な受講生ではないが、興味があるので参加する人）も来るぐらいので、個人的には嬉しい限り。&lt;br /&gt;
&lt;br /&gt;
とまぁ、こんな感じの近況報告を、&lt;a href="http://www.wizdom.cs.waseda.ac.jp/mtm07/"&gt;WIZDOM枠&lt;/a&gt;を使わせて頂き、Make: Tokyo Meeting 07で発表させて頂きました。こっちでの反応もいい感じでした。特に、「是非受講したい！」という話を貰えたのは非常に嬉しかったです。今は沖縄を拠点してやっているので、残念ながら沖縄以外では気軽に受講できないけれど、「誰か東京でやってくれないかなー」と悶々とする妄想する今日この頃。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最後に、宣伝ですが、&lt;a href="http://www.wizdom.cs.waseda.ac.jp/mtm07/"&gt;WIZDOMの他のプロジェクト&lt;/a&gt;も非常に面白いです。例えば、GPL HouseとかCAPBOTとか。何やらハードウェア系がもっさりある感じなので、ここは是非彼ら／彼女らと情報交換したいなーとか、妄想に耽っています。&lt;br /&gt;
&lt;br /&gt;
#&amp;nbsp;最近は妄想が酷い...&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
今年立ち上げた &lt;a href="http://qwik.jp/okinawarb/"&gt;Okinawa.rb&lt;/a&gt; でも「クラウドからハンダ付けまで」をモットーに（僕が勝手に）掲げているので、ハード系な人達ともっと交流しなきゃあかんなー、と考えています。&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;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/5762104224722516841-5309669153247270194?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/12/make-tokyo-meeting-07.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-U65fw-QdsoQ/TttbGeMGDDI/AAAAAAAABsE/_3qDntJKjaM/s72-c/MTM07_201112041-600x397.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-5272269596020205459</guid><pubDate>Thu, 01 Dec 2011 07:13:00 +0000</pubDate><atom:updated>2011-12-02T14:02:03.980+09:00</atom:updated><title>12月3日(土)にIT津梁パーク@沖縄で行われるイベントまとめ</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-jBPq_F-NNp4/TtcsFVUgNGI/AAAAAAAABr8/oTpF-4BF06Y/s1600/okinawarb-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-jBPq_F-NNp4/TtcsFVUgNGI/AAAAAAAABr8/oTpF-4BF06Y/s320/okinawarb-logo.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
各勉強会のメーリングリストにも流しましたが、ブログにも掲載します。&lt;br /&gt;
興味ある方は是非に。&lt;br /&gt;
------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
こんにちは、@yasulab です。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
今週土曜日（12月3日）は、IT津梁パークで次のイベントが行われます。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
ご都合の着く方は是非是非ご参加を。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
10:00-12:00　「アマゾン ウェブ サービスがもたらすITのニューワールド」&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
詳細：&lt;a href="http://blog.lexues.co.jp/?p=9165"&gt;http://blog.lexues.co.jp/?p=9165&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
13:00-17:00　Okinawa.rbワークショップ(*1) in Okinawa SHDH (*2)&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
詳細：&lt;a href="http://atnd.org/events/22050"&gt;http://atnd.org/events/22050&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
なお、15:00-16:00は、@libkinjo さんによる次の発表があります。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&amp;gt;&lt;span style="color: #222222; font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'ＭＳ Ｐゴシック', sans-serif; font-size: 12px; line-height: 20px; text-align: left;"&gt;■SHDH2 でもくもくしたアプリ dont-forget-something の解説&lt;/span&gt;&lt;/div&gt;
&lt;span style="color: #222222; font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'ＭＳ Ｐゴシック', sans-serif; font-size: 12px; line-height: 20px; text-align: left;"&gt;&amp;gt;・見所: accepts_nested_attributes_for, haml, やや力技 jquery などw&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222; font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'ＭＳ Ｐゴシック', sans-serif; font-size: 12px; line-height: 20px; text-align: left;"&gt;&amp;gt;■ロレーヌでもくもくしていた twitter 擬の解説&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #222222; font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'ＭＳ Ｐゴシック', sans-serif; font-size: 12px; line-height: 20px; text-align: left;"&gt;&amp;gt;・見所: rails 3.1/CoffeeScript/mongo/rspec/spork/factory_girl&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
モクモクと勉強／開発する際のBGMとしてどうぞ、とのことです。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
また、13:00-17:00は、同じ会場で Lexues Academy(*3) が行われます。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
週末ものづくり講座(*4)に関するアレコレを僕が話しているはずなので、&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
興味ある方は覗きに来て下さいね。&lt;strike&gt;今回は誰でも聴講することが可能です。&lt;/strike&gt;&lt;br /&gt;
※追記：&lt;b&gt;いつでも&lt;/b&gt;誰でも聴講することが可能です。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
ではでは、参加する方は是非当日会場でお会いしましょう。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
yasulab&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
*1 Okinawa.rb ワークショップってなんぞや？って方はこちらへどうぞ。&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;a href="http://qwik.jp/okinawarb/4.html"&gt;http://qwik.jp/okinawarb/4.html&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;div&gt;
*2 Okinawa SHDHってナニ？という方はこちらへ。&lt;/div&gt;
&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;a href="https://sites.google.com/site/okinawashdh/home"&gt;https://sites.google.com/site/okinawashdh/home&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
*3 Lexues Academy&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;a href="http://www.lexues.co.jp/info/?p=769"&gt;http://www.lexues.co.jp/info/?p=769&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
*4 週末ものづくり講座&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;a href="http://weekend-fabrication.yasulab.com/"&gt;http://weekend-fabrication.yasulab.com/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id="fastlookup_top" style="display: none;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-5272269596020205459?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/12/123it.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-jBPq_F-NNp4/TtcsFVUgNGI/AAAAAAAABr8/oTpF-4BF06Y/s72-c/okinawarb-logo.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-3904491849965748384</guid><pubDate>Sat, 26 Nov 2011 07:48:00 +0000</pubDate><atom:updated>2011-11-27T02:13:42.622+09:00</atom:updated><title>Androidデザインに関するアレコレ</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-YxDxE974UlM/TtCaTn7A9cI/AAAAAAAABr0/O6j7ApR6N9c/s1600/yanzm-ss.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476" src="http://3.bp.blogspot.com/-YxDxE974UlM/TtCaTn7A9cI/AAAAAAAABr0/O6j7ApR6N9c/s640/yanzm-ss.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
最近、Lexues Academy というアプリ開発塾(?)で専属講師的な感じでアプリ開発を教えています。で、その一貫で外部講演がときどき開かれるのですが、先週と今週の外部講演で聞いたデザインの話が結構面白かったです。先週はAndroid女子部部長の @yanorin さんが講演され、今日はAndroid女子部副部長の @yanzm さんのお話をされました。（写真は @yanzm さんの講演の１コマ）&lt;br /&gt;
&lt;br /&gt;
両名ともデザインに関するお話をしていましたが、僕的に特に面白かったのは、デザインするときに役立つツールの話です。覚えてる限りですが、話全体を通して、次のツールが取りあげられていたと思います。順不同。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://phpjavascriptroom.com/?t=mobile&amp;amp;p=iphoneandroidmockup#a_android_icon"&gt;Android メニュー用アイコン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dafont.com/"&gt;dafont&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OmniGraph + Android Stencil（&lt;a href="http://twitpic.com/7ee44f"&gt;サンプル&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;span id="goog_1661292257"&gt;&lt;/span&gt;&lt;a href="http://inkscape.org/"&gt;InkSpace&lt;/a&gt;&lt;span id="goog_1661292258"&gt;&lt;/span&gt; (instead of Illustrator)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.androidicons.com/"&gt;Android Icons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://colorschemedesigner.com/"&gt;Color Scheme Designer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cacoo.com/"&gt;Cacoo&lt;/a&gt;&amp;nbsp;-&amp;nbsp;Create diagrams online Real time collaboration!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.uistencils.com/"&gt;UI Stencils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html"&gt;Android Asset Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kuler.adobe.com/"&gt;Adobe Kuler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/index.html"&gt;Android Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/examples/ButtonMaker/"&gt;Button Maker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
他、参考図書など(覚えてる限り)：&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~&lt;/li&gt;
&lt;li&gt;アジャイルサムライ&lt;/li&gt;
&lt;li&gt;Designing Interface&lt;/li&gt;
&lt;li&gt;Non-Designer's Design Book&lt;/li&gt;
&lt;/ul&gt;
＊ちなみに、当日 @yanzm さんが使った資料(集)は&lt;a href="http://www.slideshare.net/yanzm"&gt;こちら&lt;/a&gt;から。&lt;br /&gt;
&lt;br /&gt;
留学中にデザインの授業を取ってから、デザインの勉強を継続的に行うようになったのですが、ツールに関する知識はあんまりなく、留学中も Adobe 以外はあんまり触らなかったので、こういった話は結構新鮮で興奮します。&lt;br /&gt;
&lt;br /&gt;
皆さんのご参考にもなれば幸い。&lt;br /&gt;
&lt;br /&gt;
&lt;div id="fastlookup_top" style="display: none;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-3904491849965748384?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/11/android.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-YxDxE974UlM/TtCaTn7A9cI/AAAAAAAABr0/O6j7ApR6N9c/s72-c/yanzm-ss.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-1202409766787987564</guid><pubDate>Wed, 16 Nov 2011 16:32:00 +0000</pubDate><atom:updated>2011-11-17T01:56:01.728+09:00</atom:updated><title>Quick Start for Public Key Authentication on SSH</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-EByBIgNXt2s/TsPp1b7xzTI/AAAAAAAABpo/D1xm6wHo6mc/s1600/ssh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="81" src="http://2.bp.blogspot.com/-EByBIgNXt2s/TsPp1b7xzTI/AAAAAAAABpo/D1xm6wHo6mc/s320/ssh.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background-color: white; direction: inherit; font-family: Verdana; font-size: 13px; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
今までのプロジェクトの遺産で、別に公開しても良さそうな簡単な技術の話は公開しましょうねキャンペーン実施中。今回は、SSHの公開鍵設定の話。仕組みとかは原理とかは全部端折ってます。&lt;/div&gt;
&lt;div style="background-color: white; direction: inherit; font-family: Verdana; font-size: 13px; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: white; direction: inherit; font-family: Verdana; font-size: 13px; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
以下、SSHの公開鍵設定についてのお話。&lt;/div&gt;
&lt;div style="background-color: white; direction: inherit; font-family: Verdana; font-size: 13px; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
=======================&lt;/div&gt;
&lt;div style="background-color: white; direction: inherit; font-family: Verdana; font-size: 13px; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;ここではSSHの公開鍵設定を原理などを省いて説明します。&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;Linux/OSXなどのUNIX系のみで有効な説明ですが、Windowsユーザの方はPuTTYのオプション&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;であるのでググれば説明があると思います。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;1. 鍵をつくる&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;--------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;まず、公開鍵と秘密鍵のペアを作ります。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;$ ssh-keygen&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;オプションがいろいろありますが、詳細はmanしてください。&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;色々聞かれますが、基本全部デフォルトのままでいいのでエンター押してください。&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;パスワードが必要なら入力してください。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;すると~/.ssh以下にid_rsaとid_rsa.pubというファイルができます。&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;id_rsaが秘密鍵、id_rsa.pubが公開鍵です。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;2. 公開鍵をサーバーに置く&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;---------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;これは任意の方法で行なってください。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;$ scp ~/.ssh/id_rsa.pub&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;112.233.445.566&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;:~/id_rsa.pub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;など。&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
#&lt;span style="font-family: Verdana; font-size: x-small;"&gt;&amp;nbsp;112.233.445.566 はお手持ちのサーバのIPアドレスに脳内変換して下さい。&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;3. 公開鍵をキーチェーンに追加する&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;~/.sshの下にあるauthorized_keysに公開鍵を追加します。&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;サーバ上での自分がログインするユーザのホームディレクトリ以下の.sshです。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;$ ssh&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;112.233.445.566&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;$ cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;以上です。&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="font-family: Verdana; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;ちなみに、2. 3. は初回であれば&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;$ scp ~/.ssh/id_rsa.pub&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;112.233.445.566&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;:~/.ssh/authorized_keys&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;のようにひとつのステップで省略できます。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;また、~/.ssh/configを以下のように設定しておくと楽です。&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;(べつにシェルの履歴で簡単に辿れますが)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;$ /Users/yasulab/.ssh% cat config&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp; Host hogehoge&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Compression yes&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hostname&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;112.233.445.566&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User yasulab&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;$ /Users/yasulab/% ssh hogehoge&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Verdana; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px;"&gt;この~/.ssh/configの設定により、以降、hogehoge サーバにパスワード無しでログイン出来るようになります。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: left;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: left;"&gt;以上、SSHの公開鍵設定についてのお話でした。&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-1202409766787987564?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/11/quick-start-for-public-key.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-EByBIgNXt2s/TsPp1b7xzTI/AAAAAAAABpo/D1xm6wHo6mc/s72-c/ssh.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-8289833706667976134</guid><pubDate>Tue, 15 Nov 2011 17:06:00 +0000</pubDate><atom:updated>2011-11-16T02:17:51.034+09:00</atom:updated><title>IDEO訪問記を又聞きしてみた。</title><description>&lt;div style="background-color: white; counter-reset: __goog_page__ 0; font-family: Verdana; margin-bottom: 6px; margin-left: 6px; margin-right: 6px; margin-top: 6px; min-height: 1100px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;div class="separator" style="clear: both; font-size: 10pt; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-gFyTM6X7AI0/TsKdK545ADI/AAAAAAAABpg/g8XqyukSdvo/s1600/ideo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-gFyTM6X7AI0/TsKdK545ADI/AAAAAAAABpg/g8XqyukSdvo/s1600/ideo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
シリコンバレーにあるIDEO本社に行ってきた友達の話を聞いてきました。&lt;span style="font-size: 10pt;"&gt;2010年2月に書いたメモで、元々はSorarierというプロジェクトのメンバー向け情報だったんですが、公開した方が世のため人のためだと思ったので、公開します。&lt;/span&gt;ご参考まで。&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
以下、僕がインタビューして聞いた話のメモを記します。&lt;br /&gt;
&lt;span style="font-size: 10pt;"&gt;#1 といっても、１年前ですが...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 10pt;"&gt;#2 メモなので、箇条書きがかなり多いです。雰囲気を感じt(ry&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
[Index]&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
- Brainstormingについて&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
- 参考文献&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;
[Brainstormingについて]&lt;/div&gt;
&lt;div id="vi5u" style="margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_43hh8gdggm_b" style="height: 242.511px; width: 648px;" /&gt;&lt;/div&gt;
Brainstormingのプロセス:&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
- 1. Listen&lt;br /&gt;
- 2. Learn&lt;br /&gt;
- 3. Envision&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;1. Listen&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
- ユーザインタビューについて&lt;/div&gt;
&lt;div id="mxxp" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_42htnh5jcj_b" style="height: 384px; width: 648px;" /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
メモ:&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
- IDEOでは、ユーザインタビューは定性評価と定量評価を以下のように使い分ける。&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-- 1. 定性評価: 右下図(縦軸=ユーザ数, 横軸=ヘビーorライトユーザ)の&lt;span class="Apple-style-span" style="color: red;"&gt;両極端を5人&lt;/span&gt;ほどインタビューする&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
--- 一般的なユーザは「なんとなく」使っているだけ。&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
--- ある製品を絶対に使わないと決めている人や、使い倒している人は、&lt;span class="Apple-style-span" style="color: red;"&gt;確固な意志&lt;/span&gt;を持っていることが多い。&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
---- 定性評価では、この意志が参考になる。&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-- 2. 定量評価: 大体&lt;span class="Apple-style-span" style="color: red;"&gt;500人程度&lt;/span&gt;を目安ににアンケートを取る。&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;2. Learn&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
- 2.1&amp;nbsp;&lt;span class="Apple-style-span" style="color: red;"&gt;Post It&lt;/span&gt;の方式で、1.の結果からアイデアを出す。壁にペタペタ貼る&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-- このとき、&lt;span class="Apple-style-span" style="color: red;"&gt;意識的に絵を書く&lt;/span&gt;ようにする。&lt;br /&gt;
＃次の図は文字が多いので悪い例。&lt;/div&gt;
&lt;div id="kpij" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_45gb869xcs_b" style="height: 500px; width: 375px;" /&gt;&lt;/div&gt;
&lt;div id="kpij" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-- 2.2 出たアイデアをGroupingする&lt;/div&gt;
&lt;div id="to:a" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_46dbs669gq_b" style="height: 500px; width: 375px;" /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
2.3 各Theme毎に再度アイデアを出す。&lt;/div&gt;
&lt;div id="afze" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;img height="400" src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_47httr2wg8_b" width="300" /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
2.4 再度Groupingをする。(以後、Groupingとアイデア拡張を繰り返す。)&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
Point:&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
経験的に、繰り返しの回数(横軸)とアイデアの質(縦軸)は、ルート関数っぽい。&lt;span class="Apple-style-span" style="color: red;"&gt;「何回繰り返すか?」&lt;/span&gt;が重要。&lt;/div&gt;
&lt;div id="xt.2" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_48cx4gc5gf_b" style="height: 330px; width: 458px;" /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;3. Envision&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;
&lt;div style="font-size: 10pt;"&gt;
- 良いアイデアが出たら、早速プロトタイプを作成する。ここでは&lt;span class="Apple-style-span" style="color: red;"&gt;スピード感&lt;/span&gt;が大事。&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-- プロトタイプの作成を通して、&lt;span class="Apple-style-span" style="color: red;"&gt;未知の問題を洗い出す&lt;/span&gt;。&lt;/div&gt;
&lt;div id="tjx9" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;div style="text-align: center;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_49fcf4t89j_b" style="height: 375px; width: 500px;" /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;↓&lt;/span&gt;&lt;/div&gt;
&lt;div id="a5-t" style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px; text-align: left;"&gt;
&lt;div style="text-align: center;"&gt;
&lt;img src="https://docs.google.com/a/myfreecon.net/File?id=ddnqs5gv_50g45ktgcq_b" style="height: 375px; width: 500px;" /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
4. /* ...時間がなかったのでEnvisionまでのプロセスしか聞いてない... */&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
NOTE: これ以降のプロセスやより詳しいプロセスについては、次の参考文献「Change by Design」に書かれているとのこと。&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
[参考文献]&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;a href="http://www.amazon.co.jp/Change-Design-Transforms-Organizations-Innovation/dp/0061766089" id="kh-d" style="color: #551a8b;" title="Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation (ハードカバー)"&gt;Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation (ハードカバー)&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--&amp;nbsp;&lt;a href="https://docs.google.com/exec/obidos/search-handle-url?_encoding=UTF8&amp;amp;search-type=ss&amp;amp;index=books-us&amp;amp;field-author=Tim%20Brown" style="color: #003399;"&gt;Tim Brown&lt;/a&gt;&amp;nbsp;(著)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; margin-bottom: 0px; margin-top: 0px;"&gt;
-- URL:&amp;nbsp;&lt;a href="http://www.ideo.com/cbd" id="sras" style="color: #551a8b;" title="http://www.ideo.com/cbd"&gt;http://www.ideo.com/cbd&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
-- 2010年4月に日本語訳が出るとの噂。&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-8289833706667976134?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/11/ideo.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-gFyTM6X7AI0/TsKdK545ADI/AAAAAAAABpg/g8XqyukSdvo/s72-c/ideo.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-1930609712265370881</guid><pubDate>Sun, 13 Nov 2011 15:05:00 +0000</pubDate><atom:updated>2011-11-24T12:10:27.668+09:00</atom:updated><title>Sinatra + SQLite3 + Hamlで画像アップロードしてみた。</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-yuxHJ945CA8/Ts21mxOSOsI/AAAAAAAABrs/qALIHgaakH4/s1600/sinatra-logo.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-yuxHJ945CA8/Ts21mxOSOsI/AAAAAAAABrs/qALIHgaakH4/s1600/sinatra-logo.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
最近、Sinatraを使いたい衝動に駆られたので色々とSinatraで遊んでます。とりあえず画像をいじりたい＋データベースを使いたい、ってことで&amp;nbsp;&lt;a href="http://d.hatena.ne.jp/yamamucho/20100620/1277003595"&gt;Sinatraでファイルをアップロードさせる方法&lt;/a&gt;&amp;nbsp;と&amp;nbsp;&lt;a href="http://d.hatena.ne.jp/ruedap/20110212/ruby_sinatra_datamapper_1_orm_sqlite"&gt;SinatraからDataMapperを使う&lt;/a&gt;&amp;nbsp;を参考にしながら、&lt;a href="https://github.com/yasulab/sinatra-db-demo-with-img"&gt;Sinatra DB Demo with Images&lt;/a&gt;&amp;nbsp;を作ってみました。動作イメージが分かりやすいようにモデルはtwitter-likeにしてます。で、DBの中身が分かりやすいようにtableでサクッと区切って表示したりなどやってます。こんな感じです。jQueryとかCSSとかは使ってないので、見栄えはあまり良くないです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-3j0yETV877w/TsAdefrLk2I/AAAAAAAABpA/2yEioYdF8kE/s1600/Screen+shot+2011-11-14+at+4.27.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" src="http://4.bp.blogspot.com/-3j0yETV877w/TsAdefrLk2I/AAAAAAAABpA/2yEioYdF8kE/s320/Screen+shot+2011-11-14+at+4.27.05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
なんとなく、フォームを使ったPOSTメソッド以外にも、GETメソッドを使ったPostも出来るようにしてみました。何故実装したかは不明。悪い実装例（？）。使い方は、'/create'にアクセスするだけですが、RESTful的にはこういう風なGETの使い方はやっちゃいけないかと思います。&lt;br /&gt;
&lt;br /&gt;
'/create' にアクセスして、&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-B72P7-oQe8M/TsAde2q8gfI/AAAAAAAABpE/WDS3DXGCmvA/s1600/Screen+shot+2011-11-14+at+4.27.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-B72P7-oQe8M/TsAde2q8gfI/AAAAAAAABpE/WDS3DXGCmvA/s1600/Screen+shot+2011-11-14+at+4.27.53.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
その後、ルートディレクトリに戻ると、こんな感じでちゃんとDBにデータが入っていることが確認出来ます。&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-D42AV3Bs1X0/TsAdfpQFcjI/AAAAAAAABpM/Z6rNBiLP9Bk/s1600/Screen+shot+2011-11-14+at+4.31.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="http://2.bp.blogspot.com/-D42AV3Bs1X0/TsAdfpQFcjI/AAAAAAAABpM/Z6rNBiLP9Bk/s320/Screen+shot+2011-11-14+at+4.31.52.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
ちなみに、データベースの中身をいじってデバッグしたいときなんかは、&amp;nbsp;&lt;a href="http://www.dehats.com/drupal/?q=node/58"&gt;Lita&lt;/a&gt;&amp;nbsp;というデスクトップアプリケーションが便利でした。こんな感じで編集出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-svNcb57_lHw/TsAdglzA2rI/AAAAAAAABpY/hq7NdzmR2jY/s1600/Screen+shot+2011-11-14+at+4.32.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://1.bp.blogspot.com/-svNcb57_lHw/TsAdglzA2rI/AAAAAAAABpY/hq7NdzmR2jY/s320/Screen+shot+2011-11-14+at+4.32.36.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
おまけ程度の情報ですが、EmacsでHamlを使いたいときは&lt;a href="http://www.emacswiki.org/emacs/HamlMode"&gt;Haml-mode&lt;/a&gt;が便利かもです。設定はこんな感じで。indent-tabs-mode nilを入れないと、Hamlがカオスな反応をするので注意。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="wrapper" style="background-color: white;"&gt;
&lt;div class="content browse"&gt;
&lt;pre&gt;(add-hook 'haml-mode-hook
  '(lambda ()
     (setq indent-tabs-mode nil)
       (define-key haml-mode-map "\C-m" 'newline-and-indent)))&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="wrapper close"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
以上、Sinatra DB Demo w/ Imagesの概説でした。参考になれば幸い。&lt;br /&gt;
とりあえず今後は、DELETEとPOSTメソッドを実装して、なんちゃってRESTfulを作ってみたいかも。&lt;br /&gt;
&lt;br /&gt;
yasulab/simple-db-demo-with-img - GitHub&lt;br /&gt;
&lt;a href="https://github.com/yasulab/sinatra-db-demo-with-img"&gt;https://github.com/yasulab/sinatra-db-demo-with-img&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id="fastlookup_top" style="display: none;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-1930609712265370881?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/11/sinatra-sqlite3-haml.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-yuxHJ945CA8/Ts21mxOSOsI/AAAAAAAABrs/qALIHgaakH4/s72-c/sinatra-logo.gif" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-7272029279202721644</guid><pubDate>Fri, 04 Nov 2011 09:26:00 +0000</pubDate><atom:updated>2011-11-09T15:22:53.748+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Report</category><category domain="http://www.blogger.com/atom/ns#">PaaS</category><category domain="http://www.blogger.com/atom/ns#">imasara</category><title>第１回 fluxflex meetup in Tokyoで発表して思ったこととかアレやコレや</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-NyQnQH6klCU/TrocKlUw51I/AAAAAAAABcE/m_h_caYf9-I/s1600/fluxflex-meetup-survey.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://4.bp.blogspot.com/-NyQnQH6klCU/TrocKlUw51I/AAAAAAAABcE/m_h_caYf9-I/s320/fluxflex-meetup-survey.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
はい、今さらなお話です。勢いで "imasara"というタグを付けてしまったぐらいに今さらなお話です。でも、数百人の前で発表する機会なんてあんまり経験して来なかったので、せっかくなので当日までのアレコレや、言い訳や、その後の後日談などを思い出しながら書いてみます。&lt;br /&gt;
&lt;br /&gt;
約１ヶ月前、&lt;a href="http://atnd.org/events/20450" target=""&gt;第１回 fluxflex meetup in Tokyo&lt;/a&gt; というイベントがありまして、そこで「&lt;a href="http://www.slideshare.net/yasulab/fluxflex-usecase" target=""&gt;GitHub Importを使った fluxflex へのデプロイ例&lt;/a&gt;」という内容を発表してきました。元々は、一般参加者として参加するつもりでした。だったんですが、&lt;a href="http://timekeeper.fluxflex.com/" target=""&gt;Simple Timekeeper&lt;/a&gt; という、fluxflex上で動いているサービスが、幸運にも fluxflex の中の人の目に止まったようです。それで、DMで僕の方に発表の誘いが来て、そして、発表に至ったという感じです。&lt;br /&gt;
&lt;br /&gt;
言い訳をさせて下さい。僕はアイデアが思いついたら可能な限り早く作るのが好きな人間です。だって良いアイデアを思いついたら、早く動いてる姿が見たいじゃないですか。Simple Timekeeper も例に漏れず５時間ぐらいで作ったサービスです。なので、&lt;a href="https://github.com/yasulab/simpletimekeeper" target=""&gt;中身を見ると「body bgcolor="black"」とか書いてあるぐらい&lt;/a&gt;のウ◯コードとなっています。しかしまぁ、「まずは発表資料を用意するのが優先だ」と考え、というか今さら書き直す時間もなく、気力も無く、クソ◯スのまま発表に至りました。&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;本当はもっとキレイに書けるよ！だからそんな目で見ないで！&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ところで、僕はずっと fluxflex のことを「auto-scaling」を推している PaaS だと思っていましたが、いつの間にか軽量なウェブサービス開発者をターゲットにした PaaS にPivot（？）したみたいですね。僕の思い込みかもしれないので、実際のところは今度会った時にでも聞こうかなーと思っていますが、少なくとも僕からしてみたら最高のpivotです。というのも、僕は軽量なウェブサービスをたくさん作ってたくさん失敗するタイプの人間なので、もうアレですね。最高です。「ずっとこの路線で行ってくれたら‥」と密かに願っています。「Pivotしたのかなー」と思った背景は色々とありますが、詳細は後日 &lt;a href="http://qwik.jp/okinawarb/" target=""&gt;Okinawa.rb&lt;/a&gt; で発表した &lt;a href="http://www.slideshare.net/yasulab/fluxflex-meetup-survey" target=""&gt;fluxflex meetup survey&lt;/a&gt; にて。&lt;strike&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;地域Rubyの会で最もRubyの話をしない人間とは僕のことです。&lt;/span&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
僕はシンプルなウェブサービスやアプリがもっともっと増えたら良いなーと思っています。それには、僕がZen信者だからとか、そもそも個人でスゴいウェブサービスを作る技術が無いからとか、色々な理由があります。ですが、最大の理由は、スゴいモノじゃなくても、数万ラインのモノじゃなくても、多くのユーザに使ってもらえるイイモノはたくさんあると信じているからです。&lt;a href="http://www.slideshare.net/yasulab/abc2011-summeryasulab"&gt;ホイッスル on Androidを実際に作ってみて&lt;/a&gt;、「あ、やっぱいけるじゃん」と確信しました。&lt;br /&gt;
&lt;br /&gt;
でも、僕自身そうでしたが、頭ではそう思っていても、実際にそうするのは、若干の度胸が必要です。だって、まず、失敗することが多い。&lt;a href="https://chrome.google.com/webstore/detail/bkmhgfacjlbplglbimpdbbeligolfadl"&gt;作っても誰も見てくれない&lt;/a&gt;とかザラです。公に自分の失敗を晒すのは、やはり若干の覚悟が必要です。&lt;br /&gt;
&lt;br /&gt;
しかも、&lt;a href="https://github.com/yasulab/simpletimekeeper"&gt;ウ◯コード&lt;/a&gt;になりやすい。まぁこれは僕だけの特別な傾向かもしれませんが、少なくとも僕ぐらいのスキルでは、ウ◯コード量産機になる度胸が必要だと思います。ウン◯ードでしかも誰も使ってくれないときなんかは、もう完全に涙目ですよ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
「もっとキレイに書け」とか「汚いコードを書くヤツは（ry」みたいな風潮を僕は感じます。企業で、大勢で書くモノを作るときは全く持ってその通りだと思います。でも、個人や小さいチームでモノを作るとき、本当にそうなんでしょうか。&lt;a href="http://www.quora.com/Code-Quality/What-was-the-code-quality-of-the-initial-version-of-Google"&gt;あのGoogleですら初期バージョンのコードは酷いモノだった&lt;/a&gt;そうです。それなら、凡人の僕が書くコードなんて酷くて当たり前な気がします。なんていうんですかね、フリーミアムが「Freeと1円以上のときは法則が違う」と主張したように、個人や少人数でモノを作るときと、企業や大勢でモノを作るときの法則は違うような気がします。気がするだけです。証拠も何もありません。&lt;br /&gt;
&lt;br /&gt;
「証拠が無いなら作っちゃおう」。そういうのは実験して確かめればいいですよね。ということで、&lt;a href="http://weekend-fabrication.yasulab.com/"&gt;週末ものづくり講座&lt;/a&gt;ってのを実際に開いてみました。どうなんですかね。モノ作りと同じで、一般的には失敗する確率の方が多そうです。ですがまぁ、そこらへん色々試してみて、結果を見てみて、その後じっくり考えることにします。&lt;br /&gt;
&lt;br /&gt;
まさか fluxflex の話からモノ作りの話に飛ぶとは僕自身思いませんでしたが、とりあえずここらへんに着地して終わりにしようと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;そんじゃーn(ry&lt;/span&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;strike&gt;&lt;br /&gt;
&lt;/strike&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
追記：&lt;br /&gt;
&lt;br /&gt;
最近「&lt;a href="http://www.amazon.co.jp/%E8%87%AA%E5%88%86%E3%81%AE%E3%82%A2%E3%82%BF%E3%83%9E%E3%81%A7%E8%80%83%E3%81%88%E3%82%88%E3%81%86-%E3%81%A1%E3%81%8D%E3%82%8A%E3%82%93/dp/4478017034"&gt;自分のアタマで考えよう&lt;/a&gt;」という本を読んだので、久々に自分のアタマで考えて文章にしてみたんですが、本書でも述べられているように、最初はろくなもんにならないっすね。コード書くのに失敗したり文章書くのに失敗したり、失敗から離れられない今日この頃です。でもまぁ、「失敗しろ」って主張しているようなもんなので、主張してる僕が失敗しないことには始まらないっすね。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-7272029279202721644?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/11/fluxflex-meetup-in-tokyo.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-NyQnQH6klCU/TrocKlUw51I/AAAAAAAABcE/m_h_caYf9-I/s72-c/fluxflex-meetup-survey.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-6254984519134914221</guid><pubDate>Sat, 29 Oct 2011 08:05:00 +0000</pubDate><atom:updated>2011-11-09T15:52:07.290+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ruby</category><category domain="http://www.blogger.com/atom/ns#">Rails</category><title>Okinawa.rbの勉強会が始まりました。</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-C7rtta4_kh4/Trocb_ai5lI/AAAAAAAABcM/ZmCpLimRDP0/s1600/hackathon-scene-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-C7rtta4_kh4/Trocb_ai5lI/AAAAAAAABcM/ZmCpLimRDP0/s1600/hackathon-scene-2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
最近滅多に書かないブログですが、「ブログを書くまでが勉強会です」というtweetを目にしたので、今日は久々にブログを書いてみる事にします。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://yasulab.blogspot.com/2011/08/okinawarb.html"&gt;2011年の８月頃に立ち上がった Okinawa.rb&lt;/a&gt; ですが、段々とメンバーも集まり、また、&lt;a href="http://www.lexues.co.jp/"&gt;株式会社レキサス&lt;/a&gt;さんから会場を貸して頂けたこともあって、ようやく勉強会が開催出来るようになりました。&lt;br /&gt;
&lt;br /&gt;
第１回勉強会では、Ruby on Rails 3 Tutorialの第１章と第２章を要約したものを扱い、第２回勉強会では、テニスのエントリシステムを題材にしたRailsユースケースなどについて扱いました。勉強会で扱った資料については、&lt;a href="http://qwik.jp/okinawarb/"&gt;Okinawa.rbの公式HP&lt;/a&gt;&amp;nbsp;で公開しているので、もしよければご参照下さい。&lt;br /&gt;
&lt;br /&gt;
で、次回の第３回Okinawa.rb勉強会は？ってことについてですが、次回は初心者向けチュートリアル＆玄人向けハッカソンを並行して行おうと考えています。つまり、Ruby/Railsに慣れていない方には、講師と共に&lt;a href="http://rubymonk.com/"&gt;RubyMonk&lt;/a&gt;や&lt;a href="http://qwik.jp/okinawarb/2.html"&gt;過去の勉強会の資料&lt;/a&gt;を使ってRuby/Railsに慣れて頂き、Ruby/Railsに慣れている方には、思うがままに何か作ったり勉強したり議論したり、といった感じの勉強会にする予定です。&lt;br /&gt;
&lt;br /&gt;
というのも、初心者向けにすると玄人な人が来なくなるし、玄人向けにすると初心者な人が来なくなってしまうので、「じゃあ並行してやっちゃえばいいじゃん？」的な考えに基づいています。ここらへんは Try &amp;amp; Error で色々実験してみるしかないっすね。&lt;br /&gt;
&lt;br /&gt;
ということで、第３回 Okinawa.rb 勉強会は、11月５日（土）に開催されるので、もしご都合の合う方いましたら是非是非ご参加を。&lt;br /&gt;
&lt;br /&gt;
第３回 Okinawa.rb 勉強会&lt;br /&gt;
&lt;a href="http://atnd.org/events/21510"&gt;http://atnd.org/events/21510&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
追記：&lt;br /&gt;
最近、Okinawa.rbのFacebook Groupが盛り上がっています。&lt;br /&gt;
Ruby/Railsだけでなく、GitやStart upの話も投稿されます&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;（主に僕が）&lt;/span&gt;。&lt;br /&gt;
もしかしたら沖縄に在住していない人でも楽しめるかも。&lt;br /&gt;
よければこっちの方も是非是非覗いてみて下さい。&lt;br /&gt;
&lt;br /&gt;
Okinawa.rb &amp;nbsp; - &amp;nbsp; Facebook Group&lt;br /&gt;
&lt;a href="http://www.facebook.com/groups/194735460599272/"&gt;http://www.facebook.com/groups/194735460599272/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
追記の追記：&lt;br /&gt;
勉強会の結果はこちらから。&lt;br /&gt;
&lt;br /&gt;
Okinawa.rb公式HP&lt;br /&gt;
&lt;a href="http://qwik.jp/okinawarb/"&gt;http://qwik.jp/okinawarb/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
yasulab&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-6254984519134914221?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/10/okinawarb.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-C7rtta4_kh4/Trocb_ai5lI/AAAAAAAABcM/ZmCpLimRDP0/s72-c/hackathon-scene-2.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-6525620729941524607</guid><pubDate>Thu, 13 Oct 2011 16:28:00 +0000</pubDate><atom:updated>2011-11-09T15:28:56.743+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Report</category><category domain="http://www.blogger.com/atom/ns#">jQuery</category><title>Nico Rank Inverter</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-hhZ9Sfv7xcI/TrodohxkEDI/AAAAAAAABcU/h59NSOx1Rks/s1600/nico-rank-inverter-icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://4.bp.blogspot.com/-hhZ9Sfv7xcI/TrodohxkEDI/AAAAAAAABcU/h59NSOx1Rks/s320/nico-rank-inverter-icon.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
１ヶ月前ぐらいにtwitterでもつぶやきましたが、Gitoriousをサーバに設置している途中で、「ちょっと息抜きに何か作ろうかなー」と妄想に耽っていたら、気付いたらこんなのが出来上がっていました。&lt;br /&gt;
&lt;br /&gt;
もしよければどうぞ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="mod-head" id="mod-description-title" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0.28, rgb(125, 167, 240)), color-stop(0.72, rgb(105, 147, 220))); background-origin: initial; border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; border-top-style: none; border-top-width: 0px; color: white; font-family: arial, sans-serif; font-size: 13px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 4px; padding-left: 6px; padding-right: 6px; padding-top: 3px; text-shadow: rgb(85, 102, 187) 0px 1px;"&gt;
Description&lt;/div&gt;
&lt;div class="mod-body" style="-webkit-box-shadow: rgb(170, 170, 170) 0px 2px 2px; background-color: white; border-bottom-color: rgb(221, 221, 221); border-bottom-left-radius: 5px 5px; border-bottom-right-radius: 5px 5px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(221, 221, 221); border-right-style: solid; border-right-width: 1px; border-top-style: none; border-top-width: 0px; box-shadow: rgb(170, 170, 170) 0px 2px 2px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 5px; padding-left: 10px; padding-right: 10px; padding-top: 5px;"&gt;
&lt;div aria-labelledby="mod-description-title" id="cx-desc-outer-box" role="complementary" style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-top-style: none; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;div id="cx-desc-box" style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-top-style: none; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;pre id="cx-desc-text" style="font-family: arial, sans-serif; font-size: 13px; font: normal normal normal 100%/normal arial, sans-serif; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;ニコニコ動画のランキングを逆順にして表示するChrome Extensionです。100位から順々に表示され、最後に１位が表示されます。&lt;/span&gt;&lt;/pre&gt;
&lt;pre id="cx-desc-text" style="font: normal normal normal 100%/normal arial, sans-serif; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="color: #444444; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;Invert the order in NicoNico Douga Ranking; you can see the ranking in order from 100 to 1, instead of from 1 to 100.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
Chrome Web Store&lt;br /&gt;
&lt;a href="https://chrome.google.com/webstore/detail/bkmhgfacjlbplglbimpdbbeligolfadl"&gt;https://chrome.google.com/webstore/detail/bkmhgfacjlbplglbimpdbbeligolfadl&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
ソースコード&lt;br /&gt;
&lt;a href="https://github.com/yasulab/nico-rank-inverter"&gt;https://github.com/yasulab/nico-rank-inverter&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-6525620729941524607?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/10/nico-rank-inverter.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-hhZ9Sfv7xcI/TrodohxkEDI/AAAAAAAABcU/h59NSOx1Rks/s72-c/nico-rank-inverter-icon.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-2183854000920457355</guid><pubDate>Wed, 05 Oct 2011 07:46:00 +0000</pubDate><atom:updated>2011-10-05T16:46:55.224+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Announce</category><category domain="http://www.blogger.com/atom/ns#">miscellanea</category><title>アイデアソン（Ideathon）</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EzeewMCD7qs/TowKCjPrcEI/AAAAAAAABVY/5NHPWtP8F14/s1600/hirameki.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-EzeewMCD7qs/TowKCjPrcEI/AAAAAAAABVY/5NHPWtP8F14/s200/hirameki.jpg" width="153" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
需要あるのかどうか全く分からないんですが、衝動的にこんなFacebook Group作ってみました。もし興味あればちょっと覗いてみて下さい。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.blogger.com/%E9%9C%80%E8%A6%81%E3%81%82%E3%82%8B%E3%81%AE%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E5%85%A8%E3%81%8F%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%82%93%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E8%A1%9D%E5%8B%95%E7%9A%84%E3%81%AB%E3%81%93%E3%82%93%E3%81%AAFacebook%20Group%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%82%82%E3%81%97%E8%88%88%E5%91%B3%E3%81%82%E3%82%8C%E3%81%B0%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E8%A6%97%E3%81%84%E3%81%A6%E3%81%BF%E3%81%A6%E4%B8%8B%E3%81%95%E3%81%84%E3%80%82%20%20http://www.facebook.com/groups/227001314022802/"&gt;&lt;img border="0" height="127" src="http://2.bp.blogspot.com/-b_Idr0MXZws/TowKOBcehJI/AAAAAAAABVc/E71_omTRBtQ/s400/Screen+shot+2011-10-05+at+16.41.13.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;http://www.facebook.com/groups/227001314022802/&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;紹介文全文：&lt;/div&gt;&lt;blockquote style="text-align: -webkit-auto;"&gt;時々変なIdeaを思いつくんだけど、すぐその場で書き出さないと忘れる。ただ、誰とも共有しないと、Ideaを見返さなくなる。短時間で頑張ってIdeaを捻り出すよりは、中長期的にIdeaを垂れ流していきたい、そんなオープンソースコミュニティです。&lt;/blockquote&gt;&lt;blockquote style="text-align: -webkit-auto;"&gt;本当に大切なIdeaは自分の心の内に閉まっておいて、「もう自分で実装することはないなー」というIdeaはポイッと投げて下さい。もしかしたら誰かが拾ってくれるかもしれません。&lt;/blockquote&gt;&lt;blockquote style="text-align: -webkit-auto;"&gt;しょぼいモノから壮大なモノまで、幅広くIdeaを出す、はず。&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-2183854000920457355?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/10/ideathon.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-EzeewMCD7qs/TowKCjPrcEI/AAAAAAAABVY/5NHPWtP8F14/s72-c/hirameki.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-7291095077606732004</guid><pubDate>Tue, 30 Aug 2011 11:04:00 +0000</pubDate><atom:updated>2011-08-30T20:39:02.863+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Report</category><title>eXtreme HAGO 2 LT 大会アレコレ</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-LdZikbM_vK4/TlzByllcHQI/AAAAAAAABVQ/nQfoUri0oHg/s1600/Screen+shot+2011-08-30+at+19.55.38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://2.bp.blogspot.com/-LdZikbM_vK4/TlzByllcHQI/AAAAAAAABVQ/nQfoUri0oHg/s320/Screen+shot+2011-08-30+at+19.55.38.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
先週末に&amp;nbsp;&lt;a href="http://atnd.org/events/18434"&gt;eXtreme HAGO 2 LT 大会&lt;/a&gt;&amp;nbsp;( &lt;a href="http://twitter.com/#!/search/%23xhago2"&gt;#xHago2&lt;/a&gt; )に参加したので、そのときにやったことや得た情報、感想などのアレコレを忘れないうちにまとめておきます。&lt;br /&gt;
&lt;br /&gt;
やったこと：&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/pages/eXtreme-HAGO/158011850941998"&gt;xHagoのロゴ&lt;/a&gt;を作成しました。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yasulab.blogspot.com/2011/08/android-bazaar-and-conference-2011.html"&gt;発表&lt;/a&gt;しました。というか&lt;a href="http://yasulab.blogspot.com/2011/08/okinawarb.html"&gt;Okinawa.rb&lt;/a&gt;の宣伝を思う存分やってきました。&lt;br /&gt;
今週末の土曜日(9/3)は&lt;a href="http://atnd.org/events/19131"&gt;OJAG + Okinawa.rbの勉強会&lt;/a&gt;があります。是非！&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yasulab.blogspot.com/2011/08/simple-time-keeper.html"&gt;タイムキープ用のWebサービス&lt;/a&gt;を作りました。わりと好評だった模様。&lt;br /&gt;
ただ、MacBook以外のディスプレイだとレイアウトが壊れるかも。&lt;/li&gt;
&lt;/ol&gt;知ったこと：&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;琉球大学ではMacを強制的に買わされ＆Emacs+tcshを使わされるらしい。&lt;/li&gt;
&lt;li&gt;次回&lt;a href="http://www.facebook.com/groups/oiadev/"&gt;沖縄iPhone勉強会&lt;/a&gt;でjQuery Mobileの話をするんだとか。面白そう！&lt;br /&gt;
ABC2011sのデザイントラックでも耳にしましたが、まだまだ不具合が多いっぽい。&lt;/li&gt;
&lt;li&gt;学生さん達がやる気一杯！ASAPで海外留学or就労して欲しいなー。&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;気になること：&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=VDYF7kXyXt4"&gt;Tython&lt;/a&gt;の行く末。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.google.com/viewer?url=http%3A%2F%2Fwww.mgwave.com%2F~ken%2Fxhago2%2Fpccase_led.pdf"&gt;自作PC&lt;/a&gt;の行く末。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.slideshare.net/uskey512/x-hago2-shortcoding-20110827"&gt;ショートコーダー&lt;/a&gt;の末路。&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;次回は2月頃にあるそうです。参加出来るかどうかは分からないけれども、またフラっと寄れたらいいなーって考えています。&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-7291095077606732004?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/extreme-hago-2-lt.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-LdZikbM_vK4/TlzByllcHQI/AAAAAAAABVQ/nQfoUri0oHg/s72-c/Screen+shot+2011-08-30+at+19.55.38.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-2882502237718784005</guid><pubDate>Sun, 28 Aug 2011 06:23:00 +0000</pubDate><atom:updated>2011-08-28T15:56:13.706+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Report</category><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">presentation</category><title>Android Bazaar and Conference 2011 Survey: 10年に１度の変革期を遊びたおすために</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Liha4JEb6dg/TlnmdLZXyjI/AAAAAAAABVM/uKLy7Pu0V2c/s1600/xhago-logo_003_512x512.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Liha4JEb6dg/TlnmdLZXyjI/AAAAAAAABVM/uKLy7Pu0V2c/s320/xhago-logo_003_512x512.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
先日、琉球大学で開催された&amp;nbsp;&lt;a href="http://atnd.org/events/18434"&gt;eXtreme HAGO 2 LT 大会&lt;/a&gt;&amp;nbsp;( &lt;a href="http://twitter.com/#!/search?q=%23xhago2"&gt;#xhago2&lt;/a&gt; )に参加し、表題の内容を発表してきました。内容は、&lt;a href="http://yasulab.blogspot.com/2011/06/android-bazaar-and-conference-2011.html"&gt;以前登壇したABC2011sというカンファレンス&lt;/a&gt;で見聞きしたことに、僕個人の意見を加えたものとなっています。&lt;br /&gt;
&lt;br /&gt;
発表動画：&lt;a href="http://www.ustream.tv/recorded/16899834"&gt;Xhago2nd, Ustream&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
※始めの部分は録画出来てないようです。ネタを仕込んだのに...残念(´・ω・｀) スライドと当日の反応からネタの雰囲気を感じ取って下さい。&lt;br /&gt;
&lt;br /&gt;
スライド：&lt;br /&gt;
&lt;div id="__ss_9030684" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/yasulab/abc2011s-survey" target="_blank" title="Abc2011s survey"&gt;Abc2011s survey&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9030684" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/yasulab" target="_blank"&gt;Yohei Yasukawa&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
当日の反応：&lt;a href="http://togetter.com/li/180163"&gt;eXtreme HAGO 2 LT 大会 第2セッション, togetter&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
おまけ：&lt;strong style="display: inline !important; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 12px;"&gt;&lt;a href="http://www.slideshare.net/yasulab/ss-9035692" target="_blank" title="もしもエンジニアが本気でダイエットしたら"&gt;もしもエンジニアが本気でダイエットしたら&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
※夜の部でネタ発表をしてきました。反応が良かったようなので、後日、目標まで到達したらブログ記事でまとめるつもりです。&lt;br /&gt;
&lt;div id="__ss_9035692" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-2882502237718784005?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/android-bazaar-and-conference-2011.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Liha4JEb6dg/TlnmdLZXyjI/AAAAAAAABVM/uKLy7Pu0V2c/s72-c/xhago-logo_003_512x512.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-4163688880751873510</guid><pubDate>Thu, 25 Aug 2011 10:02:00 +0000</pubDate><atom:updated>2011-11-09T15:52:48.100+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Git</category><title>Dropbox as a Git</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-wNZxDvVJcMU/TrojNu9-WPI/AAAAAAAABcc/_uC5ekU_Xek/s1600/dropbox-git.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-wNZxDvVJcMU/TrojNu9-WPI/AAAAAAAABcc/_uC5ekU_Xek/s1600/dropbox-git.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://github.com/"&gt;GitHub.com&lt;/a&gt;はとても便利なサービスで、&lt;a href="http://github.com/yasulab"&gt;僕もしょっちゅうお世話&lt;/a&gt;になっていますが、Private Repositoryを作る時は課金しないとダメなので、ちょっと面倒ですよね。最低でも7$/month支払う必要があるし、Collaboratorの数も制限されてしまいます。&lt;br /&gt;
&lt;br /&gt;
そこで、DropboxをGitとして使えないかなーって思って調べてみたら、なんか普通に使えそうです。&lt;br /&gt;
&lt;blockquote&gt;
Using Dropbox as a Git&lt;br /&gt;
&lt;a href="http://tumblr.intranation.com/post/766290743/using-dropbox-git-repository"&gt;http://tumblr.intranation.com/post/766290743/using-dropbox-git-repository&lt;/a&gt;&lt;/blockquote&gt;
早速試してみましょう。Mac OS Xでしか試してないので、他のOSでは多分ディレクトリを指定する部分をちょっと修正する必要があるかもです。&lt;br /&gt;
&lt;br /&gt;
0. DropboxとGitをインストール&lt;br /&gt;
※Dropboxのディレクトリは"~/Dropbox"に置いてあることとします。&lt;br /&gt;
&lt;br /&gt;
1. レポジトリ用のフォルダを作成&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
mkdir -p ~/Dropbox/repos/test.git&lt;/blockquote&gt;
&lt;br /&gt;
2. Gitレポジトリを作成&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
cd ~/Dropbox/repos/test.git&lt;br /&gt;
git --bare init&lt;/blockquote&gt;
&lt;br /&gt;
3. テストプロジェクトと.gitを作成&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
mkdir ~/hoge&lt;br /&gt;
cd ~/hoge&lt;br /&gt;
echo "hogehoge" &amp;gt; README&lt;br /&gt;
git init&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m "Dropbox as a Git test"&lt;/blockquote&gt;
&lt;br /&gt;
※Gitの性質上、"touch README"だとダメな気がする。&lt;br /&gt;
&lt;br /&gt;
4. Git remoteでDropbox内のレポジトリを登録してpush&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
git remote add dropbox file://$HOME/Dropbox/repos/test.git&lt;br /&gt;
git push dropbox master&lt;/blockquote&gt;
&lt;br /&gt;
5. git clone をしてみる。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
mkdir ~/foo&lt;br /&gt;
cd ~/foo&lt;br /&gt;
git clone -o dropbox file://$HOME/Dropbox/repos/test.git&lt;/blockquote&gt;
&lt;br /&gt;
6. READMEが入ってる"test"フォルダがちゃんとcloneできてたら成功。&lt;br /&gt;
&lt;br /&gt;
とまぁ、こんな感じでDropboxをレポジトリとして使うことができそうです。あとは"repos"フォルダを他の人と共有すれば良いのかな？もしかしたら色々と問題が出てくるかもしれないけれど、問題を発見したら随時追記していこうと思います。&lt;br /&gt;
&lt;br /&gt;
&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/5762104224722516841-4163688880751873510?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/dropbox-as-git.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-wNZxDvVJcMU/TrojNu9-WPI/AAAAAAAABcc/_uC5ekU_Xek/s72-c/dropbox-git.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-6634750602526596292</guid><pubDate>Wed, 24 Aug 2011 07:29:00 +0000</pubDate><atom:updated>2011-11-09T15:55:09.458+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Review</category><title>書評：大震災の後で人生について語るということ</title><description>&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-A-_ea1JbUTo/TrojtYj5ttI/AAAAAAAABck/ydR62S2pFrI/s1600/life-after-disaster.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-A-_ea1JbUTo/TrojtYj5ttI/AAAAAAAABck/ydR62S2pFrI/s320/life-after-disaster.png" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&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;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?t=yasulab-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=4062171392&amp;amp;ref=qf_sp_asin_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="background-color: transparent; height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-6634750602526596292?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/blog-post_24.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-A-_ea1JbUTo/TrojtYj5ttI/AAAAAAAABck/ydR62S2pFrI/s72-c/life-after-disaster.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-8030890924153070971</guid><pubDate>Fri, 19 Aug 2011 17:07:00 +0000</pubDate><atom:updated>2011-11-09T15:58:35.557+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">thinking</category><category domain="http://www.blogger.com/atom/ns#">RePost</category><category domain="http://www.blogger.com/atom/ns#">Design</category><title>Far Beyond The Computers</title><description>&lt;div style="text-align: center;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-8x_DT7Udpyk/TrokkyNhZBI/AAAAAAAABcs/N9uWNa7pUXA/s1600/far-beyond-the-computer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://1.bp.blogspot.com/-8x_DT7Udpyk/TrokkyNhZBI/AAAAAAAABcs/N9uWNa7pUXA/s320/far-beyond-the-computer.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" height="224" src="http://player.vimeo.com/video/27428566?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;autoplay=0" width="398"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
早稲田大学情報理工学科 オリエンテーション2011&lt;br /&gt;
Department of Computer Science, Waseda University&lt;br /&gt;
（情報理工学科プロモーションビデオ：CSPV）&lt;br /&gt;
&lt;br /&gt;
Credit&lt;br /&gt;
&amp;nbsp; &amp;nbsp;- Camera Crew: Akihiro Shimoda&lt;br /&gt;
&amp;nbsp; &amp;nbsp;- Music: Akihiro Hayashi&lt;br /&gt;
&amp;nbsp; &amp;nbsp;- Director: Yoichi Matsuyama&lt;br /&gt;
&amp;nbsp; &amp;nbsp;- Produce: Waseda CS Assistants&lt;br /&gt;
&lt;br /&gt;
中の人曰く、&lt;br /&gt;
&lt;blockquote&gt;
CSPVは基本的にポストプロダクションはPremiere+After Effectsであっさり塩味です．もっとも，ツールというよりは，Tシャツのデザインや教授の説得作戦，照明や音声など，プレプロダクションと撮影時の素材に割とこだわったものでした．&lt;/blockquote&gt;
だそうです。&lt;br /&gt;
&lt;br /&gt;
# あれ、僕の知ってるPremiereと違う...&lt;br /&gt;
&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/5762104224722516841-8030890924153070971?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/far-beyond-computers.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-8x_DT7Udpyk/TrokkyNhZBI/AAAAAAAABcs/N9uWNa7pUXA/s72-c/far-beyond-the-computer.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-3867779476906024402</guid><pubDate>Fri, 19 Aug 2011 08:56:00 +0000</pubDate><atom:updated>2011-08-19T17:58:38.821+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Announcement</category><title>OJAG workshop@Naha Vol.10</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9QrMu8lQXbg/Tk4jPziwE6I/AAAAAAAABVI/-QCTctNXUdE/s1600/oist.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-9QrMu8lQXbg/Tk4jPziwE6I/AAAAAAAABVI/-QCTctNXUdE/s1600/oist.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
明日はAndroidの会＠沖縄のworkshop( #ojagnaha0820 )の日ですよ。今回はARカメラとか #abc2011s のSurveyとかBlenderな話が聞けるそうですよ。詳細は&lt;a href="http://atnd.org/events/18794"&gt;コチラ&lt;/a&gt;から。&lt;br /&gt;
&lt;br /&gt;
ちなみに、今回は僕が代理で会を運営することになってます。もし何か分からないことがあれば yasulab@gmail.com か @yasulab までご連絡下さい。ではでは、皆さんの参加をお待ちしています。&lt;br /&gt;
&lt;br /&gt;
# ところで、上記の写真は&lt;a href="http://www.oist.jp/en.html"&gt;OIST&lt;/a&gt;で撮ったやつです。OISTってリゾート地にあるんですね。近くに運動場とかゴルフ場とかあるし、見ての通り景観も良い感じ。OISTに所属している研究者の７割は海外から来た人で、しかもアジア系ではなく、ヨーロッパ系の人がいっぱい集まっている模様。最初に話した台湾人の研究者の方も中々気さくでナイスな方だったし、なんというか、かなり面白そうな研究機関の匂いがしました。来年から開学して、大学院生（博士課程のみ）を募集するそうです。&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/5762104224722516841-3867779476906024402?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/ojag-workshopnaha-vol10.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-9QrMu8lQXbg/Tk4jPziwE6I/AAAAAAAABVI/-QCTctNXUdE/s72-c/oist.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-8222049062119634631</guid><pubDate>Thu, 18 Aug 2011 09:35:00 +0000</pubDate><atom:updated>2011-10-23T16:30:09.145+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Announce</category><category domain="http://www.blogger.com/atom/ns#">Ruby</category><category domain="http://www.blogger.com/atom/ns#">Rails</category><title>Okinawa.rbを立ち上げました。</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jRsxRKAIHQU/TkzcV9NOcRI/AAAAAAAABVE/YPD_7bTm-t4/s1600/okinawa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-jRsxRKAIHQU/TkzcV9NOcRI/AAAAAAAABVE/YPD_7bTm-t4/s1600/okinawa.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
沖縄に来てから早くも３ヶ月弱経ってしまいましたが、沖縄って中々住み良いところですよね。海を見ながらプログラミング出来るし、風も心地良いし。でもRubyとかRailsとかが流行ると、もっと住み良いところになりそうですよね。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;ということで、&lt;a href="http://groups.google.com/group/okinawa-rb"&gt;Okinawa.rb&lt;/a&gt;を立ち上げました。&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
「沖縄でRuby/RailsといったらOkinawa.rb」と言われるぐらい有名になって、いずれは&lt;a href="http://twitter.com/#!/yukihiro_matz"&gt;Matz&lt;/a&gt;さんとか召喚出来たら面白そうですね。あるいは、Ruby/Railsを使って沖縄でちょっとしたノマド生活を送りたい人達の足がかりになったらいいなー、と妄想しています。&lt;br /&gt;
&lt;br /&gt;
以下、Okinawa.rbの生息地域です。ご興味あれば是非覗いてみてください。&lt;br /&gt;
&lt;br /&gt;
公式サイト:&amp;nbsp;&lt;a href="http://qwik.jp/okinawarb/FrontPage.html"&gt;Okinawa.rb&lt;/a&gt;&lt;br /&gt;
Google Group(ML): &lt;a href="http://groups.google.com/group/okinawa-rb"&gt;Okinawa.rb&lt;/a&gt;&lt;br /&gt;
Facebook Group: &lt;a href="http://www.facebook.com/groups/194735460599272/"&gt;Okinawa.rb&lt;/a&gt;&lt;br /&gt;
Twitter Tag: &lt;a href="http://twitter.com/#!/search?q=%23okinawarb"&gt;#okinawarb&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
IRCnet:&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Channel: #Okinawa.rb&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Server: chat.freenode.net or irc.freenode.net&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Port No.: 6665, 6666, 6667&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Char Code: UTF-8&lt;br /&gt;
&lt;br /&gt;
また、暫定ではありますが、９月３日、沖縄の&lt;a href="http://it-shinryo.org/aboutus.html"&gt;IT津梁パーク&lt;/a&gt;にて初回勉強会を開く予定です。詳細は&lt;a href="http://groups.google.com/group/okinawa-rb/browse_thread/thread/f1780015c33d888c"&gt;ML&lt;/a&gt;で後日投稿します。もしご都合が合う方は、是非ご参加して頂けると嬉しいです。&lt;br /&gt;
&lt;br /&gt;
よろしくお願いします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
追記：&lt;br /&gt;
沖縄に移住するRuby/Railsユーザはそこまでいないかもしれませんが、沖縄に観光などで訪れるRuby/Railsユーザは結構いるんじゃないかと思います。もし沖縄に訪れる機会がありましたら、Okinawa.rbにちょっと顔を出して頂けたら幸いです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-8222049062119634631?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/okinawarb.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-jRsxRKAIHQU/TkzcV9NOcRI/AAAAAAAABVE/YPD_7bTm-t4/s72-c/okinawa.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-3149901163092151681</guid><pubDate>Tue, 16 Aug 2011 12:09:00 +0000</pubDate><atom:updated>2011-11-09T16:13:40.136+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Review</category><category domain="http://www.blogger.com/atom/ns#">Rails</category><title>書評：Agile Web Development with Rails (4e)</title><description>&lt;div&gt;
&lt;div style="text-align: center;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-NsSmfij8tKM/TrooHiDmDjI/AAAAAAAABc0/EcWImhCZpfI/s1600/agile-web-dev-with-rails-4e.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-NsSmfij8tKM/TrooHiDmDjI/AAAAAAAABc0/EcWImhCZpfI/s320/agile-web-dev-with-rails-4e.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;div style="text-align: left;"&gt;
三部構成になっていて、始めにインストールやMVCの概念を軽く説明し、次に、Depotというオンラインストアを作りながらRailsの使い方を丁寧に解説している。最後に、Depotを例にしながらRailsの仕組み（e.g. MVCの内部の振る舞い、Caching）と、Pluginsの紹介をして終わる。&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
RoR3 Tutorialという本では、Herokuやrspecなどの有名どころのツールを使った開発方法を説明しているが、本書では、FixtureやScaffoldなどのデフォルトで備わっている機能を使った開発方法の説明に専念している。&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
個人的には、洋書ではこのようなサンプルを使った解説が流行っていて、和書では、レシピブック系（e.g. Rails 3 レシピブック、 Ruby on Rails 3 アプリケーションプログラミング）が流行っているような気がするので、うまく組み合わせて勉強すると効率的にRails 3を学べるような気がします。&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=scietalk-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1934356549&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; text-align: left; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-3149901163092151681?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/agile-web-development-with-rails-4e.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-NsSmfij8tKM/TrooHiDmDjI/AAAAAAAABc0/EcWImhCZpfI/s72-c/agile-web-dev-with-rails-4e.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-9183022378225474739</guid><pubDate>Mon, 15 Aug 2011 10:20:00 +0000</pubDate><atom:updated>2011-11-09T16:18:35.841+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Report</category><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>OAuth on Simple Twitter Bot (2)</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-gP-bIV3EDPc/TropRv3VgfI/AAAAAAAABdM/8XbIjJpXJZg/s1600/twitter-bot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-gP-bIV3EDPc/TropRv3VgfI/AAAAAAAABdM/8XbIjJpXJZg/s1600/twitter-bot.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ちょっと &lt;a href="http://twitter.com/yasulabot"&gt;@yasulabot&lt;/a&gt; というネタbotをつくるためだけに、&lt;a href="http://github.com/yasulab/Simple-Twitter-bot"&gt;SimpleTwitterBot&lt;/a&gt;を弄り直しました。基本的には&lt;a href="https://github.com/yasulab/Simple-Twitter-Bot/blob/master/README"&gt;README&lt;/a&gt;に書かれている通りにregister_pin.pyを実行すれば、OAuth周りの設定は勝手にやってくれるはずですが、個人的につまずいたポイントをちょろっとリストにしてみます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- 1. botのtwitterアカウントでログインしたブラウザで、OAuthに登録する事。ChromeならCtrl+Shift+Nで開いたブラウザでbotアカウントにログインして、OAuthに登録すると楽。&lt;br /&gt;
&lt;br /&gt;
- 2. デフォルトのAPIのpermissionは"Read only"なので、APIを通してtweetとかdeleteとかしたいならOAuthの設定画面から、Permissionを"Read &amp;amp; Write"に変更すること。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- 3. たぶん、Windowsだとうまく動かない（&lt;a href="https://github.com/yasulab/Simple-Twitter-Bot/issues/1"&gt;Issue 1&lt;/a&gt;）。Windows非対応。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
基本的にこれらの点に注意して、あとはREADME通りにやれば、自作BotがGAE上で動くような気がします。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
README（引用）：&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 11px; line-height: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font: normal normal normal 12px/normal 'Bitstream Vera Sans Mono', Courier, monospace; line-height: 1.4; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="line" id="LC1" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
This bot runs in the following ways.&lt;/div&gt;
&lt;div class="line" id="LC2" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC3" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
1. Search tweets using 'search_term' in Twitter.&lt;/div&gt;
&lt;div class="line" id="LC4" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC5" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
2. Re-tweet the tweets.&lt;/div&gt;
&lt;div class="line" id="LC6" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC7" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
In this example, 'search_term' is 'Cafe Miyama',&lt;/div&gt;
&lt;div class="line" id="LC8" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
and you can see how it behaves by checking the following account.&lt;/div&gt;
&lt;div class="line" id="LC9" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC10" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;a href="http://twitter.com/cafemiyamabot" rel="noreferrer" style="color: #4183c4; cursor: help; display: inline !important; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;http://twitter.com/cafemiyamabot&lt;/a&gt;&lt;/div&gt;
&lt;div class="line" id="LC11" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC12" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC13" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
HOW TO SETUP:&lt;/div&gt;
&lt;div class="line" id="LC13" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC14" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
1. Register your OAuth client on Twitter&lt;/div&gt;
&lt;div class="line" id="LC15" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
URL: &lt;a href="http://twitter.com/oauth_clients" rel="noreferrer" style="color: #4183c4; cursor: help; display: inline !important; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;http://twitter.com/oauth_clients&lt;/a&gt;&lt;/div&gt;
&lt;div class="line" id="LC16" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
NOTE: You MUST change permission settings to "Read &amp;amp; Write" if you wanna update via API.&lt;/div&gt;
&lt;div class="line" id="LC17" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The default is "Read Only".&lt;/div&gt;
&lt;div class="line" id="LC18" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC19" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
2. Run 'python register_pin.py' and&lt;/div&gt;
&lt;div class="line" id="LC20" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;use CONSUMER_KEY and CONSUMER_SECRET you got from the registeration.&lt;/div&gt;
&lt;div class="line" id="LC21" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
NOTE: Make sure you are now signing in Twitter as your Bot account when visiting a given URL.&lt;/div&gt;
&lt;div class="line" id="LC22" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC23" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
3. Change setting variables (CONSUMER_KEY and CONSUMER_SECRET) in main.py to the given ones.&lt;/div&gt;
&lt;div class="line" id="LC24" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC25" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
4. Run Google App Engine dev_server and visit the following URL&lt;/div&gt;
&lt;div class="line" id="LC26" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
URL: &lt;a href="http://localhost:8080/cron/update" rel="noreferrer" style="color: #4183c4; cursor: help; display: inline !important; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;http://localhost:8080/cron/update&lt;/a&gt;&lt;/div&gt;
&lt;div class="line" id="LC27" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
* If you finish all of your setting, set 'debug_flag' in main.py off.&lt;/div&gt;
&lt;div class="line" id="LC28" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC29" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
5. Done!&lt;/div&gt;
&lt;div class="line" id="LC30" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC31" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
Enjoy developing your own twitter bot!&lt;/div&gt;
&lt;div class="line" id="LC32" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div class="line" id="LC33" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
YasuLab&lt;/div&gt;
&lt;div class="line" id="LC34" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;
yasulab@gmail.com&lt;/div&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
参考：&lt;a href="http://yasulab.blogspot.com/2010/09/oauth-on-simple-twitter-bot.html"&gt;OAuth on Simple Twitter Bot&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-9183022378225474739?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/oauth-on-simple-twitter-bot-2.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-gP-bIV3EDPc/TropRv3VgfI/AAAAAAAABdM/8XbIjJpXJZg/s72-c/twitter-bot.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-6440445447858512040</guid><pubDate>Thu, 11 Aug 2011 16:23:00 +0000</pubDate><atom:updated>2011-09-05T01:59:01.840+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">web application</category><category domain="http://www.blogger.com/atom/ns#">Report</category><title>SimpleTimeKeeper</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-m-Hc-PpvzLs/TkQBEq5mRLI/AAAAAAAABUo/o715DZ64hcs/s1600/Screen+shot+2011-08-12+at+1.15.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://2.bp.blogspot.com/-m-Hc-PpvzLs/TkQBEq5mRLI/AAAAAAAABUo/o715DZ64hcs/s400/Screen+shot+2011-08-12+at+1.15.04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I created a simple time keeper that helps you timekeeping. It can be used for presentations and lightning talks. No software needs to be installed; just visit the website below :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://timekeeper.fluxflex.com/"&gt;http://timekeeper.fluxflex.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
諸事情で今月の #ojag Workshopの仕切りをやる事になったので、当日必要になるであろうタイムキーパーをサクッと作ってみました。よければ使ってあげてください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-6440445447858512040?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/simple-time-keeper.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-m-Hc-PpvzLs/TkQBEq5mRLI/AAAAAAAABUo/o715DZ64hcs/s72-c/Screen+shot+2011-08-12+at+1.15.04.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5762104224722516841.post-6160656562747648425</guid><pubDate>Tue, 09 Aug 2011 11:54:00 +0000</pubDate><atom:updated>2011-11-10T14:38:54.993+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Django</category><category domain="http://www.blogger.com/atom/ns#">PaaS</category><title>Django Tutorial's app (poll) on DjangoZoom</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-SSNzDBSH_qA/TrtjavXjZOI/AAAAAAAABew/rZYw7lKG954/s1600/djangozoom-ss.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://4.bp.blogspot.com/-SSNzDBSH_qA/TrtjavXjZOI/AAAAAAAABew/rZYw7lKG954/s320/djangozoom-ss.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Railsに夢中で最近Djangoを放置プレイしていましたが、諸事情でちょっと投票Appを作りたかったので、ずっとpending状態だったDjangoZoomに、Django Tutorialの投票Appを乗っけてみました。以下、その手順。&lt;br /&gt;
&lt;br /&gt;
0. 難癖付けて、&lt;a href="http://djangozoom.com/"&gt;DjangoZoom&lt;/a&gt;のInvitation Codeを催促＆ゲット。&lt;br /&gt;
e.g. "俺いま面白いウェブサービス作ってるんだけど、是非DjangoZoomに乗っけたいです！"&lt;br /&gt;
&lt;br /&gt;
1. &lt;a href="https://code.djangoproject.com/wiki/Tutorials"&gt;Django Tutorial&lt;/a&gt;を読んで、投票App (Poll)を作成。&lt;br /&gt;
&lt;br /&gt;
2. &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;に作った投票Appを乗っける。&lt;br /&gt;
e.g.&amp;nbsp;&lt;a href="https://github.com/yasulab/poll"&gt;https://github.com/yasulab/poll&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
3. DjangoZoomのDashboardから"Add a new project"を選択。&lt;br /&gt;
&lt;br /&gt;
4. "Repo"の項目にGit Repoを入力。&lt;br /&gt;
e.g.&amp;nbsp;git@github.com:yasulab/poll.git&lt;br /&gt;
&lt;br /&gt;
5.&amp;nbsp;Djangoのversion(1.2.5 or 1.3)を指定。他はそのままでok。そしてdeploy開始。&lt;br /&gt;
&lt;br /&gt;
6. deploy後、左ペインから"Create Superuser"をクリックし、ユーザ登録。&lt;br /&gt;
&lt;br /&gt;
7. Djangoのadminページから登録したユーザでログイン。&lt;br /&gt;
&lt;br /&gt;
8. 無事ログイン出来たら成功！あとはお好きなように。&lt;br /&gt;
e.g. &lt;a href="http://p00000394.djangozoom.net/polls/"&gt;サンプルサイト&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Railsの&lt;a href="http://www.heroku.com/"&gt;heroku&lt;/a&gt;もそうですが、あるWeb Frameworkに特化したPaaSは、かなりの完成度ですね。汎用的に使える&lt;a href="http://www.dotcloud.com/"&gt;Dotcloud&lt;/a&gt;や&lt;a href="https://www.fluxflex.com/"&gt;Fluxflex&lt;/a&gt;も十分使いやすいですが、deployまでのステップ数と分かりやすさの点から言うと、制約がある分、特化型のPaaSの方がより使いやすいというのが、個人的な感想です。といっても、最初の一歩が大きいか小さいか程度の問題ですので、将来的には、どこまでログを取れるのかとか、ホストの安定性とかが決め手になるのかもしれないですね。&lt;br /&gt;
&lt;br /&gt;
とにかく、今年はPaaSの時代っぽいですね。個人や小規模のチームにとっては、とても良い年になるんじゃないかと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5762104224722516841-6160656562747648425?l=yasulab.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://yasulab.blogspot.com/2011/08/django-tutorials-app-poll-on-djangozoom.html</link><author>noreply@blogger.com (yasulab)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-SSNzDBSH_qA/TrtjavXjZOI/AAAAAAAABew/rZYw7lKG954/s72-c/djangozoom-ss.png" height="72" width="72" /><thr:total>0</thr:total></item></channel></rss>

