gerry++
三日連続
三日連続
うーんよくわからない。while(true)/receive と loop/react の違いもよくわからない (スレッド作るかそうじゃないかだけの違い?)
クローラっぽいのを練習がてら書いてみた。あんまりわかりやすくはないなぁという気もする。もっといい書きかたあるのかな。
あれこれ最初、スカラクロウラとかエントリで言いたかっただけだったのに、全くそんなこと忘れてエントリ書いてた
仕様がどうなっていようと使ってるやつが対応してないと意味ないですけどね!!
http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm#MPEGTAG
要は
でしか書けない。
http://www.id3.org/id3v2.4.0-structure
Frames that allow different types of text encoding contains a text
encoding description byte. Possible encodings:
$00 ISO-8859-1 [ISO-8859-1]. Terminated with $00.
$01 UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All
strings in the same frame SHALL have the same byteorder.
Terminated with $00 00.
$02 UTF-16BE [UTF-16] encoded Unicode [UNICODE] without BOM.
Terminated with $00 00.
$03 UTF-8 [UTF-8] encoded Unicode [UNICODE]. Terminated with $00.で書ける。場合によっては ISO-8859-1 と UTF-8 でしか書けない場合がある? (Tag restriction あたり。よくわからない)
メモメモ。簡単な Singleton Logger を実装してみる
//#!scala
object Logger {
var level = 0
def log (message: String, level: Int) {
if (this.level <= level) {
println(message)
}
}
def log (message: String):Unit = log(message, 1)
def debug = log(_: String, 0);
def info = log(_: String, 1);
def warn = log(_: String, 2);
def error = log(_: String, 3);
def fatal = log(_: String, 4);
// この例の場合はこうしたほうがいい気がする
// def log (message: String):Unit = info
}
Logger.level = 1
Logger debug "debug"
Logger info "info"
Logger warn "warn"部分適用は _ と型さえ書けばいいっぽい? 引数の順番に制限はないようだ
Logger foo arg は Logger.foo(arg) の syntax sugar らしい。引数一つのときに省略ができるというルールではなくて、レシーバも含めた syntax sugar のようだ
デフォルト引数は Ruby とかのように仮引数に書くことはできなくて、overload で定義するっぽい。このとき overload する側のメソッドは、返り値の型の宣言が必要らしい
二日連続
$ command git log --pretty=format:"%ad %an" --date=short | grep cho45 | awk '{ t[$1] += 1 } END { for (u in t) print u, t[u]}' |sort$ gnuplot << EOF set xdata time set timefmt "%Y-%m-%d" plot "/tmp/dt" using 1:2 with lines EOF
linux のコマンドラインで id3v2 を編集するやつってたくさんある割にろくなものがなくて、文字化けしたり正しいフォーマットで書きこめなかったりするのだけど、とりあえず使える方法を見つけたのでメモ
eyeD3 をとりあえず使う。python で書かれた id3 タグ編集ツール。そこそこよくできているけど、正しく文字コードを扱わない。
$ echo $LANG ja_JP.UTF-8 $ eyeD3 --version eyeD3 0.6.14 (C) Copyright 2002-2007 Travis Shirk <travis@pobox.com> $ eyeD3 --set-encoding=utf16-LE --to-v2.3 --artist "ふー" --title "ばぁー" foo.mp3 foo.mp3 [ 6.01 MB ] -------------------------------------------------------------------------------- Time: 6:34 MPEG1, Layer III [ 128 kb/s @ 44100 Hz - Joint stereo ] -------------------------------------------------------------------------------- Setting artist: ふー Setting title: ばぁー Converting tag to ID3 version v2.3 Writing tag... ID3 v2.3: title: ã°ãã¼ artist: ãµã¼ album: year: None track: UserTextFrame: [Description: Tagging time] 2009-05-21T15:39:24
というふうに、頑張って書いてくれるのはいいけど、自分で書いたやつをちゃんと読みだせていない。
とりあえず決め打ちでちゃんと書けてくれさえすればいいので
#!/usr/bin/env python
import eyeD3
import os, sys
from optparse import OptionParser
parser = OptionParser(usage=u'%prog [opts] target.mp3')
parser.add_option("-T", "--title",
dest = "title",
action = "store",
type = "string",
)
parser.add_option("-A", "--artist",
dest = "artist",
action = "store",
type = "string",
)
parser.add_option("-L", "--album",
dest = "album",
action = "store",
type = "string",
)
(options, args) = parser.parse_args(sys.argv[1:])
if not len(args) == 1:
sys.stderr.write("requires target.mp3")
exit();
target = args[0]
tag = eyeD3.Tag()
tag.link(target)
tag.header.setVersion(eyeD3.ID3_V2_3)
tag.setTextEncoding( eyeD3.UTF_16_ENCODING )
if options.title:
tag.setTitle( unicode(options.title, 'UTF-8') )
if options.artist:
tag.setArtist( unicode(options.artist, 'UTF-8') )
if options.album:
tag.setAlbum( unicode(options.album, 'UTF-8') )
tag.update()
os.execlp("eyeD3", "", target)というのを非常に頑張って書いた。Python 無理です。
なんかこれだと foobar2000 で場合によって文字化けする。なんなんだろ…… 判定に失敗するんだろうか。
firefly (mt-daap) だと大丈夫なんだけどなぁ。なんで id3 をまともに付けられる/読める環境になってないんだろ
やるだけやっとこうと重いました。
android コマンドが管理ツールらしい
$ android create avd --name test --target 2
# Android 1.5 ベースの AVD がつくられる
# 指定する id は android list でみれる
$ android list
Available Android targets:
id: 1
Name: Android 1.1
Type: Platform
API level: 2
Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
id: 2
Name: Android 1.5
Type: Platform
API level: 3
Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
id: 3
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Description: Android + Google APIs
Based on Android 1.5 (API level 3)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: HVGA (default), HVGA-L, QVGA-P, HVGA-P, QVGA-L
Available Android Virtual Devices:
Name: test
Path: /Users/cho45/.android/avd/test.avd
Target: Android 1.5 (API level 3)
Skin: HVGAで
$ emulator -avd test
するととりあえずエミュレータは起動する。コマンド名が攻めすぎててヒく
/Library/Input Methods/AquaSKK.app/Contents/Resources