Visual Studio Code

めでたく、1.0公開されてた。
https://www.visualstudio.com/ja-jp/products/code-vs.aspx

Win/Mac/LinuxとOSを選ばずにエディタを統一できるし、最近の統合型エディタにお決まりの便利機能も満載で、ショートカットとか慣れればいい感じかも。

ま…高機能メモ帳としてつかう。という選択肢もある。

OSXで Python 2系, 3系 2系統のPySideを使うには

仕事場が Windows&Python3.xだけど、自宅がOSX&Python2.7になっちゃうので、Python3+PySideをOSXでどうすればいいの?…と暫く悩んでしまった。

最初はvirtualenvとかいるのかな、と思って調べていたけど、
基本的には、これだけで良さそうだった。

>Python2.7(※事前に HomeBrew環境が入っていること。)
brew install python
brew install qt cmake pyside

>Python3.x (※既に2.7を入れていること。)
brew install python3
brew install pyside –with-python3

あと、事前に以下を実行しておくのが良いかも。

brew prone
brew doctor

‘doctor’コマンド実行時に warningが出る場合、ものによっては警告が消えるように対処した方が無難。

OSXでの日本語ファイル名がちょっと独特だった件

めも。

>Mac OS X上のUnicode
https://unoh.github.io/2007/09/04/unicode-on-mac.html

>convmv
http://kaiseki-web.lhd.nifs.ac.jp/wiki/index.php/Convmv

>Windows上で、UNICODEの結合文字が含まれるファイル名を、正規化したファイル名にリネームするスクリプト
https://gist.github.com/pekeq/6182948

上のままだとPowerShellのバージョンが違うのか「Get-ChildItem」の引数に -Directory, -Fileが使えなくてエラーが出た…
下記のようにコマンドを変えて、とりあえずカレントフォルダの対象のファイル名を強制リネームするように書き換えたら動いた。。

PowerShell実行権限に関しては、セキュリティポリシーの変更が必要かも。。
http://www.atmarkit.co.jp/ait/articles/0805/16/news139.html

[OS X] ‘shebang’ について

OSXというか、Linux系シェルスクリプトの話題だけど、
スクリプトの先頭行に書かれるアレ。

Windows育ちには、なんのこっちゃって感じの記述だけど、linux育ちには重要不可欠。
で、Pythonで書いていても関係が出てくる。

それが、システム標準で呼び出されるPythonバージョンをshebangで管理している場合。。

Windowsにはそういうのがないので、環境変数の設定を整えるか、Cygwin環境を整える必要があるけど、Cygwin派じゃない場合には、そもそもshebangは機能しないのでなんの意味もないおまじないになっている…けど、それじゃマズイですな〜って話。

[OS X] matplotlibをpip installしようとしたら入らない

 掲題の問題が発生。

 pip install中にモジュールのビルドが走って、最終的にmatplotlibモジュール生成あたりでエラーがバリバリ発生してinstall失敗する。

 ネットを見ても、似た現象を起こす人を見掛けないので変だなーと思ったけど、そういえば1ヶ月ほど前にMac portsをインストールしたのを思い出す。。
 Mac portsをアンインストールしたところ、今度はpip installが完了した。

 しかし、今度は “import pylab as plt” や ”from matplotlib.pyplot as plt” とかやっても応答がなくなる。。

 調べてみると、matplotlib1.4系でそのような問題が発生することが分かっているらしい。
 ※見つけたのは2013年の話題だが変わってないっぽい…

 これを実行。

 今度はインストール後に「RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends.」なんていう文言のエラー発生…

 調べてみると、こんな記事に遭遇。。

 とりあえず記述通りに、~/.matplotlib/matplotlibrc ファイルを作った。

 まだこんなエラーが出る。

 やっぱ、pyenvでAnaconda入れようかな…

で、いれてみた。

 実際に入れようとすると、Python3.x系が入らなかったので2.x系の最新版をインストール。
 で、サンプルにこんなのを実行。

 え…相変わらず出ないじゃん…
 とか思ったら、最後に「 show() 」を実行する必要があるらしい。

 覚えておこう。。

 Centripetal Catmull–Rom splineのExampleコードも動いた。

その後

 最初にminiconda環境(Python3.x系)に入れていてうまくいかなかった方のmatplotlib。
 ~/.matplotlib/matplotlibrc ファイルは削除して「 plt.show() 」を最終行に付け加えたら表示できました…

 Anaconda環境を入れた時に入るバイナリ設定が効いてるってことか?

 結果的に、Python3.x系でも matplotlib が動くようになった。

その後のその後

 後日、anaconda3-2.3.0を再度installしてみると、〜.shファイルをちゃんとダウンロードし始めた。
 どうやら、サイトのメンテナンスかなにかで自分の試した時間には必要ファイルをダウンロードできなかっただけだった模様。

 うまくいかない時は、日を改めて挑戦してみる必要もあるようです…

pythonのサーチパスについて

どうもMac環境のサーチパスがいまいち分かっていないので、pyenv-virtualenv周りも含めた話でちょっと情報を探してみた、めも。

Python の module search path ついて調べてみる

基本的には、なにか import して モジュール名.__file__ でパス調べてみろ。って感じか。
pyenvで導入している miniconda環境でやってみると、こんな感じだった。

Pythonのリファレンスは日本語版も比較的しっかり出来てるので、最初からリファレンスのモジュールの説明を理解する方が確実ですけどね。
自分の場合は、MacOSの環境変数周りをちゃんと把握する方が必要か…

[OS X] XCodeでMacPortsで作った dyLibをリンクできる?

めも。

・ビルドフェーズのファイルコピーで Frameworksフォルダに必要なものを入れとけ。
・XCodeのProject設定で対象ライブラリのリンク設定の追加を忘れんなよ。

…ってことらしい。

Linking Macports libraries to XCode application

Frameworksフォルダは、
パス的には /usr/local/lib かな、 /Library/Frameworks かな。なんか違う気もするけど…

[OS X] 他のオブジェクトから情報を得るには

めも。

デリゲーションによってオブジェクト間の情報伝達ができるよ。という話題。
Protocols part 2 : Delegation

前にサンプルコードをいろいろ載せてるページを見つけてたけど、そこにもサンプルがあった。
概念じゃなく具体的に実装で説明してるから、こっちの方が分かりやすいかな。

情報が古いせいか、これはちょっと違うっぽい…

きんくまさんのページに、プロトコルのことが書かれていた。
どこかでも見たけど、Protocol-Delegationパターンというらしい。
オブジェクトから直接インターフェースを生やす手もあるけど、プロトコルに仲介させることで疎結合にできるのが良いんだ。と書かれている。

疎結合というのは、コンポーネント同士があんまり相手を選ばないし、居るか居ないかも気にしないで動く。ゆるく協調しあうような状態のこと。

…あんまり相手を選ばない、というのも語弊があるか。。わりと汎用的なインターフェースを用意することで、新しく別のコンポーネントと結合しようとした場合でも、無理のない結合を可能にできる。というくらいの意味。
選ばない。というか、誰でも利用していいよ。ウェルカムだよ。みたいな感じ。逆に「選ぶ」ものは、閉鎖的というかガチガチに固まったインターフェース。非常に手続き的。

疎結合は、あまり手続きが必要ない。シンプルなやりとりが基本。って感じかな。

デリゲート難しいなー。こんなページも見つけた。
[iOS] iOSのDelegateをしっかりと理解する
なんか、しっかり理解してないと正直関連が全然見えなくて、全く実装できる気がしない…

“[iOS] iOSのDelegateをしっかりと理解する” のページを見ながら整理してみた。

定義が煩雑なので、とにかくやっていることを整理してみた。

  • View
    • protocol公開
    • delegate公開
    • 設定済みdelegateの利用
  • Controller
    • protocol実装
    • delegate設定

整理してみると、意外なほどにシンプルになった…
定義や動作について、順を追ってみるとこんな感じ。

・Viewにて、外部クラスに使って欲しいProtocolを定義&公開。
 ※公開したProtocolは定義だけで、このクラスに実装はない。
・また、Protocolを使ってくれるクラスのインスタンスを収めるdelegateも定義&公開。
・Controllerにて、Viewが公開しているProtocolの実装をし、公開。
・また、Protocolを公開しているクラス側のインスタンス(のdelegate)に、自分のインスタンスを設定。
・Viewにて、自分のメンバ(delegate)に設定されたインスタンスを用いて、その設定されたインスタンスのクラスが公開しているProtocol実装を呼び出す。
 ※この最後のProtocol実装の呼び出しにより、ControllerからViewに値が受け渡される。

[OS X] 作図ツール

めも。

プログラムを書くのに作図ツールが欲しくなって調べたら、こんなのが出てきた。ソースも公開されている。(まぁ、これは線グラフを書くのが目的だけども…)

お絵描きツールを書こうと思ってたけど、ある程度似たようなプログラムのコードを得てしまった感じ…

[OS X] iOSじゃないアプリを作ろうとしたら躓いた

XCodeでツールのインターフェースは共通だし、基本のクラス名も同じっぽいのでサクッと作れたりするのかしら…と思ってOSXのアプリのプロジェクトを作ってみたけど、なんか全然思うように書けない。。

そもそもiOSの実装も基礎ができてないということかもしれないが、ちょっとCocoaを調べることにした。

そもそもCocoaって何?

OSXのUI層部分のアプリケーション構築用のフレームワーク(というか、API群)。
AppKitとも呼ばれる。125のクラスとプロトコルから構成されていて、すべてのクラスはNSObjectから派生する。

OSXで動くアプリケーションの素になるフレームワーク。という理解でよさそう。

ちなみに、旧OSであるMacOSはCarbonって名称のAPIがあった。

iOSもCocoa-touchってフレームワークを使うので、基本部分は共通のはず。
ただベースになっているOSが同じわけではないし、共通する部分がある。という感じなんだろう。

Cocoaでウィンドウアプリ作るにはどうすれば?

こういう時は、素直に開発会社のチュートリアルに従うまでです。

ここがデベロッパ向けの情報サイト:Mac Developer Library

Start Developing Mac Apps Today というページがあったので、まずはここからみてみよう。

はじめての Mac アプリ(Your First Mac App)

Jump Right Inのページの最後にあるリンクを辿ると説明されている。
この “はじめてのアプリ” は、ウィンドウに3つのコントロール(Text-field, Slider, Button)を置いたアプリ。

…なんだけど、どっちかというとその説明に結構詳しいXCodeの基本説明が書いてある。
ただその説明は基本折り畳まれているので、ふんふんこんなもんなのね…みたいな感じで飛ばし読みすると、あとで訳がわからなくなるかもしれないので、ちゃんと中を確かめながら読み進めたほうがいいかもしれない。

というか、知ってる人はこんなの読まないし、これを読んでる人はちゃんと目を通そう。

たとえば Getting Startedのページでは、こんな事が書かれてますね。

  • プロジェクトの作り方
  • テスト実行の方法
  • main.mファイルの説明
  • .xibファイルの説明(プロジェクト作成時にStoryboard使うにチェックを入れると、このファイルはないので注意)

はじめてのアプリですが、以外と難しい話がガンガン飛び出すので結構覚悟して読まないとあっという間に挫折しそうです。
わからないことは何度でも読んで動かして、ゆっくり理解する必要があると思いました。

これができたら、次に読むのは Mac App Programming Guide かな。

Cocoa Drawing Guide という描画周りのガイドも見つけたけど、なんだか基本の作りを覚えるのが大変なので、本来やりたい部分まで到達するのに時間が掛かりそう。

自分が最初に作ってみようと思ったのは “おえかきアプリ” だったのだけども、これは意外に基本原理からすると面倒な感じかもしれない。。
サンプルを見つけたので貼っておく。AppleのチュートリアルのようなAction,Outlet,Delegateによる作りではないけども、イベントハンドラがコントローラだと考えればMVCモデルと言えなくもない。Windows系でよく見掛ける作りなので、個人的には理解しやすいけども。)

あとで気づいたのだが…

Start Developing Mac Apps Today をさらに読み進むと、Basic Tasks のページでようやく NSObjectなどの説明を行う Acquire Foundational Programming Skills という話題になった。
さらに次のページが Frameworks, Design Patterns, Human Interface Design, App Designと続く。

そもそもこんなに GettingStart が長いと思ってなかったけど、URLを見ると referencelibrary/GettingStarted/RoadMapOSX の文字が…そりゃ長くても当然かもしれんね。。

[XCode] バックスラッシュの入力

めも。

XCodeでコードを書いていて、ふと円記号とバックスラッシュが異なることに気がついた。
バックスラッシュを明示的に書けるのか…と。

バックスラッシュ(\)を素早く入力

XCodeというか、これはOSXが2つ共扱えるって話か。
Windowsだとどっちかだけだよな、なんで違うんだろう?

[OS X] Python本体やモジュールのバージョン切替を行うツール

めも。

2015/09/07現在

> brew をインストール
Homebrewの事前インストールは変わらず。

Yosemiteで、Homebrew環境構築手順(brew, brew cask, brew file)

>pyenv、pyenv-virtualenv
これに関しては、MacOSの場合 pyenv-virtualenvを入れる方がラク。
依存の関連で、自動的に pyenvが入って pyenv-virtualenvが入る。

Mac(Yosemite)でPython開発環境を構築する

pyenv-virtualenvは virtualenvとは別物なので、virtualenv単体で必要な場合は別途 virtualenvをインストールする必要がある。

>pyenv-pip-rehash
これもpyenvのプラグイン。
pyenvを使ってPython環境を構築にあるように、pyenvのshimsの情報更新を自動で行ってくれる。(参考:Understanding Shims)


過去記事

> brew をインストール
Yosemiteで、Homebrew環境構築手順(brew, brew cask, brew file)

 ※2015.3.28に試したところでは、下記コマンドでインストールできた。

> brew を入れたら、pyenv を
pyenvを使ってMacにPythonの環境を構築する

 使う場合は、「pyenv local (バージョン番号)」で切替。
 使う為のバージョンをインストールするには、「pyenv install (バージョン番号)」。

localで切り替えると、アプリケーション実行時のPythonバージョンを指定でき、globalはglobalなPythonのバージョンを指定できる。と記述されているが、globalなPythonの意味が分からない…

>virtualenv をインストール
 Yosemiteには pipが入っているっぽいので、以下でインストール。

 使う場合はプロジェクト・フォルダ内で以下を実行。

 その上で以下を実行すると、環境が切り替わりプロンプト頭に (venv) と表示されるので、必要なモジュールをインストールしたり、開発コードを実行したりする。

 環境を閉じる場合は、以下の通り。

 あと pyenv-virtualenv というのもある。
 これは pyenvのプラグイン扱いらしい。

 OSXだと

 でインストールできる。
 ただ、これはWindowsには未対応なのかな??情報を見掛けたことがない。。