<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>mojavy.com</title>
    <link>http://mojavy.com/blog</link>
    <description></description>
    <pubDate>Sun, 30 Aug 2015 16:22:20 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>95/5 Mbps とは</title>
      <link>http://mojavy.com/blog/2015/08/30/95_5_mbps/</link>
      <pubDate>Sun, 30 Aug 2015 16:22:20 JST</pubDate>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[internet]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2015/08/30/95_5_mbps/</guid>
      <description>95/5 Mbps とは</description>
      <content:encoded><![CDATA[<p>Akamaiの<a href="https://developer.akamai.com/api/luna/billing-usage/overview.html">Billing Center API</a> では、95/5 Mbpsという単位のデータが取得できる。</p>
<p>95/5 Mbps というのは、特定の期間の平均Mbpsを5分間隔でサンプルしたものをソートした時の95パーセンタイルの値ということらしい。</p>
<p>なぜこのような数字が使われるのかというと、単純にピークのトラフィックを基準にして課金されると利用者側にとってつらいという問題があるからだ。
インターネットのトラフィックは往々にしてスパイクが発生するので、それだと普段はほとんど帯域を使わないのに一瞬のアクセス急増があっただけでコストが大きく増大してしまう。</p>
<p>そこで、あるISPが95/5 Mbpsで課金するようにしたところ市場で支持を得たため、これが一般的な課金形式として広まったらしい。</p>
<h3 id="_1">参考</h3>
<ul>
<li><a href="http://drpeering.net/AskDrPeering/blog/articles/Ask_DrPeering/Entries/2011/4/29_The_Origins_of_95_5.html">http://drpeering.net/AskDrPeering/blog/articles...</a> </li>
<li><a href="https://en.wikipedia.org/wiki/Burstable_billing">https://en.wikipedia.org/wiki/Burstable_billing</a> </li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>gitlab 6.6.4 CE のゆるふわセットアップ</title>
      <link>http://mojavy.com/blog/2014/03/11/latest-gitlab-setup/</link>
      <pubDate>Tue, 11 Mar 2014 02:08:20 JST</pubDate>
      <category><![CDATA[chef]]></category>
      <category><![CDATA[git]]></category>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[gitlab]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2014/03/11/latest-gitlab-setup/</guid>
      <description>gitlab 6.6.4 CE のゆるふわセットアップ</description>
      <content:encoded><![CDATA[<p>gitlabもCentOSとUbuntuにはパッケージが提供されるようになったので、大分インストールが簡単になりました。</p>
<p>とはいえ、このパッケージはgitlab専用のマシンにインストールすることを前提にしているのか、小規模プロジェクトのために軽く使いたいよう場合ではつらいデフォルト設定となっています。安いvpsとかだと確実にメモリ不足でまともに動きません。</p>
<p>以下はとりあえずプライベートgitリポジトリが欲しいだけのような人のためのgitlabの設定の紹介です。</p>
<h2 id="_1">準備</h2>
<p><a href="https://www.gitlab.com/downloads/">https://www.gitlab.com/downloads/</a> </p>
<p>ここからgitlabのパッケージをダウンロードします。
<a href="https://github.com/opscode/omnibus-ruby">omnibus-ruby</a> でつくられた全部入りパッケージなのでインストールでのコンフリクトは発生しないはずですが、既に稼動中のサービス(apache等)のことはあまり考慮されてないので使用するポートについては個別対応が必要です。</p>
<p>特に以下は注意が必要です。</p>
<ul>
<li>nginx</li>
<li>redis</li>
<li>postgresql</li>
</ul>
<p>ここでは、apacheが稼動しているubuntuにインストールします。</p>
<h2 id="_2">インストール</h2>
<p>普通にインストールします。</p>
<div class="pygments_borland"><pre>$ sudo dpkg -i gitlab_6.6.4-omnibus-1.ubuntu.12.04_amd64.deb 
$ sudo gitlab-ctl reconfigure
</pre></div>

<p>ちなみにgitユーザが既に存在しているとこけるので消しておきます</p>
<p><code>$ sudo userdel -r git</code></p>
<h2 id="gitlab">gitlabの設定</h2>
<p>gitlabの設定は /etc/gitlab/gitlab.rb に設定をかいて、chefで設定します。</p>
<div class="pygments_borland"><pre>$ cat /etc/gitlab/gitlab.rb
external_url &quot;http://gitlab.example.com:8081&quot;
unicorn[&quot;worker_processes&quot;] = 1
postgresql[&quot;shared_buffers&quot;] = &quot;128MB&quot;
postgresql[&quot;effective_cache_size&quot;] = &quot;32MB&quot;
</pre></div>

<p>とりあえずpostgresqlがメモリを大量に食うので適当に減らします。</p>
<p>unicornもメモリ食いがちなので1プロセスにします。</p>
<p><code>external_url</code>にポートも含めたURLをかきます。apacheが80番で起動してるとnginxが起動できないので適当にはずします。ちなみに8080はデフォルトだとgitlabのunicornがつかっています。</p>
<p>このあたりは環境に応じて適当に設定してください。</p>
<p><code>gitlab-ctl reconfigure</code> すると設定が反映されます。</p>
<p>その他の設定できる項目は <code>/opt/gitlab/embedded/cookbooks/gitlab</code> 以下の<code>cookbook</code>をみるといいです。</p>
<h2 id="web">webサーバの設定</h2>
<p>80番で起動しているapacheがいる場合はnginxにproxyします。</p>
<div class="pygments_borland"><pre>&lt;VirtualHost *:80&gt;
  ServerName gitlab.example.com

  DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

  CustomLog  /var/log/apache2/gitlab_access.log combined
  ErrorLog   /var/log/apache2/gitlab_error.log

  ErrorDocument 502 /502.html

  &lt;Directory &quot;/opt/gitlab/embedded/service/gitlab-rails/public&quot;&gt;
    Options FollowSymLinks
  &lt;/Directory&gt;

  &lt;Proxy *&gt;
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  &lt;/Proxy&gt;

  ProxyVia On
  ProxyPreserveHost On

  ProxyRequests Off
  ProxyPass /assets/ !
  ProxyPass /uploads/      !

  ProxyPass / http://localhost:8081/ retry=1
  ProxyPassReverse / http://localhost:8081/

&lt;/VirtualHost&gt;
</pre></div>

<p>以上ができたらapache再起動して、 http://gitlab.example.com にアクセスしてみてうまく表示できれば完了です。</p>]]></content:encoded>
    </item>
    <item>
      <title>TOMLノススメ</title>
      <link>http://mojavy.com/blog/2013/04/26/toml/</link>
      <pubDate>Fri, 26 Apr 2013 20:21:11 JST</pubDate>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[toml]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/04/26/toml/</guid>
      <description>TOMLノススメ</description>
      <content:encoded><![CDATA[<p><img alt="github" src="/images/github-logo-transparent-200.png" /> </p>
<h2 id="toml">TOMLとは</h2>
<p><a href="https://github.com/mojombo/toml">https://github.com/mojombo/toml</a> </p>
<p>Tom's Obvious, Minimal Language (TOML) とはgithubの中の人が提案している設定ファイルのためのミニ言語で、以下のような特徴があります。</p>
<ul>
<li>人間が読み書きしやすい</li>
<li>標準的なデータ型が利用できる</li>
<li>曖昧さが発生する余地が極力排除されている</li>
<li>パーサをかくのが簡単</li>
</ul>
<h2 id="toml_1">なぜTOML?</h2>
<p>例えば、YAMLを設定ファイルに使っているシステムは多いですが、<a href="http://yaml.org/spec/1.2/spec.pdf">YAMLの仕様書</a>は80ページもあり正しく使うのは意外と大変です。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>
<p>またJSONはカッコやダブルクオートの割合が多すぎますし、コメントも使えません。<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> </p>
<p>TOMLをつかえばそのようなストレスはありません。</p>
<h2 id="toml_2">TOMLの使い方</h2>
<p>TOMLの書き方は<a href="https://github.com/mojombo/toml">本家のドキュメント</a> をみてもらえばすぐわかると思います。</p>
<p>TOMLのライブラリは各種言語に対応したものが既にたくさんあります。
言語によっては複数の実装が存在するものもありますが、とりあえずはgithub上でのstarの数が一番多いものから試すといいと思います。</p>
<p>わざわざ説明するほどの内容でもないですが、ここでは一応rubyでの使い方を紹介します。
<code>gem install toml</code>でインストールして、以下のようにするだけです。YAMLの場合と大体同じですね。</p>
<div class="pygments_borland"><pre><span class="nb">require</span> <span class="s1">&#39;toml&#39;</span>

<span class="no">TOML</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">&quot;thing = 9&quot;</span><span class="p">)</span>
<span class="c1"># =&gt; {&quot;thing&quot; =&gt; 9}</span>

<span class="no">TOML</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="s2">&quot;my_file.toml&quot;</span><span class="p">)</span>
<span class="c1"># =&gt; {&quot;whatever&quot; =&gt; &quot;keys&quot;}</span>
</pre></div>

<h3 id="_1">その他</h3>
<ul>
<li>TOMLでは日付型も定義されていて、それもUTC固定というのが地味にいいです</li>
<li>githubのコードハイライトは既にTOMLに対応してます</li>
<li>emacsユーザはtoml-modeというのがmelpaに登録されているので、<code>M-x list-packages</code>からインストールできます。</li>
</ul>
<h3 id="_2">まとめ</h3>
<p>TOMLという設定ファイルのための新しいフォーマットを紹介しました。
設定ファイルにYAMLやJSONつかってるひとはTOMLに移行すると幸せになれるかもしれません。</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>仕様を正確に実装したYAMLパーサはほとんど存在しないとかいう話もちらほら&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/mojombo/toml/issues/2">https://github.com/mojombo/toml/issues/2</a> &#160;<a href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Mac OSXでシェルスクリプトをキーボードショートカットに登録する方法</title>
      <link>http://mojavy.com/blog/2013/03/28/mac-shell-script-keyboard-shortcut/</link>
      <pubDate>Thu, 28 Mar 2013 02:50:01 JST</pubDate>
      <category><![CDATA[mac]]></category>
      <category><![CDATA[shell]]></category>
      <category><![CDATA[tips]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/03/28/mac-shell-script-keyboard-shortcut/</guid>
      <description>Mac OSXでシェルスクリプトをキーボードショートカットに登録する方法</description>
      <content:encoded><![CDATA[<p><img alt="automator" src="/images/automator.png" /></p>
<p>概要を以下にメモ</p>
<ol>
<li>Automatorを起動</li>
<li>サービスを選択</li>
<li>右ペインの上部、「次の選択項目を受け取ります」を入力なしにする</li>
<li>左ペインからシェルスクリプトを実行をダブルクリック</li>
<li>デフォルトで<code>cat</code>になっている内容を任意のシェルスクリプトにする</li>
<li>右上の実行ボタンからテスト</li>
<li>適当な名前をつけて保存して閉じる</li>
<li>システム環境設定＞キーボードを開く</li>
<li>キーボードショートカットのタブを選択</li>
<li>サービスを選択してさっき保存したautomatorの名前をみつける</li>
<li>好きなショートカットを設定する</li>
</ol>
<p>参考: <a href="http://superuser.com/questions/45740/fast-user-switching-apple-menu/46308#46308">http://superuser.com/questions/45740/fast-user-switching-apple-menu/46308#46308</a></p>
<h4 id="_1">備考</h4>
<ul>
<li>新規作成したworkflowは保存して閉じるまでシステム設定のキーボードショートカットの項目に反映されない</li>
<li>workflowは$HOME/Library/Services に保存される</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>telnetでメールを送信する方法</title>
      <link>http://mojavy.com/blog/2013/02/23/telnet-smtp/</link>
      <pubDate>Sat, 23 Feb 2013 18:17:17 JST</pubDate>
      <category><![CDATA[postfix]]></category>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[smtp]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/02/23/telnet-smtp/</guid>
      <description>telnetでメールを送信する方法</description>
      <content:encoded><![CDATA[<p><img alt="lisp" src="/images/mail-logo-100.png" /></p>
<p>何回やってもpostfixの設定の仕方を覚えられないので、今更ながら最低限のプロトコルを理解するためにtelnetからsmtpでメールを送信してみようと思い立ちました。</p>
<p>以下は自分のgmailアドレスにtelnetでメールしてみたときの個人的な手順メモです。</p>
<div class="toc">
<ul>
<li><a href="#_1">手順</a><ul>
<li><a href="#1-mx">1. 該当メールアドレスのMXレコードを調べる</a></li>
<li><a href="#2-telnet25smtp">2. telnetで25番ポートに接続してsmtpを話す</a></li>
<li><a href="#3">3. メールの確認</a></li>
</ul>
</li>
<li><a href="#postfix">postfixの設定メモ</a></li>
</ul>
</div>
<h2 id="_1">手順</h2>
<h3 id="1-mx">1. 該当メールアドレスのMXレコードを調べる</h3>
<p>普通のメールアドレスの@以下はドメイン名になっている場合がほとんどですが、DNSのAレコードに登録されているのはホスト名なのでメールサービスを提供しているホスト名を調べる必要があります。そのときに使うのがMXレコードで、nslookupでも以下のようにして調べることができます。</p>
<div class="pygments_borland"><pre>% nslookup -type=mx gmail.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
gmail.com       mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com       mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com       mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.
gmail.com       mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
gmail.com       mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.

Authoritative answers can be found from:
</pre></div>

<p>複数のホストが優先度をつけて登録されているので、この場合は <em>gmail-smtp-in.l.google.com</em> を使えばいいということになるみたいです。</p>
<h3 id="2-telnet25smtp">2. telnetで25番ポートに接続してsmtpを話す</h3>
<p>smtpはテキストベースのプロトコルなのでtelnetからそのままサーバとやりとりできます。
smtpプロトコルの詳細は省略しますが、最低限必要なコマンドは以下の5つだけ。</p>
<ul>
<li>HELO - 通信開始</li>
<li>MAIL FROM - 送信元メールアドレス。<del>ドメインのIPと送信元のIPが一致している必要がある。dynamic DNSのドメイン名でも大丈夫。ユーザ名部分は実際に存在しなくてもよい(その場合は返信を受けとれない)</del> smtpサーバ側次第。postfixの設定によっては任意に設定できる。</li>
<li>RCPT TO - 送信先メールアドレス</li>
<li>DATA - メール本体の開始。'.'(ピリオド)だけの行で本文終了。本文のFromとToはなんでもよい。普通のメーラのfromやtoで表示されるのはここの情報</li>
<li>QUIT - 通信終了</li>
</ul>
<div class="pygments_borland"><pre>% telnet gmail-smtp-in.l.google.com 25
Trying 173.194.79.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is &#39;^]&#39;.
220 mx.google.com ESMTP k8si26817952pax.291 - gsmtp
HELO
250 mx.google.com at your service
MAIL FROM:&lt;username@yourhostname&gt;
250 2.1.0 OK k8si26817952pax.291 - gsmtp
RCPT TO:&lt;username@gmail.com&gt;
250 2.1.5 OK k8si26817952pax.291 - gsmtp
DATA
354  Go ahead k8si26817952pax.291 - gsmtp
Subject: xxx
From: yyy
To: zzz

.
250 2.0.0 OK 1361347877 k8si26817952pax.291 - gsmtp
QUIT
221 2.0.0 closing connection k8si26817952pax.291 - gsmtp
Connection closed by foreign host.
</pre></div>

<h3 id="3">3. メールの確認</h3>
<p>gmail上でメールがきているか確認します。DATA部分を適当に書くとスパム判定されてしまいますが一応届くはず。</p>
<h2 id="postfix">postfixの設定メモ</h2>
<p>上記は直接gmailのsmtpサーバで送信しましたが、mailコマンドからローカルのpostfix経由で送るにはpostfixを適切に設定する必要があります。</p>
<p>MAIL FROMのドメイン部分を省略した場合は、myoriginの値になった
<del>MAIL FROMで使われるのはmyoriginの値になるようなので、送信だけでよいのであればmyoriginのIPが送信元のグローバルIPに一致するように設定しさえすればよいということですかね。</del></p>
<p>ちなみに、debianのaptからpostfixを「ローカルのみ」の設定でインストールしてしまうと、デフォルトのmain.cfにリレーしない設定になっているので、main.cfを以下のようにコメントアウト。</p>
<div class="pygments_borland"><pre># default_transport = error
# relay_transport = error
</pre></div>

<p>あと、sakura vpsのお試し期間中はメール送信できない仕様なので、sakura vpsで試す際は注意。</p>
<p><a href="http://vps.sakura.ad.jp/terms.html">http://vps.sakura.ad.jp/terms.html</a></p>]]></content:encoded>
    </item>
    <item>
      <title>おやつの時間をお知らせしてくれるUnixコマンド：at teatime (他...)</title>
      <link>http://mojavy.com/blog/2013/01/08/favorite-linux-command/</link>
      <pubDate>Tue, 08 Jan 2013 20:30:00 JST</pubDate>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[linux]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/01/08/favorite-linux-command/</guid>
      <description>おやつの時間をお知らせしてくれるUnixコマンド：at teatime (他...)</description>
      <content:encoded><![CDATA[<p><img alt="banana" src="/images/banana-200.png" /></p>
<p><a href="http://clippy.in/b/YJLM9W">Favorite Linux Commands(http://clippy.in/b/YJLM9W)</a> で紹介されてたコマンドのうち知らなかったものをメモ。</p>
<h2 id="at">at</h2>
<p>入力されたコマンドを指定されたタイミングで実行するようにスケジュールする。
cronに登録するほどでもない単発のコマンドを実行したいときとかにつかう。
時間の指定には現在の時刻からの経過時間や絶対時間の他にteatimeやmidnightといった文字列もつかえる。
ちなみにteatimeは午後4時。
出力先を指定しなければコマンドの出力はcronと同じようにメールにとぶ。$TTYにリダイレクトしてやればコマンドを実行した端末に表示させることもできる。</p>
<p>例</p>
<div class="pygments_borland"><pre>echo &quot;echo おやつの時間です &gt; $TTY&quot;| at teatime
echo &quot;echo はろー &gt; $TTY&quot; | at now + 3 minute
</pre></div>

<h2 id="mtr">mtr</h2>
<p>tracerouteとpingをあわせたようなもの。tracerouteより表示がみやすい。
ネットワークのどこで時間がかかってるのか一目でわかる。</p>
<p>例</p>
<div class="pygments_borland"><pre>mtr mojavy.com
</pre></div>

<h2 id="column">column</h2>
<p>入力テキストをいい感じのカラム表示にフォーマットしてくれる。
縦に長い出力するコマンドとか、そのままだと出力がみづらいときとかにつかう。</p>
<p>例</p>
<div class="pygments_borland"><pre>gem list | column
mount | column -t
grep -v &#39;^#&#39; /etc/apt/sources.list | column -t
</pre></div>

<h2 id="reset">reset</h2>
<p>端末をリセットする。
うっかりバイナリファイルをcatとかしてしまって端末が壊れてしまった場合に端末を閉じずに復帰できる。</p>
<h2 id="sshfs">sshfs</h2>
<p>ssh経由でリモートのファイルシステムをマウントできる。</p>
<p>例</p>
<div class="pygments_borland"><pre>sshfs name@server:/path/to/dir /path/to/mount/point
fusermount -u /path/to/mount/point  # unmount
</pre></div>

<h2 id="_1">その他</h2>
<p>以下はコマンド自体の機能ではないけど覚えておくと便利かもしれないもの</p>
<h3 id="curl-ifconfigme">curl ifconfig.me</h3>
<p>ifconfig.meというサイトがある。自分のグローバルIPがわかる。</p>
<h3 id="dig-short-txt-wzxhzdk5wpdgcx">dig +short txt <keyword>.wp.dg.cx</h3>
<p>dnsクエリでwikipediaのエントリーがみれる。</p>
<p>例</p>
<div class="pygments_borland"><pre><span class="nv">$ </span>dig +short txt banana.wp.dg.cx
<span class="s2">&quot;Banana is the common name for herbaceous plants of the genus Musa and for the fruit they produce. It is one of the oldest cultivated plants. They are native to tropical South and Southeast Asia, and are likely to have been first domesticated in Papua New &quot;</span> <span class="s2">&quot;Guinea. Today, they are cultivated throughout the tropics. They are grown in at least 107 countries, primarily for their... http://en.wikipedia.org/wiki/Banana&quot;</span>
</pre></div>]]></content:encoded>
    </item>
    <item>
      <title>ウェブエンジニアのためのオンラインツールまとめ</title>
      <link>http://mojavy.com/blog/2012/11/20/web-engineers-online-toolbox/</link>
      <pubDate>Tue, 20 Nov 2012 02:30:00 JST</pubDate>
      <category><![CDATA[web]]></category>
      <category><![CDATA[tips]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2012/11/20/web-engineers-online-toolbox/</guid>
      <description>ウェブエンジニアのためのオンラインツールまとめ</description>
      <content:encoded><![CDATA[<p><img alt="tool" src="/images/tool-logo.png" /></p>
<p><a href="http://ivanzuzak.info/2012/11/18/the-web-engineers-online-toolbox.html">The Web engineer's online toolbox</a>というまとめ記事が便利そうだったので、実際に試しつつ抄訳してみました。(一部のコメントと体裁は変えています。)</p>
<h2 id="_1">目次</h2>
<div class="toc">
<ul>
<li><a href="#_1">目次</a></li>
<li><a href="#_2">一覧</a><ul>
<li><a href="#requestbin">RequestBin</a></li>
<li><a href="#hurl">Hurl</a></li>
<li><a href="#httpbin">httpbin</a></li>
<li><a href="#redbot">REDbot</a></li>
<li><a href="#webgun">WebGun</a></li>
<li><a href="#apify">Apify</a></li>
<li><a href="#unicorn">Unicorn</a></li>
<li><a href="#feed-validator">Feed validator</a></li>
<li><a href="#link-checker">Link checker</a></li>
<li><a href="#host-tracker">Host tracker</a></li>
<li><a href="#pingdom-full-page-test">Pingdom Full page test</a></li>
<li><a href="#har-viewer">HAR viewer</a></li>
<li><a href="#cors-proxy">CORS proxy</a></li>
<li><a href="#browserling">Browserling</a></li>
<li><a href="#websocket-echo-test">WebSocket Echo Test</a></li>
<li><a href="#yql">YQL</a></li>
<li><a href="#yahoo-pipes">Yahoo Pipes</a></li>
<li><a href="#apiary">Apiary</a></li>
</ul>
</li>
<li><a href="#_3">おわりに</a></li>
</ul>
</div>
<h2 id="_2">一覧</h2>
<h3 id="requestbin"><a href="http://requestb.in/">RequestBin</a></h3>
<p>httpリクエストを保存するエンドポイントを作ってくれる。</p>
<p>Create a RequestBin のボタンをクリックするとURLが表示されるので、そこをHTTPクライアントからたたくとRequestBin側にリクエスト内容が記録される。
ソースも公開されてるのでローカルで立ちあげることもできる。</p>
<p>githubの<a href="https://help.github.com/articles/testing-webhooks">webhookのhelp</a>も参考にどうぞ。</p>
<h3 id="hurl"><a href="http://hurl.it">Hurl</a></h3>
<p>httpリクエストを実行してくれる。パーマリンクも作ってくれるので、POSTリクエストもコピペで他の人と共有できる。</p>
<ul>
<li>類似サービス: <a href="http://resttesttest.com/">REST test test</a> ,  <a href="https://apigee.com/console/others">Apigee console</a> </li>
</ul>
<h3 id="httpbin"><a href="http://httpbin.org/">httpbin</a></h3>
<p>HTTPリクエスト側でレスポンスのHTTP status codeやレスポンスやリダイレクト、cookieなどを制御できる。HTTPクライアントのテストに便利。</p>
<ul>
<li>類似サービス: <a href="http://ivanzuzak.info/urlecho/">UrlEcho</a></li>
</ul>
<h3 id="redbot"><a href="http://redbot.org/">REDbot</a></h3>
<p>HTTPのリソースをチェックしてくれる。問題を検出したら改善案のサジェストもしてくれる。</p>
<ul>
<li>類似サービス: <a href="http://zamez.org/httplint">HTTP lint</a></li>
</ul>
<h3 id="webgun"><a href="http://webgun.io/">WebGun</a></h3>
<p>webhookを簡単に作るためのAPIを提供している。現在はまだベータっぽい。</p>
<h3 id="apify"><a href="http://apify.heroku.com">Apify</a></h3>
<p>ウェブページをスクレイピングしてJSON API化してくれる。
CSSセレクタかxpathに名前をつけて設定するだけでよしなにやってくれる。</p>
<p><a href="http://apify.heroku.com/resources/50a99278a7301c000200005a">試しに元記事をAPI化してみた</a></p>
<h3 id="unicorn"><a href="http://validator.w3.org/unicorn/">Unicorn</a></h3>
<p>前述の<a href="http://redbot.org/">REDbot</a>はHTTPをチェックしてくれるけど、こちらはHTMLドキュメントがW3Cに準拠してるかをバリデートしてくれる。</p>
<ul>
<li>類似サービス: <a href="http://lint.brihten.com/html/">HTML lint</a></li>
</ul>
<h3 id="feed-validator"><a href="http://validator.w3.org/feed/">Feed validator</a></h3>
<p>こちらはRSSとATOMフィードをバリデートしてくれる。</p>
<h3 id="link-checker"><a href="http://validator.w3.org/checklink">Link checker</a></h3>
<p>リンクを再帰的にたどって、重複やリンク切れをチェックしてくれる。</p>
<h3 id="host-tracker"><a href="http://www.host-tracker.com/">Host tracker</a></h3>
<p>ウェブサイトのモニタリングサービス。定期的にpingして、問題があった場合はメール通知してくれる。</p>
<ul>
<li>類似サービス: <a href="http://www.downforeveryoneorjustme.com/">Down for everyone or just me</a>, <a href="http://tools.pingdom.com/ping/">Pimgdom ping service</a></li>
</ul>
<h3 id="pingdom-full-page-test"><a href="http://tools.pingdom.com/fpt/">Pingdom Full page test</a></h3>
<p>ウェブページのロード時間を計測、解析してくれる。リクエストを実行するサーバは米国しかないので国内だとちょっと使いづらい。
類似サービスの<a href="http://www.webpagetest.org/">Web page test</a>ならTokyoが選べる。</p>
<h3 id="har-viewer"><a href="http://www.softwareishard.com/har/viewer/">HAR viewer</a></h3>
<p>HTTP tracking toolsで生成されたHTTP Archive (HAR)形式のログをビジュアライズしてくれる。</p>
<h3 id="cors-proxy"><a href="http://www.corsproxy.com/">CORS proxy</a></h3>
<p>クロスドメインでjsを実行できるようにヘッダを追加してレスポンスしてくれるプロキシ。</p>
<h3 id="browserling"><a href="https://browserling.com/">Browserling</a></h3>
<p>ブラウザ上で動くインタラクティブなクロスブラウザ。メジャーなブラウザは大体サポートされている。
動作は重いけど表示確認くらいになら無料のままでも使えそう。</p>
<h3 id="websocket-echo-test"><a href="http://www.websocket.org/echo.html">WebSocket Echo Test</a></h3>
<p>WebSocketをテストできるエコーサーバ。</p>
<h3 id="yql"><a href="http://developer.yahoo.com/yql/">YQL</a></h3>
<p>ウェブサービスからとってきたデータをSQLっぽい言語で整形できる。</p>
<h3 id="yahoo-pipes"><a href="http://pipes.yahoo.com/pipes/">Yahoo Pipes</a></h3>
<p>ウェブサービスをGUIでマッシュアップできる。</p>
<h3 id="apiary"><a href="http://apiary.io/">Apiary</a></h3>
<p>良い感じのREST APIドキュメントをインタラクティブなインスペクタをつかってジェネレートできる。まだベータ。</p>
<ul>
<li>類似サービス: <a href="http://swagger.wordnik.com/">Swagger</a></li>
</ul>
<h2 id="_3">おわりに</h2>
<ul>
<li>いくつかのツールはサーバに負荷をかけてしまう可能性があるので注意してつかってください。</li>
<li>他にもなにかあれば教えてもらえるとうれしいです。</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>細かすぎて伝わらないAndroid開発のはまりどころまとめ その1</title>
      <link>http://mojavy.com/blog/2012/11/07/android-pitfalls/</link>
      <pubDate>Wed, 07 Nov 2012 12:00:00 JST</pubDate>
      <category><![CDATA[android]]></category>
      <category><![CDATA[tips]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2012/11/07/android-pitfalls/</guid>
      <description>細かすぎて伝わらないAndroid開発のはまりどころまとめ その1</description>
      <content:encoded><![CDATA[<p><img alt="android" src="/images/android-logo.png" /></p>
<p>これまでandroidアプリを開発しててはまったことがたまってきたのでまとめておきます。順不同です。
その2はまたねたがたまってきたらたぶんそのうち。</p>
<h2 id="_1">目次</h2>
<div class="toc">
<ul>
<li><a href="#_1">目次</a></li>
<li><a href="#onanimationendviewnullpointerexception">onAnimationEndでviewの階層を操作するとNullPointerExceptionでおちる</a></li>
<li><a href="#animation">Animationが動かない</a></li>
<li><a href="#windowmanageraddview">WindowManagerにaddViewしたときの挙動</a></li>
<li><a href="#activity">Activityが横向きでスタートした場合と縦向きでスタートしたときで表示倍率が違う</a></li>
<li><a href="#oncreate">onCreateが何回もよばれる</a></li>
<li><a href="#popupwindow">popupWindowのサイズが変わらない</a></li>
<li><a href="#httpurlconnection-0byteresponse">HttpURLConnectionが 0byteのresponseを返す</a></li>
<li><a href="#orgapachehttpimplclientdefaulthttpclient">org.apache.http.impl.client.DefaultHttpClientがすごく遅い</a></li>
<li><a href="#eclipseandroid-plugin">eclipseのAndroid pluginが動かなくなった</a></li>
<li><a href="#webview">WebViewで表示されるコンテンツが小さすぎる</a></li>
<li><a href="#javalangruntimeexception-stub">java.lang.RuntimeException: Stub!</a></li>
<li><a href="#jarandroid">jarとして配布するandroidライブラリ内にリソースを埋め込むことはできない</a></li>
<li><a href="#android-maven-plugin-mvn-eclipseeclipse-eclipse">android-maven-plugin から mvn eclipse:eclipse でeclipse用にエクスポートすることはできない</a></li>
</ul>
</div>
<h2 id="onanimationendviewnullpointerexception">onAnimationEndでviewの階層を操作するとNullPointerExceptionでおちる</h2>
<p>Viewをフェードアウトして親Viewからremoveする、というような動作をしたい場合に、普通にonAnimationEndの中でremoveViewとかするとNullPointerExceptionでおちます。onAnimationEndの中でViewの階層構造を操作するような処理をしてはだめらしいです。回避するには、Handlerをつかってタイミングをずらしてやるとよいです。</p>
<ul>
<li>参考: <a href="http://stackoverflow.com/questions/5569267/nullpointerexception-that-doesnt-point-to-any-line-in-my-code">http://stackoverflow.com/questions/5569267/nullpointerexception-that-doesnt-point-to-any-line-in-my-code</a></li>
</ul>
<h2 id="animation">Animationが動かない</h2>
<p>AnimationさせるViewには親Viewが存在している必要があります。WindowManagerはViewではないので、WindowManagerにaddViewしたViewをアニメーションさせたい場合は空のRelativeLayoutとかにaddViewしてから、RelativeLayoutのほうをWindowManagerにaddViewしてやる必要があります。</p>
<h2 id="windowmanageraddview">WindowManagerにaddViewしたときの挙動</h2>
<p>WindowManagerにもaddViewできますが、通常のViewとは挙動が違います。</p>
<ul>
<li>背景透過はWindowManager.LayoutParam.format に TRANSLUCENT をセットすればよいです。</li>
<li>dimでフェードインできますが、その際のdurationを変更する方法は分かりませんでした。</li>
<li>BACKボタンはきかなくなります。自分でKeyEventを処理してやる必要があります。android.widget.PopupWindowのdispathKeyEventのソースが参考になります。</li>
</ul>
<h2 id="activity">Activityが横向きでスタートした場合と縦向きでスタートしたときで表示倍率が違う</h2>
<ul>
<li>参考：<a href="http://d.hatena.ne.jp/acidgraphix/20110126/1296018143">http://d.hatena.ne.jp/acidgraphix/20110126/1296018143</a></li>
</ul>
<h2 id="oncreate">onCreateが何回もよばれる</h2>
<p>回転やキーボード表示のタイミングでもonCreateがよばれます。AndroidManifest.xmlでconfigChangesを設定することで回避できます。</p>
<ul>
<li>参考: <a href="http://stackoverflow.com/questions/2606470/unexpected-resume-of-package-name-while-already-resumed-in-package-name-err">http://stackoverflow.com/questions/2606470/unexpected-resume-of-package-name-while-already-resumed-in-package-name-err</a></li>
</ul>
<h2 id="popupwindow">popupWindowのサイズが変わらない</h2>
<p>popupWindowのsetWidth, setHeightは次回以降の表示サイズしか変えられません。既に表示しているポップアップウィンドウのサイズはそのままです。invalidateしても無駄です。</p>
<h2 id="httpurlconnection-0byteresponse">HttpURLConnectionが 0byteのresponseを返す</h2>
<p>コネクションプールとkeepaliveがらみで問題が発生する場合があるみたいです。SDKのバージョンとウェブサーバ側の設定も影響します。
<code>System.setProperty("http.keepAlive", "false")</code> で回避はできるようです。これに遭遇したときは、org.apache.http.impl.client.DefaultHttpClientの方を使うことにしたので詳細は追ってません。</p>
<ul>
<li>参考: <a href="http://stackoverflow.com/questions/1440957/httpurlconnection-getresponsecode-returns-1-on-second-invocation">http://stackoverflow.com/questions/1440957/httpurlconnection-getresponsecode-returns-1-on-second-invocation</a></li>
</ul>
<h2 id="orgapachehttpimplclientdefaulthttpclient">org.apache.http.impl.client.DefaultHttpClientがすごく遅い</h2>
<p>httpsでリクエストを投げると、ウェブサーバ側の負荷が高いわけでもネットワークが細いわけでもないのに、返ってくるまでなぜか数秒かかる場合があります。こちらもkeepaliveがらみの問題っぽいです。これもウェブサーバ側の設定が影響します。
試した限りでは以下のような状況でした。</p>
<ul>
<li>setHeader("Connection", "close") しても効果なし</li>
<li>setKeepAliveStrategyでdurationを 0とか1にしても効果なし</li>
<li>Connection closeしないウェブサーバならすぐレスポンスが返ってくる</li>
<li>httpならすぐレスポンスが返ってくる</li>
</ul>
<p><a href="http://hc.apache.org/httpclient-3.x/sslguide.html">ここ( http://hc.apache.org/httpclient-3.x/sslguide.html )</a> のKnown limitations and problemsをみるとそれっぽい既知の問題があるようですが、根が深そうだったので詳細は追ってません。</p>
<h2 id="eclipseandroid-plugin">eclipseのAndroid pluginが動かなくなった</h2>
<p>なぜかeclipseでAndroid pluginが動かなくなるときがありました。詳細をメモるのを忘れてしまいましたが、以下の手順で直ったような気がします。</p>
<ol>
<li>Android Support Libraryをアンインストール</li>
<li>eclipse再起動</li>
<li>新しいAndroidプロジェクトを作るとダイアログでライブラリのインストールを促されるのでそれに従う</li>
<li>android プラグインをアップデート</li>
</ol>
<h2 id="webview">WebViewで表示されるコンテンツが小さすぎる</h2>
<p>通常ビューのスケールとWebViewのスケールは別です。setScaleで調整する必要があります。
これはたぶんiOSでも同様かと。</p>
<h2 id="javalangruntimeexception-stub">java.lang.RuntimeException: Stub!</h2>
<p>android.jar内のコードはdalvikvmの外で実行することはできません。問答無用でタイトルの例外が飛びます。
エラーメッセージはもうちょいなんとかならなかったのか。</p>
<p>参考</p>
<ul>
<li><a href="http://stackoverflow.com/questions/7247502/using-android-jar-in-java-project-runtimeexception-stub">http://stackoverflow.com/questions/7247502/using-android-jar-in-java-project-runtimeexception-stub</a></li>
<li><a href="http://www.slideshare.net/miyatay/abc2011w">http://www.slideshare.net/miyatay/abc2011w</a></li>
</ul>
<h2 id="jarandroid">jarとして配布するandroidライブラリ内にリソースを埋め込むことはできない</h2>
<p>リソースIDを列挙しているRパッケージはjarにそのまま入れることはできますが、そのリソースIDは不正なものとなります。
ライブラリにリソースを含めたい場合は、ソースも含めたプロジェクトをまるごと配布するしかないようです。</p>
<p>ごく小さなアイコン画像だけとかであればバイナリデータをソース中に埋め込んでしまう、というのも手です。
iOSならBundleという仕組みがあります。</p>
<h2 id="android-maven-plugin-mvn-eclipseeclipse-eclipse">android-maven-plugin から mvn eclipse:eclipse でeclipse用にエクスポートすることはできない</h2>
<p>androidでもmavenは使えますが、androidのmavenプロジェクトは通常の方法(mvn eclipse:eclipse)ではeclipseにインポートできません。
以下のファイルを手動でつくってみたらとりあえずいけました。</p>
<ul>
<li>.classpath</li>
</ul>
<div class="pygments_borland"><pre><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="nt">&lt;classpath&gt;</span>
        <span class="nt">&lt;classpathentry</span> <span class="na">kind=</span><span class="s">&quot;src&quot;</span> <span class="na">path=</span><span class="s">&quot;src/main/java&quot;</span><span class="nt">/&gt;</span>
        <span class="nt">&lt;classpathentry</span> <span class="na">kind=</span><span class="s">&quot;src&quot;</span> <span class="na">path=</span><span class="s">&quot;gen&quot;</span><span class="nt">/&gt;</span>
        <span class="nt">&lt;classpathentry</span> <span class="na">kind=</span><span class="s">&quot;con&quot;</span> <span class="na">path=</span><span class="s">&quot;com.android.ide.eclipse.adt.ANDROID_FRAMEWORK&quot;</span><span class="nt">/&gt;</span>
        <span class="nt">&lt;classpathentry</span> <span class="na">kind=</span><span class="s">&quot;con&quot;</span> <span class="na">path=</span><span class="s">&quot;com.android.ide.eclipse.adt.LIBRARIES&quot;</span><span class="nt">/&gt;</span>
        <span class="nt">&lt;classpathentry</span> <span class="na">kind=</span><span class="s">&quot;output&quot;</span> <span class="na">path=</span><span class="s">&quot;bin/classes&quot;</span><span class="nt">/&gt;</span>
<span class="nt">&lt;/classpath&gt;</span>
</pre></div>

<ul>
<li>.project</li>
</ul>
<div class="pygments_borland"><pre><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="nt">&lt;projectDescription&gt;</span>
        <span class="nt">&lt;name&gt;</span>project-name<span class="nt">&lt;/name&gt;</span>
        <span class="nt">&lt;comment&gt;&lt;/comment&gt;</span>
        <span class="nt">&lt;projects&gt;</span>
        <span class="nt">&lt;/projects&gt;</span>
        <span class="nt">&lt;buildSpec&gt;</span>
                <span class="nt">&lt;buildCommand&gt;</span>
                        <span class="nt">&lt;name&gt;</span>com.android.ide.eclipse.adt.ResourceManagerBuilder<span class="nt">&lt;/name&gt;</span>
                        <span class="nt">&lt;arguments&gt;</span>
                        <span class="nt">&lt;/arguments&gt;</span>
                <span class="nt">&lt;/buildCommand&gt;</span>
                <span class="nt">&lt;buildCommand&gt;</span>
                        <span class="nt">&lt;name&gt;</span>com.android.ide.eclipse.adt.PreCompilerBuilder<span class="nt">&lt;/name&gt;</span>
                        <span class="nt">&lt;arguments&gt;</span>
                        <span class="nt">&lt;/arguments&gt;</span>
                <span class="nt">&lt;/buildCommand&gt;</span>
                <span class="nt">&lt;buildCommand&gt;</span>
                        <span class="nt">&lt;name&gt;</span>org.eclipse.jdt.core.javabuilder<span class="nt">&lt;/name&gt;</span>
                        <span class="nt">&lt;arguments&gt;</span>
                        <span class="nt">&lt;/arguments&gt;</span>
                <span class="nt">&lt;/buildCommand&gt;</span>
                <span class="nt">&lt;buildCommand&gt;</span>
                        <span class="nt">&lt;name&gt;</span>com.android.ide.eclipse.adt.ApkBuilder<span class="nt">&lt;/name&gt;</span>
                        <span class="nt">&lt;arguments&gt;</span>
                        <span class="nt">&lt;/arguments&gt;</span>
                <span class="nt">&lt;/buildCommand&gt;</span>
        <span class="nt">&lt;/buildSpec&gt;</span>
        <span class="nt">&lt;natures&gt;</span>
                <span class="nt">&lt;nature&gt;</span>com.android.ide.eclipse.adt.AndroidNature<span class="nt">&lt;/nature&gt;</span>
                <span class="nt">&lt;nature&gt;</span>org.eclipse.jdt.core.javanature<span class="nt">&lt;/nature&gt;</span>
        <span class="nt">&lt;/natures&gt;</span>
<span class="nt">&lt;/projectDescription&gt;</span>
</pre></div>

<ul>
<li>project.properties</li>
</ul>
<div class="pygments_borland"><pre><span class="c"># Project target.</span>
<span class="na">target</span><span class="o">=</span><span class="s">android-10</span>

<span class="c"># if it is a library</span>
<span class="c"># android.library=true</span>
</pre></div>

<p>まあ、なんというか、Androidはいろいろ残念ですね。</p>
<p>iOSはこういう仕様なのかバグなのかよくわからないようなものが少ないし、OSバージョンの入れ換わりが早くて対応バージョンも少なくて済む分、個人的な体感ではandroidアプリの工数はiOSの3割増しという感じ。</p>]]></content:encoded>
    </item>
    <item>
      <title>UbuntuでPDFの日本語フォントが表示できないときの対処メモ</title>
      <link>http://mojavy.com/blog/2012/11/02/ubuntu-pdf/</link>
      <pubDate>Fri, 02 Nov 2012 12:00:00 JST</pubDate>
      <category><![CDATA[pdf]]></category>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[ubuntu]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2012/11/02/ubuntu-pdf/</guid>
      <description>UbuntuでPDFの日本語フォントが表示できないときの対処メモ</description>
      <content:encoded><![CDATA[<p><img alt="ubuntu" src="/images/ubuntu-logo.png" /></p>
<p>Ubuntu 12.04 で日本語フォントのはいったpdfを開くと、日本語の部分が空白になって以下のようなエラーログが表示されてしまっていた。</p>
<div class="pygments_borland"><pre>Error <span class="o">(</span>13373<span class="o">)</span>: No font in show/space
Error <span class="o">(</span>13412<span class="o">)</span>: No font in show/space
Error <span class="o">(</span>13497<span class="o">)</span>: No font in show/space
Error <span class="o">(</span>13515<span class="o">)</span>: No font in show
Error <span class="o">(</span>13555<span class="o">)</span>: No font in show/space
Error <span class="o">(</span>13572<span class="o">)</span>: No font in show
Error <span class="o">(</span>13607<span class="o">)</span>: No font in show/space
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Missing language pack <span class="k">for</span> <span class="s1">&#39;Adobe-Japan1&#39;</span> mapping
Error: Unknown font tag <span class="s1">&#39;C0_0&#39;</span>
Error <span class="o">(</span>231<span class="o">)</span>: No font in show
Error: Unknown font tag <span class="s1">&#39;C0_1&#39;</span>
</pre></div>

<p>pdfビューワはDocument Viewerでもokularでも同様だった。</p>
<p>そこで、<a href="https://forums.ubuntulinux.jp/viewtopic.php?id=8281">このあたり</a>を参考に、</p>
<div class="pygments_borland"><pre>sudo apt-get install poppler-data
</pre></div>

<p>としたらちゃんと表示されるようになった。</p>]]></content:encoded>
    </item>
    <item>
      <title>redmineのメールを効率良くフィルタリングする</title>
      <link>http://mojavy.com/blog/2012/07/24/redmine-mail/</link>
      <pubDate>Tue, 24 Jul 2012 23:30:00 JST</pubDate>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[redmine]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2012/07/24/redmine-mail/</guid>
      <description>redmineのメールを効率良くフィルタリングする</description>
      <content:encoded><![CDATA[<p><img alt="redmine" src="/images/redmine-logo.png" /></p>
<p>redmineからとぶメールのヘッダにはX-Redmine-Issue-AuthorとかX-Redmine-Issue-Assigneeとかついているのでフィルタが簡単にできます。</p>
<p>いままでgmailでフィルタリングしてたので気付かなかった。。</p>
<p>メールクライアントはgmailのウェブアプリで十分だと思ってましたが、メーラはデスクトップアプリのほうが便利ですね。</p>]]></content:encoded>
    </item>
  </channel>
</rss>
