These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんにちは♪ 現在は3月29日(金)17時51分。 今日も一日、お疲れさまです。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2009年08月 来月
1
02 3 04 5 06 07 08
09 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2009年08月02日(日)

Flash SWF spec 和訳開始

土日風邪で倒れて何も出来ずに悔しかったので、 flash fileformat specification (SWF の仕様書)の和訳を始めてみました。 そもそも、 この手の開発をする人は普通に英語が読めるので需要はなさそうですが、 自分の理解を確認する為に…
自分の知りたい所が分かれば満足なので多分コンプリートしません。(ダメ宣言)

2009年08月04日(火)

Skype PHP Bot

↑これの続き
github で複数ファイルを一度に pull request する仕方が よく分からないので、とりあえずここで叫んでみるテスト。

Skype API wrapper class に付属する plug-in の log を使うと 以下のようなファイルが出来ますが、 このファイルが当初よく分かりませんでした。
yoya_awm-ffxxxxxxxxxxxx1d.20081205.log
yoya_bot-yoya_awm-27xxxxxxxxxxxx05.20090506.log
yoya_awm-yoya_bot-e1xxxxxxxxxxxx9d.20090506.log
※ 念の為、x は隠してます。
ぱっと見、発言したユーザと一致していたので、 ユーザ毎に切り出しているのかと勘違いしたのですが、
よくよく見ると他の人の発言も入っていて、コードを読みつつ 以下のように理解しました。
- グループチャットで一人で作成した場合は
 => <user_id>-<id_something>..log
- 特定の人にチャットしたり、そこに人を呼んで増やしたりした場合は、
 => <user_id_1>-<user_id_2>-<id_something>..log
これを <chat_group_label>.<date>.log にすれば、 ピンと来るかなと以下のように改造してみました。

改造内容:

まずは呼び出し側。 <user_id>-<id_something> => ファイル名の対応表を作って、 bot のインスタンスにパラメータとして渡す。
$files = array(
    'yoya_awm-yoya_bot-c7xxxxxxxxxxxxd2' => 'yoya_bot',
);

$bot->loadPlugin(
    "log",
    array(
        'dir'               => '/home/yoya/log/skype',
        'files'             => $files,
        'chat_topic_filter' => null,
        'chat_id_filter'    => null,
        ));
でもって、Skype/Bot/Plugin/Log.php は以下のように処理。 __construct でパラメータチェックしつつ受け取る。
        $this->files = $parameter['files'];
    } else {
        $this->files = array();
    }
_append で $chat_id からファイル名を作る所に細工。
    if (isset($this->files[$chat_id])) {
        $chat_id = $this->files[$chat_id];
    }

実行結果:

% cat yoya_bot.20090805.log
2009/08/05 00:00:26     [SAID]  よや(yoya_awm)  うーうー</blockquote>
\(^O^)/ どうでしょうね。> 誰と無く。 ↑一応、改変した Log.php を晒してみたり…

2009年08月06日(木)

Ruby お勉強開始 (文字列をchar配列のように使いたい)

今日から Ruby の勉強を開始しました。
早速手始めに、BitIO class を作ろうとして、 データ配列(とりあえず String を使ってみた。Array は冗長っぽいので) から特定の文字をアスキー値で抜き出す所ではまり中。
公式マニュアルの文字列の説明だと
    self[nth]
    nth 番目のバイトを整数(文字コード)で返します

    p 'bar'[2] # => 114
なんだけど、実際に試すと。
    #! /usr/bin/ruby

    $s = "foobaa"
    $c = $s[0]

    p $s
    p $c
    "foobaa"
    "f"
何故か、数値じゃなくて(1文字の)文字列が出てきます。
実際、$c >> 8 とかすると文字列でシフトするなって怒られる。

うーむ。謎。
文字列リテラルの罠かもと疑って
    $s = String::new("foobaa");
したけど変わらず。
そもそも、やり方が間違えている気もするので、 File::getc 辺りの実装を覗いてみますか…

version の問題でした:

ruby 1.8.5 だと、
"foobaa"
102
となります。 自分使ってるの 1.9.1p129 なもので…
てな訳で 1.9 で新設された .ord メソッドで解決です。 m師匠に感謝。

メモ。:

ちゃんと、こっちのマニュアル読もう。

2009年08月07日(金)

Ruby で each 実装

each ブロックの実装楽しい。
def each
  @data.each_byte {
    |byte|
    (0..7).each {
      |bit_offset|
      bit =  (byte >> (7 - bit_offset)) & 1
      yield(bit)
    }
  }
end
class に↑こう書いておくだけで、
$io.each {
  |b|
  printf("%d", b)
}
こんな風に 1 bit ずつ each で回せる。うーむw

ord の問題:

ついでに、ord の問題も、 Rubyのバージョンで分岐させて 1.8 でも動くようにしてみた。
if RUBY_VERSION >= '1.9.0' # >_<;
  byte = @data[byte_offset].ord
else
  byte = @data[byte_offset]
end

2の補数:

n bit 取るメソッドで負の値も扱えるようにしてみた。
def get_bits_signed!(bit_width)
  bits = get_bits!(bit_width)
  sig_b = 1 << (bit_width - 1)
  if (bits & sig_b) # negaive
    bit_mask = (sig_b << 1) - 1
    bits = bits ^ bit_mask; # bit reverse
    bits = - (bits + 1)
  end
  bits
end
例えば、11bitなんだけど符号ありみたいな、 変態的なバイナリフォーマットを処理する時に必要。

プログラム:


2009年08月08日(土)

勉強会@富士山頂 (1日目)

↑このイベントに参加してきました。

富士山へ移動:

新富士駅経由で行きました。
五合目行きバス停前にいたら、 外国人様御一行様&大きなテレビカメラに脚立もった日本人三人組が並んできました。

カメラの前で Mount Fuji No 1! とか叫んでました。
あのノリには敗北感を禁じ得ませんw

五合目 (富士宮コース):

集合時間より着くのが早すぎたので、ぶらぶらと時間潰し。

ジュースのペットボトルが300円とか、 ご飯が安いと思ったら量が少ないとか、なにもかも高いです。(;´・`)

登山開始:

登り始めた途端に汗が吹き出て、体が重たかったので、ペースを遅目にして貰いましたが *1 、これ、登山病の兆候だったらしく、ペースを落として正解だったようです。

(とはいえ休憩時間込みで5時間で九合目なので一般的には速いペース)

九合目:

九合目について山小屋で二時間ほど寝たら体調も回復しました。 体が慣れた感じ。

逆に回りの人達が朝つらそうで酸素缶で吸入してました。 自分も今度から常備しようと思います。
さて今から寝て、1時過ぎに出発予定
御来迎が見られますように。

*1: 単純に着いてくのが遅れて待ってもらう事が多かっただけですが。(´д`)

2009年08月09日(日)

勉強会@富士山頂 (2日目)

九合目で夜風にあたる:

深夜1時起き予定でしたが、23時に目が醒めてしまったので外で夜風にあたってます。 既に小屋の外には出発する人達でいっぱい。
満月で澄み切った空気。一杯やれると気持ちよさそうですねぇ
体が冷えたら山小屋にもどって暖炉であったまったり。

富士山頂 ご来光:

いっぱいひとがいて 陣地の取り合いになってます(´~`;)
曇っていてお日様が殆ど見えませんでしたが、 これはこれで、なかなかドラスティックでした。

1枚目は光の行列。 (ピンボケして分かりにくいですが、7,8号目辺りまで続いてました)
2枚目はお日様どこだー。と探しているとこ。
そして、3枚目の真ん中の雲からわずかにお日様が見えていた。 …と思います。(自身無し)

お鉢周り:

火口をぐるっと一回り。人が沢山いました。

標高の一番高いところで勉強会実施。ラムダがどうとかアジャイルがどうとか、その辺の話をしてました。
うーむ。今度はついていけるように勉強しよう。( ̄― ̄;)

くだり:

下りは膝を壊さないように、休憩を大目にとりつつ、 ゆっくり降りたので、膝の痛みもなし。よしよし。

UV 対策重要:

…全体的にうまく進んで、無事に下山できたのですが、
日焼け止めを塗り忘れたり黒い手袋で熱してたりの影響で顔と手が真っ赤になり、
ヤケドみたいな状態になってました。病院に行こう… ○| ̄|_

2009年08月13日(木)

Ruby で SWF 解析始めてみた

とりあえず、ヘッダだけ。

プログラム:

require 'SWF.rb'

data = IO.read("/home/yoya/flash/ffxi2.swf")
swf = SWF.new(data.force_encoding("BINARY"));
swf.dump()
※ force_encoding しないと UTF-8列だと思われるので、 UTF-8 的にイリーガルなデータが処理できなくなるという。

結果:

Signature=FWS Version=4 FileLength=351150
RECT: (-1639, -1639)-(-1127, -1257)
FrameRate=15 FrameCount=40
ヘッダ解析成功。

引数って?:

C や PHP でいう argv ってどうやって受け取るんだろう。(ソコカラカ的
もう時間ないので、調べるのは明日で。

2009年08月15日(土)

お墓参り

いつもはパステルカラーの花を添えてますが、(故人がそういうの好きだったので)
今はお盆の時期なので、控えめな色の花を添えました。
お盆だからか周りのお墓にも花が飾ってあって、 しかも、ちょっと豪華さで負けてる感じ。
後でグレードアップしとこう。

Skype 重たすぎ

自宅サーバが重たいので、top を実行してみたら、
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5802 yoya      17   0  805m 610m 3648 R  0.3 61.0 242:53.69 skype
自宅で Skype ボット実験用に動かしている Skype for Linux がやんちゃしてる模様。
止めよう…

2009年08月17日(月)

Ruby で SWF 分解してみた

何となくバラせました。
Signature=FWS Version=4 FileLength=2704
RECT: (bits=14) (0, 0) - (240, 240)
FrameRate=8.0 FrameCount=40
Type=9 Length=3
Type=1 Length=0
	<略>
Type=1 Length=0
Type=0 Length=0

ハマりどころ:

a = 0
if (a)
  p true
else
  p false
end
実行結果
true
うわーぃw

もひとつハマリ:

c = 1 + 1/2
p c
実行結果
1
うははーいw

2009年08月18日(火)

Ruby でクラス継承

SWF は Header とそれに続く沢山の Tag で構成されている。
| Header | Tag1 | Tag2 | ... | Tag(End) |
Tag はコンテンツの種類(画像なのか音声なのか文字なのか。とか)毎に 中身(のデータ構造)が異なるので、Tag を継承させて Tag_DefineBitsJPEG とか Tag_DefineSound みたいに実装していきたい。
てな訳で、クラス継承のお勉強。

出来たもの:

Signature=FWS Version=4 FileLength=2704
RECT: (bits=14) (0, 0) - (240, 240)
FrameRate=8.0 FrameCount=40
Type=9(Unknown) Length=3
<略>
Type=1(Unknown) Length=0
Type=0(End) Length=0
それっぽく出来た。

クラス継承の仕方:

class SWF_Tag
end

class SWF_Tag_End < SWF_Tag
  def initialize(bit_in, length)
    @Content = bit_in.get_string!(length)
  end
end
Foo_Baa < Foo という記法で OK

クラス名の文字列からクラスを作る:

class Foo
  def initialize(foo)
  end
end

className = "Foo"
foo = <コンストラクタに渡したい適当な値>
klass = Object.instance_eval("#{className}.new(foo)")
こんな感じ。

2009年08月22日(土)

祭りで演奏


久々にシンバルぶっぱなしてストレス解消。
日差しが厳しかったので日焼けが心配かな…

今日の指摘事項:

  • 裏拍のハイハット閉じは譜面に書いてなくても空気読んで入れる
  • ハイハットの角度を変えるネジがあるので、納得いく音になるまで調整する
  • fill in でのトムトムのバリエーション
  • 打面の高さをどう揃えるか説明
  • ベードラペダルの足の裏の力の入れ方
  • ブラシの使い方
  • Rim-Shot の色々
  • ボンゴの色々 (主に open/close)
ポップスだったのでドラムばかり。

2009年08月23日(日)

バーベキュー@高田橋

今日も朝から車の練習で16号線を北上。
ようやく多摩川を越える事に成功。
満足したので奥多摩街道沿いに戻り。

吹奏楽部の集まりでバーベキューをやるとの話をちらっと聞いていたので、
もしかしているかなと、川に寄って岸辺を歩いた所、みんなを発見。

料理を手伝ったり、その辺ぶらついて話したり、普通に混ざってみた。
けど。川に飛び込むのだけは諦めたw 高校生のエネルギーには勝てません。
ふと、今月アウトドア禁止にしてたのを思い出し、 両手をみたらいつのまにか真っ赤。
途中で挨拶して抜けて帰宅し、 両手をアイスノンで冷やしてます。← 今ココ
20人位の大所帯でした。
久々に賑やかな集まりに参加できて楽しかったです。

2009年08月25日(火)

yum で TypeError: unsubscriptable ob

dev# yum upgrade
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * updates: ftp.yz.yamagata-u.ac.jp
	<略>
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 94, in _read_db_obj
    setattr(self, item, _share_data(db_obj[item]))
TypeError: unsubscriptable ob
前にも似た事があったような。。。
# yum clean metadata
Loaded plugins: fastestmirror
21 metadata files removed
8 sqlite files removed
0 metadata files remove
# yum upgrade
	<略>
Total download size: ?? M
Is this ok [y/N]:
ふむ。Ok

参考:


2009年08月26日(水)

OpenSocial勉強会見てきた

時節柄、mixi アプリの話が多かったのですが、
感想としては、今の所評判は微妙な所があるけど、 定量的に見ると、悲観するようなスタートじゃないね。
でも、バラ色かといえばそうでない要因もあるよね。
みたいな所でしょうか。

とりあえず、個人的に遊ぶのが吉のようです。

これで、14 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project