ござるのブログ

覚え書きいろいろ

Ruby 2.2.0でRuby/TKを使えるようにするconfigureオプション

はじめに

rbenvruby-buildでそのままRuby 2.2.0を入れると、たいていRuby/Tkが使えないので、configureオプションを設定します。ちなみに、こちらのパッチは必要無くなったようです。

Debian SidやUbuntu 14.10 (64bit)の場合

$ apt-get install tk-dev
$ RUBY_CONFIGURE_OPTS="--with-tcltkversion=8.6 \
--with-tcl-lib=/usr/lib/x86_64-linux-gnu \
--with-tk-lib=/usr/lib/x86_64-linux-gnu \
--with-tcl-include=/usr/include/tcl8.6 \
--with-tk-include=/usr/include/tk8.6 \
--enable-pthread --enable-shared" \
rbenv install 2.2.0

FreeBSD 10.1の場合

$ pkg install tk86
$ RUBY_CONFIGURE_OPTS="--with-tcltkversion=86 \
--with-opt-dir=/usr/local \
--with-tcl-include=/usr/local/include/tcl8.6 \
--with-tk-include=/usr/local/include/tk8.6 \
--enable-pthread --enable-shared" \
rbenv install 2.2.0

最後に

WindowsRuby/Tkを使う場合は、こちらのサイトが大変参考になります。

iCloudのどこでもMy MacでMosh (mobile shell)を使う

はじめに

iCloudどこでもMy Macを使うと、こちらで紹介されているように、出先から自宅のMacSSHでログインできます。今回はさらに「SSHよりも高速」というMoshを、どこでもMy Macで使えるようにします。Moshの仕組みについては、こちらが詳しいです。

Moshのインストール

サーバとクライアントの両方のMacMoshの最新版をインストールします。Homebrewを使えば簡単です。

$ brew install --HEAD mosh

これでSSHで接続する時と同様にクライアントから

$ mosh hoge@fooMac.999999999.members.btmm.icloud.com

などとすれば、サーバに接続できそうな気がするのですが、

/usr/local/bin/mosh: Could not resolve hostname fooMac.999999999.members.btmm.icloud.com
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).

と言われてうまくいきません。そこで、こちらに書かれているようにクライアント側のmoshコマンドを以下のように修正します。1行加えるだけです。

--- /usr/local/opt/mobile-shell/bin/mosh.orig   2014-12-05 13:18:17.000000000 +1100
+++ /usr/local/opt/mobile-shell/bin/mosh        2014-12-05 13:23:49.000000000 +1100
@@ -36,6 +36,7 @@
 use strict;
 use Getopt::Long;
 use IO::Socket;
+use IO::Socket::INET6;

 $|=1;

これで

$ mosh -6 hoge@fooMac.999999999.members.btmm.icloud.com

とすれば、サーバに接続できるようになりました。

OSXにHomebrewで入れたnkfでman nkfするとfatal error: invalid device `nippon'と言われるのをなんとかする

はじめに

OSX YosemiteHomebrewnkfw3mなどを入れているのですが、

$ man nkf

とすると

/usr/bin/groff: can't find `DESC' file
/usr/bin/groff:fatal error: invalid device `nippon'

と言われて表示できません。しかし、こちらで紹介されている通りにやると、nkfのmanを日本語で閲覧することができました。

Homebrewでgroffをインストール

こちらで紹介されている通りに、Homebrewでgroffをインストールします。

$ brew tap homebrew/dupes
$ brew install groff

/etc/man.confの修正

$ sudo -e /etc/man.conf

で以下のように修正します。

--- /etc/man.conf.orig  2014-09-10 09:16:35
+++ /etc/man.conf       2014-12-03 22:10:24
@@ -92,7 +92,7 @@
 #
 TROFF          /usr/bin/groff -Tps -mandoc -c
 NROFF          /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c
-JNROFF         /usr/bin/groff -Tnippon -mandocj -c
+JNROFF         /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E
 EQN            /usr/bin/eqn -Tps
 NEQN           /usr/bin/eqn -Tascii
 JNEQN          /usr/bin/eqn -Tnippon
@@ -102,8 +102,8 @@
 PIC            /usr/bin/pic
 VGRIND
 GRAP
-PAGER          /usr/bin/less -is
-BROWSER                /usr/bin/less -is
+PAGER          /usr/bin/less -isr
+BROWSER                /usr/bin/less -isr
 HTMLPAGER      /bin/cat
 CAT            /bin/cat
 #

これで

$ man nkf

とすると

nkf(1)                                                                                              nkf(1



NAME
       nkf - ネットワーク用漢字コード変換フィルタ

SYNOPSIS
       nkf [-butjnesliohrTVvwWJESZxXFfmMBOcdILg] [file ...]

DESCRIPTION
       nkf はネットワークでメールやニュースの読み書きをするために作られた、漢字コードの変換フィルタであ
       る。

...

このように日本語で表示されるようになりました。

w3mのmanをUTF-8に変換

ところが、

$ man w3m

とすると文字化けします。/usr/local/opt/w3m/share/man/ja/man1/w3m.1EUCなのが原因なので、UTF-8に変換します。

$ nkf -w --overwrite /usr/local/opt/w3m/share/man/ja/man1/w3m.1

これで、w3mのmanも読めるようになりました。

Lubuntu 14.04のTcl/Tk 8.6とrbenvに入れたRuby 2.1.5でRuby/Tkを使う

はじめに

前の記事で「現時点でRuby/Tkは8.6には対応してない」と書いたばかりなのですが、こちらのサイトでパッチが公開されていて、Ruby/TkでTcl/Tk 8.6が使えます。(注: Ruby 2.2.0ではパッチが必要なくなったようです。こちらを参照のこと。12/02/15追記)

Tcl/Tk 8.6のインストール

apt-gettk-devをインストールするとtk8.6-devが入ります。

$ sudo apt-get install tk-dev

パッチを当てて、Ruby 2.1.5をビルド

こちらのサイトから、「Ruby-2.1.3 p242用パッチ」tk-diff-ruby-2.1.3-p242.gzを、ありがたくいただいてきます。2.1.3用となってますが、2.1.5でも問題無いようです。

ruby-buildにはパッチを当てる機能があるのですが、stripのレベルを指定できないようなので、今回はruby-buildを使いません。まず、Rubyの公式サイトから、Ruby 2.1.5のソースruby-2.1.5.tar.gzをダウンロードし、以下のようにパッチを当ててビルドします。

$ tar zxf ruby-2.1.5.tar.gz
$ cd ruby-2.1.5
$ zcat ../tk-diff-ruby-2.1.3-p242.gz | patch -p1
$ ./configure --prefix=$HOME/.rbenv/versions/2.1.5-tk8.6 \
--with-tcltkversion=8.6 \
--with-tcl-lib=/usr/lib/x86_64-linux-gnu \
--with-tk-lib=/usr/lib/x86_64-linux-gnu \
--with-tcl-include=/usr/include/tcl8.6 \
--with-tk-include=/usr/include/tcl8.6 \
--enable-pthread
$ make

ビルドが問題なく完了したら、インストールして有効化します。

$ make install
$ rbenv global 2.1.5-tk8.6
$ rbenv rehash

サンプルを動かしてみます。

$ ruby ext/tk/sample/cd_timer.rb 10

f:id:gzalt:20141123114741p:plain

うまく動きました。

最後に

記事のタイトルが長い…

Lubuntu 14.04にrbenvとruby-buildで入れたRuby 2.1.5でRuby/Tkを使う

はじめに

ちょっとした数値データを処理してグラフを表示するためにRuby Gnuplotを使っていたのですが、ここを見てRuby/Tkの素晴しさを知り、早速Lubuntu 14.04にrbenvruby-buildで入れたRuby 2.1.5でRuby/Tkを使おうとしたところ、環境構築にてこずりました。

Tcl/Tk 8.5のインストール

まず、Tcl/Tkをインストールします。apt-gettk-devをインストールするとtk8.6-devが入りますが、現時点でRuby/Tkは8.6には対応してないそうなので(注: パッチを当てると使えます。こちらを参照のこと。11/23/14追記)(注: Ruby 2.2.0ではパッチが必要なくなったようです。こちらを参照のこと。12/02/15追記)、以下のようにtk8.5-devを入れます。

$ sudo apt-get install tk8.5-dev

Ruby 2.1.5のインストール

次にRubyRuby/Tkrbenvruby-buildでインストールします。普通は

$ rbenv install 2.1.5

だけでいいと思うのですが、今回はこのままではTcl/Tkのヘッダやライブラリを認識せず、Ruby/Tkコンパイルされません。ここでだいぶ時間をロスしました。こちらのサイトでは、必要なライブラリにシンボリックリンクを張って対応しています。それでも良いと思いますが、/usr/libにパッケージシステム管理外のシンボリックリンクがあるのは何となく気持ち悪いので、以下のようにconfigueのオプションでどうにかします。32bitの場合はx86_64-linux-gnui386-linux-gnuなどに適宜変更してください。

$ RUBY_CONFIGURE_OPTS="--with-tcltkversion=8.5 \
--with-tcl-lib=/usr/lib/x86_64-linux-gnu \
--with-tk-lib=/usr/lib/x86_64-linux-gnu \
--with-tcl-include=/usr/include/tcl8.5 \
--with-tk-include=/usr/include/tcl8.5 \
--enable-pthread" rbenv install 2.1.5 -v
$ rbenv global 2.1.5
$ rbenv rehash

私の環境では、これでRuby/Tkがインストールされました。サンプルを動かしてみます。

$ ruby ext/tk/sample/24hr_clock.rb

f:id:gzalt:20141122154755p:plain

うまく動いているようです。

最後に

そもそも拡張TkパッケージPlotchartを使いたくてがんばっているわけですが、まだ使えていません。

$ sudo apt-get install tklib

という感じでPlotchartを入れたのですが、サンプルを実行すると下記のようにエラーになります。

$ ruby ext/tk/sample/tkextlib/tcllib/plotdemos1.rb
/home/gzalt/.rbenv/versions/2.1.5/lib/ruby/2.1.0/tk/package.rb:86:in `rescue in require': TkPackage attempt to provide package Plotchart 2.1.0 failed: package Plotchart 2.0.1 provided instead (RuntimeError)

道のりは長い…

Plotchartのバグ(23/11/14追記)

ここによると、どうもPlotchartのバグのようです。下記のように修正します。

--- /usr/share/tcltk/tklib0.6/plotchart/plotchart.tcl.orig   2013-03-14 17:01:30.000000000 +1100
+++ /usr/share/tcltk/tklib0.6/plotchart/plotchart.tcl 2014-11-23 19:11:59.456417506 +1100
@@ -2849,4 +2849,4 @@
 
 # Announce our presence
 #
-package provide Plotchart 2.0.1
+package provide Plotchart 2.1.0

サンプルを動かしてみます。

$ ruby ext/tk/sample/tkextlib/tcllib/xyplot.rb

f:id:gzalt:20141123172838p:plain

うまく表示されました。

Yosemiteで動かなくなったCUPS-PDFの代わりにVipRiserを使う

はじめに

Wineskinという素晴しいソフトウェアのおかげで、とても有名な2D CADであるJw_cadOSX上で使用することができます。この場合、OSXに接続されたプリンタから印刷可能なのですが、OSXの通常の印刷ダイアログは表示されないので、PDFに出力したい時に困ります。これまでは、Homebrewでインストールした仮想プリンタCUPS-PDFを使っていたのですが、Yosemiteで動かなくなってしまいました(詳しくはここ)。しかし、VipRiserという別の仮想プリンタがうまく動きました。

VipRiserのインストール

VipRiserのサイトから、VipRiser.zipをダウンロードして中のVipRiser.appをアプリケーションフォルダにコピーするだけです。

仮想プリンタの登録

VipRiser.appを実行すると最初にプリンタドライバのインストールが行われます。ドライバのインストール後に表示されるダイアログに従って、「システム環境設定」→「プリンタとスキャナ」で、「+」をクリックしてPrint to VipRiserを下記のように登録します。

f:id:gzalt:20141114142843p:plain

CUPS-PDFを使ったことがあると、既にPrint to VipRiserが登録されていたりしますが、一度「-」で削除して、再度登録した方が無難です。これで、VipRiserを起動すれば、仮想プリンタが使えるようになります。下記のようにメニューバーのアイコンからPDFの出力先を指定できるので、CUPS-PDFより便利です。

f:id:gzalt:20141114144912p:plain

下記のようにWineskin上のJw_cadからもPDFに出力できるようになりました。

f:id:gzalt:20141114145421p:plain

最後に

VipRiserのアイコンは何なのだろう…

LanguageToolをOSX Yosemiteで使う

はじめに

英作文がとにかく苦手なので、GingerFirefox拡張にかなりお世話になっていたのですが、今日確認したところ「このアドオンは作者によって削除されました。」となっていました。ChromeSafariを使えば良いのだと思いますが、私はFirefoxを使いたいのです。そこで、Gingerと同じように英文校正してくれるオープンソースのソフトウェアLanguageToolを使ってみることにしました。

インストール

HomebrewLanguageToolをインストールします。

$ brew install languagetool

とても簡単です。これで

$ languagetool-gui

とすると、下記のようなウィンドウが表示されます。

f:id:gzalt:20141113182222p:plain

上段にチェックしたい英文を入力すると下段にチェック結果が表示されます。

Firefoxのアドオンをインストール

languagetool-guiだけでもとても便利ですが、Firefoxから使えると、Gmaiiなどで英文メールを作成するときに便利です。そこで、FirefoxのアドオンLanguageToolFxをインストールし、下記のように設定の「URL of the local server」にhttp://localhost:58081と入力します。

f:id:gzalt:20141113183356p:plain

次にサーバを起動します。

$ languagetool-server -p 58081

これで、下記のようにFirefox上でLanguageToolが使えるようになります。

f:id:gzalt:20141113185822p:plain

実は、ローカルでlanguagetool-serverを起動しなくても、先のLanguageToolFxの設定で「Use web service when connecting with local server is not successful」にチェックを入れると、api.languagetool.orgに接続してLanguageToolFxが使えます。しかし、情報セキュリティが厳しくGingerなどが使えない場合でも、LanguageToolなら上記のようにローカルサーバを使うことができます。オフラインでも使えるので、とても便利だと思います。

ちなみに、ThunderbirdのアドオンはGrammar Checkerです。

languagetool-serverを自動起動する

languagetool-serverをいちいち手動で起動するのは面倒なので、私はログイン時にlaunchdで起動するようにしています。下記のような内容の~/Library/LaunchAgents/gzalt.languagetool-server.plistを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>gzalt.languagetool-server</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/languagetool-server</string>
        <string>-p</string>
        <string>58081</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

設定ファイルを読み込みます。

$ launchctl load ~/Library/LaunchAgents/gzalt.languagetool-server.plist

これで、ログイン時にlanguagetool-serverが自動起動するはずです。

$ ps x | grep language

などで、確認できます。

肝心の校正能力は?

まだちょっと使っただけですが、やはりGingerの方が性能が高い気がします。しかし、ローカル環境だけで使えるのはとてもうれしいです。 langtool.elがあるのも、Emacs使いにはうれしいところです。

最後に

ほんやくコンニャク欲しい。