Mac で選択したテキストのURL短縮できると便利だと思って、調べてみると bit.ly の API を使って Apple Script で実装されたやつは見つかったんですけど、 API key が必要なのは面倒だし Apple Script はいやなので goo.gl を利用するサービスを shell と ruby で書いてみました。
このサービスは選択したテキスト(URL)を短縮して置換します。元のURLは念のためにクリップボードに保存します。
テキストを置換するので、編集可能なテキストしかダメなので、逆に短縮 URL をクリップボードに保存したい人は改造してください。
Automator で作ったサービスは裏で "/System/Library/CoreServices/Automator Runnder.app" を起動して実行するんですけど、コイツの起動が遅いのでメニューバーに常駐する app がサービスを提供する感じにしたほうが速くなると思うのでそのうちに...。
goo.gl の API は ApiKey 無しではあんまり頻繁に実行するとダメかもしれないので、ヘビーに使う人は goo.gl API の詳細: Getting Started - Google URL Shortener API - Google Code を見て自分の ApiKey を設定してみたりしてください。
ちなみにこの記事のコード部分には gist を使ってるんですけど、gist への投稿もサービスでできたら(たぶん使わないけど)便利だと思いましたが、 gist を作成する API は Coming soon だそうです (2011-04-19 現在)。
Showing posts with label Mac OS X. Show all posts
Showing posts with label Mac OS X. Show all posts
Tuesday, April 19, 2011
Monday, February 28, 2011
smart pointers for Core Foundation style references
iOS や mac のアプリケーションを書くときに Objective-C を使うときでも、 Core Graphics などの C の API を使うときは CGImageRef などのリファレンスの開放とか面倒です。特に関数の途中で return したり、C++ のライブラリを使用するときの例外処理を考えるとウンザリです。メモリリークのリスクも高まるし。
Objective-C のオブジェクトなら最初に autorelease しておけばいいんですけどね(iOS でなければガベージコレクションも使えるし)。
そんなときは C++ のテンプレートで smart pointer 的なリファレンスのラッパーを書けば、ことあるごとに XXXXRelease(ref) しなくて済みます。
これで、こんなふうに書けるようになります。
Objective-C のコードで C++ のコード使う場合(Objective-C++)は、拡張子を .mm に変えるを忘れずに。
void doSomething(void) {
CGImageRef image = CGImageCreate(......);
// do something...
if (some condition...)
CGImageRelease(image);
return;
}
try {
CPlusPlusClass::aFunction()
} catch (...) {
CGImageRelease(image);
return;
}
// use image...
CGImageRelease(image);
}
Objective-C のオブジェクトなら最初に autorelease しておけばいいんですけどね(iOS でなければガベージコレクションも使えるし)。
そんなときは C++ のテンプレートで smart pointer 的なリファレンスのラッパーを書けば、ことあるごとに XXXXRelease(ref) しなくて済みます。
これで、こんなふうに書けるようになります。
#include "AutoRef.h"
void AutoRefRelease(CGImageRef ref) { CGImageRelease(ref); }
void doSomething(void) {
AutoRef image = CGImageCreate(......);
// do something...
if (some condition...)
return;
}
try {
CPlusPlusClass::aFunction()
} catch (...) {
return;
}
// use image...
}
Objective-C のコードで C++ のコード使う場合(Objective-C++)は、拡張子を .mm に変えるを忘れずに。
Tuesday, November 3, 2009
Unofficial Google Wave Notifier for mac 0.4 and the notification wave

I'v just released version 0.4 of Unofficail Google Wave Notifier for mac.
Also, if you wanna be notified about new releases, join The "unoffical google wave notifier for mac" notification wave.
CHANGELOG
* Open a specific wave immediately by clicking a wave in the menu
* Display "Checked N min ago" biside "Check Now" like "Google Notifier"
Sunday, October 18, 2009
Unofficial Google Wave Notifier for mac
2009-11-17: If you have any idea, feel free to issue a feature request, or vote them (the small triangle at bottom-left corner of a item)
2009-11-3: version 0.4 released

I wolud like to know whether I have unread messages at Google Wave or not, like Google Notifier for Mac for GMail and Google Calendar. I could find Google Wave Add-on for Firefox at That Smith. So I implemented one as referencing the add-on. Thank you Chad at That Smith.
You can download it form Downloads for hiroshi's Unofficial-Google-Wave-Notifier - GitHub. Before download it, be sure that is makes NO WARRANTY.
2009-11-3: version 0.4 released

I wolud like to know whether I have unread messages at Google Wave or not, like Google Notifier for Mac for GMail and Google Calendar. I could find Google Wave Add-on for Firefox at That Smith. So I implemented one as referencing the add-on. Thank you Chad at That Smith.
You can download it form Downloads for hiroshi's Unofficial-Google-Wave-Notifier - GitHub. Before download it, be sure that is makes NO WARRANTY.
Google Wave の新着通知も Google Notifier for Mac のように通知されたいのですが、探しても Google Wave Add-on for Firefox at That Smith しか見つからなかったので、その Add-on のソースを参考にして作ってみました。
Downloads for hiroshi's Unofficial-Google-Wave-Notifier - GitHub からダウンロードできます。
Downloads for hiroshi's Unofficial-Google-Wave-Notifier - GitHub からダウンロードできます。
Sunday, December 14, 2008
PDFPack.app
名刺をデザインしてA4の用紙に複数面割り付けて印刷しようと思ったけど、どうすればいいのかわからない。
DTPの知識(と高価なソフトウェア?)があれば簡単なことだろうとは思うけれど、適切なフリーソフトも見つからない。Mac OS X プリンタダイアログ標準のレイアウト機能の複数ページを1枚に割り付ける方法ではあらかじめ同じデザインのページのコピーを作成してPDFなどにまとめる必要があるし、そもそも名刺などの場合はサイズが重要なので1ページ分の出力サイズを指定できないので使えない。
やりたいことは実にシンプルで、名刺やカードなど小さいサイズで同じデザインのものを、出力する用紙(A4など)1枚に対して複数印刷したいだけなので、RubyCocoa のリハビリを兼ねて、その目的を達成するためだけのフィルターのようなツール PDFPack.app を作ってみました。
単体のアプリケーションとしても動きますが、インストールすると PDF Service (プリントダイアログの左下の "PDF" ボタンで出てくるメニュー)として登録されるので、以下のような使い方ができます。
1. カードをデザインするツール (僕は OminiGraffle を使いました)のページ設定(新しいアプリケーションではプリントダイアログに統合されているようです)の用紙サイズのカスタムサイズを管理で 5.5 x 9.1cmの用紙を追加して選択
2. そのサイズにあわせて名刺をデザインしてプリントダイアログ(Cmd+P)を開いて、PDFメニューから "PDFPack" を選択

3. PDFPack.app が起動するので必要ならマージンを調整して印刷

ちなみに、用紙はエーワンマルチカード#51002、プリンタはHP Deskjet 5551を利用。このA4サイズの用紙では 5.5x9.1cm のサイズを10面印刷するときに左右の余白は1.4cm、上下の余白が 1.1cm になるのですが、PDFPack のバグかプリンタの仕様か、bottom margin を 0.9cm と 0.3mm 小さく設定しないとうまい具合に印刷できませんでした。
蛇足ですが、似たようなツールに Hipster PDA を印刷する PagePacker というものがあります。PDFPack も1枚の紙に異なる種類のカードを印刷できると便利かもしれません。
DTPの知識(と高価なソフトウェア?)があれば簡単なことだろうとは思うけれど、適切なフリーソフトも見つからない。Mac OS X プリンタダイアログ標準のレイアウト機能の複数ページを1枚に割り付ける方法ではあらかじめ同じデザインのページのコピーを作成してPDFなどにまとめる必要があるし、そもそも名刺などの場合はサイズが重要なので1ページ分の出力サイズを指定できないので使えない。
やりたいことは実にシンプルで、名刺やカードなど小さいサイズで同じデザインのものを、出力する用紙(A4など)1枚に対して複数印刷したいだけなので、RubyCocoa のリハビリを兼ねて、その目的を達成するためだけのフィルターのようなツール PDFPack.app を作ってみました。
単体のアプリケーションとしても動きますが、インストールすると PDF Service (プリントダイアログの左下の "PDF" ボタンで出てくるメニュー)として登録されるので、以下のような使い方ができます。
使用例として名刺を印刷する場合
1. カードをデザインするツール (僕は OminiGraffle を使いました)のページ設定(新しいアプリケーションではプリントダイアログに統合されているようです)の用紙サイズのカスタムサイズを管理で 5.5 x 9.1cmの用紙を追加して選択
2. そのサイズにあわせて名刺をデザインしてプリントダイアログ(Cmd+P)を開いて、PDFメニューから "PDFPack" を選択

3. PDFPack.app が起動するので必要ならマージンを調整して印刷

ちなみに、用紙はエーワンマルチカード#51002、プリンタはHP Deskjet 5551を利用。このA4サイズの用紙では 5.5x9.1cm のサイズを10面印刷するときに左右の余白は1.4cm、上下の余白が 1.1cm になるのですが、PDFPack のバグかプリンタの仕様か、bottom margin を 0.9cm と 0.3mm 小さく設定しないとうまい具合に印刷できませんでした。
蛇足ですが、似たようなツールに Hipster PDA を印刷する PagePacker というものがあります。PDFPack も1枚の紙に異なる種類のカードを印刷できると便利かもしれません。
Tuesday, July 22, 2008
EmacsClient.app
僕はソースコードの編集に、Leopard に最初から入っている emacs を使ってます。
Leopard のターミナルでは日本語の入力も問題なくできるのですが、 ネイティブアプリケーションのように Dock アイコンにファイルをドロップすることでファイルを簡単に開けないので、find-file のミニバッファの内容を空にしてからターミナルのウィンドウにファイルをドロップしなければならないのが面倒です。
AquaEmacs, CarbonEmacs などを使えばドラッグ&ドロップも問題ないのですが、なんとなく余計なものを入れたくないので emacsclient を実行するだけの簡単なアプリケーションをつくればいいかな、誰か作ってないかなと "EmacsClient.app" を探したところ、 Platypus というスクリプトを実行するアプリケーションを簡単に作成できるツールを見つけました。
以下のようなシェルスクリプトを作成して、
emacsclient.sh
スクリーンショットのような設定で、"Create" するだけで

EmacsClient.app が生成されます。
あ、すでに開いている emacs で M-x server-start するのをお忘れなく。
Leopard のターミナルでは日本語の入力も問題なくできるのですが、 ネイティブアプリケーションのように Dock アイコンにファイルをドロップすることでファイルを簡単に開けないので、find-file のミニバッファの内容を空にしてからターミナルのウィンドウにファイルをドロップしなければならないのが面倒です。
AquaEmacs, CarbonEmacs などを使えばドラッグ&ドロップも問題ないのですが、なんとなく余計なものを入れたくないので emacsclient を実行するだけの簡単なアプリケーションをつくればいいかな、誰か作ってないかなと "EmacsClient.app" を探したところ、 Platypus というスクリプトを実行するアプリケーションを簡単に作成できるツールを見つけました。
以下のようなシェルスクリプトを作成して、
emacsclient.sh
/usr/bin/emacsclient -n "$1"
スクリーンショットのような設定で、"Create" するだけで

EmacsClient.app が生成されます。
あ、すでに開いている emacs で M-x server-start するのをお忘れなく。
Tuesday, July 1, 2008
Getting wherefrom of downloaded files
Mac OS X の Safari でファイルをダウンロードすると、ファイルのメタデータとして "where from" という情報が保存され、「あれーこのファイルどこから取ってきたんだっけ?」という疑問に答えてくれます。
Finder の情報を見る確認することはできるんですけど、残念ながら選択してクリップボード(ペーストボード)へのコピーができません。

そういうときは、ターミナルで、 "mdls" + スペースを入力してから、ダウンロードしたファイルをターミナルにドロップすると...。
Finder の情報を見る確認することはできるんですけど、残念ながら選択してクリップボード(ペーストボード)へのコピーができません。

そういうときは、ターミナルで、 "mdls" + スペースを入力してから、ダウンロードしたファイルをターミナルにドロップすると...。
$ mdls /Users/hiroshi/Desktop/Velocity/High\ Performance\ Ajax\ Applications\ Presentation.ppt
....
kMDItemWhereFroms = (
"http://en.oreilly.com/velocity2008/public/asset/attachment/1956",
"http://en.oreilly.com/velocity2008/public/schedule/proceedings"
)
Saturday, January 12, 2008
Resolving IP address for Mac, Linux and Windows each other by names
(ルーターを介さない)同一セグメント内ならば、 Mac 同士は DNS や hosts に登録しなくても "hiroshi-macbook.local" のような名前で IPアドレスを解決できます。 Mac を使っている人にとっては当たり前なので、Linux や Windows のホストにアクセスするときに環境によってはコロコロと変わる IP アドレスを指定しなければならないとストレスが溜まります。
Debian Etch, CentOS 5, Windows でその問題を解決する方法を紹介します。
Avahi Daemon をインストール
これで、同じネットワークセグメント内の Mac などから、hiroshi-etch.local という名前でアクセスできるようになります。
逆に Linux から他のホストの名前解決ができるようにするには、
nss-mdns のパッケージは無いようなので、(nss-mdns)
/etc/nsswitch.conf の "hosts:" の行を以下のように書き換える (詳細は README を参照)
これで、他の .local ホスト名を解決できるようになる。
Apple から Bonjour for Windows をダウンロードしてインストールすればOK。
iTunes をインストールしていれば自動的に入っているはず。
Debian Etch, CentOS 5, Windows でその問題を解決する方法を紹介します。
Debian Etch
Avahi Daemon をインストール
$ sudo apt-get install avahi-daemon
$ uname -a
Linux hiroshi-etch 2.6.18-5-686 #1 SMP Mon Dec 24 16:41:07 UTC 2007 i686 GNU/Linux
これで、同じネットワークセグメント内の Mac などから、hiroshi-etch.local という名前でアクセスできるようになります。
$ ssh hiroshi-etch.local
逆に Linux から他のホストの名前解決ができるようにするには、
$ sudo apt-get install libnss-mdns
CentOS 5
$ sudo yum install avahi
nss-mdns のパッケージは無いようなので、(nss-mdns)
$ curl -O http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.10.tar.gz
$ tar xzf nss-mdns-0.10.tar.gz
$ ./configure
$ make
$ sudo make install
/etc/nsswitch.conf の "hosts:" の行を以下のように書き換える (詳細は README を参照)
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
これで、他の .local ホスト名を解決できるようになる。
Windows
Apple から Bonjour for Windows をダウンロードしてインストールすればOK。
iTunes をインストールしていれば自動的に入っているはず。
Subscribe to:
Posts (Atom)
