raspberry piにvncでリモート接続するとcameraアプリが上手く動かないという問題

tightvncserverを使用してraspberry piVNC接続を受け入れるようにしていたが


http://qiita.com/suppy193/items/91609e75789e9f458c39
上記記事のcamera.pyを試したところエラーが発生

$ python camera.py
Xlib: extension "RANDR" missing on display ":1.0".

(left:1142): GdkGLExt-WARNING **: Window system doesn't support OpenGL.

これは、macの「画面共有」で接続し、リモートデスクトップ上のコンソールから実行した。

いろいろ調べたがtightvncが良くないらしい。
x11vncが良いという情報もあったが別のエラーで動作せず。

vnc4serverを入れたところ上手く行った。

$ sudo apt install vnc4server

でインストール

$ vnc4server

で起動
設定はtightvncserverと共通であるらしく、自動的に引き継がれたようだ。

久しぶりにArduinoを触って文字列処理でハマった。

  • sprintfで%fの書式は使えない。そのまんま".2f"とか出てくるから泣ける。
  • .c_str()の戻り値を変数に入れると文字化け。これも意味がわからなくて泣いた。

もう泣かなくて良いようにメモっとくよ。
(しかし書いたことを忘れてまた泣くのかも)

IRuby notebook を Macに入れようとしてハマった。(入りました)

基本的にIRubyのREADMEに書いてあるとおりでいいのだけど、rubyのバージョンや依存するツールなどでハマった。
とりあえず以下の手順で上手く行った。IRuby notebookとは何かとか、使い方とかはまだよくわからないので触れない。*1 iruby 0.2.8を入れた時の話です。
github.com

1. Anacondaを入れる

AnacondaはPythonの実行環境の一つ。科学計算向けのPythonライブラリやJupyter notebookが一緒に入ってくれる。
これがないとIRuby noteboookも動かないので入れる。
普通にインストーラを使って入れればOK。インストーラGUI版とコマンド版があるけどどっちでも良い。Pyhton3のものを入れること。*2

2. rubyは2.1.5 (ruby 2.2.2だとrbczmqのインストールでエラー。)
$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
3. 以下のコマンドで依存ツールや依存ライブラリを入れる
#ここをやらないと rbczmq のインストールでエラー。
$ brew install libtool autoconf automake autogen 

$ gem install rbczmq
$ gem install iruby

gem install rbczmq の代わりに brew install zeromq して gem install ffi-rzmq すればOKという情報もあったけど上手く動かなかった。(インストールは成功するものの、起動後にKernel Rebootを繰り返す)

4. rbenvを使っていたので rehashしてirubyコマンドにパスを通す
$ rbenv rehash
5.起動
$ iruby notebook

これでJupyter notebookの画面がブラウザで開く。右上の「new」のメニューから「Ruby 2.1.5」を選ぶとノートブックが開き、rubyのコードを編集・実行できるようになる。

6.終了

iruby notebook コマンドを実行したコンソール(いろいろログが出ていると思う)でCtrl+Cを押すと

Shutdown this notebook server (y/[n])?

と出るので、yを押すと終了する。ブラウザは普通に閉じれば良い。


ググってもインストールでハマった情報がなかったので苦労した。つらい。インストール方法は割としょっちゅう変わっている模様。
同じようにつらい思いをした人は参考にしてね。

*1:上手く行った話はググればいくらでも出てくるしね

*2:余談だがAnacondaを入れるとconda というパッケージ管理コマンドが入るのだけど、これがrbenvとBundlerを合わせたような感じでなかなか便利そうだなと思った。Python使わないので利用する機会は多分ないけど。

さくらのレンタルサーバで自分から届いたメールを.Sentディレクトリに自動的に移動する

メールを送信するときに自分宛てにBccして送信したメールを保存しておく、ということはよくやるけれども、自分からのメールはやっぱり別フォルダに分けておきたい。IMAPを使えばサーバ上で自動的にフォルダを分けて送信済みメールは専用フォルダに行くようにしてくれそうなものだけども、iPhoneの「メール」はIMAPでもそういう気の利いてくれたことをしてくれないようだ。*1
また、メールの送信サーバと受信サーバが違う場合もうまくいかない(と思う)。
そこでサーバの設定を触って自分用にBccされたメールが自動的に送信済みフォルダに移動されるようにしてみた。

さくらのレンタルサーバではメールは /home/(サーバのアカウント)/MailBox/(メールアカウント)/maildir/ (以下、maildirディレクトリと呼ぶ) というディレクトリの中に保存され、送信済みフォルダはその下の .Sent/ (以下、.Sentディレクトリと呼ぶ)というディレクトリに相当する。
また、maildropというツールが導入されており、サーバ上でメールの振り分けが可能だ。
maildropに関してはさくらのレンタルサーバー非公式FAQの「メール」という項目に情報があった。
faq.sakuratan.com

maildropのための振り分け設定は上述した maildir ディレクトリが存在するのと同じ階層の、/home/(サーバのアカウント)/MailBox/(メールアカウント)/ にある .mailfilter というファイルに書く。以下のようにした。

シェルスクリプトのように色々コマンドを書いたり、変数を使ったりできるようだ。
メール受信時に .mailfilter が実行されるとき、カレントディレクトリは /home/(サーバのアカウント)/MailBox/(メールアカウント)/ になるので、pwdコマンドを実行した結果の文字列から自分のメールアドレスの@より前を取得できる。他のメールユーザに展開したい場合もファイルコピーだけで対応できる。(でも他の振り分け設定を上書きしないよう注意が必要)

*1:後で調べてみたら、なんか設定すればいいらしい

2重起動したくない時のための起動スクリプト

1時間に1度起動するスクリプトが実行し終わるまでに1時間以上かかってしまうかもしれないとしたら?
前の処理が終わる前に新しい処理が始まってしまうと処理しているデータの整合性が失われて困ったことになるかもしれない。
なので、ロックファイルを使って処理が2重に起動しないようにする起動スクリプトを書いてみた。
イデアは大したことないけれど、ちゃんと動かすためには意外と色々気をつけないといけない。

追記:
pgrepを使うやり方のほうがシンプルで良いね。

強制終了した時に上記をpgrepを使って書き直すとこんな感じか。