Pages

ラベル Mac の投稿を表示しています。 すべての投稿を表示
ラベル Mac の投稿を表示しています。 すべての投稿を表示

2011-09-20

Macのロジックボードを交換してもらいました

MacBook Pro Early 2008のロジックボードを交換してもらいました。タダで。

事の始まりは先々週の金曜日くらい。突然画面が乱れてフリーズするようになって、翌日には起動画面でフリーズするように。

仕方ないので先週の火曜日に渋谷のジーニアスバーに。ここで再現しなかったら恥ずかしいなーとか思いつつジーニアスな姉ちゃんに見せると起動画面フリーズを見事に再現。外付けディスクから起動するとカーネルパニックを起こすオマケ付き。

ジーニアスな姉ちゃんがいろいろ調べていくうちに、「GPUに問題がありますねえ」と一言。GPU?GPUっすか!?

私「GPUですか?」

ジ「はい」

私「GPUっていったら……アレですね?」

ジ「はい、アレですね」

アレっていったら、NVIDIAが盛大にやらかしてくれたアレのことですよね。アレ。

というわけで、ロジックボードを無償交換してもらいました。先週の火曜日に預けて今日引き取ったので、ちょうど一週間。ジーニアスな姉ちゃんが「一週間くらいかかりますね」とか言ってたけどその通りでした。

ハードディスクの中身もちゃんと残ってたし、時計がリセットされてたくらいで他は元通りのMacになって帰ってきました。めでたしめでたし。

2011-06-21

Xcodeのビルド完了をサウンドで知らせる

突然ですが、MSDNからWindows Azure公認キャラクターのイラストやサンプルボイスが入手できるようになったことが一部で話題になってたりするので、せっかくなのでこのサンプルボイスをXcodeでのビルド完了時に自動的に鳴らすようにしてみましょう。

手順1:MSDNからサンプルボイスが入ったzipをダウンロードして展開。

手順2:Xcodeでビルド完了を通知したいターゲットを選んで「新規ビルドフェーズ→新規スクリプトを実行」を選択。スクリプト欄に以下を入力

afplay {サンプルボイスへのパス}

ちなみに33build.wavにすれば「ビルド完了!」って言ってくれる。作ったビルドフェーズは一番下においておく。こんな感じ↓

Claudia Xcode build

あとは普通にビルドすれば、完了時に「ビルド完了!」ってお知らせしてくれます。

……いや、だって、「ビルド完了」なんて言ってるボイスってこれくらいしか使い道がないじゃないですかこれ。

2010-12-10

iCalと連携するカレンダーアプリ “Caliander"

Little Marauderが、CalianderというOSX用アプリのβ版を公開していました。iCalとデータを共有するカレンダーアプリで、横方向に伸びるバーで視覚的に予定を確認することができます。正式版はシェアウェアになるそうです。

Caliander 1

Calianderの特徴は、簡単に予定を作成できることです。cmd + Nをタイプすると、予定作成のためのパネルが現れます。

Caliander 2

ここで、Descriptionフィールドにフォーカスがあたっているので、そこにそのまま“tomorrow 13:30 - 14:30 会議"と入力します。すると、パネル上部の日時欄やタイトル欄が自動的に埋まります。

Caliander 3

OKボタンを押すと、その予定が登録されます。

Caliander 4

長々と書いてしまいましたが、予定を登録するために行ったことは、cmd + Nをタイプして“tomorrow 13:30 - 14:30 会議"を入力し、returnをタイプしただけで、iCalよりも大分手順が短縮されていて、すばやく予定を追加することができます。開発元は5倍早いと謳っています。

予定は横方向の棒状に表現されますが、この縮尺はマウスをドラッグすることで変更できます。このときの動きもなかなか気持ちいいです。

Caliander 5

なお、現バージョンでは、iCal上で「委任」と表示されるカレンダーは扱えないので、Googleカレンダーをバリバリ使っているような人には使い辛いかもしれません(おそらくCalendarStoreフレームワークの制限によると思われます)。

2009-12-09

Google Chrome for Mac β を試してみました

ついにGoogle Chrome for Mac betaが公開されたので、早速試してみました。以前からあった非公式ビルドを試した方も多いとおもうので、Chromeの特徴的な機能を紹介するのはやめておいて、今回のβ版で気になった点を2つ書いておきます。ちなみに今回のβ版はv4.0.249.30となっています。

拡張機能(エクステンション)非対応

SafariにはないChromeの特徴として拡張機能がありますが、現時点ではMac版はこれに対応していません。chrome://extensions/にアクセスすると「ギャラリーから探しますか?」と聞かれてChrome Extensions Galleryに飛ぶことができますが、そこで "Google Chrome Extensions are not supported on Mac yet. We are working to enable them soon." と言われてしまいます。将来的には利用できるようになりそうです。

Chrome Mac not support Extentions

表示が崩れる

SafariもChromeもレンダリングエンジンにWebKitを採用しているのでほとんど表示は同じになりますが、ChromeのWebKitはGoogleが独自に手を加えたものなので、微妙に違う結果になることがあります(Chromeの結果が崩れる)。

Safari & Chrome difference

これはTwitterのサイト上の一部のスクリーンショットで、上がSafari、下がChromeです。Chromeではこんな感じで表示が崩れる箇所が少なからず見られます。まあ実用上はあまり問題ありませんが。

まあ悪い点2つを挙げてしまいましたが、基本的にはいいブラウザです。Gmailがメチャメチャ早くなります。とりあえず試してみてはいかがでしょうか。Intel専用、Leopard以降のMacに対応しています。

2009-12-06

Save Panel Extender 2.0公開

しばらくアップデートしていませんでしたが、Save Panel Extender (SPE) 2.0を公開しました。今回のバージョンではシステム環境設定のパネルが追加されています。

SPE v2.0 Screenshot

この環境設定で設定できるのは、SPEを読み込むアプリケーションの制限。SPEはアプリケーションをハックして実現しているものなので、中には不具合が生じるアプリケーションもあります(OpenOffice.orgなどが既に確認済み)。そういうアプリケーションはSPEを読み込む対象から除外しておくことで不具合を回避することが出来ます。

当然、不具合回避だけが目的じゃなくて、「俺はテキストエディットでは絶対に追加オプションは使わないんだ!」的な場合にも役に立つ設定になっています。

2009-12-04

OpenMetaに関する日本語情報サイト

唐突ですが、日本語で書かれたOpenMeta情報サイトOpenMeta.netを公開しました。内容はまだまだ少なく、まだOpenMetaに初めて触れる人向けの情報が少しあるだけですが、将来的にはもっと内容を増やしていきたいと思っています(活用法とか開発者向け情報とか)。OpenMeta自体がまだまだ発展途上で利用者もあまり多くないみたいなので、これが少しでも何かの役に立てればいいかなと思います。

2009-10-28

キーボードランチャ Auftakt が便利

いとーけーのページで、Auftaktというキーボードランチャが公開されていました。シンプルさがウリのキーボードだけで操作できるランチャです。

OSXでキーボードランチャといえばQuicksilverが有名ですし、最近ではGoogle Quick Search Boxなんてのも人気を集めてます。私自身も昔はQuicksilverを使っていましたし、Macを買い替えてからは一時期QSBを使っていました。ただ、QSBはときどき動作が重くなるのが嫌で最近はアプリケーションの起動にSpotlightを使うようになっていました。

ただ、Spotlightもたまにもたついたり、アプリケーション以外の検索結果がトップヒットにくるとわざわざアプリケーションまでカーソルを移動させなきゃいけないのが面倒でした。

それに対して、Auftaktは指定したディレクトリ以下(アプリケーションがインストールされるディレクトリはデフォルトで設定されています)からアプリケーションだけを素早く探してくれるので非常に便利です。設定次第でiTunesを"itns"のようにタイプミスしてもちゃんと探してくれるなど、シンプルながら便利な機能も備わっています。

アプリケーションランチャに軽快さが足りないと思っていた人はぜひ試してみてはどうでしょうか。

2009-10-22

Save Panel Extenderがファイルの保存を感知している方法

先日公開したSave Panel Extenderの動作原理についてちょっと書きたいと思います。特にファイルの保存を検知するあたり。OMSavePanelのときもどこかで書いたかもしれませんが、だいたい同じです。

SPEでは、保存パネルの保存ボタンが押されるとそのイベントをアプリケーションより早く拾い上げて、ユーザが指定したファイル名を取得します。いわゆるMethod Swizzlingを用いてアクションの中に割って入っているわけです。

保存先のファイル名がわかったら、ファイルシステムイベントAPI (FSEvents) を使って監視体勢に入るわけですが、このFSEventsはディレクトリ単位での監視しかできないので、とりあえず親ディレクトリを監視登録します。

ディレクトリの内容が変更されるとFSEventsのデーモンがそれを検知して通知してくれるわけですが、この変更が対象ファイルの保存によるものなのかはわかりません。新規保存ならファイルが存在するかどうかで保存したかどうかがわかりますが、既存のファイルを置き換えて保存する場合にはそれではうまくいきません。そこで、SPEではファイルの更新日が新しくなったかどうかをチェックして、保存されたかどうかを判定し、そこからオプションの適用を行っています。

おそらくこういった作業をするにあたってはごく普通の手順だと思いますが、いくつか弱点があって、ファイルの更新日が古い日付のままだったり、FSEventsがディレクトリ内容の変更を検知しなかったりしたらオプションの適用は失敗してしまいます。そんなケースがあるのかは知りませんが。

2009-10-18

Save Panel Extender 公開

Save Panel Extenderというものを公開しました。保存パネルを拡張するSIMBLプラグインです。

SPE Screenshot

スクリーンショットを見てもらえればわかるかもしれませんが、立ち位置としてはOMSavePanelのSnow Leopard対応版といえば近いかもしれません。ただ、Save Panel ExtenderはOpenMetaタグの付与にとどまらず、その他の追加的なオプションにも対応していきたいと思っています。

とりあえず、今回のリリースではOpenMetaタグの他に、デフォルトアプリケーションの設定に対応しています。Snow Leopardになってクリエータコードが無視されるようになって不便極まりい思いをしていた人は、これで少し気楽になれるかもしれません。

OpenMetaについても、タグの消失問題に暫定的な対応がなされている現時点での最新仕様に対応しています。

2009-10-09

Snow LeopardにてOpenMetaメタデータが消える可能性

GoogleのOpenMetaグループに、Tagsなどで知られるGravity Appsの開発者の一人、MartinからSerious Problem with Extended Attributes on Snow Leopardと題されたメッセージが投稿されました。以下は勝手な要約です。

  • やべー、Snow Leopardでは拡張属性(OpenMetaで使われているファイルシステムの機構)がヤバいことになってるよ。
  • Leopardではアプリがファイルに書き込みするときはOSが拡張属性の内容を保護してくれたけど、Snow Leopardはダンマリ無視してきて、消えちゃうよ。
  • 拡張属性の保持はアプリ側で面倒みろってことね。でもわざわざ拡張属性に注意して内容を保持してくれるアプリなんてないよね。
  • Spotlightは以前のタグをインデックスしてくれてるから検索にはひっかかるけど、そのファイル自身にはタグがついていないかも。
  • OpenMetaのバックアップ機構(過去エントリ参照)のおかげで、消えても(OMバックアップ対応アプリを使っていれば)自動的に復旧できるけどね。まあ、ファイル名変えたり移動させちゃったらおしまいだけど。

原文にはもう少し細かな事例が載ってたりしますが、基本的にはこんな感じです。一通り問題が示されたあと、暫定的な解決策としてSpotlightコメントにも同じタグを書き込むのはどうよ?みたいな提案もありました。OpenMetaのウリの1つが「Spotlightコメントと違って簡単に消えない」だった(と思う)のですが、今回は逆の結果になってしまいました。どちらにせよOpenMetaを利用してファイル整理をしている方は十分に気をつけてください。

2009-10-05

ゆびがき 2.0公開

先日公開したマルチタッチトラックパッドによる手描きメモツール、ゆびがきをアップデートしました。ゆびがきのウェブサイトからダウンロードできます。

ゆびがき v2.0

前バージョンでは、描いたメモはその場でコピーして他のアプリケーションに貼付けて利用できましたが、v2.0では新たに「ライブラリ」機能を搭載しました。この機能を利用すると、描いたメモをゆびがき内に保存し、後から編集したりコピーしたりできるようになります。

あと、フルスクリーン周りを書き直しました。NSViewの- enterFullScreenMode:withOptions:はいろいろと不安定っぽいので。

2009-10-03

ゆびがき:マルチタッチで手書きメモ

個人的な必要性に迫られてアプリを1つ作りました。トラックパッドをキャンバスに見たて、指でなぞるとそれがそのまま画面上に線として描かれるアプリです。

「ゆびがき」の詳細

大学の授業が後期に入って、Evernoteを使ったノート取りに挑戦したんですが、そのときに困ったのが図形。授業中だからノートは素早く取らなきゃいけないけど、Macの図形作成アプリ(OmniGraffleとか)を使った図形作成って意外と時間がかかる。そこでこのゆびがきの出番。これなら素早く図形が描ける(当社比)。手書きだから当然きれいには描けないけど、スピードが重要な場面ではけっこう役立つはず。

2009-09-05

Snow Leopardで利用可能になったAppleScriptObjC

あまり注目されてませんが、Snow LeopardではAppleScript周辺の事情もそれなりに大きく変わっています。まず、AppleScript Studioが正式に非推奨となりました。10.2 Jaguarの頃に「AppleScriptでCocoaアプリが作れる!」と鳴り物入りで登場したAppleScript Studioですが、実際に使ってみると非常に使い辛かったり、できることが限られて、結局はObjective-Cで実装しAppleScriptからはcall methodするといった感じでAppleScriptだけで完結できないことが多々ありました。PantherやTigerの頃になるとほとんど機能追加もされなくなり、いずれ消えるだろうとはあちこちで言われてましたが、今回のアップデートでその幕を閉じることになりました。ちなみに、Interface BuilderからもAppleScript Studioに関する設定画面などは消えていますが、一応隠し機能として残っていてターミナルに次の内容を入力することで復活できます。

defaults write com.apple.InterfaceBuilder3 IBEnableAppleScriptStudioSupport -bool YES

で、終わりを迎えたAppleScript Studioの代わりに新しく登場したのがAppleScriptObjC。名前からも想像できるように、AppleScriptとObjective-Cを結ぶブリッジで、RubyCocoaやPyObjCのAppleScript版みたいなもの。こいつはAppleScript Studioのようにあらかじめ容易された範囲の中でしか使えないものとは違って、Cocoa/Objective-Cでできることは全部できちゃうスグレモノ。これで、AppleScriptはわかるけどObjective-Cはわからない、って人でもやっとマトモにアプリケーションが作れるようになったわけです。

そして、これによるAppleScriptの文法的な新たな拡張は一切無し。既存の文法や構造を上手く使ってるので、今までAppleScriptを書いてた人はきっととっつきやすいはず(もちろん、スクリプトオブジェクトとかを普段からバリバリ使ってるようなAppleScripterは少ないかもしれませんが…)。Appleも「AppleScript Studioやってる人は早めにAppleScriptObjCに移行すべし」とアナウンスしていますし、AppleScripterな人は試してみてはどうでしょうか。

2009-08-31

OMWizard 1.3 Snow Leopard対応版

Snow LeopardにしたらOMWizardが起動しなくなったので、その対応版です。ちょっと細かい挙動も修正しましたが、新機能は特にありません。Download. Snow Leopard専用です。それ以前のシステムでは動きません。v1.2を使用してください。

OMWizard 1.3

OMWizardは、Macの中に散らばっているファイルやフォルダをOpenMetaのタグを使って簡単に探し出すためのアプリです。最初はタグのリネームアプリだったのに、いつのまにか検索用になってました。もちろんリネームもできます。

今回Snow Leopardで起動できなくなったのは、QuickLookの仕様が変わったから。プライベートAPIを使った弊害です。

Snow Leopardで利用可能になったAssociated Object

Leopardで大幅に手を加えられたObjective-Cのランタイムですが、Snow Leopardでもちょこっとだけランタイムに手が加えられました。それがAssociated Objectです。こいつはあるオブジェクトに対してキー付きで任意のオブジェクトをひも付けすることができるもので、ランタイム関数を使うことで簡単に扱えます。コードはこんな感じ。

id obj = ...;   // 任意のオブジェクト
NSString *key = @"key";    // キー

objc_setAssociatedObject(obj, key, @"value", OBJC_ASSOCIATION_RETAIN);

objc_getAssociatedObject(obj, key);   // → @"value" が取り出せる

objc_setAssociatedObject()で、オブジェクトに他のオブジェクトをひも付ける。2つ目の引数に取り出すときのキーを設定するんだけど、これはvoid *なので別にNSStringじゃなきゃいけないとかいうわけではありません。4つ目の引数はオブジェクトの扱い方。ここではOBJC_ASSOCIATION_RETAINを渡しているので、ひも付けたオブジェクトはretainされる(はず)。

取り出すときはobjc_getAssociatedObject()を使う。元のオブジェクトとキーを渡すことでひも付けたオブジェクトを得られます。ちなみにobjc_removeAssociatedObjects()なんてのもあって、オブジェクトのひも付けを解除できます。

で、どういう時にこのAssociate Objectが役立つかというと、カテゴリで既存のクラスを拡張する時。カテゴリではメソッドを追加できるけどインスタンス変数は追加できない、でも値を保持したいってときにこのAssociated Objectが役に立つはず。多分。今のところAppleのドキュメントにはどこにもこれに関する記述はありませんが、Square Signals : Your New Friends: Obj-C Associated Objectsのように参考になるエントリがいくつかあります。

Snow Leopardで利用可能になったブロック構文

Snow Leopardでは、C/C++/Objective-Cでブロック構文が使えるようになりました。今のところGrand Central Dispatchとともに語られることが多いようですが、GCD専用とかいうわけでは全然なくて、汎用的な無名関数とかラムダみたいな感じで簡単に使えます。こんな感じ。

void (^block)(id);

block = ^(id obj) {
    NSLog(@"%@", obj);
};

block(self);

これと同時にCocoaも拡張されていて、NSStringの- enumerateLinesUsingBlock:といったように、ブロックを引数として取るようなメソッドがいくつか追加されています。メソッドだけでなく新しいクラスも登場していて、NSBlockOperationのようにブロックを用いてNSInvocationOperationと同じようなことができるクラスも追加されています。

2009-08-29

Snow LeopardのNSTextViewでテキストの自動置換を有効にする方法

各所で話題になってるSnow Leopardですが、その中でちょっと嬉しいけど地味な新機能としてテキストの自動置換機能があります。正式名称はなんていうのか知りませんが、システム環境設定→言語とテキスト→テキストで設定できるアレです。テキストエディットとかでは使えるんですが、サードパーティのアプリはそれぞれが対応する必要があります。

対応と言っても大掛かりな実装は必要なく、テキストの自動置換機能を有効にしたいNSTextViewに対して- setAutomaticTextReplacementEnabled:YESを送ってやるだけです。これはSnow Leopardで新たに登場したもので、その名の通り自動置換を行うかどうかをセットするためのものです。ちなみにInterface Builderから"Text Replacement"にチェックをいれても変更できます。おお、簡単。

Snow Leopardでは他にもテキスト周りの新機能(スペルの自動修正とか)があり、それに関するメソッドがNSTextViewに追加されています。追加されたメソッドの一覧がADCで見られます。

2009-06-13

QSBでTwitter検索してみようじゃん

いつの間にか正式版が出てた我らがQSB (Google Quick Search Box) ですが、TechCrunchでQSBはTwitter検索ができないなんて言われちゃったから、できるようにしてみようじゃありませんか。幸いQSBはプラグイン機構を備えてるので結構簡単に実現できた。いつのまにかSDKも出てるし。

というわけでできたのがこのTwitter検索プラグイン。twitter検索のAPIを使ってるからちょっと重いけど、公式の検索APIは精度がお話しにならないのでこっちにしました。

Twitter Search on  QSBダウンロード / ソース

インストール方法は、ダウンロードしたzipの中身のTwitterSearch.hgsを~/Library/Application Support/Google/Quick Search Box/PlugInsに置いてQSBを再起動して環境設定からオンにするだけ。QSBのバージョンによっては起動時にプラグインを有効にするかどうかを問うダイアログが出てくるけど、そのまま有効にしちゃってください。

2009-05-27

書籍版「Dynamic Objective-C」

つい最近までマイコミジャーナルで連載されていたダイナミックObjective-Cの書籍版、Dynamic Objective-C の(HMDT本恒例?の)プレゼントキャンペーンが始まったみたいです。当選率が上がるようなのでちょこっと紹介させていただきます。

Webでの連載はCocoa初心者向けの入門記事みたいなのではなくて、Objective-Cを使ってる人がそのディープな領域にのめり込んでしまうような、そんな魅力を伝えてくれるもの。Objective-Cのランタイムの話だとか、実装はどうなってるかみたいな深い(そしてマニアックな)話題を提供してくれて、かなり読み応えがありました。中盤以降はGoFのデザインパターンをObjective-Cではどのようにして実装できるかかも解説されてます。

書籍版はWeb版と内容はほとんど同じらしいけど、やっぱり読みやすさは紙媒体が一番だと思うから欲しい。というわけで当たるといいなー…

2009-05-24

ホットキーを排他的に処理する

Macでホットキーを処理しようとするとたまに困るのがバッティング。基本的に、RegisterEventHotKey()を使って登録されたホットキーが複数のアプリケーション間で重複したときはその全てのアプリケーションにイベントが送られることになってる。AとBとCの3つのアプリケーションがそれぞれF2にホットキーを割り当ててたとすると、F2キーを押したときにその3つのアプリケーションでそれぞれ処理が行われるといった具合。

ところが欲張りなあなたはホットキーイベントを他のアプリに渡したくない、独り占めしたいと思うかもしれない。そんなあなたに贈るのがkEventHotKeyExclusive。Leopardで追加されたオプションで、これをRegisterEventHotKey()のの第5引数として渡せばホットキーイベントを独り占めできる。

ちなみにCarbon EventsのドキュメントはTigerの時のものだからこれに関する記述はありません。もうLeopardリリースから1年半経つのに…