ラベル misc の投稿を表示しています。 すべての投稿を表示
ラベル misc の投稿を表示しています。 すべての投稿を表示

9.18.2015

Image Conversion Cheat Sheet

画像変換チートシート

 

コマンドラインで画像変換を完結するためのメモ。

7.20.2015

Dragon Quest 5 (PS2) Time Attack - 2:53

PS2版ドラゴンクエスト5のタイムアタック

 

遠い昔、プレイステーション2 版の ドラゴンクエスト5 で遊んでいた頃のノートがつい先日出てきた。

折角なので、Github にラップタイムをまとめておく。

5.31.2015

Getting Started with AquaSKK

Aqua SKK を使う

 

日本語入力メソッドして、SKK を使いたい。(実は過去に一度使ったことがあるが挫折したので再挑戦)
Mac では Aqua SKK という実装があるのでそれを導入する。

 

環境

  • OS X Yosemite: Version 10.10.3
  • AquaSKK 4.2.5

SKK とは

Simple Kana to Kanji conversion program の略。形態素解析をユーザーが明示的に行うことで、変換ミスのストレスを軽減させることができるという非常にユニークな日本語入力メソッドだ。

詳しくは以下のリンク先を参照。

 

セットアップ方法

 

インストール

公式ページはこちら

だが、現在は GitHub 上で開発が進められている。 ここ

からダウンロード可能な最新版の dmg ファイルを実行するとよい。

インストールの完了にはログアウトが必要。

 

IME追加
  • System Preferences -> Keyboard -> Input Sources と選択
  • Japanese -> AquaSKK 統合を追加
  • Command + Space で IME AquaSKK統合を有効化

AquaSKK のカスタマイズ
  • メニューバー -> AquaSKK統合 -> 環境設定
  • 入力設定 -> 入力操作: 「Enter による確定で改行しない」にチェックを入れると
    より流れるようなタイピングができる
  • キーバインドの衝突の解消

 

Sticky shift と SandS

SKK はシフトキーを多用する入力メソッドである。
そこで実際の SKK ユーザの大半は、シフトキーを押さなくてもシフトを実現できるような工夫をしている。

Sticky shift

特定のキーを押すことで、直後のキーを Shift オンの状態で入力できるようにする機能。
例えば、セミコロン「;」をスティッキーキーに指定した場合、「;foo;bar」と打鍵すると「FooBar」と入力されるようになる。(セミコロンなのは英語キーボードを使っているため)

Mac では、Karabiner (旧名 KeyRemap4MacBook) でその機能を実現できる。

  • Karabiner - OS X用のソフトウェア
  • Change Key -> For Japanese -> Change Semicolon(;) Key
    -> Semicolon to Sticky Shift_L (effective only when input source is Japanese)
    にチェックを付ければよい

  • ただ、この場合 IME オンかつASCIIモードの場合にセミコロンを入力できなくなるのだが
    どうしたらいいものか。

 

SandS

Shift and Space。スペースキーと同時に他のキーを押した場合に Shift オンの状態にする。
親指でシフトを押せるようになるのがポイントだが、試したことはない。

 

基本的な入力方法

この資料が素晴らしい。

 

かな入力モード

  • 英数入力モード、全角英数入力モードで Ctrl-j
  • q キーで「ひらがな」「カタカナ」を切り替え
  • カタカナの入力自体は、読み入力モードで q を押すことでも対応可
英数入力モード
  • かな入力モードで l
全角英数入力モード
  • かな入力モードで Shift-L
読み入力(▽)モード
  • 変換が必要な場合
  • かな入力モードで Shift を押しながら単語の一打目を入力
  • かな入力モードで Shift-Q
  • かな入力モードで スラッシュ(/) を押すと英数字で読みを入力可能
  • Ctrl-g でキャンセル
  • Tab キーで見出し語の補完
  • Space キーで変換モードへ
変換(▼)モード
  • 候補送り: Space
  • 候補戻り: x
  • ユーザ辞書に登録した単語の削除: Shift-x
  • 次の文字を入力するか、Ctrl-j で確定
  • Ctrl-g で読み入力モードに戻る
単語登録
  • 読み入力モードで候補送りし続ける
  • クリップボードから貼り付け: Ctrl-y
  • Ctrl-g で変換モードに戻る
変換ルール
  • デフォルトのルール

    $ cat /Library/Input\ Methods/AquaSKK.app/Contents/Resources/kana-rule.conf |nkf
    # $Id$
    
    # このファイルは改行コードがLF、文字エンコーディングがEUC-JPでなければなりません。
    # 五つ目の項目は次状態です。無ければ項目自体を省略します。
    # エントリの順序には気を付けて下さい。例えば「ba」というエントリに出会うと、
    # AquaSKKはまず「b」という枝を探しますが、ここではまだ存在しないので
    # 「b」という空の枝を作成します。この後に「b」というエントリが現れると
    # そのエントリ「b」は既に定義されているのでどうなるか分かりません。
    
    # 最初の項目の,は半角カンマに置換されます。
    
    a,あ,ア,ア
    
    bb,っ,ッ,ッ,b
    ba,ば,バ,バ
    bi,び,ビ,ビ
    bu,ぶ,ブ,ブ
    be,べ,ベ,ベ
    bo,ぼ,ボ,ボ
    
    (snip)
    ...
  • ぁぃぅぇぉっ: xa xi xu xe xo xtu
  • ‥ … ・ 〜 『 』: z, z. z/ z- z[ z]
  • ← ↓ ↑ →: zh zj zk zl

 

辞書の拡張

このあたりを使うと便利そう。

3.01.2015

Editing Graph Structure with Cytoscape

Cytoscape でグラフ構造のデータを表現する

 

  • Cytoscape Mac版をダウンロード: Download Cytoscape
  • このページの説明に従って操作: Cytoscape を使い倒す!〜基本操作編〜 - 統合TV (togotv)(2011-06-03)
    • 今回は有向グラフを作りたいので、Control Panel -> Style を Directed に変更
    • Style -> Properties -> Mapping Type を Discrete Mapping に変更してエッジのラベルを消す
    • 中央のウィンドウにて、Add -> Node でノードを追加
    • ノードを右クリックし、Edit -> Rename node で名前を変更
    • 一通りデータを作ったら、Layouts -> yField Layouts -> Organic などで整形
    • さいごに File -> Export -> Network View as Graphics... などでエクスポート

こんな感じで Scala のスキルマップをグラフ構造で表現することができた。

Scala skill map

12.03.2014

Cool Badges for GitHub Projects

GitHubで貼っておきたいバッジあれこれ

 

ライセンス表示

Read the Docs

Travis CI

Build Status

  • Travis CI
  • ユニットテストのホスティングサービス
  • 対応言語
    • C, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, JavaScript & Node.js, Objective-C, Perl, PHP, Python, Ruby, Scala
  • オープンソースであれば無料、それ以外は月額 $129〜 の有料プランあり => Travis CI: Plans

Coveralls

Scrutinizer

  • Scrutinizer
  • ソースコードの静的解析
  • 対応言語
    • PHP, Python, Ruby (Java, Scala は検討中の模様)
  • トライアル期間14日は無料、その後、月額 $19〜 => Plans & Pricing

 

 

Related Posts

9.04.2014

Cogito ergo sum

常々思うこと。

 

この世界は、私の認識によって成り立っている。

 

私が認識できないもの、すなわち知覚できないもの、知識として得られない有象無象は

そこに存在していないことと何一つ変わらない。

 

私は、私の死後の世界を認識することはできない。

その時、私という自我が失われることを、知識として身につけているからだ。

したがって、私の死後の世界は、私にとって存在しないものである。

 

ゆえに、私が死ぬことはない。

永遠に生き続けねばならないのだ。

 

 

何処に矛盾があるだろうか。

7.18.2014

Trade-Off Sliders Template

トレードオフ・スライダーのテンプレート

 

とりあえず自分が使いやすいようにカスタマイズ。

要件定義のお供に。

 

  • 英語

Trade off sliders

  • 日本語

Trade off sliders ja

 

 

References

6.22.2014

Short Trip in Berlin - Helpful Tools

ベルリン出張で役に(立った|立たなかった)ものリスト

 

2014-06-16 〜 2014-06-22 の一週間、Scala Days 2014 に参加するためベルリンに出張していました。

Scala Days のレポートは会社の方に書くとして、なんとか無事帰国できたので
今回の旅で役に立ったもの、役に立たなかったものについて、記憶が新鮮なうちにまとめておきます。

役に立ったもの

  • HyperJuice 2 100W
    ほんとこれ、カンファレンスには必携のガジェットですね。
    MacBook Air を持参したのですがが、Mac自身のバッテリーと合わせて10時間くらいは余裕で稼働可能です。
    さらにUSBポートも付いているので、デジカメの充電にも役立ちました。
    • MacBook に給電するためには別売のケーブルが必要なので注意
    • 機内には手荷物として持参する必要あり
    • 帰りにテーゲル空港で特別室に連れて行かれてチェックを受けることになったのはご愛嬌
  • レンタル WiFi ルータ
    今回は イモトのWiFi を利用。出発時に羽田空港で受け取り。
    日本国内と比べると遅さが気になるものの、3G 通信は殆どの場所で網羅されているようです。
    ホテルの WiFi が非常に遅くストレスフルだったので、このルータがとても活躍しました。
  • 旅の指さし会話帳
    ドイツ語に関する本は何冊か買いましたが、一番役に立ったのはこの本でした。
    基本的に英語が通じるので必要に迫られてドイツ語を話す場面はありませんが、やはり現地の言葉を話すとコミュニケーションが捗ります。
    音声付きの書籍と併用するとベター。

     

役に立たなかったもの

  • 電子辞書
    日英翻訳で辞書をひく場面はなかったですね。
  • 乾電池
    電子辞書用に、と持っていったのですが結局使う機会なし。
  • 電源変換コネクタ
    イモトのWiFi と一緒にレンタルしたのですが、実際のところ殆どのガジェットはUSBで充電できるため、一個あれば十分でした。
    ルータに標準添付の変換コネクタ + 日本から持っていったタコ足ケーブルで事足ります。
  • 正装・革靴
    超高級店とかには行かなかったので、正装の必要性は全くなかったですね。
  • 暇つぶし用の書籍
    結局読む暇がなかった、というオチ。
    移動中の機内は暗いし、眠ってしまうと意外とあっという間に12時間は過ぎてしまいます。(本読むと若干酔うし……)

 

番外編

今回の旅路ではベルリンに在住経験のある、とあるお方と同行できたのが本当に幸運でした。
ベルリンをたっぷり満喫できたのも、その案内人の方のおかげです!

 

 

それにしても、日本語英語中国語ドイツ語を話して万能感に浸っていたところ、帰りの飛行機の隣席がフランス人で
最後にしてやられた感がありました。

Au revoir!

5.24.2014

How to Install MathJax on Blogger

BloggerでMathJaxを使う方法

 

Blogger テンプレートの編集

こちらの解説 (Getting Started — MathJax 2.3 documentation) にあるように、HTMLソースのHEADブロックの中に以下のタグを埋め込めばいい。

<script type="text/javascript"
  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<script type="text/x-mathjax-config">  
  MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>

Blogger の管理画面から、テンプレート -> HTML の編集 を行い、<head> … </head> の間の適当な場所に
タグを貼り付けて「テンプレートを保存」。

テンプレート -> バックアップ/復元 の機能を利用して、事前・事後にバックアップを取っておくと安心。

 

MarsEdit プレビューテンプレートの編集

ブログ作成ツール MarsEdit のプレビュー画面でも数式を表示したい。

これには SyntaxHighlighter 同様のトリックが必要となる。

テンプレートのBODYブロック内(</body>の直前)に以下のスクリプトを埋め込んだら、プレビュー画面でも MathJax が処理されるようになった。

<script type="text/javascript">
  function refreshMathJax() {
    MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
    setTimeout("refreshMathJax()", 5000);
  }
  refreshMathJax();
</script> 

 

出力サンプル

When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$

When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$

Mac: Displaying Text as What I Wrote in TextEdit

Mac の TextEdit でテキストファイルを開いたのに、HTMLがレンダリングされてイライラ

TextEdit でファイルを開いた場合、ファイルの拡張子に関係なく
ファイルの中身がHTMLっぽい場合 (htmlタグがあるなど) は HTML ファイルとして認識されてしまうようだ。

Preference -> Open and Save -> Display HTML files as HTML code instead of formatted text

にチェックを付けたら、とりあえずファイルの内容がそのまま表示されるようになった。

こういうストレス仕様は即刻やめてほしい。

5.04.2014

Recording the Terminal Session as Video

ターミナル録画系サービスのメモ

 

3種類のサービスを比較。

 

1. Asciinema

 

インストール

pip でインストールする。easy_install から始める場合は以下のとおり。

$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | sudo python
$ sudo easy_install pip
$ sudo pip install asciinema

 

録画の実行

asciinema rec で録画実行、exit (Ctrl+D) で終了。

Asciinema を実行を Asciinema で録画したのがこちら。

録画した内容が瞬時にパブリックになってしまうというのも少し怖い気がするが……

 

2. showterm

 

インストール

gem でインストール。(実行シェルを直接ダウンロードする手順も記載されているが、うまく動作しなかった)
ruby からインストールする場合は以下のとおり。(RedHat系Linuxの場合)

$ sudo yum install -y rubygems
$ sudo gem install showterm

 

録画の実行

showterm で録画実行、exit (Ctrl+D) で終了。
終了すると即座にアップロード処理が始まる。

showterm を実行を showterm で録画したのがこちら。

表示が若干崩れるのは、script コマンドの問題だろうか。

 

3. Shelr.tv

 

インストール

gem でインストール。
ruby からインストールする場合は以下のとおり。(RedHat系Linuxの場合)
json ライブラリに依存しているので、ruby-devel のインストールが必要。

$ sudo yum install -y rubygems
$ sudo yum install -y ruby-devel
$ sudo gem install shelr

 

録画の実行

shelr record で録画実行、exit (Ctrl+D) で終了。
ターミナルのサイズが大きいと録画が実行されないので注意。

$ shelr record
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> Please, resize your terminal!
=> Sizes bigger than 132x43 are slow and will not be available to all users.
=> We care about this.
=> Also, do not resize your terminal while recording. It will break the record.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

ターミナルサイズを一時的に変更

$ stty rows 43 cols 132
$ stty -a    # 確認

shelr を実行を shelr で録画したのがこちら。

shelr の場合、録画内容が勝手に公開されてしまう心配がないので安心だ。
必要に応じて shelr play で内容をチェックした後、shelr publish で明示的に公開操作を行う。

Shelr.tv のアカウントを作れば、限定メンバーへの公開も可能な様子。

12.24.2013

Monitoring JMX in Zabbix

Zabbix: JMX監視について

 

バージョンによって手順に違いがあったり、公式ドキュメントでも日本語化されていない部分があったりしたので
導入のポイントをメモしておく。 

 

環境

監視サーバ
  • zabbix-server 2.2
  • Zabbix Java Gateway (後述) を同居

 

監視対象サーバ
  • RedHat Enterprise Linux または Cent OS (もちろんこれ以外でも動作する)
  • zabbix-agent
  • 適当な JVM アプリケーション
    • 適当な JMX ポートを決定し、監視サーバから接続可能にすること

 

監視対象サーバの設定

 

JMX ポートの起動

JVM の標準機能である JMX を有効にする。
起動スクリプトなどで JAVA_OPTION を指定すればよい。

設定例 (セキュリティ関連の項目は必要に応じて書き換えること)

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

 

疎通確認

監視サーバからの疎通確認には、cmdline-jmxclient を使うと便利だった。

実行例 (適当なディレクトリ配下で)

curl -O http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.4.jar
java -jar cmdline-jmxclient-0.10.4.jar - xxx.xxx.xxx.xxx:12345
java -jar cmdline-jmxclient-0.10.4.jar - xxx.xxx.xxx.xxx:12345 java.lang:type=Threading

Exception が発生せず、何らかの情報が表示されればひとまずOK。

 

補足

ネットワーク関連の問題が発生した場合、JVM の起動オプションで以下のように自分自身のIPアドレスを明記することで解決する場合がある。

監視対象サーバ自身のIPアドレスを書く

-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

 

監視サーバの設定

 

Zabbix Java Gateway のインストール

Zabbix 2.2 の場合(であっても)、zabbix-server を入れただけでは JMX の監視はできない。

ソースをダウンロードしてビルドする方法もあるが、パッケージが公開されているのでそのままインストールしたほうが簡単だ。

実行例 (サービス登録および起動も実施)

# rpm -Uv http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-java-gateway-2.2.0-1.el6.x86_64.rpm
# chkconfig zabbix-java-gateway on
# service zabbix-java-gateway start

設定ファイルの編集
  • /etc/zabbix/zabbix_server.conf の修正 (一部抜粋)
    Timeout=30
    JavaGateway=127.0.0.1
    JavaGatewayPort=10052
    StartJavaPollers=5

    Java Gateway はデフォルトでは10052ポートで起動する。
    Timeout の修正(デフォルト5秒) については、デメリットもあるので問題が起きた場合にのみ書き換えたほうがよいかもしれない。

    参考: zabbix_server.confのTimeoutについて | ZABBIX-JP

設定ファイルを保存したら、zabbix-server から再読み込み (または再起動)。

監視設定

ここから先は Zabbix の管理画面(GUI)での操作となる。

ホスト設定

Configuration -> Hosts -> 監視対象サーバ を選択。
JMX interfaces の部分で Add をクリックし、IPアドレスとJMXポートを指定して Save。

テンプレート・アイテム設定

ひとまずは標準の Template JMX Generic を使ってみるのを勧める。

Configuration -> Templates -> Template JMX Generic を選択。
Group または Host の追加を行った後、Save。

ダッシュボード画面で ホストにひもづく JMX のアイコンが緑色になればOKだ。

References

 

12.12.2013

How to Solve Vagrant+CentOS+VirtualBox Mount Error

Vagrant+CentOS+VirtualBox: ゲストOS起動時のマウントエラーの調査

 

事象

Vagrant で CentOS 6 の VirtualBox 用イメージを立ち上げようとしたところ、以下のようなエラーが出てしまった。

$ vagrant up <HOSTNAME>

(略)

[HOSTNAME] Mounting shared folders...
[HOSTNAME] -- /vagrant
Failed to mount folders in Linux guest. This is usually beacuse
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u xxxxxxxx`,gid=`getent group xxxxxxxx | cut -d: -f3` /vagrant /vagrant
mount -t vboxsf -o uid=`id -u xxxxxxxx`,gid=`id -g xxxxxxxx` /vagrant /vagrant

このメッセージだけでは、VirtualBox Guest Additions (以下、Guest Additions) の機能である共有フォルダのマウントに失敗していることくらいしか分からない。

ちなみに Guest Additions とは、簡単に言えば VirtualBox ゲストの管理に特化した便利ツールだ。

これを利用しないなら無視しても構わないのだろうが、やっぱり気になるので調べてみる。

 

調査

vagrant status コマンドを実行して、OS自体は起動していることは確認できた。

$ vagrant status

Current machine states:

HOSTNAME                  running (virtualbox)

SSH 接続をしてみよう。

$ vagrant ssh <HOSTNAME>

以下はゲストOS上のプロンプト。
Guest Additions の状態を確認すると、停止状態であることが分かる。

$ service vboxadd status
The VirtualBox Additions are not currently running.

Guest Additions のインストール自体が失敗している可能性があると考え、ログを確認する。

$ cat /var/log/vboxadd-install.log
/tmp/vbox.0/Makefile.include.header:97: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again.  中止.
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.

やはりここに答えがあった。
カーネルのソース (kernel-devel) が不足していたために、Guest Additions のビルドが失敗していたのだった。

対応

 

誤った対応

パッケージが足りないなら、yum でインストールすればよいと安直に

$ sudo yum install kernel-devel -y

と実行するのはよくない。

上記のコマンドでは (基本的に) 最新の kernel-devel がダウンロードされるため、
実際のカーネルバージョンと異なるものがインストールされてしまう可能性があるためだ。

カーネルバージョンと kernel-devel が食い違った状態で Guest Additions のセットアップをすると、やはりビルドは失敗となる。

$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-358.el6.x86_64

Building the main Guest Additions module                   [失敗]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions              [  OK  ]

それぞれのバージョンは以下のようなコマンドで確認できる。

$ uname -r
2.6.32-358.el6.x86_64
$ rpm -qa |grep kernel-devel
kernel-devel-2.6.32-431.el6.x86_64

アンインストール。

$ sudo yum remove kernel-devel

 

 

正しい対応

では、適切なバージョンの kernel-devel をインストールするにはどうしたらよいか。

残念ながら、このまま yum でバージョンを指定してもうまくいかない。

$ sudo yum install kernel-devel-$(uname -r) -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Setting up Install Process
No package kernel-devel-2.6.32-358.el6.x86_64 available.
Error: Nothing to do

古いバージョンのパッケージは CentOS-Vault リポジトリに置かれている。
以下いずれかの方法で対応が可能だ。

  • /etc/yum.repos.d/CentOS-Vault.repo ファイルを編集
    適切なOSバージョンの記載を追加し、「enabled=0」 を「enabled=1」へ書き換える
  • URLを指定して直接ダウンロード
    $ sudo yum install http://vault.centos.org/6.4/os/x86_64/Packages/kernel-devel-$(uname -r).rpm

インストールを終えたらゲストOS上で、Guest Additions のセットアップを再度実行。

$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]

うまくいった。

$ service vboxadd status
The VirtualBox Additions are currently running.

目的は達成できたので、一度ゲストOSから抜け、Vagrant から再起動する。

$ vagrant reload <HOSTNAME>

マウントエラーは晴れて解消された。

 

 

References

10.27.2013

How to Install GNU Octave

GNU Octave のインストール方法

 

Machine Learning | Coursera の Week 2 の課題のため、Octave をインストールする。

Octave とは、フリーの数値解析ソフトウェア(プログラミング言語)。
行列の計算やグラフ描画(gnuplotと連携して可視化)が簡単にできることが特徴。

 

Windows

こちらからインストーラをダウンロードして実行。
Octave Forge - Browse /Octave Windows binaries at SourceForge.net 

Coursera の手順に書かれていたのは Octave-3.2.4_i686-pc-mingw32_gcc-4.4.0_setup.exe だった。

インストーラの Choose Components の画面で、"image" パッケージを追加するとよい。

 

Mac

こちらから Mac 用のディスクイメージをダウンロードしてマウント。
Octave Forge - Browse /Octave MacOSX Binary at SourceForge.net

最初、最新版(3.7.7)を入れたらグラフ表示でプログラムが落ちてしまう状態になったので
古いバージョン(3.4.0)をインストール。 

  • 事前に X.11 (XQuartz) をインストール
  • 例によって Octave.app を Applications フォルダにコピー。
  • 次に Gnuplot をインストールするのだが、ここに書いてあるとおり、MacOS Lion 以降だと実行時にエラーとなってしまう。
    Octave Forge - Browse /Octave MacOSX Binary/2011-04-21 binary of Octave 3.4.0 at SourceForge.net
  • Extras 配下の Gnuplot のディスクイメージもマウントし、Gnuplot.app を Applications フォルダにコピー。
  • シェルスクリプト /Applications/Gnuplot.app/Contents/Resources/bin/gnuplot をエディタで開き、
    「DYLD_LIBRARY_PATH」を「DYLD_FALLBACK_LIBRARY_PATH」に全て置換。
    (全部で4ヶ所。「=」の前後双方を置換する必要があるので注意。) 
  • .zshrc (.bashrc) にエイリアスを設定すると便利。
    alias octave="/Applications/Octave.app/Contents/Resources/bin/octave --persist --eval \"PS1('>> ')\""

 

実行例
octave-3.4.0:1> x=-5:5
x =

  -5  -4  -3  -2  -1   0   1   2   3   4   5

octave-3.4.0:2> y=2*x
y =

  -10   -8   -6   -4   -2    0    2    4    6    8   10

octave-3.4.0:3> plot(x,y)

Figure 1 

とりあえずグラフが描画できた。

9.29.2013

Representation of Floating-Point Numbers

浮動小数点数のまとめ

概要

  • 限られたビットの中で小数を表現する方法の一つが浮動小数点数
  • 今日の実装は処理系、言語を問わずIEEE方式(IEEE 754)が標準
  • とりあえずIEEE方式の倍精度浮動小数点数(C言語のdouble)の仕組みを覚えておけばいい
 
Wikipedia

浮動小数点数 - Wikipedia
IEEE 754 - Wikipedia

IEEE 754

IEEE 754: Standard for Binary Floating-Point Arithmetic

 

ビットの表現

小数を「(符号) 基数2の指数×仮数」で表現するのが基本的な考え方。
倍精度浮動小数点数の場合、64ビットを以下の3つの部分に分けて意味を持たせる。

 

Sign (符号部, 1bit)
  • 0 なら +, 1 なら - を表す
Exponent (指数部, 11bits)
  • 11ビットの符号無し整数で表現できるのは 0〜2047(=2^11-1)。
  • 0(全てのビットが0)と2047(全てのビットが1)は特殊な用途(後述)で使用される。
  • 1〜2046の範囲を、1023 のバイアス付き整数(ゲタ履き表現)で表す。
    例えば符号無し整数の値が 1 であれば -1022、1023 であれば 0、2046 であれば 1023 を意味する。
  • だいたい ±1000 と覚えておけば、ビット数を忘れても思い出しやすい
  • 基数を 10 で考えると、だいたい 1e-308 〜 1e+308 の範囲を表せる
Significand (仮数部, 52bits)
  • 指数部を掛け合わせる前の絶対値
  • 整数部分が 1 になるように指数部を調整する(正規化)ので、整数部分の1は明らかであり表現しない。(hidden bitと呼ばれる)
  • 例えば仮数が10進表記で 1.75 である場合は、2進表記だと 1.11。
    整数部分を除外して、仮数部の表現は 11000000...(以下0が続く) となる。
  • 0付近のごく小さい数を表すために、非正規化表現も用意されている。
    (アンダーフローギャップを埋めるための重要な仕組み)
 

表現の種類

IEEE 754 では5種類の表現が定義されている。

s = sign (0 or 1)
q = exponent (指数部の符号無し整数表記)
c = significand (仮数部の符号無し整数表記) <=小数ではなく整数として見た場合の値

としたときの計算式と合わせて書くと以下のようになる。

種類exponent(q)significand(c)表している値
ゼロ 0 0 +0, -0 (符号の区別がある)
非正規化数 0 1〜 NewImage
正規化数 1〜2046 0〜 NewImage
無限大 2047 0 NewImage
NaN(非数) 2047 1〜 基本的に符号の区別はない (詳細はWikipedia参照)

 

実装の確認

C言語でも可能だが、手っ取り早く Python で確認してみた。
(PyPIからbitarrayをインストールする) 

出力例
                   sign
      double      : v <exponent > <                   significant                    >
======================================================================================
               0.0: 0 00000000000 0000000000000000000000000000000000000000000000000000
              -0.0: 1 00000000000 0000000000000000000000000000000000000000000000000000
               2.0: 0 10000000000 0000000000000000000000000000000000000000000000000000
               3.0: 0 10000000000 1000000000000000000000000000000000000000000000000000
               1.0: 0 01111111111 0000000000000000000000000000000000000000000000000000
               0.1: 0 01111111011 1001100110011001100110011001100110011001100110011010
               nan: 0 11111111111 1000000000000000000000000000000000000000000000000000
               inf: 0 11111111111 0000000000000000000000000000000000000000000000000000
              -inf: 1 11111111111 0000000000000000000000000000000000000000000000000000
2.22507385851e-308: 0 00000000001 0000000000000000000000000000000000000000000000000001
1.79769313486e+308: 0 11111111110 1111111111111111111111111111111111111111111111111111
2.22507385851e-308: 0 00000000000 1111111111111111111111111111111111111111111111111111
4.94065645841e-324: 0 00000000000 0000000000000000000000000000000000000000000000000001

8.29.2013

Mac: How to Improve Your Performance with Alfred

Mac: Alfred 活用術

 

Alfred は、Mac を使うなら是非インストールしておきたいフリーソフト。

呼び出し用のキーバインド(私は option + SPACE に設定)を叩いた後、テキストを数文字打って
Enter を押すだけで様々なアプリケーション・OS機能を呼び出すことができる。

WEB のカスタムサーチは特に秀逸で、

  • 「ds キーワード」と打って Dash と連携させたり
  • 「r チケット番号」と打って Redmine のチケットを直接呼び出したり
    • Search URL: (ご利用中のRedmineのURL)/{query}
    • Keyword: r
  • 「a 英単語」または「a 日本語の単語」と打って アルク の和訳・英訳辞書を直接呼び出したり
    • Search URL: http://eow.alc.co.jp/search?q={query}
    • Keyword: a

することが可能だ。 

有料の PowerPack を使えば、より生産性が上がるらしいので目下検討中。

7.07.2013

How to Set Up IRC Server on CentOS

CentOS で IRC サーバの構築

以下、簡単なメモのみ。

  • 今回選んだサーバは ngIRCd
    ngIRCd: Next Generation IRC Daemon
  • EPEL リポジトリへ接続可能な状態にして yum コマンドでインストール
    EPEL/ja - FedoraProject 
    # yum install ngircd
  • /etc/ngircd.conf を編集
    最新のサンプル(http://ngircd.barton.de/doc/sample-ngircd.conf)を参考にカスタマイズ。
    バージョンアップに伴い、[Limits] や [SSL] が使えるようになっている。 
  • /etc/ngircd.motd を作成
    Message Of The Day。空ファイルでもよい。 
  • 構文チェック
    # ngircd --configtest
     
  • サービス追加、起動
    # chkconfig ngircd --add
    # service ngircd start
     
  • 必要に応じて iptables 等の設定を変更

 

6.23.2013

Diving Into Kana-Typing

かな入力の練習

仕事の半分以上(あるいはそれ以上)の時間を日本語入力に費やしているので、効率化のためにも
かな入力を覚えたいと思い立った。

  • Mac で英語配列キーボードを使った場合のかな入力レイアウト
+----+----+----+----+----+----+----+----+----+----+----+----+----+----------+
|〜 |    |    |ぁ  |ぅ  |ぇ  |ぉ  |ゃ  |ゅ  |ょ  |を  |    |「  |Back Space|
|`  |ぬ  |ふ  |あ  |う  |え  |お  |や  |ゆ  |よ  |わ  |ほ  |゜  |          |
+-------+----+----+----+----+----+----+----+----+----+----+----+----+-------+
|Tab    |    |    |ぃ  |    |    |    |    |    |    |    |」  |ー  |       |
|       |た  |て  |い  |す  |か  |ん  |な  |に  |ら  |せ  |゛  |む  |へ     |
+---------+----+----+----+----+----+----+----+----+----+----+----+----------+
|Caps Lock|    |    |    |    |    |    |    |    |    |    |ろ  |Enter     |
|         |ち  |と  |し  |は  |き  |く  |ま  |の  |り  |れ  |け  |          |
+------------+----+----+----+----+----+----+----+----+----+----+------------+
|Shift       |っ  |    |    |    |    |    |    |、  |。  |・  |Shift       |
|            |つ  |さ  |そ  |ひ  |こ  |み  |も  |ね  |る  |め  |            |
+------------+----+----+----+----+----+----+----+----+----+----+------------+

行ごと(あ行、か行、etc)の位置関係を覚えていくのが良さそうだ。

 

  • ローマ字入力 -> かな入力の対応
あいうえお    : a i u e o      -> 3 e 4 5 6
    ぁぃぅぇぉ: la li lu le lo -> S-3 S-e S-4 S-5 S-6
かきくけこ    : ka ki ku ke ko -> t g h ' b
    がぎぐげご: ga gi gu ge go -> t[ g[ h[ '[ b[
さしすせそ    : sa si su se so -> x d r p c
    ざじずぜぞ: za ji zu ze zo -> x[ d[ r[ p[ c[
たちつてと    : ta ti tu te to -> q a z w s
    だぢづでど: da di du de do -> q[ a[ z[ w[ s[
なにぬねの    : na ni nu ne no -> u i 1 , k
はひふへほ    : ha hi hu he ho -> f v 2 \ -
    ばびぶべぼ: ba bi bu be bo -> f[ v[ 2[ \[ -[
    ぱぴぷぺぽ: pa pi pu pe po -> f= v= 2= \= -=
まみむめも    : ma mi mu me mo -> j n ] / m
や ゆ よ    : ya yu yo       -> 7 8 9
    ゃ ゅ ょ: lya lyu lyo    -> S-7 S-8 S-9
らりるれろ    : ra ri ru re ro -> o l . ; S-'
わ を ん ー : wa wo nn -     -> 0 S-0 y S-]

 

  • トレーニングはこのサイトが良さそう

インターネットでタイピング練習 イータイピング | e-typing かなタイピング

 

この投稿もかな入力で書いたので、相当の時間を費やしてしまった。

5.27.2013

Nagios: Template for Monitoring Log Files

Nagios 3系 ログ監視用のテンプレート

Nagios でログ監視を行う場合、デフォルト設定のままでは意図した動作にならないことがある。
注意点と対策についてメモしておく。

 

環境

 

監視要件

 

  • 5分間隔(以下、インターバルとする)で、サーバ内のあらかじめ設定した任意のログファイル
    (UTF-8エンコーディングのテキストファイル) をチェックする
  • インターバルの間に更新された行について、特定の正規表現パターン(以下、検知文字列とする)
    にマッチする場合、あらかじめ設定した任意のメールアドレスに通知メールを発信する
  • 検知文字列の内容によって WARNING と CRITICAL のレベルを出し分ける
  • 検知文字列が含まれている行であっても、特定の正規表現パターン(以下、監視除外文字列とする)
    とマッチしたら通知は行わない
  • インターバルの間に複数の行が検知された場合でも通知メールは1通だけとする。
    その場合、検知された行全てのテキストをメール本文に含める必要はない
 
問題点
  • デフォルトのプラグイン「check_log」ではレベルの出し分け、監視除外文字列の設定ができない
    =>  check_log3.pl を使えばよい (check_log3.pl - Nagios Exchange)
  • 営業時間外のメッセージが通知されない
    => テンプレート(templates.cfg) の linux-server では、通知時間帯 (notification_period) がデフォルトで
    workhours に設定されている。
    これは timeperiods.cfg に記述されている 月曜〜金曜 9:00-17:00 の時間帯定義であり
    それ以外の時間帯には通知が抑止されてしまう。 
  • Nagios の実行ユーザに、/var/adm/messages などのログファイルの参照権限がない
    => sudo コマンドを介して check_log3.pl を実行する必要がある。
    そのとき、requiretty が設定されていると sudo に失敗してしまう。
  • リトライ回数が指定されている場合、通知が行われない
    => 試行回数 (max_check_attemps) が 2以上に設定されていると、異常を検知した後(デフォルトは1分後)
    に自動的にリトライが行われる。
    リトライが正常終了となれば(ログ監視の場合は大半がこのパターンだろう)、一切の通知は行われない。 
  • 検知文字列が連続したインターバルに出力されたとき、2回目以降が検知されない
    => デフォルトのサービスは異常状態が続いた時は notification_interval の間隔
    (デフォルト1時間)でしか通知が行われない。
    ログ監視の場合はインターバルごとに異常を検知する必要があるので Volatile(=変わりやすい、の意)
    サービスに設定する必要がある。 
  • フラッピング状態となった場合に通知が行われない
    => Nagios 3系では、デフォルトでフラッピング(監視対象の状態が頻繁に変化する状態のときに不要な
    通知を抑止する機能)が有効となっており、正常・異常の状態が頻繁に変わると一定時間
    一切の通知が行われなくなる。
  • 不要な RECOVERY メッセージが通知される
    => サービスで通知される種別のデフォルト (notification_options) は
    WARNING(w), UNKNOWN(u), CRITICAL(c), 復旧状態(r) の4つ。 
    w, u, c のみに変更するとよい。

  

対応策
  • 追加プラグイン check_log3.pl を libexec ディレクトリ以下に配備する
    ファイルに実行パーミッションを付与すること 
  • visodo コマンドを行い、Nagios 実行ユーザに対して適切な権限を追加する
    /etc/sudoers 設定例
    Defaults:nagios !requiretty
    nagios ALL=NOPASSWD:/usr/local/nagios/libexec/check_log3.pl
    
    Nagios によるチェックは TTY でないので、Cronと同様 requiretty を無効化するのがポイント。
  • ログ監視サービス用のテンプレート例 (templates.cfg)
define service{
        use                             local-service
        name                            check-log-service
        is_volatile                     1
        max_check_attemps               1
        flap_detection_enabled          0
        notification_options            w,u,c
        register                        0
        }
  • コマンド定義例 (commands.cfg)
define command{
        command_name    check_log_crit
        command_line    sudo $USER1$/check_log3.pl -l $ARG1$ -s $ARG2$ -p $ARG3$ -c 1 $ARG4$
        }

define command{
        command_name    check_log_warn
        command_line    sudo $USER1$/check_log3.pl -l $ARG1$ -s $ARG2$ -p $ARG3$ $ARG4$
        }

(検知行数ではなく)検知文字列によってレベルを出し分ける場合は、2つのサービスに分けて登録する必要がある。

  • サービス定義例
define service{
        use                             check-log-service
        host_name                       localhost
        service_description             SysLog Warn
        check_command                   check_log_warn!/var/log/messages!/tmp/.messages.warn.seek!warn!-i
        }

"-i" は英大文字・小文字の区別をなくすオプション。(ignore case)

 

 

補足

NRPEを利用してリモートサーバのログを監視する場合、デフォルトの10秒のタイムアウトでは間に合わない場合がある。

check_nrpe コマンドのオプションとしてタイムアウト(-t)を明示的に指定することをお勧めする。

  • コマンド定義例 (タイムアウトを30秒に設定、ARG2 でその他のオプションを設定可能に)
define command{
 command_name check_nrpe
 command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 30 $ARG2$
 }

 

check_log3.pl 自体のタイムアウトは

/usr/local/nagios/libexec/utils.pm
の記載内容を引き継いでいるので
タイムアウトを引き延ばす場合は Perl スクリプト側の修正も必要。(デフォルト15秒)

 

References

4.21.2013

The Future of Computer Shogi

コンピュータ将棋の未来

2013年4月20日、現役プロ棋士とコンピュータ将棋ソフトの対局イベント「第2回将棋電王戦」の第5局が行われ、
三浦弘行 八段 が GPS将棋(東京大学大学院 Game Programming Seminar) に敗北した。

GPS将棋開発者の談話にもあるように、たった一度の勝敗で優劣を結論づけることはできないが
一つのマイルストーンとして重要な意味を持つ日となったことに異論はないだろう。

2005年(もう8年も経ってしまった)に発行された書籍に「コンピュータが勝ったあとの心構え」が書かれているので
読み返してみる。
Amazon.co.jp: アマトップクラスに迫る―コンピュータ将棋の進歩〈5〉: 松原 仁: 本 

 

コンピュータがプロに勝つということの定義

「プロに勝つ」という言葉は曖昧なので、まずはその条件を固定化しなければあまり意味がない。

  • 勝つ回数
    1回勝つのと多数回では意味が違う。
    多くの対局を重ねた上で、どの程度の勝率を得られるか。
    コンピュータオセロは何回やってもコンピュータが勝つという状態に既になっている。 
     
  • プロのレベル
    平均的プロと順位戦Aクラスの間、Aクラスと最強の間には大きなレベル差がある。
    つまり、羽生三冠や渡辺竜王は、三浦八段よりも果てしなく遥かな高みにいるということだ。 
     
  • 対局条件 
    • 持ち時間
      一般に、持ち時間が短いほどコンピュータが有利だと言われている。
      名人戦と同じレギュレーション(9時間, 2日制)だった場合にどうなるのか。 
    • 心理的要因
      たとえば、観客がいると人間にはプレッシャーになる。
      今回のような生中継であれば尚更だろう。
      体調やバイオリズムの問題もある。
      コンピュータにはそんなものを感じる仕組みはない。 
       
  • 人間プレイヤの対策
    人間が前もって対策を講じているかが最も重要なファクターとのこと。
    コンピュータのコードや特性を体系的に研究すれば効果は大きい。

「数回以下の対戦で、特にコンピュータ将棋を研究していない平均的プロとの戦いで、
持ち時間25分切れ負けで互角に戦う」レベルは2年半後に達成されるだろう

この本が発行された2005年の2年半後なので、既に過去となり、この予測は現実となった。

しかし、「多数回の対戦で、コンピュータ将棋を体系的に研究している名人との戦いで、
名人戦と同じ持ち時間で、コンピュータが勝ち越す」のはさらに数年後のことだろう

と予測している。
棋士の間でソースコード読書会が行われる光景が目に浮かぶ。

 

コンピュータが勝ったあとの心構え

しばらくするとどうやってもコンピュータ将棋に人間プレイヤが勝てないようになる。これは必然である。

オセロは既にこうなった。チェス・将棋も時間の問題である。
囲碁はもっと先の話であろうが、その日は必ずやってくる。

人間同士の対戦こそ将棋文化の中心であることを忘れてはならない

やはり人間の尊厳の問題。
ひとたび人間が負ければマスコミは大きく取り上げるだろうが、それに踊らされないようにと警鐘を鳴らしている。

コンピュータ将棋はあくまでも将棋文化のそれほど大きくない一部であって、中心であるべきではない。

 

勝敗に一喜一憂したり、プロの指し手に感動したりする気持ちは持ち続けてほしいと切に願う。 

 

一方、これは私の直感であるがコンピュータ将棋にはまだまだ改善の余地があると思うし
おそらくあと数回、Bonanza の登場・オープンソース化のような大きなイノベーションが起こる気がする。

最終的には将棋を解くこと(先手勝ちかどうかを結論づけること)も決して不可能ではないと信じている。

そうなれば、そのアルゴリズムは様々な分野へ応用されていくに違いない。

(ただし、アルゴリズムが人間に牙を剝く未来がくることを忘れてはならない
  ケヴィン・スラヴィン 「アルゴリズムが形作る世界」 | Video on TED.com

 

何はともあれ、5月3〜5日に開催される第23回 世界コンピュータ将棋選手権がますます楽しみになった。

  

References