2010年12月23日木曜日

複数ファイル内のテキストを一括置換

研究に使用しているプログラム群をバックアップや(簡単な)バージョン管理のため、Dropboxで管理しようと思い、"program"という名前のディレクトリをDropbox/Private/の下に移動をさせた。


それに伴い、いくつかのスクリプト内で記述してあるパス表記を、"~~/Mydocument/program/~~"から"~~ /Mydocument/DropBox/Private/program/~~"に変更する必要が出てきたので、sedコマンドによって一括で置換を行なった。


置換したいファイルが一つの場合は、

sed -i "s|置換前のテキスト|置換後のテキスト|" 対象ファイル

とシンプルだが、


現在のディレクトリ以下の特定拡張子のファイル(例えば*.sh)について、一括置換したい場合は以下の通り。



#/bin/bash


SUFFIX=".sh"

ORIGINAL_TEXT="Mydocument/program"
REPLACED_TEXT="Mydocument/Dropbox/Private/program"


target_file_list=$(find . -type f -name "*${SUFFIX}" \! -name $0 )

for target_file in ${target_file_list}
do

    target_file=${target_file#./}
    nword=$(cat ${target_file} | grep ".*${ORIGINAL_TEXT}.*" | wc -l )


    if [ ${nword} -gt 0 ]; then
    echo "Taregt file name: "${target_file}
    echo "Number of replacement: "${nword}


        echo ""
        cat ${target_file} | grep ".*${ORIGINAL_TEXT}.*" --color=always
        echo -e "\n"
       
        # sed -i s/"*${ORIGINAL_TEXT}*"/"${REPLACED_TEXT}"/ ${target_file}
        sed -i "s|${ORIGINAL_TEXT}|${REPLACED_TEXT}|" ${target_file}

        echo ""
        cat ${target_file} | grep ".*${REPLACED_TEXT}.*" --color=always
        echo -e "\n"

    echo -e "------------------\n"
   
    nhit=$((${nhit} + 1))
    fi

done


echo "----Summary information----"
echo -e "Root directory for search:\t "$(pwd)
echo -e "Search text:\t\t\t "${ORIGINAL_TEXT}
echo -e "Replaced text:\t\t\t "${REPLACED_TEXT}
echo -e "Number of hit files:\t\t "${nhit}"\n"




参考サイト
http://norian.blog50.fc2.com/blog-entry-45.html

2010年12月22日水曜日

Nautilusスクリプト

UbuntuではNautilusスクリプトという機能を使うと、簡単に右クリックの機能を拡張することができます。

今開いているフォルダでターミナルを開くとか、デスクトップにリンクを作るなど、"nautilusスクリプト"で検索すると多くの情報が出てきますが、個人的に欲しいと思って以下のようなスクリプトを作ってみました。


ファイル名:backup_file.sh
用途:指定ファイルに日時の情報をいれてバックアップをとるだけ。



#!/bin/bash

filename=$1
bk_time=$(date +%y%m%d_%Hh%Mm)

cp ${filename} bk_${bk_time}_${filename}



この用にスクリプトファイルを作ったら、以下の場所にファイルを置きます。
ディレクトリが無い場合は作成してください。

$HOME/.gnome2/nautilus-scripts/


このスクリプトを使うと例えば"maintext.doc"というファイルは"bk_101222_10h11m_maintext.doc"というように、頭にバックアップを示すbk、日付、時刻と行った情報をつけたコピーを作ることができます。


大きなプログラムのソースコードはsubversionなどのバージョン管理を使ったほうが楽ですが、ちょっとしたプログラムや、Officeファイルなどのバックアップを作業の一区切りごとにつくりたい場合は、このやり方が手軽でおすすめです。


ちなみにこの"bk_*"ファイルが増えてうっとうしくなったら、


mkdir backup
cp bk_* backup

とコマンドを打つだけで、簡単に整理できます。



参考サイト
https://forums.ubuntulinux.jp/viewtopic.php?id=2959

2010年12月14日火曜日

LaTeX原稿のスペルチェック

Wordで作成した英語の文章は簡単にスペルチェックができるが、LaTeXの原稿をスペルチェックしたい場合はちょっと面倒な手順が必要。


ぱっと思いつく選択肢としては
  1. TeXソースコードを直接WordなりOpenOffice Writerに読み込む
  2. aspell
  3. latex2rtfでRTFを作って、WordなりOpenOffice Writerに読み込む
1の選択肢は一番簡単だけれども、随所にあるLaTeXコマンドもエラーとして拾われるのでうっとうしい。
2の選択肢は昔ながらの(?)LaTeXファイルのスペルチェック法、ちょっと難しい。

3が個人的にはおすすめなので以下に紹介します。


Linuxコマンドの"latex2rtf"コマンドを使うとTeXソースコードからRTF(リッチテキスト形式)に変換できるので、あとはWordなり、Writerによんで、スペルチェックを開始すればOK。


ちなみに、auxファイルがないとエラーが出た場合は、latexコマンドをうったのちにlatex2rtfを打つと良い。また、 EclipseプラグインのTexlipseでLaTeXを使用している場合はlatex2rtfコマンドの-aオプションでauxファイルを指定すると 良い。


例.
latex2rtf -a tmp/document.aux document.tex



GISとかリモセンの話題を載せてくブログのつもりが、気がついたらLaTeXだらけになってる(汗)。
D論作成の備忘録として書いてるところがあるのでしかたないかも。
D論終わったら本気出す。


…もちろんD論も本気出す。

2010年12月10日金曜日

FoursquareからのtwitterからのGoogle buzz

Android携帯のGoogle mapで表示できるGoogle buzzを見ると、時々http://4sq.com/〜とかいうURL付きのbuzzをみかけ、たぶんFoursquareと連携しているんだけど、どうやってFoursquareとbuzzを連携するのかわからなかった。

最近連携の仕方がようやくかりました。ただTwitterを間に挟めばいいだけなんですね。


手順は以下の通り。

  1. FoursquareのSettingで、Linked AccountsでTwitterを選択し、自分のTwitterアカウントと紐付ける。
  2. GmailのSettingのbuzzタブを選択、Your connected sitesのView and editを選んで、Twitterを追加する。


Foursquareでのチェックイン時にコメントをつけた場合は、

コメント(@場所名)

コメントをつけなかった場合は、

I'm at 場所名

と表示がされる。

2010年12月9日木曜日

GMTでポリゴンデータを用いてグリッドデータをマスキング

GMT (The Generic Mapping Tools)でポリゴンデータで、グリッドデータをマスキングのやりかた。

以下の処理はDEMで計算した標高変化の分布図から、関心のある領域(例えば特定の氷河のポリゴンなど)だけを取り出す場合。

変数の説明
【グリッドデータ】
${trend_nc}:標高変化の分布データ
${trend_nc_cut}:標高変化の分布データを処理対象領域のみを切り抜いたデータ
${mask}:マスクグリッド(1か0の2値データ:ポリゴン内部が1、外部は0)
${mask_na}:マスクグリッドの0をNAN値に置き換えたもの
${trend_nc_masked}:標高変化の分布データのうち、ポリゴンの内部のみを切り抜いたデータ(←一番欲しいデータ)

【ベクター】
${GLACIER_OUTLINE}:くり抜きに用いるポリゴンデータ(GMT形式)

【その他】
${utm_range}:処理対象範囲(今回の例ではUTM座標)
${image}:GMTの出力画像ファイル
${trend_cpt}:makecptなどで生成したカラーパレットファイル


#標高変化のデータから処理対象流域のみを切り抜く
#(マスクグリッドと範囲を同一にするため)
grdcut ${trend_nc} -R${utm_range} -G${trend_nc_cut}

#ポリゴンからマスクグリッドの作成
grdmask -F -m ${GLACIER_OUTLINE} -G${mask} -R${utm_range} -I${CELLSIZE}

#マスクグリッドの0の値をNANの値に変更
grdmath ${mask}  0 NAN = ${mask_na}

#標高変化のデータ×マスクグリッドを計算することによって、
#ポリゴンの外部の値を全てNANに変える。
grdmath -N ${mask_na} ${trend_nc_cut} MUL = ${trend_nc_masked}

#出来上がったデータから図の出力
grdimage ${trend_nc_masked} -C${trend_cpt} -Q -R -J -K > ${image}

ステレオ図化ソフトLPSを見学

北大での研究集会(二日目)の終了後に、ステレオ図化ソフトのLPSを見学させていただきました。

空中写真やステレオペアのある衛星画像をもとにDEM生成を行うソフトなのですが、下の写真にあるようなディスプレイシステムによって、偏光メガネ(写真下部にあるサングラスみたいなの)を通して見ると、アバターのように3Dで見ながら作業を行うことができます。




昔、都立大の解析図化機を使用した経験はありますが、同時に複数人が見えることや、図化作業のやりやすさなどは全然快適です。

過去のステレオ衛星写真のDEM生成ももちろん魅力的ですし、個人的にはASTERのDEM精度向上などにも使えそうだと思いました。

例えばプロダクトとして配布されているDEMには明らかに、コントラストの低い領域で自動マッチングの困難さから精度の低い領域がありますが、コンピュータの自動マッチングでは拾えなくても、人間では視認できるというテクスチャなどに関して、精度向上の可能性があります。

研究室に欲しいなあ。
いや北大に出張すればいいのか。いつか時間が出来たら。

2010年12月1日水曜日

LaTeXの図の取り込みでずれた場合の対処

前のエントリのやり方でぺたぺたPNGファイルのBB (BoundingBox)を指定して取り込む作業をやっていたら、
なぜかLaTeXで出力したPDFでずれる画像が出てきた。

対象画像はInkscape上で複数のPNGファイルを取り込み、配置を行なったのちPNG出力した図で、
ebbコマンドでbbファイルを出力した後、BB情報のみをコピーして、LaTeXソースコードに記述をし、
bbファイルを消した(ファイルが増えるのが嫌だったので)。


ずれた図はbb情報の数値を調整したら、いい感じの位置に持ってくることが出来たので、その手順を以下に記述する。

1. InkscapeでEPSファイル出力をする。

2. 出力したEPSファイルをエディタで開きBoundingBoxの情報をコピーして、LaTeXソースコードに張り付ける。

3. BB情報の数値を以下のように微調整する。
LaTeXソースコード上のBB情報は例えば"bb=0 0 530 720"というように記述するが、
この数値は画像ファイル上の座標に対応しており"bb=左 上 右 下"の座標値となっている(※Y座標は下向きに増加)。

・この画像が出力PDF上で右にずれていた場合は、BBの幅の数値(右-左)を保ったまま、右と左の数値を増やす。
例"bb=100 0 630 720"

・この画像が出力PDF上で上にずれていた場合は、BBの高さの数値(下-上)を保ったまま、下と上の数値を増やす。
例"bb=0 100 530 820"

といった具合。

pdflatexで日本語が使えたらいいのに。。。もしくはdvipdfmxでもpdflatexみたいにBB情報の指定無しにPNGを読み込めたらいいのになあ。

日本語LaTeXで図の取り込み

日本語でLaTeXを書くのにはdvipdfmxを使用する必要がある。
dvipdfmxで図の取り込みをする際、通常はEPSファイルを指定して読み込むのだが、Inkscapeなどで編集し、
PNGとして出力した画像などを取り込みたい場合は、BoundingBoxを指定する必要がある。

BoundingBoxは画像ファイルのプロパティに表示される画像サイズとは異なり(※要注意)、
ebbコマンドで出力されるbbファイルを見るとわかる。

実際取り込む場合は、以下の二通りの方法がある。

1. bbファイルを作成し、画像ファイルと同じ場所においておく。
(※ファイルが増えてうっとうしいのが難点)

2. LaTeXソースコード上でbb情報を記述。
例.\includegraphics[width=40mm, bb=0 0 784 978]{sample.png}
(※ソースコードに記述するのが面倒)

参考サイト

Google EarthでGPSの軌跡をみる

Google EarthではGPSのログファイルを読み込み表示することができます.

GPSのログファイルのフォーマットとしてはGPX形式がよく使われており,
私 が持っているAndroidスマートフォン(Softbank X06HT)でもGPX形式でGPSログを記録することができ,MyTrackというGPSアプリやJogtrackerというジョギング用のGPSアプ リでもGPX形式で移動の軌跡を保存することができます.

ジョギングコースのGPXファイルをGoogle Earthに読み込むと,図のように表示されます.


図.GPSログ(GPX形式)をGoogle Earth 6.0に読み込んで表示している.
(名古屋市内の東山公園一万歩コース)


読み込んだGPSデータは時間情報も含んでいるため,Google Earthのトラック再生機能を使って,ジョギングの軌跡をビジュアルに追うことができます.

GPSデータのトラック再生の手順は以下の通りです.

1. Google Earthのメニューの"Tools" >> "Options" の"Touring"タブで"Fly along lines"チェックボックスにチェックをする.

2. Google Earthの左側パネルで読み込んだGPSデータを選択した状態で(水色になる),"Play Tour"ボタン(上の図では"Earth Gallery"というボタンの真上にあるフォルダマーク)を押す.

するとGPSの軌跡沿いに自動で動いてくれます.