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

Xcode 6.1.1 に XVim を導入する

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

すべての Vim 族へ……(丸パクリ)

インストール

$ git clone git@github.com:JugglerShu/XVim.git
$ cd XVim
$ make
...
** BUILD SUCCEEDED **

Xcode を再起動。上部メニューに XVim が表示されていれば OK。

設定ファイルの作成

$ vi ~/.xvimrc
" Use ; as :, : as ;.
noremap ; :
noremap : ;

" Do not show the status line.
set laststatus=0

" Quick moves
map <C-h> 8h
map <C-l> 8l
map <C-j> 8j
map <C-k> 8k

便利機能

正直 Vim キーバインドと矩形選択とテキストオブジェクトが使えるだけでおなかいっぱいなのですが、:run でプログラムを実行できるなど、いくつか便利機能があります。詳細は 機能のリスト を参照。

インサートモードに入ってしまえば Xcode の補完が効くのでコード量が多い日も安心です。

さくらの VPS を使う - 7. CakePHP

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

CakePHP を学べば富も名声も恣だと聞いたので学習しようと思ったのですが、まずは環境が必要なのでさくらの VPSCakePHP が動く環境を整えました。

ちなみにこの記事は書きためで、記事作成 2013-02-12, 最終更新 2013-12-10 なのでやりかたが変わっている恐れがあります。あしからず。

参考サイト

CakePHP 公式のブログ作成チュートリアル を見ながらうごうご学習。

データベース準備と CakePHP 設置

$ ls /etc/php.d/

pdo.ini, pdo_mysql.ini の存在を確認。

$ vi /etc/php.ini

timezonedate.timezone = "Asia/Tokyo” を設定。

$ sudo service apache restart
$ wget cakephp_file  # Used 2.2.5
$ unzip cakephp.zip

ディレクトリ構造の解説:app に作ったものを入れる。lib はいじらない。vendorsサードパーティーのプラグインを入れる。詳しくは公式 参照。

続いてユーザーとか作成。このサイト が結構まとまっている。

$ mysql -u root -p
mysql> create database caketutorial;
mysql> grant all privileges on caketutorial.* to caketutorial@localhost identified by 'passoward';
mysql> flush privileges;
mysql> use caketutorial
mysql> exit

ブログデータベースの作成 にある手順で posts テーブルとテスト用記事を作成。

$ vi cakephpdir/app/Config/database.php.default
# Edit $default list
$ mv cakephpdir /var/www/html/
$ sudo chown -R apache:apache /var/www/html/cakephpdir/app/tmp
# chown-ing just this directory will do.

Web ブラウザでアクセスして、次のメッセージを確認。

Your database configuration file is present.
Cake is able to connect to the database.

公式の salt と seed の設定方法 を参考に cakephpdir/app/Config/core.php に乱数を設定。salt には使えない記号があるのかもしれない(最初は何故かエラーになった)。 mod_rewrite まわりでエラーが出てないのが逆に怖いけど完璧にブルーランプが点灯している welcome サイトっぽいのが表示されたのでこれはこれでいいということにしておく。

CakePHP アプリケーションの作成を開始

とにかく命名規則が大事らしい。

Model として Post.php 内に Post クラスを作ると、Controller として PostsController.php 内に PostsController クラスを作ったとき、その中から $this->Post->memberfunction()Post モデルのメンバ関数にアクセスできるようになる。また、PostsController クラスに hoge() 関数を作成した場合、www.example.com/posts/hoge でアクセスできるようになる。しかし URL を意識した命名をする必要はない。routes 機能を使ってルーティングすることができるので。

おおむね ブログチュートリアル のとおりに作っていけばいい。しかしいくつかハマりどころが存在する。

まず、ファイル PostsController.php があるのに「ファイルがありません!」というエラーが表示される。この場合は 解決策 を参考に php ファイルの先頭に <?php をつけたら全てがうまくいった。チュートリアルなんだからそこまで書いておけよって思うけれど、たぶん PHP の基礎なんだろうな。まずは PHP の文法を学んでからコーディングをはじめよう。

ちなみに <?phpPostsController.php の先頭につけておくだけで良いみたいなんだけど、書いてないと気持ち悪いし Vimシンタックスハイライトが使えなくなるから Model/Post.php の先頭にも書いておいた。

これ以降どうやってアプリケーションを作るかとかはこの記事の範疇ではないので略。

CentOS ログ・ステータスファイルまとめ

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

サーバーの OS として CentOS をよく使うのですが、ときどき「あのログファイルってどこにあったっけ」「あのステータスどうやって見るんだっけ」となるのでまとめました。

ログ

$ sudoedit /var/log/httpd/access_log
$ sudoedit /var/log/httpd/error_log
$ sudoedit /var/log/cron

cron は、cron さえ実行されれば異常終了してもエラーは吐かれない。次のように cron を実行すると実行時のログを保存できる。

*/30 * * * * /bin/sh /home/hoge/fuga.sh >>/tmp/analog.log 2>>/tmp/analog-err.log 

ステータス

$ du -h  # Directory size
$ service httpd status
$ chkconfig --list httpd
$ sensors

ハードウェア

$ cat /proc/cpuinfo | grep "model name"  # CPU
$ cat /proc/meminfo | grep Mem  # Memory
$ free -m  # Memory
$ df -h  # Storage
$ cat /etc/issue  # OS Version
$ uname -a  # OS
$ sudo netstat -tanp | grep LISTEN  # Listen Port list
$ ifconfig # IP address

ネットワーク

$ ping -c 4 google.com  # Check whether the Internet is visible

ソフト

$ yum check-update