忍者ブログ
日々の研究生活のメモ書きなど

カレンダーを英語で表示するには、
% env LC_TIME=C cal

June 2018
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


今の言語環境とかを引き継いで起動する場合は
% cal

6月 2018
日 月 火 水 木 金 土
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30





■ calコマンドのオプション

cal -y
今年の1年分のカレンダーを表示する

cal -3
先月、今月、来月の3ヶ月分を表示する

cal 6 2019
2019年6月のカレンダーを表示

cal 29 6 2019
はダメだった








PR
■ 過去記事 : 【多段ssh】するときに楽な方法を2つ紹介

まず、4年前の自分へ
「2つめは ~/.ssh/configを活用する方法
最後まで書ききる元気がなくなったので参考リンクだけ残しておきます」
と書いていますが、今はそれをガッツリ使っています
一歩ずつではあるが着実に成長してるでぇ〜





今回はパスワードなしでssh(scp)する方法についてメモしときます

■ 過去記事 : sshの設定(passwordなしでsshログイン(scp)する)

ここが一番分かりやすいです
% ssh-keygen -t rsa

鍵の保管場所を聞かれる
デフォルトは~/.ssh/id_rsaなのでそのままenterを押して許可

パスフレーズを要求されるが、今はこれをなしにしたいのでEnterを押す
再度確認されるのでEnter
鍵が~/.ssh以下にできる

このうち公開鍵(public key)をssh先も転送する
% ssh-copy-id -i ~/.ssh/id_rsa.pub yourname@hoge.co.jp:

ログイン先にログインして、 ~/.ssh/authorized_keys というファイルがあればOK
実際に
ssh -Y yourname@hoge.co.jp
でログインできることも確認する


追加で他の人からファイルが見えないようにする設定がいるかと思ったけどいらなかった
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys




(2018/07/11 追記)

もし複数の秘密鍵を持っておきたい場合は
% ssh-keygen -t rsa -f ~/.ssh/id_rsa.hoge
のようにして出力ファイル名を指定できる

このとき、デフォルトでは~/.ssh/id_rsaの秘密鍵が読み込まれるようなので、秘密鍵を接続先に応じて使い分けたい場合は ~/.ssh/configに次のように秘密鍵の場所を指定しておくと良い
IdentityFile ~/.ssh/id_rsa.home







% [[ `echo 'AAAAAAA' | grep 'B'` ]] && echo "with B" || echo "without B"
without B
% [[ `echo 'AAAAAAAB' | grep 'B'` ]] && echo "with B" || echo "without B"
with B
■ 参考 : 文字列Aに文字列Bが含まれるか











ちょいちょい出力が違うけどメモ
sh-4.2$ ls -F fig | grep /
12113/
12114/
12115/
12116/
12118/
12134/
 

sh-4.2$ ls -l fig | grep ^d
drwxr-xr-x 2 usename hoge 4096 Jun 21 05:23 12113
drwxr-xr-x 2 usename hoge 131072 Jun 21 09:05 12114
drwxr-xr-x 2 usename hoge 4096 Jun 21 08:01 12115
drwxr-xr-x 2 usename hoge 131072 Jun 21 05:54 12116
drwxr-xr-x 2 usename hoge 131072 Jun 21 13:15 12118
drwxr-xr-x 2 usename hoge 4096 Jun 21 13:24 12134

sh-4.2$ ls -l fig | grep ^d | awk '{print $9}'
12113
12114
12115
12116
12118
12134

sh-4.2$ find fig -maxdepth 1 -type d
fig
fig/12114
fig/12118
fig/12134
fig/12116
fig/12113
fig/12115
ディレクトリじゃなくてファイルが知りたいときは
find fig -maxdepth 2 -type f






■ 指定した深さのディレクトリorファイルのみを一覧する

-depthというオプションもあったので、それでいけるかと思ったけどダメ
しょうがないのでmindepthとmaxdepthの合わせ技で・・・・・
find fig -maxdepth 2 -mindepth 1 -type d | sort -r

find fig -maxdepth 2 -mindepth 1 -type f | sort -r









実行ファイルが foo/hoge.txt というファイルを読み込んで解析をするとする
このとき、実行ファイルにfoo/hoge.txtと直書きして実行するとファイルが見つからないとエラーが出る

おそらくcondorが実行されるときに、実行ファイルを別の場所にそのままコピーして実行するので
カレントディレクトリで実行されるわけではないからこういうエラーが起こってる
じゃあ、foo/hoge.txt も一緒にコピーしてもらえばいいのではと思って少し調べた



以下のページに説明があった
■ 参考 : 2.5 Submitting a Job3
transfer_input_files = foo/hoge.txt

これでfoo/hoge.txtも転送されて解析されるかと思ったけど、ダメ


あとはサブミットファイルの中で
Initialdir = [今のでぃれくとり]

のようにもしてみたが、同じだった

結局、foo/hoge.txt を絶対PATHで書くことで解決した








quick lookで見れなくてイラッとした

まずはechoで本当に思ってるファイルがリストされてるのか確認
そのあと、mv で実際にリネームすればOK
#!/bin/sh
for i in `find . -name "*dat"`
do
mv $i ${i%.dat}.txt
#echo $i
done










以前書いた記事のおさらい+まとめみたいな感じ

■ 参考 : 【シェルスクリプト】2の累乗をfor文で回す

■ 参考 : 【シェルスクリプト】exprを使わずにより早いfor文を書く







$(())という書き方は実はもっと色々とできるっぽい
↓の記事に詳しくまとめられている

■ 参考 : bashで四則演算( -×÷)や割り算のあまり(剰余)を求めるような簡単な計算をする

・四則演算
・余りを求める $(( 5 % 3 )) とか(今回はこれが使いたかった)
・累乗を求める
・偶奇の判定、$(( なんか & 1 ))で返り値が1なら奇数、0なら偶数


ただし、$(())の最大のデメリットは整数しか扱えないこと

小数を使いたい場合はbcコマンドを使う
またはawkとかでもOKか

■ 参考 : 【シェルスクリプト】bcコマンド








まず終了ステータスについて

■ 参考 : exitコマンド(シェルを終了する)

シェルスクリプトの最後に
exit [n]
と書いた場合はnが終了コード
nを書かない場合は最後に実行したコマンドの終了コードを引き継いで正常終了する
nに数字以外を書くとエラー終了

nは0から255の数字を入れる
1のみエラー終了、それ以外は正常終了






■ 参考 : 終了ステータスを設定
終了ステータスは $? というシェル変数に代入されているので、その値を見て処理を分岐させればOK


ただし、そんな処理分岐をしなくても
command1が成功したら、command2を実行するという風に処理を進めたい場合は次のように書けばOK
command1 && command2 && command3


コマンドが失敗した場合のみ進めるというのもあるが、こっちは使いみちがあんまりわからん
代替手段をcommand2とcommand3に書いておくのかな?
command1 || command2 || command3


rm -f の終了ステータスは常に0になる
他のユーザのファイルを削除しようとした場合は1になる
とりあえずrm -f の終了ステータスは信用しないようにする







話は変わって、シェルスクリプトのset -eについて

■ 参考 : シェルスクリプトを書くときはset -euしておく

この記事ではset -euと書いてあるけど、自分が使いたいのはひとまず set -e
これはシェルスクリプトの中で、正常終了しないコマンドがあった場合はそこでシェルスクリプトの処理が止まる

set -uは未定義の変数を使おうとしたときに打ち止めしてくれるオプション
ある処理がうまくいってなくて、その結果未定義な変数があるときにちゃんと処理を止めてくれるという優れもの


ある処理1からある処理2まではset -eのオプションの機能を止めたい場合は
set +e
# ここからset -eを止めてる
#
#
#
set -e
# ここからset -eが機能してる
#
みたいにset +eを使えばOK












条件分にコロンを使う
while :
do
# なんかする
done

条件分にtrueを使う
while true
do
# なんかする
done









最近何かのことを調べていて以下のブログにたどり着いた
色々とページを見てたら、目からウロコが落ちた
■ 参考 : 最近覚えたシェルスクリプトの小ネタ


「testコマンドを使うとフォークしてしまって大量に叩くとパフォーマンス悪い」らしい
つまり、if [ ]; thenのこと

その代用に挙げられていたのが
[[ "$a" = "hoge" ]] && echo "hoge" || echo "fuga"


これを使って・・・・

ファイルがあるかどうかで分岐
[[ -f $file ]] && echo "file aru" || echo "file nai"

ディレクトリがあるかどうかで分岐
[[ -d $dir ]] && echo "dir aru" || echo "dir nai"

[[ ]]と中身は絶対に半角スペースを開けないとエラーになるので注意

判定を反転させたいときは ! を -dとか-fの前につければいい

あと&&とか||の後の処理を複数行に分けて書きたいときは{ } でくくればOK











新しい計算機にログインして、ふいにcontrol+Dを押してしまいログアウトしてしまった・・・
.cshrcをまだ用意していないのが原因だった

.cshrcに
set ignoreeof
と書いておけばOK

というか書いてある.cshrcをscpしていなかったからこうなっただけだった
何も知らずに偉い人の.cshrcを一部コピペしたりして使ってたけど、やはり先人は偉大だった


bashの場合は
IGNOREEOF=100
とかでcontrol+Dを100回まで無視するとか設定するらしい





わかりやすくcontrol+Dについてまとめられているページ↓

■ 参考 : Ctrl-D の話










自分のログインパスワードを変更する時にchpasswdと打って、sudo権限いるやんけ〜〜〜
とか言ってたアフォおる?(私だ)



passwd は自分のアカウントのパスワードを変更するときに使う
chpasswd は管理者が一括で複数のユーザーのパスワードを変更するときに使うコマンド(つまりsudo権限は必要)

■ 参考 : 【 passwd 】 ユーザーのパスワードを変更する

■ 参考 : Linuxで一括でユーザーのパスワード設定を行う方法








chsh -s /bin/tcsh



新しいMacを手に入れました
ログインシェルがbashになってることに気づかず、あれ?あれ?と右往左往して原因に気づきました

terminalの環境設定からたぶん変えられるけど、chshってコマンドじゃなかった?
と思って使ってみたら、viの知識必須だったみたいで心が折れました・・・

ググったらchsh -s 〜〜〜でいけると知ったのでメモメモ






(2018/02/15 追記)
場合によってはsudoいるかも
その後再起動する
sudo chsh -s /bin/tcsh









昨年の作業ディレクトリを整理しててちょっと困った・・・
ls -lで見ると年が表示されないので2016年のディレクトリなのか2017年のディレクトリなのか判別できない
調べてみると
ls --full-time
でいけるっぽい
一時的に
alias ll 'ls --full-time'
としてaliasに登録しておいて作業・・・

他にもlsは色んな時刻の表示形式に対応している

■ 外部リンク : ls -l コマンドで年を表示したり、ファイルの日付の表示形式を変えるには。











■ 参考 : 統計屋のためのAWK入門

ここの「AWKでなんか色々統計処理をやってみた」というsectionにワンライナーでコマンドがまとめられてる

以前から使ってる別のワンライナーコマンドをまとめたページも貼ろうと思ったけど、
記事が別の場所に移動して怪しかったのでやめた

分散と標準偏差が便利
ダブルコーテーションじゃなくてバッククオートじゃないといけなかった
# 平均
awk '{sum+=$1}END{print sum/NR}' hoge.txt

# 分散
awk '{d[NR]=$1;avg+=$1}END{a=avg/NR;for(i in d)s+=(d[i]-a)^2;print s/(NR-1)}' hoge.txt

# 標準偏差
awk '{d[NR]=$1;avg+=$1}END{a=avg/NR;for(i in d)s+=(d[i]-a)^2;print sqrt(s/(NR-1))}' hoge.txt

あとで気づいたけど、これ"あんちべ"さんだ・・・






別の記事に艦これの加賀さんが出て来ていたのでメモメモ

■ 面白い記事 : 自然言語処理の最新手法"word2vec"で艦これ加賀さんから乳を引いてみる





(2017/09/04 追記)

# シャッフルを用いた重複なしランダムサンプリング
awk 'BEGIN{srand()} {line[NR] = $0} END{for(;i<100000;i++){r=1+int(rand()*NR);s=1+int(rand()*NR);tmp=line[r];line[r]=line[s];line[s]=tmp};for(t in line)print line[t]}' hoge.txt | awk "NR <= 100"

これで100000回並べ替えを行って、そこから先頭の100個のデータを抽出できる
元のソースコードは上記と同じリンク

srandは現在の時刻から初期シードを生成して、乱数生成を行うので
1秒以内に同じコードを実行するとまったく同じ結果になってしまう

この処理を何度も行うときはsleep 2とかを間に挟んだ方が良い







次の3枚の画像を1枚の画像としてまとめたい

poissonrayleighgaussian


やり方は
1. Macのプレビューで全部開く -> 印刷画面 -> レイアウト -> ページ数/枚を4枚とかに変更 -> 左下のPDFボタンから画像出力する
2. montageコマンドを用いて1枚にする


1の方法は書いてある文章の通り

2の方法のコマンドはこんな感じ
montage -tile 3x1 -geometry 1080x720 *.png hoge_3x1.png

hoge_3x1
montage -tile 1x3 -geometry 1080x720 *.png hoge_1x3.png
hoge_1x3
montage -tile 3x2 -geometry 1080x720 *.png *.png hoge_3x2.png
hoge_3x2■ コマンドの簡単な説明
montage [オプション] 入力画像の名前(複数) 出力画像の名前
というのが使い方

-tileは何枚ずつ並べるかを指定できる
上のを見てもらうとわかるように [横に何枚か] x [縦に何枚か] で指定

*.pngというようにワイルドカードも使える
ワイルドカードを使わないなら、hoge1.png hoge2.png hoge3.pngのように並べて書く
1x3の場合は並べる画像のファイルを3つ指定した後のファイル名が出力ファイルになる
今回はhoge.png

-geometry 1080x720は出力する画像のサイズを決められる

入力画像のサイズは統一しておくと便利
また、画像のサイズを知りたいときはidentifyコマンドで
% identify rayleigh.png
rayleigh.png PNG 1080x720 1080x720+0+0 8-bit sRGB 22.6KB 0.000u 0:00.000





他にはImageMagic関連のconvertコマンドのメモは以下から

■ 過去記事 : 【convert】png画像からgif画像を作るには
















こんな感じでOK
[ ]の中はすべて半角スペースで区切る
[ と !の間にスペース、$FILEのEと]の間のスペースを忘れるとエラーで怒られる
if [ ! -s $FILE ]; then
# ファイルサイズが0のとき
fi





似たようなのでこんな記事もある

■ 参考 : 【シェルコマンド】ファイルサイズが0のファイルを削除する














よくアクセス解析をしてると、URLの中身が%に置き換わってたりして何書いてるのか全然わからないことがある・・・

そういうときは、以下のページに入力すると変換して見やすくなる


■ 参考サイト : URLエンコード・デコードフォーム

例として、この記事のURLは次のように変換される
http://coffee.guhaw.com/Entry/697/
  ↑
  ↓
http%3a%2f%2fcoffee%2eguhaw%2ecom%2fEntry%2f697%2f





ググったら、これはnkfコマンドとかを使えば同等のことができるっぽい
echo 'http://coffee.guhaw.com/Entry/697/' | nkf -WwMQ | tr = %
  ↓
http%3A%2F%2Fcoffee%2Eguhaw%2Ecom%2FEntry%2F697%2F

また、逆は、
echo 'http%3a%2F%2Fcoffee%2Eguhaw%2Ecom%2FEntry%2F697%2F' | nkf -w --url-input
  ↓
http://coffee.guhaw.com/Entry/697/









condorに関する過去記事

■ 過去記事 : 【condor】について調べたのでメモ


■ 過去記事 : 【condor】shared libraryを使ったプログラムをジョブに渡すとき





condor_rmのヘルプを見るとタイトルと関係あるオプションを見つけてしまった
(スペースとタブが潰れたので見にくい・・・)
Usage: condor_rm [options] [constraints]
 where [options] is zero or more of:
  -help Display this message and exit
  -version Display version information and exit
  -long Display full result classad
  -totals Display success/failure totals
  -name schedd_name Connect to the given schedd
  -pool hostname Use the given central manager to find daemons
  -addr Connect directly to the given "sinful string"
  -reason reason Use the given RemoveReason
  -forcex Force the immediate local removal of jobs in the X state
     (only affects jobs already being removed)
 and where [constraints] is one of:
  cluster.proc Remove the given job
  cluster Remove the given cluster of jobs
  user Remove all jobs owned by user
  -constraint expr Remove all jobs matching the boolean expression
  -all Remove all jobs (cannot be used with other constraints)


単体のジョブを消すときは、
condor_rm [ID]

自分が投下したジョブをすべて止めるときは、
condor_rm [user name]
 または
condor_rm -all


condor_rm -constraint
で、条件文を書いてそれにmatchしたジョブだけを取り消せるらしい
ちなみに-constraintは-constと省略することもできるっぽい

条件文は、
condor_rm -const 'ClusterId > 3880'
な感じで書く
condor_qで表示されるジョブIDはClusterIdと呼ばれるらしい(CとIは大文字)

この変数名を探すのにかなり苦労したが、
condor_q -long | grep "3571"
みたいな感じで調べた
他にもやたら変数がセットされてるっぽいので、それらも使えるかもしれない(試してないけど)






















sshログインしてたら、次のようなエラーがログイン時に表示されるようになった
/usr/bin/xauth: error in locking authority file /somewhere/.Xauthority
/somewhereは自分のホームディレクトリ

rm ~/.Xauthority-c
:> .Xauthority
chmod 600 ~/.Xauthority
で、エラーはでなくなった
何が原因で起こったんだ?
















まずデータの紹介

これがhoge1.txt
3333 0.840188
4444 0.394383
1111 0.783099
1111 0.79844
3333 0.911647
3333 0.197551
4444 0.335223
これがhoge2.txt
3333.0 0.840188
4444.2 0.394383
1111.1 0.783099
1111.2 0.79844
3333.0 0.911647
3333.5 0.197551
4444.9 0.335223
hoge1.txtは$1が整数だけど、
hoge2.txtは$1が小数なのでhoge1.txtと同じ方法では重複を判別できない




ググったらまずは「uniqを使うんや」という知見を得たのでやってみた。

まずuniqコマンドの使い方は、
% uniq hoge1.txt
3333 0.840188
4444 0.394383
1111 0.783099
1111 0.79844
3333 0.911647
3333 0.197551
4444 0.335223
で、連続して重複した行を1つにまとめてくれるはずなのだが、
行全体の一致を調べてくれているので、この場合は役に立たない
%uniq -c hoge1.txt
で、一致している行には数字を打ってくれる機能をうまく使えばなんとかできる気がしたけど、
アフォなのでパス

また、連続していない重複は消してくれないので
もし連続していない別の列との重複も消したい場合は事前にsortしておく必要がある


■ 参考 : uniq コマンド







googleで「sort 重複 -uniq」で調べたらやっと出てきた・・・

■ 参考 : ソートしないで重複行を削除する
awk '!a[$0]++' FILE
でいいらしい
説明は参考リンクにあるのでパス(正直わからんちん)


このコマンドをそのままこれそのまま打っても ! がダメっぽい
シェルスクリプトとかにすればいける?
% awk '\!a[$1]++' hoge1.txt
3333 0.840188
4444 0.394383
1111 0.783099
で、! をエスケープすればたぶんOK

一応、これでhoge1.txtの$1から重複してるものを取り除くことはできた
他の行の重複を調べたいときは$1を置き換えればOK


他には、$2が大きいものから残しているようにしたかったら
% sort -k2 -r -g hoge1.txt | awk '\!a[$1]++'
3333 0.911647
1111 0.79844
4444 0.394383
ただし、$1の並び順はめちゃくちゃになるけど

(2017/4/13 追記)
上記のソートで sort -k -r -nと書いていたけど、nオプションは整数を並べ替えるときに使うっぽい
符号を含んだ実数(+1e-5とか-1e-13)とかは-gオプションを付けてソートする






次にhoge2.txtの$1の整数部分を取り出してみる
% awk '{print int($1), $1, $2}' hoge2.txt

または

% awk '{printf "%d %f %f\n", $1, $1, $2}' hoge2.txt
1つめの方法を見つけたときに、ほほ〜と思ったけど、2つめのprintfでごり押した方が早かったわ・・・・

これで、データを整数型にできれば、あとはhoge1.txtと同様にして重複部分を取り除けるわー






















■ 参考 : sedを使って複数ファイルの文字列を一気に置換する


find *.c | xargs sed -i "s/hoge/foo/g"

これで、今のディレクトリの .c で終わるファイルの中身で、hogeをfooに一括置き換えできる

sedの-iオプションはファイルを上書き保存するオプション

sedは便利だけどsとかgとか絶対に忘れるのでメモしておく・・・










シェルスクリプトでプログラムを走らせているときに、通し番号的なものを使うことがある
そのときi=1, 2, 3あたりで終わるものならいいけど、10を超えるとファイルの並び順がめちゃくちゃになって嫌になる・・・
そこで01, 02, 03, ...10, 11, ...みたいに通し番号を0埋めしてしまう


そのためにはprintfというコマンドが使えるらしい
% printf "%02d\n" 2
02
% printf "%02d\n" 10
10

使い方はC言語のprintfとほとんど同じだろう









■ 過去記事 : 【シェルスクリプト】bcコマンド

まさかの5年前の記事




10進数を2進数に変換は bc コマンドで簡単にできるらしい
% echo "obase=10; ibase=2; 11111111" | bc
255
% echo "obase=2; ibase=10; 255" | bc
11111111

ibaseが入力の数字が何進数か、obaseは出力の数字が何進数かを表す
(iはinput、oはoutputだと思う)
あとはbcの通常の使い方のように、それをechoしてパイプでbcに渡すだけ

■ 参考記事 : bcコマンドで16進数、10進数、8進数、2進数の変換・計算を行う方法













こんな記事を見つけた

■ 参考 : grepってオワコンだったの…

ackについてわかりやすい記事があったのでメモ

■ 参考 : ackを使おう!


これを見た感じでは、SVNのバージョン管理ソフトで真価を発揮するコマンドなのかな・・・という印象

試してみたら、Macにはデフォルトで入っていなかった・・・
portにはあった
ack @2.140.0_2 (devel)
A grep replacement, optimized for programmers

まぁ使わん・・・・




あと、agってのもあるみたい
そっちもgitとかバージョン管理向けのコマンドっぽい




自分はそういう検索をしたいときは
find somewhere -name "*.c" | xargs grep "!*" --color
とかしてるわ・・・
たぶんgrep使ってるから上記のack, agの方が早いんだろうな・・・









プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#define WISH_LIST
amazonのほしい物リスト
#endif


int main(void){

printf("\n");
printf("あけましておめでとうございます\n");
printf("今年もどうぞよろしくお願いします\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中\\
少し追記しました\n");
/* 最終更新 2018/01/01 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

とある物理の院生日誌~院生は社会へ旅立った~
(研究室の先輩の個人ブログ)

英語例文を見て自然に英語・英会話を学ぶ
(楠本慶ニさんの個人ページ、様々な情報の密度の高さに感動)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]