2009年5月27日水曜日

ThumbTacks 発売

ThumbTacks がようやく日本でも発売されました。早速買ってきました。本体はゴムなのかな、と思っていたら、固めのプラスチックでしたので、安心して抜き差しできます。

私はアキバヨドバシで 1,980円で買いました。今のところは、この値段が相場のようです。

購入したきっかけは、古い iPod で使用していたマイク (Dock コネクタ接続タイプ) と、iPod touch のケース (TUNEWEAR iPod Touch第2世代用本革ケース) が干渉するためです。ケースに入れたまま、iPod touch で録音できるようになりました。(後で写真を載せます。)

2009年5月10日日曜日

Bento 2.0.4 リリース…だが…

Mac 専用パーソナルデータベースソフト Bento 2 のバージョン 2.0.4 へのアップデータが公開されました。 iPhone / iPod Touch 版の Bento も公開され、これとのデータ同期と、Bento 2 のパフォーマンスの改善が主な改良点です。

毎度期待している AppleScript のサポート改善は、今回もありませんでした。

確認されている不具合

過去のバージョン (2.0.3 以前) には、希に iCal イベントに重複レコードが発生するというバグがありました。重複レコードが発生しているデータベースを Bento 2.0.4 に読み込ませた場合、Bento 2 を起動する度に、以下の現象が発生します。

  • エラーが発生したので終了する、というダイアログが出るが、実際には終了しない。
  • すべての iCal イベントが重複レコードとしてコピーされる。

起動する度に、iCal イベントが増えていくので、たまったものではありません。なお、重複レコードが発生した場合、Bento から削除することはできません。同様の現象は、アドレスブックでも発生するという報告もあるようです。

一時的な解決策

Bento 2 の新しいアップデータが出るのを待つのが最良の選択です。が、それまでの間、Bento 2 が使えないのは困るという人向けに、Bento 2 のデータベースを直接操作して、重複レコードを削除するスクリプトを公開します。

以下の点を理解し、同意いただける方のみご利用ください。

  • Bento 2.0.4 専用です。
  • データ破壊、データ消失の可能性がありますので、必ずバックアップを取ってから実行してください。清野は、本スクリプトを使用した結果について一切の責任を免れるものとします。
  • 本スクリプトは iCal イベントの重複レコードを削除します。
  • 重複レコードのうち、最も古い (最初に追加された) レコードを残します。そうでないレコードが関連レコードとして参照されている場合、データベースに不整合が発生します。

私の環境では、このスクリプトにより不具合は解消され、正常に使えるようになっています。

-- Delete duplicated events from BentoDB.
-- Use this script AT YOUR OWN RISK.

property sqlite3 : "/usr/bin/sqlite3"
property bentodb : "/Users/your-account/Library/Application Support/Bento/bento.bentodb/Contents/Resources/Database"

on run
 set lastUUID to ""
 repeat with e in my getEvents()
  set the AppleScript's text item delimiters to "|"
  set pk to item 1 of (text items of e)
  set uuid to item 2 of (text items of e)
  if lastUUID is uuid then
   my delEvents(pk)
  else
   set lastUUID to uuid
  end if
 end repeat
end run

on getEvents()
 set the AppleScript's text item delimiters to ASCII character of 13
 text items of my doSQL("SELECT gnpk, gn_gnExternalUID FROM gn_lib_event ORDER BY gn_gnExternalUID ASC")
end getEvents

on delEvents(pk)
 my doSQL("DELETE FROM gn_lib_event WHERE gnpk = '" & pk & "'")
end delEvents

on doSQL(sql)
 do shell script sqlite3 & " '" & bentodb & "' '" & sql & "'"
end doSQL

2009年5月1日金曜日

iCal: event オブジェクトの location プロパティ

iCal の event オブジェクトの location プロパティは、ちょっとクセがあります。

場所が指定されていないとき、location プロパティの値を変数に代入しても、その変数の値は未定義となります。変数に触ったとたんにエラーになるので、以下のように、ヌル文字列に正規化して使うのがよさそうです。

 set loc to location of theEvent
 try
  loc
 on error
  set loc to ""
 end try

知らないとハマる箇所です。その他のプロパティには、こんな変なクセはないんですけどね…。

2009年4月30日木曜日

第○何曜日を計算する

PHPで書かれていたものの移植です。y年m月の第nd曜日の date オブジェクトを返します。

-- y年m月の第nd曜日の date オブジェクトを返す。
on getWhatDayOfWeek(y, m, n, d)
 -- 指定した年月の1日の曜日を取得
 set f to current date
 set year of f to y
 set month of f to m
 set day of f to 1
 set dd to d - (weekday of f) + 1
 -- 1週間を足す
 if dd ≤ 0 then
  set dd to dd + 7
 end if
 set day of f to dd
 -- 第n曜日まで1週間を足し込み
 set day of f to (day of f) + (n - 1) * 7
 return f
end getWhatDayOfWeek

。例えば、2009年 4月の第二水曜日を得る場合は、以下のように使います。

my getWhatDayOfWeek(2009, 4, 2, Wednesday)

すると、以下のような date オブジェクトが返ります。時刻は無視してください。

date "2009年 4月 8日 水曜日 10:44:00 AM"

なお、valid でない日付を指定した場合でもそれなりに動いてしまいます。例えば、2009年 13月は2010年 1月と読み替えられます。また、2009年 4月の第5金曜日は 2009年 5月 1日が返ります。意図した結果となっているかどうかは、呼び出す側で確認してください。

2009年4月26日日曜日

Files / Files lite のドキュメントを同期する

Mac で作成した様々なファイルが iPod Touch 上で閲覧できる Files や Files liteのようなソフトはとても便利です。ここでは、これらのソフトを使う上で、ファイルを簡単に同期する方法を紹介します。

運用

運用の前提は次のとおりです。

  • Files では、ドキュメントの閲覧・削除を行います。
  • Mac 本体に Files に転送するファイルの原本を置きます。原本は、/Users/user/Documents/Files Documents 以下のフォルダに置くものと仮定します。
  • iPod Touch の名前は、iPod_touch_name と仮定します。

運用の流れは次のとおりです。

  • (1) Mac で原本を更新します。更新は、Finder または手動で動かすスクリプトによって行われることを想定しています。
  • (2) 原本の更新内容を iPod touch へ転送します。
  • (3) iPod touch でドキュメントの閲覧および不要なドキュメントの削除を行います。
  • (4) iPod touch の削除を Mac 上の原本へ反映します。
  • (5) (1) へ戻る

以下では、同期のためのツールの設定方法と、(2) と (4) を行う方法を紹介します。

設定

Files との同期は WebDAV を使って行います。sitecopy を使うと便利です。インストールしましょう。

~/.sitecopyrc を以下のように設定します。

site iPod_touch_name
server iPod_touch_name.local
port 8080
protocol webdav
username fuser
password fpasswd
local "/Users/user/Documents/Files Documents"
remote /
url http://iPod_touch_name.local:8080/
checkmoved
exclude .DS_Store

fuser と fpasswd は Files で設定したユーザ名と認証パスワードです。

その他、sitecopy の実行に必要なフォルダの作成およびパーミッションの設定を行います。

% chmod 600 ~/.sitecopyrc
% mkdir ~/.sitecopy
% chmod 700 ~/.sitecopy

原本を保存するフォルダを作ります。

% mkdir "~/Documents/Files Documents"

Files との初期同期を行います。Files のファイルが空の状態で、Files を起動してから、次のコマンドを実行します。

% sitecopy -ai ; sitecopy -au

これで準備完了です。

Mac → iPod Touch の同期

Mac 上の原本のドキュメントを、iPod Touch 上の Files へ転送します (運用の流れ (2) の操作です) 。Files を起動してから、次のコマンドを実行します。

% chmod -R a-w "/Users/user/Documents/Files Documents"
% sitecopy -au

sitecopy はファイルリストを持っていて、実際のファイルとの間の不一致が発生するとうまく動作しません。ファイルリストの不一致を防ぐため、運用の流れ (4) の操作を行うまで、原本を書き込み禁止にします。これは根本的な解決方法ではありませんが、気休めにはなるでしょう。

iPod Touch → Mac の同期

iPod Touch の Files 上で行った削除の操作を、Mac 上の原本にも反映させる操作を行います (運用の流れ (4) の操作です) 。Files を起動してから、次のコマンドを実行します。

% chmod -R a+w "/Users/user/Documents/Files Documents"
% sitecopy -af ; sitecopy -as

原本を書き込み許可にし、削除の操作を反映させます。

2009年4月19日日曜日

LAMY pico 到着

先日注文したコンパクトに収納できるボールペン LAMY pico (マットクローム) が到着しました。やや大きめの箱に入っていて、箱を開けると LAMY pico が恭しく登場する演出はさすがです。あえて詳しく書きません。買った人だけが味わえる感動があります。

第一印象は、「小さい」の一言に尽きます。ペンの先入観を打ち砕いてくれます。もちろん、当初の目標であったかばんへの収納も OK です。

ペン先を出してみると、このくらいまで伸びます。書き味も申し分ありません。

実売価格は 5,000円程度が大勢です。私は 3,190円 + 送料 650円で買いました。いい買い物でした。胸ポケットにも入る短いペン。新社会人へのプレゼントにもおすすめですよー。

2009年4月12日日曜日

コンパクトに収納できるペン LAMY pico

MacBook Air 導入をきっかけに、日々持ち歩く手荷物の最適化を進めています。最適化とは、重量・体積・機能のバランスを取ることです。必要な機能は確保しながら、なるべく軽く・小型なものを求めています。出張が多いので、カバンは移動オフィスと位置付けています。私のカバンの中は仕切り板で区切られ、ほとんどの物が定位置に収納されています。カバンを開けたら、仕事に必要なすべてのデバイスにアクセスできる、すぐに仕事ができる体制になるのが理想です。

一通りの最適化が済んできていて、現在の最適化対象は文房具です。元々、私はあまり字を書かないので、ペンにはこだわりがありません。ペンは、私のカバンで定位置を持っておらず、扱いが下です。一緒に仕事をする人たちに目を向けると、「ビジネスパーソンとしてペンにはこだわる」という意見をお持ちの方も多いようです。とはいえ、私はあまり字を書かないので、書き心地というより、サイズからアプローチしてみました。

実際、探してみると、短いペンはあまりありません。ペンはある程度の長さがないと手の中で固定できず、使いにくいからでしょう。最低でも12cm 程度は必要なようです。この問題を解決し、カバンの中で定位置を与えるためには立てて収納できるサイズ (最長11cm) であることが条件です。つまり収納時はコンパクトに、使用時は必要な大きさに伸びる、そのコンセプトを実現するペン、それが LAMY pico (ラミーピコ) です。収納時は 9cm、使用時は 12.5cm です。

少々高いですが、新社会人へのプレゼントなどにもいかがでしょうか。物がまだ届いていないので、使用感などは後日書きます。