WordPressのテーマを、GlossyBlueに変更

WordPress No Comments »

Hiroさんにコメントで教えていただいたおかげで、WordPressのフィードがうまく機能していないのを直すことができました。

せっかくなので、久しぶりにWordPressを弄ったついでに、テーマもカッコイイものに変えてみました。選んだthemeは、N.Design Studioさん制作の、GlossyBlue。プロのデザインしたテーマは、さすがに完成度が違いますね。

さらに、ソースコードに色を付けるために、google-code-prettifyと、WordPress用のプラグイン、Google Code Prettify for wordpresも導入してみました。

それから、Google Adsenseはブログからを撤去してみることに。なんだか、いかがわしい広告が表示されるのが、前から気になっていたので。代わりに、Amazonおまかせリンクを置いてみました。

読み込むファイル数がちょっと増えちゃいましたが、動作が重くなるようなら、追々対処していくことにします。

Carbonでプロセスを切り替え

Cocoa, Mac, ソフトウェア 7 Comments »

次のような動作を、ClipMenuで実現しようと思いました。

  1. ブラウザでURL (例: http://www.apple.com/)をクリップボードにコピー。
  2. エディタを起動。
  3. ClipMenuを呼び出して、さっきコピーしたURLを履歴から選び、JavaScriptで記述したアクションを実行。
  4. JavaScript内に書かれた、prompt()メソッドで表示されたダイアローグボックスに、タイトル (例: アップル)を入力。
  5. エディタに、JavaScriptで処理した結果 (例: <a href=”http://www.apple.com/” title=”アップル”>アップル</a>)をペースト。

JavaScript内に、prompt()などの、ウィンドウを表示させるメソッドを使わなければ、特に問題はありませんでした。ただ、クリップボードの文字列と、ユーザー入力の文字列を組み合わせた文字列処理を行いたかったので、いくつかの問題を解決する必要がありました。

最前面に、エディタのウィンドウが表示されている状態で、バックグラウンド専用(LSUIElement = 1)で動いているClipMenuからウィンドウを開くと、最前面にあったエディタのウィンドウの下に表示されてしまいます。

これを避けるために、Cocoaでは以下のメソッドを実行すれば、自分のウィンドウを最前面にすることができました。

[NSApp activateIgnoringOtherApps:YES];

ただ、この後にClipMenuが表示したウィンドウを閉じると、はじめに最前面にあったエディタのウィンドウが一番手前になりますが、フォーカスはあたっていません。そのため、このウィンドウにペーストすることができない状態になってしまいます。

ClipMenuが最前面になる前に、

  1. 最前面のウィンドウのIDを記憶
  2. ClipMenuを最前面に切り替え
  3. ClipMenuのウィンドウを閉じる
  4. さっき記憶したIDのウィンドウを最前面に切り替え

を行えば良さそうだと考えましたが、方法が分かりません。唯一思い浮かんだのは、AppleScriptを使ったものです。ただ、「AppleScriptで解決するのは最後の手段」と、メーリングリストで言っていた人もいたので、やはり他の方法を探すことに。

Xcodeのドキュメントで見当たらなかったため、例によって、Cocoabuilderで検索。見つかった方法は、Carbonの関数を利用するものでした。

» Cocoabuilder - (Edison Thomaz) Bring app to foreground in 10.5

ClipMenuを表示する直前に、GetFrontProcess()関数で記憶したProcessSerialNumberを、ClipMenuを閉じる際に、SetFrontProcess()関数で最前面に設定することで、望み通りの動作をさせることができました。

結構、Carbon APIを使わないと実現できない処理がありますね。

インターフェイスの作成に手間取る

Cocoa, Mac, ソフトウェア No Comments »

JavaScriptを使って、クリップボード履歴にある文字列を加工するテストがうまくいったので、環境設定パネルに、使用するマクロを選択できるインターフェイスを作成することにしました。

まず考えた方法が、チェックボックスの付いたリスト表示。Gmailなどでも使われていますね。チェックボックスを個別にチェックしたり、「すべてを選択」や「選択を解除」で、まとめてオン/オフすることもできます。

ただ、チェックボックスを連続してチェックしていくような単純作業は、数が多くなると苦痛なものです。見た目も、ちょっと野暮ったいですね。

次に考えたのが、TableView。NSTableViewは使ったこともあるし、二つのTableView間でドラッグ&ドロップすれば、チェックボックスも不要になります。

難点は、階層表示ができないこと。表示するマクロの数が少なければ問題ありませんが、そうでない場合に、一階層で多くのファイルを表示するのは見づらく感じます。

最終的には、OutlineViewを採用することになりました。これなら、階層表示ができますし、それをそのままメニュー内のフォルダとして利用することもできるからです。

ただ、これが思いの外大変で、予定よりずいぶん時間がかかる作業になってしまいました。

Cocoa Programming』と「Theocacao: NSTreeController and Drag and Drop」を参考に始めて見たものの、なかなか思うような結果になりません。だいたい、ダミーのコードを使ったハックが必要だったり、非公開クラスの_NSArrayControllerTreeNodeを使用しないと、目的を達成できないというのも、何か変な気がします。Leopardでは改善されたようですが、Tigerでは結局中途半端な実装のままですし。

何とか望みの結果を達成できたのは、CocoabuilderのMLアーカイブのおかげです。

あと助かったのが、こちらの書き込み。

Appleの公開している、OutlineViewを使ったサンプルコード、SourceView。必要環境が”Xcode 3.0, Mac OS X 10.5″なので中身を見てなかったんですが、こちらのブログのエントリーを拝見してダウンロードしてみたところ、一部はTigerにも流用できることが分かりました。

初めは、Nodeクラスをつくる参考にしようと、BaseNodeを写経していたんですが、数カ所直してみたらTigerでもビルド可能なことが判明。Objective-C 2.0で採用された、”in”とNSIntegerを、NSEnumeratorやintに書き換えれば動くようになりました。

OutlineViewのセルにアイコンを表示することも、Leopardで採用された機能を使った、セパレータの表示以外は、TigerでもOKでした。どうして、アイコン画像をBaseNodeクラスが保持しているのか分からなかったので、変更を加えたりしたところもありましたが、基本的にはこのサンプル通りでうまくいきました。

これだけ手間取ると分かっていれば、こちらを後回しにして、リクエストのあった機能を実現させた方が良かった気もしますが、OutlineViewは他にも使い道があるので、これで良かったことにしておきます。定型文の管理インターフェイスも、これを使えそうです。

有用な情報を公開してくださっている方達に感謝です。

MacPortsがインストールできない

Mac No Comments »

久しぶりに、MacPortsで入れたプログラムをアップグレードしようとしたら、コマンドを間違えた :cry:

$ sudo port upgrade all

これだと、インストールしていないプログラムまでアップグレードしようとするみたいです。

正しくは、

$ sudo port upgrade installed

でした。延々、入れた覚えの無いプログラムをビルドしているから、おかしいと思ったんですが、しばらく気がつきませんでした。

不要なプログラムをアンインストールして、さらにアップグレードをやり直すのも面倒なので、MacPorts自体を再インストール。

と思ったら、また問題が発生。

MacPortsのサイトからダウンロードした、最新版(1.6.0)のインストーラで実行した、インストールスクリプトが、途中で止まってしまう。何度やり直してもダメなので、以前インストールに成功した、バージョン1.5.0を試してみても、同じ所から進みません。

最後の望みをかけて、ソースからインストールしてみたら、あっけなく成功。

インストールできなかった理由が分からないのがちょっと気にかかりますが、とりあえず一安心です。

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン