投稿

2014の投稿を表示しています

OS Xで年賀状

今年も早いもので,少し前に年賀状のチラシが届いた。OS Xでの年賀状作成アプリケーションについて少し調べる。LaTeXやHTML5にも興味があるが,また今度。
商用ソフトウェア「宛名職人」。親たちが愛用。 OSのバージョンが上がる毎に見事に非対応になる。最近OS Xは毎年アップデートされるので,毎年バージョンアップ代金が必要になる。「宛名職人」が動かなくなるからOSを更新できないという事態を招く。実に迷惑だ。どんな開発環境を使っているのだろう。
Mountain Lion (10.8) 以降,AppStore以外からダウンロードしたアプリケーションは「開発元が未確認」であるとして起動は制限されている。右クリックして「開く」を選ぶ。以下のフリーウェアやインストーラは,「開発元が未確認」に該当する。
フリーウェア「葉書AB」長年愛用している。OS標準の連絡先にグループをつくり,葉書ABのウィンドウにドラッグ&ドロップする。2007年から更新されていないが,Mavericksでも動作する。デフォルトで半角数字が組文字になる。
シェアウェアがフリーウェア化された「宛名工房」。これもOS標準の連絡先を使う。条件を設定し宛先を抽出できる。デフォルトでは,半角数字は縦に並ぶが組文字や漢数字に変換できる。
日本郵便が配布している「はがきデザインキット」。 2014年10月30日に2015年版に更新とのこと。Adobe Airランタイムが必要。「今すぐダウンロード」がうまくいかない場合は,「別の方法でインストール」のページへ。Adobe Airをインストール。design_kit.zipの場合は,ダブルクリックして解凍。design_kit.airを起動してインストール。
住所録はcsv(コンマ区切りテキスト)で取り込むか,一件ずつ入力する。あて名面作成 > 住所読み込みサンプルの「デザインキット専用CSV」はShift JIS。Excelでは問題ないがNumbersで開くには,
$ iconv -f sjis -t utf-8 format.csv > format_utf8.csv などとしてUTF-8に変換する。
Adobe Airを使う他のアプリケーションには,「プリントマジック」がある。OS X標準の「連絡先」から…

Return complex from C to Fortran

I wrote a wrapper in Fortran called dotwrp to avoid the problems in Accelerate (more specifically vecLib) framework (related post in Japanese).
I merged the pull request from mcg1969 who contributed C version of dotwrp several months ago. He created a more capable package called vecLibFort. I created a port of vecLibFort for MacPorts.
vecLibFort works fine on various version of OS X from Snow Leopard through Mavericks. However I encountered a problem on a PowerPC machine running Leopard. It is dated but I still use it because it is a big endian machine and I need Octave and ncl.
The problem is the one I solved with dotwrp in four years ago: complex return value. I get segfault when linked against the C wrapper but I don’t when linked against the Fortran wrapper.
After some Google searches I realize that the returning a struct is involved and architecture dependent. I noticed that the use of C99 complex types solves the problem.
C function works on Intel but fails on PPC…

radiko.jpプレミアム(妥協)

電話の代わりにはなかなか難しいので050plusを解約。発信はFacetimeオーディオとSkypeで用が足りる。
その代わりにradio.jpプレミアムを契約。放送地域外だからといって有料なのには納得できないのだが,格安に野球中継を聞くことができるので妥協した。
日本ハムやソフトバンク戦は,BSのテレビ中継が少ないが,複数のラジオ局での中継がある。千葉マリンでの試合もよく中継されている。西武は,ホームのときに文化放送ライオンズナイターがある。Windowsだと無料で聞けるが,このご時世にWindows Mediaでのストリーミングなんてリスナーがどれだけいるのだろうか。楽天はTune inで無料で放送しているようだが,接続に成功したためしがない。TBC(エステサロンでなく東北放送)の中継があるときは聞ける。オリックスはラジオ中継があまりない。関西のラジオ局は,阪神戦でなければ巨人戦を放送してしまう。今シーズンは成績がよいので,ぜひオリックスの試合も中継してほしい。

風呂で聞くためにBluetooth接続のスピーカーSONY SRS-X1を購入。モノラルだが,なかなか音は良い。カーナビ同様,多分使わないと思うが電話がかかってくれば受けることもできる。2台でステレオにもなるようだが,1台で満足している。iPhone/iPadの防水ケースとは違い,ボリュームや再生・停止以外の操作はできないので,接続が途切れたときはじっと待つしかない。

手作り地球儀

イメージ
京都大学大学院理学研究科の齊藤昭則先生らによるDagikプロジェクトでは,地球儀の作り方を紹介し,型紙を提供している。
型紙の代わりの白地図GMTで作成した(gist)。30度毎の舟型多円錐図法(polyconic projection)を並べた。
Macのプレビューで印刷するときは,既定では紙に合わせて画像が拡大縮小されてしまうので,100 %になるように設定する。

SwiftでPLplot

イメージ
PLplotの最初のをSwiftに移植してみた。
 プリプロセッサでの#defineは,定数には対応しているが別名には対応していないようで,pl()ではなくc_pl()を直接書く必要がある。PLINTはInt32なので,配列の要素数はInt()で型変換する必要がある。コマンドライン引数argc, argvは,SwiftではC_ARGC,C_ARGVかProcess.argumentsで参照できる。Process.argumentsは[String]を,C_ARGVはUnsafePointerを返すので,どちらかをUnsafeMutablePointer()でキャストして渡す。
main.swiftlet n: PLINT = 101 let xmin: PLFLT = 0.0; let xmax: PLFLT = 1.0 let ymin: PLFLT = 0.0; let ymax: PLFLT = 100.0 var x = [PLFLT](count: Int(n), repeatedValue: 0.0) var y = [PLFLT](count: Int(n), repeatedValue: 0.0) for (index, value) in enumerate(x) { x[index] = PLFLT(index) / (PLFLT(n) - 1) y[index] = ymax * x[index] * x[index] } var argc: Int32 = Int32(C_ARGC) c_plparseopts(&argc, UnsafeMutablePointer(C_ARGV), PL_PARSE_FULL) c_plinit() c_plenv(xmin, xmax, ymin, ymax, 0, 0) c_pllab("x", "y=100 x#u2#d", "Simple PLplot demo of a 2D line plot") c_plline(n, x, y) c_plend() MakefileSWIFT = /usr/bin/xcrun swiftc CPPFLAGS = -I/usr/include -I/opt/local/include/…

SwiftからC

Cの函数は,Swiftから直接呼び出せる。
自前のソース Xcodeを使う場合Xcodeのプロジェクトを作成(例: foo)する。Command Line Toolを選ぶ。言語はSwiftを選択。Cのソースを追加。ヘッダも一緒に作る。Bridging Headerをconfigureしてもらい,foo-Bridging-Headers.hに必要なソースを#include。モジュールはXCodeが作ってくれはる。 コマンドライン オプション-import-objc-headerを使って名前を解決し,Swiftのソースをコンパイルする。推奨しないと断って,stackoverflowの質疑に書いてある。Xcode 6-Beta5からはSwiftコンパイラの名前がswiftcとなった。
$ xcrun swiftc -c main.swift -import-objc-header addtwo.h $ clang -O2 -c addtwo.c $ xcrun swift main.o addtwo.o -o addtwo MakefileCC = /usr/bin/clang CFLAGS = -O3 SWIFT = /usr/bin/xcrun swiftc TARGET = addtwo OBJS = $(TARGET).o main.o HDRS = $(TARGET).h all : $(TARGET) $(TARGET) : $(OBJS) $(SWIFT) $^ -o $@ %.o : %.swift $(SWIFT) -c $< -import-objc-header $(HDRS) clean : rm $(TARGET) *.o addtwo.c#include "addtwo.h" double addtwo(double x, double y) { return x + y; } Swiftvar x = 1.0 var y: Double = 2.0 println(addtwo(x, y)) CのdoubleはSwiftのCDoubleに対応するが,型推論を使っても,Doubleでも正しく動作する。変数は値渡し。
配列 double *はUnSafePointerだが,Swift blogにある通りSw…

SHTns

OpenMP/ClangSHTnsをコンパイルした。
ソースの取得$ hg clone https://bitbucket.org/nschaeff/shtns コンパイル PythonはMacPortsでインストールしたpython27を使う。
$ sudo port select python python27 としてある。makeするとCのソースをコンパイルし,Pythonモジュールを作る。ライブラリを作りインストールするターゲットはinstall-libである。ここでは,ライブラリとヘッダは${HOME}/localにインストールする。
$ export PYTHON=/opt/local/bin/python $ export CC=${HOME}/local/openmp-clang/build/Debug+Asserts/bin/clang $ export CFLAGS=-fopenmp $ export LDFLAGS=-L/opt/local/lib $ export CPPFLAGS=-I/opt/local/include $ ./configure --prefix=${HOME}/local --enable-openmp --enable-python $ make $ make install-lib Pythonモジュールのインストール 管理者権限の必要のない${HOME}/Library/Python2.7/lib/python/site-packagesにインストールする。
$ python setup.py install --user テスト テストはMacBook Pro Retina 13-inch Late 2012で1時間くらいかかった。ERRORとなっているものもある。
$ make time_SHT $ ./test_suite.sh

ClangでOpenMP

MacやFreeBSDのデフォルトのコンパイラはclangだが,数値計算ではOpenMPが使えるgccに一日の長がある。ClangでもOpenMPはないのかと思い検索したところ,OpenMP/Clangがあることを知り,試してみた。
コンパイラOpenMP/ClangのGetting the source codeの通りにソースを取得。同BuildingにあるようにClangのGetting Started Building and Running Clangに従ってコンパイル。llvmとclangをコンパイルするので時間がかかるが,Mavericksでは何の問題もなく終了した。buildというディレクトリからconfigureとmakeをすると,build/Debug+Asserts以下にbinとlibができる。
実行時ライブラリ 次にIntelのOpenMP Runtime Libraryをダウンロード。clangでのビルドに対応しているが,gccを探してバージョンを調べるところでコンパイルが止まってしまう。tools/check-tools.plを編集する。単純に変数$verと$bldを指定した。
--- tools/check-tools.pl.orig 2013-12-14 03:08:50.000000000 +0900 +++ tools/check-tools.pl 2014-07-05 16:19:31.000000000 +0900 @@ -276,8 +276,10 @@ # i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367) # i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5484) # i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00) - $stdout =~ m{^.*? \(GCC\) (\d+\.\d+\.\d+) …

自分用のtexmf

MacPortsでtexliveを入れたときは,~/Library/texmfを作り,自作のスタイルファイルやパッケージを入れる。
latex用のものは,~/Library/texmf/tex/latexに入れている。新しくパッケージを入れた場合は,
mktexlsr を実行する。

meto_1dvarでAIRSのリトリーバル

今度はAIRSのサンプルを動かしてみる。
test.shにもう少し汎用性を持たせてみる。
SATELLITE=EOS INSTRUMENT=AIRS satellite=`echo ${SATELLITE} | tr A-Z a-z` instrument=`echo ${INSTRUMENT} | tr A-Z a-z` LEVELS=51 BGDIR=../../Sample_Background NLDIR=../../Sample_Namelists OBDIR=../../Sample_ObsFiles COEFDIR=../${INSTRUMENT}_COEFFS_DIR RUNDIR=../test/${instrument} BINDIR=../../src COEFFILE=rtcoef_${satellite}_2_${instrument}.dat if [ ! -f ${COEFDIR}/${COEFFILE} ]; then echo "Download ${COEFFILE}, extract and place in ${COEFDIR}." exit fi if [ -d ${RUNDIR} ]; then rm -rf ${RUNDIR} fi mkdir -p ${RUNDIR}/${INSTRUMENT}_COEFFS_DIR cd ${RUNDIR} if [ ${LEVELS} -eq 51 ]; then LEV=_${LEVELS}L else LEV="" fi ln -s ${BGDIR}/BACKGROUND_MidLatWin${LEV}.dat BACKGROUND.dat ln -s ${NLDIR}/Retrieval_${INSTRUMENT}${LEV}.NL Retrieval.NL cp ../../${INSTRUMENT}_COEFFS_DIR/Bmatrix_${LEVELS}L ${INSTRUMENT}_COEFFS_DIR/Bmatrix cp ../${COEFDIR}/Rmatrix ${INSTRUMENT}_COEFFS_DIR cp ../${COEFDIR}/ChannelChoice.dat $…

Bibdeskの設定

イメージ
Bibdeskの設定

TeXShop 3.26の設定

奥村先生のページ参照。
TeXShop 3.21以降は,~/Library/TeXShop/binのシェルスクリプト作成不要。TeXShop 環境設定 > 書類 > 設定プロファイル: upTeX (ptex2pdf)TeXShop 環境設定 > 書類 > 起動時に > 新しいファイルを作成する: 外すTeXShop 環境設定 > 書類 > フォント: (お好みで)Andale Mono - 14TeXShop 環境設定 > 書類 > エンコーディング: Unicode (UTF-8)TeXShop 環境設定 > 内部設定 > パス設定: どちらも/opt/local/binTeXShop 環境設定 > 内部設定 > pdfTeX > Tex: pdftex -file-line-error -synctex=1TeXShop 環境設定 > 内部設定 > pdfTeX > Laex: pdflatex -file-line-error -synctex=1TeXShop 環境設定 > 内部設定 > Tex > TeX + dvips + distiller: ~/Library/TeXShop/bin/pdfptexTeXShop 環境設定 > 内部設定 > Latex > TeX + dvips + distiller: ~/Library/TeXShop/bin/pdfplatex

meto_1dvarのコンパイル

衛星データの放射輝度から気温の鉛直分布を推定するのは,リトリーバルの基本。
Met Office 1D-Varは,英国気象局の1次元変分法によりリトリーバルを行うコード。 request formから依頼するとメールでソースを送ってくれる。
コンパイル meto_1dvar_3_5.tar.gzを展開。RTTOVのように中身をぶちまけることはしない。 srcに移動し,makefileを編集。RTM_INC, RTM_MOD, RTM_LIBを設定。RTM_DIRという変数を作って,RTTOVのあるディレクトリを指定した。
RTM_DIR = ${HOME}/src/rttov/rttov111 RTM_INC = ${RTM_DIR}/include RTM_MOD = ${RTM_DIR}/mod RTM_LIB = ${RTM_DIR}/lib コンパイラとコンパイル,リンカフラッグの指定。CFLAGSと書かれているが,Fortranコンパイラに渡されるフラッグ。MacPortsの場合,gcc_selectを使って,例えば
sudo port select gcc mp-gcc47 としてあり,Fortranコンパイラへのシンボリックリンク/opt/local/bin/gfortranが作成されているものとする。
FC = gfortran CFLAGS = -cpp -I$(RTM_MOD) -I$(RTM_INC) -fopenmp LFLAGS = -L$(RTM_LIB) -l$(RTMODEL)_coef_io -l$(RTMODEL)_main -fopenmp RTTOVは(射出率データを利用するための)netcdf, HDF5とのリンクができていない状態なので,リンカフラッグはComment out the above …とある説明の上をその通りコメントし,下のLFLAGSのうちHDFを使わない(if RTTOV hasn’t been compiled with HDF) LFLAGSを生かす。ただしOpenMPのライブラリとリンクするために,-fopenmpが必要。
NCDF_LIB, HDF_LIBは使わないが,一応コメントアウトした。
テスト IASIの係数ファイルを入手してIASI_COEFFS_DIRに解凍。
Sampl…