Archive for the 'プログラミング' Category

VDTタイマー for Mac OS X 登場!

VDTタイマーforMac登場.jpg

ついに!VDTタイマー for Mac OS Xが完成しました。

Dock-2.png

ユーザーの疲れ目や肩こりを予防するため、しっかり時間をはかってくれます!

Macでプログラミング(VDTタイマー)

vdttimer_mac.png

PC作業の疲れを予防するためのアプリケーション「VDTタイマー」のMacバージョンを作りました。

vdttimer-2.png

参考書を2冊読み込む

Macでプログラミングをするのはこれが初めて。まずは入門書『たのしいCocoaプログラミング』と『Cocoaではじめよう Mac/iPhoneプログラミング入門』を買い、サンプルソースを入力してみました。

Macには、ソフト開発に必要なツールがすべてOSに付属しています。プログラムにはObjective-Cという言語を使用します。この言語のベースはC++なのですが、やけに [ ] を多用しており、1つのソースに2つの文法が混在しているような、独特な言語です(慣れてしまえば平気ですが)。

入門書には書かれていないこともたくさんありますが、この2冊のおかげで「分からないことがあったらヘルプやGoogleで調べられる」ようになりました。

Fullscreen.png

「もっと具体的に質問せよ(英語)」の壁

VDTタイマーでは「ユーザーがPCを操作していないときタイマーを止める」という処理をしています。そのため、キーボードやマウス操作を監視しようと、やり方を検索してみたのですが、なかなか情報が見つかりません。

Discussion Boardなどでも、同じような質問がたくさんあるのですが、「CocoaアプリかCarbonアプリかAppleScriptかが分からないと答えられない」「何をしたいのか伝わってこない」「質問する前に過去ログを調べろ」「100年ROMれ」など、厳しいけど役に立たない回答ばかりで……。

結局は「CGEventSourceSecondsSinceLastEventType」という、「ユーザーが何も操作していない時間を取得する」APIがあることがわかり、あっけなく解決したのですが、とても時間がかかりました。

icons.jpg

また、ドックのアイコンにプログレスバーを表示する仕組みは、こちらの記事を参考にしました。グラデーションのかかった画像を使い、立体感を出しています。

Windowsとのお作法の違い

ソフトウェアの操作法には「お作法」があります。つまりWindowsはWindowsらしく、ケータイはケータイらしく、MacはMacらしく、共通の操作性を持たせなければならない、ということです。

MacとWindowsでは「設定画面」に関するお作法が全く違います。Windowsでは、設定ダイアログの「OK」ボタンを押すまで、変更は反映されません。ところが、Macの設定ダイアログには「OK」ボタンも「キャンセル」ボタンも無く、ユーザーの操作はリアルタイムに反映されるのです。

Microsoft Windows XP-1.png

Mac OSには、こうした操作を支える「バインディング」という仕組みがあります(上記の2冊の参考書では全く触れられていません)。この仕組みを使うと、設定ダイアログへの値の割り当て、ユーザー操作の反映、データの保存と読み込みまで、すべて面倒を見てくれます(解説)。(2009/05/05追記:Apple 日本語ドキュメント集のページにある、Cocoaセミナー上級編の動画+資料が、バインディングの自学習にとても便利でした)

Mac Dialog.jpg

もちろん、設定ダイアログのデザインにも「Windowsっぽさ」「Macっぽさ」があります。OS付属のアプリケーションなどを参考に、ダイアログの画面を設計していきます。

あとは「かわいいアイコン」を作るだけ

WindowsアプリとMacアプリには色々な操作法の違いがありますが、一番の違いは「アイコンの美しさ」だと思います。Mac版VDTタイマーにも、最後の仕上げとして、Macの画面になじむかわいらしいアイコンを作る予定です。

Ruby on Railsのセミナーを行います

2008年1月22日(火)に(株)ウェブキャリア様が主催する「Ruby on Rails」のセミナーで講師を務めることになりました。(株)ドリコム主催のAward on Rails 2007で大賞をいただいた「hakatter」の開発についてお話する予定です。セミナーは無料です。興味のある方はぜひご参加下さい。

※イラスト中のロゴはAward on Rails 2007のもので、セミナーとは関係なかったりします。副賞としてシールを大量にいただいたので、あちこち貼りまくっているのです(笑)。

Ruby on Rails: GetTextを用いてiso-2022-jpの日本語メールを送信

Ruby on RailsではActionMailerというクラスを用いて簡単にメールを送信できます。デフォルトの文字コードはUTF-8ですが、ユーザーの環境によっては文字化けするため、標準的なiso-2022-jpを用いたいと思います。手っ取り早く日本語化するにはGetTextを使うと便利です。特に変換処理をしなくても、subjectやfrom欄なども正しくエンコードされます。

(1) GetTextのインストール

ターミナル画面で「sudo gem install gettext」コマンドを実行してGetTextをインストールします。Windows環境ではコマンドプロンプトから「gem install gettext」です。

(2) ソースの書き換え

メール送信を行うActionMailerクラスのソースファイル(例: app/model/notify_mailer.rb)を開き、次の赤文字のコードを追加します。

require ‘gettext/rails’
GetText.locale = ‘ja’

class NotifyMailer < ActionMailer::Base
def setup_email(email)
■■@recipients = “#{email}”
■■@from = “難波克行 <electricdoc@gmail.com>”
■■@sent_on = Time.now
■■@headers['Content-Type'] = “text/plain; charset=iso-2022-jp; format=flowed”
end

Award on Railsの副賞をいただきました

(株)ドリコムさまからAward on Railsの副賞をいただきました。スタッフTシャツとステッカー、それから「株式会社ドリコム フェロー」と書かれた名刺です。Wikipediaによると、フェローというのは「特別研究員」のことだそうです。うーむ、こんなものをいただいてしまったら、特別なことをいろいろやらないといけませんね(笑)。

特別なこと……かどうかはわかりませんが、現在「VDTタイマー」の効果評価を実施する準備をしています。某企業の従業員から募集した参加者を「VDTタイマーを使用するグループ」と「使用しないグループ」にランダムに振り分け、開始時、1ヶ月後、2ヶ月後にアンケート調査を行って結果を比較します。

こうした調査を行うと、かなりの手作業が発生します。今回はRuby on Railsでシステムを作って省力化(無人化)をはかりました。ただし、メールを一括送信する処理がうまくいかなかったので、そこだけはFileMakerを用いることにしました。

このサイトは一般に公開するものではありませんが、調査結果については公に発表する予定です。以上、Ruby on Railsに関連した「ちょっとだけ特別なこと」をお伝えしました。