2014/10/18

iPad2にiOS8が入らない(解決?)

iOS 8が出たっちゅうことでしたが,完全放置.兎に角今やって動かなくなった場合の対処する時間がないので.と思ってたけど,サブ機材になら入れても良いかなと思えるようになってきたのでトライ.

まずは,iPadモデルの特定方法で機種を特定(記憶力なし).最初に手に入れたやつは,iPad 2(iPad 2 (Wi-Fi):A1395)だったようである.ぎりぎりiPadの最低レベルで対象機種のようである.アップルのページはバージョン変わると書き換わってしまうので,別のリンクも記録.

実はこんな確認をする前から作業は始めてたんだけど,兎に角入らない.以下,状況.

・ソフトウェア・アップデートでフラグ立つ(現OS 7.1.1)
・既に8.0.2がダウンロード済となっていたので実行
・期待していたiCloud Driveの質問も何もなくホーム画面に戻る
・なんか変と思って確認すると,バージョンは変わらず(;_;)
・ソフトウェア・アップデートはフラグなしだけど,候補を探すと8.0.2が出てくる.が,ダウンロードまだしてないよと言われている
・ダウンロードしてアップグレードを選択
・ダウンロードのあと,同意して進むものの,長時間待たされた挙句振り出しに戻る←今3回目トライ中.

iOS 8をiPhone 4SやiPad 2に入れるとどれだけ遅くなるのか?という記事があるくらいだからアップデートそのものは出来ているのだろうが...5GBの空きか...16GBモデルなのでもしやないかもしれない...が,現在あぷで真っ最中で確認できず.

そして,,,3度目の正直.単にアップデートを繰り返したら出来た...なんだったんだ.一番たちの悪い解決方法...同じ状況にはまったら,根気よくということで...

2014/10/01

ロック(排他制御)

cronを使って一定の処理をさせたいとき,毎分に設定したいけどそうすると前の処理が終わっていなくて多重起動されてしまうという問題があります(問題ない場合もあると思いますが).これを制御するのにロックファイルを使っていたのですが,ロックディレクトリにしなきゃダメだと指摘され,修正しました.

if [ -r $lockfile ]; then
  exit 0
else
  touch $lockfile
fi
.... (script) ....
rm $lockfile

[ -r $lockfile ] && exit 0
touch $lockfile

としたくなるわけですが,まったく同時に2つ以上のスクリプトが起動された場合には両方共,ロックファイル($lockfile)が無いので処理が始まってしまいます.

これを避けるには,mkdir等の排他的なシステムコールを使うのだそうです.
mkdir $lockdir 2> /dev/null || exit $?
.... (script) ....
rmdir $lockdir

mkdir は既に $lockdir が存在していた場合はエラーになりますので処理を停止できます.たとえスクリプトが同時に起動されたとしても,mkdirで排他してくれるそうです.

ですが,スクリプトが強制終了された時にロックディレクトリが残ってしまうという問題があります.スクリプトの中で使っているコマンドが異常終了したような場合にはちゃんとロックディレクトリを後始末しましょう.

error() {
  echo $1
  rmdir $lockdir
  exit 1
}
などとしておいて,
./command || error "failed ./command"
のようなエラー制御を入れておけば良いはずです.面倒ですが.

が,それでも,スクリプトが強制終了(たとえば,rebootなどの操作)される可能性もあります.そうすると,もうお手上げでロックディレクトリが常に存在してしまうためスクリプトが動きません.これを回避するために,一定時間以上経過していたらロックディレクトリを消すというロジックもあるようですが,じゃぁ,一定時間はどれくらいだ?という問題が残ります.予期せぬ長時間処理になった場合,どうするかということになります.

が,眼から鱗な解決策が!
lockdir=/dev/shm/xxxx

RAMディスクにロックディレクトリを作成しておけば,rebootが行われた場合でもすっきりとロックファイルを消すことが出来ます.もちろん共有空間ですので,ファイル名のバッティングだけは要注意ですが.

ただし,終了した後のアプリケーションとしてのケアは別途必要ですので悪しからず.


2014/09/11

はぢめてのPython module (PIL)

とあるPythonスクリプトを貰ったら,PILモジュールってのが必要らしい.が,perlならcpanで入れるけど,pythonのモジュールの入れ方知らないぞと...いうわけで,メモ.

スクリプトを実行すると,
ImportError: No module named PIL
と言われる.

こちらのブログを参考にさせて頂いて,本家からダウンロード.OSにあったものをと書かれているが,windowsしかバイナリはなさそうなので,ソースを持ってきた.手元のOSは,Mac OS X 10.8.5 です.Mac Book Airなので,色々な噂に基いて Mavericks にはしてません.

% tar zxvf Imaging-1.1.7.tar.gz
% cd Imaging-1.1.7

BUILDMEを見ると,"for lazy programmers" のための手順として,
% python setup.py build_ext -i
% python selftest.py
となってるのでやっておく.詳しくはREADMEということなので見たところ,
% (sudo) python setup.py install
の前にやっておけということのようです.

FreeTypeが無いらしい
_imagingft.c:73:10: fatal error: 'freetype/fterrors.h' file not found
#include <freetype/fterrors.h>

MacPortsでは入っていたので /opt/local/include あたりを見逃しているのかと思ったら,/opt/local/include/freetype が無くて, /opt/local/include/freetype2 になってるのが原因だった.悩みどころだけど, _imagingft.c を修正した.

無事 selftest.py もパスしたので,ブログの手順にあるように,
% sudo python setup.py install
へ進む.

無事,動いた模様.




2014/09/04

Macでtgif(未解決)

デスクトップもMac Proに変えて,Linux環境がメインじゃなくなってきた(VMWare上でDebianは動いてる)ので,色々揃えなきゃいけない.

というわけで,tgifを入れる.gnuplotでtgif出力して整形して完成というのが流れなので論文等用の作図では必須.

が,MacPortsからあっさりは入ってくれない.

% sudo port install tgif
すると,最期に,
/opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_tgif/tgif/main.log を見よと出てくる.
見ると,
/opt/local/lib/X11/config/Imake.tmpl:2144:10: fatal error: ' X11 .rules' file not found
というのがあって,一番あやしい.要するにX11が入ってないか不完全なんだな.
XQuartzを入れれば良さそうなので入れてみたが,同じところで止まる.

http://littlefinger.petitepeace.net/blog/266
によると,ソースからtgifを入れればなんとかなるらしいが,取り敢えずパス.

(うまく行ったら更新します)


2014/08/29

Projで座標変換

ある1点の緯度経度からUTMに変換する方法.

proj.4 に含まれている cs2cs で出来る

% echo "140.0 36.0" | cs2cs +init=EPSG:4326 +to +init=EPSG:32654 -f %.4f
409870.9506     3984410.7881 0.0000

入力データの座標系(測地系+投影図法)は,EPSG:4326でWGS84の緯度経度座標.
出力データの座標系は,EPSG:32654でWGS84のUTM 54N.

EPSGコードは,proj.4 パッケージの epsg ファイルで確認できる

% grep -B 1 32654 /opt/local/share/proj/epsg
# WGS 84 / UTM zone 54N
<32654> +proj=utm +zone=54 +datum=WGS84 +units=m +no_defs  <>

ちなみに,ここ(Google Maps)

参考:
http://ryuiki.agbi.tsukuba.ac.jp/~nishida/lecture/GIS/proj.html

余談:
Macの場合,Ports に入っているのでついでによく使うgdalも入れちゃうのが良い.

% port install gdal

で,projも依存関係で入る.