<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[blog.nambo.jp]]></title>
  <link href="http://blog.nambo.jp/atom.xml" rel="self"/>
  <link href="http://blog.nambo.jp/"/>
  <updated>2015-09-28T18:27:34+09:00</updated>
  <id>http://blog.nambo.jp/</id>
  <author>
    <name><![CDATA[nambon]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[CentOSにVim7.4をluaオプション付きでインストールする]]></title>
    <link href="http://blog.nambo.jp/2015/09/28/centos-vim-install-lua/"/>
    <updated>2015-09-28T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2015/09/28/centos-vim-install-lua</id>
    <content type="html"><![CDATA[<p>Vimで<a href="https://github.com/Shougo/neocomplete.vim">neocomplete</a>プラグインを使おうとしたところ、luaオプション付きでのインストールが必要だったのでメモ。
環境はCentOS 6.5。</p>

<!-- more -->


<p>必要なライブラリをインストール。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>yum install -y lua-devel perl-ExtUtils-Embed
</span></code></pre></td></tr></table></div></figure>


<p>Vim7.4をダウンロードし、オプションを指定してインストール。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
</span><span class='line'>tar xvf vim-7.4.tar.bz2
</span><span class='line'><span class="nb">cd </span>vim74
</span><span class='line'>
</span><span class='line'>./configure <span class="se">\</span>
</span><span class='line'> --enable-multibyte <span class="se">\</span>
</span><span class='line'> --with-features<span class="o">=</span>huge <span class="se">\</span>
</span><span class='line'> --enable-luainterp <span class="se">\</span>
</span><span class='line'> --enable-perlinterp <span class="se">\</span>
</span><span class='line'> --enable-pythoninterp <span class="se">\</span>
</span><span class='line'> --with-python-config-dir<span class="o">=</span>/usr/lib64/python2.6/config <span class="se">\</span>
</span><span class='line'> --enable-rubyinterp <span class="se">\</span>
</span><span class='line'> --with-ruby-command<span class="o">=</span>/usr/bin/ruby <span class="se">\</span>
</span><span class='line'>
</span><span class='line'>make
</span><span class='line'>make install
</span></code></pre></td></tr></table></div></figure>


<p><code>vim --version</code>で、<code>+lua</code>になっていればOK。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MySQLのTIMESTAMP型からon update CURRENT_TIMESTAMPの設定を外す]]></title>
    <link href="http://blog.nambo.jp/2015/09/08/mysql-remove-on-update-current-timestamp/"/>
    <updated>2015-09-08T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2015/09/08/mysql-remove-on-update-current-timestamp</id>
    <content type="html"><![CDATA[<p>MySQLでこのようにテーブルを作ると&hellip;</p>

<!-- more -->




<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>CREATE TABLE users name TEXT, created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL;</span></code></pre></td></tr></table></div></figure>


<p>created_atに<code>on update CURRENT_TIMESTAMP</code>が付いてしまい、レコード更新時に時刻が自動で上がってしまいます。
これを外すには、</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ALTER TABLE users CHANGE created_at created_at TIMESTAMP NOT NULL CURRENT_TIMESTAMP;</span></code></pre></td></tr></table></div></figure>


<p>以上です。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Dokcerのコンテナ間リンクの方法 WordPressコンテナとMySQLコンテナをリンクさせてみる]]></title>
    <link href="http://blog.nambo.jp/2015/02/19/docker-container-link/"/>
    <updated>2015-02-19T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2015/02/19/docker-container-link</id>
    <content type="html"><![CDATA[<p>Dockerの運用では、1プロセス1コンテナが基本ですが、複数コンテナを連携させるにはどうすればよいでしょうか？</p>

<p>例えば、WordPressを立ち上げるとすると、WordPress本体を動かすコンテナとMySQLなどのデータベースコンテナ、ApacheやNginxなどのWebサーバコンテナを別に用意する場合もあるでしょう。</p>

<!-- more -->


<p>WordPressでは、<code>wp-config.php</code>にDBの接続情報を記述しますが、例えばhostの部分はデフォルトでは<code>localhost</code>になっています。</p>

<figure class='code'><figcaption><span>wp-config.php</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_HOST&#39;</span><span class="p">,</span> <span class="s1">&#39;localhost&#39;</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>ここにMySQLコンテナのIPを記述したいわけですが、どうすればいいでしょうか？</p>

<p><code>docker inspect</code>などでIPアドレスを調べることができますが、そこで調べた値をハードコードしてしまってはDockerのimmutableなメリットが失われてしまいます。</p>

<p>そこで、<code>--link</code>オプションによるコンテナ間リンクです。</p>

<p>MySQLコンテナが<code>mysql</code>という名前で既に立ち上がっているとします。<br/>
これにリンクする形でWordPressコンテナを立ち上げてみましょう。</p>

<p><code>--link</code>オプションで、リンク先のコンテナ名とエイリアス名を指定するだけです。<br/>
（imageは、WordPress入りのものをPullしてもいいですし、Dockerfileを使うなどしてもいいですが、ここではとりあえずcentos6をベースに立ち上げます。WordPressは各自インストールしてください。）</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>docker run -it -p 80 --link mysql:db --name wordpress centos:6 /bin/bash
</span></code></pre></td></tr></table></div></figure>


<p><code>--link mysql:db</code>で、あらかじめ立ち上げてある<code>mysql</code>というnameのコンテナを<code>db</code>というaliasでリンクしています。</p>

<p>これにより、立ち上がったコンテナの環境変数にmysqlコンテナの情報がセットされます。 <br/>
<code>env</code>を見てみるとちゃんとセットされていることが確認できます。 <br/>
関連する項目を抜粋すると、以下の通り。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>env
</span><span class='line'><span class="nv">DB_PORT</span><span class="o">=</span>tcp://172.17.0.1:3306
</span><span class='line'><span class="nv">DB_PORT_3306_TCP_PORT</span><span class="o">=</span>3306
</span><span class='line'><span class="nv">DB_PORT_3306_TCP_PROTO</span><span class="o">=</span>tcp
</span><span class='line'><span class="nv">DB_PORT_3306_TCP_ADDR</span><span class="o">=</span>172.17.0.1
</span><span class='line'><span class="nv">DB_PORT_3306_TCP</span><span class="o">=</span>tcp://172.17.0.1:3306
</span></code></pre></td></tr></table></div></figure>


<p>これらの環境変数を参照することで、MySQLコンテナのIPなどをプログラム上で使うことができます。 <br/>
さらに、<code>/etc/hosts</code>を見てみると&hellip;</p>

<figure class='code'><figcaption><span>/etc/hosts</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>172.17.0.2  abc0123def45
</span><span class='line'>127.0.0.1 localhost
</span><span class='line'>::1 localhost ip6-localhost ip6-loopback
</span><span class='line'>fe00::0 ip6-localnet
</span><span class='line'>ff00::0 ip6-mcastprefix
</span><span class='line'>ff02::1 ip6-allnodes
</span><span class='line'>ff02::2 ip6-allrouters
</span><span class='line'>172.17.0.1  db
</span></code></pre></td></tr></table></div></figure>


<p>こちらにも情報がセットされています！ <br/>
これでWordPressの<code>wp-config.php</code>の記述も簡単です。</p>

<figure class='code'><figcaption><span>wp-config.php</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_HOST&#39;</span><span class="p">,</span> <span class="s1">&#39;db&#39;</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>これだけ！ <br/>
以上、Dockerのコンテナ間リンクの簡単な説明でした。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DockerコンテナにSensuをインストールする]]></title>
    <link href="http://blog.nambo.jp/2015/02/10/sensu-server-docker/"/>
    <updated>2015-02-10T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2015/02/10/sensu-server-docker</id>
    <content type="html"><![CDATA[<p>サーバー監視ツール<a href="http://sensuapp.org/">Sensu</a>を、<a href="https://www.docker.com/">Docker</a>コンテナにインストールした時のメモです。 <br/>
SensuはChefやPuppetを使ってのインストールが推奨されていますが、今回はコマンドを一つ一つ打って構築してみました。</p>

<!-- more -->




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>docker run -it -p 3000 -p 4567 -p 5671 -p 15672 --name sensu centos:centos6 /bin/bash
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>yum update -y
</span><span class='line'><span class="nv">$ </span>yum install -y wget tar logrotate
</span></code></pre></td></tr></table></div></figure>


<p>SSL証明書、認証局の作成</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span><span class="nb">cd</span> /tmp
</span><span class='line'><span class="nv">$ </span>wget http://sensuapp.org/docs/0.16/tools/ssl_certs.tar
</span><span class='line'><span class="nv">$ </span>tar xvf ssl_certs.tar
</span><span class='line'><span class="nv">$ </span><span class="nb">cd </span>ssl_certs
</span><span class='line'><span class="nv">$ </span>./ssl_certs.sh generate
</span></code></pre></td></tr></table></div></figure>


<p>RabbitMQのインストール</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
</span><span class='line'><span class="nv">$ </span>rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.1/rabbitmq-server-3.2.1-1.noarch.rpm
</span><span class='line'><span class="nv">$ </span>service rabbitmq-server start
</span></code></pre></td></tr></table></div></figure>


<p>SSLの設定</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>mkdir -p /etc/rabbitmq/ssl
</span><span class='line'><span class="nv">$ </span>cp -a sensu_ca/cacert.pem /etc/rabbitmq/ssl/
</span><span class='line'><span class="nv">$ </span>cp -a server/cert.pem /etc/rabbitmq/ssl/
</span><span class='line'><span class="nv">$ </span>cp -a server/key.pem /etc/rabbitmq/ssl/
</span><span class='line'><span class="nv">$ </span>vi /etc/rabbitmq/rabbitmq.config
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/rabbitmq/rabbitmq.config</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">[</span>
</span><span class='line'>  <span class="p">{</span><span class="err">rabbit,</span> <span class="err">[</span>
</span><span class='line'>  <span class="err">{ssl_listeners,</span> <span class="err">[5671]</span><span class="p">},</span>
</span><span class='line'>  <span class="p">{</span><span class="err">ssl_options,</span> <span class="err">[{cacertfile,</span><span class="nt">&quot;/etc/rabbitmq/ssl/cacert.pem&quot;</span><span class="p">},</span>
</span><span class='line'>                 <span class="p">{</span><span class="err">certfile,</span><span class="nt">&quot;/etc/rabbitmq/ssl/cert.pem&quot;</span><span class="p">},</span>
</span><span class='line'>                 <span class="p">{</span><span class="err">keyfile,</span><span class="nt">&quot;/etc/rabbitmq/ssl/key.pem&quot;</span><span class="p">},</span>
</span><span class='line'>                 <span class="p">{</span><span class="err">verify,verify_peer</span><span class="p">},</span>
</span><span class='line'>                 <span class="p">{</span><span class="err">fail_if_no_peer_cert,true</span><span class="p">}]</span><span class="err">}</span>
</span><span class='line'>  <span class="err">]}</span>
</span><span class='line'><span class="err">].</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>service rabbitmq-server restart
</span><span class='line'><span class="nv">$ </span>rabbitmqctl add_vhost /sensu
</span></code></pre></td></tr></table></div></figure>


<p>RabbitMQのSensuユーザー作成 <br/>
<code>PASSWORD</code>は各自設定してください。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>rabbitmqctl add_user sensu PASSWORD
</span><span class='line'><span class="nv">$ </span>rabbitmqctl set_permissions -p /sensu sensu <span class="s2">&quot;.*&quot;</span> <span class="s2">&quot;.*&quot;</span> <span class="s2">&quot;.*&quot;</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>rabbitmq-plugins <span class="nb">enable </span>rabbitmq_management
</span><span class='line'><span class="nv">$ </span>service rabbitmq-server restart
</span></code></pre></td></tr></table></div></figure>


<p>管理用アカウントの作成</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>rabbitmqctl add_user admin PASSWORD
</span><span class='line'><span class="nv">$ </span>rabbitmqctl set_user_tags admin administrator
</span></code></pre></td></tr></table></div></figure>


<p>Redisのインストール</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>yum install -y redis
</span><span class='line'><span class="nv">$ </span>service redis start
</span></code></pre></td></tr></table></div></figure>


<p>Sensuのインストール</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>vi /etc/yum.repos.d/sensu.repo
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/yum.repos.d/sensu.repo</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="o">[</span>sensu<span class="o">]</span>
</span><span class='line'><span class="nv">name</span><span class="o">=</span>sensu-main
</span><span class='line'><span class="nv">baseurl</span><span class="o">=</span>http://repos.sensuapp.org/yum/el/<span class="nv">$releasever</span>/<span class="nv">$basearch</span>/
</span><span class='line'><span class="nv">gpgcheck</span><span class="o">=</span>0
</span><span class='line'><span class="nv">enabled</span><span class="o">=</span>1
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>yum install -y sensu
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>mkdir -p /etc/sensu/ssl
</span><span class='line'><span class="nv">$ </span>cp -a client/cert.pem /etc/sensu/ssl/
</span><span class='line'><span class="nv">$ </span>cp -a client/key.pem /etc/sensu/ssl/
</span><span class='line'><span class="nv">$ </span>vi /etc/sensu/conf.d/rabbitmq.json
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/sensu/conf.d/rabbitmq.json</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;rabbitmq&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;ssl&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>      <span class="nt">&quot;cert_chain_file&quot;</span><span class="p">:</span> <span class="s2">&quot;/etc/sensu/ssl/cert.pem&quot;</span><span class="p">,</span>
</span><span class='line'>      <span class="nt">&quot;private_key_file&quot;</span><span class="p">:</span> <span class="s2">&quot;/etc/sensu/ssl/key.pem&quot;</span>
</span><span class='line'>    <span class="p">},</span>
</span><span class='line'>    <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;localhost&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;port&quot;</span><span class="p">:</span> <span class="mi">5671</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;vhost&quot;</span><span class="p">:</span> <span class="s2">&quot;/sensu&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;user&quot;</span><span class="p">:</span> <span class="s2">&quot;sensu&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;password&quot;</span><span class="p">:</span> <span class="s2">&quot;PASSWORD&quot;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>vi /etc/sensu/conf.d/redis.json
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/sensu/conf.d/redis.json</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;redis&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;localhost&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;port&quot;</span><span class="p">:</span> <span class="mi">6379</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>vi /etc/sensu/conf.d/api.json
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/sensu/conf.d/api.json</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;api&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;localhost&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;port&quot;</span><span class="p">:</span> <span class="mi">4567</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;user&quot;</span><span class="p">:</span> <span class="s2">&quot;admin&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;password&quot;</span><span class="p">:</span> <span class="s2">&quot;PASSWORD&quot;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>vi /etc/sensu/conf.d/client.json
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/sensu/conf.d/client.json</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;client&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Sensu-Server&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;address&quot;</span><span class="p">:</span> <span class="s2">&quot;localhost&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;subscriptions&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;all&quot;</span> <span class="p">]</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Sensuの起動</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>service sensu-server start
</span><span class='line'><span class="nv">$ </span>service sensu-client start
</span><span class='line'><span class="nv">$ </span>service sensu-api start
</span></code></pre></td></tr></table></div></figure>


<p>続いて、Sensuのダッシュボード Uchiwa をインストールする。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>yum install -y uchiwa
</span><span class='line'><span class="nv">$ </span>vi /etc/sensu/uchiwa.json
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>/etc/sensu/uchiwa.json</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;sensu&quot;</span><span class="p">:</span> <span class="p">[</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Sensu&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;localhost&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;ssl&quot;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;port&quot;</span><span class="p">:</span> <span class="mi">4567</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;user&quot;</span><span class="p">:</span> <span class="s2">&quot;admin&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;pass&quot;</span><span class="p">:</span> <span class="s2">&quot;PASSWORD&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;path&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;timeout&quot;</span><span class="p">:</span> <span class="mi">5000</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">],</span>
</span><span class='line'>    <span class="nt">&quot;uchiwa&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>        <span class="nt">&quot;user&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span class='line'>        <span class="nt">&quot;pass&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span class='line'>        <span class="nt">&quot;port&quot;</span><span class="p">:</span> <span class="mi">3000</span><span class="p">,</span>
</span><span class='line'>        <span class="nt">&quot;stats&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
</span><span class='line'>        <span class="nt">&quot;refresh&quot;</span><span class="p">:</span> <span class="mi">10000</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>service uchiwa start
</span></code></pre></td></tr></table></div></figure>


<p><code>http://&lt;コンテナIP&gt;:3000/</code>にアクセスしてダッシュボードが表示されればOK！</p>

<p> 参考：<a href="http://qiita.com/hal-k/items/18ccec8c8e1c440260b6">Sensuのchef/puppetを使わないセットアップ &ndash; Qiita</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[動作中のDockerコンテナにファイルをコピーする方法]]></title>
    <link href="http://blog.nambo.jp/2015/02/09/docker-exec-cat/"/>
    <updated>2015-02-09T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2015/02/09/docker-exec-cat</id>
    <content type="html"><![CDATA[<p>Dockerコンテナからホストへは、<code>docker cp</code>コマンドでファイルをコピーできますが、その逆をやるのはなかなか面倒でした。</p>

<!-- more -->


<p>しかし、Docker 1.3から<code>docker exec</code>というコマンドでコンテナにアクセスできるようになりました。 <br/>
たとえば、コンテナのプロセスを見たい場合は、</p>

<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>docker <span class="nb">exec</span> -it <span class="k">${</span><span class="nv">container_id</span><span class="k">}</span> | ps -a
</span></code></pre></td></tr></table></div></figure>


<p>などといった具合です。</p>

<p>これを応用すれば、以下のようなコマンドでファイルのコピーが実現できます。</p>

<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>docker <span class="nb">exec</span> -i <span class="k">${</span><span class="nv">container_id</span><span class="k">}</span> /bin/bash -c <span class="s1">&#39;cat &gt; /path/to/file&#39;</span> &lt; /path/to/file
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ChromeでPDFファイルなどをダウンロードさせない方法]]></title>
    <link href="http://blog.nambo.jp/2014/12/01/chrome-pdf-inline/"/>
    <updated>2014-12-01T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/12/01/chrome-pdf-inline</id>
    <content type="html"><![CDATA[<p>Google ChromeでPDFファイルなどを開いた時に、内蔵ビューアーで開いて欲しいのにダウンロードされてしまい悲しい思いをすることがあります。</p>

<!-- more -->


<p>これは、HTMLの<code>Content-Disposition</code>が<code>attachment</code>に設定されているためです。 <br/>
よって、この部分を強制的に<code>inline</code>に書き換えてあげればいいわけです。</p>

<p>拡張機能を自作しようかと思いますたが、先人がいましたので紹介します。 <br/>
<a href="https://chrome.google.com/webstore/detail/undisposition/hjfncfijclafkkfifjelofbeclipplfi">Undisposition &ndash; Chrome ウェブストア</a></p>

<p>逆に、強制的にダウンロードしたい場合は、設定でChrome PDF Viewerのプラグインを無効にしてしまいましょう。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mac OSX Yosemiteで通知センターの設定が保存されない場合の対処法]]></title>
    <link href="http://blog.nambo.jp/2014/10/29/yosemite-notificationcenter/"/>
    <updated>2014-10-29T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/10/29/yosemite-notificationcenter</id>
    <content type="html"><![CDATA[<p>Mac OS X をYosemite（10.10）にアップデートしたところ、システム環境設定の通知センターの設定が、設定すれど設定すれど元に戻ってしまう現象が発生したので、対処方法をメモしておきます。</p>

<!-- more -->


<ol>
<li>FinderでLibrary > Application Support内の<code>NotificationCenter</code>フォルダを適当な場所（デスクトップなど）に移動する。</li>
<li>ターミナルを起動し、以下のコマンドを打ち込む</li>
</ol>


<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span><span class="nb">cd</span> <span class="sb">`</span>getconf DARWIN_USER_DIR<span class="sb">`</span>
</span><span class='line'><span class="nv">$ </span>rm -rf com.apple.notificationcenter
</span><span class='line'><span class="nv">$ </span>killall usernoted
</span><span class='line'><span class="nv">$ </span>killall NotificationCenter
</span></code></pre></td></tr></table></div></figure>


<ol>
<li>ターミナルを終了し再起動</li>
<li>1で移動した<code>NotificationCenter</code>フォルダを元の場所に戻す</li>
</ol>


<p>以上です。</p>

<p>当方の環境ではこれで、通知センターの設定がリセットされることはなくなりました。</p>

<p>参考：<a href="https://discussions.apple.com/thread/6614198">Notifications preferences don&rsquo;t hold | Apple Support Communities</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Macのターミナルのopenコマンドでアプリを指定して開く方法]]></title>
    <link href="http://blog.nambo.jp/2014/09/03/mac-terminal-open/"/>
    <updated>2014-09-03T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/09/03/mac-terminal-open</id>
    <content type="html"><![CDATA[<p>Macのターミナルからアプリを開きたい時、<br/>
例えばXcodeのプロジェクトを開きたいときなどは、</p>

<!-- more -->




<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>open hoge.xcodeproj
</span></code></pre></td></tr></table></div></figure>


<p>などとすればXcodeが起動されプロジェクトファイルが開きますが、beta版など複数のXcodeがインストールされている状態だと、意図しないバージョンが起動しイライラすることがあります。<br/>
そのような時は、<code>-a</code>オプションでアプリケーションを指定すればOKです。</p>

<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>open -a <span class="s2">&quot;/Applications/Xcode.app&quot;</span> hoge.xcodeproj
</span></code></pre></td></tr></table></div></figure>


<p>エイリアスに追加しておくと便利かもしれませんね。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iOSシミュレータに自己証明書（オレオレ証明書）をインストールする方法]]></title>
    <link href="http://blog.nambo.jp/2014/08/19/ios-simulator-crt/"/>
    <updated>2014-08-19T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/08/19/ios-simulator-crt</id>
    <content type="html"><![CDATA[<p>iOSアプリ開発において、SSLの自己証明書（オレオレ証明書）を使用した開発用サーバーにアクセスしたいケースがあるかと思います。<br/>
しかしながら、NSURLConnectionで通信しようとするとエラーで失敗してしまいます。
<code>NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)</code></p>

<!-- more -->


<p>回避策として、非公開APIを使ってNSURLRequestを拡張し、すべてのHTTPSアクセスを許可してしまう方法を解説しているサイトも多いですが、あまり賢い方法とは思えません。<br/>
証明書を端末（シミュレータ）にインストールするのが賢明でしょう。</p>

<p>実機へのインストールはiPhone構成ユーティリティを使えばできますが、シミュレータは？？<br/>
と思い、調べたらもっと簡単だったのでメモしておきます。</p>

<p><img src="https://farm4.staticflickr.com/3924/14965805645_80c8c2009d_o.png" title="iOSシミュレータ" ></p>

<p>なんと、crtファイルをiOSシミュレータにドラッグ＆ドロップするだけでした。<br/>
以上です。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Gitでタグの名前を変更（編集）する方法]]></title>
    <link href="http://blog.nambo.jp/2014/06/24/git-tag-rename/"/>
    <updated>2014-06-24T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/06/24/git-tag-rename</id>
    <content type="html"><![CDATA[<p>Gitでtagの名前を誤って付けてしまうなどして、後から変更したくなることがあると思います。<br/>
そのような時は、タグを付け替えることで対応します。</p>

<!-- more -->


<p>既に存在する<code>v1.0</code>というタグを<code>v2.0</code>というタグにrenameするケースを考えます。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git tag v2.0 v1.0
</span></code></pre></td></tr></table></div></figure>


<p>これで、<code>v1.0</code>と同じコミットに<code>v2.0</code>という新しいタグが付けられます。<br/>
続いてtag<code>v1.0</code>を削除します。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git tag -d v1.0
</span></code></pre></td></tr></table></div></figure>


<p>以上で完了です。</p>

<p>リモートリポジトリにも反映させるには、このようにそれぞれPushします。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git push origin :refs/tags/v1.0
</span><span class='line'><span class="nv">$ </span>git push origin :refs/tags/v2.0
</span></code></pre></td></tr></table></div></figure>


<p>こうすることで、リモートリポジトリからも<code>v1.0</code>タグが消え、同じコミットに<code>v2.0</code>タグが付きます。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CentOSにDockerをインストールする]]></title>
    <link href="http://blog.nambo.jp/2014/06/09/centos-docker/"/>
    <updated>2014-06-09T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/06/09/centos-docker</id>
    <content type="html"><![CDATA[<p>最近流行りのコンテナ型仮想化技術<a href="http://www.docker.com/">Docker</a>。<br/>
CentOSにインストールしてみましたので、方法をメモしておきます。</p>

<!-- more -->


<p>DockerのCentOSサポートは6.5以降ですので、6.4未満の場合はアップデートが必要です。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>sudo yum update -y
</span></code></pre></td></tr></table></div></figure>


<p>リポジトリを追加して<code>yum install docker-io</code>したらあとは起動するだけです。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>sudo yum -y install http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
</span><span class='line'><span class="nv">$ </span>sudo yum -y install docker-io
</span><span class='line'><span class="nv">$ </span>sudo service docker start
</span></code></pre></td></tr></table></div></figure>


<p>自動起動設定も入れておきましょう。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>sudo chkconfig docker on
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>docker -v
</span><span class='line'>Docker version 0.11.1, build fb99f99/0.11.1
</span></code></pre></td></tr></table></div></figure>


<p>以上でDockerが使えるようになりました。</p>

<p>追記：2014.06.24<br/>
バージョン1.0がリリースされたのでアップデートしました。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>sudo yum -y update docker-io
</span><span class='line'><span class="nv">$ </span>docker -v
</span><span class='line'>Docker version 1.0.0, build 63fe64c/1.0.0
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[bashのコマンド履歴（history）に重複コマンドを保存しない設定]]></title>
    <link href="http://blog.nambo.jp/2014/05/26/bash-histcontrol-ignoredups/"/>
    <updated>2014-05-26T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/05/26/bash-histcontrol-ignoredups</id>
    <content type="html"><![CDATA[<p>historyコマンドを打つと、直近使用したコマンドの履歴が表示されますが、
重複したコマンドは保存する必要がない場合も多いでしょう。</p>

<!-- more -->


<p><code>~/.bash_profile</code>に次の1行を追加すれば、以後、2回連続で使用したコマンドは保存されなくなります。</p>

<figure class='code'><figcaption><span>~/.bash_profile</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">export </span><span class="nv">HISTCONTROL</span><span class="o">=</span>ignoredups:erasedups
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Macのターミナルでisoイメージを作成する方法]]></title>
    <link href="http://blog.nambo.jp/2014/05/08/make-iso-mac/"/>
    <updated>2014-05-08T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2014/05/08/make-iso-mac</id>
    <content type="html"><![CDATA[<p>Macでisoイメージを作成する場合、一般的にはディスクユーティリティーを使用しますが、ターミナルの操作に慣れている方は、コマンド一発で済むのでこちらの方がはるかに簡単です。</p>

<!-- more -->


<p>コマンドは以下の通り。
isoにしたいディレクトリをDIRの部分に指定してください。</p>

<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>hdiutil makehybrid -iso -joliet -o hoge.iso DIR
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Gitのリモートリポジトリのブランチを削除する方法]]></title>
    <link href="http://blog.nambo.jp/2013/12/13/git-delete-remote-branch/"/>
    <updated>2013-12-13T10:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/12/13/git-delete-remote-branch</id>
    <content type="html"><![CDATA[<p>Gitでリモートリポジトリのブランチを削除する方法です。</p>

<!--  more -->


<p><code>remote1</code>という名前のリモートリポジトリに<code>hoge_branch</code>というブランチがあるとして。</p>

<p>ローカルブランチを削除。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git branch -d hoge_branch
</span></code></pre></td></tr></table></div></figure>


<p>リモートブランチを削除。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git push remote1 :hoge_branch
</span></code></pre></td></tr></table></div></figure>


<p>または、</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git push --delete remote1 hoge_branch
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Gitでリモートリポジトリの特定のブランチの最新のリビジョンのみをcloneする方法]]></title>
    <link href="http://blog.nambo.jp/2013/12/12/git-clone-depth-1/"/>
    <updated>2013-12-12T00:30:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/12/12/git-clone-depth-1</id>
    <content type="html"><![CDATA[<p>Gitでリモートリポジトリの特定のブランチのみをcloneしたい。 <br/>
それも最新のリビジョンのみでいい。</p>

<!-- more -->


<p>いつもコマンドを忘れてしまうのでメモ。</p>

<figure class='code'><figcaption><span>ターミナル</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git clone --depth 1 --single-branch -b &lt;branch&gt; &lt;repository&gt;
</span></code></pre></td></tr></table></div></figure>


<p>最新リビジョンのみの指定が<code>--depth 1</code>です。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iOS 7でUINavigationControllerのスワイプで戻るを無効にする方法]]></title>
    <link href="http://blog.nambo.jp/2013/11/29/disable-uinavigationcontroller-popgesture/"/>
    <updated>2013-11-29T17:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/11/29/disable-uinavigationcontroller-popgesture</id>
    <content type="html"><![CDATA[<p>iOS 7では<code>UINavigationController</code>のスワイプジェスチャーによる<code>戻る</code>機能が標準になりました。 <br/>
しかしアプリによってはこれを無効にしたいケースも多いかと思います。</p>

<!-- more -->


<p>そんな時は、<code>UINavigationController</code>の<code>interactivePopGestureRecognizer.enabled</code>を<code>NO</code>に設定すればOK。</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
</span><span class='line'>  self.navigationController.interactivePopGestureRecognizer.enabled = NO;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>これで「スワイプで戻る」が無効になります。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Google ChromeでURLの補完候補を個別に削除する方法]]></title>
    <link href="http://blog.nambo.jp/2013/11/28/chrome-url-suggest-off/"/>
    <updated>2013-11-28T18:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/11/28/chrome-url-suggest-off</id>
    <content type="html"><![CDATA[<p>Google ChromeのアドレスバーのURL補完機能はとても強力で大変便利なのですが、
誤入力してしまったアドレスなど、不要な候補が残ってしまい不便に感じることもあります。</p>

<!-- more -->


<p>そんな不要な補完候補を個別に削除する方法です。</p>

<p>アドレスバーにURLの一部を入力し、候補がハイライトされている状態で、 <br/>
Windowsなら<code>shift + delete</code> <br/>
Macなら<code>shift + fn + delete</code></p>

<p>これでURL補完候補を削除できます。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Objective-CのKVO（キー値監視）の使い方]]></title>
    <link href="http://blog.nambo.jp/2013/11/27/objective-c-kvo/"/>
    <updated>2013-11-27T18:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/11/27/objective-c-kvo</id>
    <content type="html"><![CDATA[<p>Objective-C（というかCocoa, Mac, iOS）のキー値監視（KVO, Key-Value Observing）の簡単な使い方です。</p>

<!-- more -->


<p><code>NSMutableDictionary</code>の特定のキーの値に変化があった時に通知する場合を考えます。</p>

<p><code>key1</code>と<code>key2</code>で構成されるdictionaryを作り、<code>key1</code>を<code>addObserver:self forKeyPath:@"key1"</code>で監視対象に設定します。</p>

<p>通知のオプションは二つあり、 <br/>
<code>NSKeyValueObservingOptionNew</code>は変更後の値を、 <br/>
<code>NSKeyValueObservingOptionOld</code>は変更前の値を通知するオプションです。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="n">NSMutableDictionary</span> <span class="o">*</span><span class="n">dict</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSMutableDictionary</span> <span class="nl">dictionaryWithDictionary:</span><span class="err">@</span><span class="p">{</span><span class="s">@&quot;key1&quot;</span><span class="o">:</span><span class="s">@&quot;This is key1.&quot;</span><span class="p">,</span> <span class="s">@&quot;key2&quot;</span><span class="o">:</span><span class="s">@&quot;This is key2.&quot;</span><span class="p">}];</span>
</span><span class='line'><span class="p">[</span><span class="n">dict</span> <span class="nl">addObserver:</span><span class="n">self</span> <span class="nl">forKeyPath:</span><span class="s">@&quot;key1&quot;</span> <span class="nl">options:</span><span class="n">NSKeyValueObservingOptionNew</span><span class="o">|</span><span class="n">NSKeyValueObservingOptionOld</span> <span class="nl">context:</span><span class="nb">nil</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>


<p><code>key1</code>の値を変更してみます。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="p">[</span><span class="n">dict</span> <span class="nl">setObject:</span><span class="s">@&quot;Hello!&quot;</span> <span class="nl">forKey:</span><span class="s">@&quot;key1&quot;</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>


<p>すると、次のメソッドが呼ばれます。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">observeValueForKeyPath:</span><span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">keyPath</span> <span class="nf">ofObject:</span><span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nv">object</span> <span class="nf">change:</span><span class="p">(</span><span class="n">NSDictionary</span> <span class="o">*</span><span class="p">)</span><span class="nv">change</span> <span class="nf">context:</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span><span class="nv">context</span> <span class="p">{</span>
</span><span class='line'>  <span class="n">NSLog</span><span class="p">(</span><span class="s">@&quot;%@&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">change</span> <span class="n">description</span><span class="p">]);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>出力されるログは以下の通り。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="n">kind</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'>  <span class="n">new</span> <span class="o">=</span> <span class="s">&quot;Hello!&quot;</span><span class="p">;</span>
</span><span class='line'>  <span class="n">old</span> <span class="o">=</span> <span class="s">&quot;This is key1.&quot;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>不要になったら通知の解除を忘れずに。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="p">[</span><span class="n">dict</span> <span class="nl">removeObserver:</span><span class="n">self</span> <span class="nl">forKeyPath:</span><span class="s">@&quot;key1&quot;</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>


<p>簡単ですね。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[RailsのActionMailerでGmailを使用する設定]]></title>
    <link href="http://blog.nambo.jp/2013/11/27/use-gmail-on-rails-action-mailer/"/>
    <updated>2013-11-27T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/11/27/use-gmail-on-rails-action-mailer</id>
    <content type="html"><![CDATA[<p>Railsのメール送信機能<code>ActionMailer</code>で、Gmailからメールを送信したい時の設定方法です。</p>

<!-- more -->


<p><code>config/environments/development.rb</code>（または<code>production.rb</code>）に以下のように記述します。</p>

<figure class='code'><figcaption><span>config/environments/development.rb</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="n">config</span><span class="o">.</span><span class="n">action_mailer</span><span class="o">.</span><span class="n">smtp_settings</span> <span class="o">=</span> <span class="p">{</span>
</span><span class='line'>  <span class="ss">:enable_starttls_auto</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:address</span> <span class="o">=&gt;</span> <span class="s2">&quot;smtp.gmail.com&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:port</span> <span class="o">=&gt;</span> <span class="mi">587</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:domain</span> <span class="o">=&gt;</span> <span class="s2">&quot;gmail.com&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:authentication</span> <span class="o">=&gt;</span> <span class="ss">:login</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:user_name</span> <span class="o">=&gt;</span> <span class="s2">&quot;user_name&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:password</span> <span class="o">=&gt;</span> <span class="s2">&quot;password&quot;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>以上です。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iOS7でUITableViewのSeparator（区切り線）を左端から表示する方法]]></title>
    <link href="http://blog.nambo.jp/2013/11/19/ios7-uitableview-separator/"/>
    <updated>2013-11-19T06:00:00+09:00</updated>
    <id>http://blog.nambo.jp/2013/11/19/ios7-uitableview-separator</id>
    <content type="html"><![CDATA[<p>iOS 7からUITableViewのCell間のセパレータが左端から少し離れるデザインになりました。 <br/>
iOS 6とのデザインの統一を図りたい場合など、今まで同様、ラインを左端にピッタリくっつけて表示させたいこともあるでしょう。</p>

<!-- more -->


<p><img src="http://farm4.staticflickr.com/3783/10939829635_3d8f91e940_o.png" title="UITableView" ></p>

<p>UIAppearance一発で解決できます。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="p">[</span><span class="n">UITableView</span> <span class="n">appearance</span><span class="p">].</span><span class="n">separatorInset</span>  <span class="o">=</span> <span class="n">UIEdgeInsetsZero</span><span class="p">;</span>
</span></code></pre></td></tr></table></div></figure>


<p>以上です。</p>

<p>[2013.12.11 追記] <br/>
この方法には副作用があるようです。 <br/>
参考：<a href="http://cocoadays.blogspot.jp/2013/12/ios7-uitableview-separatorinset.html">UITableView の境界線を separatorInset= UIEdgeInsetsZero で変えた時の副作用</a></p>

<blockquote><p>ところがこれを使った場合メール送信のモーダルビュー表示で問題が出た。ツールバー上のボタン押下でMFMailComposeViewControllerを表示していたところ、iOS7だとメール編集画面が一瞬表示されてしまった後にすぐに閉じてしまうという現象が出た。</p></blockquote>

<p>というわけで、appearanceで一律に変更するのではなく、以下のように個別に設定した方が良さそうです。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">tableView</span> <span class="nl">setSeparatorInset:</span><span class="n">UIEdgeInsetsZero</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
</feed>
