aij[beta]

日々の芥

Googleカレンダーをjavascriptで操作しながら、Google Data APIのお勉強。
今日は日付の処理。

Common Elements: "Kinds" - Google Data APIs - Google Codeを読むと、gd:whenという要素の属性として、startTimeがあって、xs:dateTimeというタイプとある。日付のフォーマットは、RFC3399にしたがった形式らしい。

サンプルに使用しているスクリプトにstartTimeから月日と、時間を取り出す関数が定義済みだった。

function formatGCalTime(gCalTime) {
// text for regex matches
var remtxt = gCalTime;

function consume(retxt) {
var match = remtxt.match(new RegExp('^' + retxt));
if (match) {
remtxt = remtxt.substring(match[0].length);
return match[0];
}
return '';
}

// minutes of correction between gCalTime and GMT
var totalCorrMins = 0;

var year = consume('\\d{4}');
consume('-?');
var month = consume('\\d{2}');
consume('-?');
var dateMonth = consume('\\d{2}');
var timeOrNot = consume('T');

// if a DATE-TIME was matched in the regex
if (timeOrNot == 'T') {
var hours = consume('\\d{2}');
consume(':?');
var mins = consume('\\d{2}');
consume('(:\\d{2})?(\\.\\d{3})?');
var zuluOrNot = consume('Z');

// if time from server is not already in GMT, calculate offset
if (zuluOrNot != 'Z') {
var corrPlusMinus = consume('[\\+\\-]');
if (corrPlusMinus != '') {
var corrHours = consume('\\d{2}');
consume(':?');
var corrMins = consume('\\d{2}');
totalCorrMins = (corrPlusMinus=='-' ? 1 : -1) *
(Number(corrHours) * 60 +
(corrMins=='' ? 0 : Number(corrMins)));
}
}

// get time since epoch and apply correction, if necessary
// relies upon Date object to convert the GMT time to the local
// timezone
var originalDateEpoch = Date.UTC(year, month - 1, dateMonth, hours, mins);
var gmtDateEpoch = originalDateEpoch + totalCorrMins * 1000 * 60;
var ld = new Date(gmtDateEpoch);

// date is originally in YYYY-MM-DD format
// time is originally in a 24-hour format
// this converts it to MM/DD hh:mm (AM|PM)
dateString = (ld.getMonth() + 1) + '/' + ld.getDate();
timeString = (ld.getHours()) + ':' + ((ld.getMinutes()<10)?('0' + ld.getMinutes()):(ld.getMinutes()));

} else {
// if only a DATE was matched
dateString = parseInt(month) + '/' + parseInt(dateMonth);
}
return dateString;
return timeString

}

この関数に、getTime()で秒換算した値を返すようにする。
中略

dateString = (ld.getMonth() + 1) + '/' + ld.getDate();
timeString = (ld.getHours()) + ':' + ((ld.getMinutes()<10)?('0' + ld.getMinutes()):(ld.getMinutes()));
entryDate = ld.getTime();
} else {
// if only a DATE was matched
dateString = parseInt(month) + '/' + parseInt(dateMonth);
}
return dateString;
return timeString
return entryDateSec
}


今回は今日と比較して、イベントの開始時間が過ぎているかどうかを判断する。

var today = new Date();
var dayPast = (entryDateSec - today.getTime() );

あとは
if (dayPast < 0) を条件式にして、開始時間を過ぎていたら文字をグレーにして、終了の文字を追加してみた。

2008 花火大会カレンダー
今日はそれほど時間がかからずにできた。

iTunes StroreのUS用の残が少なくなってきたので、iTunes Cardを購入。

国内のショップはレートが高いので、今回はeBayで物色してみた。
$50のカードが$43.99で出ていたので、即決。PayPal経由で送金して、30分後にはコードがメールで送られてきました。お手軽だなあ。国内のショップで買うより20%くらい安い。


でもeBayには、ビックリするような価格で出品されていることもあるので注意しなくちゃ。
そろそろこういう抜け道もふさがれたりするのかな。

webでは既に訂正を確認していたが、社会保険庁から"被保険者記録照会回答票"なるものが送られてきた。

私の場合は国民年金加入期間が脱落していたのだが、その期間が加算された形で記録が訂正された。でも相変わらず不親切。記録のどの部分が訂正されたのかがわかりづらい。だいたい、訂正にいたった経緯をあやまるわけでもないし、照会があったから答えてやったという感じが気に入らない。

間違った時はごめんなさいって、お母さんに教わらなかったのかなあ。


東京は昨日から急に暑くなった。

6月中はとんでもなく寒い日もあったりして、あまりエアコンのお世話にならなかった。仕事場は28℃規制で暑いというよりは蒸す。1時間も会議をしていると集中力が途切れる。自宅は6月中は除湿機で乗り切ったけれど、さすがに今日はエアコンを入れた。

気温の差が大きいと疲れるなあ。でもようやく夏が来るというかんじ。

ようやく、正式版がリリースされた。
Mactopia Japan : Microsoft Remote Desktop Connection Client for Mac 2

新機能は、ユニバーサルバイナリ化、コンソールセッションへの接続、RDP6のサポートなどなど。OSXでWIndowsを使用するためのBootCamp、VM、とならんで第3の選択肢として十分使用できる。

ちょっと面白い機能は、OSXのホームフォルダや任意のフォルダを接続先のWindowsマシンにマウントできる。
home.png
SMBで共有しているわけではないので、権限を変更する必要がない。スピードは遅いけれどちょっとだけこのファイルが必要だというときは便利。

これで、OSXでほとんどすべてのシステム管理ができる。

仕事場近くの自販機で初タスポ。
ちょっと大人になった気分。

財布ごとタッチしても大丈夫みたい。

品川で行われた「Adobe Acrobat 9 新製品セミナー」に行ってきた。

スライドの2枚目に"PDFといえばAcrobat"とあって、Adobeの焦りも感じる。
最近のAdobeの製品投入サイクルは18ヶ月になっていて、新ヴァージョンの投入タイミングがCreative Suiteと足並みが揃わない。企業としての収益を考えると、揃えられないというのが本音だろう。だからというわけではないが、Acrobatの新製品セミナーは常にビジネスユーザー向けだ。

製品ラインナップは、Windows版がExtend、Pro、Standardの3種類。Mac版はProのみ。MacユーザーでStandardを選ぶ人は少ないと思うので、これは妥当なところか。
Extendのみの機能はCAD系3Dモデルのサポートと、PowerPointベースのeラーニングコンテンツの作成、ビデオ系をflvに変換してPDFに挿入する機能。3Dモデルが必要な人は仕方がないが、flvとeラーニングコンテンツは、私には必要ない気がした。PDFであれだけ標準化にこだわっているAdobeがなぜflvなのかよくわからない。

セミナーではデモを交えながら、PDFポートフォリオ、フォーム作成の簡素化、共有レビュー、リアルタイムな画面表示共有、文書比較の高機能化が紹介された。ただしこれらは厳密にいうと、新機能ではなくて、いままであった機能のブラッシュアップだ。それぞれの機能のダイアログがわかりやすくなっているけれど、やけに横幅が広くなって、XGAでは辛い。

コラボレーション関連は、いままでメールベースだったものが、ファイルサーバー、SharePoint、Acrobat.comと共有インフラの選択肢が増えた。Acrobat.comに関しては"パブリック・ベータ"という表現をしていた。いままで、APIを使用して開発が必要だった部分を製品に落とし込んだようだ。パッケージを購入しているユーザーにとっては敷居が低くなって試してみようかと思わせる。SharePointをサポートしているところがちょっと面白い。WebDAVの実装系では一番シェアがあるということだろうか。インターネット経由のAcrobat.comでの共有を使ってみたい。

そういえば、PDFのヴァージョンは1.8にはならないのかな。


とりあえず、最初の目標だったテーブル表示とプルダウンによる地域選択ができた。

2008 花火大会カレンダー HTMLのシンプルな表はこちら

2008 花火大会カレンダー
 Googleアカウントをお持ちで、カレンダーを使っている場合はこちら

 iCalフォーマット、iCalに取り込む場合はこちら

 HTMLのカレンダー表示はこちら

 RSSリーダー等に取り込む場合はこちら



iTunesのスマートプレイリストを使って、作曲家の特集を作っている。

Carol King/Gerry Goffin特集とかBarry Mann/Cynthia Weil特集を作って、旅先でiPodで聴くのが楽しみだ。山下達郎のラジオ番組のような特集がお手軽にできてしまうので楽しい。これで曲順とか構成とかに懲りだすと時間がいくらあっても足りない。
ただ、作曲家タグの表記のバラつきには悩まされる。CDDBの普及もあって、アーティストや曲名の表記のバラつきは減ってきたが、作曲家までは、まだ反映されていない。Carol Kingにしても、"C.King"とか"King, Carol"とか、"King"だけの時もあるし。スマートプレイリストで"King"にすると他の作曲家もヒットしてしまうので、うまくない。

作曲家タグまで入力している人には、あまり罪がない。彼らはおそらくCDに添付されているブックレットの情報をそのまま入力しているだけだと思われるからだ。したがってレコード会社や著作権管理団体の問題だと思う。音楽に付随する情報がこのように使われることを想定していなかっただろうし、作曲家の表記について指導、ガイダンスがないせいだろう。いつの日かCDDBは1曲ごとのデータベースにならざるを得ないと思うけれど、その際に表記のブレについて統一されるといいなあ。

ちなみに、昔のiTunesには作曲家タグなんてなかったから、前に取り込んだCDには作曲家情報がない。でも、詳細メニューの"CDトラック名を取得"をすると最新の情報に更新されて、作曲家情報が入手できる場合がある。ただし、まれにアルバム名とかそれ以外の情報が変更されてしまうことがあるのが玉に瑕。iTunes7.7はiPhone対応で忙しいだろうから、iTunes8ぐらいには、タグの差分更新とタグ変更のアンドゥ機能が付くといいな。


なんだか、Google Data APIに行く前に、IEのDOM実装との戦いのようになってきたけれど、今日はTable要素にtbodyが必須だよという話。
IEでのJavascriptのDOM操作に関する備忘録

Google Data APIs Samples - Google Data APIs - Google Codeにあるサンプルで、IEで表示できないなあとおもったら、たいていDOMの話だ。

というわけで、やっとIEでも表示できるサンプルが完成。
2008 花火大会カレンダー -東京-

これでようやくスクリプトをいじれる。