GodotEngineを使ってみる(2)

昨年のリリース以降遊ぶ時間が無かったのですが、少し遊んでみました。

まず手始めに知りたかったのは、シーンの切替方法。

一番簡単な方法としては、Autoloadチュートリアル(wikiだとtutorial=singletons)に記載されている方法。

  • プロジェクト設定にある、Autoloadを使用して、事前にスクリプトを読み込んでおく。
  • スクリプト内に関数を用意しておく。
  • シーンを切り替える際は、スクリプトを呼び出すことで
extends Node

var current_scene = null

func _ready():
        var root = get_tree().get_root()
        current_scene = root.get_child( root.get_child_count() -1 )

func goto_scene(path):

    # This function will usually be called from a signal callback,
    # or some other function from the running scene.
    # Deleting the current scene at this point might be
    # a bad idea, because it may be inside of a callback or function of it.
    # The worst case will be a crash or unexpected behavior.

    # The way around this is deferring the load to a later time, when
    # it is ensured that no code from the current scene is running:

    call_deferred("_deferred_goto_scene",path)

func _deferred_goto_scene(path):

    # Immediately free the current scene,
    # there is no risk here.    
    current_scene.free()

    # Load new scene
    var s = ResourceLoader.load(path)

    # Instance the new scene
    current_scene = s.instance()

    # Add it to the active scene, as child of root
    get_tree().get_root().add_child(current_scene)

任意のスクリプトから切り替えたいシーンファイルを呼び出し。

#add to scene_a.gd

func _on_goto_scene_pressed():
        get_node("/root/global").goto_scene("res://scene_b.scn")

この方法だと、リソースの読込が完了するまで固まってしまいます。

「読み込み中」といった表示を行う場合には

https://github.com/okamstudio/godot/wiki/Background%20loading

を参考にすると良さそう。

 

VisualStudio Codeをおためし

Microsoft Build 2015(Day 1)で発表されたVisualStudio Codeを早速インストールしてみました。

現在プレビュー版として公開されているものとなります。

vsc_01 atom_01

上の図は適当に間違えてエラー表示をさせています。

自分はMac上ではAtomを使用しているのでAtomのスクリーンショットを貼り付けてみました。(Atom側はTheme変更 + minimap + atom-typescriptを導入しています。)

VisualStudio Codeは”VisualStudio”という名前が付いているのですが、ポジション的にはテキストエディタとなります。Node.jsがベースな部分はAtomに似ている感じです。

現在はプレビュー版ではありますが、恐らくパッケージマネージャで機能追加が出来るようになるのではないかと思われます。

Microsoft製なら日本語も大丈夫…と思っていたのですが、残念ながら現時点では全角文字を人文字分と認識しているようです。これはAtomも同じですが、japanese-wrapを導入する事で解決しています。

vsc_02 Git管理下にあるファイルだとDiffを表示出来たり、コミットも行えるようです。

vsc_03 現時点では気の利いたUIがない設定。

デフォルト設定を参照しながら、自分の設定項目を記述していきます。

さすがに現時点ではプレビュー版ではありますが、Windows, Mac, Linux環境下で使用するテキストエディタが増えることは良いことだと思います。(自分はAtomに慣れてしまいましたけど…)

Pixelmatorが3.3.2にアップデート

幾つかの機能がアップデートされて、バグ修正も行われました。

http://support.pixelmator.com/updates

個人的には修復ツールに非破壊編集モードが追加されたのが大きいかも。

img_1 修復ツールを呼び出して修復(この例ではお肉を消しています)

img_2 お肉が消えました。

img_3 差分画像が透明レイヤーに。

事前に透明レイヤーを手前に作成し、「全てのレイヤーをサンプリング」にチェックを入れておく事で動作します。

これは楽しいかも。

splinterによるブラウザ制御(1)

ウェブアプリケーションの開発をする際に、実際のブラウザで動作確認を行う、といった場面があるかと思います。

単純なHTTPの通信テストであればスクリプトでもなんとかなる場合もありますが、javascriptを使用している場合、javascriptの動作結果や挙動についても検証する必要があります。

こういったテストを行う場合、大抵は外部からブラウザを制御して行います。

有名どころとしてはSeleniumだと思いますが、今回はあえてsplinterを使用してみました。

インストールは pip から。

> pip install splinter

ちなみに標準ではfirefoxを使用しますので、 firefoxのインストールをしておく必要があります。

簡単な使用方法

# -*- coding: utf-8 -*-
import splinter

BROWSER = "firefox"
URL = "http://mizuvm01.cloudapp.net/wp"
oCBrowser = splinter.Browser(BROWSER)
oCBrowser.visit(URL)

こんな感じに記述します。

上の例では、firefoxを開き http://mizuvm01.cloudapp.net/wp を開きます。

ページ遷移後はhtmlやタグやIDの検索をする事が出来ます。

単純な表示だけでは面白くないので、うちのサイトから画像を取得するプログラムなんぞを作ってみます。

やることは以下の三つです。

  • 水凪工房のウェブサイトを開く。
  • 「魔法少女リリカルなのは」を検索する。
  • 表示されている画像をダウンロードする。

画像のダウンロードについてはsplinterで処理するのは困難なため、requestsモジュールを追加します。

> pip install requests

インストール出来たところで、早速こんな感じのコードを書きます。

# -*- coding: utf-8 -*-
import sys
import splinter
import re
import requests

URL = "http://mizuvm01.cloudapp.net/wp"
# ユーザーエージェントはサンプルを兼ねて明示的に指定しています。
USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0"

def main():

    oCBrowser = splinter.Browser("firefox", user_agent=USER_AGENT)
    oCBrowser.visit(URL)

    oCBrowser.type("s", u"魔法少女リリカルなのは\n")

    oCReP = re.compile("(" + URL + "/[0-9]{4}/[0-9]{2}/[0-9]{2}/.*)")
    oCReI = re.compile("(" + URL + "/wp/wp-content/uploads/[0-9]{4}/[0-9]{2}/.*)")

    listHref = [r["href"] for r in oCBrowser.find_by_tag("a")]

    for strHref in listHref:
        oCResult = oCReP.search(strHref)
        if(oCResult is None):
            continue

        strBlogPage = oCResult.group(1)

        oCBrowser.visit(strBlogPage)

        listImage = oCBrowser.find_by_tag("a")

        for o in listImage:
            try:
                s = oCReI.search(o["href"])
            except:
                s = None

            if(s is None):
                continue

            strImageUrl = s.group(1)

            # ユーザーエージェントはsplinterで制御しているブラウザと同じにする。
            # リファラーを現在ページからとする。
            # クッキーの値をブラウザから取得して、requestsに反映させる。
            dictCookie = {}
            dictHeader = {
                "User-Agent": USER_AGENT,
                "Referer": strBlogPage
            }

            for k, v in oCBrowser.cookies.all().items():
                dictCookie[k] = v

            oCRes = requests.get(
                strImageUrl,
                headers=dictHeader,
                cookies=dictCookie,
                stream=True
            )

            # requestsが戻す結果のrawをファイルに書き出す事で実際に保存可能です。
            print strImageUrl.split("/")[-1], len(oCRes.raw.read())

    oCBrowser.quit()

if(__name__ == "__main__"):
    main()

かなりいい加減なコードですが、こんな感じとなります。

 

OSX 10.10 Yosemite で Sony Bridge for Mac

Sony Bridge for Macを使用するにはjavaが必要で、インストールされていないとインストールを促してきます。

ただ、Sony Bridgeは特定のバージョンなのか、場所にインストールされているjavaしか認識してくないため、Sony Bridgeに促されてjava.comから最新のjavaをインストールしても動作してくれません。

オフィシャルのものは使用出来ません。(2015年2月2日現在)

× https://java.com/ja/download/

最新のjavaでも動作するようにして欲しいところですが、Appleからjava6をインストールすることで動作させることが出来ます。

Java for OS X 2014-001

http://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US

今更java6はどうなんだろうと思いますけど…

カテゴリー Mac

レーザープリンタを導入

今まで使用していたインクジェットプリンタが故障したため、プリンタを買い換えました。

インクジェットからレーザーに

使用目的の殆どはドキュメントや地図の印刷なので、思い切ってモノクロレーザープリンターにしてみました。

wifi接続が可能で安価なラインナップのレーザープリンタを調べてみたところ、以下の様な候補になりました。

この中でEPSONのみがドラム交換が出来ない[1. そうそう破損するとは思いませんけど…]ため、まずは選択肢から除外しました。

CANONとBrotherのどちらにするかで迷いましたが、今回はちょっとだけ解像度が高いBrotherにしました。

とりあえず出力できれば問題はないのですが、試しに自分のマンガ原稿を印刷してみました。

laser_p01 占え!カリムさん2より

テキストモードで印刷をしてみたところ、結構良い感じの出力結果が得られました。

モノクロ原稿の練習に丁度良かったかも?

カテゴリー Mac

watershedによる領域分割

少し前の記事でGmicのcolorizeが便利そうでしたので、Gmic内のスクリプトを読みながらopencvで似たようなことをやってみました。

Gmicはsourceに含まれているgmic_def.gmicに処理手順が書かれているため、同じことができるんじゃないか…と思ったのですが、なかなか難しいかも。

pyopencv2を使ってwatershedを中途半端に実装してみた例

gmic_def.gmic内のスクリプトによると、__x_colorize内でpotential mapというのを生成し、それを領域分割時に参照しているようなので、まずはここの処理と同等のものを作ってみることにしました。

# Compute potential function.
__x_colorize :
  -if $1 # Potential for lineart.
    -b[-1] 0.05% -n[-1] 0,1 --b[-1] 0.5% -pow[-2] 10 -n[-2] 0,1 -n[-1] 0.3,1 -min[-2,-1]
  -else  # Potential for generic grayscale image.
    -gradient_norm[-1] -n[-1] 0,255 -normalize_local[-1] 3,3 -*[-1] -1 -n[-1] 0,255
    -b[-1] 0.05% -n[-1] 0,1 -sqr[-1] --b[-1] 0.5% -n[-2,-1] 0,1 -min[-2,-1]
  -endif
  -nm[-1] potential

ラインアート処理部なので、

  1. [Layer1] blur 0.05%
  2. [Layer1] normalize 0.0 〜 1.0
  3. [Layer1] Layer1に対して blur 0.5% したものを[Layer2]に出力
  4. [Layer1] pow(べき乗計算) 10
  5. [Layer1] normalize 0.0 〜 1.0
  6. [Layer2] normalize 0.3 〜 1.0
  7. [Layer1] と [Layer2] を min 合成

といった処理をこんな感じに読みかえ。

oCImage = cv2.imread(strFilename)

nH, nW = oCImage.shape[0:2]

oCImageGray = cv2.cvtColor(oCImage, cv2.COLOR_BGR2GRAY) / 256.0

# oCImageBlur1 = cv2.GaussianBlur(oCImageGray, self.make_gaussian_param(oCImage, 0.0005), 0)
oCImageBlur1 = cv2.GaussianBlur(oCImageGray, (0, 0), 0.5, 0.5)
oCImageNormal1 = cv2.normalize(oCImageBlur1, None, 0.0, 1.0, cv2.cv.CV_MINMAX)
cv2.imshow("oCImageNormal1", oCImageNormal1)

# oCImageBlur2 = cv2.GaussianBlur(oCImageNormal1, self.make_gaussian_param(oCImage, 0.005), 0)
oCImageBlur2 = cv2.GaussianBlur(oCImageGray, (0, 0), 5, 5)
oCImageNormal2 = cv2.normalize(oCImageBlur2, None, 0.0, 1.0, cv2.cv.CV_MINMAX)
cv2.imshow("oCImageNormal2", oCImageNormal2)

oCImagePow = cv2.pow(oCImageNormal1, 10)
oCImageNormal1 = cv2.normalize(oCImagePow, None, 0.0, 1.0, cv2.cv.CV_MINMAX)
oCImageNormal2 = cv2.normalize(oCImageNormal2, None, 0.3, 1.0, cv2.cv.CV_MINMAX)

oCImagePotential = cv2.min(oCImageNormal1, oCImageNormal2)

ガウシアンフィルタのパラメータを理解していないため、数値は適当です。

 plotしてみる。

 watershed…だめかも。

 potential map

 

塗り分け処理を行っている部分も移植しないとあんまり意味がなかったり。

OpenCVを直接使用するのは初めてだったけど、Python用のライブラリも含まれているのでありがたかった。

MacOSX用のMakefileの生成にはCMakeが必要なのですが、以下のオプションのチェックを外しておきました。

  • BUILD_SHARED_LIBS
  • BUILD_TESTS
  • WITH_1394
  • WITH_FFMPEG

参考:http://blogs.wcode.org/2014/10/howto-install-build-and-use-opencv-macosx-10-10/

Render color map, Manage replace color mode, Render base image, Render viewの部分が理解できないと絶望的かも。

ArtRageでマンガ作成(1)

忘れないうちにArtRageでの作業メモを残しておくことにしました。

(自分用のメモなので箇条書きです。)

作画は全て 300dpi で行い、コマ枠は1.25pt、コマ同士の間隔は、横3mm、縦6mm というルールにしています。

漫画原稿

  • B5 … 188 x 263(断ちサイズ3mm)
    • 2220 x 3106

b5_spec 赤は断ち切り。

小説原稿

  • A6 … 111 x 154(断ちサイズ3mm)
    • 1311 x 1818

a6_spec 赤は断ち切り。

不正な文字コードを削除

いくつかの投稿に、不正な文字(いわゆる制御文字等の表示されない文字)が含まれていたようで、削除するプラグインを作成して対応してみました。

プラグインでやっていることは以下の様な内容です。

function filter_function_name($content, $post_id)
{
    $aryCode = array(chr(0x08), chr(0x1b), chr(0x1c), chr(0x1d));
    return(str_replace($aryCode, "", $content));
}
add_filter("content_edit_pre", "filter_function_name", 10, 1);

サンプルコードを組み合わせただけの簡単なコードです。

上記のプラグインは、保存時ではなくて表示時に動作するプラグインですので、一旦記事を保存し直す必要があります。

こういった処理は一括で行う方が楽ではありますが、表示時に直す方が自然影響範囲が狭いだろう…という事で記事編集開始時に変換をかけています。

というわけで、問題の記事を探さなければなりませんが、妥当性検証のためのツールが W3C のサイトで公開されていますので、それを利用します。

http://validator.w3.org/feed/

チェックツールで見つかった記事をひとつづつ保存し直していけば、ひとまずは対応完了です。

というわけで、一応の問題は解決したのですが、どうも原因は

  • WordPress内蔵のエディタ
  • 漢字変換
  • Safari

あたりに問題があるような気がしています。

というのも、最近、記事の編集中にエディタがひっかかる挙動をするようになったので。

ArtRage 4.5.2 がリリースされました

いくつかのバグが修正されています。

  • MacOSX 上でファイルエクスポート時に PNG または PSD ファイルのエクスポート時にクラッシュする可能性があった問題を修正しました。
  • Windows 上で 64bit 版の ArtRage を実行している際に、ユーザーの権限設定によって、警告通知とクラッシュする問題に対応しました。
  • スクリプトの再生中にストロークの描画が異常に重くなる問題を修正。
    (うまく訳せない)
  • スクリプトの再生が途中で停止してしまう問題を修正しました。
  • スマートクオーテーションを使用している際に、再生エラーが発生している問題を修正しました。

わりと適当な訳ですけど。

http://www.artrage.com/faqs/artrage-4-update-history/

 

Chromecast を買ってみました。

先日秋葉原に行ったついでに Chromecast を買ってみました。
Chromecast は Google が販売しているメディアストリーミング用端末で、受信したデータを HDMI に出力することが出来ます。

こんなハードウェアです。

Chromecast

http://www.google.com/intl/ja_ALL/chrome/devices/chromecast/

利用方法としては、 TV やモニターの HDMI 入力端子に Chromecast を差し込むだけです。(別途、電源を USB 端子から供給する必要がありますけど。)

PCから制御するには Chrome が必要となりますが、実際にはChrome Extensions として実装されている、Chromecast のコントローラーを動かすために必要という位置づけです。

内部的には、Chromecast へ取得先の URI を送信し、それを受け取った Chromecast がその URI からデータを読み込んでストリーミングを開始するといった仕組みのようです。

https://developers.google.com/cast/

SenderAPI と Receiver API に分離されているのもそのあたりが関係しているのかもしれません。

PC版の Chrome Extension を使用すると、指定したタブを Chromecast で表示させたり、デスクトップ画面全体を表示させたり出来ますが、内部的には、キャプチャーした画像を Chromecast で利用できる形式に変換して、読み取らせているような気がします。

そのためだと思いますが、画面を綺麗(TV画面一杯)に表示させるためには Chrome 側のウィンドウサイズを対象の画面比率にあわせる必要があります。

HDMIの入力と USB による電源供給が行えるならデジタルサイネージみたいな利用法があるかな…と思うけど、 wifi デバイスがたくさんあるとそれはそれで帯域なんかを食ってしまいそうな感じも。(他にも WatchDogs でやっていたような、任意の映像を割り込ませるとかもされやすくなるかもしれない。)

バックアップ用のストレージについて

折角の休み期間中なので、後回しにしていた自宅用ストレージを更新しようと思い、幾つかの候補を考えてみました。

実質 iMac 一台だけしか使用していないのですが、候補としては NAS を考えています。(本体に直結した方が速度的には有利かもしれませんが、設置方法としては自由がきくので。)

Buffalo

http://buffalo.jp/product/hdd/network/ls-wxl_r1/

RAID1構成で2TBytesの容量が必要な場合は、4TBytesの製品を選ぶことになるので、大体40,000円ぐらいの出費。

ちなみに現在使用している物はこれです。

AFPにも対応しているので、TimeMachineを利用するなら結構便利だったりして。

Drobo

http://www.drobo.com/storage-products/

BeyondRAID 機能が搭載されたストレージ。

ストレージ機能のみを提供する製品。NAS として利用する場合は Drobo5N で、多分70,000円 + HDDの出費。

こちらも AFP に対応。

HP ProLiant MicroServer

http://h50146.www5.hp.com/products/servers/proliant/micro/

HP が出しているホームサーバー向けの製品。

出費としては20,000円 + 追加HDDの出費。

一見安そうに見えるけど自前で環境設定をしないといけないので、わりと面倒かもしれない。導入するソフトウェアとしては FreeNAS あたりを導入して、 ZFS での運用といったあたりでしょうか。

こうやって並べてみると、 Buffalo のままでも良いような気がしますけど、書いているうちに Microsoft Azure の BLOB Storage にアーカイブを保存するという方法もありなんじゃないかと思えてきました。

例えば、

  1. ローカル環境のストレージに DMG[1. MacOSXが標準でサポートしている仮想ディスク形式] や VHD[1. Windows8 から標準で使用可能になった、仮想ディスク形式] を作成して、その中にファイルを保存する。
  2. そのファイルを Microsoft Azure の BLOB Storage に定期的にアップロードする。

値段としては 1TBytes あたり 2,500円(毎月)程度の費用が発生してしまうけど…

ArtRage 4.5 にバージョンアップ!

ArtRage が 4.0 から 4.5[1. この記事を書いている時点では 4.5.1 になっています。] にバージョンアップされました。

自分は MacOSX しか使用していないのですが、今回のバージョンから 64bit 対応になりました。

64bit 対応になった関係だと思いますけど、 Windows 版は WindowsXP だけが別扱いになっているので注意。

information 情報を見るメニュー

64 ビットモードで作動させるには、「32 ビットモードで開く」のチェックを外します。

どちらで起動しているかは、アプリケーション起動時の右下、または About 表示の右下に表示される 32bit / 64bit という表示で確認出来ます。

なによりもアプリケーションを起動して使用可能になるまでがとても速くなりました。

機能的な追加点は、グリッドが使用できるようになりました。

グリッド機能

ss_03 ありそうでなかった機能

グリッドツールがあれば簡単なコマ枠とか描けるかも…

ワークベンチモードのインターフェース改良

ss_05

自分はワークベンチモードをあんまり使用しないのですけど、ツールボックスの表示順番や内容を入れ替えられるようになりました。

いまさら気がついたのですけど ArtRage についている水平垂直反転機能[1. 絵を裏返して確認する事が出来る機能]を使用すると、キーリピートがかかってしまい、微妙に動作がおかしくなるといった不具合で悩んでいたのですが、 ATOK2012 を入れていると発生する不具合のようでした。

ArtRage 4.5 でファイルが保存できない…(3)

自分の怪しい英語(Bing翻訳を併用)を駆使してサポートをしてもらったところ、レイヤー毎のキャンバス設定[1. ArtRageでは、新規作成時にデフォルトのキャンバス設定を行い、レイヤー毎にデフォルトを使用するかレイヤー独自のキャンバス設定にするかを切り替えられます。]を保存する際に、エラーが生じているらしい、という事まではわかりました。

そんなわけで、自分のキャンバス設定が特殊なのかどうかを調査することに。

キャンバス設定

canvas_settings_1canvas_settings_2

こういう感じの設定画面で、キャンバス用のテクスチャを設定します。自分はデフォルト設定で使用している為、この画面を開くことは殆どなかったりします。

バグの原因範囲が絞り込めたのは良いのですけど、保存が出来ないままというのは困った状況ですので、修正されるまでは ArtRage 4.0.6 にダウングレード[2. 前のバージョンを残してなかったのですが、開発側で用意して貰えました…ちょっと嬉しい。]して使うことになりました。

ひとまず、 4.5.0 の環境を残したまま、 4.0.6 の環境を導入しなおしました。

微妙な入力が求められる送信フォーム経由 + 自分の怪しい英語のために、サポートはあまり期待していなかったのですけど、思った以上に早い対応をして貰えました。

ひとまずこれで作業が継続出来そうです。

ArtRage 4.5 でファイルが保存できない…(2)

わりと諦めていたけど、サポートから返信がきました。

というわけで、サポートしている全ての形式で保存したファイルを送っておきました。

相変わらず、 PTG と PSD ファイルだけが失敗するため、レイヤーをサポートしているフォーマットだけが失敗するみたい。

それにしても、ファイルを上書き保存してしまったものについてはファイルが完全に破壊されてしまったため、ここまでかけた時間が…

 

ArtRage 4.5 でファイルが保存できない…(1)

ArtRage 4.5 が登場したのは嬉しいのですが、アップデートしたところファイル保存が出来なくなってしまいました。

artrage_error

アプリケーションフォルダとキャッシュを全削除した後に、インストールを行っても、変わりませんでした。

新しいバージョンだから不具合があるのは仕方ないような気がしますけど、ファイル保存が出来ないのはかなり致命的かも。

ArtRage 独自の保存形式である PTG ファイルと、 PhotoShop 形式の PSD ファイルが正常に書き出せないところをみると、レイヤー情報を持ったファイルを書き出そうとしているところで失敗しているような感じ。

ひとまずサポートに報告をしておいたけど、フォーラムには同様のエラーで困っている人がいないようだし、対応してくれるかどうかもわからない…絵を描く作業は殆ど ArtRage でやっているので、わりと困ってたりして。

ところで ArtRage の Members エリアが https になってないような気がするけど、これは前からだったのかな。

 

テキストエディタを Atom に

いままで MacOSX 上では、テキスト編集に Coda2TextWragler を使用していました。

Coda2 の使用は javascript の編集をする時ぐらいだったので、プログラムの作成は TextWrangler になるのですが、検索がモーダル表示だったりするのがやや不満でした。

いま有名なものだと Sublime Text になるのですけど、せっかく GitHub を使用し始めたということで、 Atom を使用する事にしました。

atom

 

こんな感じの画面です。本体自体はシンプルにまとめて、プラグインによって機能が実装されている感じ。

自分が使用する言語がこのところ、ほとんど javascript か Python でしたのでわりと充分な感じです。

カスタマイズ色々出来るようなのですが、フォント[1. Ricty Diminished にしました。]を変更しただけです。

 

potrace を GUI 化(2)

だいぶ形になってきたので、サンプル画像らしきものを掲載してみます。

元々コマンドラインで使用していたので、作っておきながら使うときはあまりないような気がしますけど、Qtのアプリケーションをどの様に作っていけば良いのかの練習にはなりました。

 アリサちゃん

GUI のアプリケーション部分は気の利いた処理も何もなく、potrace 用のコマンドライン引数名そのままですので、判りづらいです。

 名称はコマンドライン引数名そのまま

同じ様な GUI フレームワークとしては wxWidgets があるのですけど、そちらよりも GUI 部分が組みやすい感じがしました。

問題になりそうな部分としては Qt のライセンス形式かもしれません。(特に、Python で作成する場合は、 Python + Qt + PyQt が必要になるため)

 

PyQt5 で GUI アプリケーション

Python には昔から Tk という GUI ライブラリが付属しているのですが、あまりかっこよくありません…

勿論、目的が達成出来れば問題ないのですが、やっぱり見た目がかっこいい方が開発していて楽しいかも?ということで、 MacOSX 上に PyQt5 の環境を構築してみることにしました。

インストール作業

Qt のインストール

http://qt-project.org

PyQt5 は Qt をラッピングしたモジュールなので、まず Qt を用意しなければいけません。

Qt には Online Installer が用意してありますので、それを使用してインストールします。

そのうち指定しなくても良くなるかと思いますが、MacOSX 10.9 上で build をしている場合は、環境変数にあらかじめ 10.8 という値を設定しておきます。

export MACOSX_DEPLOYMENT_TARGET=10.8

Python 3.4 のインストール

https://www.python.org

標準の MacOSX には Python3 がありませんので、 Python3[1. この記事を書いている時点では 3.4 が最新バージョンでした。]をインストールする必要があります。

…の前に Marvericks 環境に必要なツールをインストールしておきます。

xcode-select --install

インストールが終わったら、

./configure
または
./configure --prefix=INSTALL_PATH
make
make install

インストール先を好きな場所にしたい場合は、 ./configure オプションの –prefix を使用する事でインストール先を任意の場所に変更することが出来ます。

sip のインストール

sip は C/C++ 用のモジュール(dll や so)を Python から呼び出せるようにするためのモジュールです。 PyQt5 は Qt を呼び出すために sip を使用するので、事前にインストールしておく必要があります。

python3 configure.py
make
make install

PyQt5 のインストール

ここまで完了したらやっと PyQt5 のインストールを始める事が出来ます。

PyQt5 の build には Qt 用の make ツールである qmake と、事前にインストールした sip が必要となります。

インストール場所を以下の様に指定します。

python3 configure.py --qmake <QMAKE PATH> --sip <SIP PATH>
make
make install

PyQt5 のビルドにはかなりの時間がかかります。

ビルド後の確認方法は、 PyQt5 に添付している example を実行することで試せます。

python3 example/qtdemo/qtdemo.py

とすることで、各種デモを呼び出せるメニューアプリケーションが起動出来ます。

メニューアプリケーション自体が PyQt5 製になっています。

pyqt_demo こんな感じ。

おまけ

cx_freeze を導入しておくと、アプリケーションの配布に便利です。

http://cx-freeze.sourceforge.net

ArtRage 4.5 がまもなく登場するみたい

ArtRage のオフィシャルページに Version 4.5 の告知が掲載されていました。

記事を読んだ感じでは、「64bit対応」「Grid表示機能」「ペンの傾き対応」のようです。

64bitには既に対応しているものだと思っていたけど、 64bit カーネルで動作しているだけで、64bit プロセッサとしての機能を活用していないって意味なんだろうか…

グリッド表示は素直に嬉しいかも。

傾き対応はペンシルツールでは Tilt 状態をチェックボックスで指定していたけど、統合されるということかな。

 

何はともあれリリースが楽しみです。