日記

この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. 写真のような画像は画像生成AIもしくは念写によるものです.

« 2010-11 »

2010-11-28

Androidを色々いじってたら, ホームアプリがおかしくなって何も出来なくなったりして, 全部初期化. ついでにアカウントも変える.

2010-11-24

そろそろAndroidの本を何か買ってみるかなぁ. とりあえず触ってみようと思って遊んでいると, 本などを買うタイミングを逃すことが多いです.

ニコニコPlayer(仮) 公開して1か月経過

一部動画が再生できなくなってしまっていたので, 少し早めにアップデートしておきました. あと,前のバージョンからですが,sm9だけ実験のためにmp4じゃなくても再生します. まだ実装中なのでシークすらできませんが.

公開してから一か月間のDL数のグラフ.

やっぱり,1日500DLくらいで安定している.

実際に使い続けてくれてる人は,60%くらいっぽい.

ニコのアカウントもAccountManagerで管理した方がいい気がするけど, 自分のアプリだけ対応しても仕方ないので少し考え中.

2010-11-23

ニコニコPlayer(仮)を少しいじっておく. flv以外の動画を再生してみるテスト中.

前回のアップデートで公式チャンネルの動画が再生できなくなった というコメントがあったのを思い出して,原因らしいものを直す. 動画情報取得回りをいじったのでその関係かと思ったら,違うところだった.

(仮)の次は(β)にするつもりだったけど,変えるのいまいちかもなぁ.

2010-11-22

今日休み取ってる人多いなぁ.4連休にすれば良かったかも.

2010-11-21

昼過ぎに起きる.最近,12時間くらい寝てるな….

Make: Tokyo Meeting 06

http://jp.makezine.com/

行ってきました. はやぶさの実物大模型がとても目立ちますね.

一回りしてから,eldeshとGazyuと合流.

秋葉原

UDXで夕食.もつ鍋食べた.

Desireの画面に貼っていた保護フィルムが傷だらけになってきたので ヨドバシで買う. サンワサプライの反射防止のやつを買って貼ったら せかっくの綺麗な画面が残念な感じになってしまったので, 光沢の方をもう一枚買っておく.

2010-11-20

ニコニコPlayer(仮) 0.1.7

公開しました.今回は時間が無かったので大きな変更は無いかも. mp4以外の動画に対応する準備のため,色々いじってます.

ただ,あえてデバッグ用の機能を殺さずにアップロードしたので, 隠してある作りかけの機能とかを探してみるのも良いかもしれません.

秋葉原

Firefox Developers Conferenceに行く予定だったのだけど,すっかり忘れて 秋葉原をふらふらしていた.まぁいいか.

16GBのmicroSDを買った.3000円で買えるのか.

2010-11-19

昨日は早めに寝たので12時間以上眠れた.

ニコニコPlayerのアップデートするつもりだったけど, 今週はそんなにいじってないし明日でも良いかなぁ.

Android Marketのアプリケーションの管理画面がまた変わってるな…. 解像度の高いアイコンとかよりも,早く日本語が化けないようにして欲しい.

http://cekirdek.uludag.org.tr/~ismail/ffmpeg-docs/adpcm_8c-source.html

2010-11-18

ずっと寝たり起きたりしてたせいで,時間間隔がおかしいけど,とりあえず出社.

もしかして,Javaの匿名クラスは複数のインターフェイスを実装できない?

一時的複数のインターフェイスを持たせる必要があるけど,その処理特有の問題なので 匿名クラスにしたいのに.... IterableやSerializableすらつけられないのかな.

何か特別な理由があるのだろうか. クラスには名前付けろということなのかもしれないけどちょっと納得いかないな.

2010-11-17

風邪.

吐き気がして朝の9時頃に起きてしまって,まだ眠いのだけど気持ち悪くて 寝れなくて困っていたら案の定熱があった. 考えてみると昨日の夜からかなり調子悪かったな. インフルエンザとか怖いので念のため病院行ったけど大丈夫という結論に.

会社やすむことにしたので,家でおとなしくアニメ見たりプログラム書いたりして 充実した病人生活を送ろうと企んでいたけど無理そう

2010-11-16

会社から帰ってきて何もせずにそのまま寝る.

2010-11-15

CentOS + ruby1.9

昨日苦労して入れたrubyが動かなくなっていた.

cronから起動してた多くのスクリプト達が

failed to allocate memory (NoMemoryError)

とか言いながら死んでいる. 再度rubyを入れなおしたら動いたけど,なんなんだこれ.

情報探したら,

CentOS 4.7 では prelink が ruby 1.9.1 のバイナリを破壊する

というものが…. これっぽいな.

今までFreeBSD以外のサーバーを真面目に運用したことないのだけど, Linuxってこういうトラブル多いのかなぁ?

それにしてもVPS上にみんな移してしまって良かったのか少し考えてる. ネットバンクのパスワードを握っているプロセスとかが普通に走ってるからなぁ. ネットバンクも必要な権限だけOAuthとかで認証できるようになってほしい.

2010-11-14

Android-x86 Projectが結構活発だなぁ. 後で試しに入れてみるか.

vpsの環境を少し整える日になった. ruby入れたりapacheの設定書き直したり, 移行したら動かなくなったスクリプト類を直したり色々.

[Android] ニコニコPlayer(仮)

金曜日に公開したニコニコPlayer(仮) 0.1.6にログイン失敗すると 強制終了してしまうバグがあったので慌てて修正した. デバッグ用に入れてたコードが原因でNullPointerException起きてた.

ついでにいくつか修正.

何時の間にやら10,000ダウンロード.

家のサーバが調子悪い

EeePCで運用しているサーバが動いたままガラクタと一緒にダンボールの中に 放り込んであったのですが, 熱がこもって火事の原因になったらいやだなぁと思って掘り出す. ディスプレイ見たら,ディスクが読めない系のエラーが大量に出ていた. uptimeみたら233日間放置していたっぽい.

で,最低限のバックアップ取ってから再起動したら,案の定起動しなくなった.

というわけで,家のサーバで動いている怪しいデーモン類をVPSに移動することに.

スクリプト類をコピーしたら動かなくなって,よく見たらrubyが1.8だった.

CentOS 5.5にruby1.9.2を

CentOS上のrubyを最新版にする.

yumでは1.9をインストールできなかったので,rpm作るためにcheckinstallを….

http://packages.sw.be/rpmforge-release/

にあるcheckinstallがダウンロードできない….

http://futuremix.org/2009/01/centos5-x86_64-checkinstall-rpm

x86_64なCentOS用のrpmを公開してくれてる方がいたので,少し古い化も知れないけどこれを使う.

で,とりあえずrubyのrpm作ってインストール.

gems使おうと思ったらzlibが無いとか言われて,ライブラリのパスとか確認するが, ある…ってzlib-develが入ってないのか.

わけも分からず色々やり直したりしたけど,結局rubyのソースのext/zlibだけ インストールすれば良かったっぽいことを知る. opensslとかも同じように入れる.

今までFreeBSDのportsに頼ってたのでLinuxのパッケージは面倒に感じてしまうな.

無事ruby1.9.2に出来た. いままでは1.9.1で動かしてたのだけど, 正規表現の/~/nがASCII-8BIT以外に使えなくなってしまった気がする? よく分からないので,深く考えずに全部force_encodingを入れてしまう. gemsで入れたhttpclientとかも同じ原因で動かないので,それも適当にいじる.

あとは,データをコピーして,cronとかの設定して様子見. 問題なく動いてくれると期待.

2010-11-13

寝る.

2010-11-12

ページの文章を書き換えて楽しむグリモン書くときは,textareaとinputを除外したほうが良いと思った日.だけど,そうなると面白さは半減するなぁ.

[Android] ニコニコPlayer(仮) 0.1.6.KARI

とりあえずリリース. 今週はあまり触れなかったので大きな変更はないかも.

(実は前のバージョンから入ってた機能だけど,メニュー画面左上の テレビちゃんもどきを長押しすると…)

2010-11-11

8時間くらい寝てるのだけど,疲れが取れないなぁ.

2010-11-08

ADPCM

5年前に着メロ解析してたときのプログラムを発掘して,デコードしてみた.

実際に再生してみたいところだけど,エンコーダーのテスト用に作ったプログラムなので, wavで出力する機能が付いてなかった. ただ,微妙に波形が怪しい. まぁ,エンコーダも結局ちゃんとしたものが作れなかった記憶があるので, まともな実装を探してみよう.

2010-11-07

新宿で肉を食べた.

画面が小さい端末でもそれなりに見えるようにCSSとテンプレートを少し修正した. 日記は面倒なので後回し.

ニコニコPlayerのコードを少し整理する.ついでに少し高速化とかも.

いいかげん,正規表現やめてXmlPullParserでxmlをパースしようと思って, 試しに書いてパフォーマンス見てみたら遅すぎて使う気にならなかった. 多少コードの見通しが良くなるけど4倍近く遅くなるのを考えるとなぁ.

メモ

2010-11-06

[ニコニコ動画] 動画をjpegで取得する

iPhoneとかが使ってるインターフェイスにアクセスしてみる.

iPhone/iPod touchアプリ “ニコニコ動画” をパケット解析する(2)

iPhoneとか持ってないので,この記事がとても参考になりました.

最初はデータ生成するからちょっと待て(?)といわれるので, 数秒置いて同じリクエストを送るとデータが帰ってくるようです.

間違ってるかもしれませんが,chat_get=0で情報を取得したあと, chat_get=1とかにして動画データを取得できるようです.

取得したデータを見たら, 動画情報,コメント,音声,jpeg,jpeg,音声,jpeg,jpeg,音声…という風に 格納されていました. データの先頭にサイズが入っているのでパースするのは簡単そう.

音声部分は,生のPCMではないようなので, ニコモバの資料にある通りADPCMでしょうか. ADPCMと一言で言ってもフォーマットがいくつかあるので困りますが.

詳細な説明を書きたいところですが,なんかダメな気もするので我慢.

サンプル

必要なモジュールは適当に入れてください.

#!/usr/local/bin/ruby -Ke
# -*- coding: ascii-8bit -*-
require "rubygems"
require 'httpclient'
require 'kconv'

account = { 'mail'=>'hoge@exsample.com', 'password'=>'*******' }
vid = 'sm9'

client = HTTPClient.new

res = client.post('https://secure.nicovideo.jp/secure/login?site=nicoiphone', account)
if res.content !~ /status="ok"/i || res.content !~ /<ticket>([^<]+)<\//
	print "TICKET ERROR\n"
	exit
end
ticket = $1
print "ticket: #{ticket}\n"

res = client.get_content('http://i.nicovideo.jp/v2/login?ticket='+ticket).toutf8
if res !~ /status="ok"/ || res !~ /<session_id>([^<]+)<\//
	print "LOGIN ERROR\n"
	exit
end

sid = $1
print "sid: #{sid}\n";

res = client.get_content("http://fence.i.nicovideo.jp/v2/videostatus?video_id=#{vid}").toutf8
print "status: #{res}\n"

res = client.get_content('http://fence.i.nicovideo.jp/v2/gate?video_id='+vid+'&sid='+sid,nil,{'User-Agent' => 'iPad'}).force_encoding('ascii-8bit')
if res !~ /tid\x00.([^\x00]+)\x00.*psvr\x00.([^\x00]+)/m
	print "GATE ERROR\n"
	exit
end

tid = $1
psvr = $2
time = 0

begin
	res = client.get_content("http://fence.i.nicovideo.jp/v2/play?transmission_speed=0&sound_quality=16&frame_rate=8&chat_get=1&video_id=#{vid}&sid=#{sid}&network=wifi&thread_id=#{tid}&date_time=#{time}&play_server=#{psvr}&initial=1").force_encoding('ascii-8bit')
	p a = res.unpack('a4NnnN')
	if a[0] == "DNOP" && a[2] == 2
	    print "wait...\n"
	    sleep 1
	elsif a[0] != "DWNG"
	    print "header: #{a[0]}\n"
	    exit
	end
end while a[0] == "DNOP" && a[2] == 2

pos = 0x14 + a[5]
frame = 0
while pos+6<res.length do
    block_info = res[pos,6].unpack('nN')
    p pos
    p block_info
    if block_info[0] == 0xCB
      foo = File.open("#{vid}_#{sprintf("%04d_%02d",time,frame)}.adpcm",'wb')
      foo.write res[pos+6,block_info[1]]
      foo.close
    end
    if block_info[0] == 0xC8
      foo = File.open("#{vid}_#{sprintf("%04d_%02d",time,frame)}.jpg",'wb')
      foo.write res[pos+6,block_info[1]]
      foo.close
      frame+=1
    end
    pos+= 6 + block_info[1]
end

2010-11-05

ysaotomeが会社を見学しにくるというので,社内を案内したりした.

[Android] ニコニコPlayer(仮) 0.1.5.KARI

アップデートした.

一週間空くと,自分では何が変更されたのか覚えてないな….

とりあえず今後のバージョンに入れたいと考えてる機能を. まだ考えてるだけですが.

動画キャッシュ管理

キャッシュを個別に消したいという人もいると思うので,実装はする予定です. ただ,キャッシュは自動的に消えてくれるべきだと思うので, 特定の動画だけいつでも見れるように消す対象から除外とかになるかなぁ.

ただ,オフライン再生はニコニコ側で削除された動画も見れてしまったりするので 実装しない気がします.

mp4以外の動画に対応

これを実装したら(仮)から(β)にしても良いかなと思っています.

デコーダをjavaで書くのは現実的じゃない&ffmpegで変換しないと再生できないのは なんだかいやなので,iPhoneで以前から使われていたモバイル用のデータ使うかもです. 画質が悪いのと,ネット上の資料が少ないのが問題. かといって,社内の資料使って作ってしまうと問題だし. 普通に解析できるとは思うけど,なんだかなぁという気分が開発の邪魔をしている.

他にも細かい部分をたくさん直したいのだけど,時間が足りないかも. 気長にやります….

2010-11-03

昼に起きて,午後は昼寝.気づいたら外が暗かった.買い物行ったり.

[Android] ADTのLayout Editorで日本語使いたい

ADTのLayout Editorでレイアウトを確認しながら画面を作れると便利なのですが, こいつは日本語が表示されるボタンとかがあるとレイアウトが崩れてしまって 使い物にならないです.

結局xmlを直接書いていたのですが,下のURLのページ見て, 半角スペースを前後に入れたらちゃんと表示されるようになりました. strings.xmlとかで文字列を管理しているなら,全ての文字列をスペースで囲って, リリース時には消すようにすれば良さそう. どうせスペースは見えないし消さないのもありかも.

http://d.hatena.ne.jp/Kazzz/20100202/p1

2010-11-02

今日は12時に起きたので,会社に行くまでに少し ニコニコPlayerをいじる.

ランキングのキャッシュ回りを少し直して,サムネイルのキャッシュも実装してみる. 画像のキャッシュはSQLiteよりファイルシステムの方が読み込み速いし, 変な条件で検索することも無いから単純にファイルベースで良さそう. あとは,少し様子みてからマイリストもキャッシュするようにしよう.

今週は水曜日が休みらしいのでもう少しいじって,木曜か金曜に最新版を公開する予定.

2010-11-01

月曜日は眠い.

Android Marketのエラーレポート便利だな.

いままでは面倒なのでアプリケーションが落ちても送信してなかったのだけど, 開発してる側からするとデバッグがとても楽になるので,今度からは送信しよう.