Just another Ruby porter,

〜2013年10月上旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2013-10-01 (Tue)

せっかくなのでボタンのアイコンを作った

はんこを作る過程でできた星をちょっといじってボタンアイコンに。

% 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

現在はこんな感じ。


2013-10-02 (Wed)

Found how how much memory in kB $PID is occupying in Linux

なぜawk使っているのにbcなのか?

% awk '/Pss/{sum += $2}END{print sum}' /proc/$PID/smaps

ぐらいでいいんじゃない?


2013-10-03 (Thu)

イヤホンの右側の音が小さい

なんか左しか聞こえないので断線したかと思って、
右だけで試したらかすかに聞こえていた。
耳が不調かと左耳で聞いてもやっぱり差がある。
他のイヤホンだと問題ないのでプレーヤーの故障でもない。
ということでイヤホンが原因か。
しかし音が小さくなるというのは今までなかったな。
必ず断線で終了だったし。


2013-10-04 (Fri)

クリックが間に合わない

xfce4-genmon-pluginにボタンをつけたはいいが、間に合わない事案が。
詳しく見るかとマウスに手を伸ばしてボタンを押す頃には、
15秒毎にランダムに表示してるもんだから、
次のアイテムに移ってしまっていることが多々ある。
これを長くしたところでタイミングの問題なので、
どうしても間に合わないときもでてくる。
どうしたもんかな。
exo-openは2つURLを受け付けてくれるので、前回のも覚えておけばいいか。
でも毎回2つ開くのもどうかな。
クッションページを作って2つ表示して間接的にという手もあるな。
まあ、それならlivedoorへ飛んじゃったほうがいいとも言えるが、記事を探すのが面倒だし。
履歴のページを用意しとくか。


2013-10-05 (Sat)

ファイル名がないダウンロード

URLにファイル名が表れない場合、curlでダウンロードするときに困るが、
Content-Dispositionで指定されているなら-J(--remote-header-name)を使えばいいようだ。


2013-10-06 (Sun)

loopでsleep

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はそのあたりはなんでも受け付けるが。


2013-10-07 (Mon)

loopでsleepのつづき

なかださんから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

2013-10-08 (Tue)

zsh: bad floating point constant

見慣れないエラーが出てきた。

% 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は覚えておこう。


2013-10-09 (Wed)

Groovyのバグ

ちょっと驚いた。最初に誰でも試すだろうと思うコードがいきなりエラーになってしまった。

% 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では使わないってこと?


2013-10-10 (Thu)

Android版rubyを作るために

コンパイラは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を使う。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!