<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom"><id>tag:blog.sorah.jp,2005:/feed</id><link rel="alternate" type="text/html" href="http://blog.sorah.jp/"/><link rel="self" type="application/atom+xml" href="http://blog.sorah.jp/feed"/><title>blog.sorah</title><updated>2013-01-29 02:32:04 +0900</updated><entry><id>tag:blog.sorah.jp,2005:Entry/150</id><published>2013-01-29T02:29:02+09:00</published><updated>2013-01-29T02:32:04+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2013/01/29/cvars-and-ivars-on-class-ruby"/><title>Class Variables and Instance Variables on Class, in Ruby</title><content type="html">&lt;p&gt;Do you know problems around class variables in Ruby?&lt;/p&gt;

&lt;h2&gt;Class variable&lt;/h2&gt;

&lt;p&gt;You can declare class variables by using &lt;code&gt;@@&lt;/code&gt; for prefix of variable name, for instance: &lt;code&gt;@@foo&lt;/code&gt;.&lt;/p&gt;

&lt;script src="https://gist.github.com/4657188.js?file=a.rb"&gt;&lt;/script&gt;

&lt;h3&gt;Problem&lt;/h3&gt;

&lt;p&gt;But, class variables can easily overwrite by subclasses. This is based on Ruby specification; class variables can be shared on its subclass.&lt;/p&gt;

&lt;script src="https://gist.github.com/4657188.js?file=b.rb"&gt;&lt;/script&gt;

&lt;script src="https://gist.github.com/4657188.js?file=c.rb"&gt;&lt;/script&gt;

&lt;p&gt;&lt;strong&gt;Class variables are similar with global variables.&lt;/strong&gt; They&amp;#39;re too hard to handle safely.&lt;/p&gt;

&lt;p&gt;For usually cases, I can&amp;#39;t recommend to use.&lt;/p&gt;

&lt;h2&gt;Declare Instance Variable on Class object&lt;/h2&gt;

&lt;p&gt;So then, how we define &amp;quot;class variable,&amp;quot; safely?&lt;/p&gt;

&lt;p&gt;In Ruby, &lt;strong&gt;classes are object.&lt;/strong&gt; This means you can define instance variable on class.&lt;/p&gt;

&lt;script src="https://gist.github.com/4657188.js?file=d.rb"&gt;&lt;/script&gt;

&lt;p&gt;Scope of instance variables on class are closed within the same class.
Thus, they don&amp;#39;t effect on subclasses.&lt;/p&gt;

&lt;script src="https://gist.github.com/4657188.js?file=e.rb"&gt;&lt;/script&gt;

&lt;p&gt;(Of course you can use &lt;code&gt;attr_accessor&lt;/code&gt;, &lt;code&gt;attr_reader&lt;/code&gt;, &lt;code&gt;attr_writer&lt;/code&gt;. &lt;a href="https://gist.github.com/4657188#file-f-rb"&gt;Example code&lt;/a&gt;)&lt;/p&gt;

&lt;h3&gt;Using from instance&lt;/h3&gt;

&lt;p&gt;Here are how to use that variables from instance objects.&lt;/p&gt;

&lt;h4&gt;Use attr_accessor&lt;/h4&gt;

&lt;script src="https://gist.github.com/4657188.js?file=g.rb"&gt;&lt;/script&gt;

&lt;p&gt;The simple solution.&lt;/p&gt;

&lt;h4&gt;Use instance_variable_get&lt;/h4&gt;

&lt;p&gt;but if you wanted to protect from foreigns, you can use &lt;code&gt;instance_variable_get&lt;/code&gt; and private method.&lt;/p&gt;

&lt;script src="https://gist.github.com/4657188.js?file=h.rb"&gt;&lt;/script&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/149</id><published>2013-01-17T22:56:13+09:00</published><updated>2013-01-17T23:18:58+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2013/01/17/global-rbenv"/><title>Run rbenv in global</title><content type="html">&lt;p&gt;When we need ruby in servers, sometime we can&amp;#39;t use the system&amp;#39;s package manager.&lt;/p&gt;

&lt;p&gt;Because available packages are all old, they may have weird rubygems integration, and there&amp;#39;re more reasons.&lt;/p&gt;

&lt;p&gt;So we should consider another methods to get ruby in your servers, for instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build packages by myself&lt;/strong&gt;: deb, rpm packages, ebuild&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I think helpful when you have many servers, but when not, it may be overkill.&lt;/li&gt;
&lt;li&gt;Building packages are boring stuff.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install ruby by hand&lt;/strong&gt;: &lt;code&gt;make &amp;amp;&amp;amp; make install&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Difficult to control. What you do when you want to uninstall ruby?&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Version Managers&lt;/strong&gt;: Install rbenv, rvm&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple solution.&lt;/li&gt;
&lt;li&gt;I prefer rbenv . &lt;code&gt;rvm&lt;/code&gt; changes many shell behaviors.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, I use rbenv for my servers.&lt;/p&gt;

&lt;p&gt;But normally we install rbenv in &lt;code&gt;~/.rbenv&lt;/code&gt;. But I wanted to install globally, like in &lt;code&gt;/usr/local/bin/ruby&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Install rbenv and ruby-build&lt;/h2&gt;

&lt;p&gt;I used &lt;code&gt;/usr/local/rbenv&lt;/code&gt; for place installation.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo -i
cd /usr/local
git clone https://github.com/sstephenson/rbenv rbenv
mkdir -p rbenv/plugins
git clone https://github.com/sstephenson/ruby-build rbenv/plugins/ruby-build
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;RBENV_ROOT&lt;/h2&gt;

&lt;p&gt;rbenv looks &lt;code&gt;RBENV_ROOT&lt;/code&gt; for many paths. In default (= when not specified), &lt;code&gt;~/.rbenv&lt;/code&gt; is set.&lt;/p&gt;

&lt;p&gt;When installed rbenv in &lt;code&gt;/usr/local/rbenv&lt;/code&gt;, we should set it to &lt;code&gt;RBENV_ROOT=/usr/local/rbenv&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Install ruby in rbenv by ruby-build&lt;/h2&gt;

&lt;p&gt;Simply do:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo env RBENV_ROOT=/usr/local/rbenv install 1.9.3-p374
sudo env RBENV_ROOT=/usr/local/rbenv rehash
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then, set installed ruby to default ruby:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo env RBENV_ROOT=/usr/local/rbenv global 1.9.3-p374
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Okay, we&amp;#39;ve done setup ruby on &lt;code&gt;/usr/local/rbenv/shims/ruby&lt;/code&gt;. but, still requires setting &lt;code&gt;$PATH&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;global-rehash&lt;/h2&gt;

&lt;p&gt;I wrote simple plugin for rbenv: &lt;a href="https://github.com/sorah/rbenv-global-rehash"&gt;https://github.com/sorah/rbenv-global-rehash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This generates symbolic links and scripts to specified directory, from &lt;code&gt;${RBENV_ROOT}/shims&lt;/code&gt; and &lt;code&gt;${RBENV_ROOT}/bin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;${RBENV_ROOT}/bin&lt;/code&gt;, this plugin generates script to invoke with suitable &lt;code&gt;RBENV_ROOT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But scripts in &lt;code&gt;${RBENV_ROOT}/shims&lt;/code&gt; (generated by &lt;code&gt;rbenv rehash&lt;/code&gt;) already contains &lt;code&gt;export RBENV_ROOT&lt;/code&gt;, so this script generates symlink for &lt;code&gt;shims&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Install this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo git clone https://github.com/sorah/rbenv-global-rehash /usr/local/rbenv/plugins/rbenv-global-rehash
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo RBENV_ROOT=/usr/local/rbenv rbenv global-rehash /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Finally you can:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/usr/local/bin/rbenv versions
/usr/local/bin/ruby -v
&lt;/code&gt;&lt;/pre&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/148</id><published>2013-01-04T05:27:50+09:00</published><updated>2013-01-04T05:33:16+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2013/01/04/renewed-this-blog"/><title>Renewed this blog</title><content type="html">&lt;p&gt;Just released &lt;a href="https://github.com/sorah/days"&gt;days.gem&lt;/a&gt;, the simple blog system built up with Sinatra, and migrated this blog from Lokka.&lt;/p&gt;

&lt;p&gt;And, I&amp;#39;ll never write Japanese-only article for this blog, please see also &lt;a href="http://diary.sorah.jp/"&gt;http://diary.sorah.jp/&lt;/a&gt; for Japanese entries.&lt;/p&gt;

&lt;h2&gt;Days&lt;/h2&gt;

&lt;p&gt;Days is simple blog system built up with Ruby + Sinatra.&lt;/p&gt;

&lt;p&gt;This system&amp;#39;s big feature is: core separated from deployment.&lt;/p&gt;

&lt;p&gt;To set up days and start it, we have to do:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ gem install days
$ mkdir my_blog
$ cd my_blog
$ days init
$ days migrate
$ days server
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;by &lt;code&gt;days init&lt;/code&gt;, days.gem generates simple &lt;code&gt;Gemfile&lt;/code&gt;, &lt;code&gt;config.yml&lt;/code&gt;, and &lt;code&gt;config.ru&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But you can customize appearances by placing haml views to &lt;code&gt;views&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;Core application part is included in &lt;code&gt;days.gem&lt;/code&gt;, and it&amp;#39;s required by &lt;code&gt;config.ru&lt;/code&gt; and gem bundler.&lt;/p&gt;

&lt;p&gt;I&amp;#39;m writing tutorial and documentation of days.gem. Stay tuned, please!&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/147</id><published>2012-12-17T10:33:05+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/12/17/rspec-warn-for-no-expectations"/><title>Show warning for RSpec examples that has no expectation</title><content type="html">&lt;script src="https://gist.github.com/4315150.js"&gt;&lt;/script&gt;

&lt;p&gt;You may sometimes forget to write &lt;code&gt;should&lt;/code&gt; for matchers.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;it { a == b } # ng
it { a.should == b } # ok
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Using the above RSpec configuration, that warns for such cases.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ rspec -fd spec/a_spec.rb
foo
[WARN] No expectation in example at ./spec/a_spec.rb:4: You may forget to write `should` in the example
  example at ./spec/a_spec.rb:4
&lt;/code&gt;&lt;/pre&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/146</id><published>2012-11-30T01:11:28+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/11/30/updating-galaxy-nexus-to-cm10-with-sim-unlocking"/><title>Updating Galaxy Nexus (JP) from stock 4.0 to CM10 with SIM unlocking</title><content type="html">&lt;p&gt;Finally got latest Android world.&lt;/p&gt;

&lt;h2&gt;Before&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Device: Galaxy Nexus (JP, locked to docomo)&lt;/li&gt;
&lt;li&gt;Android 4.0.0&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SIM: SoftBank&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlocked Using F*ckDocomo&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Update this to CyanogenMod 10 (Android 4.2.)&lt;/p&gt;

&lt;h2&gt;Lock again&lt;/h2&gt;

&lt;p&gt;&amp;quot;Unlock → Lock again.&amp;quot; on F*ckDocomo.apk.&lt;/p&gt;

&lt;p&gt;Backup &lt;code&gt;/factory/nv_data.bin&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Backup&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;$ adb backup -f backup.ab -apk -all
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then enter your password on the device.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ fastboot boot recovery-clockwork-…
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Get latest clockworkmod and boot it, then run nandroid backup.&lt;/p&gt;

&lt;h2&gt;Update&lt;/h2&gt;

&lt;p&gt;Apply CM10 and gapps zip.&lt;/p&gt;

&lt;p&gt;then, reboot and edit backup&amp;#39;d &lt;code&gt;nv_data.bin&lt;/code&gt; by seeing &lt;a href="http://blog.backspace.jp/2012/03/galaxy-nexus-sc-04d-by-docomo.html"&gt;this&lt;/a&gt; entry.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ adb push nv_data.bin /sdcard/nv_data.bin # push edited nv_data.bin
$ adb shell
$ su
# mount -o remount,rw -t ext4 /dev/block/mtdblock0 /factory
# cd /factory
# cp /sdcard/nv_data.bin .
# chown radio.radio nv_data.bin
# chmod 700 nv_data.bin
# cp nv_data.bin /data/radio/
# reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;after reboot, your device is still locked, so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ adb shell
$ su
# cat /data/radio/log/nv.log
...
Fri Nov 30 00:44:45 2012: MD5 fail. orignal md5 &amp;#39;aaa&amp;#39; computed md5 &amp;#39;bbb&amp;#39; (rild)
Fri Nov 30 00:44:45 2012: Backup NV restored.(GED)
# mount -o remount,rw -t ext4 /dev/block/mtdblock0 /factory
# cd /factory
# echo -n &amp;#39;bbb&amp;#39; &amp;gt; nv_data.bin.md5
# chown radio.radio nv_data.bin.md5
# chmod 700 nv_data.bin.md5
# cp nv_data.bin.md5 /data/radio/
# reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;finally your device is unlocked.&lt;/p&gt;

&lt;h2&gt;Restore&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;$ adb restore backup.ab
&lt;/code&gt;&lt;/pre&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/144</id><published>2012-10-13T01:06:17+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/10/13/rspec-mock-with-scope-public-on-activerecord"/><title>rspec-mock broken by `scope :public` in ActiveRecord::Base</title><content type="html">&lt;pre&gt;&lt;code&gt;class Foo &amp;lt; ActiveRecord::Base
  scope :public, -&amp;gt; { … } # this overrides Module#public
end

class FoosController &amp;lt; ApplicationController
  def create
    @foo = Foo.new(params[:foo])

    respond_to do |format|
      if @foo.save
        format.html { redirect_to @foo, notice: &amp;#39;foo was successfully created.&amp;#39; }
        format.json { render json: @foo, status: :created, location: @foo }
      else
        format.html { render action: &amp;quot;new&amp;quot; }
        format.json { render json: @foo.errors, status: :unprocessable_entity }
      end
    end
  end
end

describe FoosController do
  describe &amp;quot;POST create&amp;quot; do
    describe &amp;quot;with invalid params&amp;quot; do
      it &amp;quot;re-renders the &amp;#39;new&amp;#39; template&amp;quot; do
        # rspec-mock expects Foo.public to `Module#public`
        Foo.any_instance.stub(:save).and_return(false)

        post :create, {:foo =&amp;gt; {}}, valid_session
        response.should render_template(&amp;quot;new&amp;quot;)
      end
    end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;scope :public&lt;/code&gt; overrides &lt;code&gt;Module#public&lt;/code&gt; method in the model, but rspec-mock expects &lt;code&gt;Foo.public&lt;/code&gt; to be &lt;code&gt;Module#public&lt;/code&gt;. rspec-mock calls &lt;code&gt;Foo.public&lt;/code&gt; with arguments, so it raises &lt;code&gt;ArgumentError&lt;/code&gt; on line &lt;code&gt;scope :public&lt;/code&gt;. :/&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; ArgumentError:
   wrong number of arguments (1 for 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;こんな感じで &lt;code&gt;scope :public, -&amp;gt; {…}&lt;/code&gt; していると、rspec-mock が &lt;code&gt;Module#public(*name)&lt;/code&gt; を期待して引数付きで &lt;code&gt;public&lt;/code&gt; を呼んで崩壊する模様。&lt;/p&gt;

&lt;p&gt;Foo を stub ってるせいでテストがコケるみたいです。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/143</id><published>2012-10-08T18:10:37+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/10/08/pendaxes"/><title>Pending は邪悪な物であり、邪悪な物を生み出した人間には斧を</title><content type="html">&lt;p&gt;そらはーです!&lt;/p&gt;

&lt;p&gt;RSpec で &lt;code&gt;pending&lt;/code&gt; 使ってテストを一時的に無効化した事ある方は大勢いらっしゃるんじゃないでしょうか!&lt;/p&gt;

&lt;p&gt;なんらかの事情で一時的に pending せざるを得ない状況ならともかく、pending したなら責任をもって該当のテストを治すか、そもそも不要なら消すなどといった対処をしてもらいたいものですね!&lt;/p&gt;

&lt;p&gt;でも、実際来週までには!とか言っても放置する人間や、そもそも直さず1年,2年以上放置される事もしばしばあるのが現実です………&lt;/p&gt;

&lt;p&gt;pending を放置する事によって、実はそれは(他の人にとって)かなり重要なテストで、そんなテストがpendingされてる訳ないと思った、他のメンバーによる変更で実はそのテストがコケて事故っていたという可能性も存在するわけです。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;重要なテストをAさんが pending する (「テストは追って修正する」みたいな感じで)&lt;/li&gt;
&lt;li&gt;比較的大きめの変更を B さんが加える。一応全部テストを回してグリーンな事を確認&lt;/li&gt;
&lt;li&gt;(実は重要なテストがAさんによって pending されている事に気づいていない)&lt;/li&gt;
&lt;li&gt;事故っている&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;本当は pending を使わないのが一番なんですが、やむなく使った場合はちゃんと責任を持って直しましょ… &lt;strong&gt;直せ!!!&lt;/strong&gt; というわけで、催促するツールを作りました!&lt;/p&gt;

&lt;h2&gt;Pendaxes&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/cookpad/pendaxes"&gt;cookpad/pendaxes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pend(ing) axes です! 今のところ rspec をサポートしてます!&lt;/p&gt;

&lt;p&gt;メール等でコミットした人に個別で催促メールを送ったりできます!!!!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ gem install pendaxes
$ cd /path/to/your/git/working/copy
$ pendaxes --init
$ pendaxes
$ open report.html
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;とりあえず試すには、working copy の中で &lt;code&gt;pendaxes --init&lt;/code&gt; を叩くとそのディレクトリで &lt;code&gt;.pendaxes.yml&lt;/code&gt; を吐き出すので、そこで &lt;code&gt;pendaxes&lt;/code&gt; を実行すると &lt;code&gt;report.html&lt;/code&gt; を吐き出します。&lt;/p&gt;

&lt;p&gt;後述するメール設定をすると、この report.html のようなメールがコミッター毎にその人のコミットしたpendingがメールで送られると思えば良いです。&lt;/p&gt;

&lt;p&gt;(git grep とかを使ってるので git リポジトリと git が必要です)&lt;/p&gt;

&lt;p&gt;(Ruby 1.9.2 以降で動きます。それ以前は保証しません)&lt;/p&gt;

&lt;h3&gt;設定ファイル&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/cookpad/pendaxes/wiki/Configuration"&gt;https://github.com/cookpad/pendaxes/wiki/Configuration&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;を参照してください… ちょっと複雑です。以下に一例を載せるので参考にしてください＞＜&lt;/p&gt;

&lt;h3&gt;メールを送る&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;notifications&lt;/code&gt; に以下のような行を足せば動きます。&lt;code&gt;mail.gem&lt;/code&gt; の &lt;code&gt;sendmail&lt;/code&gt; delivery_method を使って、各コミッターにメールを送信します。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- use: mail
  reporter:
    use: haml
  from: no-reply@example.com
  delivery_method: sendmail
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;こんなメールが飛びます:&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120925-essq4fdifg79axb2ssi2cyb2ne.png" alt=""&gt;&lt;/p&gt;

&lt;h3&gt;cron で回してみる&lt;/h3&gt;

&lt;p&gt;cron で回す際は、&lt;code&gt;config.yml&lt;/code&gt; に git clone 先と clone 元を指定してあげると pendaxes が pull まで面倒を見てくれて便利です。&lt;code&gt;pendaxes --init&lt;/code&gt; で指定付きで生成できます。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pendaxes --init config.yml https://github.com/cookpad/pendaxes.git /tmp/pendaxes
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;で、&lt;code&gt;/tmp/pendaxes&lt;/code&gt; に &lt;code&gt;https://github.com/cookpad/pendaxes.git&lt;/code&gt; を clone して自動で &lt;code&gt;git fetch&lt;/code&gt; と &lt;code&gt;git reset --hard&lt;/code&gt; で最新のコードに更新してくれる config.yml を生成してくれます&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pendaxes config.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;で生成した config.yml を実行してくれます。後は同じように config.yml を編集してメール等を送る設定を追加した上で cron で回せばいいと思います。&lt;/p&gt;

&lt;h2&gt;効果&lt;/h2&gt;

&lt;p&gt;毎朝6時に cron で回して送るようにしたところ、だいたい放置されていた大量の pending がどんどん数日で消えて行きました! わーい!&lt;/p&gt;

&lt;blockquote class="twitter-tweet tw-align-center"&gt;&lt;p&gt;pendaxeのおかげで安心してpendできる&lt;/p&gt;&amp;mdash; �[43m�[31m�[5mねぎっぽ (@negipo) &lt;a href="https://twitter.com/negipo/status/255287125484912640" data-datetime="2012-10-08T12:42:48+00:00"&gt;October 8, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;…あれ?&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/142</id><published>2012-10-08T01:45:57+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/10/08/migmix"/><title>Mac でも MigMix にしてみた</title><content type="html">&lt;p&gt;&lt;img src="https://img.skitch.com/20121007-g2u7pu6ur3r2cs15gibewrx9mw.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;M+ と IPA フォントを合成したフォント、&lt;a href="http://mix-mplus-ipa.sourceforge.jp/"&gt;MigMix&lt;/a&gt; という物があります。&lt;/p&gt;

&lt;p&gt;Nexus 7 ではこのフォントで生活しているんだけど、実際にヒラギノよりこっちの方が好みと気づいたので切り替えてみた。とりあえずChromeとVim等、設定可能なアプリケーションではMigMix を利用するようにした。Vim は MacVim なので &lt;code&gt;:set guifontwide&lt;/code&gt; で。&lt;/p&gt;

&lt;p&gt;太字がいいですね!&lt;/p&gt;

&lt;p&gt;Terminal.app でも日本語とかだけ別フォント設定出来ればいいんだけど。iTerm2 はできたはず。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/141</id><published>2012-10-06T18:58:06+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/10/06/rspec-rails-should-be-in-both-test-and-development-group"/><title>rspec-rails は Gemfile で development グループにも入れてあげよう</title><content type="html">&lt;p&gt;なんか rspec-rails でテストが生成されないなーと思ってたらこういう事だった。ちゃんとREADME読めっていう話ですね!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rspec/rspec-rails#configure"&gt;https://github.com/rspec/rspec-rails#configure&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It needs to be in the &lt;code&gt;:development&lt;/code&gt; group to expose generators and rake tasks without having to type &lt;code&gt;RAILS_ENV=test&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;group :test, :development do
  gem &amp;quot;rspec-rails&amp;quot;
end
&lt;/code&gt;&lt;/pre&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/140</id><published>2012-09-22T18:36:31+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/09/22/current-monthly-charge-of-mobile-contracts"/><title>iPhone 5 (KDDI) を予約したので現在の回線をまとめておく</title><content type="html">&lt;p&gt;iPhone 4S (KDDI) の割賦が残っているというのに、iPhone 5 を偶然にも触ってしまって「これは買うしかない」と思って仕事帰りに予約してしまった。&lt;/p&gt;

&lt;p&gt;現在の回線とiPhone 5にしたときのプラン予定をメモっておく。&lt;/p&gt;

&lt;h2&gt;回線一覧&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;au&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iPhone 4S (7年目)&lt;/li&gt;
&lt;li&gt;IS01 (約2年目 - 解約するかMNPするか機種変するか悩ましい回線)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SoftBank&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Galaxy Nexus (契約時: Desire HD) + 学割適用による3円運用, 1.5年くらい?&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;docomo&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BF-01D (データ回線, 6ヶ月目)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;au&lt;/h3&gt;

&lt;h4&gt;iPhone 4S&lt;/h4&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;内容&lt;/th&gt;
      &lt;th&gt;(円)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;プランEシンプル&lt;/td&gt;&lt;td&gt;1486&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;誰でも割+家族割&lt;/td&gt;&lt;td&gt;-743&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;学割 (2013/4まで)&lt;/td&gt;&lt;td&gt;-372&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;WEB de 請求書割引&lt;/td&gt;&lt;td&gt;-20&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;iPhone 4S 32GB 分割支払金&lt;/td&gt;&lt;td&gt;2570&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ユニバーサルサービス料&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;合計&lt;/th&gt;&lt;td&gt;2924&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;学割、LTEプランにすると吹っ飛ぶのかなあ。吹っ飛んでもいいけど。&lt;/p&gt;

&lt;h4&gt;IS01&lt;/h4&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;内容&lt;/th&gt;
      &lt;th&gt;(円)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;プランEシンプル&lt;/td&gt;&lt;td&gt;1486&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;誰でも割+家族割&lt;/td&gt;&lt;td&gt;-743&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;EZ WIN&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;毎月割&lt;/td&gt;&lt;td&gt;-1023&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;WEB de 請求書割引&lt;/td&gt;&lt;td&gt;-20&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ユニバーサルサービス料&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;合計&lt;/th&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;そろそろ2年目なので、解約するかMNPするか機種変するかで迷います。&lt;/p&gt;

&lt;h3&gt;SoftBank&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;内容&lt;/th&gt;
      &lt;th&gt;(円)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;ホワイトプランN&lt;/td&gt;&lt;td&gt;934&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ホワイト学割 with 家族 2011&lt;/td&gt;&lt;td&gt;-934&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;S!ベーシックパック&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;安心保証パック&lt;/td&gt;&lt;td&gt;475&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;月々割&lt;/td&gt;&lt;td&gt;-835&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ユニバーサルサービス料&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;合計&lt;/th&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Desire HDで契約したけど、Galaxy Nexus (docomo) にさして使っています。&lt;/p&gt;

&lt;h3&gt;docomo&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;内容&lt;/th&gt;
      &lt;th&gt;(円)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Xi データプラン フラット にねん&lt;/td&gt;&lt;td&gt;4700&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;moperaU スタンダードプラン&lt;/td&gt;&lt;td&gt;500&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ケータイ保証お届けサービス&lt;/td&gt;&lt;td&gt;280&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;月々サポート&lt;/td&gt;&lt;td&gt;-800&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;eビリング割引&lt;/td&gt;&lt;td&gt;-100&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;BF-01D 端末等代金分割支払金&lt;/td&gt;&lt;td&gt;1365&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ユニバーサルサービス料&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;合計&lt;/th&gt;&lt;td&gt;6177&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;こちらはデータプランなので音声回線無し。キャンペーン適用中により10月からちょっとたかくなりそう。&lt;/p&gt;

&lt;h3&gt;合計&lt;/h3&gt;

&lt;p&gt;9107円&lt;/p&gt;

&lt;h2&gt;iPhone 5 (KDDI) 予定&lt;/h2&gt;

&lt;table&gt;
    &lt;tr&gt;
      &lt;th&gt;内容&lt;/th&gt;
      &lt;th&gt;(円)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;LTE プラン&lt;/td&gt;&lt;td&gt;980&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;LTE NET&lt;/td&gt;&lt;td&gt;315&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;LTE フラット&lt;/td&gt;&lt;td&gt;5460&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;テザリングオプション&lt;/td&gt;&lt;td&gt;525&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;キャンペーン(テザリング 2 年間無料)&lt;/td&gt;&lt;td&gt;-525&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;毎月割&lt;/td&gt;&lt;td&gt;-2180&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;au スマートバリュー&lt;/td&gt;&lt;td&gt;-1480&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;iPhone 5 64GB 分割支払金&lt;/td&gt;&lt;td&gt;3430&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;ユニバーサルサービス料&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;合計&lt;/th&gt;&lt;td&gt;6528&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Xi のモバイルルータとどう両立させるか悩みものですが、近場に行くときもいちいちモバイルルータ持って行かなくて良くなりそうなのでパケット定額入れてみることにしました。&lt;/p&gt;

&lt;p&gt;別に使わないときは外せばいいだけだし…&lt;/p&gt;

&lt;p&gt;学割吹っ飛ばなければもうちょっと安くいけるんだけどなあ。無理だろうなー&lt;/p&gt;

&lt;p&gt;(通信費が合計iPhone 5導入後は12711円になる予定)&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/139</id><published>2012-09-17T07:48:30+09:00</published><updated>2013-01-04T05:07:51+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/09/17/sprk2012"/><title>SapporoRubyKaigi 2012</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7992098774/" title="P9146202 by sora_h, on Flickr"&gt;&lt;img src="http://farm9.staticflickr.com/8032/7992098774_03523890bb_b.jpg" width="1024" height="768" alt="P9146202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;札幌Ruby会議2012に参加してきました。スピーカー &amp;amp;&amp;amp; 偽スタッフとして。&lt;/p&gt;

&lt;p&gt;当然のように凄い楽しかったし、(わたしはお金払ってないけど) やっぱりスタッフの方々
がんばりすぎな気がした。お疲れ様でした、楽しませて頂きました。&lt;/p&gt;

&lt;p&gt;初めての札幌で、しかもまさかカンファレンスで来る事になるとは思ってませんでした。
札幌、またきたいですね。居心地良い!&lt;/p&gt;

&lt;p&gt;ちなみに、写真はここにあります: &lt;a href="http://www.flickr.com/photos/sora_h/sets/72157631550173713/"&gt;http://www.flickr.com/photos/sora_h/sets/72157631550173713/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今回はなんと400枚くらい。&lt;/p&gt;

&lt;p&gt;金曜日の午前に10kmほど札幌を練り歩いた観光写真はこちら: &lt;a href="http://www.flickr.com/photos/sora_h/sets/72157631551488300/"&gt;http://www.flickr.com/photos/sora_h/sets/72157631551488300/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;しかし、まさか tenderlove, miyagawa, matz とかと北海道で沖縄そば食べる事になるとは思わなかったな…&lt;/p&gt;

&lt;h2&gt;発表の話&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://sapporo.rubykaigi.org/2012/ja/schedule/details/27.html"&gt;Guide to Social Coding&lt;/a&gt; という話をしてきた。その前の@tricknotesの発表とややかぶっているのではないかと一瞬ビクッとした。&lt;/p&gt;

&lt;p&gt;資料はこちら: &lt;a href="https://speakerdeck.com/u/sorah/p/guide-to-social-coding"&gt;https://speakerdeck.com/u/sorah/p/guide-to-social-coding&lt;/a&gt;&lt;/p&gt;

&lt;script class="speakerdeck-embed" data-id="5053e4925281be0002008afd" data-ratio="1.3333333333333333" src="//speakerdeck.com/assets/embed.js"&gt;&lt;/script&gt;

&lt;h2&gt;翻訳の話&lt;/h2&gt;

&lt;p&gt;ご存じの方は多いと思いますが、主に翻訳に徹していました。&lt;/p&gt;

&lt;p&gt;雑談もできるように設置されたIRCサーバーはほぼ翻訳チャンネルしか生きてなかったけど、
IRCでスピーカーの喋ったことをなるべく翻訳するチャンネルがありました。&lt;/p&gt;

&lt;p&gt;一応各セッションにスタッフから最低1人はトランスレーターとしてついていましたが、
手助け歓迎という事だったので手助けしていた。当然非公式。
でもスタッフの席に座って電源を借りさせてもらえました。ありがとうございます。偽スタッフです。&lt;/p&gt;

&lt;p&gt;まさかあそこまでスムーズに訳せるとは思ってなかったし、スタッフ各位にお礼されました。
お役に立てて光栄です。&lt;/p&gt;

&lt;p&gt;とりあえずクオリティに関してはともかく、日本語→英語をひたすらやってました。&lt;/p&gt;

&lt;p&gt;英語→日本語は無理ですね。日本語の生成速度より英語の生成速度の方が早い。&lt;/p&gt;

&lt;p&gt;あと、日本語を書くときにどうしても「やあおまえら」とかになりがちなので
どうなんかなあと思うことも。&lt;/p&gt;

&lt;p&gt;全く参考にならないかもしれませんが、これはほぼセッションをちゃんと聞きながら
貢献する事ができる数少ない事だと思っていて、
ついでに英語の意識が高まるので大変良いです。&lt;/p&gt;

&lt;p&gt;なんというか、日本語を聞いてそれに対応する英語を高速で構成する練習になります。
おかげで会期中、割とスムーズに英語を喋る事ができましたね。tenderloveとかdrbrainとかと。
try(:english) で喋ったけど予想以上にスムーズに喋れた。ぺらぺらって訳じゃないけど。&lt;/p&gt;

&lt;p&gt;まあでも、自分のためにやってるんじゃなくて、非日本語圏の人向けにやっているのは誤解しないで
いただきたく思います。&lt;/p&gt;

&lt;p&gt;という訳で、もし機会があれば来年はちゃんと翻訳班として参加したいですね。&lt;/p&gt;

&lt;p&gt;というわけで、@RubyKaigi2013のオーガナイザーの方々へ: もし気が向いたら翻訳班にお誘いください。お引き受けします!&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/138</id><published>2012-09-10T23:13:23+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/09/10/nexus-7"/><title>Nexus 7</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7971057244/" title="IMG_3095 by sora_h, on Flickr"&gt;&lt;img src="http://farm9.staticflickr.com/8295/7971057244_ff5d6e9203_b.jpg" width="768" height="1024" alt="IMG_3095"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nexus 7がきました。かわいい。&lt;/p&gt;

&lt;p&gt;サイズ的にも重量的にもちょうど良くて良い感じ。iPad に比べて物足りない感じはあるけど、使いやすい。&lt;/p&gt;

&lt;p&gt;iPad もこのサイズでバリエーション持っていいと思うんだけど、開発者としてはリソースが増えると対応が面倒なのでやめて欲しい。&lt;/p&gt;

&lt;p&gt;あと、Wi-Fi only の device のくせに地味に GPS が搭載されていてよかった。一番良いと思ったポイント。
&lt;code&gt;/system/etc/gps.conf&lt;/code&gt; を調整したほうがいいかなー、どうだろ。&lt;/p&gt;

&lt;h2&gt;ホーム&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7971052058/" title="Nexus 7 Home by sora_h, on Flickr"&gt;&lt;img src="http://farm9.staticflickr.com/8313/7971052058_efed8151ff_b.jpg" width="640" height="1024" alt="Nexus 7 Home"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;こんな感じになりました。わりとふつう。背景は&lt;a href="http://www.flickr.com/photos/sora_h/7326491614/in/set-72157630025136972"&gt;これ&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;やった事&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;日本語のフォントが汚い!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adb backup -apk -shared -all&lt;/code&gt; (うろ覚え) で途中まで設定した物とアプリをバックアップ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fastboot oem unlock&lt;/code&gt; 後 Clockworkmod を &lt;code&gt;fastboot boot&lt;/code&gt; でブートしてあげて、SuperSU.zip を flash (保証が飛びます)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adb restore&lt;/code&gt; でバックアップから復元&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mix-mplus-ipa.sourceforge.jp/migmix/"&gt;MigMix&lt;/a&gt; フォントをとってくる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adb remount&lt;/code&gt; したあと &lt;code&gt;adb push migmix.ttf /system/fonts/&lt;/code&gt; しようとしたけど、&lt;code&gt;adb remount&lt;/code&gt; がコケるので &lt;code&gt;/sdcard/&lt;/code&gt; にとりあえず &lt;code&gt;adb push&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;adb shell&lt;/code&gt; で &lt;code&gt;su&lt;/code&gt; で root になって&lt;/p&gt;

&lt;p&gt;# mount
  (/system がどのデバイスファイルからマウントされてるか調べる)
  # mount -o rw,remount /dev/… /system
  # cp /sdcard/migmix-regular.ttf /sdcard/migmix-bold.ttf /system/fonts/
  # vi /system/etc/fallback_fonts.xml
  (&lt;familyset&gt; の一番下に以下を追記)
  &lt;family&gt;
       &lt;fileset&gt;
           &lt;file&gt;migmix-regular.ttf&lt;/file&gt;
           &lt;file&gt;migmix-bold.ttf&lt;/file&gt;
       &lt;/fileset&gt;
  &lt;/family&gt;
  # vi /system/etc/fallback_fonts-ja.xml
  (同じ事をやる)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;adb reboot&lt;/code&gt; でリブートする。フォントが綺麗になってることを確認する。終わり。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;購入までの流れ&lt;/h2&gt;

&lt;h3&gt;US の IP でがんばる&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Nexus 7 は今のところ日本のIPからだと買えない&lt;/li&gt;
&lt;li&gt;変な VPN 使いたくないなぁ。&lt;/li&gt;
&lt;li&gt;EC2 micro が無料なので AWS のアカウントを取得して Ubuntu のイメージを us-west とかで立ち上げる&lt;/li&gt;
&lt;li&gt;ssh のダイナミックポートフォワーディングで何もしなくても問題なく購入ページが開けました。&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;転送&lt;/h3&gt;

&lt;p&gt;ちなみに今回は同僚がまとめて6台購入して、送料を割ってみんなで安くNexus 7を手に入れる試みをしました。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nittsu.com/tensoepelican/Default.aspx"&gt;米国日通の転送サービス&lt;/a&gt; を使った。6台送りつけたら商用?とかいう扱いにされて若干高くなった。Google Play の送料 + 日通の送料 + 関税 でだいたい一人2000円。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/137</id><published>2012-09-09T16:46:37+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/09/09/socketio-listen-to-anything"/><title>socket.io で任意のeventを一つのlistenerで受け取る</title><content type="html">&lt;p&gt;&lt;a href="https://gist.github.com/3683181"&gt;https://gist.github.com/3683181&lt;/a&gt;&lt;/p&gt;

&lt;script src="https://gist.github.com/3683181.js?file=hack.js"&gt;&lt;/script&gt;

&lt;p&gt;無理っぽいのでこういうhackをするしかない。
Eventのinvoke周りは node.js 由来の &lt;a href="http://nodejs.org/api/events.html#events_class_events_eventemitter"&gt;EventEmitter&lt;/a&gt; を使っていて、その emit メソッドをラップして、本物のemitを実際に渡された引数で渡した後、別のeventとしてemitに飛んできた引数をargsとして渡しているだけ。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://nodejs.org/api/events.html#events_emitter_emit_event_arg1_arg2"&gt;EventEmitter の emit&lt;/a&gt; は $emit に&lt;a href="https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L333"&gt;姿を変えていた&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;しかし socket.io がドキュメント無いのは驚いた。こういう知名度があって便利なライブラリ、わりとドキュメント無いのが多い。ドキュメントが、無い。人のこと言えないけど。&lt;/p&gt;

&lt;p&gt;小さいコードなら今回のように自分で読んで解決できるけど、Rails のように巨大なライブラリがドキュメントなかったら絶望(デデドン) だと思う。&lt;/p&gt;

&lt;h2&gt;利用例&lt;/h2&gt;

&lt;p&gt;こんなふうに使います。&lt;/p&gt;

&lt;script src="https://gist.github.com/3683181.js?file=a.js"&gt;&lt;/script&gt;

&lt;p&gt;public domain なのでお好きにどうぞ。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/136</id><published>2012-08-12T15:49:14+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/08/12/raspberrypi-shairport"/><title>Raspberry Pi + Shairport</title><content type="html">&lt;p&gt;Raspberry Pi が届きました。後で Gentoo を入れますが、とりあえず Shairport 入れて Airplay 経由で音を流してみたりしてみます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/albertz/shairport"&gt;https://github.com/albertz/shairport&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;とりあえず流そうと思ったんですが、iOS 6 と相性が悪いので &lt;a href="https://github.com/albertz/shairport/pull/152"&gt;Pull #152&lt;/a&gt; のパッチを当ててある。&lt;/p&gt;

&lt;p&gt;これで繋がるようになったけど、たまに hairtunes が SEGV します。&lt;/p&gt;

&lt;p&gt;あと、HDMI でモニタ繋いでて音が raspberry pi 側のジャックから出ない場合は  &lt;a href="http://elinux.org/R-Pi_Troubleshooting#Sound_does_not_work_with_an_HDMI_monitor"&gt;R-Pi_Troubleshooting&lt;/a&gt; にあるように&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$  sudo amixer cset numid=3 1 # Raspberry Pi 内蔵の端子に流す
$  sudo amixer cset numid=3 2 # HDMI に流す
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;と指定可能なようです。設定値保存されないぽい。リブートしたら戻った。&lt;/p&gt;

&lt;p&gt;で、後はストリーム流すと「ブチッ」と音がなってスピーカーが心配になるような不快な音が流れるんだけど、これは &lt;a href="https://github.com/albertz/shairport/issues/25#issuecomment-1142201"&gt;albertz/shairport issue #25&lt;/a&gt; にある方法で解決した。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/etc/asound.conf&lt;/code&gt; に&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pcm.!default {
    type plug
    slave.pcm anticracking
}

pcm.anticracking {
    type dmix
    ipc_key 1024
    ipc_key_add_uid yes
    slave {
        pcm &amp;quot;hw:0,0&amp;quot;
        period_time 0
        buffer_time 0
        rate 44100
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;を書いて、&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ./shairport.pl -i music -d
$ while true; do aplay -t wav -f cd -F 0 -B 0 --device=&amp;quot;plughw:0,0&amp;quot; music; sleep 1; done
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;こんな感じ。いまいちすっきりしないけど。&lt;/p&gt;

&lt;p&gt;期待するのは間違っていると思うがraspberry piのサウンド出力そんなによくないので、今はHDMI経由で音をとってる。なんか高音が割れてる感じがするのよね。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/135</id><published>2012-07-29T18:30:01+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/07/29/import-cds-using-itunes-via-rdp"/><title>RDP 経由で iTunes で CD をインポートする</title><content type="html">&lt;p&gt;リモートデスクトップ (Remote Desktop Connection) 経由で iTunes を使った時に iTunes が CD を認識してくれなくて CD をインポートできない、という現象。&lt;/p&gt;

&lt;p&gt;(当然接続先のマシンの CD ドライブに入れてる)&lt;/p&gt;

&lt;p&gt;twitter で聞いたらセキュリティポリシーがあるらしい。有効にしたらちゃんと CD を認識してくれた。やったー&lt;/p&gt;

&lt;blockquote class="twitter-tweet tw-align-center" data-in-reply-to="229503105706909696"&gt;&lt;p&gt;@&lt;a href="https://twitter.com/sora_h"&gt;sora_h&lt;/a&gt; セキュリティポリシーで禁止になっているのだと思います。これの手順（すべてのリムーバブル記憶域:リモート セッションでの直接アクセスを許可する）はどうでしょうか？ &lt;a href="http://t.co/UpLlZKuE" title="http://windows.microsoft.com/ja-JP/windows7/Burn-a-CD-or-DVD-over-a-remote-connection"&gt;windows.microsoft.com/ja-JP/windows7…&lt;/a&gt;&lt;/p&gt;&amp;mdash; ysk-noh (@egtra) &lt;a href="https://twitter.com/egtra/status/229508023960338432" data-datetime="2012-07-29T09:25:51+00:00"&gt;July 29, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;&lt;a href="http://windows.microsoft.com/ja-JP/windows7/Burn-a-CD-or-DVD-over-a-remote-connection"&gt;http://windows.microsoft.com/ja-JP/windows7/Burn-a-CD-or-DVD-over-a-remote-connection&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Win-R&lt;/code&gt; (ファイル名を指定して実行) → gpedit.msc&lt;/li&gt;
&lt;li&gt;&amp;quot;コンピュータの構成&amp;quot; → &amp;quot;管理用テンプレート&amp;quot; → &amp;quot;システム&amp;quot; → &amp;quot;リムーバブル記憶域へのアクセス&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;すべてのリムーバブル記憶域:リモート セッションでの直接アクセスを許可する&amp;quot;&lt;/li&gt;
&lt;li&gt;有効化&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;多謝! しかしグループポリシーってなんでスタートメニューの管理ツールに出てこないんだろうね。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/134</id><published>2012-07-27T16:33:32+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/07/27/i-was-a-spammer-on-hatena-bookmark"/><title>はてなブックマークでスパムアカウント扱いされていた</title><content type="html">&lt;p&gt;そのためブックマークを公開設定にしていても、非公開扱いになっていた。&lt;/p&gt;

&lt;p&gt;問い合わせたら「誤判定みたいです!」とだけ来て、「フムーン」と思ったけどその後 (今さっき) 追加の連絡が来て、こういう事らしい:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;メインアカウントとサブアカウント (id:sora_h) で同じ内容でブックマークしているため。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;さて、意図的にメインアカウントとサブアカウントで同じ内容をブックマークした覚えはないんだが、設定見なおしてみたらこういう事っぽかった:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;メインアカウントは twitter @sora_h に紐付けられている&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;あわせて、URL を tweet するとそれをブックマークする連携機能が有効化されている&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;サブアカウント (&lt;a href="http://www.hatena.ne.jp/sora_h/"&gt;id:sora_h&lt;/a&gt;; 現在使っている事実上のメインアカウント) でも twitter @sora_h に紐付けられてる&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;id:sora_h でブックマークすると twitter 連携機能で tweet され、それをメインアカウントの連携機能が tweet を拾ってメインアカウントでもブックマークされるという感じ。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;同じtwitterアカウントを2つ以上のはてなアカウントに紐付けられる事が起因だし、えーって感じ。&lt;/p&gt;

&lt;p&gt;メインアカウントの方で連携外しておいた。&lt;/p&gt;

&lt;p&gt;という訳ではてブが公開されました! &lt;a href="http://b.hatena.ne.jp/sora_h"&gt;b:id:sora_h&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/132</id><published>2012-07-06T02:25:19+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/07/06/readable-code"/><title>リーダブルコード読みました</title><content type="html">&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115655/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51MgH8Jmr3L._SL160_.jpg" alt="リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115655/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/4873115655/srhkmnotte-22/ref=nosim/" title="リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)" target="_blank"&gt;amazlet&lt;/a&gt; at 12.07.06&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;Dustin Boswell Trevor Foucher &lt;br /&gt;オライリージャパン &lt;br /&gt;売り上げランキング: 117&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115655/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;まさかの献本ありがとうございます。 (何も関与していない)&lt;/p&gt;

&lt;p&gt;買おうと思っていたらオライリーの人から「あれっ 届いていませんか?」と twitter で言われてびっくりした。&lt;/p&gt;

&lt;p&gt;で今さっき読了したのですが、内容的には濃い技術的内容ではなくサラッと読めるし「教訓集」になってて超良い。
コーディング規約とは違い、「何故」が含まれていてとても良い!&lt;/p&gt;

&lt;p&gt;コードレビューで斧がよく飛んでくる人も飛んでこない人も読んでおくべき本だと思いました。&lt;/p&gt;

&lt;p&gt;リード リーダブルコード!!!&lt;/p&gt;

&lt;p&gt;ちなみに、&lt;a href="http://www.amazon.com/The-Art-Readable-Code-ebook/dp/B0064CZ1XE"&gt;Kindle 版&lt;/a&gt;は 15 USD 程度 (Oreilly.com の ebook だと 27 USD) で手に入るっぽいです。日本語版の ebook まだ無し。Kindle 版だと DRM ついてるけど安いから Kindle 版でもいいかも。 Cloud Reader とかあるし。&lt;/p&gt;

&lt;del&gt;途中で Boost のステマが流れてきたのが一番ウケました&lt;/del&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/131</id><published>2012-06-19T23:57:34+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/06/19/getting-my-env-by-hand"/><title>Getting my dev environment on new Mac by hand</title><content type="html">&lt;p&gt;&lt;a href="http://blog.sorah.jp/2012/06/19/macbookair-13inch-mid2012"&gt;新しい MacBook Air&lt;/a&gt; が届いたので、移行アシスタントを使わずに環境構築したメモ。&lt;/p&gt;

&lt;p&gt;ただし、手抜きなのでアプリケーション設定とか dotfiles や homebrew, rbenv はそのままコピーして持ってくる。&lt;/p&gt;

&lt;p&gt;バックアップについての詳細は過去の &lt;a href="http://blog.sorah.jp/2012/03/02/reinstall-osx-lion#section-3"&gt;OS X Lion 再インストール記事&lt;/a&gt; を見てください。&lt;/p&gt;

&lt;h2&gt;起動&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lion からはかっこいいムービーはなくなりましたぽよ…&lt;/li&gt;
&lt;li&gt;ことえりは選ばずに U.S. を選ぶ。無駄なゴミ設定ファイルを作らなくてすむ(らしい)&lt;/li&gt;
&lt;li&gt;適当にユーザー作成してログインするところまで&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;システムの設定&lt;/h2&gt;

&lt;h3&gt;FileVault 2&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;System Preferences を開いて Security をえらぶ&lt;/li&gt;
&lt;li&gt;FileVault のタブを開いて、左下の南京錠アイコンを押して認証したあとに FileVault 2 を有効化する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt; ごと暗号化されました!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Trackpad&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ページ送りなどの操作を 3 本指スワイプに変更&lt;/li&gt;
&lt;li&gt;tracking speed を最速に&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Keyboard&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&amp;quot;Use all F1, F2, etc. keys as standard function keys&amp;quot; を有効化。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;デフォルトでは F1 などのキーは、キーボードに刻印された機能が直接機能していて、Fnキーと一緒に押すことで F1 などとして機能する。&lt;/li&gt;
&lt;li&gt;これを有効にすると逆転して、 Fn を押した時にキーボードに刻印された機能が動いて、デフォルトでは F1 - F12 として振る舞うようになる&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modifiers Keys… を押し、Caps を Control にする&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;後に USB キーボード (HHKB とか) つないだ時に、HHKB だと Fn+Tab で Caps が入力されてしまうので Caps を No Action に設定する&lt;/li&gt;
&lt;li&gt;この設定はキーボードごとにバラバラです、便利!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keyboard Shortcuts タブを開いて、All controls にチェックを入れておく。テキストボックスなど以外のコントロールにもTabでフォーカスがあたるようになる&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Finder&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Finder に切り替えて Cmd-, で preferences を開く&lt;/li&gt;
&lt;li&gt;&amp;quot;Show these items on the desktop&amp;quot; で External disks にする (デスクトップに外付けでマウントされたディスクなどが表示されるようになる)&lt;/li&gt;
&lt;li&gt;&amp;quot;New Finder windows show&amp;quot; はホームディレクトリにしておく&lt;/li&gt;
&lt;li&gt;Sidebar は Hard disks が - になってるのを ✓ にして、全部表示されるようにしておく&lt;/li&gt;
&lt;li&gt;またホームディレクトリを Favorites のところのチェック入れて表示されるようにする&lt;/li&gt;
&lt;li&gt;適当にウィンドウ開いて View メニューから Show Status Bar, Show Path Bar しておく&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Dock&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;とりあえず Hiding を入れておく (自動的に隠れる)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Sharing&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ホスト名を変更しておく&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Date and Time&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;メニューバーの時計で秒を表示されるようにしておく&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Mission Control&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mission Control: F3&lt;/li&gt;
&lt;li&gt;Application Windows: F5&lt;/li&gt;
&lt;li&gt;Show Desktop: F6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;に割り当てる。OS X Tiger (10.4) からの名残だわ…&lt;/p&gt;

&lt;p&gt;また、 &amp;quot;Automatically rearrange spaces&amp;quot; はオフ。&lt;/p&gt;

&lt;h2&gt;設定ファイル&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;設定ファイル位置詳細も &lt;a href="http://blog.sorah.jp/2012/03/02/reinstall-osx-lion#section-8"&gt;再インストール記事&lt;/a&gt; を見て。&lt;/li&gt;
&lt;li&gt;Preferences は今回, alfred, aperture, iTunes, iWork, Terminal, Divvy, reeder, skitch, skype, teamspeak3, 夜フクロウ, MacVim, Limechat, KeyRemap4MacBook のをコピーした。&lt;/li&gt;
&lt;li&gt;Application Support も Alfred, Aperture, KeyRemap4MacBook, Limechat, Reeder, Skype, 夜フクロウを。&lt;/li&gt;
&lt;li&gt;Keychains/login.keychain もリプレースする&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;アプリケーション類&lt;/h2&gt;

&lt;p&gt;今回は以下を入れた&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alfred&lt;/li&gt;
&lt;li&gt;Aperture&lt;/li&gt;
&lt;li&gt;Divvy&lt;/li&gt;
&lt;li&gt;Dropbox&lt;/li&gt;
&lt;li&gt;Google Chrome (dev)&lt;/li&gt;
&lt;li&gt;Google Japanese Input (dev)&lt;/li&gt;
&lt;li&gt;Growl&lt;/li&gt;
&lt;li&gt;iWork&lt;/li&gt;
&lt;li&gt;LimeChat&lt;/li&gt;
&lt;li&gt;MacVim&lt;/li&gt;
&lt;li&gt;Music Manager&lt;/li&gt;
&lt;li&gt;Reeder&lt;/li&gt;
&lt;li&gt;Skitch&lt;/li&gt;
&lt;li&gt;Skype&lt;/li&gt;
&lt;li&gt;TeamSpeak 3 Client&lt;/li&gt;
&lt;li&gt;VMware Fusion&lt;/li&gt;
&lt;li&gt;Xcode + CLI tools&lt;/li&gt;
&lt;li&gt;YoruFukurou&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;設定は事前にコピーしてあるからだいたい普通に動く。&lt;/p&gt;

&lt;p&gt;git リポジトリの working copy とかは全部 Dropbox に突っ込んでいるので、開発環境構築は Dropbox の同期が終わるのを待つ。&lt;/p&gt;

&lt;h2&gt;Homebrew&lt;/h2&gt;

&lt;p&gt;パッケージマネージャ? Macports? Fink? まだそんなもん使ってるの???&lt;/p&gt;

&lt;p&gt;時代は &lt;a href="https://github.com/mxcl/homebrew"&gt;homebrew&lt;/a&gt; です。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;面倒なので &lt;code&gt;~/brew&lt;/code&gt; をそのまま手元にコピー、移行終了。&lt;/li&gt;
&lt;li&gt;(私は homebrew を &lt;code&gt;~/brew&lt;/code&gt; にインストールしています)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;その他データ&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;iTunes とか Aperture のライブラリも適当にコピーしておきましょう。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;dotfiles など&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/{.ts3client,.topcoder,.zsh_history,.zshrc_env,.rbenv,.ssh,.gitconfig,contestapplet.conf,local}&lt;/code&gt; をコピーする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/git&lt;/code&gt; は &lt;code&gt;~/Dropbox/Codes/git&lt;/code&gt; とかに symlink を貼る&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;~/git/config&lt;/code&gt; に cd して &lt;code&gt;source memo&lt;/code&gt; (ひどい)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;symlink される&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sorah/config"&gt;https://github.com/sorah/config&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;chsh -s /bin/zsh&lt;/code&gt; で zsh にする&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MacVim を起動して &lt;code&gt;:NeoBundleInstall!&lt;/code&gt; してプラグインを clone しておくのも忘れずに。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;あとで &lt;code&gt;cd ~/.bundle/vimproc &amp;amp;&amp;amp; make -f make_mac.mak&lt;/code&gt; しておく&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;tweaks&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;defaults write com.apple.Dock autohide-delay -float 0 &amp;amp;&amp;amp; killall Dock&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dock を自動的に隠しているときに、マウスポインタ当てた時に間髪なしに表示されるようになる&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;defaults -currentHost write -globalDomain AppleFontSmoothing -int 1&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;外部モニタ接続時のアンチエイリアスが狂うのをなんとかする。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;あとは&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dock に適当にいろいろ突っ込んだり&lt;/li&gt;
&lt;li&gt;start up のアプリ (Limechat, Skype, YoruFukurou, Dropbox, Skitch, Divvy, Growl) を設定したり&lt;/li&gt;
&lt;li&gt;終わり。&lt;/li&gt;
&lt;/ul&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/130</id><published>2012-06-19T23:37:19+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/06/19/macbookair-13inch-mid2012"/><title>MacBook Air 13" (Mid 2012)</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7401654884/" title="P6195635 by sora_h, on Flickr"&gt;&lt;img src="http://farm6.staticflickr.com/5324/7401654884_0051c37ded_b.jpg" width="1024" height="768" alt="P6195635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120619-djb8sgcc7x9fgd426drfdn4u87.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;Ivy Bridge 搭載 MacBook Air 届きました。職場のマシンが Core i7 で、今まで使っていた MacBook Air (Late 2010) が Core 2 Duo でストレスフルだったのでカッとなった。&lt;/p&gt;

&lt;h2&gt;スペック&lt;/h2&gt;

&lt;p&gt;MacBook Air 13-inch (Mid 2012)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2.0GHzデュアルコアIntel Core i7（Turbo Boost使用時最大3.2GHz）&lt;/li&gt;
&lt;li&gt;8GB 1,600MHz DDR3L SDRAM&lt;/li&gt;
&lt;li&gt;256GBのフラッシュストレージ&lt;/li&gt;
&lt;li&gt;バックライトキーボード (US) + 製品マニュアル&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;ファーストインプレッション&lt;/h2&gt;

... &lt;a href="/2012/06/19/macbookair-13inch-mid2012"&gt;Continue Reading&lt;/a&gt;</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/129</id><published>2012-06-17T12:49:58+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/06/17/mahjong-on-mobile-devices"/><title>麻雀情報</title><content type="html">&lt;p&gt;最近再び twitter とか Team Pasra の方で麻雀する事が多くなって、「いつも麻雀なにでやってるの」等と言われたのでまとめておく。&lt;/p&gt;

&lt;h2&gt;天鳳&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://tenhou.net/"&gt;http://tenhou.net/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;定番なので解説はしませんが、安定してデザイン等も悪くなく、会員登録とか面倒じゃなくて
気に入っています。twitter とかで天鳳個室を見つけてはここで打っています。&lt;/p&gt;

&lt;h2&gt;天極牌&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://itunes.apple.com/jp/app/id448114302?mt=8"&gt;iPhone, iPad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://market.android.com/details?id=jp.co.hangame.s_mahjong"&gt;Android&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;なんか名前が面倒ですが、Hangame とかいうブランドで出てる麻雀アプリです。iOS, Android 向け。&lt;/p&gt;

&lt;p&gt;Team Pasra でやる時は PC でできない人間がいるので良いこういうアプリを探していたが、なんだかんだこれに行き着いた。&lt;/p&gt;

&lt;h3&gt;良い&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;会員登録不要 (でもけっきょく iPhone, Android, iPad で戦績同期するために登録した)&lt;/li&gt;
&lt;li&gt;ルームコードとかいうので気軽に部屋作って知り合いと打てる&lt;/li&gt;
&lt;li&gt;「端末移行」という名前だけど、hangame id でそこからログインすると全部ログインした端末で戦績等が共有される&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;ダメ&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;部屋を作ってからルールの変更等が効かない&lt;/li&gt;
&lt;li&gt;iPad、Retina じゃなくてもちょっとじゃぎってるらしい (Retina ではじゃぎーは気にならない)&lt;/li&gt;
&lt;li&gt;iPad で画面をヨコ固定した時に、SmartCover のチルト的な使い方ができない (下に Smart Cover 固定部分が必ずくる)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;プロフィール編集や友達登録などの画面に行くためには、上部 Hangame ステータスバーの、右上にある電池の左のアイコンを押す必要がある&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;とてもわかりにくい&lt;/li&gt;
&lt;li&gt;hangame プラットフォームでは統一された操作なのかもしれないが、初見の人に解説がないのはダメと思う&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;自分の選択が求められている時の音が他のSEと同じなので、画面注視してないと自分の手番がきてるのに気づきにくい&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;比較: 天鳳は自分の手番等の時は SE が違うのでわかりやすい!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;しかし、これが今のところ一番良いモバイル向けのアプリなのでこれを使うしか無いんだな。&lt;/p&gt;

&lt;p&gt;ところで「相互友達」ってなんだろう。このアプリでの「友達」はtwitterでのfollowみたいなもんなのかな?&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/128</id><published>2012-06-03T22:10:03+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/06/03/24contest3-award"/><title>第3回開発コンテスト24 表彰式 に行ってきた #24contest</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7326414036/" title="P6034924 by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7245/7326414036_2b3144d947_b.jpg" width="1024" height="768" alt="P6034924"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://info.cookpad.com/"&gt;バイト先&lt;/a&gt; ではここ数年、毎年開発コンテスト24という物をやっていて、課題発表後 24 時間でそれに関係した何かを作るというイベントがある。今年の&lt;a href="http://info.cookpad.com/24contest3"&gt;第3回開発コンテスト24&lt;/a&gt; の &lt;a href="http://techlife.cookpad.com/2012/05/18/24contest3_award/"&gt;表彰式があるとのこと&lt;/a&gt; だったので、顔を出してきました。&lt;/p&gt;

&lt;p&gt;東ダンスネットワークの LT が一番おもしろかった。ひとでくんさんにブロック解除された。&lt;/p&gt;

&lt;p&gt;あと、&lt;a href="https://twitter.com/hatone"&gt;@hatone&lt;/a&gt; さんに &lt;a href="http://www.cosina.co.jp/seihin/voigt/v-lens/micro-ft/index.html"&gt;ノクトン&lt;/a&gt; とかいう F0.95 のレンズを借りてマニュアルフォーカスでほとんど写真を撮っていた。(Flickr 上ではレンズのEXIF情報がないのがそのレンズでとった奴です)&lt;/p&gt;

&lt;p&gt;写真: &lt;a href="http://www.flickr.com/photos/sora_h/sets/72157630025136972/"&gt;http://www.flickr.com/photos/sora_h/sets/72157630025136972/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;object width="700" height="525"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fsora_h%2Fsets%2F72157630025136972%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fsora_h%2Fsets%2F72157630025136972%2F&amp;set_id=72157630025136972&amp;jump_to="&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fsora_h%2Fsets%2F72157630025136972%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fsora_h%2Fsets%2F72157630025136972%2F&amp;set_id=72157630025136972&amp;jump_to=" width="700" height="525"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/127</id><published>2012-06-03T21:58:49+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/06/03/minatork01"/><title>みなとRuby会議01 行ってきた #minatork01</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7320375866/" title="P6024733 by sora_h, on Flickr"&gt;&lt;img src="http://farm9.staticflickr.com/8147/7320375866_a57723ee4a_b.jpg" width="1024" height="768" alt="P6024733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://regional.rubykaigi.org/minato01"&gt;みなとRuby会議01&lt;/a&gt; に行って来ました。 &lt;strong&gt;みなとっぽい会場でした!!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ソーシャルコーディング: &lt;a href="https://twitter.com/kei_s"&gt;@kei_s&lt;/a&gt; とあみだをやりました。あみだやったあと 30 分くらいプロジェクタにつながれてた &lt;a href="https://twitter.com/r7kamura"&gt;@r7kamura&lt;/a&gt; 君の画面を見てた。他人のコーディング見るのは楽しい。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;コードはこれ &lt;a href="https://gist.github.com/2856619"&gt;https://gist.github.com/2856619&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minami.rb 楽しそう。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://twitter.com/nay3"&gt;@nay3&lt;/a&gt; の話はかなり分かる話だった。Rails は慣れればかなりかわいいですね。慣れればね。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Enumerator::Lazy&lt;/code&gt; ベンリー&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ruby Kaja 楽しみ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;懇親会ではジンジャーエール飲んで結構おかわりしてたら、ピッチャーで来て、ピッチャーで来た途端周りの大人まで飲み始めて、5分にピッチャー1本消費するとかいう訳の分からない事やってた。徐々に出てくるのが遅くなってきて、店員のいらだちを察しました。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;尚、写真はこちらです: &lt;a href="http://www.flickr.com/photos/sora_h/sets/72157630011542228/"&gt;http://www.flickr.com/photos/sora_h/sets/72157630011542228/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7320366764/" title="P6024720 by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7217/7320366764_36892a1888_b.jpg" width="1024" height="768" alt="P6024720"&gt;&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/126</id><published>2012-06-03T21:54:39+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/06/03/new-bike"/><title>自転車買った</title><content type="html">&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B004R96K5Y/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/41d8uy3iwwL._SL160_.jpg" alt="Grandir(グランディール) 24インチシマノ6段変速クラシック風ロードバイク グリーン CR-246G" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B004R96K5Y/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Grandir(グランディール) 24インチシマノ6段変速クラシック風ロードバイク グリーン CR-246G&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/B004R96K5Y/srhkmnotte-22/ref=nosim/" title="Grandir(グランディール) 24インチシマノ6段変速クラシック風ロードバイク グリーン CR-246G" target="_blank"&gt;amazlet&lt;/a&gt; at 12.06.03&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;Grandir(グランディール) &lt;br /&gt;売り上げランキング: 1530&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B004R96K5Y/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;安かったのでつい。ついでにサイクルメータ (コンピュータ) も変えた。CATEYE の &lt;a href="http://www.cateye.com/jp/products/detail/CC-MT400/"&gt;MITY 8&lt;/a&gt; から &lt;a href="http://www.cateye.com/jp/products/detail/CC-COM10W/"&gt;COMMUTER&lt;/a&gt; にした。ワイヤレスだわーい。無駄に温度計もついてる。&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003I85H5E/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51QUA%2BCTsaL._SL160_.jpg" alt="キャットアイ(CAT EYE) サイクルコンピュータ CC-COM10W" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003I85H5E/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;キャットアイ(CAT EYE) サイクルコンピュータ CC-COM10W&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/B003I85H5E/srhkmnotte-22/ref=nosim/" title="キャットアイ(CAT EYE) サイクルコンピュータ CC-COM10W" target="_blank"&gt;amazlet&lt;/a&gt; at 12.06.03&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;キャットアイ(CAT EYE) &lt;br /&gt;売り上げランキング: 843&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003I85H5E/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7327037740/" title="new cycle computer by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7212/7327037740_1510d96eb1_b.jpg" width="1024" height="768" alt="new cycle computer"&gt;&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/125</id><published>2012-05-30T00:09:21+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/30/diary-on-tumblr"/><title>Nikki</title><content type="html">&lt;p&gt;日々の 1 つのブログエントリーにするには短すぎる話題、でも twitter 等に書くよりちゃんと置いておきたい post を日記として tumblr で開設した新しいところに書いていく事にしました:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://diary.sorah.jp/"&gt;http://diary.sorah.jp/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このブログはこのブログでちゃんと更新を続けていくけど、diary.sorah.jp は毎日更新したいところですね。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/124</id><published>2012-05-20T21:51:22+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/20/seccon-tsukuba-second-day"/><title>SECCON CTF つくば大会 2日目</title><content type="html">&lt;p&gt;&lt;img src="http://distilleryimage9.instagram.com/4d97e3e6a24311e181bd12313817987b_7.jpg" alt=""&gt;&lt;/p&gt;

&lt;p&gt;(&lt;a href="http://blog.sorah.jp/2012/05/19/seccon-tsukuba-first-day"&gt;昨日&lt;/a&gt; の続きです)&lt;/p&gt;

&lt;p&gt;最終的に 2507 点、13 チーム中 4 位で終わりました。やったね!&lt;/p&gt;

&lt;p&gt;開始直後 2 位から、徹夜で問題を持ち帰っていじっていた連中が一気に通していった所為で 7 位に転落して諦めていたけど、なんだかんだ最終的に 4 位まで戻れた。&lt;/p&gt;

&lt;p&gt;(うちのチームは家等で問題の続きをやったりは全くしなかった)&lt;/p&gt;

... &lt;a href="/2012/05/20/seccon-tsukuba-second-day"&gt;Continue Reading&lt;/a&gt;</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/123</id><published>2012-05-19T22:34:55+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/19/seccon-tsukuba-first-day"/><title>SECCON CTF つくば大会 1日目</title><content type="html">&lt;p&gt;&lt;img src="http://distilleryimage0.instagram.com/b2a7a7d8a1aa11e1989612313815112c_7.jpg" alt=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MacBook Air が他者の影響により机から滑り落ちる&lt;/li&gt;
&lt;li&gt;MBA の上の HHKB も同じく滑り落ちる&lt;/li&gt;
&lt;li&gt;HHKB 側に刺さっていた USB miniB プラグが MBA の液晶に衝突&lt;/li&gt;
&lt;li&gt;上記画像の通り&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;といた問題は 3つ。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;練習問題&lt;/li&gt;
&lt;li&gt;Web 系の問題 (300 点, 一番乗り)&lt;/li&gt;
&lt;li&gt;バイナリ系の問題 (400 点, 一番乗り)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;うちのチーム (IMOCAN) は 1007 点で 1 日目終了時点で 2 位。終了直前に 0 点から一気に 1100 点になったチームが居て怖いですね。&lt;/p&gt;

&lt;p&gt;明日が終わったらには最下位になってそうだな。&lt;/p&gt;

&lt;p&gt;Web 系の知識ないのに 300 点一番乗りで解けたし、答え分かっちゃうと拍子抜けする。しょうもないミスで 30 分くらい使ってたし。 (煽るつもりはないです)&lt;/p&gt;

&lt;p&gt;(&lt;a href="http://blog.sorah.jp/2012/05/20/seccon-tsukuba-second-day"&gt;2日目の記事&lt;/a&gt; に続く)&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/122</id><published>2012-05-16T21:25:03+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/16/mini-boombox"/><title>スピーカー買った</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7208995248/" title="P5164689.JPG by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7214/7208995248_2af848aaaf_b.jpg" width="1024" height="768" alt="P5164689.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B006N47IFC/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/3114X2GYeVL._SL160_.jpg" alt="ロジクール Bluetooth対応 ワイヤレススピーカー (ホワイト)Logicool Mini Boombox TS500 TS500WH" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B006N47IFC/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;ロジクール Bluetooth対応 ワイヤレススピーカー (ホワイト)Logicool Mini Boombox TS500 TS500WH&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/B006N47IFC/srhkmnotte-22/ref=nosim/" title="ロジクール Bluetooth対応 ワイヤレススピーカー (ホワイト)Logicool Mini Boombox TS500 TS500WH" target="_blank"&gt;amazlet&lt;/a&gt; at 12.05.16&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;ロジクール &lt;br /&gt;売り上げランキング: 22351&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B006N47IFC/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://www.logicool.co.jp/ja-jp/1201/8725"&gt;Logitech の Mini Boombox&lt;/a&gt; というスピーカーを買った。今月頭にやった&lt;a href="http://blog.sorah.jp/2012/05/04/hackathon-with-r7kamura-aereal"&gt;ハッカソン&lt;/a&gt;で、持ち歩けるサイズのよさげなスピーカーを探した結果。&lt;/p&gt;

... &lt;a href="/2012/05/16/mini-boombox"&gt;Continue Reading&lt;/a&gt;</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/121</id><published>2012-05-11T23:21:45+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/11/divvy"/><title>Divvy が便利すぎる</title><content type="html">&lt;p&gt;&lt;img src="https://img.skitch.com/20120511-tr5e6px7d6buu8w5uffkbqf3xj.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mizage.com/divvy/"&gt;http://mizage.com/divvy/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/r7kamura"&gt;@r7kamura&lt;/a&gt; 氏が言及していたので調べて導入したのだけど、これは便利すぎる。&lt;/p&gt;

&lt;p&gt;何をするソフトウェアかと言うと、ディスプレイをタイルに分割して、ウィンドウをタイル(範囲)にピシッとリサイズ・移動するという簡単な物。もちろん何分割するかは縦横それぞれ決められる。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120511-c98mg1b25yb5ugq96hcstranup.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;任意の範囲に対してショートカットを割り当てる事もできて、もちろん Divvy の呼び出しにもグローバルなホットキーを指定できる。たとえば画面の左半分を &lt;code&gt;H&lt;/code&gt; キーに割り当てておけば、ホットキーを叩いた後 &lt;code&gt;H&lt;/code&gt; を叩けば左半分に画面がリサイズ・移動してくれる。左右にウィンドウを綺麗に楽におけて便利。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120511-e55bfguyxyypgbqx9hg9hysp97.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;あとはオプションで toggle なんたら、を有効にしておけば、同じショートカットをもう一度叩けばサブスクリーンに移動してくれる。サブディスプレイ繋ぎ直した時にキーボードだけでウィンドウを整理できるから重宝する。&lt;/p&gt;

&lt;p&gt;というわけで、Divvy 購入して損無いと思う。Mac App Store で 1200 円でした。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mizage.com/divvy/"&gt;http://mizage.com/divvy/&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/120</id><published>2012-05-10T00:32:07+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/10/response-time-for-rack-apps"/><title>Show response time in Rack app (Sinatra)</title><content type="html">&lt;script src="https://gist.github.com/2645558.js?file=stats.rb"&gt;&lt;/script&gt;

&lt;p&gt;Sinatra::Base + Thin doesn&amp;#39;t show request path and response time.&lt;/p&gt;

&lt;p&gt;You can show response time by writing this class and modifying your &lt;code&gt;run&lt;/code&gt; line in your &lt;code&gt;config.ru&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;日本語&lt;/h2&gt;

&lt;p&gt;Sinatra と Thin 使うと、レスポンスタイム出してくれないから、Rack の run に渡すクラスに、一つオブジェクトを挟めてレスポンス返すまでの秒数を計測するクラスを書いた。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;config.ru&lt;/code&gt; に &lt;code&gt;Stats&lt;/code&gt; クラスを書き込んで、&lt;code&gt;run&lt;/code&gt; の行をちょっといじれば表示してくれます。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/118</id><published>2012-05-06T11:37:38+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/06/itunes-dj-make-next-in-appscript"/><title>Ruby から iTunes DJ の次の曲を指定する</title><content type="html">&lt;script src="https://gist.github.com/2607141.js?file=make_next.rb"&gt;&lt;/script&gt;

&lt;p&gt;&lt;a href="https://github.com/play/play"&gt;play&lt;/a&gt; に対抗する物を作っていて、同じように iTunes DJ を使おうとして &lt;a href="https://github.com/play/play/blob/master/app/models/queue.rb"&gt;play 氏がどうやって iTunes DJ に次の曲として指定してるのか&lt;/a&gt; みたら、Add to queue で次の曲ではなくキューの最後に追加するだけ、という仕様で全く参考にならなかった。&lt;/p&gt;

&lt;p&gt;自分は単純にボタンを押したら次に再生されるようにしたかったので、頑張って次の曲に追加するスクリプトを &lt;code&gt;rb-appscript&lt;/code&gt; 使って書いた。&lt;/p&gt;

&lt;p&gt;iTunes の Applescript インターフェース、プレイリストに曲を追加するのは末尾に追加しかできなくて、要するに以下の手順を踏まないと間に曲を差し込むことができない:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;末尾に追加したい曲を入れる: &lt;code&gt;[曲1, 曲2, 曲3, 追加したい曲]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;末尾に既存の曲を入れる: &lt;code&gt;[曲1, 曲2, 曲3, 追加したい曲, 曲1*, 曲2*, 曲3*]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;先頭にある既存の曲を消す: &lt;code&gt;[追加したい曲, 曲1*, 曲2*, 曲3*]&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;この方法しか無いんじゃないかと思ってググってたらやっぱりこれしか方法がなくて、
しかしググったおかげか、ループを使って消してくのかと思ったらたった 3 行で実現できるぽくて、ループでやると滅茶苦茶遅い事が判明した。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://hints.macworld.com/article.php?story=20040830035448525"&gt;http://hints.macworld.com/article.php?story=20040830035448525&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Applescript 本当に面白い仕様だと思う。&lt;/p&gt;

&lt;h2&gt;iTunes の設定&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120506-f5b263ncc711qeuypp5bd29pnw.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;iTunes DJ で voting を有効にしてるとダメなので設定をオフにしましょう。&lt;/p&gt;

&lt;p&gt;Voting を有効にしてると、プレイリストが曲の重複を許さなくなり、上述の方法が通用しなくなり道が閉ざされる。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/117</id><published>2012-05-04T23:59:59+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/04/hackathon-with-r7kamura-aereal"/><title>ハッカソンした</title><content type="html">&lt;p&gt;&lt;a href="https://twitter.com/r7kamura"&gt;@r7kamura&lt;/a&gt; 氏と前からハッカソンしたいですね、という話になっていて、
GW だし美少女 &lt;a href="https://twitter.com/aereal"&gt;@aereal&lt;/a&gt; さんも関西からきてたので、ちょうど良いタイミングだと思い急遽ハッカソンした。&lt;/p&gt;

&lt;p&gt;自分は &lt;a href="https://github.com/jberkel/android-plugin"&gt;android-plugin&lt;/a&gt; を使って Scala で Android アプリを書いていた。
一応帰宅後もぼちぼちコードを書いて完成させました。&lt;/p&gt;

&lt;h2&gt;成果物&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sorah/tagtodo"&gt;tagtodo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IC カードとかを重ねると設定した URL を開いてくれます。便利ですね。&lt;/p&gt;

&lt;p&gt;アプリケーションを起動して NFC の API で読み取れるカードとかを、Galaxy Nexus 等 NFC と純正 API を持ったデバイスに重ねてやると、
カードの ID 的な物を読み取って、URL とカードの名前 (編集時の識別用) を聞かれるので、開きたい URL と名前を入力して保存。&lt;/p&gt;

&lt;p&gt;その後ホーム等に戻ってカードを重ねてやると登録した URL が開きます。便利ですね。&lt;/p&gt;

&lt;p&gt;もちろん Android の intent を使っているので、たとえば &lt;code&gt;http://m.foursquare.com/venue/...&lt;/code&gt; みたいな URL を登録しておけば
よく使う venue へのチェックインが容易になりますね、やったね!&lt;/p&gt;

&lt;p&gt;Felica Lite の空のカードかって URL 焼けばいいだけの話なんだけど面倒だったので作りました。&lt;/p&gt;

&lt;p&gt;アイコンなんとかしたらたぶんマーケットに投げる。Scala で Android アプリ書いて得た知見はまたそのうち別にエントリします。&lt;/p&gt;

&lt;h2&gt;BGM&lt;/h2&gt;

&lt;p&gt;sorah の iTunes ライブラリを開放して、スピーカーがなかったのでヘッドホンをスピーカー代わりにして流していた。&lt;/p&gt;

&lt;p&gt;iTunes DJ という機能がとても便利で、iPhone 等から他人が曲のキューに追加できるし、とても便利。
ついでにレート高めの曲を優先的にする、みたいな設定があるので、一人でシャッフル再生する時にも活用しています。&lt;/p&gt;

&lt;p&gt;まずスピーカーまともなの欲しいと思っていたので、これとか欲しいですね。 (&lt;a href="http://amzn.to/sora_h"&gt;wishlist&lt;/a&gt;)&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003FGW78O/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/4113zNRWscL._SL160_.jpg" alt="LOGICOOL ポータブルスピーカー ノートPC向け Z205" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003FGW78O/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;LOGICOOL ポータブルスピーカー ノートPC向け Z205&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/B003FGW78O/srhkmnotte-22/ref=nosim/" title="LOGICOOL ポータブルスピーカー ノートPC向け Z205" target="_blank"&gt;amazlet&lt;/a&gt; at 12.05.05&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;ロジクール (2010-04-23)&lt;br /&gt;売り上げランキング: 1289&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003FGW78O/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;しかし iPhone からしかリクエストができないので、PC からもリクエストが出来ると便利、という話が出た。&lt;/p&gt;

&lt;p&gt;それについては github の人が書いた &lt;a href="https://github.com/play/play"&gt;play&lt;/a&gt; とかを知っていて、r7kamura さんもそれを推してきたので
帰宅後に調べてみたら、iTunes DJ が使われてるからオオッ、と思ったんだけど ruby 1.8.7 でしかうまく動かなくて、
Pusher 等外部サービスに結構依存してて自分的にはあまり好みじゃない感じ。&lt;/p&gt;

&lt;p&gt;単純にキューに追加したりする機能とリアルタイム通知機能だけを持った sinatra アプリケーションを作ろうかなと思った。
次のハッカソンまでに用意します!&lt;/p&gt;

&lt;h2&gt;お昼&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7141884669/" title="IMG_1819 by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7037/7141884669_4dc6468b2b_b.jpg" width="1024" height="768" alt="IMG_1819"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.burger-mania.com/"&gt;バーガーマニア&lt;/a&gt; に行ってプラチナバーガーを食べた。おいしかった。
プラチナ、たぶん白金台だからかな...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/6995798354/" title="IMG_1817 by sora_h, on Flickr"&gt;&lt;img src="http://farm9.staticflickr.com/8008/6995798354_4e1e2f73c9_b.jpg" width="1024" height="768" alt="IMG_1817"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;まとめ&lt;/h2&gt;

&lt;p&gt;r7kamura さん会場提供誠にありがとうございました。&lt;/p&gt;

&lt;p&gt;またやりたい! 一緒に何か作るのもよさそう。&lt;/p&gt;

&lt;h2&gt;関連リンク&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://hakolog.heroku.com/r7kamura/%E8%87%AA%E5%AE%85%E3%81%A7%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3%E3%81%97%E3%81%9F"&gt;自宅でハッカソンした (r7kamura)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/115</id><published>2012-05-01T23:52:08+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/01/mruby-on-android"/><title>Building mruby for android</title><content type="html">&lt;p&gt;&lt;img src="https://img.skitch.com/20120501-c9rkxca1by7f7s34291gjhgttk.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.sorah.jp/2012/05/01/android-ndk-standalone"&gt;android-ndk を standalone に使えるようにした&lt;/a&gt; のはこのためなのだけれど、&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mruby/mruby"&gt;mruby&lt;/a&gt; (a.k.a. RiteVM, 軽量 Ruby) を動かせるかと思ってセットアップした。結果的には普通に動きました。&lt;/p&gt;

&lt;p&gt;ただ、ビルドするときに &lt;code&gt;mrbc&lt;/code&gt; をホストで実行できる必要があるみたいなので、ちょっと弄った。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.sorah.jp/2012/05/01/android-ndk-standalone"&gt;make-standalone-toolchain.sh で作られた gcc 等&lt;/a&gt; に PATH が通ってる事を前提として、以下の手順でビルドできました:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git clone https://github.com/mruby/mruby.git
$ cd mruby
$ make
$ cp bin/mrbc .
$ make clean &amp;amp;&amp;amp; rm **/*.o

$ make CC=arm-linux-androideabi-gcc LL=arm-linux-androideabi-gcc
...
/bin/sh: ../bin/mrbc: cannot execute binary file

$ cp ./mrbc bin/mrbc

$ make CC=arm-linux-androideabi-gcc LL=arm-linux-androideabi-gcc 
# ↑ will fail at building mrubysample. you can just ignore because it&amp;#39;s not needed.

$ file bin/mruby
bin/mruby: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;あとは &lt;code&gt;./bin/mruby&lt;/code&gt; を &lt;code&gt;adb push&lt;/code&gt; 等で Android に転送して実行できるようにしてあげればいいと思います。&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/114</id><published>2012-05-01T23:36:50+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/05/01/android-ndk-standalone"/><title>Using toolchains standalone in android-ndk</title><content type="html">&lt;p&gt;Android には &lt;a href="http://developer.android.com/sdk/ndk/index.html"&gt;NDK (Native Development Tools)&lt;/a&gt; がある。要するに C とか C++ でちょっと高速なアプリケーションを書いたりできるらしい。まぁ、察せるとおりクロスコンパイラが入っている。&lt;/p&gt;

&lt;p&gt;Android で動くバイナリとかを吐く一番速い手段がたぶんコレ。&lt;/p&gt;

&lt;p&gt;OS X だと homebrew を使って&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ brew install android-ndk
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;のようにしてインストールする事ができる。&lt;/p&gt;

&lt;p&gt;homebrew だと &lt;code&gt;brew --cellar android-ndk&lt;/code&gt; で表示されるディレクトリの下にバージョン名のディレクトリがあり、その下の &lt;code&gt;toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin&lt;/code&gt; とかに gcc が転がっている。&lt;/p&gt;

&lt;p&gt;が、これを普通に叩いてもちゃんと動いてくれない。インクルードパスとか。&lt;/p&gt;

&lt;p&gt;しかしパッケージ内にちゃんと standalone に gcc とかを使えるようにしてくれるスクリプトがあったのでメモ:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# r7c はインストールされているバージョンに置き換えること
$ cd `brew --cellar android-ndk`/r7c
$ ./build/tools/make-standalone-toolchain.sh --ndk-dir=`pwd` --install-dir=$HOME/opt/android-ndk-standalone
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで &lt;code&gt;~/opt/android-ndk-standalone/bin&lt;/code&gt; にちゃんと単体で動く gcc 等が入るので、&lt;code&gt;$PATH&lt;/code&gt; を通したりすれば OK.&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/113</id><published>2012-04-30T23:16:55+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/30/cycled-yokohama"/><title>Cycled Yokohama</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/6981718072/" title="P4304589 by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7119/6981718072_e90c53f17b_b.jpg" width="1024" height="768" alt="P4304589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;横浜の方にちょっと自転車を持って行って自転車でふらふらしてきた。場所によっては徒歩だけど。&lt;/p&gt;

... &lt;a href="/2012/04/30/cycled-yokohama"&gt;Continue Reading&lt;/a&gt;</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/112</id><published>2012-04-27T01:25:35+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/27/learn-to-program"/><title>Ruby に最初に触れた時に使ったチュートリアル</title><content type="html">&lt;p&gt;Ruby をはじめるきっかけは覚えていないのだけれど、最初にどういうチュートリアルを見たかは内容と &lt;a href="http://www.ruby-lang.org/"&gt;ruby-lang.org&lt;/a&gt; からリンクが貼られていた、という事しか覚えてなく、そして今それがリンク切れしていて名前が長年分からなかったのだけれど、最近思い出すきっかけがあったので今度は忘れないようにメモ。&lt;/p&gt;

&lt;p&gt;で、何を使ったかというと、&lt;a href="http://pine.fm/LearnToProgram/"&gt;Learn To Program&lt;/a&gt; の日本語訳です。今は日本語訳リンク切れしてますね…&lt;/p&gt;

&lt;p&gt;これは「はじめてのプログラミング」という意味ですが割とちょっとプログラミングかじってても良いチュートリアルだと思います。&lt;/p&gt;

&lt;p&gt;オブジェクト指向便利ーみたいな事おもってました。 (あれ、当時 PHP 使ってたぞ???)&lt;/p&gt;

&lt;p&gt;日本語訳はオライリーから出てますね。&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114691/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51SMkW3ZR8L._SL160_.jpg" alt="初めてのプログラミング 第2版" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114691/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;初めてのプログラミング 第2版&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/4873114691/srhkmnotte-22/ref=nosim/" title="初めてのプログラミング 第2版" target="_blank"&gt;amazlet&lt;/a&gt; at 12.04.27&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;Chris Pine &lt;br /&gt;オライリージャパン &lt;br /&gt;売り上げランキング: 104026&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114691/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;↓ 原著書籍版&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/1934356360/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51mMkUpi8qL._SL160_.jpg" alt="Learn to Program (The Facets of Ruby Series)" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/1934356360/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Learn to Program (The Facets of Ruby Series)&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/1934356360/srhkmnotte-22/ref=nosim/" title="Learn to Program (The Facets of Ruby Series)" target="_blank"&gt;amazlet&lt;/a&gt; at 12.04.27&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;Chris Pine &lt;br /&gt;Pragmatic Bookshelf &lt;br /&gt;売り上げランキング: 160309&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/1934356360/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;まぁ、プログラミングをある程度経験してる人なら &lt;a href="https://twitter.com/yugui"&gt;@yugui&lt;/a&gt; 本のほうが良いと思う&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113679/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/41gCZhFayuL._SL160_.jpg" alt="初めてのRuby" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113679/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;初めてのRuby&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/4873113679/srhkmnotte-22/ref=nosim/" title="初めてのRuby" target="_blank"&gt;amazlet&lt;/a&gt; at 12.04.27&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;Yugui &lt;br /&gt;オライリージャパン &lt;br /&gt;売り上げランキング: 6285&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113679/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/111</id><published>2012-04-26T01:27:55+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/26/drc-bt30"/><title>SONY の Bluetooth ヘッドセットが便利</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7113070185/" title="P4264569.JPG by sora_h, on Flickr"&gt;&lt;img src="http://farm6.staticflickr.com/5113/7113070185_b8061d6446_b.jpg" width="1024" height="768" alt="P4264569.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SONY の Bluetooth ヘッドセットには、数年前から自分で好きなイヤホンを差し込んで使えるという物があって、好きなイヤホンやヘッドホンを刺して音楽を聴けるのでとても重宝していた。&lt;/p&gt;

&lt;p&gt;最近、というか自分が持っているモデルの後からは USB で充電できるようになっていて前から買い換えたいなーと思っていて、片道 2 時間通勤を始めるにあたって買い換えた。&lt;/p&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002P67DZW/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/31a14WHtxkL._SL160_.jpg" alt="SONY Bluetooth ワイヤレスオーディオレシーバー BT30 ブラック DRC-BT30/B" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002P67DZW/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;SONY Bluetooth ワイヤレスオーディオレシーバー BT30 ブラック DRC-BT30/B&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/B002P67DZW/srhkmnotte-22/ref=nosim/" title="SONY Bluetooth ワイヤレスオーディオレシーバー BT30 ブラック DRC-BT30/B" target="_blank"&gt;amazlet&lt;/a&gt; at 12.04.26&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;ソニー (2009-11-10)&lt;br /&gt;売り上げランキング: 19081&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002P67DZW/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002P67E0G/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/31kqUzjLeeL._SL160_.jpg" alt="SONY Bluetooth ワイヤレスオーディオレシーバー BT30 ホワイト DRC-BT30/W" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002P67E0G/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;SONY Bluetooth ワイヤレスオーディオレシーバー BT30 ホワイト DRC-BT30/W&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/B002P67E0G/srhkmnotte-22/ref=nosim/" title="SONY Bluetooth ワイヤレスオーディオレシーバー BT30 ホワイト DRC-BT30/W" target="_blank"&gt;amazlet&lt;/a&gt; at 12.04.26&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;ソニー (2009-11-10)&lt;br /&gt;売り上げランキング: 15072&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-sub-info" style="float: left;"&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002P67E0G/srhkmnotte-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2&gt;比較&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/6967030686/" title="P4264575.JPG by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7238/6967030686_68d4ff110d_b.jpg" width="1024" height="768" alt="P4264575.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;↑ DRC-BT15P&lt;/p&gt;

&lt;p&gt;もともと自分が持っていたのは DRC-BT15P で、これと比較すると&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;USB で充電できるようになった&lt;/li&gt;
&lt;li&gt;バッテリーが 4 時間くらいから 7 時間くらい持つようになった (そのかわり一回り大きくなった)&lt;/li&gt;
&lt;li&gt;クリップが大きくなって取り外し不可になりクリップの信頼性が向上&lt;/li&gt;
&lt;li&gt;ジョグスイッチが DRC-BT15P に比べ現行モデルのほうが飛び出て大きいので、メッセンジャーバッグをおろしたりする時や電車の中でぶつかると曲が送られたりする&lt;/li&gt;
&lt;li&gt;マルチポイントに対応し、ヘッドセットプロファイルと A2DP 等の音楽再生のプロファイルそれぞれ 1 つずつ、同時接続できるようになった&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という感じ。&lt;/p&gt;

&lt;p&gt;全体的にとても良い買い物だと思う。&lt;/p&gt;

&lt;p&gt;職場でもマシンから音楽を飛ばすのに使っていて、その時にちょっと飲み物を飲みに行こうとすると距離の所為かさすがに音声が途切れ途切れになる。いずれにせよケーブルがまとわりつかないので便利。&lt;/p&gt;

&lt;p&gt;SHURE のイヤホンちょっとケーブル長いですね。短いケーブル欲しい…&lt;/p&gt;

&lt;h2&gt;マルチポイント&lt;/h2&gt;

&lt;p&gt;上記のようにマルチポイントに対応していて、例えば iPhone と MacBook を同時に接続できる。MacBook で iTunes を使い音楽を再生しながら、iPhone で通話を受け取る、といった事ができる (同時に両方の音源を再生するのはできない。待受でもう一本セッションを保持できるといった感じ)&lt;/p&gt;

&lt;p&gt;ただ、その所為か iOS 側の Bluetooth 接続の挙動とうまくやっていく必要が生じる。
MacBook (OS X Lion) と iPhone 4S (iOS 5) で、iPhone をハンズフリー、MacBook を A2DP としてうまく接続する時以下のようにしてつないでいる。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OS X 側で Bluetooth メニューを開いて DRC-BT30 のサブメニューにある &amp;quot;Use as Audio Device&amp;quot; をクリック&lt;/li&gt;
&lt;li&gt;iTunes 等にフォーカスをあわせて、再生等を速攻でできるようにしておく&lt;/li&gt;
&lt;li&gt;すかさず DRC-BT30 の電源を入れ、起動音が鳴ったら iTunes だったらスペースバーを叩いて音源を送信し始める&lt;/li&gt;
&lt;li&gt;たぶん音楽が流れ始める。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;いちいち iPhone の BT 切るのが面倒だとはいえ、割と面倒。良い方法があれば教えてください。&lt;/p&gt;

&lt;p&gt;具体的にどういう事かというと、 iPhone が A2DP プロファイルでのセッションを確立する前に OS X の方でセッションを確立してる。そんでもって初めて音声を送信しはじめないと接続してくれないので iTunes 等で再生してやる必要がある。Chrome の &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; とかだとうまくいかない事が多いので、iTunes を使ってます。&lt;/p&gt;

&lt;p&gt;iOS のほうで音楽再生しない限り A2DP セッションはらないでおくとかいう挙動にできたら良いんだけどなぁ。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/110</id><published>2012-04-24T00:27:35+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/24/nohup-on-tmux-on-osx"/><title>OS X 上での tmux 上での nohup 事情</title><content type="html">&lt;pre&gt;&lt;code&gt;sorah@americano /tmp $ nohup echo hi
appending output to nohup.out
sorah@americano /tmp $ cat nohup.out 
nohup: can&amp;#39;t detach from console: Undefined error: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;OS X 上の &lt;code&gt;tmux&lt;/code&gt; で &lt;code&gt;nohup&lt;/code&gt; を叩いても期待通りに動いてくれない。&lt;/p&gt;

&lt;p&gt;OS X 上でしか再現しなかったので、&lt;code&gt;pbpaste&lt;/code&gt; とか &lt;code&gt;pbcopy&lt;/code&gt; が動かないのと同じ
原因と仮定して、&lt;a href="https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard"&gt;tmux-MacOSX-pasteboard&lt;/a&gt; を設定したら動くようになりました。&lt;/p&gt;

&lt;p&gt;めでたしめでたし。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/109</id><published>2012-04-22T08:28:04+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/22/civilization-v"/><title>Sid Meier's Civilization V 買った</title><content type="html">&lt;p&gt;&lt;img src="https://img.skitch.com/20120422-48maqnwi79jeyqtimpcngdb7g.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://store.steampowered.com/app/8930/"&gt;Steam&lt;/a&gt; で買った。39.99 USD (&lt;a href="http://pasra.tk/"&gt;Team Pasra&lt;/a&gt; 基金による補助ありで)。日本円で 3200 円くらい。&lt;/p&gt;

&lt;p&gt;チュートリアルをやらずにとりあえず &lt;a href="https://twitter.com/chihirow"&gt;@chihirow&lt;/a&gt; と、同じタイミングで購入した &lt;a href="https://twitter.com/akazora"&gt;@akazora&lt;/a&gt; とプレイ。&lt;/p&gt;

&lt;p&gt;チュートリアルやらないと何をやればいいのか途中で詰まるね。
ブラウザ三国志みたいに領地獲得とかあって面白い。あと蛮族ウザい。&lt;/p&gt;

&lt;p&gt;というわけでしばらく Team Pasra ではこのゲームで遊べそうです。&lt;/p&gt;

&lt;h2&gt;見つかった情報サイト類&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tk7-jp.net/civ5/index.php?%A5%C8%A5%C3%A5%D7"&gt;Civ5ファン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://civ5wiki.com/"&gt;Civ5 Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://civ5monchan.net/"&gt;Monchan Civ5 Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://civilopedia5.com/"&gt;Civilopedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Team Pasra でのプレイの様子&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120423-aqijsqmr1fr6uansens1sx92p.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://pasra.tk/"&gt;Team Pasra&lt;/a&gt; のメンバーとわいわいやっております。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/108</id><published>2012-04-21T14:11:58+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/21/workspace-2012-spring"/><title>sorah の開発環境まとめ 2012 年春号</title><content type="html">&lt;p&gt;自分の開発環境等についてまとめておきます。あまりすごくない。&lt;/p&gt;

&lt;h2&gt;目次&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;エディタ&lt;/li&gt;
&lt;li&gt;シェル&lt;/li&gt;
&lt;li&gt;ホームディレクトリの構造&lt;/li&gt;
&lt;li&gt;アプリケーション類&lt;/li&gt;
&lt;li&gt;構築方法&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;ふろく&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sorah/config"&gt;github - sorah/config&lt;/a&gt; に sorah の使っている dotfiles などが置いてあります。&lt;/p&gt;

&lt;h2&gt;エディタ&lt;/h2&gt;

&lt;p&gt;Vim を使っています。OS X だと MacVim.&lt;/p&gt;

&lt;h3&gt;プラグイン&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Shougo/neobundle.vim"&gt;NeoBundle.vim&lt;/a&gt; を使って管理しています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sorah/config/blob/master/vim/dot.vimrc#L50"&gt;.vimrc&lt;/a&gt; を見ると、主に以下のプラグインを使っているようです。
全部書くのは面倒なので一部だけ。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sorah/metarw-simplenote.vim"&gt;metarw-simplenote.vim&lt;/a&gt; - Simplenote を metarw インターフェースで読み書きするプラグイン (拙作)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tpope/vim-rails"&gt;rails.vim&lt;/a&gt; - Vim is forever. Rails 周りの補助。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=729"&gt;sudo.vim&lt;/a&gt; - sudo でファイルを保存したり読み込んだり。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/thinca/vim-quickrun"&gt;quickrun.vim&lt;/a&gt; - &lt;code&gt;&amp;lt;leader&amp;gt;r&lt;/code&gt; でそのファイルを即座に vim 上で実行できます。TopCoder でテストコードも入れてくれるプラグインとかと組み合わせてよく使います。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shougo/neocomplcache"&gt;neocomplcache&lt;/a&gt; - 強力な自動補完を提供してくれます。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kana/vim-metarw"&gt;metarw&lt;/a&gt; - ファイルを編集するような感じでプラグインが提供する文字列などを編集できるようにできるようにするライブラリ。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shougo/vimproc"&gt;vimproc&lt;/a&gt; - 非同期実行のサポートをするライブラリ。quickrun や vimshell 等で無いと困る。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shougo/vimshell"&gt;vimshell&lt;/a&gt; - vim 上で vim script で実装されたシェル。たまにつかう。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;vimrc&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/sorah/config/blob/master/vim/dot.vimrc"&gt;.vimrc&lt;/a&gt; にある。戦闘力は 505 程度だしまだまだですね。&lt;/p&gt;

&lt;h2&gt;シェル&lt;/h2&gt;

&lt;p&gt;zsh を使っています。&lt;/p&gt;

&lt;p&gt;zshrc はこれ: &lt;a href="https://github.com/sorah/config/blob/master/zsh/dot.zshrc"&gt;.zshrc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.zshrc_global_env&lt;/code&gt; と &lt;code&gt;~/.zshrc_env&lt;/code&gt; を読み込むようにしていて、前者はそのプラットフォーム向けの固有設定、後者は端末毎の固有設定という扱いで
global_env は適当に config リポジトリからシンボリックリンクを貼ったりします。&lt;/p&gt;

&lt;p&gt;.zshrc がやっていることは簡単で、&lt;code&gt;$PATH&lt;/code&gt; をあちこちに通して、&lt;code&gt;~/git/*/*/bin&lt;/code&gt; にも &lt;code&gt;$PATH&lt;/code&gt; を通したりし、&lt;/p&gt;

&lt;p&gt;alias をいろいろ設定して (ホスト名の入力で &lt;code&gt;tmux&lt;/code&gt; で新規ウィンドウ開いて ssh 接続しにいったりできるようにしたりとか)&lt;/p&gt;

&lt;p&gt;precmd 等で tmux 側のウィンドウタイトルにコマンド名やカレントディレクトリなどを表示するフックなどを設定しています。&lt;/p&gt;

&lt;p&gt;あと、ssh の agent forwarding を tmux 内でもうまいこと使えるようにする hack 等もいれています。&lt;/p&gt;

&lt;p&gt;そして最後に tmux を起動。&lt;/p&gt;

&lt;h2&gt;ホームディレクトリの構造&lt;/h2&gt;

&lt;p&gt;こんな感じです:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;~/git&lt;/code&gt; - git リポジトリの working copy を入れるところ。さらに一階層言語毎におおまかにディレクトリを掘って入れています。実態は Dropbox 内のディレクトリへのシンボリックリンクで、全て Dropbox に同期されるようにしています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;言語名 (&lt;code&gt;ruby&lt;/code&gt; とか) - &lt;code&gt;ruby&lt;/code&gt; 等の場合は zshrc の方で lib ディレクトリを &lt;code&gt;RUBYLIB&lt;/code&gt; 環境変数に入れたりしています。&lt;/li&gt;
&lt;li&gt;リポジトリ名&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;~/work&lt;/code&gt; - 仕事関係のリポジトリの working copy を入れる。 Dropbox に同期されないようにするため。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;~/sandbox&lt;/code&gt; - リポジトリにするまでもない単発のコードを入れる。&lt;code&gt;~/git&lt;/code&gt; と同じように下にさらに一階層言語毎にディレクトリを掘ってある。最近あまり使わなくなった。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;アプリケーション類&lt;/h2&gt;

&lt;p&gt;YoruFukurou, Limechat, Chrome (dev) があれば生きていける。&lt;/p&gt;

&lt;h2&gt;環境構築方法&lt;/h2&gt;

&lt;p&gt;OS X の場合。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;iTunes ライブラリを外付け HDD 等から引っ張ってくる。&lt;/li&gt;
&lt;li&gt;USB メモリ等に &lt;code&gt;~/Library/Preferences/com.apple.Terminal.plist&lt;/code&gt; を入れておいてそれをコピーしてくる。&lt;/li&gt;
&lt;li&gt;USB メモリに &lt;code&gt;~/Library/Application\ Support/YoruFukurou&lt;/code&gt; と &lt;code&gt;~/Library/Preferences/com.YoruFukurouProject.YoruFukurou.plist&lt;/code&gt; を入れてそれをコピーしてくる。&lt;/li&gt;
&lt;li&gt;USB メモリに &lt;code&gt;~/Library/Preferences/net.limechat.LimeChat.plist&lt;/code&gt; を入れておいてそれをコピーしてくる。&lt;/li&gt;
&lt;li&gt;YoruFukurou, Limechat, Chrome (dev) をいれる。&lt;/li&gt;
&lt;li&gt;XCode を入れる。&lt;/li&gt;
&lt;li&gt;Dropbox を入れて同期が終わるのを待つ。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln -s $HOME/Dropbox/.../git $HOME/git; ln -s $HOME/Dropbox/.../sandbox $HOME/sandbox&lt;/code&gt; を実行する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd ~/git/config &amp;amp;&amp;amp; source memo&lt;/code&gt; する。これで dotfiles がホームディレクトリにシンボリックリンクされる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chsh&lt;/code&gt; で zsh をログインシェルにする&lt;/li&gt;
&lt;li&gt;MacVim を入れて、&lt;code&gt;:NeoBundleInstall&lt;/code&gt; をした後に &lt;code&gt;cd ~/.bundle/vimproc &amp;amp;&amp;amp; make -f make_mac.mak&lt;/code&gt; する。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;おわり。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/107</id><published>2012-04-06T23:59:27+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/06/sakura-2012"/><title>Sakura</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7051074259/" title="IMG_1455 by sora_h, on Flickr"&gt;&lt;img src="http://farm6.staticflickr.com/5232/7051074259_bd9abd4e8e_b.jpg" width="1024" height="768" alt="IMG_1455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;お昼に桜を見る機会があって見たのだけれど、白金台周辺は満開でした。綺麗。&lt;/p&gt;

&lt;p&gt;iPhone で写真を撮ったのでとりあえず上げておいた: &lt;a href="http://www.flickr.com/photos/sora_h/sets/72157629389593422/with/7051074259/"&gt;2012 Sakura&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今年は Flickr Pro も更新なんだよな。&lt;/p&gt;

&lt;p&gt;ちなみに入社して6日、出社も3回目でした。徐々に慣れてきつつある。自炊力向上も頑張っています。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/106</id><published>2012-04-02T21:26:00+09:00</published><updated>2013-01-04T05:17:02+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/04/02/joining-cookpad"/><title>Joining COOKPAD</title><content type="html">&lt;p&gt;(English is at the last)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://info.cookpad.com/"&gt;クックパッド株式会社&lt;/a&gt; にアルバイトとして入社して、初出社してきました!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.sorah.jp/2012/04/01/job"&gt;昨日書いた「就職します」記事&lt;/a&gt; は社名の部分の UTF-8 バイト列だけピンポイントにおかしくなっていました。ごめんなさい!
でもコードポイントが 0x7000 ズレているだけだからいいよね!&lt;/p&gt;

&lt;p&gt;もともときっかけとしては、&lt;/p&gt;

&lt;blockquote class="twitter-tweet tw-align-center"&gt;&lt;p&gt;クックパッド楽しそうで，周りの話を聞く限り良い会社だなーと思っている．是非働きたい…可能なら．&lt;/p&gt;&amp;mdash; そらはー (@sora\_h) &lt;a href="https://twitter.com/sora_h/status/122596324364398592" data-datetime="2011-10-08T08:56:56+00:00"&gt;October 8, 2011&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;blockquote class="twitter-tweet tw-align-center" data-in-reply-to="122596324364398592"&gt;&lt;p&gt;@&lt;a href="https://twitter.com/sora_h"&gt;sora_h&lt;/a&gt; 突然のリプライ失礼します、クックパッドの井原と申します。お休みの期間等ででも、試されますか？&lt;/p&gt;&amp;mdash; Masahiro Ihara (@ihara2525) &lt;a href="https://twitter.com/ihara2525/status/122602099115692033" data-datetime="2011-10-08T09:19:52+00:00"&gt;October 8, 2011&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;こんな事に。&lt;/p&gt;

&lt;p&gt;この後話を進ませてもらって何度か足を運びアルバイトとして週 3 日、朝から夕方まで働く事になりました。&lt;/p&gt;

&lt;p&gt;(こないだも目黒あたりにfoursquareチェックインしてtweetが流れたりとか、その前は &lt;a href="http://instagr.am/p/XmnNE/"&gt;at クックパッド というタグ付きでご飯写真&lt;/a&gt;を2回ほど上げたりとかで一部の人には察されていたかと思われるが)&lt;/p&gt;

&lt;p&gt;ちなみに高校は行かないということは &lt;a href="http://sorah.jp/faq/career"&gt;FAQ&lt;/a&gt; にも書いていたのですが、まあ高校は行かず、残りの週 4 日で勉強して
&lt;a href="http://www.mext.go.jp/a_menu/koutou/shiken/index.htm"&gt;高認&lt;/a&gt; を取得して大学には行こうとは思っています。その辺はもう自分で考えている
のでほっといてほしい... (答えるのがだるい)&lt;/p&gt;

&lt;p&gt;で、実際に初出社してですが早速 &lt;a href="https://twitter.com/takai"&gt;@takai&lt;/a&gt; さんにプレッシャーかけられるなど
とてもこわ...楽しい職場になっております。&lt;/p&gt;

&lt;p&gt;あと &lt;a href="https://twitter.com/mrkn"&gt;@mrkn&lt;/a&gt; 等には「中卒」と紹介される事が多いですね。まあ、そうですね。仕方がないですね。 (訂正: 呼ぶのではなく紹介される時にだけでした)&lt;/p&gt;

&lt;p&gt;現状不安な事は明日朝起きたら仕事用のマシン等のパスワードと仕事用 SSH 鍵のパスフレーズを忘れていないかという点だな。忘れそうで本当に怖いですね。&lt;/p&gt;

&lt;p&gt;なお、会社の雰囲気などは &lt;a href="http://blog.kushii.net/archives/1350951.html"&gt;941 さんのブログ&lt;/a&gt; を見る事をおすすめします。(他力本願)&lt;/p&gt;

&lt;p&gt;というわけで週 3 日は東京にいるとおもいます。&lt;/p&gt;

&lt;h2&gt;English&lt;/h2&gt;

&lt;p&gt;I&amp;#39;m joining &lt;a href="http://info.cookpad.com/en"&gt;COOKPAD Inc.&lt;/a&gt; today and started working at COOKPAD as a part-time developer. :-)&lt;/p&gt;

&lt;p&gt;The company, &lt;a href="http://cookpad.com/"&gt;COOKPAD&lt;/a&gt; is the largest recipe sharing website in Japan. (here&amp;#39;s &lt;a href="http://info.cookpad.com/en"&gt;about the company in English&lt;/a&gt;.)
I&amp;#39;m excited to work here because there are many brilliant co-workers in the company!&lt;/p&gt;

&lt;p&gt;And also today I become not a student. But you know I&amp;#39;m just 15.
I&amp;#39;ll continue studying without going school in remaining days of a week.&lt;/p&gt;

&lt;p&gt;This year will be exciting year for me, (repeating) I&amp;#39;m excited to work!&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/105</id><published>2012-03-26T22:37:37+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/26/bf01d-first-impression"/><title>BF-01D ファーストインプレッション</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sora_h/7017385655/" title="P3264335.JPG by sora_h, on Flickr"&gt;&lt;img src="http://farm8.staticflickr.com/7215/7017385655_e0e448ea0d_z.jpg" width="640" height="480" alt="P3264335.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nttdocomo.co.jp/product/data/bf01d/"&gt;BF-01D&lt;/a&gt; を買ったのでとりあえずファーストインプレッションを。&lt;/p&gt;

&lt;p&gt;まずそもそも BF-01D は去年の夏頃に出る予定だった Xi の Wi-Fi ルータで (その時の型番は BF-01C とかだった気がする)、
突然延期が発表され 2012 年春モデルとして BF-01D と型番を変更し仕様が一部変更されて先日 3/22 に発売された。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;なんか重量が...&lt;/li&gt;
&lt;li&gt;なんかサイズが...&lt;/li&gt;
&lt;li&gt;連続通信時間が...&lt;/li&gt;
&lt;li&gt;FOMA ハイスピードの下り速度向上&lt;/li&gt;
&lt;li&gt;無駄に 16GB の内蔵ストレージ搭載&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;まぁ、人柱だな。&lt;/p&gt;

&lt;p&gt;よくわからない製品だがだが、これはバッファローの光ポータブルこと &lt;a href="http://www.nttdocomo.co.jp/product/data/bf01b/index.html"&gt;BF-01B&lt;/a&gt; の
Xi 版のような存在であるため割と安定するんじゃないかと思って購入。&lt;/p&gt;

&lt;h2&gt;料金プラン&lt;/h2&gt;

&lt;p&gt;ヨドバシマルチメディア宇都宮で購入。細かい価格はうろ覚え。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;24回払い: 35910/24 = 1365 (/ 月)&lt;/li&gt;
&lt;li&gt;Xi データプラン フラット にねん: 4010 円 (〜 4 月), 4935 円 (5 月 〜 9 月), 5935 円 (10 月〜)&lt;/li&gt;
&lt;li&gt;mopera U: 525&lt;/li&gt;
&lt;li&gt;月々サポート: -840&lt;/li&gt;
&lt;li&gt;ユニバーサルサービス料: 5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;つまり、月額 5065円 (〜 4 月), 5990円 (5 月 〜 9 月), 7040 (10 月〜)&lt;/p&gt;

&lt;p&gt;データプランの金額が違うのはキャンペーンとかその辺。詳しくは自分で調べて。&lt;/p&gt;

&lt;h2&gt;ハードウェア&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;3G, HSUPA, LTE (Xi) 対応&lt;/li&gt;
&lt;li&gt;あまり電池持たない?&lt;/li&gt;
&lt;li&gt;なんかデカくて重い?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;みたいな噂が。&lt;/p&gt;

&lt;p&gt;実際はどうだったかというと、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;大きいけどまぁ大きさは良いとしてもちょっと分厚いかな&lt;/li&gt;
&lt;li&gt;裏フタ開けるとバッテリーがすごい小さいかな、バッテリーどれくらい持つのかなあ。&lt;/li&gt;
&lt;li&gt;クレードルが付属してきてイーサネット端子があり、イーサネットコンバータもしくはイーサネットにつないだ回線で親機として作動させる事ができる。面白い。&lt;/li&gt;
&lt;li&gt;デザインについては悪くないと思う。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;ソフトウェア&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;b-mobile wifi とは違ってまともな感じなので扱いやすくて良い。ログインしなくても電池状況・電波状況等は見れる。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;しかし、ソフトウェア側から Xi なのか FOMA なのかわからないのは辛い。いや、実際には管理画面にログインして ステータス→ログ を見て、 &amp;quot;LTE connected&amp;quot; 的なログを探しそれが最新か確かめればいいんだけど、面倒だな。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;後述するが、XML で詳細情報を取ることに成功したのでそれだと LTE かどうかのフラグっぽいのがあった。&lt;/li&gt;
&lt;li&gt;ちなみに、LTE かどうかはハードウェア側、つまり本体LEDの色で分かる。水か青でFOMAかXiらしい、けどぱっと遠くから見てわからないよなあ。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.ntt-bp.net/pwr/pmx_series/d_function.html"&gt;Personal Media eXchange&lt;/a&gt; とかいうよくわかんないサービスに対応していて、Android アプリダウンロードしてみたけど管理画面のパスワードがデフォルトの空のままである事を想定していて何もできなかった。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android 向けの shark でパケット読み取った結果、電池情報等を XML で取得する方法がわかりました。どうもありがとうございます。感謝いたします。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;通信速度&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;明日ちゃんと確認するけど、LTE か確認してないけど speedtest.net の Seoul サーバに iOS アプリから確認した所以下のような結果だった&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;場所: &lt;a href="http://maps.google.co.jp/maps?q=36.559536,139.896458&amp;amp;ll=36.559532,139.896448&amp;amp;spn=0.009066,0.021136&amp;amp;num=1&amp;amp;brcurrent=3,0x601f666c9356803b:0xc9357749798654c2,0&amp;amp;t=m&amp;amp;z=16&amp;amp;iwloc=near"&gt;宇都宮駅前 (宮の橋交差点付近)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;下り: 91.0 KB/s&lt;/li&gt;
&lt;li&gt;上り: 57.2 KB/s&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;なんか speedtest.net よくないきがする。。。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;詳細なステータスが乗った XML を見る方法&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=net.nttbp.pmxdocomo"&gt;Android 向けの Personal Media eXchange アプリ&lt;/a&gt; をダウンロード、 Android 版 wireshark でパケットキャプチャした結果以下の方法で電池情報、ネットワーク状態などが取得できた。&lt;/p&gt;

&lt;h3&gt;URL&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;http://&amp;lt;ルータのIPアドレス&amp;gt;:8888/status
例: http://192.168.1.13:8888/status
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;にアクセスすると BASIC 認証を求められるので、ルータの管理画面にログインする時と同じようにユーザー名 &lt;code&gt;root&lt;/code&gt;, パスワードにルータに設定した管理画面パスワードを
入力すれば見れるはず。&lt;/p&gt;

&lt;h3&gt;取得できる情報と意味&lt;/h3&gt;

&lt;p&gt;こんな XML が手に入ります。項目の意味などは一部推測です。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;pwrStatus&amp;gt;
  &amp;lt;model&amp;gt;BF-01D&amp;lt;/model&amp;gt;
  &amp;lt;vender&amp;gt;DOCOMO.&amp;lt;/vender&amp;gt;
  &amp;lt;fwVersion&amp;gt;1.83&amp;lt;/fwVersion&amp;gt;
  &amp;lt;apiVersion&amp;gt;1.0&amp;lt;/apiVersion&amp;gt;
  &amp;lt;routeInterface&amp;gt;0&amp;lt;/routeInterface&amp;gt;
  &amp;lt;power&amp;gt;
    &amp;lt;battery&amp;gt;35&amp;lt;/battery&amp;gt;
    &amp;lt;standby&amp;gt;0&amp;lt;/standby&amp;gt;
    &amp;lt;autoOff&amp;gt;0&amp;lt;/autoOff&amp;gt;
  &amp;lt;/power&amp;gt;
  &amp;lt;interface id=&amp;quot;0&amp;quot;&amp;gt;
    &amp;lt;connected&amp;gt;true&amp;lt;/connected&amp;gt;
    &amp;lt;route&amp;gt;true&amp;lt;/route&amp;gt;
    &amp;lt;rssi&amp;gt;-44&amp;lt;/rssi&amp;gt;
    &amp;lt;ssid&amp;gt;atebadf00d&amp;lt;/ssid&amp;gt;
    &amp;lt;bssid&amp;gt;de:ad:be:ef:fe:ed&amp;lt;/bssid&amp;gt;
  &amp;lt;/interface&amp;gt;
  &amp;lt;interface id=&amp;quot;1&amp;quot;&amp;gt;
    &amp;lt;connected&amp;gt;true&amp;lt;/connected&amp;gt;
    &amp;lt;route&amp;gt;false&amp;lt;/route&amp;gt;
    &amp;lt;rssi&amp;gt;-71&amp;lt;/rssi&amp;gt;
    &amp;lt;lte&amp;gt;false&amp;lt;/lte&amp;gt;
  &amp;lt;/interface&amp;gt;
  &amp;lt;interface id=&amp;quot;2&amp;quot;&amp;gt;
    &amp;lt;connected&amp;gt;false&amp;lt;/connected&amp;gt;
    &amp;lt;route&amp;gt;false&amp;lt;/route&amp;gt;
  &amp;lt;/interface&amp;gt;
&amp;lt;/pwrStatus&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;model&lt;/code&gt;: モデル名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;vender&lt;/code&gt;: ベンダ名? ドコモで売ってるから DOCOMO なのかな。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;fwVersion&lt;/code&gt;: ファームウェアのバージョンだと思われる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;apiVersion&lt;/code&gt;: これもよくわからないが API のバージョン。8888 ポートは API なんだろうね。今後もパケットキャプチャして挙動を把握したい。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ここまでは割とどうでもいい情報。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;routeInterface&lt;/code&gt;: 後に続く &lt;code&gt;&amp;lt;interface&amp;gt;&lt;/code&gt; の &lt;code&gt;id&lt;/code&gt; 属性を指す物とみられる。現在どの &lt;code&gt;&amp;lt;interface&amp;gt;&lt;/code&gt; を利用してインターネットに接続しているか、という意味ではないか (&lt;code&gt;&amp;lt;interface&amp;gt;&lt;/code&gt; はそれぞれ Wi-Fi, 3G/LTE, Ethernet を指している)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;power&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;battery&lt;/code&gt;: バッテリーの残量 (たぶんパーセンテージ)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;standby&lt;/code&gt;: よくわからない。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;autoOff&lt;/code&gt;: よくわからない。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;pwrStatus&lt;/code&gt; → &lt;code&gt;interface&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id=&amp;quot;0&amp;quot;&lt;/code&gt; - Wi-Fi&lt;/li&gt;
&lt;li&gt;&lt;code&gt;connected&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): Wi-Fi につながっているかどうか。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;route&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): 現在 Wi-Fi を利用してインターネットに接続されているかどうか。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rssi&lt;/code&gt;: RSSI. 値が大きい方が電波強度が強い。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssid&lt;/code&gt;: 接続している Wi-Fi の SSID&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bssid&lt;/code&gt;: 接続している Wi-Fi の BSSID&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id=&amp;quot;1&amp;quot;&lt;/code&gt; - 3G, LTE (Xi)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;connected&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): 3G, LTE 回線に繋がっているかどうか。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;route&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): 現在 Wi-Fi を利用してインターネットに接続されているかどうか。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rssi&lt;/code&gt;: RSSI&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lte&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): true なら LTE (Xi) で繋がっている、っていう意味だと思われる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id=&amp;quot;2&amp;quot;&lt;/code&gt; Ethernet&lt;/li&gt;
&lt;li&gt;&lt;code&gt;connected&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): Ethernet に繋がっているかどうか。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;route&lt;/code&gt; (&lt;code&gt;bool&lt;/code&gt;): 現在 Ethernet を利用してインターネットに接続されているかどうか。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;こんな所かなあ。一部推測が含まれてるけど。&lt;/p&gt;

&lt;p&gt;これで端末見なくても LTE かどうか確認できるね! やったね!&lt;/p&gt;

&lt;h2&gt;BF-01D のステータスを出力するスクリプト&lt;/h2&gt;

&lt;script src="https://gist.github.com/2205676.js?file=bf01d_status.rb"&gt;&lt;/script&gt;

&lt;p&gt;Ruby で。要 Ruby 1.9, nokogiri (&lt;code&gt;gem install nokogiri&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;とりあえずこんな感じで使える。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ruby bf01d_status.rb 192.168.13.1 ぱすわーど
BF-01D 75% -  Wi-Fi: --SSID-- (-49)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120326-qbq53ayjxpr9s6bs1qjw86be6x.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;↑Geektools に設定してデスクトップに表示させた例&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/104</id><published>2012-03-19T11:17:17+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/19/sacloud-downed"/><title>"さくらのクラウド" のストレージ障害</title><content type="html">&lt;p&gt;&lt;img src="https://img.skitch.com/20120319-fx5ywubjenbqr7g7jh26diyi67.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://support.sakura.ad.jp/mainte/newsentry.php?id=6994"&gt;http://support.sakura.ad.jp/mainte/newsentry.php?id=6994&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;発生日時 : 2012年03月19日9時55分～
影響範囲 : さくらのクラウド
障害内容 : 断続的にストレージに書き込めない状態になっております。
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;巻き込まれた………&lt;/p&gt;

&lt;p&gt;起きてからずっと落ちていて tiarra は死んでるわ IRC bot は死んでるわ
サイトは落ちてるわで生活に結構影響を与えてくれた。&lt;/p&gt;

&lt;p&gt;今はなんか安定してる感じがする。よかった。&lt;/p&gt;

&lt;p&gt;とりあえず長期的に落ちそうだったから手元にあった
&lt;a href="http://rackhub.net/"&gt;rackhub&lt;/a&gt; に nginx を入れてお知らせページを表示
させたりするようにしたりした。&lt;/p&gt;

&lt;p&gt;Rackhub, いいけど環境整備されすぎてわかりにくい感じがした。
ドキュメント見ないといけないのならけっきょく自分で環境構築するのと
コストそんなに変わらないしメリット相殺されるんじゃない? &lt;code&gt;/rhb/etc&lt;/code&gt; とか
わかんないし!&lt;/p&gt;

&lt;p&gt;それはそうと、まあさくらのクラウド様お疲れ様です頑張ってください。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/103</id><published>2012-03-14T12:39:29+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/14/rails-strong-parameter"/><title>rails/strong_parameter</title><content type="html">&lt;p&gt;&lt;a href="https://github.com/rails/strong_parameters"&gt;https://github.com/rails/strong_parameters&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Action Controller parameter attributes are now tainted by default and Active Model has been extended to check for tainted on mass assignment. This means you’ll have to make a conscious choice about which attributes to allow for mass updating and this prevent accidentally exposing that which shouldn’t be exposed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;先日の &lt;a href="http://blog.sorah.jp/2012/03/05/mass-assignment-vulnerability-in-github"&gt;mass assignment 脆弱性の件&lt;/a&gt; への対応策と見られるレポジトリが github の rails organization に push されたようです。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;params&lt;/code&gt; を保護する方向らしい。この方がコントローラ毎に設定できて確かに良いなあ。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;params.required[:person].permit(:name, :age)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;params に &lt;code&gt;:person&lt;/code&gt; パラメータを必須としてそこの中で &lt;code&gt;:name&lt;/code&gt;, &lt;code&gt;:age&lt;/code&gt; パラメータも安全とするという感じなのかな。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rails/strong_parameters/blob/master/lib/action_controller/parameters.rb"&gt;https://github.com/rails/strong_parameters/blob/master/lib/action_controller/parameters.rb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;主な実装はこの辺だな。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/102</id><published>2012-03-13T11:26:49+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/13/ossaward7th"/><title>日本 OSS 奨励賞を受賞しました</title><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ossforum.jp/ossaward7th2"&gt;「第7回 日本OSS貢献者賞・日本OSS奨励賞」受賞者を選定&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;日本 OSS 奨励賞を自分個人と &lt;a href="http://sinsai.info/"&gt;sinsai.info&lt;/a&gt; のボランティアとして実質両方で受賞しました。はたして自分が受賞してしまっていいんだろうか。&lt;/p&gt;

&lt;p&gt;さてそれ関係で &lt;a href="http://www.ospn.jp/osc2012-spring/"&gt;オープンソースカンファレンス2012 Tokyo/Spring&lt;/a&gt; 1 日目の懇親会で授賞式に出席する他 LT をする事になっています。&lt;/p&gt;

&lt;p&gt;(LT の持ち時間は5分程度らしいので頑張ってスライドを書きます)&lt;/p&gt;

&lt;p&gt;あ、&lt;a href="https://twitter.com/hiromu1996"&gt;hiromu&lt;/a&gt;, 日本 Ruby の会様: おめでとうございます。&lt;/p&gt;

&lt;h2&gt;追記&lt;/h2&gt;

&lt;blockquote class="twitter-tweet tw-align-center"&gt;&lt;p&gt;&lt;a href="http://t.co/5KS7ObWM" title="http://www.ossforum.jp/ossaward7th2"&gt;ossforum.jp/ossaward7th2&lt;/a&gt;矢倉君には「若年層開発者の模範となる活動を行っている」とあり，そらには何も無いので，つまり（略）&lt;/p&gt;&amp;mdash; _ko1 (@_ko1) &lt;a href="https://twitter.com/_ko1/status/179420283181076480" data-datetime="2012-03-13T04:15:03+00:00"&gt;March 13, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;ul&gt;
&lt;li&gt;そもそも模範にしてくれる人が身近に居ない (ひろむは &lt;a href="http://www.npca.jp/"&gt;NPCA&lt;/a&gt; があるけど)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://twitter.com/#!/hiromu1996/status/179421718983614465"&gt;彼の生活リズムのておくれ感&lt;/a&gt;は模範になるのか&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自分の生活リズムもびみょーだし人のこと言えない&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ひろむこわい&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/101</id><published>2012-03-12T20:10:30+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/12/graduated-2012"/><title>卒業</title><content type="html">&lt;p&gt;実は本日卒業式だったらしいです (出席はしてない)。&lt;/p&gt;

&lt;p&gt;中学生という肩書きでもなし価値が半減しますが今後ともよろしくお願いします。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/100</id><published>2012-03-05T09:35:58+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/05/mass-assignment-vulnerability-in-github"/><title>github の mass assignment 脆弱性が突かれた件</title><content type="html">&lt;blockquote class="twitter-tweet tw-align-center"&gt;&lt;p&gt;Github に脆弱性。やった人は Rails に有りがちな脆弱性を issue に挙げていたが相手にされず、実際にそれを突いてきた。一見 childish だが、それだけ簡単に脆弱な実装がなされてしまうということだ。週明けの今日、Rubyist はまず関連情報に一読を。&lt;/p&gt;&amp;mdash; Yuki Nishijima (@yuki24) &lt;a href="https://twitter.com/yuki24/status/176432659319365632" data-datetime="2012-03-04T22:23:18+00:00"&gt;March 4, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;気になって調べたのでメモ。自分も気をつけないとなー。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation"&gt;Public Key Security Vulnerability and Mitigation&lt;/a&gt; - github.com/blog/&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;github に脆弱性があってそれが突かれたらしい。
Rails アプリにありがちな脆弱性の一つ、Mass assignment とかいうタイプの脆弱性である。&lt;/p&gt;

&lt;h2&gt;mass assignment 脆弱性とは&lt;/h2&gt;

&lt;p&gt;mass assignment 脆弱性とは何か、というのは以下の記事が詳しい:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://enlightsolutions.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1"&gt;What&amp;#39;s New in Edge: Scoped Mass Assignment in Rails 3.1 - Rails Web Development in Boston, MA Enlight Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rails 3.1 の新機能解説の記事だが、機能拡張の解説であって &lt;code&gt;attr_accessible&lt;/code&gt; などは 3.1 より前からある。
要するに、モデルのメソッド &lt;code&gt;update_attributes&lt;/code&gt; や &lt;code&gt;new&lt;/code&gt; に &lt;code&gt;Hash&lt;/code&gt; でデータを渡した時 &lt;code&gt;attr_accessible&lt;/code&gt; (&lt;code&gt;attr_protected&lt;/code&gt;) で指定した
カラムについては無視されるようにするという機能である。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;update_attributes&lt;/code&gt; とは: ActiveRecord のモデルで、カラム名がキーとなった &lt;code&gt;Hash&lt;/code&gt; を渡す事でデータを更新できるメソッド。&lt;code&gt;foo.update_attributes(:title =&amp;gt; &amp;quot;New Title&amp;quot;)&lt;/code&gt; のように使います。
scaffold で生成されたコントローラの update アクションなどで使われていて、scaffold では &lt;code&gt;update_attributes(params[:foo])&lt;/code&gt; のようにパラメータが直接渡されています。&lt;/p&gt;

&lt;p&gt;そして、&lt;code&gt;update_attributes&lt;/code&gt; に HTTP のパラメータ &lt;code&gt;params&lt;/code&gt; (Hash) を特にチェックせず直接渡して、
その &lt;code&gt;params&lt;/code&gt; に本来更新されるべきではないカラムのパラメータが含まれていても更新されないようにするために &lt;code&gt;attr_accessible&lt;/code&gt;, &lt;code&gt;attr_protected&lt;/code&gt; をモデルで定義しておく事によって、&lt;code&gt;update_attributes&lt;/code&gt;   等のメソッドにパラメータを渡しても、&lt;code&gt;attr_accessible&lt;/code&gt; (&lt;code&gt;attr_protected&lt;/code&gt;) で保護指定したカラムについては渡した &lt;code&gt;Hash&lt;/code&gt; で指定されていても無視されるようになります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible"&gt;attr_accessible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_protected"&gt;attr_protected&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上記のこの記事での例を引用すると、&lt;/p&gt;

&lt;script src="https://gist.github.com/974447.js?file=user_attr_accessible.rb"&gt;&lt;/script&gt;

&lt;p&gt;&lt;code&gt;attr_accessible :name&lt;/code&gt; とした事によって, ホワイトリスト方式で &lt;code&gt;:name&lt;/code&gt; カラム以外は無視されるようになるため、
&lt;code&gt;User.new&lt;/code&gt; で &lt;code&gt;:group_id&lt;/code&gt; を指定していてもそれは無視されている事がわかるかと思います。&lt;/p&gt;

&lt;p&gt;さて、この機能を使っておらず保護されていないカラムがあると何故脆弱性になるかはもう分かると思いますが、&lt;/p&gt;

&lt;p&gt;たとえば実際にこのモデルを用いた Web アプリケーションがある時に、Web のインターフェースでは更新時に
&lt;code&gt;update_attributes&lt;/code&gt; を特にパラメータをチェックせず直接 &lt;code&gt;params&lt;/code&gt; を渡していて、
ユーザー (Web インターフェース) からは &lt;code&gt;group_id&lt;/code&gt; を変更できないという事にします。&lt;/p&gt;

&lt;p&gt;すると、 &lt;strong&gt;もし &lt;code&gt;attr_accessible :name&lt;/code&gt; が無い場合&lt;/strong&gt; 、Web インターフェースの &lt;code&gt;update_attributes&lt;/code&gt; を呼んでいる所が、
Web インターフェースでは更新できるべきではない &lt;code&gt;group_id&lt;/code&gt; を含んだパラメータを受け取ると &lt;strong&gt;更新できるべきではない &lt;code&gt;group_id&lt;/code&gt; が更新できてしまいます。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;しかし &lt;code&gt;attr_accessible :name&lt;/code&gt; がある事によって、&lt;code&gt;update_attributes&lt;/code&gt; に &lt;code&gt;:group_id&lt;/code&gt; を含んだ Hash (パラメータ) が来ても無視されるので変更される事は無いのです。&lt;/p&gt;

&lt;p&gt;そのため、&lt;code&gt;attr_accessible&lt;/code&gt; で明示的に「変更可能なカラム」を指定しておくのは重要で、これを指定していない事によって 
&lt;strong&gt;更新されるべきではないカラムも更新することができる&lt;/strong&gt; 脆弱性が mass assignment 脆弱性です。&lt;/p&gt;

&lt;p&gt;しっかりホワイトリスト方式の &lt;code&gt;attr_accessible&lt;/code&gt; で指定する事が一番安全でしょう。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;update_attributes&lt;/code&gt; はいちいち &lt;code&gt;user.name = params[:user][:name]&lt;/code&gt; 等としなくても &lt;code&gt;Hash&lt;/code&gt; のキー・値でデータ (レコード)を更新できる
機能で便利なため、&lt;/p&gt;

&lt;p&gt;&lt;code&gt;update_attributes&lt;/code&gt; 以外にも &lt;code&gt;new&lt;/code&gt;, &lt;code&gt;create&lt;/code&gt; でもその保護は働くという事もあり、&lt;code&gt;attr_accessible&lt;/code&gt;, &lt;code&gt;attr_protected&lt;/code&gt; で保護するのが安全だと思います。&lt;/p&gt;

&lt;p&gt;これは ActiveRecord を使ったアプリケーション (大半の Rails アプリケーション) は多く存在する可能性がありますが、
&lt;a href="http://twitter.com/#!/yuki24/status/176702281268477953"&gt;Mongoid でも同様の脆弱性が発生することがある&lt;/a&gt; そうです。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;重要:&lt;/strong&gt; これは &lt;strong&gt;Rails の脆弱性&lt;/strong&gt; ではなく &lt;strong&gt;Rails の問題&lt;/strong&gt; である。mass assignment 脆弱性に関しては Rails アプリケーション (もしくは ActiveRecord を使ったアプリケーション) において開発者が作りやすい脆弱性であるから。すぐ後述する &lt;a href="https://github.com/rails/rails/issues/5228#issuecomment-4311527"&gt;Issue #5228 についたコメント&lt;/a&gt; (2段落目) にも書いてある。__Rails の問題__ というのは、現在の scaffold generator や ActiveRecord がこの問題を発生させやすいため、Issue 5228 では発生しにくくなるような対策を検討している。&lt;/p&gt;

&lt;h2&gt;今回の発端&lt;/h2&gt;

&lt;p&gt;さて、そこでこの github/rails/rails に登録された issue を見てみよう。今回の問題の発端である。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rails/rails/issues/5228"&gt;Issue #5228: Mass assignment vulnerability - how to force dev. define attr_accesible? · rails/rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;この issue で問題に上げているのは、現在の Rails は、開発者が mass assignment 脆弱性を発生させやすい (&lt;code&gt;attr_accessible&lt;/code&gt; 等の存在とこのような脆弱性を知らないと)
ということ。&lt;/p&gt;

&lt;p&gt;そのため、&lt;code&gt;attr_accessible&lt;/code&gt; 等の指定を開発者に強制したりする等して、発生しにくくする案を探している。&lt;/p&gt;

&lt;p&gt;(その後、いくつかの案が複数人によって挙げられているが今の議論、何が提案されているかまではこの記事では取り扱わない為、 issue ページを参照してください (それを見て、コメントするのも良いでしょう))&lt;/p&gt;

&lt;p&gt;はじめは速攻で reject された。既にデフォルトで有効にする pull request があり (&lt;a href="https://github.com/rails/rails/pull/4062"&gt;Pull Request #4062&lt;/a&gt;) それが reject されているからだ。&lt;/p&gt;

&lt;p&gt;もちろん homakov さんは反論している。&lt;a href="https://github.com/rails/rails/issues/5228#issuecomment-4263355"&gt;「ホワイトリストを必須にするのではなく、たとえばデフォルトで foreign_key, primary_key をブラックリスト入りさせておくのはどうか」&lt;/a&gt; と。&lt;/p&gt;

&lt;p&gt;(メモ: 一度は reject されましたが、現在は議論が再開されています)&lt;/p&gt;

&lt;h3&gt;脆弱性の問題を例示&lt;/h3&gt;

&lt;p&gt;そして、reject が繰り返されるとこのような issue が open される:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rails/rails/issues/5239"&gt;Issue #5239: I&amp;#39;m Bender from Future. · rails/rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120305-gsr7k18p7g4cxsdk49sp1apkfa.png" alt="what?"&gt;&lt;/p&gt;

&lt;p&gt;作成日時を示す部分を見て欲しい。&amp;quot;in 1001 years&amp;quot; とある。未来ですね。おそらく github が抱えている mass assignment 脆弱性をつついたのだろう。GitHub を使って例示してしまった。&lt;/p&gt;

&lt;p&gt;たぶん &lt;code&gt;created_at&lt;/code&gt; 等をパラメータに含ませて自分の指定した値に &lt;code&gt;created_at&lt;/code&gt; を変更したのだろう。&lt;/p&gt;

&lt;p&gt;そして彼はさらに別の所にある脆弱性もつつく:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rails/rails/commit/b83965785db1eec019edf1fc272b1aa393e6dc57"&gt;wow how come I commit in master? O_o · b839657 · rails/rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120305-fgpjrpndxtrqkcnynb8ff3i3fu.png" alt="hacked"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation"&gt;一番最初に上げた github の blog の記事&lt;/a&gt;でメインに言及されている脆弱性がこれである。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At 8:49am Pacific Time this morning a GitHub user exploited a security vulnerability in the public key update form in order to add his public key to the rails organization. He was then able to push a new file to the project as a demonstration of this vulnerability.&lt;/p&gt;

&lt;p&gt;(日本語訳: 8:49am (Pacific Time) に GitHub ユーザーは SSH 公開鍵の更新フォームに存在する脆弱性を攻撃し、彼の公開鍵は rails organization に登録された。そして彼は rails/rails プロジェクトに新しいファイルをコミットする事ができた、この脆弱性のデモとして。)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;organization account も実は SSH 公開鍵を登録する事ができるので、たぶん SSH 公開鍵の更新のフォームで SSH 公開鍵のモデルにある &lt;code&gt;user_id&lt;/code&gt; といったカラムを推測してパラメータに含ませ、pubkey を update したのだろう。どうやって account 側の primary key を取得したんだろう?&lt;/p&gt;

&lt;p&gt;このように GitHub 等もうっかり mass assignment 脆弱性を抱えてしまう事から、デフォルトでいくつかの key をブラックリスト入りさせようと提案した訳である。まだこの issue は議論が続けられている: &lt;a href="https://github.com/rails/rails/issues/5228"&gt;Issue #5228: Mass assignment vulnerability - how to force dev. define attr_accesible? · rails/rails&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;どのようにしてこの脆弱性の発生を防ぐか。現状だとユーザーが &lt;code&gt;attr_accessible&lt;/code&gt; 等を手動で定義しないと、ユーザーがこの脆弱性の存在を知らない限り容易に発生させてしまうからね。rails だと。&lt;/p&gt;

&lt;h2&gt;GitHub のアクション&lt;/h2&gt;

&lt;p&gt;ちなみに今は解除されたが &lt;a href="https://github.com/homakov"&gt;彼の github アカウント&lt;/a&gt; は一時的に suspend された様である。何をしたかの調査、その間は害を及ぼした疑いがあるための suspend と見える。&lt;a href="https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation"&gt;最初のアナウンス&lt;/a&gt; では単に suspend したとしか書いてないから誤解が多かったんだなぁ。Github, もちろん当初から疑いが晴れたら解除するつもりだったんだよね?&lt;/p&gt;

&lt;p&gt;ちなみに誤解が多いと思われるのは &lt;a href="https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation"&gt;そのアナウンス&lt;/a&gt; についたコメントでは「suspend を解除してやるべき」との声が多く上がっていた。&lt;/p&gt;

&lt;p&gt;その suspend は実際に解除されたが、まぁ、解除すべきだよね。何か重大な損害を起こすような事はしてないものね。ただ、素直に報告せずに rails の所で実例を示してしまうというのはどうかと思うがw&lt;/p&gt;

&lt;h2&gt;まとめ&lt;/h2&gt;

&lt;blockquote class="twitter-tweet tw-align-center"&gt;&lt;p&gt;rails だと「気をつけましょう」になって、 php だと「これだから php は」になるっていう世にも恐ろしい何かを感じました！&lt;/p&gt;&amp;mdash; Keisuke SATO (@riaf) &lt;a href="https://twitter.com/riaf/status/176561294290321409" data-datetime="2012-03-05T06:54:27+00:00"&gt;March 5, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;これだから rails は(キリッ, はやくなんとかしろ(キリッ&lt;/p&gt;

&lt;p&gt;今後の動向が注目されますね。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記 8:&lt;/strong&gt; コントローラでみえる &lt;code&gt;params&lt;/code&gt; に保護機能 (&lt;code&gt;$SAFE&lt;/code&gt; な時の &lt;code&gt;taint&lt;/code&gt; 的な感じで) をつける方向というのが DHH の考える一応の対応策? 別記事に詳細を書いた: &lt;a href="http://blog.sorah.jp/2012/03/14/rails-strong-parameter"&gt;rails/strong_parameters&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;あわせてよみたい: &lt;a href="http://chrisacky.posterous.com/github-you-have-let-us-all-down"&gt;GitHub and Rails: You have let us all down. - Code Space&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;ところで、PHP は?&lt;/h3&gt;

&lt;p&gt;&amp;quot;&lt;a href="http://selfkleptomaniac.org/archives/2109"&gt;register_globals？そんなのデフォルトでオフですよ&lt;/a&gt;&amp;quot; という記事より。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;何年も前に指摘されていた脆弱性に今頃慌てふためいている愚かでコンピュータサイエンスを学ぶには無能すぎてRailsくらいしか使えないくせにPHPerだなんだと他人の�尻馬に乗って調子こいてたボケナス共は、土下座してmodelの修正に取りかかるがよい。わっはっは。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;だそうです。&lt;/p&gt;

&lt;p&gt;「&lt;a href="http://php.net/manual/ja/security.globals.php"&gt;PHP: グローバル変数の登録機能の使用法 - Manual&lt;/a&gt;」… これはひどい。&lt;/p&gt;

&lt;p&gt;あと、PHP の Web フレームワークの一つ Symfony にも似たような問題があるっぽい: &lt;a href="http://symfony.com/blog/security-must-be-taken-seriously"&gt;Security must be taken seriously - Symfony&lt;/a&gt; (はてブコメントより)&lt;/p&gt;

&lt;h2&gt;はてブコメントを見て思ったこと&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;attr_accessible&lt;/code&gt; はバリデータの一種なのかなぁ。&lt;/li&gt;
&lt;li&gt;自動生成で中身を把握してないというのも問題だが、これは自動生成じゃなくても &lt;code&gt;update_attributes&lt;/code&gt; とか普通に使うメソッドだし自動生成関係無くないかなあ。自分は今回この記事で自動生成 (=scaffold) を取り上げたけど。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;追記メモ&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;追記:&lt;/strong&gt; suspend は解除されていたようだ (実害を及ぼしたかどうかの疑惑が解けたから?) &lt;a href="https://github.com/blog/1069-responsible-disclosure-policy"&gt;https://github.com/blog/1069-responsible-disclosure-policy&lt;/a&gt; ので、文章を一部修正&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記2:&lt;/strong&gt; これは Rails の脆弱性と言うよりは Rails の問題点である事を追記。 (重要: 〜 の段落を追加)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記3:&lt;/strong&gt; セクションごとに見出しをつけました&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記4:&lt;/strong&gt; register_globals の事を言及&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記5:&lt;/strong&gt; 前提知識が必要だとの言葉を受けて若干追記。まだ分からない部分があれば twitter 等で指摘ください。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記6:&lt;/strong&gt; mass assignment 脆弱性の説明を大幅に書き換え。わかりやすくなったと思う。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記7:&lt;/strong&gt; PHP の Symfony にあった似たような脆弱性のつくりを紹介&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記8:&lt;/strong&gt; strong_parameters の事を追記&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/99</id><published>2012-03-04T15:56:53+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/04/windows8-cp-review"/><title>Windows 8 Consumer Preview 感想</title><content type="html">&lt;p&gt;Consumer Preview を KVM-QEMU と ideapad にいれてみてとりあえず感想を書いておく。
Twitter にも流したけどそれのまとめでもある。&lt;/p&gt;

&lt;h2&gt;よくない点&lt;/h2&gt;

&lt;h3&gt;諸々&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Account (sorah@… というアカウント) で最初にログインすると勝手にローカルなアカウントも作成されるわけだが、コマンドプロンプト開いたら &lt;code&gt;%USERPROFILE&lt;/code&gt; が &lt;code&gt;C:\Users\sor.000&lt;/code&gt; で吹いた。せめて &lt;code&gt;sorah&lt;/code&gt; にしろよ、と。 (もしくは指定できるようにしてほしい); Local Account で作っても後で Microsoft Account とヒモ付は可能なようなのでユーザー名指定したいならそれをオススメしておく。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Appearance 周りの UI デザイン&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;やっぱり Metro UI ダサいわ。まぁ、慣れなのかなって感じはするけど。&lt;/li&gt;
&lt;li&gt;ウィンドウの枠は割とダサい。これは割と慣れでしばらく使ってたら慣れてきた。&lt;/li&gt;
&lt;li&gt;ただ、全てにおいて Windows 7 で再評価できた点が見事にぶち壊されてる。せっかくセンス見直したのに………&lt;/li&gt;
&lt;li&gt;後述する左上と左下のホットコーナーにマウスをあてたとき余白が広すぎてマウスを少し戻してしまう。おかげでもう一度戻さないといけない。余白は無いか 2px 程度でいいよ。余白広すぎ。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;操作周りの UI デザイン&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;マウスでもタッチパネルでもどちらにせよ操作が非直感的すぎる。特にマウス。酷いぞ。左下、左上、右下、右上の画面4つの角をホットコーナーとしてメインの操作方法として採用したようだが、これはひどいとしか言えない。&lt;/li&gt;
&lt;li&gt;まず、ホットコーナーの当たり判定シビアすぎ。たぶん1pxくらいしかない。ギリギリまでマウスを持っていくの辛いんだよ。&lt;/li&gt;
&lt;li&gt;全てにおいて Metro UI もそれを後押ししているがポインティングデバイスだと移動距離が長すぎて辛い。&lt;/li&gt;
&lt;li&gt;おそらく製品版になるとチュートリアルはつくんだろうが (もちろんつけるよね???)、左下がスタートのホットコーナー、アプリ切り替えは左上、右上もしくは左下を触ることで設定やShareボタンなどへアクセスできるメニューが表示される、なんて直感で分かるわけが無い。&lt;/li&gt;
&lt;li&gt;ついでにいうとアプリ一覧出すのはアプリ切り替えの左上にマウスを持って行って、クリックした後すこしドラッグしてすぐに左側に持ってリリースすることで表示されるなんて説明されないと分からないだろ絶対。&lt;/li&gt;
&lt;li&gt;まだアプリケーションの終了は画面上から下に向けてドラッグとかのほうが分かりやすい。これもわかりにくいが。&lt;/li&gt;
&lt;li&gt;というわけで操作は全然直感的ではないのでココらへんは製品版出すまでに改善すべき点。タッチパネルでも分かりやすい直感的な操作方法だとは到底思えないね。どういうセンスしてるんだ。&lt;/li&gt;
&lt;li&gt;ちなみにチュートリアルがあればいいわけではなく、長いチュートリアルを用意しないと行けない時点でオワコンだろう、どう考えても。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;評価できる点&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Explorer のリボン UI. あれは割と良いと思う。現行の Explorer よりは好きだな。&lt;/li&gt;
&lt;li&gt;起動が速い。&lt;/li&gt;
&lt;li&gt;グラフィック周り軽い。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;まとめ&lt;/h2&gt;

&lt;p&gt;技術的には割と起動早かったりグラフィック周り軽くなってたりで評価点があるのにデザイン周りが完全に残念だよね。&lt;/p&gt;

&lt;p&gt;このままで行くとしたら残念ですね。もともと期待してはいなかったけど。&lt;/p&gt;

&lt;h2&gt;おまけ&lt;/h2&gt;

&lt;p&gt;ideapad S10-2 に頑張って USB メモリ作って入れたのに解像度足りずで Metro アプリは一切起動できなかった。残念…&lt;/p&gt;

&lt;h3&gt;OS X だけで Windows 8 のインストール用 USB メモリを作る&lt;/h3&gt;

&lt;p&gt;最近の Boot Camp Assistant って USB メモリ作れたんだね。モデル制限かかってるから Info.plist に手を入れたけど。&lt;/p&gt;

&lt;p&gt;モデル制限を取り外すのはここを参考にした: &lt;a href="http://firela.biz/post/17921008981/bootcamp-usb-mac-imac-mid"&gt;BootCamp: USBメモリブータブルなMacにする方法 私のiMacはmid... - Firela.bi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;順番重要だったらしい。末尾に挿入したらダメだった。&lt;/p&gt;

&lt;p&gt;時間はかかるが普通に Windows 8 でも USB メモリに焼けたよ。Mac 以外でも普通に起動したし。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/98</id><published>2012-03-04T15:49:19+09:00</published><updated>2013-01-04T05:07:50+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/04/does-spcamp-back-to-secucamp"/><title>セキュリティ＆プログラミングキャンプの方向転換について</title><content type="html">&lt;p&gt;&lt;strong&gt;セ&lt;/strong&gt;キュリティ＆&lt;strong&gt;プ&lt;/strong&gt;ログラミング&lt;strong&gt;キャン&lt;/strong&gt;プ、セプキャン。&lt;/p&gt;

&lt;p&gt;ちょっと話題になってから時間立っちゃったけど言及しておく:&lt;/p&gt;

&lt;p&gt;いろいろ twitter 等で嫌な噂は流れていたけど、ちょっと気になる公式発表があった。&lt;/p&gt;

&lt;p&gt;見るにほとんどのセキュリティ＆プログラミングキャンプ 2011 までの実行委員が居なくなってる感。&lt;/p&gt;

&lt;p&gt;この情報でも確定とは言えないけどおそらくプログラミングコースは無くなる、現行のセキュリティコースの構成も大幅に変わるかもなぁ。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ipa.go.jp/about/press/20120220.html"&gt;情報処理推進機構：プレス発表：記事：「セキュリティ・キャンプ実施協議会」の設立について&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ipa.go.jp/about/press/20120222.html"&gt;情報処理推進機構：プレス発表：記事：セキュリティ・キャンプ実施協議会の実施体制と事業計画について&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://www.ipa.go.jp/about/press/pdf/120220press2.pdf"&gt;セキュリティ・キャンプ実施協議会 設⽴趣意書 (PDF)&lt;/a&gt; によると、&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;2012 年度から上記のキャンプをセキュリティ⼈材育成にフォーカスすることとし&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;たぶん、セプキャンの「プ」が消えるのかな。これで。「プ」、つまりプログラミング関係のクラスがあっても
今までの言語組 (セプキャン2011までのプログラミングコースのプログラミング言語クラス) のような感じではないんだろうな。&lt;/p&gt;

&lt;p&gt;あと、セキュリティの方も今まで通りとは行かない気がする。どうなるんだろうなー。&lt;/p&gt;

&lt;p&gt;いつかチューター参加できたらいいな、と思ってたけどたぶんその夢(?)は早くも崩れることになりそう。&lt;/p&gt;

&lt;p&gt;おそらく、まぁたぶん最後の言語組に参加できてとても良かった。ありがとうございました。&lt;/p&gt;

&lt;p&gt;今年の言語組に参加したいと思っていた人は残念。続報を待たないとなんとも言えないが無い可能性高いかも…&lt;/p&gt;

&lt;p&gt;でも、セキュリティなクラスに参加する人は希望はまだあるから大丈夫だと思うよ。&lt;/p&gt;

&lt;p&gt;よくある教訓としてはいつか続いてる物に終わりは来る (特に IPA は役所だという事を考えるともっと) ので、参加できる環境にあるなら
なるべく早くこういう物には参加すべき。という事。例としては IPA の未踏&lt;strike&gt;ユース&lt;/strike&gt; とかもいつ終わるかわからないのでお早めに、という。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; 個人の見解・推測を大幅に含んでいます。まだ推測に過ぎないので今後の公式続報でこの記事中の内容は変わる可能性があります。&lt;/p&gt;
</content></entry><entry><id>tag:blog.sorah.jp,2005:Entry/97</id><published>2012-03-03T18:43:55+09:00</published><updated>2013-01-04T05:07:49+09:00</updated><link rel="alternate" type="text/html" href="http://blog.sorah.jp/2012/03/03/ctpc"/><title>CTPC (College of Technology Programming Contest) 参加記</title><content type="html">&lt;p&gt;高専生向け競技プログラミングコンテストらしい。 &lt;a href="http://koj.cms.am/contest/index.html"&gt;http://koj.cms.am/contest/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;起きたら twitter の TL で話題になっていたので寝起きで参加しました。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120303-gax8y397raadn343fkfxgnrnn7.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;結果: 400/1100点 (39/65位), 2 WA.&lt;/p&gt;

&lt;p&gt;といた順番は A→C→B→E.
A の後 B は一見難しそうに見えて C を解き、その後他の問題を物色して E を解き始めたのだけど、
途中これはグラフ理論とか使うのかなあ、と思って物色を再開した所、実は B が簡単だった事に気づいて
B を解き、時間が余った。E をもう一度見たら実は Time Limit 8 秒とか入力の制約を見るにシンプルな
探索でも通るだろうということで再度解き始めて、ギリギリで通した。&lt;/p&gt;

&lt;h2&gt;問題 A - Average&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.atcoder.jp/problem/detail/151"&gt;http://www.atcoder.jp/problem/detail/151&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;改行区切りで 4 つの数値が与えられるので、(それらの最高値+それらの合計)/5 を求め、60 以上であれば Yes, 60 未満であれば No を表示すれば良い。&lt;/p&gt;

&lt;p&gt;Codeforces とかだと YES, NO (全て大文字) なのでそこで引っかかってる人が多かったイメージ。&lt;/p&gt;

&lt;h3&gt;コード&lt;/h3&gt;

&lt;script src="https://gist.github.com/1964943.js?file=a.cpp"&gt;&lt;/script&gt;

&lt;p&gt;きたないですね。&lt;/p&gt;

&lt;h2&gt;問題 B - Macaron&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.atcoder.jp/problem/detail/152"&gt;http://www.atcoder.jp/problem/detail/152&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;幅 &lt;code&gt;W&lt;/code&gt; 高さ &lt;code&gt;H&lt;/code&gt; の盤面 (自分は空白マスを &lt;code&gt;false&lt;/code&gt;, 壁マスを &lt;code&gt;true&lt;/code&gt; とした) を用意、その後 &lt;code&gt;X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt;, &lt;code&gt;L&lt;/code&gt; の 3 つの数値がスタンプとして与えられるので、
座標 (&lt;code&gt;X&lt;/code&gt;,&lt;code&gt;Y&lt;/code&gt;) 中心に &lt;code&gt;L&lt;/code&gt; 間隔の正方形の形になるように盤面のマスを反転 (空白マスなら壁マスへ、壁マスなら空白マスへ) した。
自分は前述のように bool で管理したので &lt;code&gt;!&lt;/code&gt; つかって反転させるだけ。らくちん。&lt;/p&gt;

&lt;p&gt;正方形の作り方は、&lt;code&gt;n&lt;/code&gt; を任意の 1 以上の整数として、
頂点の座標は &lt;code&gt;X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt; に下の式から求められる数値を足したり引いたりすれば求められる。(コードでは 27 行目の変数 &lt;code&gt;s&lt;/code&gt; への代入)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;s = L + (L+1)(n-1)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;左上、右上、左下、右下の座標は以下のようになる:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;左上: &lt;code&gt;(X-s,Y-s)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;左下: &lt;code&gt;(X-s,Y+s)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;右上: &lt;code&gt;(X+s,Y-s)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;右下: &lt;code&gt;(X+s,Y+s)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;処理は &lt;code&gt;n&lt;/code&gt; を初期値 1 でループを回し、まず頂点を反転し頂点と頂点の間の線となるマスも反転、
一つの正方形の処理において反転させようとしたマスがすべて盤面の外ならループを打ち切り、
そのスタンプの適用を終了して次のスタンプの適用に入る。&lt;/p&gt;

&lt;p&gt;そして与えられたスタンプを全部適用したらおわり。それを整形して表示するだけ。&lt;/p&gt;

&lt;p&gt;もっと賢い方法あるのかなあ。&lt;/p&gt;

&lt;p&gt;日本語が書けないのでうまく解説できないな。しかし。&lt;/p&gt;

&lt;h3&gt;コード&lt;/h3&gt;

&lt;script src="https://gist.github.com/1964943.js?file=b.cpp"&gt;&lt;/script&gt;

&lt;h2&gt;問題 C - Communication Tool&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.atcoder.jp/problem/detail/153"&gt;http://www.atcoder.jp/problem/detail/153&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;n&lt;/code&gt; つの文字列が改行区切りで2行目以降に入力されてくる。&lt;/p&gt;

&lt;p&gt;それぞれの文字列は以下のルールに従ってカテゴリ分けできる。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;その文字列は 1 文字以上 140 文字以下であるなら &lt;strong&gt;Tw○tter からの情報&lt;/strong&gt; であり、また:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@&lt;/code&gt; で始まる文字列であるなら &lt;strong&gt;リプライ&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@&lt;/code&gt; で始まらない文字列である &lt;strong&gt;つぶやき&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;それ以外の文字列 (リプライでもつぶやきでもない) はすべて mix○ または gre○ からの情報となる。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;表示するものは &lt;strong&gt;つぶやき&lt;/strong&gt; と &lt;strong&gt;リプライ&lt;/strong&gt; の割合であるため、リプライでもつぶやきでもない文字列は無視して問題がない。
また文字列自体もどうでもよくただ個数だけ数えれば良い。&lt;/p&gt;

&lt;p&gt;割合については以下のように求めて (C++ なのでつぶやきとリプライを数えた変数を &lt;code&gt;double&lt;/code&gt; 型にしておく) 小数点以下を切り捨てたものを表示すれば良い (C++ だと普通に &lt;code&gt;int&lt;/code&gt; にキャストしてしまえば良い)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;つぶやき もしくは リプライ / (つぶやき+リプライ)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;しかし入力によっては &lt;strong&gt;つぶやきもリプライも存在しない&lt;/strong&gt; 事があるので、その場合は &amp;quot;NA&amp;quot; を割合の代わりに表示すれば良い。&lt;/p&gt;

&lt;p&gt;この問題で Wrong Answer を唯一 2 回も出してしまって、理由はそれぞれ以下。非常にクズであると思います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;NA を表示しなかった&lt;/li&gt;
&lt;li&gt;NA を表示する条件がどちらか片方が 0 以下だった (ひどい)。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;||&lt;/code&gt; から &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; に修正してやっと通った。&lt;/p&gt;

&lt;h3&gt;コード&lt;/h3&gt;

&lt;script src="https://gist.github.com/1964943.js?file=c.cpp"&gt;&lt;/script&gt;

&lt;h2&gt;問題 E - Airport&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.atcoder.jp/problem/detail/155"&gt;http://www.atcoder.jp/problem/detail/155&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;空港の名前と、空港同士の便 (出発地, 目的地) が与えられる。&lt;/p&gt;

&lt;p&gt;与えられた空港と便を見て、以下の条件に当てはまれば Yes, 当てはまらなければ No を表示しろという問題。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;すべての空港 &lt;code&gt;A&lt;/code&gt; において、他全ての空港 &lt;code&gt;B&lt;/code&gt; (&lt;code&gt;A != B&lt;/code&gt;) との間に、便 &lt;code&gt;A&lt;/code&gt; → &lt;code&gt;B&lt;/code&gt; もしくは &lt;code&gt;B&lt;/code&gt; → &lt;code&gt;A&lt;/code&gt; が存在する事&lt;/li&gt;
&lt;li&gt;任意の空港 &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt; (&lt;code&gt;A != B&lt;/code&gt;) の間に、便 &lt;code&gt;A&lt;/code&gt; → &lt;code&gt;B&lt;/code&gt; と &lt;code&gt;B&lt;/code&gt; → &lt;code&gt;A&lt;/code&gt; 両方が存在しない事&lt;/li&gt;
&lt;li&gt;すべての空港 &lt;code&gt;A&lt;/code&gt; は空港 &lt;code&gt;A&lt;/code&gt; から出発する任意の便に搭乗し、他の空港の便と乗継、最初に搭乗した空港 &lt;code&gt;A&lt;/code&gt; に戻ってくる事ができる事&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;最初 3 番目の条件をみて間違いなく自分のコードだと Time Limit Exceeded になってダメだろうと思ったがよく制約と time limit を見ると、
time limit は 8 秒だったり、空港は最大でも 17 個、つまり便は最大でも 272 個なので幅優先で挑戦してみた。&lt;/p&gt;

&lt;p&gt;(メモ化再帰の深さ優先探索とどっちが良いのかは知らない)&lt;/p&gt;

&lt;h3&gt;コード&lt;/h3&gt;

&lt;script src="https://gist.github.com/1964943.js?file=e.cpp"&gt;&lt;/script&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;map&lt;/code&gt; で空港名 (&lt;code&gt;string&lt;/code&gt;) をキーに &lt;code&gt;Flights*&lt;/code&gt; (実態は &lt;code&gt;vector&amp;lt;string&amp;gt;&lt;/code&gt;, 空港名を格納) を保管。空港毎にその空港からの便の行き先を列挙しておく。&lt;/li&gt;
&lt;li&gt;便を受け取って &lt;code&gt;Flight flights&lt;/code&gt; (&lt;code&gt;Flight&lt;/code&gt; は ↑の &lt;code&gt;map&amp;lt;string,Flights*&amp;gt;&lt;/code&gt;) に格納していく課程で、同じ空港同士で逆方向の便がみつかれば即座に No を表示して終了&lt;/li&gt;
&lt;li&gt;便を &lt;code&gt;Flight flights&lt;/code&gt; に保存したらとりあえず総当たりで 1 番目の条件に当てはまるか確かめ、当てはまらない物があったらその場で No を表示して終了。&lt;/li&gt;
&lt;li&gt;最後に全ての空港に対し &lt;code&gt;check_loop&lt;/code&gt; を呼び出して、3 番目の条件に当てはまるかを確かめる。一つでも当てはまらなければ No を表示して終了。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;check_loop&lt;/code&gt; は &lt;code&gt;queue&lt;/code&gt; 使った幅優先探索。&lt;/p&gt;

&lt;p&gt;あと、最初 &lt;code&gt;typedef vector&amp;lt;Flights*&amp;gt; Flights&lt;/code&gt; しようと思ったけどできないのね。残念。&lt;/p&gt;

&lt;h2&gt;反省&lt;/h2&gt;

&lt;p&gt;くだらない 2 WA は酷かった。
もうちょっと問題の難易度を推定して自分の実力で時間以内に解けるかどうかの判断を迅速に間違いなく下したいなあ。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/kyuridenamida"&gt;@kyuridenamida&lt;/a&gt; さん, &lt;a href="https://twitter.com/kagamiz"&gt;@kagamiz&lt;/a&gt; さんへ: 面白いコンテストをありがとう。次回はありますか?&lt;/p&gt;
</content></entry></feed>