Macでicnsファイルをpngファイルなどに変換する方法

アプリケーションのアイコンをPowerdotで使おうと思ったときに,その方法を調べたので記事を書いておきます.

1. 変換したいicnsファイルを "/Developer/Application/Utilities/Icon Composer.app" で開く

2. メニューの "Edit > Copy" を選択する

3. Preview.app を開く

4. メニューの "ファイル > クリップボードから新規作成(⌘N)"を選択する

5. メニューの "ファイル > 保存(⌘S)" を選択する

あとは保存したい形式を選択すれば変換して保存してくれます.
変換できる形式は僕の手元の環境では,GIF,ICNS,JPEGJPEG-2000,Microsoft BMPMicrosoft アイコン,OpenEXR,PDF,PhotoshopPNG,TGA,TIFF でした.


上記は直接icnsファイルを変換したい場合(アプリケーションのアイコンなど)の手順ですが,フォルダに設定されたアイコンを変換したい場合は,上記の1.と2.の手順を,

1. 変換したいアイコンが設定されたフォルダを選択してメニューの "ファイル > 情報を見る(⌘I)" を選択する

2. 表示されたウィンドゥの左上に表示されているアイコンをクリックして選択してから,メニューの "編集 > コピー(⌘C)" を選択する

で置き替えればできるはずです.

では.

MacPortsでphp5-mysqlがインストールできない問題の解決方法

HDDの容量がのこり僅かとなってしまっていたので,最近クリーンインストールをしました.MacPorts経由でインストールした開発環境はバックアップが取れなかったので,開発環境を構築しようとコマンドを叩いていると,PHPMySQL Extensionをインストールするphp5-mysql packageがインストールできなかったため,その解決方法を探しました.


参考:
#26000 (php5-mysql 5.3.2 doesn't build with php5 5.3.3) – MacPorts
howto/InstallingOlderPort – MacPorts


この問題はMacPorts上のPHPのバージョンが@5.3.2から@5.3.3に上ったことで生じたようです.そのため,@5.3.2のPHPをインストールすることで解決することができました.


解決方法の概略は以下の通りです.
1. 過去のリビジョンからPHP5 @5.3.2のデータをcheckoutしてきます
2. ports directoryのバックアップを取ります
3. checkoutしたデータでports directoryを上書きします
4. PHP5をインストールします
5. php5-mysqlをインストールします

注意:

既にPHPやApache2をインストールしている場合は,一度uninstallした方がよいでしょう.
既にインストールされているpackageを探すには

$ port installed

特定のpackageが既にインストールされているか確認するには

$ port installed php5

uninstallを行うには,

$ sudo port uninstall php5

関連するpackageも同時にuninstallするには

$ sudo port uninstall -f php5

ついでにcleanしておくとより安全かと思われます.

$ sudo port clean php5

1. 過去のリビジョンからPHP5 @5.3.2のデータをcheckoutしてきます

直接ports directoryにインストールするのは危険なので,どこか別のところでcheckoutします.

$ cd ~/Desktop
$ mkdir ports
$ cd ports


MacPortsリポジトリhttp://svn.macports.org/repository/macports/trunk/dports,リビジョン番号は70350のようです(参考).
ですので,以下のようにしてcheckoutします.checkoutにはしばらく時間がかかります.

$ svn co -r70350  http://svn.macports.org/repository/macports/trunk/dports

2. ports directoryのバックアップを取ります

もともとあるports directoryのバックアップを取ります.ports directoryの場所は "/opt/local/var/macports/sources/rsync.macports.org/release/ports" のはずです.私はお手軽にFinderでデスクトップにコピーしてしまいました.

3. checkoutしたデータでports directoryを上書きします

checkoutしたデータを,先にバックアップを取った "/opt/local/var/macports/sources/rsync.macports.org/release/ports" に移動させます.checkoutしたデータは "dports" という名前になっているので,その中身を移動させる必要があります.ここもお手軽にFinderで行いました.ファイルの数が多いので,しばらく時間がかかります.
次に,上書きしたことをMacPortsに知らせるコマンドを叩きます.

$ cd /opt/local/var/macports/sources/rsync.macports.org/release/ports
$ sudo portindex

sudoを付けないと権限が足りずに失敗します.これもしばらく時間がかかります.
これで過去のリビジョンを対象にMacPortsがインストールを行ってくれるようになりました.

4. PHP5をインストールします

ここから先は一般的なインストールです.インストールしたいものが他にあれば,オプションを追加して構いません.

$ sudo port install php5 @5.3.2 +apache2

5. php5-mysqlをインストールします

手順4.と同様に,オプションを追加しても構いません.

$ sudo port install php5-mysql

以上です.
では.

Mac OS X でScala入門ログ(+SWT入門)

はてな界隈で賑わっていたので、気になっている方も多いのでは?

Ruby からScalaに乗り換えた15くらいの理由 - ヽ( ・∀・)ノくまくまー

Mac OS XScalaに入門してみたので、その軌跡を簡単に書いてログを残しておきます。


※ 僕はJava関数型言語も特に使える訳ではないので、一部情報が間違っているかもしれません
※ あくまでも入門ログなので、プログラムの解説は得にありません
※ 環境は以下の通りです
OS:Mac OS X 10.6.3
シェル:zsh 4.3.9 (i386-apple-darwin10.0)
MacPorts1.8.1
Java
1.6.0_17
Java(TM) SE Runtime Environment (build 1.6.0_17-*b04-248-10M3025)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed mode)

1. インストール

Scalaのウェブサイトからダウンロードすることも出来ますが、僕はMacPortsからインストールしました。お手軽です。
まだMacPortsを導入していない方はこちらをどうぞ

GUI世代のためのCUI入門以前 ー MacPorts導入方法


インストールはコマンド一発です。あとはrehashするだけ。

> sudo port install scala
> rehash

※ エラーが出た方もいるみたいです。こちらが参考になるかと思います。
Scalaのインストール - でぶろぐ


2. コマンドラインから遊ぶ

Scalaでも他の言語と同じように、コマンドラインで対話できます。

> scala
Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.6.0_17).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 1 + 1
res0: Int = 2

3. ファイルにプログラムを書いて遊ぶ

もちろん、普段はファイルにプログラムを書くことになると思います。ファイルの拡張子は ".scala" が一般的なようです。
手順は、

1) プログラムを書く ⇒ scalaコマンドで直接実行する
2) プログラムを書く ⇒ scalacコマンドでコンパイルする(classファイルを生成する) ⇒ scalaコマンドで実行する

の2手順があります(他にもあるかも)。
それぞれの手順に合せてプログラムの内容もちょこっと変えなきゃいけないので、基本的には2の方法を取るといいと思います。

ちなみに "scala" コマンドの実態は実はシェルスクリプトで、"java" コマンドを呼んだり前処理をしていたりしていました(場所は "/opt/local/bin/scala" のはず)。

> touch HelloWorld.scala
> vim HelloWorld.scala
(なにか書く)
> scalac HelloWorld.scala
> scala HelloWorld
> Hello World
// HelloWorld.scala
object HelloWorld extends Application
{
    println("Hello! World")
}

生成されるclassファイルの名前はobjectの名前です。
ちなみにscalacコマンドを通さない場合、単に

println("Hello! World")

と書くこともできます。

4. swingを使った例

そもそもScalaを始めたのは、「CUIGUIもウェブもこなせる!マルチプラットフォーム!しかもScalaって超クール!」という言語入門オタク的発想だったので、とりあえずswingを使って簡単なGUIアプリケーションを作ってみました。プログラム自体は下のブログを完全に参考にさせていただいて、解析などをしていました。
Swingのサンプル - etc9
※ 一応プログラムコードを載せさせていただきますが、内容は参考ブログ記事と同様です

import scala.swing._
import scala.swing.event._
import javax.swing.UIManager

object SimpleGUIApplicationHello extends SimpleGUIApplication
{
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())

    def top = new MainFrame 
    {
        title = "Swing with scala";
        contents = new BorderPanel {
            import BorderPanel.Position._
            add(label, Center)
            add(button, South)
        }
    }

    val button = new Button("Click")
    object label extends Label("Count:-") 
    {
        var count = 0;
        listenTo(button)
        reactions += {
            case ButtonClicked(button) => 
                count += 1
                text = "Count:" + count
        }
    }
}

5. SWTを使った例

SWT(The Standard Widget Toolkit)はJava標準の一環として提供するJavaGUIツールキット(Standard Widget Toolkit - Wikipedia)だそうです。
簡単に言えばSwingよりきれいにウィジェット(ボタン、チェックボックス、ラベル のようなもの)を使うことができて、抽象度が高くて使い易いんだとか。
また、SWTを通してOSのAPIを叩くこともできる、なんてこともあるので、僕はなるべくならSWTを使おうと思っているところです。


長くなりましたが、SWTを使うためにはSWTを入手する必要があります。


SWT: The Standard Widget Toolkit


ここのページ中程にある "Releases > Development" の "Mac OS X" のリンクからダウンロードしました。
ダウンロードしたzipファイルを解凍して、中にある "swt-debug.jar" と "swt.jar" を、"/opt/local/share/scala/bin" に設置すると、プログラムコード内でimportしたときに自動的に読み込んでくれます。
上記のパスはMacPortsでインストールした場合なので、他の場合は異るはずです。


あと一点だけ。
64bit版のJava VMが動いている場合、標準の32bit版SWTJava VMがロード出来ないようでエラーが発生します。
これを解決するために、JAVA_OPTSを以下のように設定します。

> export JAVA_OPTS="-XstartOnFirstThread -d32"


重要なのは "-d32" というオプションで、32bit版のJava VMを指定するのだそうです。
ちなみに"-XstartOnFirstThread" はMac固有の不具合を避けるためのおまじないだそうです。直接関係はありません。たぶん。



あとは素人臭いソースコードを晒して終わりです。お付き合いありがとうございました。お役にたつことがあれば嬉しいです。では。

//
// SWTCounter.scala
// 
// 64bit版Macでは
// | export JAVA_OPTS="-XstartOnFirstThread -d32"
// 

import org.eclipse.swt.widgets._
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData
import org.eclipse.swt.layout.GridLayout

object SWTCounter extends Application
{
    var display = new Display
    var shell = new Shell(display)
    shell.setSize(200, 120)

    var glayout = new GridLayout(1, false)
    glayout.horizontalSpacing = 0
    glayout.verticalSpacing = 0
    shell.setLayout(glayout)

    var count = 0

    var label = new Label(shell, SWT.PUSH | SWT.CENTER)
    label.setText("Count:-")
    label.setLayoutData(new GridData(GridData.FILL_BOTH))

    var button = new Button(shell, SWT.PUSH)
    button.setText("click")
    button.setLayoutData(new GridData(GridData.FILL_BOTH))
    button.addListener(SWT.Selection, new Listener() {
        def handleEvent(e: Event)
        {
            count += 1
            label.setText("Count:" + count)
        }
    })


    // main loop
    shell.open

    while (!shell.isDisposed) {
        if (!display.readAndDispatch) {
            display.sleep
        }
    }

    display.dispose
    // end main loop
}

Zend Frameworkのクラス一覧

ctagsを使ったりOmni補完を使ったりするのもよいけど、動作が遅くなってしまっては元も子もないので(いや、面倒臭いので)、当面は標準の、dictionaryを使った補完でクラス名を補完することにした。
しばらくの間、サンプルコード以外のプログラムを書いていなかったので、練習も兼ねてZend Frameworkのクラス名を調べるプログラムを書いてみた。プログラムは文末にあるので、興味のある方はどうぞ。
使い方は、

~/.vim/dict/zendfw.dict

などとして配置して、

~/.vimrc

などで

autocmd Filetype php setlocal dictionary+=~/.vim/dict/zendfw.dict

などとします。

続きを読む

Zend Frameworkでデータベース設定をどう記述するか

Zend Frameworkを使っていて困るのはその自由度。PHPで自作Framework(笑)を作っていた身としては嬉しいのですけど、カスタマイズし放題ではZend Frameworkを使う意味はあまりないですし、なるべくなら正しい方法を取りたいものです。
設定も自由に書けます。いちおう気にして書いていたつもりでしたが、もっといい方法を発見したので共有。

http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.db

Example #2 Sample DB adapter resource configuration
Below is an example INI configuration that can be used to initialize the DB resource.

[production]
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "webuser"
resources.db.params.password = "XXXXXXX"
resources.db.params.dbname = "test"
resources.db.isDefaultTableAdapter = true


として、"Bootstrap.php" で

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDb()
    {
        $resource = $this->getPluginResource('db');

        $db = Zend_Db::factory($resource->getAdapter(),
                               $resource->getParams());
        Zend_Registry::set('database', $db);
        Zend_Db_Table::setDefaultAdapter($db);
    }
}


と書いて、Bootstrap::getPluginResource() を使ってresourceを取る。

The following configuration keys are recognized:
    *adapter: Zend_Db adapter type.
    *params: associative array of configuration parameters to use when retrieving the adapter instance.
    *isDefaultTableAdapter: whether or not to establish this adapter as the default table adapter.

なんて書かれているので、これからはこの方式でやっていこうかとオモッテますよ。
結構きれいですね。

NSHUDWindowMaskなNSPanelを生成する方法

Interface Builderを使わずにWindowを表示する一例(?)
僕は本格的にCocoaを触り始めて一週間弱のビギナーですので、予めそのことをご了承ください。

ポイント

styleMaskの "NSHUDWindowMask" は NSWindow には設定出来ないので、NSPanelを継承したクラスを作る(この例では hudWindow)
(NSPanel及びNSHUDWindowMaskについてはこちらを参照:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSPanel_Class/Reference/Reference.html

続きを読む

OpenCV 2.0.0a + Mac OSX 10.6 Snow Leopard インストール

ARToolkitが流行ったころ、OpenGL + OpenCV で何か出来ないかとダウンロードしてきて触った OpenCV 1.1 はもう昔、気づいたら OpenCV 2.0 なんてものが出ていました。インストールを試みるも、Snow Leopardとの相性が悪いらしく、iSightを始めとした各種機能の実装に使われているCarbonが32bitなことなどが原因でうまくいきません。
リリースはもう2ヶ月ほど前なので情報があるだろうと思いましたがあまりなかったので、成功した方法を書き留めておきます。今回紹介する方法はXcodeを用いてコンパイルを行う方法です。



参考
http://opencv.willowgarage.com/wiki/Mac_OS_X_OpenCV_Port
http://d.hatena.ne.jp/suikyo/20091105/p1
http://taxpon.com/?p=383
http://d.hatena.ne.jp/Yamagutsu/20091115/

続きを読む