Google Calendar で複数のカレンダーにまたがる予定をウィジェットとして公開する

この記事は KainokiKaede Advent Calendar 2014 18日目の記事です(大嘘)

東大の早野先生は ご自分のサイトで予定を公開 なさっている。ウェブベースのカレンダーを使うことの利点のひとつに、このような他者との予定の共有があるので、自分のカレンダーも公開してみようと思い立った。

しかし自分はカレンダーを用途別に分けて使っている。これら用途別のカレンダーを1つのウィジェットにまとめて表示させたい。ひとつのカレンダーをウィジェットとして表示するのは簡単(Google Calendar から直接できる)なのだが、複数を1つのウィジェットの中に同時に表示させるには Google が提供している Google Embeddable Calendar Helper を利用する必要がある。これを使えば、どのカレンダーをどの色で表示してウィジェット化する、などの設定を簡単に弄ることができる。

ちなみにどのように予定が表示されるか(ただ「予定あり」と表示されるのか、予定の内容も表示されるのか、予定すら表示されないのか)は各々のカレンダーの設定に依存する。その設定は上記の Helper からでは不可能で、Google Calendar の設定を弄る必要がある(方法は このあたり などを参照)。

カレンダーの中の個々の項目をプライベートに設定するには この記事 を参照。

非公開URLを使うことは推奨されない、表示されたリンクをクリックしてもいけない、という 記事 も見ておくとカレンダーをウェブで公開するためのリテラシーが高まる。

Mac で Adobe Reader を用いて右綴じの本を見開きで表示する

この記事は KainokiKaede Advent Calendar 2014 17日目の記事です(大嘘)

Mac で PDF を閲覧するときは標準の Preview.app を用いると便利である。しかし Preview.app には右綴じの本を表示する機能がついていない。日本語以外にも右綴じを必要とする言語はあると思うのだが、Apple のデバイスはそのような国では普及していないのだろうか?

とにもかくにも Preview.app では不可能なので、別のソフトを用いることになる。ComicViewer for Mac というソフトがあるが、サポートフォーラム を見るかぎり開発が停止して久しい。

さすがに PDF の大元である Adobe 御大ならばいかような PDF の表示も可能であろうと推察し、Adobe Reader をダウンロード した。最初は Retina ディスプレイに対応していないバージョンがインストールされて閉口したが、バージョンを 11.0.10 に上げれば高解像度対応の問題は解決した。

さてそこで見開きの問題である。そのままでは Preview.app と同じ方向(左綴じ)で表示される。PDF ファイルの設定を変更すれば修正されるようだが(そしてそれが正しい方法に思えるが)、残念ながら Acrobat を持っていないと簡単には変更不可能なようだ。ということで Adobe Reader の設定を変更して右綴じ専用ビューワとすることで対処する。

方法としては、環境設定で以下を設定する。

  • フルスクリーンモード > 1ページ全体をフルスクリーン表示 のチェックを外す。
  • ページ表示 > デフォルトレイアウトとズーム見開きページ 全体表示 にする。
  • 言語 > デフォルトの読み上げ方向右から左へ にする。

以上で、フルスクリーンモードで右綴じの本をちゃんと表示できる。ページが1ページズレるという現象に対しては、

  • メニューバーの 表示 > ページ表示 > 見開きページ表示で表紙を表示 にチェック

することで対処可能である。ちなみにフルスクリーンモードへの移行のショートカットキーは Cmd+L である。

ただしこれでも次のページに進むためには右矢印を押す必要があり直感的ではない。しかしまぁこのくらいは許容可能であるし、右矢印のほうがキーボードの外側にあるため押しやすく便利でもある。

夜にメールを書いて朝に送る(Gmail を特定時刻に自動で送信する)

この記事は KainokiKaede Advent Calendar 2014 16日目の記事です(大嘘)

生活リズムが崩壊しているので常識的な時刻にメールを送ることができない。できれば夜に書いて朝に送り、睡眠時間を偽装したい。

Thunderbird などのメーラーを使っているならアドオンでなんとかすればいいが、残念ながら完全に Gmail のウェブアプリに移行してしまっているためアドオンを付け加えることが不可能である。

Boomerang みたいな Gmail 自動送信アプリを使おうとも思ったが有料だし、なんか外部サービスに Gmail を預けるのがちょっと抵抗があるのでやめておきたい。

そこで Google Spreadsheets のスケジューリング機能を使って Gmail を送信しようということになる。幸い既にそのための コード を書いてくれている人がいて、それを簡単に利用できるようにする スプレッドシートを配布 してくれている人もいる。解説動画 もある(親切だ)。

手順としては:

  1. Gmail でメッセージを作成して、送信せずに下書きに保存する。送信予約をした後に編集をすると予約がキャンセルされてしまうので注意。ちゃんと完成させてから以下の手順に移る。
  2. このリンク をクリックして上記のコードが既に導入されているスプレッドシートを自分の Google Drive にコピーする。
  3. そのままだとタイムゾーンがインドになっているので(たぶん元の製作者がインド人)、File > Spreadsheet Settings からタイムゾーンを自分の場所のものに変更する。
  4. メニューバーの Gmail Scheduler > Step 1: Authorize を選択して Spreadsheet から Gmail を操作できるようにする。なにやってるのかわからないから不安だという人は、 Tools > Script Editor からこのシートで組まれているコードを読むことができる。300行弱の JavaScript コードなので読んでみると面白いかも。外部にメールなどを送るようなコードは書かれていないように見える(責任は持てないが……)。
  5. Gmail Scheduler > Step 2: Fetch Messages を押すと、下書きに入っているメールが Spreadsheet にリストアップされる。
  6. 時刻を設定する。適当に入力しても Google 先生がなんとかしてくれるが、私は 2014-12-16 08:00 のように(手で)入力している。
  7. Gmail Scheduler > Step 3: Schedule Messages を押すと、Status のところに Scheduled と表示される。この状態になったら勝手に送信されるので Spreadsheet を閉じてもかまわない。
  8. 送信予約をキャンセルしたい場合は Gmail Scheduler > Cancel Pending Jobs を押せばキャンセルされ、Status に Not Scheduled と表示される。
  9. 必要なくなった行は行ごと削除してしまってかまわない(たぶん)。

便利なのは、Gmail 上で編集したものをそのままスケジューリングできること。画像とか添付ファイルとかを設定しておけば、それをそのまま送ることができる(コードを読むと実はそのまま送っているわけではなくてまるまるコピーして送ったのちに元のメールを削除するということをしているのだが(それゆえ元のメールがゴミ箱に残るのだが)、まぁその部分の処理はわりと頑張って書かれているようなのでおおむね問題なかろう)。

でも正直 Gmail の標準機能として実装してほしいところである。はてなブログにすら「日時を指定して投稿」機能があるのに Gmail にないってのはどういう了見なのか。

Vim で Evernote を編集するために vim-geeknote を導入する

この記事は KainokiKaede Advent Calendar 2014 15日目の記事です(大嘘)

EvernoteVim で編集したい。Geeknote と vim-geeknote を導入してこれを実現する。

環境: OS X Yosemite 10.10.1, MacVim-KaoriYa, NeoBundle

Geeknote の導入

コマンドラインから Evernote を編集するプログラムである Geeknote をまずは導入します。

公式 を参考に。

$ git clone git://github.com/VitaliyRodnenko/geeknote.git
$ cd geeknote
$ sudo /usr/bin/python setup.py install  # Install to the system python (/usr/bin/python), not to the Homebrewed python (python).
$ geeknote login

vim-geeknote の導入

公式

Geeknote から Evernote にログインした状態でしか使えないので注意。

NeoBundle ’neilagabriel/vim-geeknote'

vim-geeknote を使う

詳しい使い方は上記の公式ページを参照。

:Geeknote でノートのリストを表示。Enter でノートの編集を開始。ふつうに :w すれば保存可能(ほぼ同時に Sync される)。:GeeknoteSyncEvernote 側の変更をフェッチすることもできる。

ノートの1行目はタイトルなので削除してはいけない(リネームは可能)。タイトルのリネームはリストを書き換えて保存することでも可能(まじすか)。これと同じ発想でノートの移動も可能(ノートの行を他のノートの中に移動させる)。

:GeeknoteCreateNote <name> で新しいノートを(現在選択されているノートブックの中に)作成。

ちょっと見栄えを良くするために vimrc に次を記述。リスト表示の横幅の最大を制限するのと、行数表示を消す。

let g:GeeknoteMaxExplorerWidth=60
autocmd FileType geeknote setlocal nonumber

Mac OS X Mavericks に Ureka1.4.1 を導入

この記事は KainokiKaede Advent Calendar 2014 14日目の記事です(大嘘)

なぜ Yosemite ではなく Mavericks の記事かというと、書き溜めだからです。ごめんなさいね。

Astropy, IRAF, PyRAF をそれぞれ単独で導入することの困難さを解決したい

Python を用いて天文データの解析を行いたいが、Astropy が pip でインストールできない。IRAF を入れたはずだがうまく動かない。PyRAF も動かない。どうしようかと悩んでいたら Ureka なるパッケージを見つけた。上記のものがいっぺんに導入される。何がインストールされるかは Components を参考に。入れるのが難しそうなモジュールがいろいろ入っていて、これ天文以外にも使えるんじゃないですかねといった感じだ。アンインストール も簡単である。

Ureka のインストール

導入方法は 公式 を参考に。

sh install_ureka_1.4.1 をしたディレクトリに Ureka ディレクトリができ、その下にバイナリが展開される。なのでたとえば Downloads ディレクトリでこのコマンドを打つべきではない。適当なディレクトリを見つけてそこに展開してやるべきだろう。ちなみに Downloads に展開してしまっても、Ureka ディレクトリごとどこかに移して、そのディレクトリで bin/ur_normalize を実行すれば移行が完了する。しかしその際はリファレンスの書き換えなどが行われて時間を食うので、どうせやるなら最初から目的のディレクトリで sh install_ureka_1.4.1 を実行しておくべきだ。

インストールには30分ぐらいかかるけど辛抱。Updating shebang lines… で長時間止まったように見えるけど辛抱。

$ sh install_ureka_1.4.1
About to install Ureka 1.4.1 in
/Users/hogehoge/Ureka
Continue? Enter yes or no [yes]: yes
...
======================================================================
Ureka is installed.  Log in a new terminal window and type the command
    ur_setup
or
    ur_setup common primary
to select your Ureka environment.  'ur_setup -h' will show some help.

Installation complete

For more information about how to use Ureka, check out the online
documentation: http://ssb.stsci.edu/ureka/1.4.1/docs/index.html

使い方は ドキュメント を読む。ur_setup で Ureka 由来のコマンドが使えるようになる。ur_forget でそれらを deactivate する。

ds9 とかを使えるようにするために XQuarts も入れておく。

PyRAF を使用してみる

ついでに、せっかくインストールしたのだから IRAF の Python によるラッパである PyRAF を使ってみよう。PyRAF は実行ディレクトリにいろいろとファイルを作るので、あらかじめ実行用のディレクトリを作っておいたほうがよい。

$ mkdir pyraf
$ cd pyraf

とりあえず mkiraf を実行して login.cl を作ってもらおう。ターミナルタイプをデフォルトの xterm-256color のままにするとエラーが出る。公式 によれば xgterm でないと動かないものもあるようなのでそれにしよう。

$ mkiraf
Enter terminal type [default xterm-256color]: xgterm

そして pyraf を起動する

$ pyraf

コマンドリストは ? で表示できる。プロンプトから抜けるときは .exit と打つ。

これ以降の使い方は人によって異なると思うので私はここで筆を置く。

TrueCrypt の後継プロジェクトまとめ

この記事は KainokiKaede Advent Calendar 2014 13日目の記事です(大嘘)

TrueCrypt が沈んだ。残されたものは運命に抗うため、新たなプロジェクトを立ち上げた。みたいな(適当)

TrueCrypt の fork はいくつかあるみたいだけど、似たような機能を提供する有力なプロジェクトは2つだけかな。

プロジェクト名 ソースコード TrueCryptドライブとの互換性 更新頻度
CipherShed GitHub あり 低(もしかしてdead? 9月にブログ更新あり
VeraCrypt CodePlex なし

いまのところは VeraCrypt がちゃんと動いている唯一のプロジェクトである。ただ CipherShed も完全に死んだわけではなさそうだからもうちょっと様子を見たい。

正直 TrueCrypt はちゃんと外部のコード監査とかも入って超優良プロジェクトだと思っていたのにこの結末は残念である。他のプロジェクトを使うにしても、それが信頼できるかわからないし、こまったなぁといった感じだ。TrueCrypt7.1a にはまだ致命的な脆弱性は見つかっていない ようなので、これを使いながら様子を見て、上記のプロジェクトのどちらかが成熟したらそれに乗り換えるってのが最適に思える。

さくらの VPS でスワップが大量発生した原因と対処

この記事は KainokiKaede Advent Calendar 2014 12日目の記事です(大嘘)

さくらの VPS のメモリ 1GB のプランを利用しているのだが、かなり重くなったりしたので原因を調べてみた。

Munin で見てみるとスワップがGB単位で発生していて、どうやらこれが重くなる原因と考えられた。

どのプロセスがスワップしているのかを調べるため、 スワップの量の順にソートする Perl スクリプト を書いてくださった方がいらっしゃったので利用させていただく。

$ perl swaplist.pl | head -40
--------------------+----------+---------------+
       Swap size classified by processes       |
--------------------+----------+---------------+
    Process Name    |   PID    |   Swap Size   |
--------------------+----------+---------------+
clamd               |       997 |       273028KB |
ruby                |     23761 |       103788KB |
httpd               |     23749 |        43288KB |
httpd               |      7753 |        30132KB |
httpd               |      5002 |        25880KB |
ruby                |      4732 |        23536KB |
mysqld              |      1135 |        22408KB |
httpd               |     23753 |        13296KB |
httpd               |     16240 |        12824KB |
httpd               |      7756 |         9744KB |
httpd               |     16239 |         9724KB |
httpd               |      7754 |         7380KB |
httpd               |      7758 |         5648KB |
httpd               |     23750 |         5580KB |
httpd               |      7755 |         5124KB |
munin-node          |      1332 |         5056KB |
httpd               |     16238 |         4872KB |
httpd               |     23747 |         4824KB |
httpd               |      7759 |         4800KB |
httpd               |      7757 |         4664KB |
httpd               |      1246 |         4660KB |
httpd               |     23748 |         4260KB |
httpd               |     23751 |         4012KB |
httpd               |     23752 |         3320KB |
httpd               |     21920 |         3196KB |
httpd               |     23746 |         3060KB |
python              |      1707 |         2584KB |
rsyslogd            |       920 |         1096KB |
tmux                |      5325 |         1000KB |
qmgr                |      1242 |          876KB |
master              |      1233 |          808KB |
PassengerHelper     |     23731 |          744KB |
udevd               |       378 |          716KB |
udevd               |       662 |          712KB |
sshd                |       958 |          616KB |

これを見ると問題点がわりと明確になる。

  1. ClamAV がメモリを食いつぶしている。
  2. httpd が大量に生成されてメモリを食いつぶしている。

1.

対症療法(笑):$ sudo service clamd restart

参考URL

スキャン対象のディレクトリを制限してやるのが良いようだ。具体的には /proc/ /sys/ を除外するとか。

$ sudoedit /etc/clamd.conf
- #ExcludePath ^/proc/
- #ExcludePath ^/sys/
+ ExcludePath ^/boot/
+ ExcludePath ^/proc/
+ ExcludePath ^/sys/
+ ExcludePath ^/var/
+ ExcludePath ^/etc/
$ sudo service clamd restart
Starting Clam AntiVirus Daemon: LibClamAV Warning: Detected duplicate databases /var/lib/clamav/main.cvd and /var/lib/clamav/main.cld, please manually remove one of them

$ sudo rm /var/lib/clamav/main.cld
$ sudo service clamd restart

2.

参考URL

$ sudoedit /etc/httpd/conf/httpd.conf
<IfModule prefork.c>
- StartServers       8
- MinSpareServers    5
- MaxSpareServers   20
- ServerLimit      256
- MaxClients       256
- MaxRequestsPerChild  4000
+ StartServers        4
+ MinSpareServers     2
+ MaxSpareServers    10
+ ServerLimit       128
+ MaxClients        128
+ MaxRequestsPerChild 30
# MaxMemFree 1024
</IfModule>
$ sudo service httpd restart