<?xml version="1.0" encoding="utf-8"?>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:cc="http://web.resource.org/cc/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://kusu.way-nifty.com/blog/">
<title>くすろぐ</title>
<link>http://kusu.way-nifty.com/blog/</link>
<description></description>
<dc:language>ja-JP</dc:language>
<dc:creator></dc:creator>
<dc:date>2013-12-08T16:24:06+09:00</dc:date>


<items>
<rdf:Seq><rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2013/12/regza-2e79.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2013/09/alminium-yggdra.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2013/08/yggdrasil-0017.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2013/06/dvdhddregza-d14.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2013/01/post-225f.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2012/12/centos6gemrubyg.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2012/12/redminephp-b951.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2012/08/tortoisehg3-way.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2012/08/post-8b1e.html" />
<rdf:li rdf:resource="http://kusu.way-nifty.com/blog/2011/03/post-2969.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://kusu.way-nifty.com/blog/2013/12/regza-2e79.html">
<title>ハイビジョンのホームビデオをREGZAで見るときのメモ</title>
<link>http://kusu.way-nifty.com/blog/2013/12/regza-2e79.html</link>
<description>XMedia Recodeを起動。

（現時点でVer 3.1.7.6）



...</description>
<content:encoded><![CDATA[<div>XMedia Recodeを起動。</div>

<div>（現時点でVer 3.1.7.6）</div>

<div></div>

<div>「ファイルを開く」で目的のファイルを選択</div>

<div><img alt="1_2" title="1_2" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/1_2.png" border="0" style="display: block; margin: auto;" /></div>

<div></div>

<div>「形式」タブで「MPEG 2」を選択</div>

<div><img alt="2" title="2" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/2.png" border="0" style="display: block; margin: auto;" />


</div>

<div>「ビデオ」タブの設定</div>

<div><img alt="3_2" title="3_2" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/3_2.png" border="0" style="display: block; margin: auto;" />


<br />


「クロップ／プレビュー」タブ</div>

<div><img alt="4" title="4" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/4.png" border="0" style="display: block; margin: auto;" />


</div>

<div></div>

<div>リストタブ</div>

<div><img alt="5" title="5" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/5.png" border="0" style="display: block; margin: auto;" />


</div>

<div>出力方法を設定</div>

<div><img alt="6" title="6" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/6.png" border="0" style="display: block; margin: auto;" />


</div>

<div>エンコードボタンを押せば保存先のフォルダにmpegファイルができる。</div>

<div><img alt="7" title="7" src="http://kusu.way-nifty.com/photos/uncategorized/2013/12/08/7.png" border="0" style="display: block; margin: auto;" />


</div>

<div>出来たファイルをREGZAの参照先のフォルダに置けばOK</div>

<div></div>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2013-12-08T16:24:06+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2013/09/alminium-yggdra.html">
<title>ALMiniumによる yggdrasilサーバの構築</title>
<link>http://kusu.way-nifty.com/blog/2013/09/alminium-yggdra.html</link>
<description>Yggdrasil（ https://github.com/tkusukawa/...</description>
<content:encoded><![CDATA[<p>Yggdrasil（ <a href="https://github.com/tkusukawa/yggdrasil/wiki">https://github.com/tkusukawa/yggdrasil/wiki</a> ）はLinuxサーバの設定ファイルをSubversionで管理する試みです。</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/23634287" width="360" height="300" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border-style: solid; border-color: rgb(204, 204, 204); border-width: 1px 1px 0px; margin-bottom: 5px;"> </iframe> 

<div>最小限の構成はRubyとSubversionがインストールされていれば動作するのですが、
多数のLinuxサーバを管理する場合はRedmineとJenkinsとを組み合わせて運用するととても便利です。</div>
<p>
<a href="https://cacoo.com/diagrams/85rQ6KXsr5cZKrsH#41F6F">
<img src="https://cacoo.com/diagrams/85rQ6KXsr5cZKrsH-41F6F.png" width="360" height="240" />
</a>
</p>

<div>このSubversion、Redmine、Jenkinsのシナジー効果は本当に素晴らしいので、
多くの人に是非一度使ってみて欲しいところなのですが、
RedmineとJenkinsはRuby,Java,DB,メール等いろいろあってインストールが難しく、
なかなか「気軽にやってみて！」というわけにいきませんでした。</div>

<div>
それが、<a href="http://alminium.github.io/alminium/">ALMinium</a>によって、
Subversion、Redmine、Jenkinsが全てきちんと連係された形でインストールできるようになりました。
ALMiniumはRedmineを含む開発環境インストーラであり、
shinagawa.redineの第2回勉強会で紹介して頂いて知ってはいたのですが、
Jenkinsが含まれていることを知りませんでした。勿体ない。orz
</div>
<div>早速ALMiniumをインストールしてYggdrasilサーバを設定してみたところ、
簡単に構成出来てしまいました。
Subversionのリポジトリ作成やそのユーザ管理もRedmineから設定出来る等、
ツール構成の利便性も抜群です！
自分で一から構築していては、この完成度には到達できないでしょう。</div>
<div>ということで、そのときの手順メモを下記に共有します。</div>


<pre>●CentOS 6.2 を用意
サーバとして使うのでIPアドレスはDHCPではなく、固定にしておきます。
ここでは192.168.1.73にしました。
一応、yum updateをかけておきます。

● ALMiniumのインストール
Redmine＋Subversion＋Jenkinsが一気に入って超絶便利です。
# yum install git
# cd /root
# git clone https://github.com/alminium/alminium.git
# cd alminium
# ./smelt 
いくつか質問に答える。
→ ホスト名：192.168.1.73
→ メールシステム：自分のgmailアカウントを使いました。
→ httpsにする？：しない
→ jenkins入れる？：もちろん
→ SELinux切るけどいい？：いいよ

● Redmineの設定
０．ログイン
&nbsp; &nbsp;&nbsp; http://192.168.1.73/ にアクセス
&nbsp; &nbsp;&nbsp; 右上の「ログイン」から ID/PW=admin/admin でログイン
１．全体設定
&nbsp; &nbsp;&nbsp; 左上メニュー「管理」→「設定」→「リポジトリ」
&nbsp; &nbsp;&nbsp; →「参照用キーワード」に「*」のみを設定
&nbsp; &nbsp;&nbsp; （これでコミットメッセージに#数字があるだけでチケットとリンクします）
２．ユーザ作成
&nbsp; &nbsp;&nbsp; 左上メニュー「管理」→「ユーザ」→「新しいユーザー」で必要なだけユーザを追加
&nbsp; &nbsp;&nbsp; リポジトリ読取用にユーザ「yggdrasil」を作成しておく（メール通知：通知しない）
３．Redmineプロジェクトの作成
&nbsp; &nbsp;&nbsp; 左上メニュー「プロジェクト」→「新しいプロジェクト」
&nbsp; &nbsp;&nbsp; → 名称：yggdrasil
&nbsp; &nbsp;&nbsp; → 識別子：yggdrasil
&nbsp; &nbsp;&nbsp; → SCM：Subversion
&nbsp; &nbsp;&nbsp; → モジュール：リポジトリ、Hudson
&nbsp; &nbsp;&nbsp; で「作成」
４．Redmineプロジェクトの設定
&nbsp; &nbsp;&nbsp; 「設定」→「メンバー」
&nbsp; &nbsp;&nbsp; → 「新しいメンバー」の中からメンバーとロール「開発者」を選んで「追加」ボタン押下

● yggdrasilのセットアップ
１．gemでインストール
# gem install yggdrasil

２．yggdrasilサーバをjenkinsユーザで起動
# vi /etc/passwd
→ jenkinsの行の最後(ログインシェル)を/bin/bashに変更して保存
# su - jenkins
$ yggserve init --port 4000 --repo 'http://192.168.1.73/svn/yggdrasil/{host}' --ro-username yggdrasil --ro-password ********
$ yggserve daemon
$ pgrep yggserve&nbsp; &nbsp;←プロセス番号が返ってくればOK
$ exit

＜以下のyggdrasilの設定は各サーバで実行＞
３．subversionがパスワードを記憶しないように設定（お好みで）
# svn --version
# rm -fr ~/.subversion/auth/svn.simple
# vi ~/.subversion/config
→ [auth]の中の store-auth-creds = no の行のコメントを外す

４．yggdrasilクライアントの初期化
# ygg init --server 192.168.1.73:4000
ホスト名のフォルダを作るか聞いてくる→ 「Y」
ID/PWはRedmineに登録したものが使えます
RedmineのYggdrasilPJのリポジトリでフォルダが作成されていることを確認

５．チェッカースクリプトの設定（お好みで）
チェッカースクリプトはサーバの状態変化を検知するためのもので、
スクリプトの実行結果（標準出力）がSubversionに登録され、
履歴管理されます。
例えば、過去何月何日にマウント状態はどうだった、とか、
gem のバージョンは何だったか、等を調べられるようになります。
（ちゃんとコミットされていれば）

【初回のみ】# svn mkdir http://192.168.1.73/svn/yggdrasil/_checker -m 'mkdir _checker'
# cd ~/.yggdrasil/checker
# svn co http://192.168.1.73/svn/yggdrasil/_checker .

【初回のみ】# vi mount
下記を記入
mount |
grep -v '(.*soft.*)' |
grep -v '(.*bind.*)' |
egrep -v '^sunrpc' |
LC_ALL=C sort

【初回のみ】# vi chkconfig
下記を記入
LC_ALL=C chkconfig --list

【初回のみ】# vi gem_list
下記を記入
gem list

【初回のみ】# vi route
下記を記入
route

【初回のみ】# vi rpm
下記を記入
rpm -qa |
LC_ALL=C sort

【初回のみ】# chmod +x mount chkconfig gem_list route rpm
【初回のみ】# svn add *
【初回のみ】# svn ci -m 'add checker scripts'

６．コミット漏れチェックの定期実行
これによってチェック結果がyggdrasilサーバに通知されるようになります

# crontab -e
下記を追記(@@は00～59に間で適当に散らして設定)
@@ 4 * * * /usr/bin/ygg check --non-interactive &gt;/dev/null 2&gt;&amp;1

７．各種設定ファイルをyggdrasilに登録

<pre># cat &lt;&lt;EOF | while read f; do ls $f &gt;/dev/null 2&gt;&amp;1 &amp;&amp; ygg add $f ; done
/etc/aliases
/etc/auto.automnt
/etc/auto.master
/etc/auto.misc
/etc/auto.net
/etc/cron.deny
/etc/crontab
/etc/exports
/etc/fstab
/etc/group
/etc/gshadow
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/inittab
/etc/login.defs
/etc/logrotate.conf
/etc/modprobe.conf
/etc/ntp.conf
/etc/nscd.conf
/etc/nsswitch.conf
/etc/passwd
/etc/resolv.conf
/etc/shadow
/etc/sudoers
/etc/syslog.conf
/etc/wgetrc
/etc/xinetd.conf
/etc/yum.conf
/etc/chroot_list
/etc/rc.local
/etc/shadow-sudoers.asc
/etc/pam.d/*
/etc/sysconfig/i18n
/etc/sysconfig/network
/etc/sysconfig/static-routes
/etc/sysconfig/iptables*
/etc/sysconfig/network-scripts/ifcfg-eth?
/etc/sysconfig/network-scripts/ifcfg-bond?
/etc/sysconfig/network-scripts/route-eth?
/etc/sysconfig/network-scripts/route-bond?
/etc/sysconfig/rhn/systemid
/etc/postfix/main.cf
/etc/postfix/master.cf
/etc/rc.d/rc
/etc/rc.d/rc.local
/etc/rc.d/rc.sysinit
/etc/rc.d/init.d/*
/etc/ssh/sshd_config
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/chroot_list
/var/spool/cron/*
/etc/logrotate.d/*
/etc/php.ini
/etc/php.d/*.ini
/etc/snmp/snmpd.conf
/etc/modprobe.d/*
EOF
</pre>

８．コミット

<pre># ygg ci -m 'add config files'
</pre>

９．コミット漏れチェック

# ygg c
試しに登録されている設定ファイルを修正して
このコマンドを実行してみることで、
どのような振る舞いになるのかが理解できると思います。

１０．コミット内容の確認
Redmineのリポジトリブラウザ
http://192.168.1.73/projects/yggdrasil/repository
でコミット内容を確認できます。
履歴や差分表示もサポートしていて、
Subversionに不慣れな方にも解りやすく、非常に便利です。

● Jenkinsの設定
１．ログイン
&nbsp; &nbsp;&nbsp; http://192.168.1.73/jenkins/ にアクセス。
&nbsp; &nbsp;&nbsp; PW/ID=admin/admin

２．ジョブ作成
&nbsp; &nbsp;&nbsp; 左メニュー「新規ジョブ作成」
&nbsp; &nbsp;&nbsp; → ジョブ名：yggdrasil
&nbsp; &nbsp;&nbsp; → 「フリースタイル・プロジェクトのビルド」にチェック

３．ジョブの設定
&nbsp; &nbsp;&nbsp; 左上の表示が「Jenkins」→「yggdrail」になっていることを確認し、
&nbsp; &nbsp;&nbsp; 左メニューの「設定」
&nbsp; &nbsp;&nbsp; → プロジェクト名：yggdrasil
&nbsp; &nbsp;&nbsp; → Assign Redmine project： yggdrasil
&nbsp; &nbsp;&nbsp; → ソースコード管理：なし
&nbsp; &nbsp;&nbsp; → ビルド・トリガ：「定期的に実行」
&nbsp; &nbsp;&nbsp; → → スケジュール：「30 5 * * *」
&nbsp; &nbsp;&nbsp; → ビルド「ビルド手順の追加」→「シェルの実行」
&nbsp; &nbsp;&nbsp; →→ シェルスクリプトに下記を記入
------------
#!/bin/bash

echo
date

# 監視ノード数の確認
mv -f /var/lib/jenkins/.yggdrasil/results_list /var/lib/jenkins/.yggdrasil/results_list.last
ls /var/lib/jenkins/.yggdrasil/results/ | sort &gt; /var/lib/jenkins/.yggdrasil/results_list
cnt=`wc -l &lt; /var/lib/jenkins/.yggdrasil/results_list`
echo '監視ノード数: '$cnt

echo
/usr/bin/yggserve results --expire 180 &gt; /var/lib/jenkins/.yggdrasil/jenkins.out
ret=$?

sed -n -e '/^########/,/^\s*$/p' &lt; /var/lib/jenkins/.yggdrasil/jenkins.out | sed -e 's/########/\n########/' &gt; /var/lib/jenkins/.yggdrasil/jenkins.summary
cat /var/lib/jenkins/.yggdrasil/jenkins.out

echo
echo '監視ノード増減：'
diff /var/lib/jenkins/.yggdrasil/results_list.last /var/lib/jenkins/.yggdrasil/results_list | egrep '^&lt;|^&gt;' | sed -e 's/^&lt;/-/' | sed -e 's/^&gt;/+/'

echo
echo '監視ノード一覧：'
cat /var/lib/jenkins/.yggdrasil/results_list

echo
return $ret 2&gt;&amp;- || exit $ret
------------

４．ジョブの実行確認
&nbsp; &nbsp;&nbsp; 左メニュー「ビルド実行」を押下
&nbsp; &nbsp;&nbsp; → しばらくすると「ビルド履歴」に結果が表示される
&nbsp; &nbsp;&nbsp; （初回はいくつかNo such file or directory
&nbsp; &nbsp;&nbsp; が表示されますが問題ありません）
</pre>]]></content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>くす</dc:creator>
<dc:date>2013-09-22T23:33:30+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2013/08/yggdrasil-0017.html">
<title>yggdrasil 0.0.17 released.</title>
<link>http://kusu.way-nifty.com/blog/2013/08/yggdrasil-0017.html</link>
<description>yggdrasil 0.0.17 をリリースしました。



yggdrasil...</description>
<content:encoded><![CDATA[<div><a href="https://rubygems.org/gems/yggdrasil/versions/0.0.17">yggdrasil 0.0.17</a> をリリースしました。</div>

<div></div>

<div>yggdrasilはLinuxサーバで設定ファイルをSubversion管理するためのgem ツールです。</div>
<iframe src="http://www.slideshare.net/slideshow/embed_code/23634287" width="100%" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="max-width: 427px; border-style: solid; border-color: rgb(204, 204, 204); border-width: 1px 1px 0px; margin-bottom: 5px;"> </iframe> <div style="margin-bottom: 5px;"> <strong> <a href="http://www.slideshare.net/tkusukawa/yggdrasil" title="Yggdrasil（ゆぐどらしる） ～ サーバ運用のNo Ticket, No Work ～" target="_blank">Yggdrasil（ゆぐどらしる） ～ サーバ運用のNo Ticket, No Work ～</a> </strong> </div>

<div style="margin-bottom: 5px;">スライドのPDFは<a href="https://docs.google.com/file/d/0Bx6dl5vPWQszaHdpbHF2OU1ub2s/edit?usp=sharing">こちら</a> </div>

<div style="margin-bottom: 5px;"></div>

<div style="margin-bottom: 5px;">長らく 0.0.15から更新できずにおり、この週末に頑張って更新したのですが、0.0.16をリリースしてすぐ、勤め先の利用で問題があることが解ったので0.0.17に上げてしまいました。すみません。</div>

<div style="margin-bottom: 5px;"></div>

<div style="margin-bottom: 5px;"><p class="MsoPlainText"><strong><u>＜<span lang="EN-US">0.0.15</span>からの修正点＞</u></strong></p>

<p class="MsoPlainText">・<span lang="EN-US">update</span>でリビジョンを指定できるように修正 ★今回DBチューニングで必要だった</p>

<p class="MsoPlainText">・<span lang="EN-US">ygg c</span>のプロンプトを<span lang="EN-US">A/q</span>に変更</p>

<p class="MsoPlainText">・デフォルトで<span lang="EN-US">gem list</span>の<span lang="EN-US">checker</span>を作らないように修正</p>

<p class="MsoPlainText">・<span lang="EN-US">check</span>結果の<span lang="EN-US">diff</span>の順序をサマリと一致させた</p>

<p class="MsoPlainText">・<span lang="EN-US">checker</span>スクリプトを強制的に監視対象にした</p>

<p class="MsoPlainText">・<span lang="EN-US">check</span>コマンドのオプションが間違えて居てもエラーにならなかった問題を修正</p>

<p class="MsoPlainText">・差分確認の直後にファイルリストが表示されないように修正</p>

<p class="MsoPlainText">・<span lang="EN-US">Ctrl-C</span>で止めたときに<span lang="EN-US">Ruby</span>のエラー出力が出ないように修正</p>

<p class="MsoPlainText">・チェックしたファイルの数を結果表示するように修正</p>

<p class="MsoPlainText">・ディレクトリの削除をコミットできない問題を修正</p>

<p class="MsoPlainText">・<span lang="EN-US">init</span>で<span lang="EN-US">--non-interactive</span>を付けてもプロンプトが出る場合があった問題の修正</p>

<p class="MsoPlainText">詳細はGitHubを見て下さい→ <span lang="EN-US"><a href="https://github.com/tkusukawa/yggdrasil/commits">https://github.com/tkusukawa/yggdrasil/commits</a></span></p>

<p class="MsoPlainText"></p></div>
<div></div>

<br />
<br />
<br />

<div>ちょっとこの場をお借りしてJenkinsでyggserveを使う情報を共有させて下さい</div>

<p>

「定期実行」で下記のシェルスクリプトを動かしています。
</p>

<pre><span style="color: #0000ff;">echo
# 監視ノード数の計上
cnt=`ls /var/lib/jenkins/.yggdrasil/results/ | wc -l`
echo '監視ノード数: '$cnt

echo
date
/usr/bin/yggserve results --expire 180 &gt; /var/lib/jenkins/.yggdrasil/jenkins.out
ret=$?

sed -n -e '/^########/,/^\s*$/p' &lt; /var/lib/jenkins/.yggdrasil/jenkins.out | sed -e 's/########/\n########/' &gt; /var/lib/jenkins/.yggdrasil/jenkins.summary
cat /var/lib/jenkins/.yggdrasil/jenkins.out

echo
return $ret 2&gt;&amp;- || exit $ret</span>
</pre>

<p>

あと、「Log Parser Plugin」（Parsed Console Output）でエラーを見やすくしたり、
「拡張E-mail通知」を使ったりしてます。
</p>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2013-08-12T12:26:04+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2013/06/dvdhddregza-d14.html">
<title>購入したDVDをHDDに入れてREGZAで見る手順</title>
<link>http://kusu.way-nifty.com/blog/2013/06/dvdhddregza-d14.html</link>
<description>子供が何十回も見たがるDVDはHDDに入れておくと とっても便利なのだが、いつも...</description>
<content:encoded><![CDATA[<p>子供が何十回も見たがるDVDはHDDに入れておくと とっても便利なのだが、いつもやり方を忘れていて試行錯誤するのでメモ。</p>

<div></div>

<div>１．DVD ShrinkでVOBをHDD内に作成</div>

<div></div>

<div></div>

<div>２．XMedia Recodeで「ファイル」メニューの「DVDを開く」にて、１で作ったVOBのフォルダを開く</div>

<div></div>

<div></div>

<div>３．目的の映像を選択状態にする</div>

<div></div>

<div></div>

<div>４．「形式」タブ： プロファイル=カスタム、形式=MPEG2</div>

<div></div>

<div></div>

<div>５．「音声トラック」タブ： 目的のトラックの「モード」を「変換」に、それ以外を「除去」にする</div>

<div></div>

<div></div>

<div>６．「字幕」タブ： 目的の字幕のモードを「レンダ」に、それ以外を除去にする</div>

<div></div>

<div></div>

<div>７．下の「出力方法」を「フォルダに保存」にして、「保存先」を設定</div>

<div>８．「リスト」タブのリストが空であることを確認後、「リストに追加」で項目を追加</div>

<div></div>

<div></div>

<div>９．「エンコード」実行</div>

<div></div>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2013-06-15T22:11:02+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2013/01/post-225f.html">
<title>クラスメソッドをインスタンスメソッドから呼び出す黒魔術</title>
<link>http://kusu.way-nifty.com/blog/2013/01/post-225f.html</link>
<description><![CDATA[Rubyでインスタンスメソッドからクラスメソッドを呼び出す時、&lt;クラス名&...]]></description>
<content:encoded><![CDATA[<p>Rubyでインスタンスメソッドからクラスメソッドを呼び出す時、</p><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div>&lt;クラス名&gt;.&lt;クラスメソッド名&gt;</div></blockquote><div></div>

<div>と書かなければなりません。</div>

<div></div>

<div></div>

<div>Rubｙistの方には当たり前なのだと思うのですが、C++で育った自分としては、</div>

<div>「クラスメソッドは身内なんだし、わざわざレシーバを言わなくても解ってよ！」</div>

<div>って思いが強く、【なんとかならんのか？】と思って検索してみたところ、</div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div></div>

<div><a href="http://oshiete.goo.ne.jp/qa/4910050.html">http://oshiete.goo.ne.jp/qa/4910050.html</a> </div></blockquote><div></div>

<div>が出てきた。</div>

<div>回答は<span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">「self.class.＜クラスメソッド名＞ </span></span><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">でいいんじゃね？」って事で、</span></span><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">自分的には【なんかちがうね】【普通に書こう】って思ってた。</span></span></div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;"><br /></span></span></div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">ところが今週、Yuguiさんの<a href="http://www.oreilly.co.jp/books/9784873113678/">『初めてのRuby(</a></span></span><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.53333282470703px;"><a href="http://www.oreilly.co.jp/books/9784873113678/">電子版</a></span></span><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;"><a href="http://www.oreilly.co.jp/books/9784873113678/">)』</a>を電車の中で読み返していて</span></span><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">はっとしました。そうだ、</span></span><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">Rubyには黒魔術があるじゃないか！</span></span></div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;"><br /></span></span></div>

<div></div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">class Hoge</span></span></div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">&nbsp;</span></span>&nbsp; def method_missing(action, *args)</div>

<div>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; self.class.__send__ action, *args</div>

<div>&nbsp; &nbsp; end</div>

<div></div>

<div></div>

<div>&nbsp; &nbsp; def Hoge.say(message)</div>

<div>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; puts message</div>

<div>&nbsp; &nbsp; end</div>

<div></div>

<div></div>

<div>&nbsp; &nbsp; def hello</div>

<div>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; say &quot;Hello!&quot;</div>

<div>&nbsp; &nbsp; end</div>

<div>end</div>

<div></div>

<div></div>

<div>obj = Hoge.new</div>

<div></div>

<div>obj.hello</div>

<div></div>

<div></div>

<div></div>

<div>これで良さげ。</div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;">だけど、黒魔術はコードが理解しづらくなるから要注意ってことで。</span></span></div>

<div><span style="color: #333333;"><span style="font-family: 'MS PGothic', Arial, Helvetica, sans-serif; font-size: 15px; line-height: 21.549999237060547px;"><br /></span></span></div>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2013-01-12T14:34:27+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2012/12/centos6gemrubyg.html">
<title>Centos6でgemパッケージを作ってrubygems.orgで公開してみた</title>
<link>http://kusu.way-nifty.com/blog/2012/12/centos6gemrubyg.html</link>
<description>ちょっとRubyスクリプトを共有したくて、gemパッケージの作り方を調べたのでメ...</description>
<content:encoded><![CDATA[<p>ちょっとRubyスクリプトを共有したくて、gemパッケージの作り方を調べたのでメモ。</p>

<div></div>

<div>パッケージを作る方法として、newgemやjeweler, bundlerがあり、どれを使うの良いのかなかなか解らなかったのだが、最近は bundler が新しいらしい。</div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>そして、公開方法もrubyforgeに登録する方法、githubを使って公開する方法、rubygems.orgに登録する方法が検索結果に出てきて大いに混乱したが、rubygems.orgに登録する方法が最近の本流っぽい。</div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>そして、bundlerを使った場合、バージョン管理がgitになるのだが、githubとの連携でもはまった。pushでエラーが出て、さんざん調べた結果<a href="https://help.github.com/articles/https-cloning-errors">gitのバージョンが古いとダメ</a>なことが解ったのだが、Centos6でyumをつかってgitをインストールするとVer1.7.1しか入らず、rpmパッケージを探して入れなおす必要があった。</div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>今回作ったのは yggdrasil というもの。現状はHello Worldのみ。今後作りこむ予定。</div>

<div>レアな単語でキーワードとして識別しやすいと思うので、以下、コマンド等でそのまま使います。</div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>パッケージ→ <a href="https://rubygems.org/gems/yggdrasil">https://rubygems.org/gems/yggdrasil</a> </div>

<div>ソース管理→ <a href="https://github.com/tkusukawa/yggdrasil">https://github.com/tkusukawa/yggdrasil</a> </div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>● まず、gitのバージョンアップのメモ（Centos6）</div>

<div></div>

<div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div><div>&nbsp;</div>

<div></div>

<div></div>

<div># git --version&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ←バージョン確認</div>

<div># yum erase git</div>

<div># yum update perl</div>

<div># yum install subversion-perl</div>

<div># yum install perl-YAML</div>

<div># wget http://pkgs.repoforge.org/git/perl-Git-1.7.11.3-1.el6.rfx.x86_64.rpm</div>

<div># wget http://pkgs.repoforge.org/git/git-1.7.11.3-1.el6.rfx.x86_64.rpm</div>

<div># rpm -Uvh perl-Git-1.7.11.3-1.el6.rfx.x86_64.rpm git-1.7.11.3-1.el6.rfx.x86_64.rpm</div></div>

<div></div></blockquote><div></div>

<div>&nbsp;</div>

<div></div>

<div></div>● gemパッケージを作る手順</div>

<div></div>

<div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div>&nbsp;</div>

<div></div>

<div></div>

<div>$ gem install bundler&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ← Redmine(Rails)の環境を作る時に入れてあった</div></blockquote></div>

<div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ bundle gem yggdrasil&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ← yggdrasilディレクトリが出来て雛形が作られる<br />$ cd yggdrasil</p>

<p>$ vi yggdrasil.gemspec&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;← TODOが書かれている箇所等適当に変更</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ vi lib/yggdrasil/version.rb&nbsp; &nbsp;&nbsp; ← リリースする前にバージョンを変える</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ midir bin<br />$ vi bin/yggdrasil&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;← 実行コマンドを作るときはbinの下にコマンドを作る<br />$ cat bin/yggdrasil&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; ← まずはHello Worldでお試し<br />#!/usr/bin/env ruby<br />puts 'Hello World!'</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ git add .</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ git commit -a -m 'initial commit'&nbsp; ← コミットしないとパッケージに含められないみたい</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ rake build&nbsp; &nbsp; ← これでpkg/yggdrasil-0.0.0.gem が作られる</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p># gem install ～/yggdrasil/pkg/yggdrasil-0.0.0.gem&nbsp; ← gemインストールの動作確認</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p># yggdrasil&nbsp; &nbsp;&nbsp; ← インストールされたコマンドの動作確認<br />Hello World!</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p># gem uninstall yggdrasil&nbsp; ←&nbsp; 消しておく</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"></blockquote>● githubでのコード管理</div>

<div>予めgithubでユーザ登録をして、空のgitリポジトリを用意しておく必要があります。</div>

<div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><p>$ git remote add origin https://github.com/tkusukawa/yggdrasil.git&nbsp; ← 作ったリポを指定<br />$ git push -u origin master&nbsp; &nbsp;← ここでgithubのID/PWを聞かれます</p></blockquote><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"></blockquote></div>

<div>● rubygems.orgで世界公開</div>

<div>こちらも予めrubygems.orgでユーザ登録しておく必要があります。</div>

<div></div>

<div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div><div>&nbsp;</div>

<div></div>

<div></div>

<div>$ rake release&nbsp; &nbsp;&nbsp; ← githubのID/PWの後、下記のように失敗する</div>

<div><div>yggdrasil 0.0.0 built to pkg/yggdrasil-0.0.0.gem</div>

<div>Tagged v0.0.0</div>

<div>Username for 'https://github.com': tkusukawa</div>

<div>Password for 'https://tkusukawa@github.com': </div>

<div>Username for 'https://github.com': tkusukawa</div>

<div>Password for 'https://tkusukawa@github.com': </div>

<div>Pushed git commits and tags</div>

<div>Untagged v0.0.0 due to error</div>

<div>rake aborted!</div>

<div>Your rubygems.org credentials aren't set. Run `gem push` to set them.</div>

<div></div>

<div>Tasks: TOP =&gt; release</div>

<div>(See full trace by running task with --trace)</div></div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>$ gem push&nbsp; &nbsp;&nbsp; &nbsp; ← エラーに従ってやってみるが、これもエラーになる</div></div>

<div><div>Enter your RubyGems.org credentials.</div>

<div>Don't have an account yet? Create one at http://rubygems.org/sign_up</div>

<div>&nbsp; &nbsp;Email:&nbsp; &nbsp;t.kusukawa@gmail.com</div>

<div>Password:&nbsp; &nbsp;</div>

<div>Pushing gem to https://rubygems.org...</div>

<div>Signed in.</div>

<div>ERROR:&nbsp; While executing gem ... (Gem::CommandLineError)</div>

<div>&nbsp; &nbsp; Please specify a gem name on the command line (e.g. gem build GEMNAME)</div></div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>$ rake release&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; ← もう一回やってみたらうまく行った。</div>

<div>yggdrasil 0.0.0 built to pkg/yggdrasil-0.0.0.gem</div>

<div>Tagged v0.0.0</div>

<div>Username for 'https://github.com': tkusukawa</div>

<div>Password for 'https://tkusukawa@github.com': </div>

<div>Username for 'https://github.com': tkusukawa</div>

<div>Password for 'https://tkusukawa@github.com': </div>

<div>Pushed git commits and tags</div>

<div>Pushed yggdrasil 0.0.0 to rubygems.org</div>

<div></div></blockquote><div></div>

<div>&nbsp;</div>

<div></div>

<div></div>● 公開gem動作確認</div>

<div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div>&nbsp;</div>

<div></div>

<div></div>

<div># gem install yggdrasil</div>

<div># yggdrasil</div>

<div># gem uninstall yggdrasil</div></blockquote></div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div></div>

<div></div>

<div>こんな感じでプロジェクトのベースがようやくできたが、まる1日かかった。とほほ。</div>

<div></div>

<div></div>

<div></div>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2012-12-16T23:33:02+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2012/12/redminephp-b951.html">
<title>Redmineでphpをリポジトリ表示すると文字化けする</title>
<link>http://kusu.way-nifty.com/blog/2012/12/redminephp-b951.html</link>
<description>Redmine2.1.4 を入れたのだが、phpのファイルをリポジトリ表示すると...</description>
<content:encoded><![CDATA[<p>Redmine2.1.4 を入れたのだが、<br />phpのファイルをリポジトリ表示すると<br />日本語が文字化けしていた。</p>

<div></div>

<div>原因は Coderay がphpをうまく処理できないためらしい。</div>

<div></div>

<div>そこで、プログラムを変えて無理やり</div>

<div>ファイルタイプがphpだった場合は、</div>

<div>java_script として解釈させることにした。</div>

<div></div>

<div><div></div></div>

<div>redmine/lib/redmine/syntax_highlighting.rb</div>

<pre>*** 40,51 ****
--- 40,53 ----
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; # Should not return line numbers nor outer pre tag
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; def highlight_by_filename(text, filename)
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;language = ::CodeRay::FileType[filename]
+&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; language = :java_script if language == 'php' || language == :php
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;language ? ::CodeRay.scan(text, language).html(:break_lines =&gt; true) : ERB::Util.h(text)
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; end
&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; # Highlights +text+ using +language+ syntax
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; # Should not return outer pre tag
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; def highlight_by_language(text, language)
+&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; language = :java_script if language == 'php' || language == :php
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;::CodeRay.scan(text, language).html(:wrap =&gt; :span)
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; end
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; end
</pre>
]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2012-12-06T02:12:04+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2012/08/tortoisehg3-way.html">
<title>TortoiseHGの3-Way Diffの設定（WinMerge, P4Merge）</title>
<link>http://kusu.way-nifty.com/blog/2012/08/tortoisehg3-way.html</link>
<description>Mercurial(TortoiseHG)でマージする際に
設定を変更しないと3...</description>
<content:encoded><![CDATA[<p>Mercurial(TortoiseHG)でマージする際に<br />
設定を変更しないと3-Way Diffが思った動作にならなかったので、<br />
設定方法をメモしときます。</p>

<p>＜環境＞<br />
TortoiseHG 2.4.3<br />
WinMerge 2.12.4.13+--jp-13<br />
P4Merge Rev. p4merge/NTX86/2010.1/271261</p>

<p>＜やり方＞<br />
１．設定ファイルの読み取り専用属性を解除<br />
エクスプローラで<br />
C:\Program Files\TortoiseHg\hgrc.d<br />
を開き、「MergeTools.rc」を右クリック→「プロパティ」を選択<br />
→ 「属性：読み取り専用」のチェックを外して「OK」</p>

<p>２．管理者権限で設定ファイルを編集<br />
 「スタート」－「すべてのプログラム」－「アクセサリ」と開き、<br />
「メモ帳」を右クリックして「管理者として実行(A)...」を選択。</p>

<p>メモ帳のメニューから「ファイル」－「開く」<br />
→ファイルの種類を「テキスト文書(*.txt)」を「全てのファイル(*.*)」に変更して<br />
C:\Program Files\TortoiseHg\hgrc.d\MergeTools.rc<br />
を選択して「開く」</p>

<p>p4merge.diff3args=$child $parent1 $parent2<br />
↓<br />
p4merge.diff3args=$child $parent1 $parent2 $child<br />
（マージ結果の保存ファイルをいちいち指定する必要が無くなります）</p>

<p>winmergeu.diff3args=<br />
↓<br />
winmergeu.diff3args=/e /x /wl /ub $parent1 $child $parent2<br />
（3ペイン表示になります）</p>

<p>メニュー「ファイル」→「上書き保存」して終了。<br />
</p>]]></content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>くす</dc:creator>
<dc:date>2012-08-24T04:48:21+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2012/08/post-8b1e.html">
<title>大舞台でニコ生配信に初挑戦して大失敗した件について</title>
<link>http://kusu.way-nifty.com/blog/2012/08/post-8b1e.html</link>
<description>Jenkis Users Conference 2012という大舞台で、ニコ生の...</description>
<content:encoded><![CDATA[<p><a href="http://build-shokunin.org/juc2012/">Jenkis Users Conference 2012</a>という大舞台で、ニコ生の配信を担当させて頂いたのですが、設定に不備があって、最初の約30分間配信できませんでした。</p>

<p>今回のニコ生の番組は<a href="http://live.nicovideo.jp/watch/lv101725635">こちら</a>です。<br />
1番目の発表者の柴田博志 (@hsbt)様のプレゼンがほとんど配信・記録できず、本当に申し訳ありませんでした。<br />
せめて今後、映像配信にチャレンジする方に何らかの参考になればと思い、共有させて頂きます。</p>

<p>結論から言うと、原因はニコ生のビットレート制限の384Kbpsを超過していて、サーバに切断されたものと思われます。自分では、ググって調べながら270Kbpsに設定した記憶(間違い)があり、最後までビットレートの設定に問題があることに気づくことができませんでした。<br />
今から思えば、管理画面の方ににビットレートについての警告が出ていたのですが、初めてみる画面でで、テスト配信に成功している状態でも表示されていたので、常に表示される「注意書き」としか認識できていませんでした。この点が非常に悔やまれます。</p>

<p>今回の映像配信はVGAキャプチャと発表者カメラ、会場カメラの３映像をとって、音声は教室機材のスピーカーのライン出力と環境音用のマイク（念のため）をミキサーに入れてPCのマイク入力に入れた構成でした。</p>

<p><a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/05/photo.png"><img class="image-full" alt="Photo" title="Photo" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/05/photo.png" border="0"  /></a></p>

<p>毎回、映像配信にチャレンジする度に、機材や配信内容を増強していっており、（私の趣味です。役立つモノ・技を身につけることが喜びです）今回は会場カメラを切り替えて使うことが初めての試みでした。普通に2台目のＷＥＢカメラをつなげるとＵＳＢの帯域が足りずエラーになったので、ＵＳＢ増設のＥｘｐｒｅｓｓカードをノートＰＣに挿して会場用のＷＥＢカメラをつなげました。</p>

<p>配信アプリには今回初めてＸｓｐｌｉｔを利用したのですが、失敗したのはこのアプリのチャンネル設定画面（メニュー：配信→チャンネルを編集）でした。<br />
<a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/05/_jenkins.jpg"><img class="image-full" alt="_jenkins" title="_jenkins" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/05/_jenkins.jpg" border="0"  /></a></p>

<p>このビットレートの値を270Kbpsに設定した【つもり】だったのですが、アプリのデフォルト値の1000Kbpsになっており、これを256Kbpsに設定したタイミングで配信が正常化しました。</p>

<p><br />
今回の件の経緯を振り返ってみたいと思います。</p>

<p>＜2012-04-24(火)＞<br />
数年前からJenkins（Hudson）の噂はかねがねだったのですが、2012年に入ってようやく会社のIT運用でJenkinsを使い始めました。その素晴らしさを日々実感していた時に1000人規模のJenkins勉強会が開催されることをたまたまツイッターで知り、すぐに<a href="http://twitter.com/tkusukawa/status/194796364209717248">エントリー</a>しました。</p>

<p>＜2012-06-25(月)＞<br />
そしてまた、たまたまツイッターで<a href="https://twitter.com/jenkinsja/status/216793074590945281">Ust配信のお手伝いの募集</a>を<br />
見かけました。<a href="http://shinagawa.redmine.r-labs.org/">shinagawa.redmine</a>でUST配信をやったことがあったので、「もしお手伝いできることがあるなら」と思い切ってメールしてみたところ、<br />
手伝わせて頂けることになりました。</p>

<p>＜2012-07-10(火)＞<br />
ところが、話が進むと実はニコ生でやりたいという話であることが解りました。ニコニコは生放送はおろか、ニコ動の映像投稿も全くの未経験であり、本番までに週末が2回しかないことからも不安を感じましたが、まずは調べてみることにしました。</p>

<p>＜2012-07-15(日)＞<br />
ニコ動のコメントシステムは視聴者とのコミュニケーションを技術で実現していて大好きなのですが、調べたところ、「有料会員しかニコ生配信はできない」、「過去のニコ生配信の内容は有料会員しか視聴できない」ということのようでした。<br />
オープンソースなのにJenkinsユーザに有料会員になることを強要するのではないかという懸念が悶々とし、最初の週末は自分自身がプレミアム会員になることを躊躇したまま過ごしてしまいました。</p>

<p>＜2012-07-21(土)＞<br />
カンファレンスのスタッフの方に、ニコ生の有料会員でないと配信できない旨を伝えたところ、公式チャンネルを開設すれば有料会員になる必要はないとの回答でしたが、その公式チャンネルの情報を頂けていませんでしたので、プレミアム会員になって配信アプリの<a href="http://com.nicovideo.jp/community/co1721387">動作確認</a>を行いました。</p>

<p>shinagawa.redmineでのUstream配信の経験から、勉強会の内容を配信するには、私のWEBカメラでは、画質も音質も悪すぎることが解っており、TwinPact100でVGAキャプチャして<a href="http://www.ustream.tv/recorded/22691135/highlight/264732#utm_campaign=shinagawa.redmine.r-labs.org&utm_source=264732&utm_medium=social">うまくいった</a>ことから、今回も同様に複数画面表示を行うことにしました。<br />
最初、「NicoNico Live Encoder」を使ってみたのですが、シーン切り替えの手段が見つからなかったことから断念せざるを得なく、（外部ツールでシーン切り替えできるようです→<a href="http://www35.atwiki.jp/yukkurinikonama/pages/136.html">「シーン切り替え機能追加」参照</a>）<br />
Xsplitを使うことにしました。<br />
<a href="http://www35.atwiki.jp/yukkurinikonama/pages/101.html">「初心者向け！ニコ生のやり方解説サイト！」</a>に書かれている内容に従い、<a href="http://com.nicovideo.jp/community/co1721387">自分で開設したテスト用コミュニティ</a>にて無事に配信の動作確認を行うことができました。<br />
この設定の中にちゃんとビットレートを270Kbpsに設定することが書かれており、<u><strong>ちゃんと270Kbpsに設定して</strong></u>動作確認ができていました。<br />
<a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/1st.jpg"><img class="image-full" alt="1st" title="1st" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/1st.jpg" border="0"  /></a></p>

<p>＜2012-07-22(日）＞<br />
ぎりぎりでしたが、一応の配信動作の確認を行った上で、本番一週間前の日曜日に会場の下見をすることができました。会場の間取りを確認し、必要なケーブルの長さと端子の形状を確認しました。ドワンゴさんの調べで、大学の有線LANからのインターネットアクセスにおいて、ニコ生配信の管理に必要な一部のTCPポートの疎通ができないとの報告がありました。ポケットWiMAXルータの電波強度を確認したところ十分な電波が入っており、<br />
shinagawa.redmineでは電波が弱い状態でも配信できていたことから、WiMAXを使えば大丈夫と判断しました。</p>

<p>＜2012-07-25(水) 夜＞<br />
ニコ生配信の公式チャンネルの準備ができ、私のアカウント登録が必要との連絡を24：14に頂き、すぐにアカウントを返信したところ、24：44には登録完了の連絡を頂けましたが、次の日も早かったので、この晩は何もすることができませんでした。</p>

<p>＜2012-07-26(木) 夜＞<br />
公式チャンネルのURLにアクセスしたところ、これまでテスト配信してみていた画面とは全く異なる画面であり、<br />
配信アプリも同じ設定では動作しませんでした。大いに焦りました。<br />
慌てていろいろ検索した結果、URLとstreamを設定するらしいことを認識し、Xsplitで同様の設定が無いかを探しまくったのですが、すぐには見つからず、ようやく見つけたのが下記の設定でした。</p>

<p><a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/photo.jpg"><img class="image-full" alt="Photo" title="Photo" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/photo.jpg" border="0"  /></a></p>

<p><a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/photo_2.jpg"><img class="image-full" alt="Photo_2" title="Photo_2" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/photo_2.jpg" border="0"  /></a></p>

<p><br />
<a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/photo_3.jpg"><img class="image-full" alt="Photo_3" title="Photo_3" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/photo_3.jpg" border="0"  /></a></p>

<p><br />
<a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/customrtmp.jpg"><img class="image-full" alt="Customrtmp" title="Customrtmp" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/customrtmp.jpg" border="0"  /></a></p>

<p><br />
<a href="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/customrtmp_2.jpg"><img class="image-full" alt="Customrtmp_2" title="Customrtmp_2" src="http://kusu.way-nifty.com/photos/uncategorized/2012/08/06/customrtmp_2.jpg" border="0"  /></a></p>

<p>この画面でURLとstreamを入力し、<a href="http://help.nicovideo.jp/live/2010/04/post-46.html">参考にしたページ</a>がFlash Media Live Encoderだったので、「FMLE/3.0」を選択しました。</p>

<p>この設定で見事、テスト配信ができることを確認できました。この時点で深夜に及んでおり、疲労困憊の中、一安心して眠りました。<br />
（もうここまで動いたら、気持ちは「触らぬ神に祟りなし」です。せっかく動いていた設定を壊したら大変です。その結果、見落としたビットレートの設定を本番開始後30分まで気づくことができませんでした。）</p>

<p>＜2012-07-28(土)＞<br />
各シーンでの映像表示位置などの設定を行い、機材とケーブルが多かったので忘れ物が（致命的なので）無いように、確認しながら慎重にパッキングして、キャスターのついた旅行鞄と仕事鞄の2つにまとめました。</p>

<p>＜2012-07-29(日) 本番当日＞<br />
約束通り10時に到着したのですが、スタッフルームがわからず、ぐるぐる回った後、メイン会場のさったホールに行き、スタッフの皆様と合流することができました。<br />
以前の話でS406の会場を担当することを希望していたのですが、連絡の行き違いか何かで担当する会場が変わっており、S505に案内されました。</p>

<p>機材の配置や配線の引き回し、カメラの位置決め等、下見でイメージはあったものの、細かなところは都度考えながらの作業で思った以上に時間がかかり、焦りました。<br />
一通りの設置が完了したのが本番開始20分前ぐらいだったと思います。</p>

<p>会場が変わったことで公式番組も異なることから、URLとstreamの設定を変更したのですが、この時もビットレートの設定には気がつきませんでした。ここも悔やまれる点です。</p>

<p>下見で判断したとおり通信回線にはWiMAXを使い、テスト配信もちゃんと行えていたので、そのまま本番を待ちました。</p>

<p>ドワンゴさんの話では、本番開始の数分前に放送開始の操作をすると聞いていたので、そのタイミングを待っていたのですが、気がつくとテスト配信の映像が停止していました。</p>

<p>あれ？！！！と思って、配信アプリの配信を停止／開始したり、解像度を下げたり、番組管理画面をリロードしてみたりしましたが、配信はいっこうに行えませんでした。<br />
ドワンゴさんに電話して着てもらい、見てもらいましたが、彼らもXsplit等の個別のアプリには詳しくは無く、アプリの再起動を試すぐらいでした。</p>

<p>当日、テスト配信が行えていて、人が入り始めた時点で動かなくなったことから、WiMAXの同一基地局利用者が増えたりして通信になんらかの影響が出たことを疑い、大学の有線通信に切り替えたり、ドワンゴさんからドコモのUSB端末を借りて、インストールを試みたりしましたが、これらに非常に時間がかかってしまいました。</p>

<p>最後にドワンゴさんがXsplitの設定を見直してくださり、URLとstreamの設定を再設定してみたところで、同一画面にあったビットレートの設定が1000Kbpsになっていること気がついて、これを256Kbpsに設定したことで、復旧しました。</p>

<p></p>

<p>＜今回の教訓＞<br />
失敗が許されないシステムでは、「やってみたらできた」という対応をしてはいけないということを強く思いました。<br />
試行錯誤があったとしても、その結果、どのパラメータをどのように設定したのかを明確に把握し、すべての設定が最適であることを確認しておくべきだったと思います。</p>

<p>もし、設定値がリセットされたり、再設定しなければならないことも考え、すべての設定画面のキャプチャをとっておき、印刷しておくことを習慣にしたいと思います。これは、トラブル時に迅速に、場合によっては複数人で同時に設定値を確認することも可能になります。<br />
</p>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2012-08-06T02:47:01+09:00</dc:date>
</item>
<item rdf:about="http://kusu.way-nifty.com/blog/2011/03/post-2969.html">
<title>会社で地震にあいましたが、翌日無事に帰宅しました</title>
<link>http://kusu.way-nifty.com/blog/2011/03/post-2969.html</link>
<description>秋葉原の自社の会議室で地震にあいました。
避難訓練が現実のこととなり、老朽化した...</description>
<content:encoded><![CDATA[<p>秋葉原の自社の会議室で地震にあいました。<br />
避難訓練が現実のこととなり、老朽化したビルから脱出して外で人数確認が行われました。とっさにコートをひっかけて出てきたものは良かったのですが、上着も着ずにそのまま出てきた人も多く、寒い外での待機時間が非常に長く感じました。<br />
その後、帰宅許可が出たのですが、電車が動いておらず帰れない人は会社で待機となりました。親会社が備蓄してあった水のペットボトルと非常食のクッキーは本当に助かりました。<br />
数人のメンバーでレンタカーを借りようという話になり、寒い中探し回ったのですが既に全て出払っており、道も大渋滞だったので諦めて飲み屋に入りました。どこの店も帰れない人たちでいっぱいだったのですが、怪しい韓国料理屋を覗いたら空いてたので、ひとまず暖をとることが出来ました。暖かいマッコリを頼んだら[そんなものは無い]と怒られ、プルコギと熱燗。<br />
そこそこで切り上げ、今度はホテルを探し回ることにしたのですが、当然どこもガチ満室で、ロビーにも多くの人が待機している状況でした。<br />
結局は二駅ぐらいの距離にある上司の家に泊めてもらえることになりました。<br />
電車が動き出す事を期待して遅くまで寝かせてもらったのですが、伊勢崎線は動いておらず迂回して帰りました。浅草から東松戸までの浅草線は同様の人たちで土曜日の午前10時にはあり得ないラッシュでしたが、南越谷までの武蔵野線はさすがに空いててホッとしました。<br />
復旧を翌日まで待ったにもかかわらず普段1時間のところを2時間半かけて正午過ぎに帰宅しました。<br />
家には全く損傷は無かったのですが、キャスター付きのデスクは壁から20cmぐらい動いていて 、不安定に積んであった雑誌等が床に散らかっていました。<br />
今回、携帯からの通話発信は全くかからなかったのですが、スマートフォンのIP接続は支障ありませんでした。家族の安否はgmailですぐに確認できたし、信憑性はありませんがtwitterからかなり情報を得ることができました。<br />
あと信憑性のある情報としては携帯のワンセグでNHKをチェックできたのが安心でした。<br />
AU携帯の地震速報がすごい音出すんだけど、鳴ったときはほぼ揺れなくて、鳴らない時にそこそこの揺れがあったりして、もはやオオカミ少年。<br />
東北の被災地域に比べれば関東圏など防災訓練があったぐらいの事かと。甚大な数の被災者の方々を案じつつ、。<br />
</p>]]></content:encoded>



<dc:creator>くす</dc:creator>
<dc:date>2011-03-13T00:57:01+09:00</dc:date>
</item>


</rdf:RDF>
