何度も大阪駅前は通りかかっていましたが、鍾馗様の像が飾られていたのは気が付きませんでした。「げんつきげんちゃん」と呼ばれているそうです。大阪の玄関口を見守ってくれているのだそうです。
あちこちのサイトにも書いてくれてますし、CookBook の 22.1. Using non-default fonts with GMT にも書かれているように
$GMT_dir/share/postscriptlight/PSL_custom_fonts.txt
というファイルに使いたいフォントを追記します。$GMT_dir というのはGMTをインストールしたディレクトリのことで、うちの環境では/usr/local/gmt5 というディレクトリになっています。多くのサイトでは、Ryumin-Light-UniJIS-UTF8-H と GothicBBB-Medium-UniJIS-UTF8-H の追記を紹介しているようです。ところが、先月GMTをインストールする際に同じようにしても日本語フォントが使えなくなるという大変困った事態を経験しました。
色々試した結果、出力後のポストスクリプト画像ファイルをWindows10に持ってくるとちゃんと(?)代替フォントで表示されることが確認できました。また、古いUBUNTUの環境へ持ち込んでも、同じポストスクリプト画像ファイルで日本語フォントが表示できることもわかりました。どうやらGMTは正常に設定していたのですが、新しい環境のドキュメントビューアの日本語設定が不十分であったため、結果的に日本語が表示されなかったということのようです。
つまりGMTのnon-default なフォントというのは書き出す側の環境ではなく、表示する側の環境に依存しているようですね。ということで、こんなことを試してみました。
# $Id: PSL_custom_fonts.txt 14657 2015-07-30 21:26:18Z pwessel $ # # Listing of additional PostScript fonts than those found on most PS printers. # Add your extra font information there. This is the only required change as # far as GMT goes. However, you most likely will have to modify GhostScript # font tables, place font files in certain system directories, and possibly # upload purchased fonts to a PostScript printer. Search for help on how # to install new fonts on your particular system. # # The fontheight below is the height of A for unit fontsize. # Encoded = 0 if we may reencode this font as needed. # #Fontname Fontheight Encoded #Ryumin-Light-EUC-H 0.700 1 #Ryumin-Light-EUC-V 0.700 1 Ryumin-Light-UniJIS-UTF8-H 0.700 1 Ryumin-Light-UniJIS-UTF8-V 0.700 1 Ryumin-Light-RKSJ-H 0.700 1 #GothicBBB-Medium-EUC-H 0.700 1 #GothicBBB-Medium-EUC-V 0.700 1 GothicBBB-Medium-UniJIS-UTF8-H 0.700 1 GothicBBB-Medium-UniJIS-UTF8-V 0.700 1 GothicBBB-Medium-RKSJ-H 0.700 1 MS-Gothic-90ms-RKSJ-H 0.700 1 MS-Mincho-90ms-RKSJ-H 0.700 1
PSL_custom_fonts.txt の中身です。
最後のMS-Gothic-90ms-RKSJ-H と MS-Mincho-90ms-RKSJ-H は、いわゆるMSゴシックとMS明朝のことです。RKSJというのはローマ字-カタカナ-シフトJISの略なのだそうです。だからUTF8で日本語を流し込んでも文字化けします。私の場合は nkf -s を使ってsjisに変換しました。しかし、それでもまだubuntuのドキュメントビューアでは日本語表示できませんよ。だってubuntuにはマイクロソフト系のフォントは載ってませんから...。これをWindowsの Adobe Illustrator で読み込んだものが下の画像です。
代替フォントを経由せずにMSゴシックやMS明朝を使えるようになりました。
私は余りこれを使おうとは思いませんが、WindowsでGMTを使用しているユーザーさんには便利な機能かも知れませんね。
#!/bin/bash psfile=font_tab.ps gmt gmtset FONT_TITLE 16p,GothicBBB-Medium-UniJIS-UTF8-H gmt gmtset FONT_LABEL 12p,GothicBBB-Medium-UniJIS-UTF8-H gmt gmtset FONT_ANNOT_PRIMARY 0.35c,GothicBBB-Medium-UniJIS-UTF8-H gmt gmtset MAP_GRID_PEN_PRIMARY 0.5p,128/128/128 # 方眼紙の描画 title=`echo Japanese Charactars` gmt psbasemap -JX15c/20c -R0/15/0/20 -BnSeW+t"$title" \ -Bxa5g1+l"(cm)" -Bya5g1+l"(cm)" -P -K > $psfile cat << + |\ nkf -s |\ gmt pstext -J -R -F+f+jLM+a0.0 -O >> $psfile 1.0 12.5 16p,MS-Mincho-90ms-RKSJ-H これはMS明朝です 1.0 7.5 18p,MS-Gothic-90ms-RKSJ-H これはMSゴシックです +
米ドル建一時払い終身保険に加入しました。加入時の利率に応じた定期支払金を毎年米ドルで受け取ることとなります。
通常、銀行などで円をドルに両替してもらうにはTTSというレートを使用されます。しかし保険の場合、加入時はTTM+50銭というレートを使用してくれるので、若干有利です。
一方、毎年受け取った米ドルを日本円に両替する場合はTTBというレートが使われますので、日々のTTBの動きは把握しておきたいところです。
ということで、為替相場を自動的に取得しデータベースに登録するシェルスクリプトを作成してみました。TTM+50銭とTTM-50銭の値は 日本生命 のホームページから取得します。一方、TTSとTTBは 三菱UFJ銀行 のものを使用しました。
#!/bin/bash mysql -h 192.168.0.16 life_log << _SQL_ create table if not exists dollar( seq int primary key auto_increment, kind varchar(10), UpdateDate date, rate float, insertDate datetime, comment varchar(20) ); _SQL_ work=`test_day | head -1` if [ $work = "OFF" ] then echo `date` "市場は休みです" exit fi # ニッセイ指定通貨建積立利率変動型一時払終身保険(米ドル建・豪ドル建) 為替レートのダウンロード wget https://va-dmn2.nissay.co.jp/vkhengaku/servlet/JP.co.nissay.KE8.KE8S007Z -O nissay.html # MUFG外国為替相場一覧表のダウンロード wget https://www.bk.mufg.jp/gdocs/kinri/list_j/kinri/kawase.html -O mufg.html # 円入金特約用為替レート(TTM+50銭) date=\ `w3m nissay.html |\ sed -e "s/\*//g" |\ sed -n '14p' |\ awk '{print $1}' |\ nkf -Z |\ sed -e "s/年/\-/g" |\ sed -e "s/月/\-/g" |\ sed -e "s/日//g" ` rate=\ `w3m nissay.html |\ sed -e "s/\*//g" |\ sed -n '13p' |\ awk '{print $2}' |\ nkf -Z` echo TTM+50 ${date} ${rate} mysql -h 192.168.0.16 life_log << _SQL_ insert into dollar(kind,UpdateDate,rate,insertDate) value("TTM+50","${date}","${rate}",now()); _SQL_ # 円支払特約用為替レート(TTM-50銭) date=\ `w3m nissay.html |\ sed -e "s/\*//g" |\ sed -n '89p' |\ awk '{print $1}' |\ nkf -Z |\ sed -e "s/年/\-/g" |\ sed -e "s/月/\-/g" |\ sed -e "s/日//g" ` rate=\ `w3m nissay.html |\ sed -e "s/\*//g" |\ sed -n '88p' |\ awk '{print $2}' |\ nkf -Z` echo TTM-50 ${date} ${rate} mysql -h 192.168.0.16 life_log << _SQL_ insert into dollar(kind,UpdateDate,rate,insertDate) value("TTM-50","${date}","${rate}",now()); _SQL_ # 電信売り相場(TTS) date=\ `w3m mufg.html |\ sed -n '25p' |\ nkf -Z |\ awk -F":" '{print $2}'` rate=\ `w3m mufg.html |\ grep USD |\ awk '{print $4}'` echo TTS ${date} ${rate} mysql -h 192.168.0.16 life_log << _SQL_ insert into dollar(kind,UpdateDate,rate,insertDate) value("TTS","${date}","${rate}",now()); _SQL_ # 電信買い相場(TTB) date=\ `w3m mufg.html |\ sed -n '25p' |\ nkf -Z |\ awk -F":" '{print $2}'` rate=\ `w3m mufg.html |\ grep USD |\ awk '{print $7}'` echo TTB ${date} ${rate} mysql -h 192.168.0.16 life_log << _SQL_ insert into dollar(kind,UpdateDate,rate,insertDate) value("TTB","${date}","${rate}",now()); _SQL_ rm nissay.html mufg.html
ニッセイのホームページからは、13行目と14行目あるいは88行目と89行目を取り出して加工するという方法で値を取り出しています。一方銀行のホームページも、日付は25行目のものを半角に変換(nkf -Z)して使用していますが、レートはUSDという文字列を含む行をgrep で検索して、第4フィールドと第7フィールドをawkで取得するという方法をとっています。
このシェルスクリプトを crontab に登録し、平日正午頃に実行することで日々の相場の値がmysqlに登録されるようになりました。
最近交際範囲に変化が有ったことから、携帯電話のアドレス帳を抜本的に編集してみようと思いました。ドコモショップで教えてもらったデータコピーは本体のアドレス帳データをMicroSDカードに転送できるとのことでした。
そこで実際に試してみると、SD_PIM とcom.nttdocomo.android.sdcardbackup というフォルダの下に、どちらもPIM00001.VCFというファイルが作成されていました。拡張子vcfのファイルはvCardといって、結構あちこちのアドレス帳で使用されているファイル形式なのだそうです。後者のファイルを実際に開いてみると、下図のようなテキストファイルが現れました。ちなみにSD_PIM の下のPIM00001.VSFはSiftJIS形式でした。これについては試していません。
BEGIN:VCARDという行で始まり、END:VCARDという行で終わる一連のデータが一人分のアドレスです。これが延々登録人数分続いているわけです。
テキスト形式ですからエディターで編集できますし、sedやawkを使いこなせば特定のフィールドを自動的に加工することも可能です。なお実際には試していませんが、perlにはvCardに特化したライブラリが用意されているそうです。私はperlを使ったことがないので、下記のようなシェルスクリプトを作成してみました。
#!/bin/bash # 変数nameにはアドレス帳の見出し欄の名前が入る # 配列変数bodyにはnameに対応するvCardの各行が格納される infile="PIM00001.VCF" declare -a begin_a=(`\ grep -n "BEGIN:VCARD" ${infile} |\ awk -F":" '{print $1}' \ `) declare -a end_a=(`\ grep -n "END:VCARD" ${infile} |\ awk -F":" '{print $1}' \ `) for (( seq=1; seq<=${#end_a[@]}; seq++ )) do seq1=`expr $seq - 1` BEGIN=${begin_a[${seq1}]} END=${end_a[${seq1}]} name=`cat $infile |\ sed -n ${BEGIN},${END}'p' |\ grep "^N;" |\ awk -F"[;:]" '{print $3}'` declare -a body=(\ `cat $infile |\ sed -n ${BEGIN},${END}'p'` \ ) echo $seq ${name} for (( i=0; i<${#body[@]}; i++ )) do echo $seq ${body[$i]} done done
上記のシェルスクリプトでは、vCardを登録人数分に切り分けて名前(変数$name)を表示します。最初に配列変数 ${begin_a} と ${end_a} を定義した時点で、そのファイルのBEGIN:VCARDとEND:VCARDが何行目なのか全て把握しているため、変数$seqに任意の数字を指定するだけで、N枚目のアドレスを抽出できるようになっています。
ところで、実際にアドレス編集を行うにあたっては「グループ」の扱いが厄介そうです。X-GNO、X-GN、X-DCM-GN-ORIGINLの各フィールドが、それぞれ整合していないとエラーになってしまいます。しかもX-GNOは携帯電話でグループの並び替えをする都度値が変化してしまいます。
また、固定電話はTEL;VOICE:というフィールドなのですが、FAXの場合はTEL;WORK;FAX:というフィールドと X-DCM-TEL-ORIGINAL;WORK;FAX: フィールドが一致していないと認識してもらえないという冗長な構造になっているようです。
いずれにしても、大切なアドレス帳を壊してしまいかねませんので、編集の過程を頻繁に別メディアへ保存しておくなどして作業は慎重に行うようにしましょう。
編集後、再度データコピーアプリの復元機能を使用すると、編集結果が携帯電話本体のアドレス帳に反映されます。このとき、SD_PIMの下の同じ名前のファイルが残存しているとバージョン管理が面倒くさいことになりそうですので、別メディアにバックアップしたうえで削除しておいた方が良さそうです。
GMT5.4.1をインストール の手順で新しいPCにGMTをインストールしようとしたのですが、ハワイ大学 のサイトにアクセス出来ないためダウンロードできなくなっていました。ちなみに、GMT4のサイト には入れるのですけどね…。
しかたがないので探し回った挙句、下記のミラーサイトを発見しました。
ここから、gmt-5.4.1-src.tar.gzとgshhg-gmt-2.3.7.tar.gz、dcw-gmt-1.1.4.tar.gzをダウンロードしました。ちなみに gmt-5.4.1-src.tar.gz は legacy/ フォルダーの下に有ります。
余談ですが、2019年7月からgmt6がリリースされているようですね。
あと、ライブラリ(パッケージ)はしっかりインストールしておかないといけません。私の場合は、apt を使って libxaw7-dev libxt-dev libnetcdf-dev libblas-dev liblapack-dev fftw3 libcurl4-openssl-dev cmake を準備しておきました。
tar を使って、ダウンロードした圧縮ファイルを展開します。
tar xvfz ~/MyDoc/GMT_install/gmt-5.4.1-src.tar.gz
sudo mkdir -p /usr/local/gmt5/share/gmt
cd /usr/local/gmt5/share/gmt
sudo tar xvfz ~/MyDoc/GMT_install/gshhg-gmt-2.3.7.tar.gz
sudo ln -s gshhg-gmt-2.3.7 gshhg
sudo tar xvfz ~/MyDoc/GMT_install/dcw-gmt-1.1.4.tar.gz
sudo ln -s dcw-gmt-1.1.4 dcw
次にcmake の準備をします。
cd ~/gmt-5.4.1
cp cmake/ConfigUserTemplate.cmake cmake/ConfigUser.cmake
(cmake/ConfigUser.cmakeの編集)
set (CMAKE_INSTALL_PREFIX "/usr/local/gmt5")
set (GSHHG_ROOT "/usr/local/gmt5/share/gmt/gshhg")
set (DCW_ROOT "/usr/local/gmt5/share/gmt/dcw")
さらに ~/gmt-5.4.1の下で mkdir build ; cd build して、
cmake ..
make
sudo make install
とすればOKなのですが、どういう訳か gmt_api.c の861行目でFALSEという変数を知らないというエラーが発生してしまいました。FALSEなんて、かなり基本的なヘッダーファイルの中で #define されているはずなのですけどね...。とりあえずFALSEを0に置き換えて凌ぎました。
/* curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE); Tell libcurl to not verify the peer */ curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, 0);