2011/12/30

2011/12/30

ubuntu 11.10 デフォルトの画像ビューア

eogってのか。
$ eog ~/your/image/filepath

2011年のふりかえり(予定地)

少しふりかえっておきたい。



社会復帰した

2009/10いっぱいで仕事を辞めて2010/12までたっぷりブラブラした。
で、いい加減働こうとしていたところに声を掛けて頂き、2011/01からスーパーハカーが二人もいるところで働くことになった。 こういうことを言っていたので願ったり。

27歳になった

誕生日は01/10です。binary dayです。27歳になりました。もうすぐ28歳です。

仕事でlisp

仕事でGaucheを使わせてもらいました。(ほぼ通年)
なのでOutputzの集計がscheme-modeだらけ。

ぎっくり腰になった(11年ぶり2回目)

やばい。ぎっくり腰やばい。すぐ整体にいってかなりよくなったけど、3日くらいは日常生活もまともに送れなかった。

J.P.ホーガンを読みあさった

今は造物主(ライフメーカー)の掟を読んでる。

unix/linuxが好きになった



shellコマンドにハマった



プログラムを書いたらとりあえずコマンドにした



客先泊まり込みデスマ

6,7月やばかった

ウィスキーが好きになる



久し振りにKPFを開催



隔週開催していた9LISPが不定期開催(不本意)



ThinkPad買ってubuntu入れた



筋トレ始めた



facebookに地元の友人/知人がたくさん

最近はスマートフォンの影響かリア充(この単語はもう死んでしまったかも)が大量に流れ込んでるようですね。
気まずい人が「この人友達じゃね?」って出てきて怖いですね。

ガラケーからスマートフォンにした

ようやく5年くらい使ったガラケーからスマートフォンに。galaxy s2にしました。Xiじゃないやつ。とりあえずこれを装着した。
SGP ギャラクシー S2 ケース ネオ・ハイブリッド【 ソウル・ブラック 】Neo Hybrid 液晶保護フィルム付  docomo Galaxy S2 ケース sc 02c
画面保護シートはゴリラガラスらしいしいいかなーって。

2011年の目標

果たして達成されたのか。

2011/12/28

sedでマッチした部分を置換にも使う

何を言ってるかわからねーかもしれねーが、&で
$ for i in {1..10} ; do ; echo "$RANDOM" ; done | sed 's/0/[[&]]/g'
31171
21328
499
1717[[0]]
12253
28374
124[[0]]8
9972
6892
1525
最近shellでsed/awkとかワンライナーが楽しくて仕方ない。

sed & awkプログラミング 改訂版

dropbox start

ubuntuでdropbox使ってるけど、stumpwmの時は
$ dropbox start
しないと同期してくれない。

2011/12/24

2011/12/24

emacs lispのplist

これを見て初めて知りました。 elispにもcl同様にplistがあったんですね。しかも変数/関数とは別にバインドできるアレが。(あ、でもこれはcl packageのお陰なのかな?そこまで調べる気は起きなかったり)
*** Welcome to IELM ***  Type (describe-mode) for help.
ELISP> (get 'hoge :foo)
nil
ELISP> (get 'hoge :bar)
nil
ELISP> (setf (get 'hoge :foo) 100)
100
ELISP> (setf (get 'hoge :bar) 200)
200
ELISP> (get 'hoge :foo)
100
ELISP> (get 'hoge :bar)
200
ELISP> hoge
*** Eval error ***  Symbol's value as variable is void: hoge
ELISP> (setq hoge 'aaaaaaaaaaa)
aaaaaaaaaaa
ELISP> hoge
aaaaaaaaaaa
ELISP> (defun hoge (x) x)
hoge
ELISP> (hoge "hoge")
"hoge"
ELISP> (hoge "hello, world !!")
"hello, world !!"
ELISP> (symbol-value 'hoge)
aaaaaaaaaaa
ELISP> (symbol-function 'hoge)
(lambda
  (x)
  x)

ELISP> (symbol-plist 'hoge)
(:foo 100 :bar 200)

ELISP> (symbol-name 'hoge)
"hoge"
ELISP> (symbol-package 'hoge)
*** Eval error ***  Symbol's function definition is void: symbol-package
ELISP> 
twitterで教えてもらったけど、Common Lispのsymbolって5つもスロットあったのか(笑)変数/関数にplistの3つかと思ってた。その点schemeは良し悪しは別としてすごくシンプル。
Emacs Lispテクニックバイブル

2011/12/22

2011/12/22

Re: lispのマクロ定義について

最初の例は動かないんじゃないかなー。取りあえずmacroexpandしたらいいかと。この辺はLOLの評価の梯子(だっけ?)の話がわかりやすかった。
[1]> (defmacro inc! (var)`(setq var (1+ var)))
INC!
[2]> (let ((x 1))(macroexpand '(inc! x)))
(SETQ VAR (1+ VAR)) ;
T
[3]> (defmacro inc! (var)`(setq ,var (1+ ,var)))
INC!
[4]> (let ((x 1))(macroexpand '(inc! x)))
(SETQ X (1+ X)) ;
T
[5]> 
On LispLOLもせっかくWebで読めるので参考にしてはどうでしょう。 こんなとこでドヤ顔しながら回答しても無意味だけど。
On Lisp

2011/12/21

2011/12/21

ubuntuにGauche-gd入れてなかった

というかgdも入ってなかった。
$ sudo apt-get install libgd2-xpm-dev
$ ./configure
$ make
$ sudo make install
しばらく前に仕事でGauche-gd使って画像レンダラコマンドとDSL(振り返るとこれはひどかった・・・)を書いたんだけど、それを自分用に書き直したいなーって思っていたり。あと、当時それらを作るのにGDのことを何もしらなかったのでいろいろサンプルを書いた残骸があるのでブログに書こうと思っていたんだった(忘れてた)。いつか書く(かも)。

プログラミングGauche

2011/12/20

2011/12/20

favrand自動更新


以前、指定したTwitterユーザーのふぁぼりをランダムに一つ選択して表示するfavrandというコマンドを作った。 コマンドにしたお陰で、コマンドとしてもbotとしても動いてたりする。
それは置いといてインターバルを設定して自動で更新するようにしてみた。つまり、いままでは一回の実行で一個のふぁぼを表示していたけど、自動で更新してくれるようにしただけ。自分のふぁぼでも他人のふぁぼでも眺めてるだけでたっぷり時間を消費できる・・・
タンブラー版のコマンドも。

プログラミングGauche

2011/12/17

bloggerバグってる?

このブログに下記の記事がある。2011年12月の記事。右側のarchiveの2011/12/14と2011/12/13の間に並んでいるので、個別にアクセスすることができる。だけど、ブログ最下部の「前の投稿」から辿ると表示されない。 しかし「前の投稿」から「vallog: blogの更新をtwitterに通知する」まで辿ってから「新しい」で逆に辿ると表示される。

追記

と、思ったら・・・
全ての記事がトップから「前の投稿」まで流れたら表示されるようになった。つまりこの記事を投稿した時点で上記の症状がなくなった。

2011/12/15

2011/12/15

日記

feedburnerでtwitterに通知するようにしたわけです。 ただ全ての投稿が通知されるのはどうかと・・・。 ということで、feedburnerラベルがついた投稿だけ通知するようにしました。 何が言いたいかというとテスト。


日記本題。awk/sedが便利だし楽しいだしマイブームです。というかshell scriptすげー。便利ー。なんでもうちっと早く触ってみなかったのか。。m4とかももうちっと触ってみたい。

す、す好きなコマンドはなんですか?

sed & awkプログラミング 改訂版

2011/12/14

2011/12/14

shellで連番の欠番を探す(awk)

欠番に耳あてしてみる。
$ i=10 && while [ $i -ne 0 ] ; do ; od -vAn -N1 -tu4 < /dev/random ; i=`expr $i - 1` ; done | tr -d ' ' | sort -n | uniq > ~/temp/randnums.txt
$ cat ~/temp/randnums.txt
1
13
62
64
114
137
210
240
253
$ cat ~/temp/randnums.txt | awk BEGIN{'FS=","}{print $1}' | awk 'BEGIN{pre=0;}{if(pre+1<$1){for(i=pre+1;i<$1;i++){print "*"i"*"}}{print $1}pre=$1;}'  | head
1
*2*
*3*
*4*
*5*
*6*
*7*
*8*
*9*
*10*
*11*
*12*
13
*14*
*15*
*16*
*17*
*18*
*19*
*20*
取りあえずコマンドにしてみる。
$ cat ~/temp/randnums.txt | toothless | head -n 15
2
3
4
5
6
7
8
9
10
11
12
14
15
16
17
ソースはこちら
そういえば以前同じようなことした。

おまけ

基本的にこのページは全て awk で記述していく。
awk/sedいいですよねー面白いですよねー。もっとちゃんとやってみたい。

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

shellで適当な数値セットを作る(while, od, /dev/random, expr)

$ i=10 && while [ $i -ne 0 ] ; do ; od -vAn -N1 -tu4 < /dev/random ; i=`expr $i - 1` ; done | tr -d ' ' | sort -n | uniq
33
84
93
100
133
148
170
241
247


入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

shellで適当にCSVを作る(while, od, /dev/random, shasum, cut, expr)

こないだも同じようなの書きましたけども
$ i=30;while [ $i -ne 0 ] ; do ; echo `od -vAn -N1 -tu4 < /dev/random`','`head /dev/urandom | shasum | cut -f 1 -d " "` ; i=`expr $i - 1` ;done
143,7ed6cdfacce9c8180f084f11ff40a487fb9b76cc
172,e8868853fbf06a59d54a80af5d326ee923f5c2a5
20,aa6964527830642d0487d8c91ee729acd596d2c6
16,39653698b5f44272b9323175142c6f697b0b56e5
147,58d0a5b4f8ba2b6b232b3d880b012dbc5c8f7003
124,4b29452a6ceed3bc5cbc5646f89b8d059f35142c
77,79d318be8be409b772f5bc084119816e1d8a7b3d
5,830c44e27e2541f5b3cb93dfad07a35121f19d4a
29,e822b1cd62a150c6f33f5db764e2ea4a684e79d2
90,d32f9c0a7b84f2cdd9621ed8a9265cd95a56c263
65,fd244f7b6c689510e4b5ddf12871497c74fdc499
189,1731b1bf3a5376880b36dc95ec1e7f7195648e20
137,79b3c453d5157bd39d27cd5ce543f652f9b3bcaf
28,9ed7b27b2f119e9d5b90807c8eb95871d2b41f9b
45,52e2a699499889ea4f8c6840ab968f8c56fd3811
148,ff29ed9a549e9252e230321d2aa620850aa1f88f
162,baecf2ff043644044b8ed901e70283a645990d4f
169,9b1d410a6a7e1b3babfe4ccbbef0aa769bad9bf7
117,16d548cb175ccf8e992ed69ec1d43940a15bda85
127,ca7533638cd1cb09d774d3515d4298842c912a93
203,80431c1c5296af45c7974d07ae2aea803167a395
5,0488e6326128587a7a0f8fa071120b78752dacbf
102,c3882ba4b20a38f34cb08b96bd7cec22a0cf47a7
161,9efe9a3c9a9f46fc928ef077123dc3ae188f6973
9,cd5c6555c08ddf3a81b8a682b65a7de3adb25cd4
132,7abe72b0e1341a5b4b24b06dcc75fbc2615fa3c7
229,5ee1c7255d38acbe446e8a30bcf6ddcefd8615bb
193,228f6cdab6ae3d276a1b4b543ca39cf93f499a5f
188,f6b215b5202d7342f7c310402dffedaf349fcbce
54,6e2490ea175f1e4ea009e441fccabe08d2d8c0c7


入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

shellで乱数(od, /dev/random, tr)

$RANDOMってのもありますね。
$ od -vAn -N1 -tu4 < /dev/random | tr -d ' '
$ od -vAn -N4 -tu4 < /dev/random | tr -d ' '


入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

日付を2進数とか16進数に変換してみるshell script(date, bc)

最近「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」って本を読んでて、シェルスクリプト書いてみてます。

普段は何かやりたいことがあればGaucheで書いています。ですがシェルスクリプトで書いた方が手軽な場合も多々あります。やりたいことがあったときにシェルスクリプトで書くか、お気に入りの言語で書くか、この辺の判断はまだできません。シェルスクリプト書くのが結構楽しいので、もうちっと書きながら勉強してみます。

当初考えていたやりたいことを実現するにはシェルスクリプトで十分でした。が、機能を付け加えていくうちに「Gaucheでやればよかった・・・」という状況になりました。。なぜかというとコードが手続き的でわかりにくくて面倒になったからです。まだシェルスクリプトの作法がわからないこともありますが、文法的に手続き的なコードになりやすい印象を受けます(そりゃそうだろうと思いますが)。手続き的なコードが苦手なのであーあーあーあーあー状態。

で、本題。
date2binという名前を見ればわかるように、日付を2進数に変換してみようと思ったのがきっかけでした。そのうち16進数も、8進数も、CSVにも、といろいろやってるうちに面倒なことに。
$ date2bin -n3
--------------------
count          : 0
+%Y-%m-%d      : 2011-12-14
+%s            : 1323788400
+%Y%m%d -> bin : 1001100101101111101101110
+%m%d -> bin   : 10010111110
+%s -> bin     : 1001110111001110110100001110000
+%Y%m%d -> oct : 114557556
+%m%d -> oct   : 2276
+%s -> oct     : 11671664160
+%Y%m%d -> hex : 132DF6E
+%m%d -> hex   : 4BE
+%s -> hex     : 4EE76870
--------------------
count          : 1
+%Y-%m-%d      : 2011-12-15
+%s            : 1323874800
+%Y%m%d -> bin : 1001100101101111101101111
+%m%d -> bin   : 10010111111
+%s -> bin     : 1001110111010001011100111110000
+%Y%m%d -> oct : 114557557
+%m%d -> oct   : 2277
+%s -> oct     : 11672134760
+%Y%m%d -> hex : 132DF6F
+%m%d -> hex   : 4BF
+%s -> hex     : 4EE8B9F0
--------------------
count          : 2
+%Y-%m-%d      : 2011-12-16
+%s            : 1323961200
+%Y%m%d -> bin : 1001100101101111101110000
+%m%d -> bin   : 10011000000
+%s -> bin     : 1001110111010100000101101110000
+%Y%m%d -> oct : 114557560
+%m%d -> oct   : 2300
+%s -> oct     : 11672405560
+%Y%m%d -> hex : 132DF70
+%m%d -> hex   : 4C0
+%s -> hex     : 4EEA0B70
--------------------
$ date2bin -fn3
count,ymd,epoch,ymd_bin,md_bin,epoch_bin,ymd_oct,md_oct,epoch_oct,ymd_hex,md_hex,epoch_hex
0,2011-12-14,1323788400,1001100101101111101101110,10010111110,1001110111001110110100001110000,114557556,2276,11671664160,132DF6E,4BE,4EE76870
1,2011-12-15,1323874800,1001100101101111101101111,10010111111,1001110111010001011100111110000,114557557,2277,11672134760,132DF6F,4BF,4EE8B9F0
2,2011-12-16,1323961200,1001100101101111101110000,10011000000,1001110111010100000101101110000,114557560,2300,11672405560,132DF70,4C0,4EEA0B70
コードはこちら
今回気づいた面白い日付は3/14とか5/12とかでしょうか(今回のコマンド関係ない)。あとはbinary dayくらいですかね。epochで言えば2012/04/02の11時くらいが1333333333でちょっと面白いですね。他にはもう過ぎ去りましたが
$date -d @1234567890 +%Y-%m-%d
$date -d @1111111111 +%Y-%m-%d
とかですか。

ダサいコードで恥ずかしいですが、どんどん晒していきます。

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

blogの更新をtwitterに通知する

以前はfriendfeed経由でやってました。いつからかfriendfeedからの通知ができなくなったのでtwitterfeedから通知するようにしました。twitterfeedの通知は微妙でした。ので、Twitterへの通知はしばらく止めてました。今度はfeedburnerの通知機能を使うことにしました。 ということでテスト。

2011/12/11

2011/12/11

1000

このブログ1000記事目だー
昔書いた下書き記事を含めてだけど。



下書きの記事はpure言語を触ってみた結構長めの話だった。


ちょっと振り返ってみる。

このブログは2009/01/01から書いてる。それ以前の記事は前のブログから移行したもの。
(ということは1000記事目じゃないな)

sicpを読むために「もうひとつの Scheme 入門」を読み始めたのが2008/11くらいからだった。(lispを始めたきっかけは同時期にハッカーと画家を読んだからだけど)
だからこのブログもこのありさまなんだ・・・。

そういえばKPFを始めたのも同じ頃。 初めて参加した勉強会というかイベント?(2008/12に福岡であった九州Ruby会議)とTwitterがきっかけ。2008年末にいろいろやったから今があるんだなー(白目

2008年末頃のバイタルは異常。
意識高ぇー(笑) 当時RTなんてなかったんだぜ・・・信じられるか・・・。

計算機プログラムの構造と解釈

2011/12/08

2011/12/08

extractコマンド

そんなコマンドはないですが、下記リンクのものをコマンドにしています。 ソースはこちら。こんな感じ。 link先ではaunpackがあるじゃんって話ですね。aunpackも使いますが、上記コマンドはリファレンスにもなるのでこれはこれで便利。

UNIXという考え方―その設計思想と哲学

ssh先のディレクトリをtarしてローカルにコピーして展開(ssh, cd, tarしてtar)

$ ssh valvallow@server '(cd /foo/bar/baz ; tar cf - .)' | tar xf -
だいたいいつもこれ見る。 UNIXという考え方―その設計思想と哲学

dateコマンドで日付の加減算

$ date
Thu Dec  8 19:35:07 JST 2011
$ date --date '-100month'
Fri Aug  8 19:35:19 JST 2003
$ date --date '-100month' +%Y-%m-%d
2003-08-08
$ 
へぇーへぇー。 UNIXという考え方―その設計思想と哲学

2011/12/07

2011/12/07

日記

今日はぬこ様と遊べて楽しかった。
先生んちの98lowかわいかった。

あと10記事くらいで1000記事目だこのブログ。
自動更新のvalloggerに1000を取られないようにしたい。

ベツニトラレテモイイケド、「1000ならxxx!!」ッテカキタイ

そういえば最近、また岐路っぽい。
方向が決まったら日記でも書く。

2011/12/02

2011/12/02

クリスマスツリーを飾りました。Lispで。

もうすぐクリスマスなのでterminalにクリスマスツリーを飾りました。
Lisp(というかScheme(というかGauche 0.9.1以降))で書きました。
和田先生の去年の記事を参考に・・・。
$ christmas-tree -size 6 -color


ソースはこちら。毎度よろしくコマンドにしました。色付けが若干間違ってるのはご愛嬌ということで。


The Art of Computer Programming,Volume 4, Fascicle 3: Generating All Combinations and Partitions【日本語版】 (ASCII Addison Wesley Programming Se)

lispギャグ

リリカル☆LispとかマンガでわかるLispの中の人が。


LispやSchemeはいつもAdvent Calendarないですねー。

クリスマスネタとか新年ネタ探そ。
クリスマスツリーは去年見かけて、真似して書きかけたのがある。
書き初めは、仕事で書いたgauche製の画像レンダラがあるのでできそう。ってか普通にGauche-gdだけでいいか。


渾身のlispネタ


初めての人のためのLISP[増補改訂版]

bloggerの新UIで投稿できなくなった

ので、旧UIに戻した。
2011/12/02 20:08

2011/12/01

2011/12/01

2011年11月の筋トレ

10年以上体重に目立った変化がなかったのに今年になって6kg太った。腹がぷにぷにしてきた。思い切って11月から筋トレを始めた。「痩せるには筋肉つけて代謝を上げればいいはず(キリッ」と考えて筋トレ。 取りあえず少ない回数から始めて、「続ける」ことを目標にした。これからも焦らず無理せず続けたい。
目標は半年後に腹筋を割ること。誰かアドバイスたのむ。
目指せガチムチェ・・・

日時体重腕立て腹筋スクワット
2011-11-0259.7202020
2011-11-0360.4202020
2011-11-0459.4303030
2011-11-0559.4303030
2011-11-0659.8303030
2011-11-0759.640050
2011-11-0859.4401040
2011-11-1058.930530
2011-11-1258.2505030
2011-11-1458.4502030
2011-11-1559.050200
2011-11-1657.050300
2011-11-1758.870300
2011-11-1858.8100500
2011-11-1959.8100500
2011-11-2058.8100500
2011-11-2258.8115500
2011-11-2359.2100500
2011-11-2559.0140500
2011-11-2659.0100500
2011-11-2958.880300
2011-11-3058.6100500
22/30日平均59kg1445725310

スクワットは途中でやめた。腕立ては楽しく続けている。腹筋はツライ・・・。懸垂したい。
夕食後就寝前に筋トレしてるのでまずいと思う。夕食前にシフトしたい。 身長は171cm。
ちなみに記録は、筋トレ用にCSV記録用のshellスクリプト書いて、集計と表組はawkでやった。

2011/11/30