<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
      <link rel="stylesheet" href="/sadayuki/pc.css">
    <link rel="stylesheet" href="<= path_to('/print.css') %>" media="print" />
    <title>Sadayuki は こんな人</title>
    <link rel="shortcut icon" href="/sadayuki/favicon.ico" type="image/vnd.microsoft.icon" />
    <link rel="icon" href="/sadayuki/favicon.ico" type="image/vnd.microsoft.icon" />
    <link rel="alternate" href="/sadayuki/feed.atom" type="application/atom+xml" title="AtomFeed" />

    <script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-2794003-11']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
    </script>
    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">
  {lang: 'ja'}
    </script>

  </head>
  <body>
    <div id="container">
      <h1 id="blog_title"><a href="/sadayuki/">Sadayuki は こんな人</a>
      <span class="rss"><a href="/sadayuki/feed.atom"><img src="/sadayuki/feed-icon-28x28.png" style="position: relative; top: 5px;"></a></span></h1>

      <form style="margin-left: 20px;" class="search"action="http://www.google.co.jp/cse" id="cse-search-box">
        <div>
          <input type="hidden" name="cx" value="partner-pub-2831599305523989:1049790011" />
          <input type="hidden" name="ie" value="UTF-8" />
          <input type="text" name="q" size="30" />
          <input type="submit" name="sa" value="&#x691c;&#x7d22;" />
        </div>
      </form>
      <script type="text/javascript" src="//www.google.co.jp/cse/brand?form=cse-search-box&amp;lang=ja"></script> 

      <nav class="paginate" style="margin: 0px 20px 0px 20px;">
      <a href="/sadayuki/text/index.html">Top</a>
      <a href="/sadayuki/text/page/1.html">1</a>
      <a href="/sadayuki/text/page/2.html">2</a>
      <a href="/sadayuki/text/page/3.html">3</a>
      <a href="/sadayuki/text/page/4.html">4</a>
      <a href="/sadayuki/text/page/5.html">5</a>
      <a href="/sadayuki/text/page/6.html">6</a>
      <a href="/sadayuki/text/page/7.html">7</a>
      <a href="/sadayuki/text/page/8.html">8</a>
      <a href="/sadayuki/text/page/9.html">9</a>
      <a href="/sadayuki/text/page/10.html">10</a>
      <a href="/sadayuki/text/page/11.html">11</a>
      <a href="/sadayuki/text/page/12.html">12</a>
      <a href="/sadayuki/text/page/13.html">13</a>
      <a href="/sadayuki/text/page/14.html">14</a>
      <a href="/sadayuki/text/page/15.html">15</a>
      <a href="/sadayuki/text/page/16.html">16</a>
      <a href="/sadayuki/text/page/17.html">17</a>
      <a href="/sadayuki/text/page/18.html">18</a>
      <a href="/sadayuki/text/page/19.html">19</a>
      <a href="/sadayuki/text/page/20.html">20</a>
      <a href="/sadayuki/text/page/21.html">21</a>
      <a href="/sadayuki/text/page/22.html">22</a>
      <a href="/sadayuki/text/page/23.html">23</a>
      <a href="/sadayuki/text/page/24.html">24</a>
      <a href="/sadayuki/text/page/25.html">25</a>
      <a href="/sadayuki/text/page/26.html">26</a>
      <a href="/sadayuki/text/page/27.html">27</a>
      <a href="/sadayuki/text/page/28.html">28</a>
      <a href="/sadayuki/text/page/29.html">29</a>
      <a href="/sadayuki/text/page/30.html">30</a>
      <a href="/sadayuki/text/page/31.html">31</a>
      <a href="/sadayuki/text/page/32.html">32</a>
      <a href="/sadayuki/text/page/33.html">33</a>
      <a href="/sadayuki/text/page/34.html">34</a>
      <a href="/sadayuki/text/page/35.html">35</a>
      <a href="/sadayuki/text/page/36.html">36</a>
      <a href="/sadayuki/text/page/37.html">37</a>
      <a href="/sadayuki/text/page/38.html">38</a>
      <a href="/sadayuki/text/page/39.html">39</a>
      <a href="/sadayuki/text/page/40.html">40</a>
      <a href="/sadayuki/text/page/41.html">41</a>
      <a href="/sadayuki/text/page/42.html">42</a>
      <a href="/sadayuki/text/page/43.html">43</a>
      <a href="/sadayuki/text/page/44.html">44</a>
      <a href="/sadayuki/text/page/45.html">45</a>
      <a href="/sadayuki/text/page/46.html">46</a>
      <a href="/sadayuki/text/page/47.html">47</a>
      <a href="/sadayuki/text/page/48.html">48</a>
      <a href="/sadayuki/text/page/49.html">49</a>
      <a href="/sadayuki/text/page/50.html">50</a>
      <a href="/sadayuki/text/page/51.html">51</a>
      <a href="/sadayuki/text/page/52.html">52</a>
      <a href="/sadayuki/text/page/53.html">53</a>
      <a href="/sadayuki/text/page/54.html">54</a>
      <a href="/sadayuki/text/page/55.html">55</a>
      <a href="/sadayuki/text/page/56.html">56</a>
      <a href="/sadayuki/text/page/57.html">57</a>
      <a href="/sadayuki/text/page/58.html">58</a>
      <a href="/sadayuki/text/page/59.html">59</a>
      <a href="/sadayuki/text/page/60.html">60</a>
      <a href="/sadayuki/text/page/61.html">61</a>
      <a href="/sadayuki/text/page/62.html">62</a>
      <a href="/sadayuki/text/page/63.html">63</a>
      <a href="/sadayuki/text/page/64.html">64</a>
      <a href="/sadayuki/text/page/65.html">65</a>
      <a href="/sadayuki/text/page/66.html">66</a>
      <a href="/sadayuki/text/page/67.html">67</a>
      <a href="/sadayuki/text/page/68.html">68</a>
      <a href="/sadayuki/text/page/69.html">69</a>
      <a href="/sadayuki/text/page/70.html">70</a>
      <a href="/sadayuki/text/page/71.html">71</a>
      <a href="/sadayuki/text/page/72.html">72</a>
      <a href="/sadayuki/text/page/73.html">73</a>
      <a href="/sadayuki/text/page/74.html">74</a>
      <a href="/sadayuki/text/page/75.html">75</a>
      <a href="/sadayuki/text/page/76.html">76</a>
      <a href="/sadayuki/text/page/77.html">77</a>
      <a href="/sadayuki/text/page/78.html">78</a>
      <a href="/sadayuki/text/page/79.html">79</a>
      <a href="/sadayuki/text/page/80.html">80</a>
      <a href="/sadayuki/text/page/81.html">81</a>
      <a href="/sadayuki/text/page/82.html">82</a>
      <a href="/sadayuki/text/page/83.html">83</a>
      <a href="/sadayuki/text/page/84.html">84</a>
      <a href="/sadayuki/text/page/85.html">85</a>
      <a href="/sadayuki/text/page/86.html">86</a>
      <a href="/sadayuki/text/page/87.html">87</a>
      <a href="/sadayuki/text/page/88.html">88</a>
      <a href="/sadayuki/text/page/89.html">89</a>
      <a href="/sadayuki/text/page/90.html">90</a>
      <a href="/sadayuki/text/page/91.html">91</a>
      <a href="/sadayuki/text/page/92.html">92</a>
      <a href="/sadayuki/text/page/93.html">93</a>
      <a href="/sadayuki/text/page/94.html">94</a>
      <a href="/sadayuki/text/page/95.html">95</a>
      <a href="/sadayuki/text/page/96.html">96</a>
      <a href="/sadayuki/text/page/97.html">97</a>
      <a href="/sadayuki/text/page/98.html">98</a>
      <a href="/sadayuki/text/page/99.html">99</a>
      <a href="/sadayuki/text/page/100.html">100</a>
      <a href="/sadayuki/text/page/101.html">101</a>
</nav>

<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/38617264074.html">Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ</a></h3>
  <a href="http://sadayuki.kurano.name/post/38617264074"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-12-23 19:09:56 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9-%7E%E3%80%8C%E6%96%B0%E3%81%97%E3%81%84%E3%80%8D%E3%82%92%E7%94%9F%E3%81%BF%E5%87%BA%E3%81%99%E3%81%9F%E3%82%81%E3%81%AE33%E3%81%AE%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4-Software-Design-plus/dp/4774154075%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774154075" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/51jdbeo%2BrmL.jpg" width="353" height="500"/></a> <br/><a href="http://www.amazon.co.jp/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9-%7E%E3%80%8C%E6%96%B0%E3%81%97%E3%81%84%E3%80%8D%E3%82%92%E7%94%9F%E3%81%BF%E5%87%BA%E3%81%99%E3%81%9F%E3%82%81%E3%81%AE33%E3%81%AE%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4-Software-Design-plus/dp/4774154075%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774154075" target="_blank">Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)</a> </div>

<p>客先での昼休みに細切れで読んでいたのでかなり時間が掛かってしまった。結構面白く読んだのだが、あまり目新しいことは無かった。次の二点が興味深かった。</p>

<ul><li>プレスリリースを出す</li>
<li>オレオレ CSS フレームワークを持つ</li>
</ul><p>自分で作っている Web サービスは、個人で使うためのツールであるため、あまり宣伝とか考えたことは無かった。なのでプレスリリースの出し方とか考えたことが無かった。仕事でもプレスリリースとは関係無いので気にしたことはなかったし。ちょっと調べてみたら、有料のサービスとかもある。まあ、宣伝だからね。</p>

<p>あと、オレオレ CSS フレームワークを持つというのは良い考えだと思った。自分の場合、いつも同じような CSS を使っているのだが、前のをコピーして修正ということをしていた。自前のフレームワークを持てば、そこから始めることが出来る。</p>

<p>あまり目新しいことは無いと書いたが、開発だけでなく、宣伝や運用まで書いてある本は無いように思う。自分で Web サービスを提供したいと思う人には、全体像を掴めるし、良い取っ掛かりになる。良い本でした。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/37543886639.html">Google Reader API で遊ぶ：その６</a></h3>
  <a href="http://sadayuki.kurano.name/post/37543886639"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-12-09 18:05:21 +0900</span></a>
  <div class="content">
    <p>今回は <a href="http://www.sinatrarb.com/intro-jp.html" target="_blank">Sinatra</a> で Web インターフェースを開発する。</p>

<pre><code># encoding: utf-8

require './reader.rb'
require 'sinatra/base'
require 'erubis'

class MyApp &lt; Sinatra::Base
  enable :inline_templates

  # 設定
  config = YAML.load_file('config.yaml')
  configure do
    set :username, config['rack']['username'] || 'admin'
    set :password, config['rack']['password'] || 'admin'
    set :n, config['rack']['n'] || 20
    set :r, Reader.new
  end

  # Basic 認証
  use Rack::Auth::Basic do |username, password|
    username == settings.username &amp;&amp; password == settings.password
  end

  # 一覧表示
  get '/' do
    r = settings.r
    items = r.items(settings.n)
    @items = items
    erb :index
  end

  # スターを付ける
  get '/starred/:switch/*' do
    r = settings.r
    case params[:switch]
    when 'true'
      r.starred(params[:splat][0])
    when 'false'
      r.unstarred(params[:splat][0])
    end
  end

  # 未読にする
  get '/unread/:switch/*' do
    r = settings.r
    case params[:switch]
    when 'true'
      r.unread(params[:splat][0])
    when 'false'
      r.read(params[:splat][0])
    end
  end

  # 既読にする
  get '/read/*' do
    r = settings.r
    r.read(params[:splat][0])
  end

end
</code></pre>

<p>かなり適当だが、まあ動くの良しとする。Google の ID とは別に、認証用の ID, パスワードを付けてる。伝送路を暗号化できないとちょっと心配なので。一覧表示（<code>get '/'</code>）以外は jQuery から Ajax で呼び出される。</p>

<p>次は <code>layout.erb</code> 。面倒なので <code>CSS</code> を分離していない。あとで落ち着いたら分けようと思う。<a href="http://jquery.com/" target="_blank">jQuery</a> は Google のを使わせてもらっている。</p>

<pre><code>&lt;!DOCTYPE html&gt;

&lt;html lang="ja"&gt;

  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;title&gt;My Google Reader&lt;/title&gt;
    &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"&gt;&lt;/script&gt;
    &lt;script src="/reader.js" type="text/javascript"&gt;&lt;/script&gt;
    &lt;style type="text/css"&gt;
      article.current  {background-color: Khaki;}
    &lt;/style&gt;
  &lt;/head&gt;

  &lt;body style="background-color: silver;"&gt;
    &lt;div style="width: 850px; margin-left: auto; margin-right: auto; background-color: white;"&gt;
    &lt;h1 style="padding: 20px 20px 0px 20px; margin: 5px 5px 0px 5px;"&gt;&lt;a style="text-decoration: none; color: dimgray;" href="/"&gt;My Google Reader&lt;/a&gt;&lt;/h1&gt;
    &lt;%= yield %&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>次が <code>index.erb</code> 。かなりロジックが入っている。「スター」と「未読のまま」のチェックボックスの設定を Sinatra に移そうかどうしようか悩んだのだが、見た目の設定なので View に残してある。ロジック自体ももう少し何とかしたいが、動くので良しとする。</p>

<pre><code>&lt;% @items.each_with_index do |item, index| %&gt;
  &lt;% rx_starred = Regexp.new(/state\/com\.google\/starred/) %&gt;
  &lt;% rx_unread = Regexp.new(/state\/com\.google\/kept-unread/) %&gt;
  &lt;% starred = '' %&gt;
  &lt;% unread = '' %&gt;
  &lt;% item['categories'].each do |tag| %&gt;
    &lt;% if rx_starred =~ tag %&gt;
      &lt;% starred = 'checked' %&gt;
    &lt;% end %&gt;
    &lt;% if rx_unread =~ tag %&gt;
      &lt;% unread = 'checked' %&gt;
    &lt;% end %&gt;
  &lt;% end %&gt;
  &lt;article id="&lt;%= item['id'] %&gt;" style="padding: 5px 20px 20px 20px;"&gt;
    &lt;header style="margin: 5px; padding: 10px; background-color: gray;"&gt;
</code></pre>

<h2 style="margin: 1px;">
            <a href="http://&lt;%=%20item%5B'alternate'%5D%5B0%5D%5B'href'%5D%20%&gt;" style="color: white;" target="_blank">
              
            </a>
          </h2>

<pre><code>     &lt;h4 style="margin: 1px 1px 1px 5px; color: white;"&gt;by &lt;%= item['author'] %&gt;, at &lt;%= Time.at(item['published']).to_s %&gt;&lt;/h4&gt;
    &lt;/header&gt;
    &lt;div class="content"&gt;
      &lt;% unless item['content'] == nil %&gt;
        &lt;p&gt;&lt;%= item['content']['content'] %&gt;&lt;/p&gt;
      &lt;% end %&gt;
      &lt;% unless item['summary'] == nil %&gt;
        &lt;p&gt;&lt;%= item['summary']['content'] %&gt;&lt;/p&gt;
      &lt;% end %&gt;
      &lt;hr /&gt;
      &lt;input type="checkbox" name="&lt;%= item['id'] %&gt;" value="starred" &lt;%= starred %&gt; /&gt;スターを付ける
      &lt;input type="checkbox" name="&lt;%= item['id'] %&gt;" value="unread" &lt;%= unread %&gt; /&gt;未読のままにする
    &lt;/div&gt;
  &lt;/article&gt;
&lt;% end %&gt;
&lt;footer style="padding: 20px;"&gt;
  &lt;hr /&gt;
  &lt;a href="/"&gt;次のページ&lt;/a&gt;
&lt;/footer&gt;
</code></pre>

<p>最後が Javascript 。これが一番長い。キーボードショートカットで操作したかったので時間が掛かって、しかも長くなてしまった。jQuery のプラグインを使うと簡単になるのかしれないが、Javascript で何かすることはこれまで無かったので良き知らないのだ。仕方が無いので自前で書いてみた。</p>

<pre><code>$(document).ready(function(){
  //最初の記事をカレントに
  $("article").first().addClass('current');

  //スターを付ける
  $("input[value='starred']").change(function(e) {
    $.get('/starred/' + e.target.checked + '/' + e.target.name);
  });

  //未読のままにする
  $("input[value='unread']").change(function(e) {
    $.get('/unread/' + e.target.checked + '/' + e.target.name);
  });

  //キーボードショートカットの定義
  $("body").keypress(function(e){
    //現在の記事と次の記事、前の記事を取得
    var current_article = $("article.current");
    var next_article = current_article.next();
    var previous_article = current_article.prev();

    //キーごとの処理            
    switch (e.which) {
      //次の記事へスクロール
      case 78:   //N
      case 110: //n
      case 74:   //J
      case 106: //j
        console.log("current_article.size: " + current_article.size());
        if ( current_article.size() == 0 ) {
          window.location.href = '/';
          break;
        }
        article_top = next_article.get(0).offsetTop;
        $('html,body').animate({ scrollTop: article_top }, 'fast');
        break;
      //前の記事へスクロール
      case 75:   //K
      case 107: //k
      case 80:   //p
      case 112: //P
        article_top = previous_article.get(0).offsetTop;
        $('html,body').animate({ scrollTop: article_top }, 'fast');        
        break;
      //元記事の照会
      case 86:   //V
      case 118: //v
        window.open(
          current_article.children('header').children('h2').children('a').attr('href')
        );
        break;
      //ページトップへ
      case 84:   //T
      case 116: //t
        $('html,body').animate({ scrollTop: 0 }, 'fast');        
        break;
      //最後の記事へ
      case 76:  //L
      case 108: //l
        article_top = $("article").last().get(0).offsetTop;
        $('html,body').animate({ scrollTop: article_top }, 'fast');        
        break;
      //ページボトムへ
      case 66:  //B
      case 98: //b
        last_article = $("article").last();
        article_top = last_article.get(0).offsetTop;
        article_bottom = article_top + last_article.get(0).offsetHeight;
        $('html,body').animate({ scrollTop: article_bottom }, 'fast');        
        break;
    }
  });

  //スクロールに伴う処理
  $(window).scroll(function () {
    //現在の画面表示位置を取得
    var window_top = $(window).scrollTop();
    var window_bottom = window_top + $(window).attr('innerHeight');

    //現在の記事をクリア
    $('article').removeClass('current')

    //記事ごとに判定
    $('article').each(function(i, e){
      var article_top = e.offsetTop;
      var article_bottom = article_top + e.offsetHeight;

      //記事の終了位置が画面の前
      if (article_bottom &lt; window_top) {
        //他の記事が表示中
      }
      //記事の開始位置が画面の後
      if (article_top &gt; window_bottom) {
        //ここまでは来ないはず
      }
      //記事の開始位置が画面の前で...
      if (article_top &lt; window_top) {
        //記事の終了位置が画面の中
        if (article_bottom &lt;= window_bottom) {
          //次の記事の開始が画面の中
        }
        //記事の終了位置が画面の後
        if (article_bottom &gt;= window_bottom) {
          $(e).addClass('current');
          $.get('/read/' + $(e).attr('id'));
          return false;
        }
      }
      //記事の開始位置が画面の中
      if (article_top &gt;= window_top) {
        $(e).addClass('current');
        $.get('/read/' + $(e).attr('id'));
        return false;
      }
    });
  });
});
</code></pre>

<p>Google Reader と同様に <code>n</code>, <code>j</code> で次の記事へ飛び、<code>p</code>, <code>k</code> で前の記事に戻る。スペースキーで記事を読み進める。<code>v</code> で元記事を開く。<code>s</code> でスターを付けるのを忘れている。後で付けよう。下まで読んだら自動で次を読み込むのもやりたかったのだが、今回は出来ていない。そのうち気が向いたら付けようと思う。</p>

<p>何でこんなことをやっているかというと、会社から Google の Web サービスが使えなくなってしまったからだ。Google Apps を使ってる部署があって、Apps 以外のアカウントが使えなくなってしまったのだ。<code>POST</code> を使う Web サービスも怪しいので、<code>GET</code> だけで Google Reader を使えるプロキシを作りたかったのだ。</p>

<p>取り敢えず目的は達っせたと思う。明日、会社からアクセスして見よう。</p>

<p>Javascript で何か作るのは初めてなので、色々なサイトにお世話になった。お世話になったサイトを挙げたい。ありがとうございました。</p>

<ul><li><a href="http://d.hatena.ne.jp/moto_maka/20110228/1298834219" target="_blank">[iPhone] 最近気になってきたjQueryについて色々調べてみました</a></li>
<li><a href="http://semooh.jp/jquery/" target="_blank">jQuery日本語リファレンス</a></li>
<li><a href="http://ascii.jp/elem/000/000/498/498710/" target="_blank">40分で覚える！jQuery速習講座</a></li>
<li><a href="http://kachibito.net/web-design/jquery-first-step.html#ex" target="_blank">jQuery事始め・コピペに頼らず、基礎知識を理解して実際に動かしてみる</a></li>
<li><a href="http://solidstate.jp/Others/keyboard/script_136.html" target="_blank">JQueryでショートカットを設定</a></li>
</ul>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/37454106855.html">Google Reader API で遊ぶ：その５</a></h3>
  <a href="http://sadayuki.kurano.name/post/37454106855"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-12-08 13:37:18 +0900</span></a>
  <div class="content">
    <p>大体わかってきたので、Ruby で書いてみることにした。</p>

<p>素の <a href="http://doc.ruby-lang.org/ja/1.9.3/library/net=2fhttp.html" target="_blank">Net::HTTP</a> でも良いのだが、簡単にいくために <a href="https://github.com/nahi/httpclient" target="_blank">httpclient</a> を使ってみる。これまでの調査をそのまま実装しているだけなので、工夫の余地は大いにあると思うが、動くからいいか、と思っている。</p>

<pre><code>class Reader

  # initialize
  def initialize
    @clnt = HTTPClient.new
    @config = YAML.load_file('config.yaml')
  end

  # Authentication
  # <a href="http://code.google.com/p/google-reader-api/wiki/Authentication" target="_blank">http://code.google.com/p/google-reader-api/wiki/Authentication</a>
  def auth
    return @auth if @auth
    uri = 'https://www.google.com/accounts/ClientLogin'
    body = {
      'accountType' =&gt; 'GOOGLE',
      'Email' =&gt; @config['email'],
      'Passwd' =&gt; @config['passwd'],
      'service' =&gt; 'reader'
    }
    res = @clnt.post(uri, body)
    md = res.body.match(/^SID=(.*)\nLSID=(.*)\nAuth=(.*)/)
    sid, lsid, auth = md[1], md[2], md[3]
    @auth = auth
  end

  # GET Items
  # <a href="http://code.google.com/p/google-reader-api/wiki/ApiStreamItemsContents" target="_blank">http://code.google.com/p/google-reader-api/wiki/ApiStreamItemsContents</a>
  def items(n=20)
    uri = 'http://www.google.com/reader/api/0/stream/contents/user/-/state/com.google/reading-list'
    query = {
      's' =&gt; 'user/-/state/com.google/reading-list',
      'xt' =&gt; 'user/-/state/com.google/read',
      'n' =&gt; n
    }
    auth = @auth || self.auth
    header = {"Authorization" =&gt; "GoogleLogin auth=#{auth}"}
    res = @clnt.get(uri, :query =&gt; query, :header =&gt; header)
    yaml = YAML.load res.body
    return yaml['items']
  end

  # GET ActionToken
  # <a href="http://code.google.com/p/google-reader-api/wiki/ActionToken" target="_blank">http://code.google.com/p/google-reader-api/wiki/ActionToken</a> 
  def token
    return @token if @token
    uri = 'http://www.google.com/reader/api/0/token'
    auth = @auth || self.auth
    header = {"Authorization" =&gt; "GoogleLogin auth=#{auth}"}
    res = @clnt.get(uri, :header =&gt; header)
    @token = res.body
  end

  # applied to read
  def read(id) 
    tag = 'user/-/state/com.google/kept-unread'
    self.edit_tag(id, tag, 'r')
    tag = 'user/-/state/com.google/read'
    self.edit_tag(id, tag, 'a')
  end

  # kept unread
  def unread(id) 
    tag = 'user/-/state/com.google/read'
    self.edit_tag(id, tag, 'r')
    tag = 'user/-/state/com.google/kept-unread'
    self.edit_tag(id, tag, 'a')
  end

  # applied to starred
  def starred(id) 
    tag = 'user/-/state/com.google/starred'
    self.edit_tag(id, tag, 'a')
  end

  # remove starred
  def unstarred(id) 
    tag = 'user/-/state/com.google/starred'
    self.edit_tag(id, tag, 'r')
  end

  # Add or remove tag to/from item
  # <a href="http://code.google.com/p/google-reader-api/wiki/ApiEditTags" target="_blank">http://code.google.com/p/google-reader-api/wiki/ApiEditTags</a>
  def edit_tag(id, tag, parameter='a') 
    uri = 'http://www.google.com/reader/api/0/edit-tag'
    auth = @auth || self.auth
    header = {"Authorization" =&gt; "GoogleLogin auth=#{auth}"}
    body = {
      'i' =&gt; id,
      parameter =&gt; tag,
      'T' =&gt; @token || self.token
    }
    res = @clnt.post(uri, :body =&gt; body, :header =&gt; header)
    unless res.body == 'OK'
      @token = nil
      self.token
    end
    res.status
  end

end
</code></pre>

<p><code>config.yaml</code> の内容は下記の通り、id とパスワードを設定する。</p>

<pre><code>email: 'xxxxxxxx@gmail.com'
passwd: 'xxxxxxxxx'
</code></pre>

<p>あとは <code>Reader</code> をインスタンス化して <code>items</code> を実行すると未読記事が取得できる。</p>

<pre><code>$ bundle exec irb
&gt; require './reader.rb'
&gt; r = Reader.new
&gt; items = r.items
&gt; items.count
 =&gt; 20
&gt; items[0]
 =&gt; {"crawlTimeMsec"=&gt;"1354939697297", "timestampUsec"=&gt;"1354939697297445", "id"=&gt;"tag:google.com,2005:reader/item/e0b3e6ae4e466f3e", "categories"=&gt;["user/09691029617997612992/state/com.google/reading-list", "user/09691029617997612992/state/com.google/fresh"], "title"=&gt;"Facebook、企業の宣伝投稿件数が250万件に", "published"=&gt;1354938120, "updated"=&gt;1354938120, "alternate"=&gt;[{"href"=&gt;"http://japan.cnet.com/news/business/35025481/?ref=rss", "type"=&gt;"text/html"}], "summary"=&gt;{"direction"=&gt;"ltr", "content"=&gt;"&lt;p&gt;Facebookは、Facebookページを持つ地域企業が1300万社に達し、その内の30万社が250万件以上の投稿を宣伝していたと発表した。&lt;br&gt;&lt;a href=\"http://japan.cnet.com/news/business/35025481/?ref=rss\"&gt;&lt;img src=\"http://japan.cnet.com/storage/2012/12/08/f86468c373aa698b5d69a2d3fc5b1745/Buy_Promoted_Post_from_Page_on_Mobile_184x138.png\"&gt;&lt;/a&gt;&lt;/p&gt;"}, "author"=&gt;"Donna Tam, （CNET News）, 翻訳校正：, 矢倉美登里, 吉武稔夫", "likingUsers"=&gt;[], "comments"=&gt;[], "annotations"=&gt;[], "origin"=&gt;{"streamId"=&gt;"feed/http://feed.japan.cnet.com/rss/index.rdf", "title"=&gt;"CNET Japan 最新情報　総合", "htmlUrl"=&gt;"http://japan.cnet.com"}}
</code></pre>

<p>といった感じ。</p>

<pre><code>&gt; r.starred(items[0]['id'])
 =&gt; 200 
&gt; r.read(items[0]['id'])
 =&gt; 200 
</code></pre>

<p>で「スターを付ける」と「既読にする」となる。<code>item</code> クラスを定義するとかの方がオブジェクト指向らしいかもしれないが、まあ、動くから良いと思う。</p>

<p>あとは、<a href="http://www.sinatrarb.com/" target="_blank">Sinatra</a> で Web インターフェースを書けば、直接 Google にアクセスしないで Google Reader が使える。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/37105211612.html">聖☆おにいさん 8</a></h3>
  <a href="http://sadayuki.kurano.name/post/37105211612"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-12-03 19:19:13 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E8%81%96%E2%98%86%E3%81%8A%E3%81%AB%E3%81%84%E3%81%95%E3%82%93-8-%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-KC-%E4%B8%AD%E6%9D%91/dp/4063871681%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4063871681" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/51VJHwCqM3L.jpg" width="352" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E8%81%96%E2%98%86%E3%81%8A%E3%81%AB%E3%81%84%E3%81%95%E3%82%93-8-%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-KC-%E4%B8%AD%E6%9D%91/dp/4063871681%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4063871681" target="_blank">聖☆おにいさん(8) (モーニング KC)</a> </div>

<p>ブランクが空いているのでちょっと心配だったが、心配ご無用であった。今回も涙が出るほど笑わせてもらった。今回一番笑わせてもらったのは <a href="http://ja.wikipedia.org/wiki/%E8%96%AC%E5%B8%AB%E5%A6%82%E6%9D%A5" target="_blank">薬師如来</a> さんの薬壺。冬場は欠かせませんね。</p>

<p>知らなかったのだが、アニメ映画化が決定したようだ。2013/05/10 公開だそうだ。<a href="http://www.saint023.com/" target="_blank">公式サイト</a> にもまだ情報が殆ど無い。どの辺が映画化されるのだろうか。楽しみであり、心配である。たぶん見には行かないと思う。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36998619194.html">Google Reader API で遊ぶ：その４</a></h3>
  <a href="http://sadayuki.kurano.name/post/36998619194"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-12-02 11:30:27 +0900</span></a>
  <div class="content">
    <p>既読のタグ（<code>user/-/state/com.google/read</code>）を付けられるようになったのだが、既読にしたつもりでも、次回の取得に含まれてしまう現象が発生した。こんな時は Google 先生に聞くのが早い。聞いてみると「<a href="http://zatti.blog81.fc2.com/blog-entry-22.html" target="_blank">【C#】Google Reader API で未読のアイテムを取得する方法</a>」が見つかる。</p>

<p>ちょっと使っている API が違うが、<code>xt</code> で既読タグ（<code>user/-/state/com.google/read</code>）を除外しろということらしい。イメージとしては下記のようになる。</p>

<pre><code>$ curl -H "Authorization:GoogleLogin auth=&lt;auth value&gt; \
 <a href="http://www.google.com/reader/api/0/stream/items/contents?s=user/-/state/com.google/reading-list&amp;n=9999&amp;xt=user/-/state/com.google/read" target="_blank">http://www.google.com/reader/api/0/stream/items/contents?s=user/-/state/com.google/reading-list&amp;n=9999&amp;xt=user/-/state/com.google/read</a>
</code></pre>

<p><code>s=user/-/state/com.google/reading-list</code> が「すべてのアイテム」のストリーム ID、<code>n=9999</code> で取得件数、<code>xt=user/-/state/com.google/read</code> で既読タグ（<code>user/-/state/com.google/read</code>）の除外を指定する。ただ、<code>xt</code> によるタグの除外が、<a href="http://code.google.com/p/google-reader-api/wiki/ApiStreamItemsContents" target="_blank">ApiStreamItemsContents</a> に記述がない。<a href="http://code.google.com/p/google-reader-api/wiki/ApiStreamItemsIds" target="_blank">ApiStreamItemsIds</a> にはあるのだが。動いているようなので良いとは思うが、この辺も公開出来ない原因なのかも。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36942241515.html">Google Reader API で遊ぶ：その３</a></h3>
  <a href="http://sadayuki.kurano.name/post/36942241515"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-12-01 18:33:00 +0900</span></a>
  <div class="content">
    <p>未読のコンテンツの取得が出来るようになったので、次に既読にする方法を調べる。</p>

<p><a href="http://code.google.com/p/google-reader-api/wiki/ApiEditTags" target="_blank">ApiEditTags</a> を読むと、ステータスの変更はタグを付けることで行うようだ。例として curl を使う場合は下記のように行う。</p>

<pre><code>$ curl -H "Authorization:GoogleLogin auth=&lt;auth value&gt; \
 -d a=user/-/state/com.google/read \
 -d T=&lt;action token&gt; \
 -d i=tag:google.com,2005:reader/item/f753375dd7568d29 \
 <a href="http://www.google.com/reader/api/0/edit-tag" target="_blank">http://www.google.com/reader/api/0/edit-tag</a>
</code></pre>

<p>タグの編集は <code><a href="http://www.google.com/reader/api/0/edit-tag" target="_blank">http://www.google.com/reader/api/0/edit-tag</a></code> に POST することで行う。<code>a</code> が付加するタグ。<code>r</code> は除去するタグ。<code>i</code> はタグを編集する対象のアイテム ID 。ID はコンテンツを取得すると含まれている。あと、<code>T</code> がアクショントークン。状態を変更する API を実行するには、事前に取得しておく必要がある。成功すると <code>OK</code> が帰ってくる。</p>

<p>アクショントークンの取得方法は <a href="http://code.google.com/p/google-reader-api/wiki/ActionToken" target="_blank">ActionToken</a> を参照する。<code><a href="http://www.google.com/reader/api/0/token" target="_blank">http://www.google.com/reader/api/0/token</a></code> を GET すれば良い。</p>

<pre><code>$ curl -H "Authorization:GoogleLogin auth=&lt;auth value&gt; \
 <a href="http://www.google.com/reader/api/0/token" target="_blank">http://www.google.com/reader/api/0/token</a>
</code></pre>

<p>BODY にアクショントークンが帰ってくる。</p>

<p>スターを付けるには <code>a=user/-/state/com.google/starred</code> だし、スターを外すには <code>r=user/-/state/com.google/starred</code> になる。未読のままにするには <code>a=user/-/state/com.google/kept-unread</code> 。既読にするのと関係が気になる。自由自在にステータス変更するには、ちょっと試行錯誤が必要かもしれない。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36664935949.html">カレチ 4</a></h3>
  <a href="http://sadayuki.kurano.name/post/36664935949"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-27 23:18:46 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E3%82%AB%E3%83%AC%E3%83%81-%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-KC-%E6%B1%A0%E7%94%B0-%E9%82%A6%E5%BD%A6/dp/4063871622%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4063871622" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/51EKW7kqOmL.jpg" width="352" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E3%82%AB%E3%83%AC%E3%83%81-%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-KC-%E6%B1%A0%E7%94%B0-%E9%82%A6%E5%BD%A6/dp/4063871622%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4063871622" target="_blank">カレチ(4) (モーニング KC)</a> </div>

<p><a href="http://www.amazon.co.jp/gp/product/4063870871/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=4063870871&amp;linkCode=as2&amp;tag=sadayukisdiar-22" target="_blank">3 巻</a> が出たのが今年の 2 月。<a href="http://www.amazon.co.jp/gp/product/4063729850/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=4063729850&amp;linkCode=as2&amp;tag=sadayukisdiar-22" target="_blank">2 巻</a> との差を考えると早く出たのかもしれないが、感覚的にはかなり長い間が空いている。まあ、出たのを喜ぶべきか。</p>

<p>本巻の舞台は、昭和 40 年代後半から 50 年代のはじめ。<a href="http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E5%9B%BD%E6%9C%89%E9%89%84%E9%81%93%E7%B5%8C%E5%96%B6%E5%86%8D%E5%BB%BA%E4%BF%83%E9%80%B2%E7%89%B9%E5%88%A5%E6%8E%AA%E7%BD%AE%E6%B3%95" target="_blank">国鉄再建法</a> が昭和 55 年。昭和 62 年の <a href="http://ja.wikipedia.org/wiki/%E5%9B%BD%E9%89%84%E5%88%86%E5%89%B2%E6%B0%91%E5%96%B6%E5%8C%96" target="_blank">国鉄分割民営化</a> へ向けて、国鉄は解体へ向かう。そんなリストラの季節の入口。そのためか、退職する人が多い巻であった。7 話収録中の 5 話がリストラ/退職関連。まあ、そのうちひとつは死亡退職だが。</p>

<p>帯によれば、「モーニング読者より熱狂的支持！」とのことなので、荻野カレチの退職まで連載してくれるのかしら。第 30 話では平成 24 年の荻野憲二君が登場する。何となく頑固オヤジという雰囲気で、苦労してそうな感じだった。リストラや労働争議に苦労する荻野カレチはあまり見たくないが、まあ、国鉄全体が苦労することになるので、必然的にそんな話になっちゃうんだろうなぁ。あ〜あ、身につまされる。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36506658433.html">Google Reader API で遊ぶ：その２</a></h3>
  <a href="http://sadayuki.kurano.name/post/36506658433"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-25 22:19:41 +0900</span></a>
  <div class="content">
    <blockquote>
  <p>あとは本文の取得と既読設定かしら。もう少し時間が掛かりそうだけど、何とかなりそうな予感がする。Ruby に辿り着けるかしら……</p>
</blockquote>

<p>と書いたが、本文の取得は簡単だった。</p>

<p><a href="http://code.google.com/p/google-reader-api/wiki/ApiStreamContents" target="_blank">ApiStreamContents</a> を見ると、コンテンツの取得の方法が載ってる。下記の URL を GET すれば良い。</p>

<pre><code><a href="http://www.google.com/reader/api/0/stream/contents/" target="_blank">http://www.google.com/reader/api/0/stream/contents/</a>&lt;escaped StreamId&gt;
</code></pre>

<p>ストリーム ID は、前回説明の通り。例えば、未読の取得をするには下記の URL になる。</p>

<pre><code><a href="http://www.google.com/reader/api/0/stream/contents/user/-/state/com.google/reading-list" target="_blank">http://www.google.com/reader/api/0/stream/contents/user/-/state/com.google/reading-list</a>
</code></pre>

<p>返ってくるのは JSON 。個々の記事の情報は、<code>items</code> の下に配列として格納されている。次のような項目がある。まあ、見れば大体見当が付くものが並んでいる。</p>

<ul><li>crawlTimeMsec</li>
<li>timestampUsec</li>
<li>id</li>
<li>categories</li>
<li>title</li>
<li>published</li>
<li>updated</li>
<li>alternate</li>
<li>content</li>
</ul><p>基本は <a href="http://ja.wikipedia.org/wiki/Atom" target="_blank">Atom</a> の属性なのかなと思う。なので、記事への URL は <code>alternate</code> の下に次のように格納されている。</p>

<pre><code>"alternate":[{"href":"http://kurano.jp/home/20121021/%e5%bf%8d%e5%9f%8e","type":"text/html"}]
</code></pre>

<p>あとは既読にしたり、スターを付けたりといった操作が残っている。これは、ちょっと面倒なようだ。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36501511536.html">Google Reader API で遊ぶ：その１</a></h3>
  <a href="http://sadayuki.kurano.name/post/36501511536"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-25 19:33:09 +0900</span></a>
  <div class="content">
    <p>訳あって、<a href="http://www.google.co.jp/reader/" target="_blank">Google Reader</a> の API を叩く Web アプリを作りたいと考えている。なぜか Google Reader API は正式公開されていないようだ。また、変更が割りと頻繁に入っているようだ。</p>

<p><a href="http://www.ruby-lang.org/ja/" target="_blank">Ruby</a> で使うことを考えているので、まずは良い Gem が無いかを探してみた。まず見つかったのが「<a href="http://dharry.hatenablog.com/entry/20100117/1263724784" target="_blank">ruby の googlereaderライブラリ で Google Reader API を使ってみた</a>」という記事。ちょっと前の記事なのだが、これで行けるといいなぁ、と思って試してみるとエラーが出る。依存するライブラリもちょっと古いようだ。</p>

<p>Ruby に拘ると見つからないようなので、Google Reader API そのものを調べてみることに。ちょっと調べてみたところ、「<a href="http://www.yoheim.net/blog.php?q=20120608" target="_blank">[GoogleReaderAPI] Google Reader APIを使ってみた（認証編）</a>」が良かった。やはり新しいのが良い。この記事からリンクされている「<a href="http://code.google.com/p/google-reader-api/wiki/Authentication" target="_blank">google-reader-api/Authentication</a>」が大変参考になった。</p>

<p><a href="http://ja.wikipedia.org/wiki/OAuth" target="_blank">OAuth</a> が推奨されているのだが、ClientLogin が分かりやすくて良い。<a href="http://ja.wikipedia.org/wiki/CURL" target="_blank">curl</a> で例示されているので、そのまま試せる。次のコマンドでトークンを取得する。</p>

<pre><code>$ curl -d accountType=GOOGLE \
  -d Email=username@gmail.com \
  -d Passwd=password \
  -d service=reader \
  <a href="https://www.google.com/accounts/ClientLogin" target="_blank">https://www.google.com/accounts/ClientLogin</a>
SID=&lt;SID value&gt; # ignored
LSID=&lt;LSID value&gt; # ignored
Auth=&lt;auth value&gt;
</code></pre>

<p><code><a href="https://www.google.com/accounts/ClientLogin" target="_blank">https://www.google.com/accounts/ClientLogin</a></code> という URL を POST で叩き、Email, Passwd, service を渡す。上で取得したトークンを使って下記を実行する。</p>

<pre><code>$ curl -H "Authorization:GoogleLogin auth=&lt;auth value&gt;" <a href="http://www.google.com/reader/api/0/user-info" target="_blank">http://www.google.com/reader/api/0/user-info</a>
{
  "userId":"123",
  "userName":"Name",
  "userProfileId":"123",
  "userEmail":"username@gmail.com",
  "isBloggerUser":true,
  "signupTimeSec":0,
  "publicUserName":"username"
}
</code></pre>

<p>トークンは、ヘッダで渡す。分かりやすい。「<a href="http://www.yoheim.net/blog.php?q=20120713" target="_blank">[GoogleReaderAPI] 購読リストを取得する</a>」「<a href="http://www.yoheim.net/blog.php?q=20120716" target="_blank">[GoogleReaderAPI] 未読件数を取得する</a>」によれば、次の URL を叩くと、購読リストや未読件数が取得できる。</p>

<ul><li>購読リスト： <a href="http://www.google.com/reader/api/0/subscription/list?output=xml" target="_blank">http://www.google.com/reader/api/0/subscription/list?output=xml</a></li>
<li>未読件数： <a href="http://www.google.com/reader/api/0/unread-count?output=xml&amp;all=true" target="_blank">http://www.google.com/reader/api/0/unread-count?output=xml&amp;all=true</a></li>
</ul><p>API 文書と組み合わせて考えると、下記の URL で 5 件の未読を取得できる。</p>

<pre><code><a href="http://www.google.com/reader/api/0/stream/items/ids?s=user/-/state/com.google/reading-list&amp;n=5" target="_blank">http://www.google.com/reader/api/0/stream/items/ids?s=user/-/state/com.google/reading-list&amp;n=5</a>
</code></pre>

<p>パラメタ <code>s</code> はストリーム ID を示し、次のようなものがある。詳細は <a href="http://code.google.com/p/google-reader-api/wiki/StreamId" target="_blank">StreamId</a> を参照。</p>

<ul><li>user/-/state/com.google/read: 既読</li>
<li>user/-/state/com.google/kept-unread: 未読のままにする</li>
<li>user/-/state/com.google/starred: スターを付ける</li>
<li>user/-/state/com.google/broadcast: 共有</li>
<li>user/-/state/com.google/like: ライク（あったっけ？）</li>
<li>user/-/state/com.google/reading-list: 未読</li>
</ul><p>パラメタ <code>n</code> は取得する件数。</p>

<pre><code>&lt;object&gt;
  &lt;list name="itemRefs"&gt;
    &lt;object&gt;
      &lt;number name="id"&gt;-625095047090107095&lt;/number&gt;
      &lt;list name="directStreamIds"/&gt;
      &lt;number name="timestampUsec"&gt;1353763645618140&lt;/number&gt;
    &lt;/object&gt;
    &lt;object&gt;
      &lt;number name="id"&gt;6612066419424172501&lt;/number&gt;
      &lt;list name="directStreamIds"/&gt;
      &lt;number name="timestampUsec"&gt;1353763645617940&lt;/number&gt;
    &lt;/object&gt;
    &lt;object&gt;
      &lt;number name="id"&gt;-7065336595352699667&lt;/number&gt;
      &lt;list name="directStreamIds"/&gt;
      &lt;number name="timestampUsec"&gt;1353763645617769&lt;/number&gt;
    &lt;/object&gt;
    &lt;object&gt;
      &lt;number name="id"&gt;18524796586183171&lt;/number&gt;
      &lt;list name="directStreamIds"/&gt;
      &lt;number name="timestampUsec"&gt;1353763645617596&lt;/number&gt;
    &lt;/object&gt;
    &lt;object&gt;
      &lt;number name="id"&gt;4341772746539120292&lt;/number&gt;
      &lt;list name="directStreamIds"/&gt;
      &lt;number name="timestampUsec"&gt;1353763645617431&lt;/number&gt;
    &lt;/object&gt;
  &lt;/list&gt;
&lt;/object&gt;
</code></pre>

<p>上記の XML 文書が取得される。詳細は <a href="http://code.google.com/p/google-reader-api/wiki/ApiStreamItemsIds" target="_blank">ApiStreamItemsIds</a> を参照。ただし、JSON が取得されると書いてあるが、XML が返ってきた。</p>

<p>あとは本文の取得と既読設定かしら。もう少し時間が掛かりそうだけど、何とかなりそうな予感がする。Ruby に辿り着けるかしら……</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36416258488.html">Ubuntu 12.04 LTS へアップグレード</a></h3>
  <a href="http://sadayuki.kurano.name/post/36416258488"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-24 16:59:21 +0900</span></a>
  <div class="content">
    <p>バックアップが出来たところで、アップグレードしてみることに。</p>

<pre><code>$ sudo do-release-upgrade
Checking for a new ubuntu release
Done Upgrade tool signature
Done Upgrade tool
Done downloading            
authenticate 'precise.tar.gz' against 'precise.tar.gz.gpg' 
extracting 'precise.tar.gz'

Reading cache

Checking package manager

Continue running under SSH? 

This session appears to be running under ssh. It is not recommended 
to perform a upgrade over ssh currently because in case of failure it 
is harder to recover. 

If you continue, an additional ssh daemon will be started at port 
'1022'. 
Do you want to continue? 

Continue [yN] 
</code></pre>

<p>実行してみると、上記がメッセージが出力される。ssh 経由でのアップグレードは何か起きるとリカバリ出来ないのでお勧めしないそうだ。仕方が無いのでコンソールから実行する。</p>

<p>コンフィグを変更したところはローカルをキープするようにしたのだが、<a href="http://ja.wikipedia.org/wiki/GRUB" target="_blank">GRUB</a> の設定だけ失敗したような気がした。タブキーが効かないので何もしないまま先に進んでしまったのだ。どうも GRUB2 になったのでインストールしないと起動に失敗するよ、と言われていたような気がするのだが……</p>

<p>仕方が無いのでリブートするよ、というプロンプトで止めておいて、ssh でログインしてみた。するとログインできたので、念のため <code>sudo update-grub</code> を実行。そしてリブート。</p>

<pre><code>Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-33-generic x86_64)

 * Documentation:  <a href="https://help.ubuntu.com/" target="_blank">https://help.ubuntu.com/</a>
</code></pre>

<p>無事、アップグレードには成功。次にサービスの稼働を確認。</p>

<ul><li>SSH&#160;: OK</li>
<li>MySQL&#160;: OK</li>
<li>PHP5-FPM&#160;: OK</li>
<li>nginx&#160;: OK</li>
<li>mongodb&#160;: OK</li>
<li>Unicorn&#160;: NG</li>
</ul><p><a href="https://github.com/blog/517-unicorn" target="_blank">Unicorn</a> が上手く稼働していない。エラーがあって起動と停止を繰り返している。コマンドラインから irb で動かしてみると、mongodb への接続が失敗しているようだ。<code>mongo</code> コマンドを使って接続してみると、次のようになる。</p>

<pre><code>$ mongo kurano.jp:27017
MongoDB shell version: 2.2.1
connecting to: kurano.jp:27017/test
Sat Nov 24 16:07:22 getaddrinfo("kurano.jp") failed: Temporary failure in name resolution
Sat Nov 24 16:07:22 Error: couldn't connect to server kurano.jp:27017 src/mongo/shell/mongo.js:93
exception: connect failed
</code></pre>

<p>名前解決がうまくいっていない。Google 先生に聞いてみると、「<a href="http://ur.edu-connect.net/archives/27792" target="_blank">Ubuntu 12.04 LTSへアップデート時，名前解決が失敗する</a>」というそのままな記事が見つかる。次のコマンドの実行が必要だそうだ。</p>

<pre><code>$ sudo cp /etc/resolvconf/resolv.conf.d/original /etc/resolvconf/resolv.conf.d/base
$ sudo resolvconf -u
</code></pre>

<p>実行すると名前解決が成功するようになる。</p>

<pre><code>$ dig kurano.jp

; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; kurano.jp
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 57660
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;kurano.jp.         IN  A

;; ANSWER SECTION:
kurano.jp.      120 IN  A   219.94.241.20

;; Query time: 22 msec
;; SERVER: 210.188.224.11#53(210.188.224.11)
;; WHEN: Sat Nov 24 16:32:40 2012
;; MSG SIZE  rcvd: 43
</code></pre>

<p>で、Unicorn も稼働するようになった。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36346313288.html">rsync でバックアップ</a></h3>
  <a href="http://sadayuki.kurano.name/post/36346313288"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-23 19:04:50 +0900</span></a>
  <div class="content">
    <p>最近サーバにログオンすると、下記メッセージが出るようになった。</p>

<pre><code>Welcome to the Ubuntu Server!
 * Documentation:  <a href="http://www.ubuntu.com/server/doc" target="_blank">http://www.ubuntu.com/server/doc</a>
New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.
</code></pre>

<p>今使っているのは 10.04 LTS なので、まだサポート期限が来るまで時間はある。が、アップグレードしようと考えた。<a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> の基礎は <a href="http://www.debian.org/" target="_blank">Debian</a> であり、Debian の売りはそのパッケージシステム。昔から稼働中のシステムをコマンドひとつでアップグレード出来るのが売りだった。だけど失敗することもある。なので、これまでバックアップしてなかったのだが、バックアップすることにした。OS X Mountain Lion だけどね。</p>

<p>そう幾つもサーバを持ってるわけでないので、ローカルに rsync でバックアップすることにした。こんなとき、ローカルが <a href="http://ja.wikipedia.org/wiki/UNIX" target="_blank">UNIX</a> で良かった。</p>

<p>個人ユーザの権限では触れないファイルもあるが、標準状態の Ubuntu では root でログオン出来ない。どうすれば良いかと思って Google 先生に聞いてみると、「<a href="http://mhag.hatenablog.com/entry/20080828/1219906967" target="_blank">root 権限の必要なディレクトリに対してrsync する</a>」という記事が見つかった。そのものズバリですね。ありがとうございます。内容の要約は下記の通り。</p>

<p>サーバ側に <code>/home/foo/rsync.sh</code> を置く。</p>

<pre><code>#!/bin/sh

/usr/bin/sudo /usr/bin/rsync $*
</code></pre>

<p>パスワード無しで sudo できるように <code>sudo visudo</code> する。</p>

<pre><code>foo ALL=(ALL) NOPASSWD: /usr/bin/rsync
</code></pre>

<p><code>--rsync-path="/home/foo/rsync.sh"</code> を付けて rsync を実行することにより、ホームディレクトリ下のスクリプトを実行する。その際、パスワードを聞かれないように <code>/etc/sudoers</code> を上記のように調整している。</p>

<p>素晴らしい。</p>

<p>取り敢えず、下記のディレクトリをバックアップすることにした。</p>

<pre><code>/etc
/home
/var/www
/var/webmin
/var/lib/mysql
/var/lib/mongodb
</code></pre>

<p>現在、<code>/home</code> のバックアップ中。長男の Web 公開用のディレクトリが重い。動画が沢山置いてある。100&#160;GB あるサーバのディスク容量のうち 27&#160;GB 使用中なのだが、システム以外の容量の殆はそれ。</p>

<pre><code>$ sudo du -sh hoge/
15G hoge/
</code></pre>

<p>15&#160;GB と出た。暫く掛かりそうだ。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/36138562958.html">日本アパッチ族</a></h3>
  <a href="http://sadayuki.kurano.name/post/36138562958"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-20 23:42:00 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E3%82%A2%E3%83%91%E3%83%83%E3%83%81%E6%97%8F-%E3%83%8F%E3%83%AB%E3%82%AD%E6%96%87%E5%BA%AB-%E5%B0%8F%E6%9D%BE-%E5%B7%A6%E4%BA%AC/dp/4758436908%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4758436908" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/61MBHiwxLPL.jpg" width="350" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E3%82%A2%E3%83%91%E3%83%83%E3%83%81%E6%97%8F-%E3%83%8F%E3%83%AB%E3%82%AD%E6%96%87%E5%BA%AB-%E5%B0%8F%E6%9D%BE-%E5%B7%A6%E4%BA%AC/dp/4758436908%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4758436908" target="_blank">日本アパッチ族 (ハルキ文庫)</a> </div>

<p>長らく新品が手に入らなかった作品が、ハルキ文庫から出るのを知ったのは昨日の新聞広告。で、通勤の途中の <a href="http://www.bookg.jp/store/ueno.html" target="_blank">本屋</a> で購入。本日の帰りの電車で読了。いつものように Amazon で注文しなかったのは、来るのを待てなかったからだ。実は本書は昔、角川文庫版を持っていた。友人に譲ったまま、買い直すつもりは無かったのだが、<a href="http://ja.wikipedia.org/wiki/%E5%B0%8F%E6%9D%BE%E5%B7%A6%E4%BA%AC" target="_blank">小松左京</a> の作品を今更出版するハルキ文庫に粋を感じて買ってしまった。</p>

<p>フィクションをリアルに書くには、嘘は少なくというセオリーがある。よく例に出るのは <a href="http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%8E%E3%83%95%E3%82%B9%E3%82%AD%E3%83%BC%E7%89%A9%E7%90%86%E5%AD%A6#.E3.83.9F.E3.83.8E.E3.83.95.E3.82.B9.E3.82.AD.E3.83.BC.E7.B2.92.E5.AD.90" target="_blank">ミノフスキー粒子</a> 。ミノフスキー粒子という都合の良い物質を仮定することで、よくある未来の世界が劇的に変わる。同じように、本書の場合は「アパッチ族」という食鉄人種を仮定することで、もうひとつの戦後ニッポンが破滅する物語がリアルになる。本書の日本は、実際の歴史とは異なる戦後史を歩んだ、もうひとつの有り得べき日本である。まかり間違えると、現代の日本も陥る可能性がある。そこに、あり得ない「アパッチ族」が加わる。</p>

<p>結局、日本は「アパッチ族」に滅ぼされる。まあ、このまま放っておくと、現代日本も鉄を食わない「アパッチ族」に滅ぼされるかもしれない。</p>

<p>話は変わるが、これを書き始めた時、本書を妻に見せた。すると、言ってくれれば私も持ってたのに、とのこと。昭和 59 年刊の角川文庫版だ。まあ、応援の意味もあるので結果オーライかな。でも、ちょっと勿体無かったという気持ちもある。妻の蔵書はカバーが掛かってるんで何だか分からないのが良くない。いつかカバーを外そう。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/35471010847.html">MacBook に Windows 8 をインストールしてみた</a></h3>
  <a href="http://sadayuki.kurano.name/post/35471010847"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-11-11 16:48:07 +0900</span></a>
  <div class="content">
    <p><a href="http://support.apple.com/kb/SP23?viewlocale=ja_JP" target="_blank">MacBook Late 2006 (MA701J/A)</a> にインストールしてある Windows 7 を、Windows 8 にアップグレードしてみた。期間限定でダウンロード版を 3,300 円で販売とのことなので、これはやってみないと、と思ったのだ。</p>

<p>結論から言えば、無事アップグレードして使えている。</p>

<p>Windows 7 で起動した状態から、<a href="http://windows.microsoft.com/ja-JP/windows/buy?ocid=GA8_O_WOL_DIS_ShopHP_FPP_Light" target="_blank">ダウンロードサイト</a> にアクセスし、アシスタントツールを実行すれば後は指示されるままに操作すれば良い。基本的には。</p>

<p>私の場合、次の点が問題になった。</p>

<ul><li>ディスク容量が小さい（64&#160;GB の SSD を OS X と分け合っている）</li>
<li><a href="http://windows.microsoft.com/ja-JP/windows-8/system-requirements" target="_blank">システム要件</a> を満たしているか不明</li>
</ul><p>ツールの診断結果によれば、次の項目を確認しろとのこと。</p>

<ul><li>プロセッサ: PAE、NX、SSE2 をサポートする 1&#160;GHz 以上のプロセッサ</li>
<li>ハード ディスクの空き領域: 16&#160;GB (32 ビット) または 20&#160;GB (64 ビット)</li>
<li>セキュア ブートには、UEFI v2.3.1 Errata B をサポートし、UEFI 署名データベースに Microsoft Windows 証明機関が含まれているファームウェアが必要です</li>
<li><a href="http://windows.microsoft.com/ja-JP/windows/security-essentials-download" target="_blank">Microsoft Security Essentials</a> はアンインストールしろ</li>
</ul><p>CPU は Core 2 Duo なので、機能的には満たしているはずなのだが、BIOS 設定を変更して使えるようにしろと言われても、BIOS は無いのだが。と、ちょっと途方にくれた。また、OS X は EFI でブートしているが、要件を満たしているかは良く分からない。</p>

<p>とは言っても、まあ、世の中に稼働報告が多く出ているので問題ないだろうと判断した。</p>

<p>問題はディスク容量。以前、Windows 環境のバックアップのために買った <a href="http://twocanoes.com/winclone/" target="_blank">Winclone</a> を使うことにした。</p>

<ol><li>Winclone でバックアップを取る</li>
<li>Boot Camp アシスタント でパーティションを「復元」し、BOOTCAMP パーティションを消す</li>
<li>Boot Camp アシスタント でパーティションを「分割」して、適当な容量のBOOTCAMP パーティションを作成する</li>
<li>Winclone でバックアップからリストアする</li>
</ol><p>思い切りが足りなくて二度作業を繰り返してしまった。最終的には、Mac OS X&#160;: 20&#160;GB 、BOOTCAMP&#160;: 40&#160;GB にした。双方のパーティションで空きが数 GB になってしまったので、何か対策を考える必要があると思う。</p>

<p>あと、アップグレードの前に、Boot Camp 3.3 の導入をしないでアップグレードしてしまったのだが、アップグレード後は 3.3 がインストール対象に出てこない。事前にインストールしてからアップグレードを実施すれば良かったのかも。</p>

<p>インストール自体はあまり手間なく実施できており、以前よりは良くなっていると思う。インストールの途中で Microsoft の ID 、HOTMAIL や Windows Live の ID 、を要求されるので、事前に準備しておくといいかも。私は Live の ID を使ってインストールした。その後のログオンでも同じ ID を要求される。統合されるのは良い点と悪い点があると思う。何か弊害が出なければ良いが。また、PayPal で支払が出来るのが画期的。これは良い試みだと思う。</p>

<p>Windows 8 の使い勝手自体は良いものだ。タッチパネルがあると良さそうに思うので、Windows 8 タブレットは結構期待が持てるかも。ただ、弾さんの <a href="http://blog.livedoor.jp/dankogai/archives/51832703.html" target="_blank">記事</a> にもあったが、デスクトップとの融合がこなれていない。Boot Camp を使う上でいうと、デスクトップからでないと Boot Camp にアクセスできない。このままでは企業がデスクトップを Windows 8 へアップグレードするのは無理なのではないかと思う。</p>

<p>Windows 8 の普及は、タブレットや電話から進むのでないかと思われる。自分で使おうとは思わないが、Windows Phone 8 のスマフォが出たら、誰かに使わせるのも良いかなと思ってる。メニュー画面のボタンが大きいのが魅力的だ。あとはアプリケーションの対応が進むか。Mac OS X の全画面表示対応も、Safari → Chrome → Firefox の順で進んだ。Firefox は全画面表示は対応したが、スクロールバーの対応はまだできていない。UI の変更は結構大変だ。Metro UI 上の IE 10 。どうやって前画面に戻れば良いのかちょっと悩んだ。分かれば、特にタブレットでは、使いやすいと思う。ただ、お作法の統一が必要だと思う。</p>

<p>Apple も Mac OS X を iOS へ近づけようとしているようだ。また、Mac の CPU も ARM ベースの自社 CPU にする方向のようだ。将来的には、コンシューマ向けのデスクトップは無くなるのだろうと思う。そんな流れの中の一里塚が Windows 8 なのだと思うと、なかなか感慨深いものがある。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/34023972906.html">忍城</a></h3>
  <a href="http://sadayuki.kurano.name/post/34023972906"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-10-21 21:57:23 +0900</span></a>
  <div class="content">
    <p>11月から <a href="http://nobou-movie.jp/" target="_blank">のぼうの城</a> が公開されるのを控え、<a href="http://ameblo.jp/oshijo-omotenashi/" target="_blank">忍城</a> の見学に行ってきた。</p>

<p><img src="http://distilleryimage5.s3.amazonaws.com/e865c54e1b3511e2b8e822000a1fbcc7_7.jpg" alt="忍城"/></p>

<p>正確に言うと、<a href="http://www.city.gyoda.lg.jp/kyoiku/iinkai/sisetu/hakubutukan.html" target="_blank">行田市郷土博物館</a> 。色々と行田の歴史を学習できる資料が揃っているいたのだが、まあ、お目当ては上の写真に写っている三階櫓。結構期待していたのだが、眺めが良くなかった。</p>

<p>あとひとつが <a href="http://ameblo.jp/oshijo-omotenashi/" target="_blank">忍城おもてなし甲冑隊</a> 。</p>

<p><img src="http://distilleryimage8.s3.amazonaws.com/be2aa8f01b3811e2b09522000a1f9363_7.jpg" alt="忍城おもてなし甲冑隊"/></p>

<p>短時間ではあったが、結構面白かった。</p>

<p>あと、予想外に良かったのが甲冑の体験着付け。まあ、甲冑を着付けと言って良いのか不明だが。</p>

<table style="width:auto;"><tr><td><a href="https://picasaweb.google.com/lh/photo/_29lg2r5xtg9VGUv2dnaagBUXBNxlQ5XlCeK9f7psjo?feat=embedwebsite" target="_blank"><img src="https://lh3.googleusercontent.com/-BgQFl3YgpXE/UIPsjYFa4hI/AAAAAAAAJxQ/2OjF4srYOHQ/s400/P1010225.JPG" height="225" width="400"/></a></td></tr><tr><td style="font-family:arial,sans-serif; font-size:11px; text-align:right">送信者 <a href="https://picasaweb.google.com/100811514909642921313/tcFnjD?authuser=0&amp;feat=embedwebsite" target="_blank">忍城</a></td></tr></table><p>三男は殊の外気に入ったようで、そのまま帰りたかったとのこと。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/33469451612.html">春霞ノ乱 : 居眠り磐音江戸双紙 40</a></h3>
  <a href="http://sadayuki.kurano.name/post/33469451612"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-10-13 11:30:40 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E6%98%A5%E9%9C%9E%E3%83%8E%E4%B9%B1-%E5%B1%85%E7%9C%A0%E3%82%8A%E7%A3%90%E9%9F%B3%E6%B1%9F%E6%88%B8%E5%8F%8C%E7%B4%99-40-%E5%8F%8C%E8%91%89%E6%96%87%E5%BA%AB-%E4%BD%90%E4%BC%AF-%E6%B3%B0%E8%8B%B1/dp/4575665835%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4575665835" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/51eUPfx4T7L.jpg" width="348" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E6%98%A5%E9%9C%9E%E3%83%8E%E4%B9%B1-%E5%B1%85%E7%9C%A0%E3%82%8A%E7%A3%90%E9%9F%B3%E6%B1%9F%E6%88%B8%E5%8F%8C%E7%B4%99-40-%E5%8F%8C%E8%91%89%E6%96%87%E5%BA%AB-%E4%BD%90%E4%BC%AF-%E6%B3%B0%E8%8B%B1/dp/4575665835%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4575665835" target="_blank">春霞ノ乱-居眠り磐音江戸双紙(40) (双葉文庫)</a> </div>

<p>本巻ではあまり進展なし。なんかミステリー仕立て。</p>

<p>磐音様の父母が関前藩より極秘に江戸へ出てくる。母は孫二人と嫁と江戸見物だが、父は何者かに攫われてしまう。磐音様と仲間たちが、攫われた父を探すとともに関前藩の危機を救う話だった。その父の行方を探すのがちょっとミステリーぽかった。探偵磐音、父を探す、といった雰囲気。</p>

<p>でもまあ、</p>

<blockquote>
  <p>「いや、二度寝いたす。邪魔をするでない」<br/>
  　と応じた正睦は、<br/>
  　そおっ<br/>
  　と小さな睦月の手に触れた。すると正睦の胸の中に蟠っていたもやもやが消えて、晴れやかな気分が広がっていった。</p>
</blockquote>

<p>ということで無事奪還。でも関前藩の問題はいまだ未解決ということで、次巻は解決編かしら。藩主実高様が出府するまでの三ヶ月で解決したいとのことなのでね。</p>

<p>正睦様ではないが、赤ん坊は可愛い。子供は既に三人いるので、今更子供を作ることはないだろう。なので次は孫かとも思うが、まだ長男が大学生なので暫く掛かるだろう。自分と同じ歳に子供が出来るとしてもあと8年もある。また、果たして孫が抱けるのかも定かでは無い。さて。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/32733976980.html"></a></h3>
  <a href="http://sadayuki.kurano.name/post/32733976980"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-10-02 22:29:19 +0900</span></a>
  <div class="content">
    <p><div> <a href="http://www.amazon.co.jp/%E3%83%90%E3%83%B3%E3%83%80%E3%82%A4-%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E8%B6%85%E5%90%88%E9%87%91-%E3%82%AC%E3%83%B3%E3%83%90%E3%82%B9%E3%82%BF%E3%83%BC/dp/B009HMK1NS%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB009HMK1NS" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/41fh7uIoVsL.jpg" width="319" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E3%83%90%E3%83%B3%E3%83%80%E3%82%A4-%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E8%B6%85%E5%90%88%E9%87%91-%E3%82%AC%E3%83%B3%E3%83%90%E3%82%B9%E3%82%BF%E3%83%BC/dp/B009HMK1NS%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB009HMK1NS" target="_blank">スーパーロボット超合金 ガンバスター</a> </div></p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/32667052122.html">天冥の標6 宿怨 PART 2</a></h3>
  <a href="http://sadayuki.kurano.name/post/32667052122"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-10-01 22:48:04 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E5%A4%A9%E5%86%A5%E3%81%AE%E6%A8%996-%E5%AE%BF%E6%80%A8-PART-%E5%B0%8F%E5%B7%9D-%E4%B8%80%E6%B0%B4/dp/4150310807%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4150310807" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/517h7O2Z0JL.jpg" width="337" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E5%A4%A9%E5%86%A5%E3%81%AE%E6%A8%996-%E5%AE%BF%E6%80%A8-PART-%E5%B0%8F%E5%B7%9D-%E4%B8%80%E6%B0%B4/dp/4150310807%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4150310807" target="_blank">天冥の標6 宿怨 PART 2</a> </div>

<p>やっと読み終わった。次の PART 3 が終わると、1巻に戻るのかしらね。</p>

<p>PART 1 で燻っていたプラクティスが、地球圏攻略をはじめる。カルミアンの科学技術の前に地球艦隊は壊滅。ニュージーランドは冥王斑に襲われる。ロイズの太陽系艦隊も歯が立たない。</p>

<p>オムニフロラはダダー以外の異星人の存在を知り、対抗のためドロテア・ワットを起動させる。</p>

<p>帯によれば、PART 3 は、</p>

<blockquote>
  <p>病んだ者も、姿なき者も、戦う者も、みなみな倒れてゆく。<br/>
  太陽系、応答なし。<br/>
  「なあ、誰も残っていないのか？」</p>
</blockquote>

<p>だそうだ。</p>

<p>ジニ号は出発するが、太陽圏は壊滅の方向のようだ。暗いなぁ。1巻はジニ号の中の話だと思うのだが、なぜ、太陽圏の諸勢力が乗ってるんだろう？ ダダーの策略かしらね。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/32326237230.html">テルマエ・ロマエ Ⅴ</a></h3>
  <a href="http://sadayuki.kurano.name/post/32326237230"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-09-26 22:28:34 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E3%83%86%E3%83%AB%E3%83%9E%E3%82%A8%E3%83%BB%E3%83%AD%E3%83%9E%E3%82%A8V-%E3%83%93%E3%83%BC%E3%83%A0%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9-%E3%83%A4%E3%83%9E%E3%82%B6%E3%82%AD%E3%83%9E%E3%83%AA/dp/4047282251%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4047282251" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/615kUJ6O0PL.jpg" width="352" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E3%83%86%E3%83%AB%E3%83%9E%E3%82%A8%E3%83%BB%E3%83%AD%E3%83%9E%E3%82%A8V-%E3%83%93%E3%83%BC%E3%83%A0%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9-%E3%83%A4%E3%83%9E%E3%82%B6%E3%82%AD%E3%83%9E%E3%83%AA/dp/4047282251%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4047282251" target="_blank">テルマエ・ロマエV (ビームコミックス)</a> </div>

<p>昨日、店頭で見かけたのだが、Amazon から到着したのは本日だった。本書のようにベストセラー間違い無しの本は、店頭で買うことにした方が良いのかもしれない。店頭で買えなそうなのは Amazon に頼むのが良いのは間違いないのだが。</p>

<p>で、5 巻。本巻はルシウスと さつき ちゃんのラブ・ストーリーだった。なんといっても恋する さつき ちゃんが可愛い。</p>

<p>さつき ちゃんの爺ちゃんが初登場なのだが、これがなんと <a href="http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%9F%E3%83%BC%E3%83%BB%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%B8%E3%83%A7%E3%83%BC%E3%83%B3%E3%82%BA" target="_blank">トミー・リー・ジョーンズ</a> 。作者の趣味のようだ。鍼灸師で強い。若い頃は鉄ちゃん松ちゃんコンビで鳴らしたようだ。これ、何が元ネタなんだろう？</p>

<p>クライマックスは <a href="http://ja.wikipedia.org/wiki/%E3%83%99%E3%83%B3%E3%83%BB%E3%83%8F%E3%83%BC_(1959%E5%B9%B4%E3%81%AE%E6%98%A0%E7%94%BB)" target="_blank">ベン・ハー</a> で有名な <a href="http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%83%AA%E3%82%AA%E3%83%83%E3%83%88" target="_blank">チャリオット</a> が出現。ハナコ と ヒデキ の 2 頭立ての なかよし号 。鞭を振るってベンツをお釈迦にする。ルシウスは何でもできるなぁ。</p>

<p>以前作者は <a href="http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AB%E3%83%9E%E3%82%A8%E3%83%BB%E3%83%AD%E3%83%9E%E3%82%A8#.E6.98.A0.E7.94.BB" target="_blank">映画</a> に言及し、上戸彩は さつき ではない、と言っていたが、映画版のストーリーに近づいているような雰囲気を感じる。さつき と鉄蔵はローマへ行くのではないだろうか。そしてルシウスと力を合わせてバイアエを再建し、<a href="http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%89%E3%83%AA%E3%82%A2%E3%83%8C%E3%82%B9" target="_blank">ハドリアヌス帝</a> がこの世を去る、と。</p>

<p>でもそうすると、さつき ちゃんはどっちに落ち着くのかしら？ 映画のようにルシウスが行ったり来たりでもいいけど、コメディになっちゃうよね。まあ、今でもコメディーだけど。</p>

<p>でもさ〜、「愛している…」といって消えるのは良くないでしょ。<a href="http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%B9F%E3%81%AE%E7%99%BB%E5%A0%B4%E4%BA%BA%E7%89%A9#.E4.B8.BB.E4.BA.BA.E5.85.AC.E3.83.BB.E3.83.92.E3.83.AD.E3.82.A4.E3.83.B3" target="_blank">アルト君</a> は帰ってこれないんだよ！</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/32260566620.html">宇宙戦艦ヤマト 2199 [1]</a></h3>
  <a href="http://sadayuki.kurano.name/post/32260566620"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-09-25 22:09:13 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/%E5%AE%87%E5%AE%99%E6%88%A6%E8%89%A6%E3%83%A4%E3%83%9E%E3%83%88-2199-1-DVD-%E5%87%BA%E6%B8%95%E8%A3%95/dp/B00799I56G%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00799I56G" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/51wmvhu-wjL.jpg" width="352" height="500"/></a> <br/><a href="http://www.amazon.co.jp/%E5%AE%87%E5%AE%99%E6%88%A6%E8%89%A6%E3%83%A4%E3%83%9E%E3%83%88-2199-1-DVD-%E5%87%BA%E6%B8%95%E8%A3%95/dp/B00799I56G%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00799I56G" target="_blank">宇宙戦艦ヤマト 2199 (1) [DVD]</a> </div>

<p>3 巻の予約が始まったのを機に 1 巻を買ってみた。出来に満足出来なかったとしても、冥王星会戦が手に入れば良いかと考えたのだ。子供たちも好きだし良いかというのもあった。で、結果だが、期待通り良い。</p>

<p>以下、気になったところ。（順不同）</p>

<ul><li>島大介 が軽い</li>
<li>女性のコスチュームがエロい（サーシャ含む）</li>
<li>真田さんが恐い</li>
<li>山本の妹が怪しい（隠れなくてもいいだろう）</li>
<li>森雪がメーテルのようだ（通信機のようなものに話をしている）</li>
</ul><p>2 話で 4,000 円は少々お高い。2 巻は 4 話入りで 5,000 円ほど。3 巻が出るともう少し安くなるだろうか。少し待ってみようと思う。オリジナルと同様の 26 話構成だとすると 7 巻組みである。果たして完結できるのだろうか。微力ではあるし、若干遅いかもしれないが、次も購入してみようと思っている。</p>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>
<div class="post">
  <h2 class="post_title"><a href="/sadayuki/text/id/32046721176.html">GREATEST HITS! OF TATSURO YAMASHITA</a></h3>
  <a href="http://sadayuki.kurano.name/post/32046721176"><span style="font-size: small;">Type: text</span> , 
  <span style="font-size: small;">Posted at: 2012-09-22 22:39:21 +0900</span></a>
  <div class="content">
    <div> <a href="http://www.amazon.co.jp/GREATEST-HITS-OF-TATSURO-YAMASHITA/dp/B00005EIDY%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00005EIDY" target="_blank"> <img src="http://ecx.images-amazon.com/images/I/41A1FRP38BL.jpg" width="300" height="300"/></a> <br/><a href="http://www.amazon.co.jp/GREATEST-HITS-OF-TATSURO-YAMASHITA/dp/B00005EIDY%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00005EIDY" target="_blank">GREATEST HITS! OF TATSURO YAMASHITA</a> </div>

<p>Amazon で購入。これでアルバムは全部揃った。ただし <a href="http://ja.wikipedia.org/wiki/%E3%83%8A%E3%82%A4%E3%82%A2%E3%82%AC%E3%83%A9%E3%83%BB%E3%83%AC%E3%83%BC%E3%83%99%E3%83%AB" target="_blank">NIAGARA</a> は除く。山下達郎の解説が良かった。</p>

<blockquote>
  <p>アナログって入って5曲でしょ？明確に記憶してるじゃないですか？「B面の2曲目のあの曲」と言った風に。LPっていうのは、すっごく理想的なメディアで、片面20分前後のプレイングタイムじゃないですか？それをひっくり返すという作業によって、精神的なリセットになる。片面4～5曲の中での起承転結、ドラマがある。だからレコードメディアってあれだけ大きくなれたんですよ。それをCDっていう一方通行のメディアにしちゃったので、構成美とかは望むべくもないですよ。だから割り切ってやるしかない。特にベストはね。<br/><a href="http://www.hmv.co.jp/news/article/1208200027/" target="_blank">【HMVインタビュー】 山下達郎 『OPUS ～ALL TIME BEST 1975-2012～』</a></p>
</blockquote>

<p>↑これを感じた。LP では「YOU EYES」で終わってるところへ「LOVE SPACE」「SPARKLE」「9 MINUTES OF TATSURO YAMASHITA」が BONUS TRACKS として追加されてるので通しで聞くと変な感じがする。<a href="http://www.amazon.co.jp/gp/product/B008ASJG4K/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=B008ASJG4K&amp;linkCode=as2&amp;tag=sadayukisdiar-22" target="_blank">OPUS</a> はその辺は工夫してるらしい。</p>

<blockquote>
  <p>基本的には時系列です。ただシングルコレクションで時系列だと、5曲くらいバラードが続く可能性もあるので、その辺はちょっと構成を変えましたけどね。<br/>
  あと、CDの最初と最後の曲は重要だと思ってて。1曲目がそれぞれ「DOWN TOWN」「悲しみのJODY」「ヘロン」、おしまいが「YOUR EYES」「おやすみ、ロージー」「希望という名の光」。このはさみ方はうまくいきましたね。<br/>
  あとは「エンドレス・ゲーム」みたいな曲を「アトムの子」の後ろにするとか、曲の緩急を付けるために入れ替えたり。前後してもせいぜい1～2年くらいかな。<br/>
  基本的にはベストですから時系列にならないとダメなんですよ。新旧絡めたベストもありますけど、僕はそういうの全然好きじゃない。ベストは入門用なのでキャリアがきちっと俯瞰出来る構成じゃないと。</p>
</blockquote>

<p>発売は 9/26 だそう。楽しみではあるがベストだしな〜と思っていたのだが、なんと <a href="http://ja.wikipedia.org/wiki/%E7%A1%9D%E5%AD%90%E3%81%AE%E5%B0%91%E5%B9%B4" target="_blank">硝子の少年</a> が収録されている。これだけでも買う価値があるかも。</p>

<iframe width="420" height="315" src="http://www.youtube.com/embed/6wBnu3YbMfo" frameborder="0" allowfullscreen></iframe>
  </div>
  <div style="padding: 2px 2px 2px 20px;">
    <g:plusone></g:plusone>
  </div>
</div>

<nav class="paginate" style="margin: 0px 20px 0px 20px;">
      <a href="/sadayuki/text/index.html">Top</a>
      <a href="/sadayuki/text/page/1.html">1</a>
      <a href="/sadayuki/text/page/2.html">2</a>
      <a href="/sadayuki/text/page/3.html">3</a>
      <a href="/sadayuki/text/page/4.html">4</a>
      <a href="/sadayuki/text/page/5.html">5</a>
      <a href="/sadayuki/text/page/6.html">6</a>
      <a href="/sadayuki/text/page/7.html">7</a>
      <a href="/sadayuki/text/page/8.html">8</a>
      <a href="/sadayuki/text/page/9.html">9</a>
      <a href="/sadayuki/text/page/10.html">10</a>
      <a href="/sadayuki/text/page/11.html">11</a>
      <a href="/sadayuki/text/page/12.html">12</a>
      <a href="/sadayuki/text/page/13.html">13</a>
      <a href="/sadayuki/text/page/14.html">14</a>
      <a href="/sadayuki/text/page/15.html">15</a>
      <a href="/sadayuki/text/page/16.html">16</a>
      <a href="/sadayuki/text/page/17.html">17</a>
      <a href="/sadayuki/text/page/18.html">18</a>
      <a href="/sadayuki/text/page/19.html">19</a>
      <a href="/sadayuki/text/page/20.html">20</a>
      <a href="/sadayuki/text/page/21.html">21</a>
      <a href="/sadayuki/text/page/22.html">22</a>
      <a href="/sadayuki/text/page/23.html">23</a>
      <a href="/sadayuki/text/page/24.html">24</a>
      <a href="/sadayuki/text/page/25.html">25</a>
      <a href="/sadayuki/text/page/26.html">26</a>
      <a href="/sadayuki/text/page/27.html">27</a>
      <a href="/sadayuki/text/page/28.html">28</a>
      <a href="/sadayuki/text/page/29.html">29</a>
      <a href="/sadayuki/text/page/30.html">30</a>
      <a href="/sadayuki/text/page/31.html">31</a>
      <a href="/sadayuki/text/page/32.html">32</a>
      <a href="/sadayuki/text/page/33.html">33</a>
      <a href="/sadayuki/text/page/34.html">34</a>
      <a href="/sadayuki/text/page/35.html">35</a>
      <a href="/sadayuki/text/page/36.html">36</a>
      <a href="/sadayuki/text/page/37.html">37</a>
      <a href="/sadayuki/text/page/38.html">38</a>
      <a href="/sadayuki/text/page/39.html">39</a>
      <a href="/sadayuki/text/page/40.html">40</a>
      <a href="/sadayuki/text/page/41.html">41</a>
      <a href="/sadayuki/text/page/42.html">42</a>
      <a href="/sadayuki/text/page/43.html">43</a>
      <a href="/sadayuki/text/page/44.html">44</a>
      <a href="/sadayuki/text/page/45.html">45</a>
      <a href="/sadayuki/text/page/46.html">46</a>
      <a href="/sadayuki/text/page/47.html">47</a>
      <a href="/sadayuki/text/page/48.html">48</a>
      <a href="/sadayuki/text/page/49.html">49</a>
      <a href="/sadayuki/text/page/50.html">50</a>
      <a href="/sadayuki/text/page/51.html">51</a>
      <a href="/sadayuki/text/page/52.html">52</a>
      <a href="/sadayuki/text/page/53.html">53</a>
      <a href="/sadayuki/text/page/54.html">54</a>
      <a href="/sadayuki/text/page/55.html">55</a>
      <a href="/sadayuki/text/page/56.html">56</a>
      <a href="/sadayuki/text/page/57.html">57</a>
      <a href="/sadayuki/text/page/58.html">58</a>
      <a href="/sadayuki/text/page/59.html">59</a>
      <a href="/sadayuki/text/page/60.html">60</a>
      <a href="/sadayuki/text/page/61.html">61</a>
      <a href="/sadayuki/text/page/62.html">62</a>
      <a href="/sadayuki/text/page/63.html">63</a>
      <a href="/sadayuki/text/page/64.html">64</a>
      <a href="/sadayuki/text/page/65.html">65</a>
      <a href="/sadayuki/text/page/66.html">66</a>
      <a href="/sadayuki/text/page/67.html">67</a>
      <a href="/sadayuki/text/page/68.html">68</a>
      <a href="/sadayuki/text/page/69.html">69</a>
      <a href="/sadayuki/text/page/70.html">70</a>
      <a href="/sadayuki/text/page/71.html">71</a>
      <a href="/sadayuki/text/page/72.html">72</a>
      <a href="/sadayuki/text/page/73.html">73</a>
      <a href="/sadayuki/text/page/74.html">74</a>
      <a href="/sadayuki/text/page/75.html">75</a>
      <a href="/sadayuki/text/page/76.html">76</a>
      <a href="/sadayuki/text/page/77.html">77</a>
      <a href="/sadayuki/text/page/78.html">78</a>
      <a href="/sadayuki/text/page/79.html">79</a>
      <a href="/sadayuki/text/page/80.html">80</a>
      <a href="/sadayuki/text/page/81.html">81</a>
      <a href="/sadayuki/text/page/82.html">82</a>
      <a href="/sadayuki/text/page/83.html">83</a>
      <a href="/sadayuki/text/page/84.html">84</a>
      <a href="/sadayuki/text/page/85.html">85</a>
      <a href="/sadayuki/text/page/86.html">86</a>
      <a href="/sadayuki/text/page/87.html">87</a>
      <a href="/sadayuki/text/page/88.html">88</a>
      <a href="/sadayuki/text/page/89.html">89</a>
      <a href="/sadayuki/text/page/90.html">90</a>
      <a href="/sadayuki/text/page/91.html">91</a>
      <a href="/sadayuki/text/page/92.html">92</a>
      <a href="/sadayuki/text/page/93.html">93</a>
      <a href="/sadayuki/text/page/94.html">94</a>
      <a href="/sadayuki/text/page/95.html">95</a>
      <a href="/sadayuki/text/page/96.html">96</a>
      <a href="/sadayuki/text/page/97.html">97</a>
      <a href="/sadayuki/text/page/98.html">98</a>
      <a href="/sadayuki/text/page/99.html">99</a>
      <a href="/sadayuki/text/page/100.html">100</a>
      <a href="/sadayuki/text/page/101.html">101</a>
</nav>


      <div class="ads" style="padding: 5px 5px 20px 20px;">
  <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=sadayukisdiar-22&o=9&p=48&l=ur1&category=special_deal&f=ifr" width="728" height="90" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe>
</div>

<div class="ads" style="padding: 5px 5px 20px 20px;">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-2831599305523989";
/* kurano.jp/sadayuki */
google_ad_slot = "0846527091";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<div class="ads" style="padding: 5px 5px 20px 20px;">
  <script type="text/javascript"><!--
amazon_ad_tag = "sadayukisdiar-22"; amazon_ad_width = "728"; amazon_ad_height = "90"; amazon_ad_price = "retail"; amazon_ad_border = "hide"; amazon_ad_discount = "remove";//--></script>
  <script type="text/javascript" src="http://www.assoc-amazon.jp/s/ads.js"></script>
</div>

<div class="ads" style="padding: 5px 5px 20px 20px;">
  <!-- Rakuten Dynamicad FROM HERE -->
  <script type="text/javascript">
  <!-- 
rakuten_template = "728_180_img";
rakuten_affiliateId = "06e5343b.37d6b54d.06e5343c.cccae727";
rakuten_service = "all";
rakuten_target = "_top";
rakuten_color_bg = "FFFFFF";
rakuten_color_border = "BF0000";
rakuten_color_text = "000000";
rakuten_color_link = "0000FF";
rakuten_color_price = "CC0000";
  //--></script>
  <script type="text/javascript" src="http://dynamic.rakuten.co.jp/js/rakuten_dynamic.js">
  </script>
  <!-- Rakuten Dynamicad TO HERE -->
</div>

    </div>
  </body>
</html>
