〜2013年10月上旬〜
はんこを作る過程でできた星をちょっといじってボタンアイコンに。
% ruby -e 'include Math; r=100; puts "path \"M"+11.times.map{|i| s=i%2==0?0.4:1; th=(126+i*36)*PI/180.0;"%s%d,%d" % [i==1 ? "Q" : "", 100.5+r*s*cos(th), 100.5-r*s*sin(th)] }.join(" ")+" Z\""' |\ convert -size 300x300 xc:none -fill none -stroke red -strokewidth 10 -draw @- -trim -resize 30x30 star.png
現在はこんな感じ。
なぜawk使っているのにbcなのか?
% awk '/Pss/{sum += $2}END{print sum}' /proc/$PID/smaps
ぐらいでいいんじゃない?
なんか左しか聞こえないので断線したかと思って、
右だけで試したらかすかに聞こえていた。
耳が不調かと左耳で聞いてもやっぱり差がある。
他のイヤホンだと問題ないのでプレーヤーの故障でもない。
ということでイヤホンが原因か。
しかし音が小さくなるというのは今までなかったな。
必ず断線で終了だったし。
xfce4-genmon-pluginにボタンをつけたはいいが、間に合わない事案が。
詳しく見るかとマウスに手を伸ばしてボタンを押す頃には、
15秒毎にランダムに表示してるもんだから、
次のアイテムに移ってしまっていることが多々ある。
これを長くしたところでタイミングの問題なので、
どうしても間に合わないときもでてくる。
どうしたもんかな。
exo-openは2つURLを受け付けてくれるので、前回のも覚えておけばいいか。
でも毎回2つ開くのもどうかな。
クッションページを作って2つ表示して間接的にという手もあるな。
まあ、それならlivedoorへ飛んじゃったほうがいいとも言えるが、記事を探すのが面倒だし。
履歴のページを用意しとくか。
URLにファイル名が表れない場合、curlでダウンロードするときに困るが、
Content-Dispositionで指定されているなら-J(--remote-header-name)を使えばいいようだ。
loop処理をしていて負荷対策とかで間にsleepを入れるというのはよくある話。
でもそのまま入れてしまうと無駄にsleepしてしまう。
% for i in foo/*; do bar "$i"; sleep 1m; done
最後はsleep不要。これをどう回避するか。最後を検知する必要がある。
iにはパス名が入るので何が最後になるかは不明。
ならば確実に最後になるものを追加しておけばいい。
いわゆる番兵ってやつだ。
% for i in foo/* END; do bar "$i"; if [ x"$i" != xEND ]; sleep 1m; fi; done
とまあ、ここまで書いたけど、これは全然だめ。
bar ENDを実行してしまうこともあるが、
それより余計なENDを追加してそのsleepをなくしてるだけで、
その前のsleepは残っているので何の解決にもなってない。
しかたなく今はsedで印をつけている。
% for i in $(ls foo/*|sed '$s/^/./'); do bar "${i#.}"; case "$i" in foo*) sleep 1m;; esac; done
最後のパス名の最初だけにdotをつけて判断。目的のパス名はfoo/で始まるのでdotはつかない。
case文をone linerで書くときはinの後ろに;を置きたくなるがsyntax errorになるので注意。
zshはそのあたりはなんでも受け付けるが。
なかださんからsleepを前に持ってきて最初だけ別にすればいいとの指摘があった。
まったくもってその通りだ。bashならこんな感じで。
$ for i in foo/*; do ((n++)) && sleep 1m; bar "$i"; done
dashだと(())は使えない。
$ for i in foo/*; do [ -n $n ] && sleep 1m; bar "$i"; n=1; done
見慣れないエラーが出てきた。
% ls 001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg 009.jpg 010.jpg 011.jpg 012.jpg % for i in *;echo $i zsh: bad floating point constant
なんだかよくわからないが、001.jpgとかを数値として扱おうとしてるようだ。
zshを立ち上げなおしても変わらず。
% exec zsh % for i in 001.jpg;echo $i zsh: bad floating point constant % i=001.jpg zsh: bad floating point constant
ぐぐってみると~/.zcompdumpを消せばokということなので、とりあえずmvしてみる。
% mv ~/.zcompdump ~/1310/zcompdump % exec zsh % i=001.jpg %
なおった。zmodload -i zsh/mathfuncを試した影響か?
% zmodload -i zsh/mathfunc % i=001.jpg
そうでもないようで。まあ、~/.zcompdumpは覚えておこう。
ちょっと驚いた。最初に誰でも試すだろうと思うコードがいきなりエラーになってしまった。
% groovy -v Groovy Version: 1.8.6 JVM: 1.7.0_25 Vendor: Oracle Corporation OS: Linux % groovy -e 'println "Hello, World!"' org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: script_from_command_line: 1: unexpected char: 0xFFFF @ line 1, column 23. println "Hello, World! ^ 1 error
script_from_command_line: 1: unexpected char: 0xFFFF @ line 1, column 23.でぐぐってみると、
2009年からあるバグのようで、未だに直ってないというのはどういうことなのか。
one linerでは使わないってこと?
コンパイラはAndroid NDKを使う。 Android NDK | Android Developers
% ls -oh android-ndk-r9-linux-x86_64* -rw-rw-r-- 1 eban 234M 2013-10-08 22:30:44 android-ndk-r9-linux-x86_64-legacy-toolchains.tar.bz2 -rw-rw-r-- 1 eban 406M 2013-10-08 22:33:30 android-ndk-r9-linux-x86_64.tar.bz2
2つとも展開する。
% du -sh android-ndk-r9 2.0G android-ndk-r9
いろんなバージョンを含んでいるので結構でかい。
sampleのどれかでndk-build -Bnとかすればコンパイラに渡すオプションがわかるのでそれを参考に。
% NDK_ROOT=$HOME/android/android-ndk-r9 % PATH=$PATH:$NDK_ROOT % mkdir -p $NDK_ROOT/samples/main/jni % echo 'main(){}' > $NDK_ROOT/samples/main/jni/main.c % cat > $NDK_ROOT/samples/main/jni/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main LOCAL_SRC_FILES := main.c include $(BUILD_EXECUTABLE) % cd $NDK_ROOT/samples/main % ndk-build -Bn rm -f ./libs/armeabi/lib*.so ./libs/armeabi-v7a/lib*.so ./libs/mips/lib*.so ./libs/x86/lib*.so rm -f ./libs/armeabi/gdbserver ./libs/armeabi-v7a/gdbserver ./libs/mips/gdbserver ./libs/x86/gdbserver rm -f ./libs/armeabi/gdb.setup ./libs/armeabi-v7a/gdb.setup ./libs/mips/gdb.setup ./libs/x86/gdb.setup mkdir -p obj/local/armeabi/objs/main echo """Compile thumb"" : main <= main.c" /home/eban/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -MMD -MP -MF ./obj/local/armeabi/objs/main/main.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Ijni -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -I/home/eban/android/android-ndk-r9/platforms/android-3/arch-arm/usr/include -c jni/main.c -o ./obj/local/armeabi/objs/main/main.o mkdir -p obj/local/armeabi echo "Executable : main" /home/eban/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=/home/eban/android/android-ndk-r9/platforms/android-3/arch-arm ./obj/local/armeabi/objs/main/main.o -lgcc -no-canonical-prefixes -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lc -lm -o ./obj/local/armeabi/main mkdir -p libs/armeabi echo "Install : main => libs/armeabi/main" install -p ./obj/local/armeabi/main ./libs/armeabi/main /home/eban/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip --strip-unneeded ./libs/armeabi/main
たぶん必須なのは--sysrootの部分。つまり
--sysroot=$NDK_ROOT/platforms/android-3/arch-arm
という感じ。まあ、バージョンは適当に。実際にコンパイルしてみると
% ndk-build Compile thumb : main <= main.c Executable : main Install : main => libs/armeabi/main
となる。が、ndk-buildだと面倒なので直接arm-linux-androideabi-gccを使う。