RubyのresolvによるIPv6のDNS逆引き時のエラー

RubyResolvIPアドレス(IPv4とv6が混在した某アクセスログ)の分析を行おうとした際に「can't modify frozen String (RuntimeError)」のエラーが表示されたので、メモを残しておく。症状としては、IPv4は問題なく逆引きできる、IPv6の逆引きはできない。

動作環境

OS: OSX Yosemite 10.10.5

$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin14]

サンプルコードと実行結果

$ host google.com
google.com has address 216.58.197.238
google.com has IPv6 address 2404:6800:4004:800::200e
require 'resolv'                                                                                                          

ipv6_test_string = "2404:6800:4004:800::200e"
puts ipv6_test_string
puts Resolv.getname(ipv6_test_string)
$ ruby hostname_fetcher_from_ipv6.rb
2404:6800:4004:800::200e
/usr/local/Cellar/ruby/2.3.0/lib/ruby/2.3.0/resolv.rb:2462:in `block in create': can't modify frozen String (RuntimeError)
        from /usr/local/Cellar/ruby/2.3.0/lib/ruby/2.3.0/resolv.rb:2462:in `scan'
        from /usr/local/Cellar/ruby/2.3.0/lib/ruby/2.3.0/resolv.rb:2462:in `create'

原因と対策?

当初、文字列が連結されている?と思い、.frozen?で状態を確認したり、.dupして複製したものを放り込んでみたりしたが変わらず。アップデート系のコマンドをググって試してみるも変化なし。
どうしようと思いながら調べていると、以下の情報を発見した。
Resolv::IPv6.create: avoid modifying frozen string literal · ruby/ruby@a3b53cd · GitHub

Bugっぽい?ということで、resolv.rbに変更を反映して再実行したところ、直った。そのうち本体に反映されるのかな?

 $ ruby hostname_fetcher_from_ipv6.rb
2404:6800:4004:800::200e
nrt12s01-in-x0e.1e100.net

完全にビギナーなので事あるごとに躓いている気がするが、これで分析の続きができる。

MySQLでERROR 2006 (HY000) MySQL server has gone awayが出たときの対処

無事解消できたか分からないので間違いがあるかもしれないけれど、表題のエラーが出たときのメモ。状況としては、WikipediaのDumpをインポート中に発生した。日本語版、中国語版、英語版の順番で処理をしていて、英語版でコケたのでデータサイズが原因のように思う。

エラーメッセージ等で調べると「max_allowed_packet」の値を大きくすると良いという情報が出てくる。この値を確認するには以下のコマンドを実行すれば良い。ただし、自環境では同コマンド実行時にエラーが出て値を確認できない状態だったので、原因を調べることにした。

$ mysql> show variables like 'max_allowed_packet';

mysql - Table 'performance_schema.session_variables' doesn't exist - Stack Overflowによると、mysql_upgradeを実行してmysql.serverをrestartすれば良いらしい。記憶が不鮮明だが、以前show variables like ~ で何かの設定値を確認したときは通ったように思うので、MySQLのアップグレード時(brew update/upgrade経由)に何か起きたのかな。

set globalなんちゃらのコマンドを使えば設定ファイルを手動で書き換えなくても設定が反映されるという情報を見かけたが、自環境ではうまくいかなかったので(pathが通っていないとかそういう原因かな)、設定ファイル(my.cnf)を探して書き換えることにした。少し前に変更を行った記憶はあるのだが、どこにあるのか分からなかったので、my.cnfの場所を調べる - Qiitaにあるコマンドを実行した。念のために以下にコピペしておく。

$ mysql --help | grep my.cnf

上記を実行後、「max_allowed_packet」の値変更が反映されたことを確認したのち再挑戦したが、前回よりも少し読み込みが進んだところで再度コケた。めげずにググり直し、それっぽい設定が書かれた内容をほぼそのままコピペし(タイムアウトまでの時間を伸ばしたりした)、ただいま3回目の挑戦中。うまくいくと良いのだが。ダンプファイルから必要な箇所だけ取り出してインポートすることも考えたが、すこし面倒くさそうなので、なるべく避けたい。

見よう見まねでやっているので正しいアプローチかどうか定かでないという根本的な問題があるが、いまのところ、周囲にこの手のことに特化して詳しい人がいない。本当に必要な(=抽出したい)データは全体のなかの一部なので、もっと良い方法があるかもなあとは思う。

## 追記 ##
・外付けディスクにSQLファイルを入れた状態でimportしているのが時間がかかる要因(のひとつ)かもしれない。
import作業を行なっているマシン自体、リモート接続して操作しているのだが、zsh上でpmset noidleなどの指定を行っても外付けのディスクへのアクセスは非操作時には停止しているのかも。本体のストレージを圧迫するのが嫌なので隔離しているのだが、あまり良い戦略とは言えないかもしれない(ただいま進捗50% 3月14日16時時点)
・58時間ほどかかったが、importが完了した。容量次第ではあるが、今度からはローカル領域にデータを置いて作業しようかな(2016年3月15日21時時点)

PDFファイルのしおり部分の文字化け

文字コードUTF-8の状態の.texファイルから出力したPDFファイルで「しおり」や「目次」の日本語が文字化けする件、ググってみたら対策が書かれていた。以下、備忘録としてメモ。

この問題は、具体的には、以下のような状態になってしまう。これはOSX環境であれば、Preview.appでは「表示」>「目次」で表示される部分、Skim.appでは左側にページ数とともに表示される部分である。
f:id:jir_o:20151124161628p:plain

この問題は、pLaTeX で日本語しおり | Konno Logに示されている通りに記述を追加すれば、以下のように解消できる。
f:id:jir_o:20151124161623p:plain

ちなみに、私の環境では
\usepackage[dvipdfmx]{hyperref} の後に書いても問題なく動いている。

\usepackage{atbegshi}
\ifnum 42146=\euc"A4A2
\AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}
\else
\AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
\fi

Office365のメールをGmailで管理する

研究科メールアドレス(slis.tsukuba.ac.jp)は、現在、Office365で運用/提供されている。私は同メールアドレスをGmailで管理(送受信)している。以下、Gmailで管理するための設定情報をメモとして記す。

設定に必要な情報は、Office365にログインし、Outlook web appの右上、設定(歯車のアイコン) > オプション > POPとIMAP を選択すると表示される。基本的に表示された通りの内容で設定を行えばよい。

ただし、Gmailでの設定時にtimeoutが表示され、うまくいかないことがある(私自身は設定時にボタン連打していたら通った(!)ので「smtp.office365.com」を指定している)。
どうしても設定がうまくいかない(通らない)場合は、nslookupやhostなどのコマンドを用いて、smtp.office365.comについて調べるとよいとのこと(「outlook-apacnorth.office365.com」、「outlook-japan.office365.com」を指定すると成功する例があるらしい)。

以下の情報が参考になった。
≪gmailでoffice365のメール送受信をしたい≫ 私は上記のwebメール2つを使って... - Yahoo!知恵袋
Knowledge for Google Products: 【特殊事例の紹介】smtp.office365.com を送信サーバーとしてGmailに登録する場合にはご注意を!
EKBO: Office365のSMTPサーバーをGmailに登録できない
https://productforums.google.com/forum/#!topic/gmail/MV51L96nRQ4

以上、ご参考まで。

OSXのアップグレードとTeX環境

MacBook Pro(Mid2012)をMavericks(10.9)からYosemite(10.10)にアップグレード。時々カーネルパニックを起こすようになってしまった。まあそんなものなのかな(そのうち安定するようになると嬉しいなあ)。アップグレード時、HomebrewやTex Liveを使っている場合は時間がかかる場合があるらしいので、MacBook AirをYosemiteにバージョンアップを参考に、事前に一部ファイルの配置を変更し、完了後に戻した。

アップデート後?気づけばTeX環境で画像の埋込みに失敗して表示されなくなったので、その問題の対処方法について。
OS X 10.10 YosemiteにしたらConvertなどが使えなくなった | rakkyooの備忘録が詳しいので、改めて書くことでもない気がするけれど。。某申請書の作成時に図が表示されなくて発狂しそうになった。具体的には、末尾のようなエラーが出る(/usr/X11/ を見に行っているが、Pathが誤っているため処理に失敗しているらしい。$ cd /usr/X11 すると「No such file or directory」が返ってくる)。
どうやらPathが /opt/X11 に変わったらしい。。なんて傍迷惑な。。結論としては、シンボリックリンクを貼ると良いようです。
$ sudo ln -s /opt/X11 /usr/X11

$ dvipdfm egg_dc
egg_dc -> egg_dc.pdf
[1][2][3dyld: Library not loaded: /usr/X11/lib/libXt.6.dylib
  Referenced from: /usr/local/bin/gs
  Reason: image not found


$ epstopdf egg_L.eps
dyld: Library not loaded: /usr/X11/lib/libXt.6.dylib
  Referenced from: /usr/local/bin/gs
  Reason: image not found
epstopdf ($Id: epstopdf.pl 36129 2015-01-24 00:30:11Z karl $) 2.23
!!! Error: Writing to gs failed, signal 5

この手のことをサッと解決できるようになりたいなあ。