A More Beautiful day http://www.tk-mitsu.com/diary/ メモメモ、ひらすらメモ メモリ上に DB を作る (SQLite3) http://www.tk-mitsu.com/diary/2009-08-10-2.html <p></p> <p></p> <p>メモリ上に DB を作って、データを入れたり、参照したり。</p> <p></p> <pre>#!/usr/bin/ruby require 'rubygems' require 'sqlite3' sql = &lt;&lt;EOS create table tbl_test ( id text, name text ); EOS db = SQLite3::Database.new(&quot;:memory:&quot;) db.execute(sql) db.transaction { |t| 3.times do |i| t.execute(&quot;insert into tbl_test (id, name) values(?, ?)&quot;, i, &quot;user#{i}&quot;) end } i = 0 db.execute('select * from tbl_test') do |row| i += 1 puts &quot;#{i}, #{row.join(&quot;\t&quot;)}&quot; end db.close </pre> 2009-08-10T00:00:00+09:00 Google Chrome OS について思うこと(メモ) http://www.tk-mitsu.com/diary/2009-08-10-1.html <p></p> <p></p> <p>自分用のメモ書きです。</p> <p></p> <h3>年内にそのソースコードを公開します</h3> <ul><li>オープンソースなので、MS のように海賊版対策は必要ない?</li><li>訴訟には対策済み?</li></ul> <p>---「MicrosoftがWindowsとIEをセット販売していることで~」みたいなこと</p> <ul><li>コミュニティに協力を仰ぐということは、どこかで大きな発表がある?</li><li>何に合わせてくるのか?</li></ul> <p></p> <h3>2010 年後半には Google Chrome OS 搭載ネットブックが市場に登場</h3> <ul><li>「世界のインターネット人口、2013年に22億人に」なる時期を狙っている?</li><li>先進国の成長率は低いから、BRICs 辺りの新興国に合わせている?</li><li>新しいターゲットを含めた戦略?</li></ul> <p></p> <h3>スピードと使いやすさ</h3> <ul><li>既存の仕組みから、いらないものを除いていく?</li><li>新しい仕組みに、必要なものだけをのせる?</li><li>ウィンドウシステムを独自のものにするみたい</li></ul> <p></p> <h3>セキュリティアーキテクチャを全面的に設計し直す</h3> <ul><li>サンドボックス上で動作する?</li><li>Google Chrome がサンドボックスでセキュリティを向上しているように?</li></ul> <p></p> <h3>選択肢を用意するということは、Google を含むすべての人々の利益のためのイノベーションを加速させるものだと信じます</h3> <ul><li>選択肢には、Android と Chrome OS を含め、他の OS も含まれている?</li></ul> <p></p> <h3>参考</h3> <ul><li>[[Google Chrome OS のご紹介|http://googlejapan.blogspot.com/2009/07/google-chrome-os.html]]</li><li>[[世界のインターネット人口、2013年に22億人に|http://www.itmedia.co.jp/news/articles/0907/23/news010.html]]</li></ul> 2009-08-10T00:00:00+09:00 表紙買い http://www.tk-mitsu.com/diary/2009-08-03-1.html <p></p> <p>マンガでわかる微分積分</p> <p>[asin:4274066320:detail]</p> 2009-08-03T00:00:00+09:00 カンバン・ゲーム - 第 4 回 すくすく・スクラム http://www.tk-mitsu.com/diary/2009-08-02-1.html <p></p> <p></p> <p>参加できませんでしたので、動画を見て感想を書いてみました。</p> <p></p> <h3>ざっくり内容のまとめ。</h3> <p></p> <ul><li>かんばんのお話</li><li>リーン思考を参考にしたリーン・カンバンが流行</li><li>それをゲームで体験してもらう</li><li>リーン &amp; カンバン</li><li>ムダを認識する</li><li>カンバンは「プル生産」 -&gt; 実は(許容量?流れ?)を制限することによって成り立つ</li><li>カンバンのゲームプレイ</li></ul> <p></p> <p></p> <h3>感想</h3> <p></p> <ul><li>リーンカンバンとそのゲームの説明がほとんどだったので、実際ゲームをやってみないと何とも言えないところはあります。</li><li>最初のルールと制約をつけたルールでプレイしたけれど、その差は動画を見ているだけはよくわからなかった。プレイしてみてわかること?なのかな。</li><li>制約のつけ方が生産工程っぽいのがリーンをベースにしているからかな。</li><li>進捗記録は、記入する項目が多かったが、後の見える化に繋がる材料なのかもね。</li><li>「チームで担当者を決める・変更する」で、担当の壁を越えた何かに気づけるかも。担当を替えるというのはなかなかないから、いい体験になるかな。</li><li>ダイスは D6 なのかな?4 面や 8面をバラバラに持たせて使うと担当者の能力に変化があって面白くなったり・・・ならなかったりw 今回の本質ではないけれど。</li></ul> 2009-08-02T00:00:00+09:00 Wassr に画像付き POST http://www.tk-mitsu.com/diary/2009-07-16-1.html <p></p> <p>画像データ付きで POST する場合は "multipart/form-data" で送る必要があるようで。ただ、画像データ付きじゃないときでも "multipart/form-data" で POST することはできます。</p> <p>Net::HTTP::Post で multipart 形式は送れなさそうなので、multipart 送信は自前で作った。</p> <p></p> <p>POST する画像データ部分には、値は適当でいいので、"filename=" を指定する必要があります。</p> <p>これが分からずはまってました。</p> <p></p> <pre>#!/usr/bin/ruby require &quot;rubygems&quot; require &quot;pit&quot; require &quot;WebService&quot; require &quot;uri&quot; module WebService class Simple def upload(request_uri, params = {}) p = @params.merge(params) boundary = make_boundary Net::HTTP.start(@base_url.host, @base_url.port) do |http| req = Net::HTTP::Post.new(@base_url.request_uri + request_uri) req[&quot;user-agent&quot;] = @user_agent unless @user_agent.empty? req[&quot;content-type&quot;] = &quot;multipart/form-data; boundary=#{boundary}&quot; req.basic_auth(@username, @password) if @username &amp;&amp; @password req.body = make_multipart(boundary, p) res = http.request(req) res.body.toutf8 end end def make_boundary(size = 32) Array.new(size).map{(0x61 + rand(26)).chr}.join end # ref. Wasaco http://coderepos.org/share/browser/platform/air/wasaco/src/vc/kan/net def make_multipart(boundary, params) s = &quot;&quot; params.each_pair do |key, val| s &lt;&lt; &quot;--#{boundary}\r\n&quot; if key == :image s &lt;&lt; &quot;Content-Disposition: form-data; name=\&quot;#{key}\&quot;; filename=\&quot;img.jpg\&quot;\r\n&quot; s &lt;&lt; &quot;Content-Type: image/jpg\r\n&quot; else s &lt;&lt; &quot;Content-Disposition: form-data; name=\&quot;#{key}\&quot;;\r\n&quot; end s &lt;&lt; &quot;\r\n&quot; s &lt;&lt; &quot;#{val}&quot; s &lt;&lt; &quot;\r\n&quot; end s &lt;&lt; &quot;--#{boundary}--&quot; s end end end pit = Pit.get(&quot;wassr&quot;) wassr = WebService::Simple.new wassr.basic_auth(pit[&quot;username&quot;], pit[&quot;password&quot;]) wassr.base_url 'http://api.wassr.jp/statuses/' bin = File.open(&quot;text_draw.jpg&quot;, &quot;rb&quot;).read wassr.upload('update.json', {:source =&gt; 'WebService::Simple(Ruby)', :status =&gt; &quot;てすと&quot;, :image =&gt; bin}) </pre> 2009-07-16T00:00:00+09:00