■ 開発日記 巻之六拾


OSTRA / Takeshi Yoneki


 Ubuntu 14.04のEmacsは24なのだが、困ったことにcopy-region-as-kill-nomarkが無くなってしまった。ググると自分のページが見つかる。Emacs 21にcopy-region-as-kill-nomarkが無いから云々というハナシ。しかたがないのでcopy-region-as-killで置き換える。なんでこんなことになったかは後で調べよう。


2014.05.12


 『遠隔操作ウイルス事件の真犯人名乗る「小保方銃蔵」からのメール、落合弁護士などに届く』(http://www.itmedia.co.jp/news/articles/1405/16/news119.html)

 ITmediaのニュースの配信は16時頃。朝日・毎日・読売のニュース配信は22時頃。記者クラブの弊害ってやつ? 警察の意向を確認して皆足を揃えるのに6時間も掛かったってことなんだろうか。


2014.05.16


 YOMIURI ONLINE(読売新聞)のRSSがなくなってしまった。毎日新聞に続いて読売新聞もRSSでは読めなくなってしまった。関係あるかはわからないが「読売ニュースリーダー」という公式AndroidアプリがGoogle Play Storeにない。そもそも存在したのかは分からないが、例えばXperiaのアプリ紹介サイトでお勧めされてたりするので(http://sonyselect.sonymobile.jp/pc/ag/index.php?page=cate&cid=9&id=1080)、以前にはあったのだろう。対応OSがAndroid 1.6なので、RSSがどうしたとか無関係に破棄されたプロダクトだとは思うが。ネットの世界はこんなんばっか。


2014.05.20


 VAIO Pro 11をWindows 8.1で使っているときにスリープさせると電源ボタンのランプが消える。Ubuntuで使ってるときはオレンジ色の点滅になる。Windowsでのスリープと電源オフが判別できないのが問題。調べるとWindowsでも設定でオレンジ色の点滅になるそうだ。

[コントロールパネル - VAIOの設定 - 電源・バッテリー - バッテリー低下時の動作] をOffにする。こんなの分かるか。きっとバグなんだろう。


2014.05.22


 コミスケ3はスクリーンキャプチャして電子書籍を画像PDFなどにするWindowsソフトウェア。多分。コミスケ3を販売していたインターナルの社長が逮捕されて、日本電子出版協会(JEPA)による見解が発表された(『DRM回避は「電子書籍のコストを増大させる」 日本電子出版協会が“コミスケ事件”にコメント』http://www.itmedia.co.jp/news/articles/1405/28/news132.html)。逮捕時の記事はこちら(『電子書籍コピーソフト製造で初逮捕 DMMのコピー制限解除する「コミスケ3」』http://www.itmedia.co.jp/news/articles/1402/20/news045.html)。

 DMM.comの電子書籍ということはあの悪名高きサイファー・テック株式会社のコピープロテクトだということだ(『「BookLive!」の電子書籍リーダーでWindowsがフリーズ DRM技術に問題』http://www.itmedia.co.jp/news/articles/1401/17/news051.html)。Windowsからアンインストール不可能で、システムを強烈に不安定にするコピープロテクト技術。やってることはゲーム向けで評判の悪いnProtectなどと似たようなものだろう。なるべくならこんなものとはお近づきになりたくない。BookLive!とDMM.comが採用していることが知られている(http://www.cyphertec.co.jp/news/cymon_help.html)。

 という状況でJEPAの偉そうな発表を読むと溜息しか出ない。JEPAはサイファー・テック株式会社のソフトウェアでユーザのPC環境を破壊することをやむを得ないあるいは当然だと考えているという意味だ。こんなこと立場を明らかにしなくても良いのに、ユーザに対する不誠実さを棚に上げてる点で、とても素直に賛同なんてできやしない。こういう馬鹿なコピープロテクトを止めるのが先だろうに。俺の勤務先もJEPA会員社。サイファー・テック株式会社も会員社。

 そういえばJEPAからのメールが結構な頻度で来るので自動的にどこか目に留まらないところに自動分類しようっと。『Subject: JEPA「電子出版物の不正コピープログラム摘発に関する日本電子出版協会の見解」を公開』というようなメールもあるから止めることもなかろう。


2014.05.29


 「A・Iが止まらない」(赤松健)とか初期の「行け!!南国アイスホッケー部」(久米田康治)とか初期の「封神演義」(藤崎竜)とか「地獄先生ぬ〜べ〜」(岡野剛)など、90年代に流行した絵柄ってのが何かしら窺えるというか共通の何かがある。きっともっと多くの漫画作品がこの絵柄の傾向を持っているのだろうと考えられるが、生憎90年代は私の人生で最も漫画を読まなかった時期でもある。「魔法先生ネギま!」(赤松健)がこの絵柄の延長にあって、一番変化が少ないが、「霊媒師いずな」(岡野剛)や「屍鬼」(藤崎竜)はまだしも「さよなら絶望先生」(久米田康治)なんかは当時の絵柄の片鱗も残ってない。アニメでは「おねがいティーチャー」に感じる絵柄の傾向。元祖は誰なんだろう。美樹本晴彦が影響の一部は与えてるんじゃないかとは思うが、美樹本の絵柄の流行の更に後なんだとも思う。邪推。

 単に当時のオタ向けの流行の絵ではあるんだろう。美樹本晴彦やとりみきやゆうきまさみなど色々なオタ向け絵柄が融合した何か。さすがにもう永井豪や石ノ森章太郎や松本零士や吾妻ひでおの直接の影響は感じない。


2014.05.29


 『ヤマダ電機の電子書籍ストアが閉鎖へ、返金や引き継ぎも実施せず』(http://internet.watch.impress.co.jp/docs/news/20140529_650918.html)

 さすがはヤマダ電機、無責任さでは群を抜く。JEPAさん、こういう現実の方をなんとかしようよ。『電子出版普及のために大きな妨げになります』そのものだよ。


2014.05.29


 『ヤマダ電機、購入書籍を新ストアでも閲覧できるよう調整 ポイント残額はヤマダポイントで返還』(http://www.itmedia.co.jp/news/articles/1405/29/news171.html)

 ITmediaに報道され、スラドでもトピにされてしまったせいなのかいきなり方針転換。「ご案内の内容に一部記載不備があったことにより、既存ユーザー様に誤解を生じさせてしまい、ご迷惑をおかけいたしましたことを深くお詫び申し上げます」だそうだ。誤解? 誤解するポイントは一切無かった。方針転換を方針転換と表現できないのは何故?


2014.05.30


 長らくスニーカーネット用に使ってた8GBのUSBメモリがどうもデータエラーっぽい(データ化けが発生する)ので新しいのを買って来た。同じバッファローの似たUSBメモリ。今度は16GB。これも使い潰す予定。


2014.05.30


すごいHaskellたのしく学ぼう!(Miran Lipovaca著、田中英行訳、村主崇行訳)

 通称「すごいH本」。嘘だと思うならググってみなされ。とりあえず読んではみたがとでもHaskellで何かプログラムが書けそうな気分にならない。一点嬉しかったのはカリー化のカリーが人名だって判ったこと。Scala本で何の前提もなくカリー化と出てきてナンノコッチャと印度カレーを想像してた私です。パラメタと関数の混ざり具合がカレーなんだろうかとか、まだ言うか。

 手始めにカレントディレクトリ以下にあるmp3ファイルの数を数えるプログラムを書いてみる。かなり苦労する。IOの扱いのノウハウはこの本では得られないからだが、実用的なプログラムは必ずIOがあるって点が弱点だろうか。


2014.06.01


 Ubuntuでキーボード・ショートカットが効かなくなることがあるのはconkyのせいであることが判明。own_window_typeをnormalからpanelに変更。あとは電源キーを押した時の問い合わせウィンドウが最前面扱いされないことがあること。これはconkyなしでも発生する。原因不明。相変わらずキーボードだけでは電源を切れない。


2014.06.06


 Ubuntu 10.04のghc(Haskellコンパイラ)のバージョンは6.12.1で、PPAを使ったとしても6.12.3。Ubuntu 14.04では7.6.3。7.6.3ではディレクトリから得たファイル名をputStrLnで日本語出力可能なのだが、6.12.xでは化ける。テキストの扱いが変わったようなのだがこれは困る。Ubuntu 10.04マシン向けにHaskellプログラムを使えないからだ。

 で、試しに http://www.haskell.org/ghc/download のバイナリ(7.6.3)をインストールしたら動いてしまった。なんだ、本家のバイナリが動くんじゃないか。これで気兼ねなくHaskellで遊べる。


2014.06.10


 つうか、ghc 6.12.xってたかだか数年前の最新ってことだよな。それで文字エンコーディングの扱いがそれだったって、なんつうかマイクロソフトの爪の垢でも煎じてくだされなレベル。米国人ってのはviで8bitが通らなかった頃から変わってないというか困ったもんだ、うんざり。いやまぁ、米国人が開発の中心かは知らんが。EUC-JPしか通らなくて日本語に不自由だったRubyの日本人も大概ではある。21世紀だってのに。


2014.06.10


 Ubuntu 10.04でサウンドがでなくなった。久し振りにVAIO Type S(SZ)でaviを再生しようとしたら無反応になった。mp3も同じく再生できない。まぁ後で追求しようと放置。週末、ファイル兼メディアサーバalephのラジオ録音ファイルを確認しようとしたら、録音に失敗していた。あぁ、サウンドが死んだのはつい最近か、そういえばmpdでショスタコビッチを再生しようとして失敗してたんだった。原因を追求しておけば良かった。おそらくカーネルだ。VAIO Type S(SZ)はサーバalephと同じOSであるUbuntu 10.04 32bitを使っており、先行試験機としての役割も持つ。例えば最新ghcの導入もまずはVAIO Type S(SZ)で試してからサーバalephにも入れた。先行機の異常に注意すべきであった。

 カーネル2.6.32-61は地雷。当面2.6.32-60で運用。2.6.32-60なら問題なくサウンドの再生録音ができる。バグフィックスを望む。

 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1327220 によると2.6.32-62で解決しているそうだ。サポートの終わったはずのUbuntu 10.04でいまだにカーネルアップデートがあるのが不思議なのだが、Ubuntuとしてのサポートとアップデートの仕組みは別ってことなんだろうか。


2014.06.14


 勤務先の市ヶ谷から曙橋への引っ越しが済んだので、メインマシンのHDDを増設した。Western Digitalの3.0TBの製品。いきなり約750GBと認識される。初期不良かと返品に出かける準備をしながらもしやと思いググってみる。「hdd 3tb」まで入力したところ候補に「hdd 3tb 746gb」と候補が出る。初期不良じゃない、何らかの既知の問題だ。

 「HDD容量が3TBのWD30EZRXが746GBと認識される問題の解決方法!」(http://shopdd.jp/blog-entry-1127.html)によるとIntel Rapid Storage Technologyのドライバが古かったせいだそうだ。早速ドライバをアップデートする。無事2.72TB認識された。返品に行かなくて良かった。


2014.06.17


 Ubuntu 10.04にカーネル2.6.32-62がリリースされ、サウンドが無効になる問題が解消された。


2014.06.21


 「'14年1月期アニメ、どれを観る? 結果発表」(http://av.watch.impress.co.jp/docs/enq/researchmini/20140131_633243.html)が非常に役に立った(「未確認で進行形」を観るきっかけになった)ので4月期もやらないかなと待っていたがどうもない模様。自粛ですか?

 '14年1月期の上位9本を見ると、


中二病でも恋がしたい! 2期(京アニ)

ウィッチクラフトワークス(講談社)

のうりん(ソフトバンク)

未確認で進行形(一迅社)

世界征服(一迅社)

いなり、こんこん、恋いろは。(角川)

ニセコイ(集英社)

生徒会役員共 2期(講談社)

ノラガミ(講談社)


圧倒的に講談社。しかも「ウィッチクラフトワークス」はダークホース。2013年は紅白にまで講談社の巨人が登場したわけで、講談社って強いなぁと思う次第。自粛と言うか横槍を入れたのは誰? 角川?


2014.06.27


 UbuntuでHaskellとScalaとPythonのコードを書くという縛りをやってると、どんどん.emacsのカスタマイズが進む。そもそもプログラミング向けの言語毎のmodeがロクなんもんじゃない。色分けされた表示は良いのだが、入力周りの支援が邪魔をする。以前PHP向けのmodeを使ったことがあるが、なんでか文字入力が出来なくなった。きっと適切に何かを上手くどうにかすると便利に使えるのかも知れない。アアベンリダネェ。以来、

(defun php-mode () ())

は必須。これはPHP向けのmodeを無効にする呪文。

 HaskellとScalaとPythonのモードを使ってみて邪魔な支援はインデントなんだと気付く。改行するとどのmodeも構文解析をして適切な位置に自動的にインデントを入れようとする。適切な構文解析も適切なインデントも出来たためしがない。結局自動インデントに求められるのは「今改行をした行と同じインデントをしろ」だけだ。こんなのmodeは関係ない。で、そういう関数を拾ってきて入れる。

 リージョンでタブキーを押すとやはり構文解析をして適切な整形をしようとする。普通は俺の知らない美的感覚による謎整形が行われる。そんなものはいらないので全部の行にタブを入れる関数を拾ってきて入れる。シフトタブはその逆。ちゃんと動く関数が見つからなかったので、仕方なく自分で書く。

 Haskellだけは空白2個のタブだが、他ではタブ文字をサイズ4で使っている。タブストップのリストをHaskellのmodeのローカルだけ別に用意。

 emacs内のtermでコントロール上キーにラインモード、エンターキーにキャラモードへの移行を設定する。なつかしのVZっぽい動きが再現する。

 とかなんとか色々やっても大規模なリファクタリング時には結局Windowsでsakuraエディタを使う。


2014.07.10


 例えば「Haskerr」をググると「次の検索結果を表示しています: haskell」となる。「Haskel」の場合は「もしかして: haskell」となり、ともかく入力間違いに気付く。

 「ばからもん」をググると「次の検索結果を」も「もしかして」もなく何気なくトップに「TVアニメ「ばらかもん」公式サイト」が出てくる。結果もほとんど「ばらかもん」なのだが「小野大輔が出演決定&コメント到着!TVアニメ「ばからもん...」なんてページもある。かなりの高確率で「ばらかもん」は「ばからもん」と間違えられているようだ。「【素晴らしい作品】『ばからもん』第1話感想」とか褒めてるつもりなのかそれはと飯を噴く。まぁ、どう考えてもタイトルが悪い。「ばらかもん」より「ばからもん」の方が発音しやすい。小娘が録画一覧を見て素で「ばからもん」と読んだ。実は俺も最初はそう読んだ。面白かったです「ばらかもん」。


2014.07.11


 JR秋葉原駅のエスカレーターに盗撮禁止の張り紙がある。あぁ土地柄だなぁと思いつつその張り紙を撮影したくてしょうがないのだがそんな勇気は俺にはない。


2014.07.15


 新宿地下サブナードの福家書店のコミック売り場が腐った漫画だらけになってしまった。結構新刊購入に使ってたのに、俺はお客様ではなくなったってことだ。コミック以外の部分も改装後「女性のトレンドを「本」と「雑貨」で追求し『美』を提供するお店です」になっちまうそうで、こっちも俺はお客様ではなくなった。そりゃまぁサブナードの客層は主に女性なのかもしれないが、西武新宿線の通勤の通りすがりの親父もいるんだぜ。


2014.07.16


 F#がOCamlを元に開発されたと知り、まずはOCamlの本でも読もうと新宿紀伊國屋書店の四階へ行く。OCamlの本は一冊も無かった。F#の本は三冊あったが、オライリーの本は無かった。Webの紀伊國屋書店で調べると「プログラミング in OCaml」(五十嵐淳著、技術評論社)は「ご注文不可」となっていた。「プログラミング F#」(クリス・スミス著、オライリー・ジャパン)は注文可能になっていたが、果たして私は無事入手出来るのか。

 つうか、OCamlってそんなにマイナーってこと?

 しかたがないので五十嵐淳さんのWebページ「Object Caml 入門」(http://www.fos.kuis.kyoto-u.ac.jp/~t-sekiym/classes/isle4/mltext/ocaml.html)を読んで入門書の替りにする(上記著作の元ネタだそうです)。このページ、EUC-JPベースなんだけどちらほらISO-8859-1が入ってて文字化けが激しい。つうかどうやって組んだんだこれ。元はUnicodeだけど何かのツールがこんな変態EUC-JPに変換した? ソースの頭に

<META name="GENERATOR" content="hevea 1.09">

とある。HeveaはLaTeXをHTMLにするツール。仏製。なるほど日本語には弱そうだ。


2014.08.01


 OCamlを勝手に「頬っ被り」に似た感じの発音で読んでいたが、ウィキペディアによると「オーキャメル」で、シンボルキャラが駱駝。オッカムの剃刀とは関係なさげ。関数型言語は慣れるとどんどん記述が簡素化していく傾向があるので、それにちなんだとか考えたんだが、違うか。唯名論とかもそれっぽいのに。


2014.08.01


 Ubuntu 14.04にて、ThunarもPCManFMもネットワーク関連やらスリープ後の取り外し可能メディアの扱いやらが下手糞なので、結局Nautilusに戻った。動作に不満は多いが、基本部分の適切さでは他より一枚上手。


2014.08.08


 MP3ファイルが私のオーディオ生活の中心になって久しい。MP3ファイルはファイルサーバのalephに溜めており、mpdで管理再生している。alephにTASCAM US-122をUSB接続し、ミュージックボックスとして利用している。で、Ubuntu 10.04のmpdはそれなりにタコなのだ。きちんと認識できないMP3ファイルがそれなりにある。ID3タグは読めるくせに再生できないというパターンが問題(その逆はDBファイルを書き換えれば済む、DBとか言いながら単なるテキストファイル)。実際に問題になったのは平沢進の「星を知る物」。mpdで再生できない。エンコードを別のソフトに変えると読めたりすることもあるのだがこれは平沢のサイトで配布してたMP3なので劣化なしに再エンコードできない。ともかく以前からこの状態をどうにかしたいと思っていた。

 mpdのソースを含めたビルドパッケージを見てわかったのは、madというライブラリがダメな原因だということ。./configure --disable-mad でmadを無効にできる。するとmadの替りにmpg123というライブラリを使うようになる。これはこれでmadとは違うファイルがダメになる。で、さらに --disable-mpg123 を加える。今度はID3タグが大量に読めなくなる。でも、今までより再生での問題はなさそうだ。madでもmpg123でもないMP3ファイルのデコードには何が使われるのだろう。調べるとどうやら色々なファイル形式の最後のフォールバックにはffmpegライブラリが使われている。

 ええと、id3tagライブラリをリンクしているのになんで、デコーダーに依存してID3タグを読めたり読めなかったりな動きをするんだろう。そのへんの作りが解せん。

 というわけで、ID3タグを拾ってDBに登録するときはmadを使って、再生の時はffmpegを使うと大部分の問題が解決しそうだ。しかしそんなことが出来そうな設定はおろか、MP3のデコードに何を使うかの設定もなさそうだ。ソースを書き換える。


mpd

decoder_thread.c

decoder_run_file関数

while文の中の先頭に

    if (strcmp(suffix, "mp3") == 0 && strcmp(plugin->name, "ffmpeg") != 0)
        continue;

を加える。


 madとmpg123とffmpegでどれが音が良いやらはようわからん。余程酷い実装でもしてない限りデコード結果にたいして差があるとも思えないが。


2014.08.12


 前回のmpdの改変は概ね良いのだが、元々madライブラリでダメなファイルの一覧での演奏時間表示がおかしいままなのが残念なところ。そこもなんとかすべく色々試す。で、以下が改造ポイント。

 まず、前回の改造を全部反故にする。

 演奏用のデコードはデコーダプラグインのstream_decodeまたはfile_decodeを使うので、madとmpg123の該当部分をNULLにする。

mpd

decoder/mad_decoder_plugin.c

mad_decoder_plugin構造体

    //.stream_decode = mp3_decode,
    .stream_decode = NULL,

decoder/mpg123_decoder_plugin.c

mpg123_decoder_plugin構造体

    //.file_decode = mpd_mpg123_file_decode,
    .file_decode = NULL,

 これで、前回改造と同じ効果になる。

 次にmadプラグインで演奏時間を得る部分をffmpegに任せるようにする。あらかじめffmpegプラグインを参照できるようにして、

decoder/mad_decoder_plugin.c

extern const struct decoder_plugin ffmpeg_decoder_plugin;

mad_decoder_scan_stream関数を書き換える。

    //total_time = mad_decoder_total_file_time(is);
    //if (total_time < 0)
    //    return false;
    struct tag t;
    memset(&t, 0, sizeof t);
    ffmpeg_decoder_plugin.scan_stream(is, handler, &t);
    total_time = t.time;

 handler_ctxをそのまま使うのでなく、ローカルにタグ用のデータを用意するのがミソ。もしffmpegプラグインが何かヒープデータを上記tに加えてたら思いっきりメモリリークする。けど、まぁいいや。

 今までID3タグの拾えないMP3ファイルが多少あったのだが、それも解消された。演奏時間を拾う過程での不具合に関連してるのだろう。

 使ったソースはmpd-0.17.6.tar.gz。mpd-0.18.12.tar.xzはglib 2.28以降を要求するので、Ubuntu 10.04ではビルドできない。0.17系はCなのだが、0.18系はソースの拡張子が.cxxなのでC++としてコンパイルされるようだ。ファイル名もdecoder_thred.cがDecoderThread.cxxになってたり割と大胆な改造が行われた形跡がある。


2014.08.13


 結局、ffmpegもmpg123もmadも各々再生できないMP3ファイルがあると判明。もっと適切で真っ当な改造をしないと巧い事いかない。演奏時間を適切に拾えないデコーダープラグインは適切に演奏できないと仮定する。で、適切に演奏時間を拾えないことを確実に動作させる。使ったソースはmpd-0.17.6.tar.gz。

 まず、再度前回の改造を全部反故にする。

 改造のキモは、ffmpegやmpg123のデコーダープラグインのバグを回避することと、プラグインの評価順を変えること。


decoder/ffmpeg_decoder_plugin.c

ffmpeg_decoder_plugin.c関数

 コンテキストをタッチする部分を削除。ここでID3タグの内容が消されるようだ。この処理を削除することでの影響は不明。

    //ffmpeg_scan_dictionary(f->metadata, handler, handler_ctx);
    //int idx = ffmpeg_find_audio_stream(f);
    //if (idx >= 0)
    //    ffmpeg_scan_dictionary(f->streams[idx]->metadata,
    //        handler, handler_ctx);

 演奏時間を適切に拾えなかった場合、偽を返す。

    long long dur = -1;
    if (f->duration != (int64_t)AV_NOPTS_VALUE) {
        dur = f->duration;
        tag_handler_invoke_duration(handler, handler_ctx,
                        f->duration / AV_TIME_BASE);
    }
    ...
    return dur >= 0;

decoder/mpg123_decoder_plugin.c

mpd_mpg123_scan_file関数

 演奏時間を適切に拾えなかった場合、偽を返す。

    num_samples = mpg123_length(handle);
    int dur = num_samples / audio_format.sample_rate;
    if (num_samples <= 0 || dur < 0) {

decoder_thread.c

decoder_run_file関数

 演奏時間を適切に拾えないデコーダーをスキップする。

#include "tag_handler.h"
...
    while ...
        ...
        int dur = -1;
        struct tag t;
        memset(&t, 0, sizeof t);
        if (plugin->scan_stream != NULL) {
            GMutex *mutex = g_mutex_new();
            GCond *cond = g_cond_new();
            struct input_stream *is = input_stream_open(path_fs, mutex, cond, NULL);
            if (is != NULL) {
                if (decoder_plugin_scan_stream(plugin, is, &full_tag_handler, &t)) {
                    dur = t.time;
                }
                input_stream_close(is);
            }
            g_cond_free(cond);
            g_mutex_free(mutex);
        }
        else if (plugin->scan_file != NULL) {
            if (decoder_plugin_scan_file(plugin, path_fs, &full_tag_handler, &t)) {
                dur = t.time;
            }
        }
        if (dur < 0) {
            continue;
        }

decoder_list.c

 デコーダープラグインの順番を変える。

    ffmpeg
    mpg123
    mad

 今のところffmpeg、mpg123、madのどれでも再生できないというパターンは見つかってない。


2014.08.14


 大塚という声優さんが多いので、我が家ではエッグマンやブラック魔王やぬらりひょんを大塚オヤジ、スネークやバトーを大塚ムスコと呼んでいる。もう一人いる。ささみさんのお兄ちゃんや白井さんや馳夫やアリサちゃんのダディは大塚タニン。


2014.08.16


 昔から、仮面ライダーの主題歌を思い出そうとするとタイガーマスクになってしまってた。どちらも菊池俊輔さんの作曲とようやく知る。仮面ライダーV3とバビル2世もごっちゃになる。これも菊池俊輔さんのせい。


2014.08.18


 秋葉原の書泉ブックタワーで無事「プログラミング F#」(クリス・スミス著、オライリー・ジャパン)を入手。ついでになんとなくそれっぽさそうだったので「プログラム意味論」(横内寛文著、共立出版)も一緒に買ってくる。

 盆休みにママと紀伊國屋書店代々木店(新宿南店とも言う)で「プログラミング F#」を見つける。あれぇ、都内には無いんじゃなかったか。ともあれその店では「プログラミングの基礎」(浅井健一著、サイエンス社)を入手。いやぁ、売ってるとは思ってなかった。もしかしたら現在唯一入手可能なOCaml入門書かもしれない。

 現在入手不可能な「プログラミング in OCaml」(五十嵐淳著、技術評論社)は技評のサイトでPDFを購入できると判明。しかしPDFではNexus 7等で読むしかなく、サンプルを試してみたが現在の私の目にはかなり厳しい。まぁOCaml入門は「プログラミングの基礎」と京都大学の五十嵐淳さんのページとocaml.jpのチュートリアルで良しとする。

 そうそうチュートリアルの二分木の定義で、ノードに値が無い。これでも頑張れば使えなくはないが非常に使いにくい二分木だ。定義から自然に表現できるコード以外に勝手なローカルルールが必要になる。まぁ、単に間違いなんだろう。五十嵐淳さんのページも、「プログラミング F#」も「プログラミングの基礎」も「すごいH本」も皆ノードに値がある。なんというかocaml.jpにあるチュートリアルはちょっと出来が残念。多分本家も、というか本家が残念なんだろう。


2014.08.18


 いつの間にやらUbuntu 14.04のNautilusのシンボリックリンクの動きが昔のパターンに戻った。バグだったのかポリシーだったのかは不明だが、問題が一つ解消。

 シンボリックリンクでの動きってのは割と不可解な部分があって、例えば

/-+-A-+-B
  +
  +-C-+-B'

というようなディレクトリ構成でディレクトリCにディレクトリBのシンボリックリンクB'を貼る。/CからB'へcdする。pwdは/C/B'でcd ..は/Cに戻るのだが、B'にてls ..をするとA配下のディレクトリ一覧が表示される。これは面食らう。昔からこうだっけ?


2014.08.22


 .NET 4.5でZIPファイルが扱えるようになったので、F#プログラムで使ってみた。Windowsでは当然のように動くのだが、Linux上のmonoでは動かない。monoにはまだZIPファイルが扱えるライブラリが実装されていないそうだ。ううむ。


2014.08.27


 サクラエディタの比較的新しい版ではペースト時に改行コードを変換してくれるようになっていた。これで改行コードが色々混ざらなくなる。


2014.09.05


 VAIO Proの普段使いはUbuntuなのだが、F#で遊ぶために今はWindowsが多くなっている。フォントの汚さを解決するためにMacTypeを入れていたが、サクラエディタの動作がかなり重くなるので外した。今まで外してなかったのは単に普段使いをしてなかったからだ。WindowsがどうのとかLinuxがどうのと特に主張はない。HaskellやOCamlで遊ぶ時はLinuxの方が自然で、F#やC#のときはWindowsの方が自然ってだけだ。JavaやScalaやPythonではどちらでも似たようなもん。


2014.09.07


 Nexus 7 (2013)でgmailの受信に「メール」を使っている。なぜ「Gmail」でないかといえば、私の使い方が根本的にオフライン志向だからだ。それはまぁいいとして、他の環境で受け取ったメールをmewでgmailに転送する。Nexus 7の「メール」では添付として扱われたうえに、「この添付ファイルを開いて表示できるアプリはありません。」となる。何故か保存はできるようなので、保存する。さてどこに保存されたのだろう。

 ConnectBotで/sdcardにて(取り外せなくてもユーザエリアはこういうパスのようだ)

find . -mtime 1

とするが、それっぽいファイルは一切出てこない。Googleさん、これって何処に何を保存したのでしょうか。それともフェイクですか? Googleのソフトウェアの品質の悪さは定評ありますが、これもそうなんでしょうか? 特定の拡張子のファイルしかダウンロードしないのならせめて「ダウンロードできませんでした」とか「保存できませんでした」など適切なエラー表示して貰えませんか。


2014.09.10


 スラッシュドットジャパンの記事「Linus Torvalds曰く、それでもLinuxはデスクトップを目指したい」にてArdourを褒めてる人がいた。そういえば箸にも棒にもかからなかった頃から大分経つ。とりあえずチェックしてみよう。

 Ubuntu 14.04ではArdourは2.xと3.x両方用意されている。ということは3.xは地雷なんだろう。確かに2.xはすんなり動いたが、3.xが動かない。

 Ubuntu 14.04でArdour3を動かすのに必要な設定。

/etc/security/limits.d/audio.conf.disabledをaudio.confにリネームする。

audio.confのniceの行を有効にする(コメントを外す)。

/etc/group

audio に自身を加える

pulse に自身を加える

pulse-access に自身を加える

 ついでにRosegarden向けに必要な設定。

rc.localに/sbin/modprobe snd-hrtimerを加える。

[Rosegarden - 編集 - 設定 - MIDI - シーケンサタイミングのソース]を「HR timer」にする。

 さてArdour3である。確かにマシン能力が向上したためか、Jackが適切に動く。録音、再生の基本はきっちり動く。確かにこれは使えそうな「雰囲気」だ。で、試しに「散歩向け808 Stateノンストップミックス90分」を作ろうかと手をつけ始める。ええと、格好付けが目立って実際の使い勝手を考えてない部分がちらほら出てきた。

1. 普通に左右にスクロールさせて欲しい。90分のミックスになるわけだからArdour3のスクロール方法では破綻する。いや、別に90分もいらない。リズムを合わせるためにズームしたらそれでもうスクロール不可能になる。破綻してる。

2. オートフェードの値を数値入力出来ないのは何かの罰なんでしょうか?

 少なくとも前世紀の製品であるCubase VSTでこんな問題はなかった。今世紀に入ってからのCubase SXにもこんな問題はなかった。おそらく現在のCubaseにもない。また、1.の問題はArdour2にはなかった(普通のスクロールボタンがあった)ので、間違った形でGUIの流行を取り入れたのだと考えられる。まぁ、MIDI機能は使わないので当面Ardour2でいいや。Ardour2はキーボードで数値入力できない点を除けば結構よく出来てる。とはいえLinuxにはほぼ他に選択肢がないのが問題点ではあろう。


2014.09.17


 ついでなのでWindowsのDAWも調べる。

 Ohm Studioをインストール。サウンド系アプリにありがちなのだが、勝手にSteinbergのディレクトリを見てVSTプラグインをロードしようとする。で、時々ロードできないものがあって、エラーのダイアログを吐く。インストールごときに何度リターンキーを押させるつもりだ、ユーザーアクションは不要だろ。この時点で既に印象は最悪。起動すると画面の凝り方が屍臭プンプンなのだが、そもそもオフラインで動かないと気付き、アンインストール。変なメールとか来なけりゃいいけど。

 Studio Oneを使ってみる。あぁ、なんというか地味で素直。特に迷うことなくやりたいことができると思ったらCubase開発者のプロダクトですか。ええと、エフェクタを使わないオーディオ編集はもうこれでいいです。

 一応Reaper 0.999も入れてみる。波形データをドラッグするときに波形が表示されないので、実用上問題あり。もちろん現在のバージョンではそんなことはないんだろうけど。


2014.09.18


 もしかしたら今まで808 Stateをアルバム順に全部聴くってことをしたことがなかったのかも知れない。GorgeousのラストナンバーのSexy Synthesizerが終わって次のアルバムDon SolarisのIntroが始まったと思ったらすぐフェードアウトして再度Introが始まった。おかしい、MP3エンコードのミスかと思って確認すると、Sexy Synthesizerの最後にコーダでもないアウトロとでもいうのか、チョロっとサウンドが入っている。Don SolarisのIntroでそのサウンドを再利用したってことだ。確かにミックスが違う。


2014.09.19


 Ardour2の使い勝手も褒められたもんじゃない。オーディオファイルをドラッグして新しいトラックを作れる。しかしオーディオファイルはドロップした場所でなく先頭に行ってしまう。また、トラック数が増えてきて画面に入りきらなくなると新しいトラック向けにドロップすべき場所がなくなる。トラック全体の上下のスクロールバーが左にあったり、スクロールバーの矢印(スクロールアロー)とグレーゾーン(サムのないところ)の役割が逆転してたり、なんでこう素直じゃないのかねぇ。もう、なんというか嫌気が差してきた。


2014.09.19


 結局なんだかんだ言って10年前のCubase SX2を使っている。明らかに最近試したどのフリーソフトよりも使いやすい。まぁ、それはいいとして、Windows 8.1での使用で不可解な現象。

 Vaio ProはノートPCの例に漏れず、OSはWindows 8.1 64bitだ。Cubase SX2は32bit XP向けにリリースされたものだ。嬉しいことにWindows 8.1 64bitでも余り問題なく動作する。一点気になるのは例えばスクロールバーのサムを暫く掴んで行ったり来たりをしてるとウィンドウがしゃっくりをしたような状態になり、掴んでいたサムが離れてしまう。これを仮にしゃっくり現象と名付ける。こういうときは互換モードだよなぁと、互換モードをXP SP3にしてみる。しゃっくり現象は起きないが、エクスプローラからCubase SX2へのオーディオファイルのドロップが出来ない。互換モードをVistaにするとドロップできるようになる。しゃっくり現象もなさそう。もしやと互換モードを8にしても同じ。互換モードを使うと値によらずしゃっくり現象が起きなくなるようだ。なんだか、互換がどうしたとかの問題じゃないんじゃないかコレ。

 互換モードをXPにするとドロップできなくなるのも問題。ドロップできなくなるべき理由はないと思うのだが、Cubase SX2が何か頓珍漢な実装でもしてたのだろうか。

 互換モードに関しては役に立つ情報が少ない。ましてや、Windows 8.1で互換モード8を使うと何が変わるのかなんて一切わからない。


2014.09.19


 なんか電気グルーヴのモノノケダンスはミックスが多いなぁと思っていた。調べると5種類ある。

1. シングル

2. J-POP収録ミックス

3. J-POP付録のPVミックス

4. 20付録のSugiurumn Remix

5. 20付録TV size

 一番知られているのは墓場鬼太郎のTV放送と同じ「はず」の5.なのだが、これが1.を短くしただけではなく、明らかにミックスというかサウンドが違う。サウンド的には1.は3.に近い(基本的に同じ?)。TV向けに容赦したサウンドが5.なのだろう。ただ、TVの音声は5.のはずなのだがもっと歪んでいた。フジテレビのせいかどうかはわからない(私が確認したのはアニマックスでの放送)。それが「はず」と書いた理由。長らく1.を聴く機会がなかったのだが、しょこたんのラジオ放送を録音した。そしたら3.と違ったというのが驚きの事実。


2014.09.20


 勿体無いお化けがでそうだが、Vaio Pro 11のWindows 8.1を1360x768で使うように設定した。本来のピクセル数(俗に言う解像度)は1920x1080で、いわゆるフルHD。しばらくそのまま使ってきたが、やはり問題が多いので解像度を下げた。

1. dpi設定の違う環境間でVisual StudioでのWindows Formアプリのプロジェクトがが共有できない。

 フルHDのときは100%(96dpi)ではコンパネなどのテキストが小さすぎて読めないので125%(120dpi)とか150%(144dpi)で使うことになるのだが、Windows Formの仕組みがこれを拒否する。なんというか、ちと考えなし過ぎますなMSさん。

2. 高解像度に対応してないアプリ救済向けの自動スケーリングの品質が低い。

 例えば150%のとき、高解像度非対応のアプリは自動的に画像として1.5倍に拡大されて表示される。しかし、かなりボケて表示される。全体の解像度を下げた場合に比べると素人ですかってくらい品質が悪い。どうしてこうなった?

3. 150%のとき、管理ツールが自動スケーリングでボケる。ボケさせないための設定ができない。

4. 自動スケーリングをさせないために125%を選んだとしても、96dpi前提のアプリで文字が細かすぎて読めない。

 Cubase SX2でとにかく困る。

 そんなこんなでドライバレベルで解像度を下げた。結局フルHDのディスプレイを積んでも、ソフトが対応しなけりゃ無意味ってことだ。現在のCubaseは高解像対応してるんだろうか。

 UbuntuでもArdourなんかは96dpiを前提に作られているようで、高解像度では余り具合が良くない。Ardourで遊んでる間はUbuntuも1360x768にしたがArdourに嫌気が差した現在は1920x1080に戻した。きっとWindowsでもUbuntuでやる程度のことしかしないなら1920x1080でもさほど困らないのかも知れない。でも開発と音楽は外せない。


2014.09.22


 「散歩向け808 Stateノンストップミックス90分」は結局Windows 8.1でCubase SX2を使ってミックスした。10年前のソフトなのに最新のArdourより何倍も使いやすい。

 試し聴きするとCubik(uはウムラウト付き)が散歩に向かないリズムの途切れる曲だとわかったので、そこを詰めて残りを全部前に配置し直すことにした。ロケーションを時分秒で表示するようにして、時刻計算できる電卓で各トラックに配置したサウンドデータの位置を計算しなおしキーボードでの数値入力で変えていく。するとトラックのオートフェーダーのイベントも自動的に移動する。こういったことはArdourでは出来ない。サウンドデータの位置を数値入力で変更できない。また、マウスで変更したとしても、オートフェーダーのイベントは追随してこない。

 Ardourの開発者はArdourを使ってないのではないかと疑う。自分自身はPro Toolsを使ったりしてるんではないだろうかと。


2014.09.25


 西城秀樹があと半年ほどで60歳。やはり「ヒデキ。還暦!」ってギャグをかまして欲しいと期待している。


2014.10.08


 スクエニがSNKプに反撃を開始。なんにせよ、早くハイスコアガールの続きを読みたい。ホント、頼みますよ。


2014.10.09


 Nexus 7 (2013)にBusyBox Freeでコマンドラインツールを追加してある(要root)。しかし、環境変数をどうやって変更するかがわからない。BusyBox Freeでbusyboxをインストールしたときに、何らかの方法で/system/xbinが環境変数PATHに加えられたんだと思うが、それがどこでどうやって行なわれているか全くわからない。何がしたいかというとPATHにディレクトリを追加したいのである。例えばコマンドラインでPythonを起動するシェルスクリプトを/system/xbin以外に置きたいからだ。端末で動くJNetHackも別の場所に置きたい。自分でコマンドラインツールをビルドしたら/system/xbinは違うと思う。ConnectBotを動かすときに毎回なんらかのシェルスクリプトを動かすしかないのだろうか。それは余りにスマートさに欠ける。

 /system/bin/ls の出力に「.」と「..」がないことに気付く。/system/xbin/lsだとちゃんと「.」と「..」が出力される。Androidはかなり変なLinuxだ。


2014.10.09


 なんとなくNexus 7 (2013)に表計算ソフトがあるといいなと思ったので、

http://kevinboone.net/android_native.html

https://sites.google.com/site/fudist/Home/vim-nihongo-ban/android-vim-build/android-ndk-cross-compile/vim-configure

https://sites.google.com/site/fudist/Home/vim-nihongo-ban/android-vim-build/android-ndk-cross-compile

あたりを参考にしてsc(spreadsheet calculator)をAndroid(ARM)向けにビルドした。ncursesをビルドしてからリンクするのがキモ。android-ndkのライブラリにないようなのでRE_COMPはオフにした。

 ConnectBotのデフォルトの端末はvt100のようだ。ncursesのビルドで生成されたterminfoのvt100をNexus 7 (2013)に入れる。まっとうに動く。TERM=linuxやTERM=xtermだと画面が崩れる。ConnectBotでは日本語を入力できないが、scの扱うファイルはテキストなので、他の環境やテキストエディタで日本語を入力、EUC-JPで保存すれば日本語で表示できる。もちろんConnectBotはEUC-JPにする。そもそもJNetHackがEUC-JPを要求したから端末エミュレータ(Jack PalevichのAndroid Terminal Emulator)でなくConnectBotを使ったんだっけ。端末エミュレータはなぜか文字エンコードの設定がない。

 なんで日本語でEUC-JPなのか、UTF-8じゃダメなのかは純粋にソフトの作りの問題。日本語のことを何も考えてないソフトでも、8bitスルーにさえすればEUC-JPで結構動くってこと。scは日本語のことは何も考えてない。EUC-JPは文字のバイト数とキャラクタ端末上の文字幅が一致している(半角カナは使わない前提)。いわゆる漢字は全角で2バイトなのだ。対してUTF-8は漢字1つを表すのに3バイト使う。これは、適切にテキストを扱わないとどうあっても化ける。scはたまたまEUC-JPで割りと使えるってだけ。vimとかは結構ちゃんと日本語に対応してたはず。

 と、ビルドはしたが、使うのか俺?


2014.10.10


 ここ暫くUbuntu 14.04でmount.cifsがマトモに動いてない。カーネル35で動いて、36で動かなくなって現在37。37でも直ってなかったのは意外。

 MSもアップデートでまたやらかしたし、頻度の高いアップデートも考えものだ。

 どちらの中の人も頑張ってください。


2014.10.23


「ホーム」へ戻る

「読まなくてもいいよ61」

OSTRACISM CO.

OSTRA / Takeshi Yoneki