19:54:37 # Life pythonで配列を掛け算する。 期待していた動きではなかったけど、便利かも。 配列に対して単純にスカラーをかけるとその回数だけ配列の内容が繰り替えされたものになるようだ。 中身の数字自体を何倍とかにする場合は違う方式を試すことになる。 足し算とかが面倒な気がするけど、これはもっと簡単な記法はないのかな?
>>> [[0]*10]*10 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] >>> array = [1, 2, 3] >>> [i * 10 for i in array] [10, 20, 30] >>> one = [1,2,3] >>> two=[5,4,2] >>> [ i + j for i, j in zip(one,two)]
22:28:37 # Life 今日のミス。 距離の計算の仕方を間違えていた。引くべきところを足していた。 だめだこりゃ。しかし簡単なミスなんだが、デバッグで長時間ハマってしまった。
21:19:28 # Life Android パッケージに署名してみる。 Keytoolが、Debianで適当にいろいろとインストールしているとGCJ版(CLASSPATH版)がデフォルトになっているようだ。 keytool と jarsigner はJDKのものがよいらしい。 とりあえずはGCJじゃないバージョン選択してみることにする。
sudo update-alternatives --config keytool `keytool' を提供する 3 個の alternatives があります。 選択肢 alternative ----------------------------------------------- 1 /usr/bin/gkeytool-4.3 *+ 2 /usr/lib/jvm/java-gcj/jre/bin/keytool 3 /usr/lib/jvm/java-6-sun/jre/bin/keytool
その後いろいろと試行錯誤してとりあえずアップロードするところまでできた。満足。
22:27:24 # Life とりあえず、Android上でSQLiteのDBに中身が作成できた。 しかし、GCを実装しないと際限なくキャッシュする仕組みになってしまう気がする。 で、そういう細かいところを気にしなければ必要最低限な機能は実装した。UIが変なところを除く。
14:32:37 # Life sqlite3 でいろいろと遊ぶ。 Android で使えるデータベースはSqlite3 らしいので、create table とかして一通りいろいろと遊んでみる。 昨年末にいじって以来触ってないので忘れてることも多い。 最近create tableしていないので、unique制約の使い方とか忘れている。 SQLについては、DMLはよく定義されているのだが、DDLは実装によりまちまちで、 いろいろなDBMSにおいて create table で使ういろいろな文法の細かい差異を 検証しつつ確認しないといけないのがめんどくさい。 特によくつかうんだけどあまりうまくないなぁと思うのが データの各 row に unique ID をふるための方法が各DBMSの実装によってかなり違う。 sqlite は integer primary key を指定すればよいっぽい。 autoincrement を指定すると、過去に遡っても unique なIDになるそうな。
20:17:25 # Life 入門git。 献本御礼。 Pragmatic Version Control Using Git の日本語訳。 伊丹・羽田間の一時間のフライトの間に一気に読み通せた。 専門書としては軽くてコンパクトで、おそらく電車の中でも無理無く読める。 原著の内容は2008年執筆時点の内容だが、 訳注で2009年用の内容が補足として追記されている。 内容は、この本を読めばSubversionに熟練している開発者 がスムーズにGitの世界に入門できるだろうという印象。 分散バージョン管理システムの世界に飛び込みたいが背中を押してほしい人の 通勤電車のお供に勧めたい。
17:07:11 # Life Android 夏合宿はつづく。 BroadcastReceiver であまり長時間CPUを握っていると殺されるらしい。 Service をつくらんといかんのだろうか。
15:46:56 # Life 一人でAndroidな夏合宿。 進捗は地味な感じで。 Intent の通知をうけて新しいウィンドウを表示する部分の仕組みがわからない。 なんか描画スレッドがどうのこうのというのにひっかかってる気がしなくもない。 定期的に裏側で実行するのは、 AlarmManager にIntentを送ってもらうというのが筋がよい気がしている。
13:37:53 # Life なんかHTTPリクエストをなげてうけるところまでできた。
GET / HTTP/1.1 X-WSSE: UsernameToken Username="xxx@xxxx.jp", PasswordDigest="SOrLWGL7Njj5yl04epVhVAYbL6U=", Nonce="IAPAbiDtzH0=", Created="2009-08-11T04:36:15Z" Host: 192.168.3.3:50318 Connection: Keep-Alive User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
んでもって、エントリーひろってくるところまでやってみた。 DOMとかを使いまくっていて富豪だからか、なんだかメモリー消費量が多い。RSS 16MBなんてあんたそんな贅沢な。
PID CPU% S #THR VSS RSS UID Name 12772 0% S 7 106724K 16712K app_52 jp.gr.netfort.dancer.mixi
10:35:00 # Life HTTPクライアントのデバッグをするためにHTTPサーバをいろいろといじる。 適当なサーバをたてるときに適当なポート番号を使ってほしいときがある。 sockaddr.sin_port = 0 と設定しておくとカーネルは適当なポート番号をふってくれるらしい。 ただ、そのポート番号が何番かということはどうやったらわかるのだろうか? netstat で確認することができる。 netstat をstraceで眺めてみた感じではプロセス単位でファイルデスクリプタを確認し、 /proc/net/tcpでファイル(ソケット)に対応するポート番号を確認しているようだ。 しかし、この方法はLinuxアーキテクチャに依存しすぎるなぁ、とおもって見ていると、 getsockname というのを使えばよいということがわかった。 ソケットのファイルデスクリプタを与えるとアドレスとポート番号が分かる。素晴らしい。
$ ls -l /proc/24305/fd/3 lrwx------ 1 dancer dancer 64 2009-08-10 10:36 /proc/24305/fd/3 -> socket:[126846] $ cat /proc/net/tcp | grep 126846 1: 00000000:9E35 00000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 126846 1 ffff8100189cc240 300 0 0 2 -1
14:21:43 # Life Javaと格闘数時間。 とりあえず何かができたが、生産的な気がしない。 Javaの使い方とEclipseの使い方がわからなくて時間が過ぎている部分が多すぎ。
$ javac -classpath ../lib/commons-codec-1.3.jar jp/gr/netfort/dancer/mixi/WsseString.java $ java -classpath ../lib/commons-codec-1.3.jar:. jp.gr.netfort.dancer.mixi.WsseString UsernameToken Username="dancer", PasswordDigest="M4896tPp+iS46+1bGhIp+537CJc=", Nonce="voGH85HRGNQ=", Created="2009-08-10T05:21:11Z"
10:02:33 # Life 706Pの連絡先データをAndroidにインポートしてみた。 706Pで連絡先データをSDカードにバックアップすると、SDカードの private/myfolder/Utility/Contacts/Contacts.BCK/に VCFファイルが作成されていた。 それを取り出してgmailでコンタクト先をインポートしたらAndroidでも利用できるようになった。 頑張ってデータ形式を解析しようかなとおもっていたらあっという 間に終わってしまったので拍子抜け。
$Id: 200908.html.ja,v 1.13 2009/08/31 13:29:03 dancer Exp $