トップ «前の日記(2008-02-28) 最新 次の日記(2008-03-01)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2008-02-29 :-)

_ 朝ったー

0540 起床。ねむ

_ [崎元仁][松尾早人][岩田匡治][植松伸夫][葉加瀬太郎][ファイナルファンタジーXII]通勤ったー

ファイナルファンタジーXII

ゲームはまだクリアしてません。作曲は崎元仁さん、松尾早人さん、岩田匡治さん、植松伸夫さん、葉加瀬太郎さん。といってもメインで作曲しているのは崎元仁さんです。 松尾早人さん、岩田匡治さんは 2, 3 曲、植松伸夫さんは「Kiss Me Good-Bye」、葉加瀬太郎さんは交響詩「希望」を書いてます。崎元仁さんテイストあふれる作品になっています。崎元仁さん、松尾早人さん、岩田匡治さんnは「伝説のオウガバトル」など「オウガシリーズ」の作曲を担当していました。オウガシリーズを知ってるひとは「オウガっぽい曲」という印象を持つかもしれません。

崎元仁厨全開の日記を以前書きましたが[ 20070118#p05 ] FF12 の曲の特徴を要約すると以下になります。

  • オーケストラ風味の音を駆使
    • とくに弦楽器、管楽器
  • 目立たない音楽[ 20070705#p06 ]
  • メインのメロディが分かりづらい

メインのメロディが分かりづらい、というのは同じく崎元仁さんが曲を書いたグラディウスV もそうだったのだけど、メインのメロディを担当する音が目まぐるしく変わります。聴いているぶんには楽しめるのですが、コピーするときは苦労するようです。Over the Sky を書いたひとたちがそう言ってました。

面白いのが「FINAL FANTASY 〜FFXIIバージョン〜」です。FF1 から FF6 までの「FINAL FANTASY」( 以降 旧版 と略す )と FF7 から FF10 までの「FINAL FANTASY」( 以降 新版 と略す )が少し音が異なります。

旧版 FF1「オープニング・テーマ」の以下のところに注目。

新版 FF9「Melodies Of Life〜Final Fantasy」の同じところ。

FF12 の該当箇所。

旧版は 1 つ前の音符から 1 つ下げてるのに対して、新版は 1 つ前の音符から 3 つ下げてます。

FF6 までは旧版の音に馴染んでいたので FF7 からの新版の音は違和感があり、どうしても上記の部分が好きになれませんでした。FF12 で旧版が使われており、むしろ「FINAL FANTASY 〜FFXIIバージョン〜」は FF4 「オープニング」と同じです( FF4 の楽譜は持ってません )。おっさんゲーマーには嬉しいです。

B000EWBCQ0

_ 仕事

0830 出勤。

_ 「IT技術者」ってなんだ?

Mk さん「痛い技術者のことだよ」

_ 仕事場に「ケータイの落し物」といった写真付きの案内があった

ストラップが初音ミクでした。

目立ちます。よかったですね。

_ [ISO8601][日付][時刻]ISO 8601 - 日付と時刻の組み合わせ

<date>T<time> のように日付と時刻の間にTを挟んで表記する。(例:2004-04-01T12:00:00+09:00=日本時間での2004年4月1日の正午)

quickml がログに書く形式はこれだったのね。

module QuickML
  class Logger
     :
    private
    def puts_log (msg)
      @mutex.synchronize {
        time = Time.now.strftime("%Y-%m-%dT%H:%M:%S")    # これ
        @log_file.puts "#{time}: #{msg}"
      }
    end

_ [biff][CD-ROM][メール][コードリーディング][がらくた][高林哲]がらくたを読む - cdbiff

http://0xcc.net/attic/cdbiff

cdbiff はメールの到着を CD-ROMドライブを使ってお知らせするツールです。

メールの到着を知らせる biff という伝統的なプログラムがあります。cdbiff は知らせる手段に CD-ROM を使ったものです。呆れるほどくだらないプログラムですバカです( 褒め )。

読みます。

Ruby プログラムです。

#! /usr/bin/env ruby

プログラムの概要が書いてあります。1 行で分かるようなシンプルな書き方を見習いたいです。

# cdbiff - a mailbox flag for a CD-ROM drive

冒頭に Copyright があります。GPL です。

# Copyright (C) 2001 Satoru Takabayashi <satoru@namazu.org>
#     All rights reserved.
#     This is free software with ABSOLUTELY NO WARRANTY.
#
# You can redistribute it and/or modify it under the terms of
# the GNU General Public License version 2.

getoptlong というライブラリを要求しています。

require 'getoptlong'

getoptlong は以下のライブラリのようです。SRA のひとらしいです。SRA こわい。

README-ja があるので読みます。

`getoptlong.rb' は、GNU の getopt_long() とまったく同じ方式でコマンド
行オプションの解析を行う Ruby のライブラリです。Ruby バージョン 1.1
およびそれ以降のバージョンで動作します。

getopt_long とはなんでしょう。getoptlong-ja.doc を読みます。.doc とありますが中身は plain text です。

GNU getopt_long() とは?
=======================
GNU geopt_long() は、コマンド行オプションの解析を行う C の関数です。多
くの GNU ソフトウェアがこの関数を使用しています。GNU geopt_long() そし
て `getoptlong.rb' には、以下のような特徴があります。

* 伝統的な一文字オプションに加えて、長いオプションに対応しています。長
  いオプションは `-' の代わりに `--' で始まります (例: `--version')。
* 長いオプションは、一意に定まる限り後方を省略することができます
  (例: `--version' は、`--ver' と略すことができます。ただし、他のオプ
  ション名が `--ver' で始まらない場合に限ります)。
* 特殊な引数 `--' によって、オプションの解析を強制的に終了します。

次。使い方を印字します。

def print_usage
  print "\
Usage: cdbiff [OPTION]
  -f, --file=FILE                Monitor FILE [/var/mail/$USER]
  -c, --command=COMMAND          Execute COMMAND when mail arrives [eject]
  -i, --interval=SECONDS         Monitor at intervals of SECONDS [30]
  -h, --help                     Display this help and exit
"
end

オプションの引数や、デフォルト値( 引数を与えなかった場合 )などを印字しています。[ ] でくくったものがデフォルト値だと予想するたんに cdbiff と実行すると以下の状態で実行されることが推測できます。

  • /var/mail/$USER を監視する
  • mail が来たら eject を実行する
  • 監視する間隔は 30 秒

次。parse_options の定義です。

def parse_options
  options = Hash.new

  parser = GetoptLong.new
  parser.set_options(['--file', '-f',           GetoptLong::REQUIRED_ARGUMENT],
                     ['--command', '-c',        GetoptLong::REQUIRED_ARGUMENT],
                     ['--inerval', '-i',        GetoptLong::REQUIRED_ARGUMENT],
                     ['--help', '-h',           GetoptLong::NO_ARGUMENT])
  parser.each_option {|name, arg|
    options[name.sub /^--/, ""] = arg
  }

  if options['help']
    print_usage
    exit 1
  end
  return options
end

オプションの名前と引数の組のハッシ20040804#p03ュとして使います。

  options = Hash.new

parser.set_options でオプションの名前と引数の有無を設定してます。

parser.each_option でオプションの名前と( もしあれば )引数を取得します。

  parser.each_option {|name, arg|
    options[name.sub /^--/, ""] = arg
  }

name.sub /^--/, "" で name ( オプションの名前 )についている -- を削除します。たとえば --command を command に置換します。「キーは name( オプションの名前 )、値は arg( オプション引数 ) 」というハッシュを作っています。

if options['help'] はオプションに help が含まれていたら print_usage して exit してます。

main の定義を見ます。ここの main は C の main という意味はありませんし Ruby に main というメソッドは存在しません( しないですよね )。main メソッドを定義する必要はありません。高林哲さんが書いた quickml も main から始まっているのでたぶん習慣として main を定義してるのだと思います。

最初にオプションを解析してます。先ほど読んだ parse_options です。

 options = parse_options

オプションのデフォルト値を設定します。print_usage に書いてあったオプションです。

 filename = "/var/mail/#{ENV['USER']}"
 command = "eject"
 interval = 30

filename = "/var/mail/#{ENV['USER']}" では環境変数 USER に設定されている値を ENV から取得してます。ENV は環境変数を表すオブジェクトです。ハッシュと同じインターフェースを持っています。存在しない環境変数を指定すると nil が返ります。たとえばこう。

irb(main):003:0> ENV['notexist']
=> nil

このプログラムはお手軽な一発ネタプログラムなので環境変数の有無は気にしなくていいでしょう。

次のコードではオプションを設定しています。もしオプションを指定されていれば。

 filename = options['file'] if options['file']
 command = options['command'] if options['command']
 interval = options['interval'].to_i if options['interval']

この「本体 if 条件」という構文は「if 修飾子」といいます。if 修飾子を使った場合は最初にやりたいことを書けるのでプログラマーの意図が伝わりやすくなります。

次が cdbiff のメインになる処理です。永久ループしてます。メールボックスの更新時刻が現在時刻よりも新しければ CD-ROM ドライブを開けます。

 last = Time.now  ← 最初に現在時刻を取得しておく
 while true
   begin
     current = File::mtime(filename)  ← メールの更新時刻
   rescue
     next
   end
   if current > last
     system(command)  ← CD-ROM ドライブを開ける
     last = current
   end
   sleep(interval)  ← 30 秒眠る
 end

File::mtime(filename) の filename にディレクトリを指定するとディレクトリの mtime を返します。なので filename に Maildir 形式のディレクトリを指定しても cdbiff 動作します。ruby すごい。

_ [tDiary]tDiary.org - [2.2][release] tDiary 2.2.1リリース

ということで

current を update しました。

_ [/bin/sh][shell][pushd][popd]/bin/sh に pushd,popd は無いのだね

tdiary-current を追いかけるためのスクリプト[ 20080215#p10 ]を実行して気づきました。

% /bin/sh
$ pushd
pushd: not found

_ [][マッシュポテトのグラタン]飯

マッシュポテトのグラタン( ref. きょうの料理 2007-12 pp.124-125 )

_ [チョコレート][大地][六花亭][おやつ]おやつ

六花亭 のチョコレート 大地。白いんです。賞味期限 2008-01-16 です。

_ [トヨタの闇]トヨタの闇

内側から見た富士通「成果主義」の崩壊[ 20040804#p03 ]と似たノリです。

文が扇動的であり頭が悪そうな書き方だったり著者が世間知らずだったりするんですが、それはそれとしてカイゼン活動のために自分が犠牲になるのだったら本末転倒だよなあ。

4828413995

_ [バンブーブレード]バンブーブレードのブログパーツがあったので貼ってみた

つらいか

_ [ココロ]はいてないココロ

c00.png