2015-08-27

写真サムネイルインデックスのページを作るスクリプト

仲間内で写真を配りたい時に簡易的なサムネイルインデックスのページを作るシェルスクリプト。サムネイルはオリジナルサイズのファイルにリンク。一括ダウンロード用にzipでまとめたファイルへのリンクも用意。

zipコマンド、awkコマンド、およびImageMagickのconvertコマンドが必要。

適当に書いているので、おかしなところも多々あると思いますが、そのあたりはご自身で修正してください。
(HTMLタグの記述が古い……、ので書きなおした 20:51)
「photoindex.sh」をダウンロード


#!/bin/sh
#
# creating thumbnail index
#

#
# variables
#
WIDTH=180
HEIGHT=120
ZIPFILE=allpic.zip

#
# copy: jpg --> JPG
#
if PICS=$(ls | grep -e "\.jpg" | grep -v -e "-SMALL")
then
for f in ${PICS}
do
echo ${f}
if [ -f ${f%.jpg}.JPG ]
then
mv -v ${f%.jpg}.JPG ${f%.jpg}-orig.JPG
fi
cp -v ${f} ${f%.jpg}.JPG
done
fi

if PICS=$(ls | grep -e "\.JPG" | grep -v -e "-SMALL")
then

#
# creating thumbnails
#
for f in ${PICS}
do
echo ${f}
smallf="$(basename ${f} .JPG)-SMALL.JPG"
if [ ! -f "${smallf}" ]; then
#convert -resize ${WIDTH}x${HEIGHT} +profile "*" ${f} ${smallf}
convert -thumbnail ${WIDTH}x${HEIGHT} ${f} ${smallf}
fi
done

#
# creating an archive including all photos
#
if [ ! -f "${ZIPFILE}" ]; then
zip -n .JPG ${ZIPFILE} ${PICS}
fi
TOTAL=$(ls -l ${ZIPFILE} | awk '{if($5/1024/1024>=1.0){printf("%d MB\n", $5/1024/1024)}else{printf("%d KB\n", $5/1024)}}')

#
# creating an index page
#
# header
#
cat < index.html




Photo index


Thumbnails are linked to the original file, full size image.



EOF

#
# layout
#
ls *-SMALL.JPG | awk -v width=${WIDTH} '{pic1=$1;gsub("-SMALL","",pic1);printf("\n", pic1, width, $1);}' >> index.html

cat <> index.html


Download all the pictures (${ZIPFILE}, ${TOTAL})


EOF

#
# closing html
#
cat <> index.html


EOF

fi


| | コメント (0) | トラックバック (0)

2013-04-10

ソフトに使われる

 これは自戒を込めて、なのだけれど、ソフトに使われる、ということが良くある。特に何かを表現するためのソフトウェア。例えば、PowerPoint とか。

 PowerPoint で一般的なスライドの場合、テキストのエリアは箇条書きがデフォルトになっている。そのせいで、つい箇条書きのスライドが多くなる。箇条書きの必要がなくても箇条書きにしてしまう。これが、ソフトに使われている状態。

 PowerPoint を起動する前に、紙などで作りたいスライドのスケッチを書いてみると、おそらく箇条書きは少なくなる。その他、レイアウト自体も自由に考えることができる。PowerPoint の一般的なレイアウトである、上にタイトル、残りをテキスト・図表、というのも表現を狭めていることが分かる。

 似たようなことは PowerPoint だけではなくて、他のソフトでも当てはまる。自分の表現したいものを作るのではなく、そのソフトで作りやすいものを作ってしまう。

 本来、ソフトは道具であるはずで、自分の表現したいことを実現するためのものであるはず。そのソフトで作りやすいものを作ってしまうというのは、本末転倒。

 しかし、最初に、自戒を込めて、と書いたように、私自身も良くソフトに使われてしまう。やはり表現したいことをじっくり考える前にソフトを立ち上げてしまうのが良くない。気付いたときはなるべく事前に紙に書いて構想を練るようにはしているのだけれど、まだまだ習慣付いていない。

| | コメント (0) | トラックバック (0)

2013-03-13

一時ファイルを消すスクリプト

 UNIX 系 OS は基本的に rm を使って削除したファイルは、ゴミ箱に行かず、消去される。そのため、rm を使うのは最小限にしておいたほうが良いとされる。

 以下は、一時的に作られるファイルを消去するスクリプト(サブディレクトリ以下も探して消去する)。これを使うと、一時ファイルだけを消してくれるので掃除するのに便利。私は clean という実行ファイル名にして、~/bin に置いて実行している。原型は学生時代に UNIX を管理していた先生から配布されたものだったと思う(csh の alias だったかも)。自分に合わせてかなりいじっている。

 一時ファイルとして使うファイルの命名規則は、人によって違うので、そのまま使うのは危険かも。アレンジするときは man find でオプションを確認してください。改行されていますが、find 以降はすべて同じ行です。

#!/bin/sh
#
# delete temporary files
#
find . \( -name 'core.[0-9]*' -o -name '#*#' -o -name '*~' -o -name '*.bak' -o -name '*.trace' -o -name '*.o' -o -name '*.tmp' -o -name 'tmp.*' -o -name '*.tmp.*' -o -name '.gmt*' -o -name '.GMT*' \) -type f -perm -u+w -print -exec rm {} \;

| | コメント (0) | トラックバック (0)

2012-05-12

GMT で作った PS ファイルの PNG への変換

最近使っている ps2png スクリプト。GMT で作った EPS ファイル(ただし拡張子は .ps)を PNG ファイルにするために作ったスクリプト。

以前公開した「GMT で作った PS ファイルの他形式への変換」と違って、BoundingBox の取得に epstool を使っている。また、convert のあとで、optipng をつかって、最適化(画質はそのままでファイルサイズを軽量化)している。あと、図の回転の -r オプション、解像度の -d オプション、背景透明化の -a オプションを適当につけた。


#!/bin/sh

# default
rot="-rotate 0"
den="-density 150x150"
alpha="-alpha Off"

while getopts "d:r:a:" opt
do
case $opt in
d ) den="-density ${OPTARG}x${OPTARG}";;
r ) rot="-rotate ${OPTARG}";;
a ) alpha="-alpha ${OPTARG}";;
\? ) echo "usage: ${0##/*/} [-d density] [-r rotation] [-a alpha] psfiles"

exit 1
esac
done
echo ${den} ${rot} ${alpha}
#exit
shift $(($OPTIND -1))

for ps in $*
do
echo ${ps}
eps=${ps%.ps}.eps
png=${ps%.ps}.png
epstool --bbox --copy --quiet ${ps} ${eps}
convert ${den} ${rot} ${alpha} ${eps} ${png}
if which optipng >& /dev/null ; then
optipng ${png}
fi
# rm ${eps}
done

| | コメント (0) | トラックバック (0)

2012-04-10

GMTのprojectで投影するデータの範囲(長方形)の緯度経度を計算するawkスクリプト

GMT の project コマンドは、3次元座標をもつデータ(例えば震源)をある断面に投影できる。その投影するデータを含む範囲を -Ccx/cy, -Aazimuth, -Ll_min/l_max, -Ww_min/w_max オプションで指定する。以下は、そのオプションの値から、範囲の長方形の頂点の緯度経度を計算する awk スクリプト。

入力は
cx cy azimuth l_min l_max w_min w_max
の1行をawkに食わせる。

出力はファイルで以下のような感じ。
l.dat : -Lオプションの値 l_min, l_max の緯度経度
w.dat : -Wオプションの値 w_min, w_max の緯度経度
rect.dat : 長方形の頂点の緯度経度
(説明不足だけど、GMTで描けば分かってくれる、と思う)

スクリプト内の最初の定数の値を見てもらえれば分かるように、大雑把な計算をしているので、厳密さが必要な計算には用いないでください。地図でちょちょっと描くためのものです。


#!/bin/awk -f

BEGIN{
# constants
PI=3.14
D2R=PI/180.;
R2D=1./D2R;
D2KM=10000./90.;
KM2D=1./D2KM;
}
{
# input variables
# lat and lon of center (values for -C option of "project" command)
clat=$1;
clon=$2;
# azimuth (a value for -A option in "project")
az=$3;
# min and max of length (values for -L option of "project")
lmin=$4;
lmax=$5;
# min and max of width (values for -W option of "project")
wmin=$6;
wmax=$7;
# azimuth from north, clockwise in degree --> angle from x-axis, counterclockwise in radian
azxyr=(90.-az)*D2R
# clat in degree --> clat in radian
clatr=clat*D2R;
# x, y of lmax
lmaxx=lmax*cos(azxyr);
lmaxy=lmax*sin(azxyr);
# lat, lon of lmax
lmaxlon=clon+lmaxx*KM2D/cos(clatr);
lmaxlat=clat+lmaxy*KM2D;
# x, y of lmin
lminx=lmin*cos(azxyr+PI);
lminy=lmin*sin(azxyr+PI);
# lat, lon of lmin
lminlon=clon+lminx*KM2D/cos(clatr);
lminlat=clat+lminy*KM2D;
# write lon and lat of lmax and lmin
printf("%10.3f %10.3f\n",lmaxlon,lmaxlat) > "l.dat";
printf("%10.3f %10.3f\n",lminlon,lminlat) >> "l.dat";
# x, y of wmax
wmaxx=wmax*cos(azxyr+PI/2.);
wmaxy=wmax*sin(azxyr+PI/2.);
# deg of wmax
wmaxxd=wmaxx*KM2D/cos(clatr);
wmaxyd=wmaxy*KM2D;
# lat, lon of wmax
wmaxlon=clon+wmaxxd;
wmaxlat=clat+wmaxyd;
# x, y of wmin
wminx=wmin*cos(azxyr-PI/2.);
wminy=wmin*sin(azxyr-PI/2.);
# lat, lon of wmin
wminxd=wminx*KM2D/cos(clatr);
wminyd=wminy*KM2D;
# lat, lon of wmin
wminlon=clon+wminxd;
wminlat=clat+wminyd;
# write lon and lat of wmax and wmin
printf("%10.3f %10.3f\n",wmaxlon,wmaxlat) > "w.dat";
printf("%10.3f %10.3f\n",wminlon,wminlat) >> "w.dat";
# rect1
rect1lon=lminlon+wmaxxd;
rect1lat=lminlat+wmaxyd;
# rect2
rect2lon=lmaxlon+wmaxxd;
rect2lat=lmaxlat+wmaxyd;
# rect3
rect3lon=lmaxlon+wminxd;
rect3lat=lmaxlat+wminyd;
# rect4
rect4lon=lminlon+wminxd;
rect4lat=lminlat+wminyd;
# write lon and lat of rectangular
printf("%10.3f %10.3f\n",rect1lon,rect1lat) > "rect.dat";
printf("%10.3f %10.3f\n",rect2lon,rect2lat) >> "rect.dat";
printf("%10.3f %10.3f\n",rect3lon,rect3lat) >> "rect.dat";
printf("%10.3f %10.3f\n",rect4lon,rect4lat) >> "rect.dat";
printf("%10.3f %10.3f\n",rect1lon,rect1lat) >> "rect.dat";
}

| | コメント (0) | トラックバック (0)

2012-03-28

私の最近のGMTのテンプレート

以下をベースにアレンジして使用。変数を多用。

#!/bin/sh
#
# plot Japan and Kagoshima Univ.
#

# variables

PSFILE=${0%.gmt}.ps
VERB=-V
FIRST=-K
MID="-K -O"
LAST=-O

LORP=-P
if [ "${LORP}" = "-P" ]; then
GVLORP=
else
#GVLORP=-landscape
GVLORP="--orientation=landscape"
fi
GVSCALE="--scale=0"

PRJ=-JM15.0
#PRJ=-Jx1.0
RANGE=-R120/155/20/50
BOUND=-Ba5f1g1WSne

# GMT variables

#for version 3.4.x or older
#gmtset PAPER_MEDIA A4+ DEGREE_FORMAT 100
#for version 4.0 or later
gmtset PAPER_MEDIA A4+ DEGREE_SYMBOL ring
#gmtset PAPER_MEDIA A4+ DEGREE_SYMBOL degree

# -- preprocess --

# -- command begin --
# sample
pscoast -Dh -W1 ${BOUND} ${PRJ} ${RANGE} ${LORP} ${VERB} ${FIRST} > ${PSFILE}
psxy -Sa0.3 -G255/0/0 ${PRJ} ${RANGE} ${LORP} ${VERB} ${MID} << EOF >> ${PSFILE}

130.544 31.570
EOF
pstext -D0.1/-0.1 ${PRJ} ${RANGE} ${LORP} ${VERB} ${LAST} << EOF >> ${PSFILE}
130.544 31.570 18 0 0 9 Kagoshima Univ.
EOF

# -- command end --

# preview
gv ${GVSCALE} ${GVLORP} ${PSFILE} &

# clean
rm .gmt*
#rm tmp.* *.tmp

追記:長い行が折り返されていると思いますが、適当に読み取ってください。エディターなどへコピー&ペーストすると、もしかするときちんと表示されるかもしれません。

追記2:GMTをご存じない方に。GMTをインストールして、上のスクリプトを実行すると、次のような図ができます。この例は地図ですが、グラフやコンターマップも描けます。

Gmt


| | コメント (0) | トラックバック (0)

2012-01-19

「らじる★らじる」+「radika」+「Dropbox」で NHK ラジオ語学講座を活用

 久しぶりに NHK の「ラジオ英会話」で勉強している。

 以前も挑戦しようとしたことがあったけれど(大杉正明さんの頃)、なかなか番組の時間に合わせてラジオを聴く、ということができなくて、3 日坊主で終わった。

 しかし、NHK のストリーミング・サービス「らじる★らじる」が始まり、さらにそれを予約録音できる radika というソフトのおかげで、そのハードルが消えた。

 さらに Dropbox を使うと、radika で録音したものを Dropbox のフォルダに保存するようにしておけば、自動的にネットワークにアップロードされ、どこでも取り出せることになる。Dropbox は Android のアプリもあるので、それを使って(これは手動だが)Android 機にダウンロードできる。

 このおかげで、通勤中に「ラジオ英会話」で勉強できるようになった。すばらしい。願わくば、「らじる★らじる」の Android アプリで予約録音できると嬉しいのだけれど、まあ PC で予約録音するほうが、通信環境が安定しているので、安心といえば安心。

| | コメント (0) | トラックバック (0)

PCはなかなか捨てられない

 PCというのは不思議なもので、すぐに壊れるものも時々あるけれど、壊れずに生き残り、次第に「OSのバージョンアップに耐えられなかった」とか「古すぎて、新しく動かしたいソフトがインストールできない」等で使われなくなる、ということが良くある。こういう場合、PC自体が壊れているわけではないので、私としては捨てるのに忍びなく、有効利用してやりたくなる。古いPCに対応しているLinuxで再生を図ろうとするが、それが結構手間で、時間がかかる。しかもいまのところうまくいったためしがない。でもやっぱり捨てられない、というのは貧乏性か。

| | コメント (0) | トラックバック (0)

2011-12-16

コマンドラインでごみ箱を:trash-cli

UNIX のコマンドラインで rm はファイルを消してしまうので、復活できない。デスクトップのごみ箱みたいに消しても復活できるようにしたい場合は、trash-cli というパッケージが便利。

私はそのままでは使わずに次のようなシェルスクリプト dl を作って使っている。最近のバージョンでは(前から?) trash-put ではなく、trash でも良さそう。


#!/bin/sh
TRASH=trash-put
if [ $# -le 0 ]; then
echo "No files are specified. "
echo "Usage: dl files "
exit 1
fi

if which ${TRASH} >& /dev/null ;
then
echo "Files are moved to Trash Can."
trash-put "$*"
else
echo "Files are move to ${HOME}/.wastebasket"
mv -v "$*" ${HOME}/.wastebasket/
fi


最後の ${HOME}/.wastebasket/ は昔から SunOS で使っていたごみ箱。今では自分でディレクトリを作って用意しているが、もう用なしかな。

| | コメント (0) | トラックバック (0)

2011-02-02

GMT grd ファイルの互換性

地図やグラフのプロット・ソフト Generic Mapping Tools (GMT) 。自分は GMT のバージョン 4 系、うちのある学生は GMT のバージョン 3 系を使っているのだけれど、こちらで加工した grd データを学生に送ったら、"Variable not found" と出て使えなかった。いろいろ調べて grd の形式の違いが原因と判明。対症療法的にはなんとか解決したけれど、まだ良く理解していないので、再発の可能性あり。時間ができたらもう少しちゃんと調べておこないと。

| | コメント (0) | トラックバック (0)

より以前の記事一覧