Angelos の中の人に会ってきた!

| No Comments | No TrackBacks
 

Angelos の偉大なる開発者である dann さんが、GW を利用した休暇で沖縄に遊びに来るというので、manko.pm #001 ヴ を開催させていただきました。

dann さんとお会いするにあたり、何かサプライズ的なものを用意したいと思っていました。前日くらいに IRC のとあるチャンネルで何かないかと聞いたところ、lyokato さんより、画用紙に「ヴ」を書いて掲げるというアイディアをいただきました。当日、近くのダイソーで画用紙とマジックを買って、実際に「ヴ」を掲げてみました。「ヴ」のおかげで、はぐれることなく無事お会いすることが出来たのでよかったです。

感想

dann さんもエントリで書かれているように、普段から IRC で会話をしているので、物理的には初対面なのに、感覚としては初対面ではないという不思議な感覚でした。

一つだけ心残りなのは、「Angelooooooooooooos!」と一緒に連呼してもらうのをすっかり忘れていたことです。今後の manko.pm でぜひオ願いします。

短い時間でしたが、dann さんのアツいお話を色々聞かせていただくことができました。今すぐではないけれど、3 年後、5 年後も視野に入れて何か面白いコラボレーションをできたらいいなぁと強く思いました。

dann さん、今回は声をかけていただいて、ありがとうございました!

see also

 

NBC でやってるドラマ Chuck が、ひじょーに awesome です。

ドラマのスタートは、

チャックは家電量販店BUYMOREの情報家電部門NERDHERDで働くオタク青年。

過去に彼はスタンフォード大学で学んでいたがルームメイトで親友でもあったブライス・ラークリンの裏切り行為により大学を退学させられてしまう。

現在のチャックは親友に裏切られた心の傷を抱きながらも同じ店で販売員として働くモーガン、同居している姉のエリーエリーのボーイフレンドのキャプテンと共にまったりとした日常を過ごしていた。

チャックの誕生日パーティーの夜、ブライスから久々にメールが届く。ブライスは政府情報機関の極秘情報を全て盗み政府機関に処刑される寸前にチャックに暗号化されたデータを送ったのだ。知らずにメールを開いたチャックは膨大な情報量のサブリミナル画像を強制的に見せられ気絶してしまう。

http://mamono.2ch.net/test/read.cgi/tv2/1195257823/

という感じで、スパイアクションモノです。

チャック・バトアスキー(Zachary Levi)の頭の中に全機密情報がインプットされてしまったので、サラ・ウォーカー(Yvonne Strahovski)とジョン・ケイシー(Adam Baldwin)がチャックを保護する任務につきます。この保護で、チャックはスパイとして活動しながら、今まで通りの生活を送り始めます。この 3 人の関わり合いがぼくは面白いです。チャックが作戦現場で起こすドタバタであったり、チャックとサラの感情の揺れ動きあったり、その他チャックの勤務先での不思議な人間関係があったりと、コミカルなスパイアクションという感じで一度見始めると止まらなくなるドラマです。

そんな awesome なドラマなんですが、日本語字幕付きで流通してるのは、ターミネーター:サラ・コナー クロニクルズ レンタル DVD の 5 枚目に入っている第1話のみで、日本の amazon にある Chuck - Complete First Season (4pc) (Ws Sub Ac3) には残念ながら日本語字幕が付いてないです。

リンク

US からの接続であれば、The WB で Season 1 が、NBC.com で Season 2 が見れます。

なんとかすれば日本からも見れるので、そこらのあらすじサイトを参考に、ぜひわくわくしてください!

携帯向け将棋棋譜サイトを作った

| No Comments | No TrackBacks
 

最近なんとなく将棋を始めたいなぁと思って、いろんなサイトを見ていました。

PC 向けだと、"Kifu for Windows" があり、それの flash 版、Java applet 版が主催団体などにも貼られています。

ケータイ向けの便利ソフトとしては kif2swf があるのみで、いろいろまとまったデータを閲覧するのは手間がかかる印象を受けました。

そこで、自動更新型のサイト 携帯向け将棋棋譜サイト - kifu::woremacx を作りました。

やっていることは、適当な間隔で Web をスクレイピングして棋譜データを取得し、解釈し、盤に並べ、kif2swf にデータを埋め込んで、swf を作り直して公開するという簡単なお仕事です。

今のところ UTF-8 のみの出力で、スクレイピング先が 2ch 限定とあまりやる気がない状態だったりしますが、ぼちぼち広げていきたいと思います。

どうぞご利用ください。

kifu::woremacx

関連サイト一覧

あけましておめでとうございます

| No Comments | No TrackBacks
 

あまけしておでめとうございます。

さて、はてなブックマークをチェックしていると、未だにこのブログの古い記事を参考にしていただいていることがあるようです。参考にしていただいたりブックマークしていただけるのは非常にうれしいですが、どんな分野においても進歩が速く、情報はすぐに陳腐化していきます。

そこで、うちのブログの古い記事に到達した場合には、情報が古いことを表示することにしました。どのくらいの基準でやろうかと迷いましたが、1ヶ月経過したら古い情報であることにしました。

しくみとしては、たぶん MT 4 から導入されたと思われる relative=js をまねして拡張することで対応しました。個別エントリのテンプレートに <$MTEntryDate format="%x %X" relative="js"$> と書かれているあれです。

ということで、今年も woremacx をよろしくお願いいたします。

XMind が使いやすくて良い

| No Comments | No TrackBacks
 

主に文章をデジタルデータとして管理する場合、多種多様な方法があり、個々人で慣れた親しんだ環境があるかと思います。

今日は、依存関係のある大量の文章を扱う場面で、全体の構造を把握しながら長文ノートを残しておきたくなり、ちょっと困ってしまいました。

ぼくの場合、扱う対象の全体の構造を、頭の中で明確に再現できるほど理解が深まっている場合だと、テキストファイル系でも平気です。ベタテキストや yaml 的なテキストで書き散らかして、あとで grep するかんじですね。しかし、理解度が乏しい場合、テキストファイルに全部突っ込んでると何が何やらわからなくなります。

今回は、何が何やらわからなくなっている状況なので、自分が取り組んでいることを整理するためツールが欲しくなりました。紙と鉛筆最強なんですが、それは見づらさと消しゴムの大量消費の観点から好きではありません。現代的なマインドマップ、そして、ツリー的に全体像を把握できつつ、各エレメントに長文ノートを残しておける環境が望む環境です。#vagina の皆さんに聞いたり、色々ぐぐったりして、ようやく XMind というマインドマップツールにたどりつきました。

データファイルは、zip でつつまれた xml です。xml なので、大量に入力することがあれば、ちょっとしたコンバータを書いてやればカンタンに取り込めそうです。

今日はほんと良いツールにたどり着きました。開発者の皆さんありがとう。

 

はてなブックマーク - 「テープ起こし」を手助けするスクリプトを perl で作ってみる - blog.woremacx.com より

imo758 さん: キー判定は抽象化してカスタマイズが楽になってるとなお良かったかも

http://b.hatena.ne.jp/imo758/20081116#bookmark-10849858

asakura-t さん:「Okoshiyasu2」あたりを使ったほうがいいと思うんだ。 http://www12.plala.or.jp/mojo/Oko1.html

http://b.hatena.ne.jp/asakura-t/20081117#bookmark-10849858

とのコメントを頂きました。ありがとうございます。

今回このスクリプトを作るまでに至ったぼくの行動を書いておきたいと思います。

foobar2000 期

出先でネットに繋がってないときに、テープ起こしする必要がありました。

ぼくのノートパソコンには Windows Media Player と foobar2000 しか使えるソフトが入ってませんでした。

foobar2000 で、C-a/s/d/f に逆方向シーク、 C-j/k/l/; に順方向シークをそれぞれ移動量を変えて割り当てて使ってみました。そうすることにより、キーボードから手を放すことなく自由に移動でき、良い感じだと思いました。

その場はなんとか無事に終わりました。

ソフト開拓期

今回またテープ起こしするときに、なんかいいソフトが一応調べてみることにしました。

ぐぐって出てきた記事(ITmedia Biz.ID:「テープ起こし」に特化した再生ソフト)を見て、Okoshiyasu2 は試してみました。

  • Okoshiyasu2 の良い点
    • グローバルにキーボードを乗っ取ってくれるのは、Alt-Tab しなくていいので非常に良い。
  • 変な環境に慣れてしまったので物足りない点
    • 移動量の違うシーク 4 種類で慣れてしまっているので物足りない。

作ったらいいんじゃね期

  • 今回使った古い系の foobar2000 は、Ctrl なしでホットキーを割り当てれることが判明しました。(現行系でも設定すれば出来るのかもしれないけど、やり方がわかりません>_<)
  • perl のコンソールアプリとして作ってしまってもいいかもわからんね、と思いました。
  • どうせならシークしたポイントから常時 A-B リピートするモードがあっても良いね、とひらめきました。

常時 A-B リピートは、非常にお気に入りです。

だめなところ

  • 今のところ、Athlon64 X2 3800+ なマシンで常時 20% くらい CPU 食ってる出来の悪い子です。ループの構成が悪いと思います。バッテリー駆動してるマシンだと酷いことになると思いますw
  • ご指摘があったとおり、設定周りをベタ書きしているので、カスタマイズが容易ではないです。
  • ボリュームコントロール/ミュートがありません。
  • 一時停止すら実装してません。

だめなところは、そのうち気が向いたら直していけたらいいなと思います。

 

ボイスレコーダーで 2 時間とか録音したのはいいけど、これどうやってテキストデータにするの?という事態が勃発しました。キーボードにシーク動作とか割り当てて、自動リピートとかあれば便利だなぁと思い、perl で書いてみました。

Alt + Tab で他のウィンドと行き来したあとで、全くキーを受け取らなくなる現象があってハマリました。GetEvents で入力があるか確認してから Input で入力内容を得るとハマらずに済みます。シーク時に Win32::MediaPlayer まわりに与える時間は ms に直して渡しました。

「テープ起こし」に関するブックマークコメントより - blog.woremacx.com について関連エントリを書きました

今回のスクリプトのコンセプト

  • 自動的に A-B リピートになる
  • 4 種類の移動量でシークできる
  • perl で書いてあるため、perl の環境さえ入っていれば容易に改造できる

使い方

開くファイルをスクリプトの引数として起動します。起動したら、勝手に 10 秒リピートになっています。

  • q: 終了
  • j: 5 秒後
  • k: 10 秒後
  • l: 30 秒後
  • ;: 5 分後
  • f: 5 秒前
  • d: 10 秒前
  • s: 30 秒前
  • a: 5 分前
  • t: リピートするかのトグル
  • u: リピート秒数--
  • i: リピート秒数++

コード

coderepos にもうpしました repeat-audio-player.pl

#!/usr/bin/perl

use strict;
use warnings;

use threads;
use Thread::Queue;
use Win32::Console;
use Win32::MediaPlayer;
use Time::HiRes ();

sub keywatcher {
    my ($queue) = shift;

    my $console = new Win32::Console(STD_INPUT_HANDLE);
    $console->Mode(ENABLE_PROCESSED_INPUT);

    #     my $mode = $console->Mode();
    #     print "ENABLE_LINE_INPUT\n" if $mode & ENABLE_LINE_INPUT;
    #     print "ENABLE_ECHO_INPUT\n" if $mode & ENABLE_ECHO_INPUT;
    #     print "ENABLE_PROCESSED_INPUT\n" if $mode & ENABLE_PROCESSED_INPUT;
    #     print "ENABLE_WINDOW_INPUT\n" if $mode & ENABLE_WINDOW_INPUT;

    while (1) {
        while ($console->GetEvents) {
            my @event = $console->Input;
            # 0: event type: 1 for keyboard
            # 1: key down: TRUE if the key is being pressed, FALSE if the key is being released
            # 2: repeat count: the number of times the key is being held down
            # 3: virtual keycode: the virtual key code of the key
            # 4: virtual scancode: the virtual scan code of the key
            # 5: char: the ASCII code of the character (if the key is a character key, 0 otherwise)
            # 6: control key state: the state of the control keys (SHIFTs, CTRLs, ALTs, etc.)

            next unless $event[1];

            my $c = lc(chr($event[5]));
            $queue->enqueue($c);
            return 0 if $c eq 'q';
        }
    }

    return 0;
}

sub worker {
    my ($queue, $file) = @_;

    my $wp = Win32::MediaPlayer->new;
    $wp->load($file) or die;
    $wp->play;

    my $state = {
        mute => 0,
        playing => 1,
        pos => 0,
        len => res_to_sec($wp->length(0)),
        base => 0,
        repeat => 1,
        repeat_dur => 10,
    };

    my %keymap = (
        j => 5,
        k => 10,
        l => 30,
        ';' => 300,
        f => -5,
        d => -10,
        s => -30,
        a => -300,
    );

    printf "repeats each %d secs\n", $state->{repeat_dur};
    my $console = new Win32::Console(STD_OUTPUT_HANDLE);
    my $seek = 0;
    while (1) {
        $state->{len} = res_to_sec($wp->length(0));
        $state->{pos} = res_to_sec($wp->pos(0));

        if ($seek) {
            $wp->pause;
            $wp->seek($state->{base} * 1000);
            $wp->resume;
            $seek = 0;
            next;
        }

        my $buf = sprintf "%s / %s\r", sec_to_hms($state->{pos}), sec_to_hms($state->{len});
        $console->Write($buf);
        Time::HiRes::sleep(0.5);

        my $repeat_state = sub {
            printf "\n";
            printf "repeat %s\n", $state->{repeat} ? "on" : "off";
            printf "repeats each %d secs\n", $state->{repeat_dur} if $state->{repeat};
        };

        if ($state->{repeat} &&
            $state->{pos} >= ($state->{base} + $state->{repeat_dur})) {
            $seek++;
        }

        while ($queue->pending) {
            my $c = $queue->dequeue;

            if (defined($keymap{$c})) {
                unless ($state->{repeat}) {
                    $state->{base} = $state->{pos};
                }
                $state->{base} += $keymap{$c};
                $seek++;
            } elsif ($c eq 't') {
                $state->{repeat} = $state->{repeat} ? 0 : 1;
                $repeat_state->();
            } elsif ($c eq 'r') {
                $repeat_state->();
            } elsif ($c eq 'u') {
                $state->{repeat_dur}--;
                $state->{repeat_dur} = 1 if $state->{repeat_dur} < 1;
                $repeat_state->();
            } elsif ($c eq 'i') {
                $state->{repeat_dur}++;
                $repeat_state->();
            } elsif ($c eq 'p') {
                $seek++;
            }

            return 0 if $c eq 'q';
        }
    }

    return 0;
}

sub main {
    my $file = shift(@ARGV);
    die unless $file;

    my $queue = new Thread::Queue;
    my $t1 = threads->new(\&keywatcher, $queue);
    my $t2 = threads->new(\&worker, $queue, $file);
    $t1->join;
    $t2->join;

    print "done.\n";
}

main;

sub res_to_sec {
    my $param = shift;
    return int($param/1000);
}

sub res_to_hms {
    my $param = shift;
    return sec_to_hms(res_to_sec($param));
}

sub sec_to_hms {
    my $total = shift;

    my $sec = $total % 60;
    my $min = ($total - $sec) / 60;
    my $hour = int($min / 60);
    $min = $min % 60;

    return sprintf "%02d:%02d:%02d", $hour, $min, $sec;
}

sub sec_to_ms {
    my $total = shift;

    my $sec = $total % 60;
    my $min = ($total - $sec) / 60;

    return sprintf "%02d:%02d", $min, $sec;
}
OLYMPUS Voice-Trek V-61
OLYMPUS Voice-Trek V-61
posted with amazlet at 08.11.16
オリンパス (2007-03-23)
売り上げランキング: 283
おすすめ度の平均: 4.5
4 いろいろ使えます。
5 ライブの録音・再生に大活躍
OLYMPUS ICレコーダー Voice-Trek DS-60
オリンパス (2007-09-14)
売り上げランキング: 1822
おすすめ度の平均: 5.0
5 音楽用にも
5 買うならコレ
5 値段にはわけがある
5 クリアーな音質です

perl で Text::PukiWiki を書いてます

| No Comments | No TrackBacks
 

PukiWiki の convert_html.php を perl のモジュールとして使えるよう移植しはじめました。

まだちゃんと動くわけではなくて、なんとか perl で動くようにしただけの状態です。

VaginaRepos でひっそりやってましたが、飽きてフェードアウトする可能性が高くなったので晒しました。

当面やることといえば

  • 各モジュール間のパラメータの渡し方を直す
  • 基本テスト
  • 基本プラグイン

という感じです。

PukiWiki にない機能の追加などを考えている方がいらっしゃれば、ブランチを切ってからやってもらえるとうれしいです。

 

家でヒマしてるときにやることを管理する用の TODO リストが欲しくなったので、久しぶりに RTM 自体を使い始めた。

GmailにGadget機能――Remember The Milkも組み込み可能に という記事を見つけたので、こちらを試してみることにした。

結論としては、au の携帯からの入力と Firefox アドオンを併用しようと思う。

Firefox アドオン

http://data.tumblr.com/2uIDsGkn2g6380euzTx1b3iTo1_500.png

Set task view here から、label とか選べる。

個人的に RTM の画面は好きではないのが、このアドオンは使いやすい。

Google apps for domain でも表示されるので良い。

ガジェット

http://data.tumblr.com/2uIDsGkn2g636w9puOKvQAmGo1_500.png

ラベルを選ぶには、設定からやらないといけない。

ケータイ向けの画面からすると、ひどく制限されている印象。

ケータイ向けの画面をガジェットにしてくれてもよかったかもしれないと思った。

ぼくのドメインの Google apps for domain では labs が使えないので残念。

昔の広末涼子はすごかった

| No Comments | No TrackBacks
 

昔の広末涼子はすごかった:アルファルファモザイク

うん。ほんと昔の広末涼子はすごかった。ビーチボーイズとかちゃんとビデオに撮ってみてた。

そんな昔の広末涼子が懐かしくなってライブビデオ買ったよ!

150 円とかなのでお買い得だよ!VHS なので、買うときはレンタル上がりは避けてね!

広末涼子ファーストライヴ~RH DEBUT TOUR 1999
広末涼子
ダブリューイーエー・ジャパン (1999-05-26)
売り上げランキング: 59110

オススメ

Find recent content on the main index or look in the archives to find all content.

Recent Assets

  • rails-pdf.png
  • tenga.jpg

Categories

Pages

Powered by Movable Type 4.21-en