| @Mac/iPhone

Mountain Lion な Mac (MacBook Pro Mid 2009)で MacVim (kaoriya版) から quickrun を実行すると以下のようなエラーが出て困ってる。

⚡ Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.py", line 62, in <module>
    import os
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py", line 398, in <module>
    import UserDict
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py", line 83, in <module>
    import _abcoll
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py", line 11, in <module>
    from abc import ABCMeta, abstractmethod
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py", line 8, in <module>
    from _weakrefset import WeakSet
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py", line 5, in <module>
    from _weakref import ref
ImportError: No module named _weakref

CUI の Vim で quickrun してもエラーは出ないし、会社で使ってる Mac (Mountain Lion MacBook Pro Early 2011) の MacVim (同じくkaoriya 版)で quickrun やってもエラーは出ない。

どうやらこの辺が関係ありそう。リンク先には ujihisa さんバージョンの quickrun ではなく thinca さんバージョンのやつを使えばエラーは出なくなる、とあるけど、自分が使っている quickrun は thinca さんバージョンのやつで、どうすればいいかさっぱりわからない。

MacVim が想定する Python とパスが通ってる Python のバージョンが違うのが問題なような気がする(調べてみたら、Python は 2.5 と2.6 と 2.7 がインストールされていた。なんでこんなに入ってるの…。パスが通ってるのは 2.7 らしい)ので、とりあえず MacVim を kaoriya 版から Homebrew のやつに変えてみることにする(brew install macvim)。brew でインストールするとコンパイルを行うので、パスが通ってる Python を利用するようになるはず。

と思ってやってみたら案の定、エラーはでなくなった。

| @技術/プログラミング

最近、cap deploy がしんどい。

5938930a9f1e1eb35812dbe10b5c1fd8.png (768×416)

こんな感じで、デプロイすると CPU の使用率が高まってしまう。Unicorn が暴走してるっぽい。シンボリックリンクとかはちゃんと置き換わってるんだけど、プロセスが古いままで、サイトの出力が新しくデプロイしたものに置き換わらない。こうなると cap deploy:restart とかやっても無反応で、ssh でログインして Unicorn を一旦停止し、手動で Lokka を再起動しないといけない。

拡散お願いしますアドベントカレンダー2012参加したとき、記事を公開してすぐサイトが落ちてしまって「やっぱりスモールマイクロインスタンスでは人気サイトポータルシットを運用するのは無理なのかな」と思ったのだけどどうもアクセスが集中して落ちたわけではないっぽい。

何なんだろう。

| @Mac/iPhone

MacBook Air すごく速くて使いやすいけど、自分のものではなくて家庭の所有物みたいな感じになっててあまり使わせてもらえなかった。悔しいので3年前に買った MacBook Pro 15” の HDD を外して SSD に入れ換えてみた。嘘みたいに速くなった。買ったのはこれ。いまは 512GB のやつも3万円くらいで買える。

一緒にディスクケースも買ったけど、間違って SATA じゃなくて IDE のやつを買ってしまって買い直さないといけなかった。あとポリカ MacBook の頃はトルクスドライバーは T8 でよかったのに(本当は恐ろしいMacBookのHDD換装)、最近の MacBook Pro は T6 じゃないとダメらしいので注意が必要。折角 SSD が手もとに届いたのにトルクスドライバーが無いために換装作業が出来なくて悶々としてしまった。

取り換え作業自体はそんなに難しくない。ただし光学ドライブ外して SSD と HDD の二ストレージ構成とかにしようとすると難しいと思う。TimeMachine からの復旧は NAS からやったら信じられないくらい遅かったし(300GB のデータ転送に三日くらいかかった)、Adobe 製品のライセンシングが機能しなくなってものすごくめんどくさいことになったのでオススメしません。ポリカ MacBook で HDD の換装やったときのデータの取り込みは、ディスクケースに入れて USB 接続した旧 HDD からやったけどこういう問題には遭遇しなかった。こっちの方が速くて安全だと思う。

ちなみに円高終わるっぽいので換装を考えてる人は早めに SSD 買った方が良いですよ。

使った道具

| @雑談

きっかけ

下鴨神社の看板

今年の三月、持病の経過観察で京都に行きました。病院の合間に下鴨神社と上賀茂神社にお参りしたり、六波羅の平家ゆかりの寺、六波羅蜜寺に行って平清盛像を鑑賞したりしました。帰る日の夕方にはヒトデ909さんのありがたい法話を聞きながら銅製のタンブラーでビールを飲みました。しかしこのとき僕はすでに肛門近辺の痛みのためまっすぐ座ることが出来ず、お尻の左半分で椅子に腰掛け、右半分は空中に浮かせていました。ヒトデ909さんのありがたい法談も半分くらいしか耳に入っていませんでした。

僕が痔ろうを発症したのは恐らく京都に行った前の週に参加した故郷での同窓会です。同窓会は阿蘇いこいの村という宿泊施設でとり行われました。阿蘇いこいの村はテニスコートがありますので、学生時代にテニスサークルで痴情をもつれさせていた紳士淑女のみなさんは泊まってみるといいと思います。

同窓会

僕は当初二次会には参加せずに帰ろうと思っていたのですが、参加者が少ないので協力して欲しいということで二次会に参加してしまいました。しかしこれが間違いでした。僕はインターネットの人と会ったときは饒舌なのですが、中学や高校の同級生と会ったときは寡黙になってしまいます。二次会では会場の隅っこに立って一人で延々キャラメルのリキュールを牛乳で割った液体を飲んでいました。これが全然酔わない。酔わないし手持ちぶさたなのでどんどんキャラメル牛乳酒を飲んでしまいます。これがまずかった。翌朝、下痢をしてしまったのです。

若い頃は飲み過ぎると吐いていました。しかし30歳になったあたりから酒を飲み過ぎると下痢をするようになりました。アルコールが体から抜けるまで下痢は治まりません。まぁ吐くよりかは楽なのですが、下痢は恐ろしいことに痔ろうの原因になるのです。

痔ろうはいきなり痔ろうにはなりません。まず最初、肛門周囲膿瘍というやつになります。お尻の穴の近くにおできが出来るのです。しかしこれは単なるおできではなく、肛門と直腸の間にある肛門陰窩というくぼみに下痢ピー状態のうんこが入り込んでしまい、そこが化膿してお尻の穴の近くまで膿を内包した袋が延び、肛門近辺におできを作ります。こいつがすこぶる痛い。38度程度の熱が出ます。このおできのことを肛門周囲膿瘍といい、おできから直腸のあたりまで繋がっている状態を痔ろうと言います。

告知

飛行機から見る雲

関西から夜の飛行機で帰ってきて眠りにつきますが、翌朝目が覚めたときには体がだるく、ただならぬ状態であることを悟りました。会社には遅れる旨連絡を入れ、天神近辺にある肛門科を探しました。

肛門科では見るなり肛門周囲膿瘍である旨告げられました。切開をして膿を出さない限り心の平安は訪れないそうです。僕は承知をして切開してもらいました。熱は下がりましたが、これからが地獄でした。

排膿したので熱は引きますが、傷口は相変わらず痛みます。傷口のろう管にガーゼを詰め込まれました。そしてさらに上からガーゼで傷口を圧迫される。僕は会社用と自宅用に円座クッションを二つ購入しました。会社では岡村製作所のバロンという上等な椅子に座らせてもらっているのに、この上に円座クッションを載せて座っていてなんだか残念な感じになっていました。

ハンディウォシュレット

傷口はお尻の穴の近くなので当然お尻の穴の上もガーゼに覆われています。最悪なことに大便でトイレに行くたびにガーゼの張り替えをしなくてはなりません。お尻の穴なんて自分では見えませんから、ガーゼの張り替えは困難を極めます。当然シャワーを浴びた後もガーゼを張り替えなければなりません。僕は毎日月経中の女性のように小さなポーチを持って個室トイレに入り、ガーゼを交換していました。

手術

切開から一ヶ月が経つ頃には傷口は落ち着き、ろう管に詰め込まれたガーゼも取り出してもらえます。通常の生活ができるようになった! しかしこれはつかの間の喜びなのです。切開後一ヶ月ないし二ヶ月を目安に、痔ろうを根治するための手術をしなければなりません。痔ろうとは放っておいても直らない病気なのです。

痔ろうは昔から多くの人を苦しめました。夏目漱石も痔ろうだったと言います(日本人編 近現代|じなび - 痔の総合情報サイト -)。昔は痔ろうの手術のために肛門を切り開いてろう管をそぎ取ったりしていたそうですが、最近はシートン法というものがあり、手術のために入院する必要はなくなりました。しかしこれもすこぶる痛かった。

シートン法とは肛門と痔ろうの管を輪ゴムのようなもので縛り、ゆっくりゆっくりと肛門周辺の組織を切り取っていく治療方法です。手術自体は局所麻酔と内視鏡で終わりますが、術後に地獄のような日々が待っています。せっかく傷口から膿が出なくなっていたのに、ゴム紐で肉をゆっくりと切っていくため出血したり膿が出たりします。異物が体に入り込んでいるので椅子に腰掛けるのは不可能になります。自宅では無印良品の体にフィットするソファに覆い被さるような姿勢で過ごさざるを得ませんでした。

体にフィットするソファに覆い被さる著者

しかも最悪なことにシートン法のゴム紐は一週間に一度締めなければなりません。ゴム紐は肉を切っていくので、だんだん締め付けが緩くなっていきます。定期的に締め付けを強くしないと治療が進まないのです。この締めるときがまた痛い。ある日昼休みに病院に行って締めてもらったら、あまりの痛さに耐えられなくなってしまって午後から会社を早退してしまいました。

死の散歩

結局、3月初旬に排膿のための切開をしてから6月まで地下鉄で椅子に座ったことがありませんでした。外出するときも歩き疲れたからと喫茶店に入って休むということが出来ず(お尻が痛いので椅子に座って休憩することができない)、かなりのスリルをあじわいながら生活していました。梅雨入り前の暑い日、出来心で海まで歩いて行ったのですが、炎天下に歩き続けて疲れて歩けなくなったらどうしようと気が気ではありませんでした。疲れ果ててもう歩けないと思っても、ケツが痛いためタクシーに乗ることが出来ないのです。まさかこんなことでは救急車なんて呼んでもらえないだろうしのたれ死ぬしかありません。

シートン法のゴム紐がとれたときには涙が出るほどうれしかったです。そのときのツイートです。

ゴム紐がとれたことがうれしくて、ワイフと二人で大ライスを食べて祝いました。

まとめ

僕はラーメン二郎のことは愛していますが、痔ろうのことは大嫌いです。


この記事は拡散お願いしますアドベントカレンダー2012の13日目の記事でした。

明日は @fuba さんです

| @技術/プログラミング

一個前の記事で書いた「記事の更新時に updated_at ではなく created_at が更新されてしまう」問題、原因はプログラム側にあるのではなく、MySQL の設定の問題だった。

mysql> desc entries;
+-----------------+--------------+------+-----+---------------------+-----------------------------+
| Field           | Type         | Null | Key | Default             | Extra                       |
+-----------------+--------------+------+-----+---------------------+-----------------------------+
| id              | int(11)      | NO   | PRI | NULL                | auto_increment              |
| user_id         | int(11)      | YES  |     | NULL                |                             |
| category_id     | int(11)      | YES  |     | NULL                |                             |
| slug            | varchar(255) | YES  |     | NULL                |                             |
| title           | varchar(255) | YES  |     | NULL                |                             |
| body            | text         | YES  |     | NULL                |                             |
| type            | text         | NO   |     | NULL                |                             |
| draft           | tinyint(1)   | YES  |     | 0                   |                             |
| created_at      | timestamp    | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| updated_at      | timestamp    | NO   |     | 0000-00-00 00:00:00 |                             |
| frozen_tag_list | text         | YES  |     | NULL                |                             |
| markup          | varchar(255) | YES  |     | NULL                |                             |
+-----------------+--------------+------+-----+---------------------+-----------------------------+
12 rows in set (0.00 sec)

updated_atcreated_at の設定値が逆になってたのが原因。ALTER 文でカラムの情報を入れ替えておいた。

MySQL に流し込んだ Sqlite3 のデータを dump したやつの CREATE TABLE entries を見ると以下のようになってた。

CREATE TABLE `entries` (`id` integer PRIMARY KEY AUTO_INCREMENT, `user_id` integer, `category_id` integer, `slug` varchar(255), `title` varchar(255), `body` text, `type` text NOT NULL, `draft` boolean DEFAULT '0', `created_at` timestamp, `updated_at` timestamp, `frozen_tag_list` text, `markup` VARCHAR(255));

なんでこれが created_at に対して更新時に現在時間を上書きし、 updated_at は作成時のみ現在時刻が入るようになるのかは分からない。

それにしても日頃 MongoDB ばかり使っていて、データにおかしなことがあるのはほぼ間違いなくコードのせいだと思う癖がついていることが今回よくわかった。データベースのスキーマを見てみるまでに3日くらい時間がかかった。とほほ。

一方でデータベース内のデータ構造のことをあまり考えなくてよく、開発のみに集中すればよい MongoDB はやっぱり便利だなと思った。規模がでかくなったり高速な読み書きをさばかなければならない状況だと MongoDB にも色々問題があるのでしょうけどね。

| @技術/プログラミング

Lokka 、データベースはずっと SQLite で使ってたけど仕事で MongoDB を使っているため SQL 力の弱まりを感じてきたので MySQL に変えてみた。SQLite3 から MySQL への移行は意外と面倒くさくて、以下の Redmine の手順を参考にやってみた。

  1. Strip out PRAGMA lines
  2. Strip out BEGIN TRANSACTION; lines
  3. Strip out COMMIT; lines
  4. Strip out DELETE FROM and INSERT INTO the sqlite_sequence table
  5. Replace AUTOINCREMENT with AUTO_INCREMENT
  6. Replace DEFAULT ‘t’ and DEFAULT ‘f’ with DEFAULT ‘1’ and DEFAULT ‘0’
  7. Replace ,’t’ and ,’f’ with ,’1’ and ,’0’
  8. Replace “ with ` except in string values (otherwise it replaces all quotes in your text)

Migrating from sqlite3 to mysql - Redmine

↑の通りにやっておおむねうまくいったんだけど、なんか過去の記事を編集して更新すると、updated_at カラムだけじゃなく created_at まで更新されてしまうっぽい。SQLite で使ってるときにはそんなことなかったんだけどなぁ。これは問題な気がする。DataMapper のバグかな。土日で余裕があったら調べてみる。

| @技術/プログラミング

Mac の iTerm 2 皆さん使ってますか。コンソール中に現れた文字列をハイライト通知できたりしていろいろ便利らしいですね。でも僕は使っていませんでした。なぜか。

Ctrl + Shift + J によるかな入力変換ができないから。

これが非常にだるかった。宗教上の理由や国外在住でJISキーボードが手に入らないなどの理由のためやむなく英語キーボードを使っている方、おられると思います。そういう人はだいたい Ctrl + Shift + J で英数 -> かなの入力変換を行っていると思いますが(Command + Space の切り換えもできなくはないけどだるいですよね…)、iTerm 上では Ctrl + Shift + J で改行が行われてしまうため、このような操作が行えていませんでした。かなから英数入力に切り替える Ctrl + Shift + * も同様、むなしく ' などが表示されるだけ。標準の Terminal.app ではできるのになんでやねん。

iTermでの日本語入力 - 初学者の箸置 なんかを参考に Send Hex Codes 0x4a するようにしてみたりしたのだけどうまくいかなかった。

しかし先ほど仕事をさぼって iTerm の設定項目を確認していたら以下の設定で使えるようになったのでここに書き記しておきます。

iTerm で Ctrl + Shift + J でかな入力変換する方法

↑のように、iTerm の Preferences -> Profile -> Keys で Ctrl + Shift + JCtrl + Shift + * の項目を追加し、メニューから "Do Not Remap Modifiers" を選ぶだけでオッケー。かな英数の切り換えが快適に行えるようになる。困っている方お試し下さい。