[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には未対応なのかな??情報を見掛けたことがない。。

virtualenvのこと

めも。

>virtualenvのドキュメント
Docs » Virtualenv

>インストール手順の参考
インストールする方法@flask-docs-ja.readthedocs.org

>virtualenv と pyenv-virtualenv は別物だった…
pyenvでPython開発環境を構築

 pyenv-virtualenv は pyenvのプラグイン。
 virtualenv の機能を、pyenv環境の一部として管理・利用できる。

 使い方はこのへんを見てからいじった方がいい。。

[Xcode] 画面が狭い!と思いながら線を引かなくていい

 StoryBoardでセグエの設定をしたりする場合に、トリガーになる部品から関連付けの線を引く操作がありますが、基本等倍サイズで行う作業なので、ノートPCだと狭くて大変..と思っていました。

 数日使ってようやく発見。

 ナビゲーションエリア側からも線を引っ張れるので、まず線を引く元の部品をアクティブにしたら画面をスクロールして、線を引く対象を表示した状態に。

 その後、ナビゲーションエリア側でアクティブになっている部品名称から線を引っ張ればOKでした。
editLineFromNavigation

[iOS] カスタムクラスの作成方法

 カスタムクラスとは…
  SDKで提供されているクラスを継承し、新たなクラス実装を定義したもの。

 別の言い方だと、作成するアプリケーション専用にカスタマイズした機能を持つクラスを作ることです。
 ベースになる機能は継承元のものを引き継ぎつつ、部分的に異なる振る舞いをしたり、追加の機能を提供したり。しかし、どれだけ面倒なことか…ということもなく。
 本来SDKで提供されるクラス(部品)は汎用的に振る舞えるように作られたもので、アプリが必要とする特定の振る舞いは空の状態のものです。

 この空の部分に、アプリ専用の実装を組み込んだ新しいクラス作るのも、カスタムクラス作成の基本的な利用方法のひとつです。


■クラスファイルを作る
 Xcodeでクラスファイルを作るには、File > New > File.. を選択。
 iOS開発の場合は、iOS(Source) > Cocoa Touch Class から、クラスファイルを作成します。
templateForNewFIle

 次いで、新しいクラス名称(=ファイル名)や継承元のクラス(ベースクラス)の指定を行います。
newFilenameForNewClass

 最後にファイルの保存先を指定すれば、クラス作成は完了。
 基本的には、自分のアプリケーションフォルダの下です。
 ※画像だと「myTestApp」。作ったクラスは「ViewControllerPage3」。
fileLocation


■クラスファイルを、実際のViewControllerと関連付ける
 クラスファイルを作っても、それだけではどの部品と関連付くのかを指定しなくては、実際に作ったアプリから呼び出されることはないので、関連付けを行います。

 StoryBoardを開きナビゲーションエリアの部品リストを見ると、ViewControllerが3つあり、内ひとつに「View Controller Page3」と名称を振っています。
navigationAreaViewCtrPage3

 ユーティリティエリアの方を見ると、CustomClass項目のClass名に「ViewControllerPage3」と記入されているのが分かります。(「View Controller Page3」を選択状態の場合のものです)
utilityCustomClass

 このように、部品の CustomClass > Class 項目に対応するクラス名を記入することで、部品と作成したクラスファイルの関連付けを行えます。

 関連付けを行った後は、クラスファイルに対応する部品の振る舞いを実装することで、アプリ開発を進めることができます。

 →カスタムContent View Controllerの作成 @iOS View Controller
プログラミングガイド.pdf

[OSX] Lionのインストール用USBメモリを作る

めも。

 基本的にはここの記述に従う。

 ただちょっと不親切だった。

 で、手順を列挙すると、以下の通り。

・まずLionをダウンロード。(AppStoreを起動、購入済みリストのLionをダウンロード。インストール済みで押せない場合は option キーを押しながらでいけるらしい)
・ダウンロードするとインストーラが自動起動するので、コマンド+Q で終了
・アプリケーション・フォルダ内のインストーラを探す
・インストーラを右クリックして、パッケージの中身を表示
・パッケージ・フォルダが開いたら、Contents > Shared Support > InstallESD.dmg を探す
・dmgをデスクトップにコピー(ショートカットで良い)
・アプリケーション・フォルダ内の ユーティリティ > ディスク・ユーティリティを開く
・空のUSBメモリを挿入(空でなくても良いが、消えてもよいものを使うこと。容量は8GB以上であること(4GBでは足りない))
・USBメモリを1パーティションでフォーマットする(フォーマットは、Mac OS 拡張(ジャーナリング)を用いること)
・ユーティリティ画面上の復元(RAIDの右隣)を選択
・先ほどの InstallESD.dmgの中身(Mac OS Install ESD) をソース項目にドロップ
・USBメモリの中身(先ほど作成したパーティション)を復元先にドロップ
・復元ボタンが有効になるはずなので、復元ボタンを押す

 以上。

 Yosemiteはこんな手順でいけるらしい。
 ⇒【OS X Yosemite】インストール用 USB メモリ起動ディスクを作成して再インストールと復元をできるようにしておく

[Xcode] 最初やり方が判らなくて困ったこと

 セグエでの画面遷移とか基本コーディングレスでも済むのですが、遷移時になにかしら同時に処理をしたいとか、ボタンを押すと画面を戻すという場合には、コードを書く必要があります。

 記述内容が判っていれば、Xcodeの自動コード生成に頼らなくてもできるので、別に知らなくても困らないと言えば困らないのですが…判らないのもちょっと恥ずかしいっぽいかなーと思ったので、調べたんです。。

 判らなかったのは、こんな感じにボタンのイベントハンドラを生成したいって、この操作。

xcode_autocoding

 最初は幾らやっても、insert〜 みたいな下線が出なくて悩んだんですよ。。
 で、やり方ですが、

 まず、エディタのモード(画面の右上のボタンのうち、Editorの項目)を、真ん中に合わせる。
 そうすると、StoryBoard作業画面の右側にコード表示される領域が現れます。
xcode_editor_mode

 ここまでは判るんですが、次からがよくわかってなかった..orz

  • まず、ボタンをちゃんと選択しておく。
  • そうしたらcontrolキーを押す。
  • そのままボタンをドラッグ操作で右脇のコード表示画面に線を引っ張る。
  • 線をコードのクラス名のところにポイント。
  • そのままドロップする。

 て、感じで出来たんですが、なんかたまにこういうのが判らないんですよね…

[iOS] スワイプやフリックで画面遷移

 画面遷移の為にボタンがあるのも前時代的だしジェスチャーで遷移するとか誰か考えてないかと思ったら案の定…というわけで、めも。


 「ジェスチャー」というのは、画面上でどのように指を動かすのかという入力方法のことであり、またどう動かしたかを検知するしくみの事でもある。

 →今さら聞けないiOSシミュレータの使い方&機能まとめ

■タッチアンドホールド
 長押し。

 ■フリック
  長押しの派生で、長押し状態から更に指を一定方向に滑らせるようにして放す動作。(はじく、と説明があるので、それなりに素早く動かす必要がある。)

■ピンチ
 2本の指を少し離して画面に置く。(親指と人差し指)
 指を画面上で滑らせて、つまむように各々の指を近づける。

■ローテーション
 2本の指を画面に置く。
 どちらかの指を支点にもう片方の指を、画面上に円を描くように動かす。
 ※両方の指を動かす場合は、2本の指が同一方向に平行移動せず、各々逆方向に動かす。

■スワイプ
 指を画面に置く。
 左右いずれかに指を滑らす。
 ※指の本数は実装による。

■タップ
 1本指で画面を軽く叩くようにする。指はすぐに浮かせる。
 ※マウスで言うところのクリック。プロレスのタップと同じ意味。

■スクロール(ドラッグ)
 1本以上の指を画面に置き、指を滑らせる。
 アプリケーション的には、何かアイテム上で操作した場合はドラッグ。単に画面を表示している場合はスクロール動作を提供する。

 動作の切り分けは、アプリの設計や実装に依存している。


 [XCODE]スワイプしたら、前画面に戻るiPhoneアプリの実装方法

 ジェスチャー機能のベースクラスは UIGestureRecognizer
 継承クラスは、以下の通り。
 ※フリックは、名前が違うけど UILongPressGestureRecognizerで実現できる。

[iOS] ViewController

めも。

 上が切れているけど、StoryBoardの作業領域に配置されたViewController。
 等倍表示の際は、下の名称部分がアイコン表示になる。

story_board

 アイコンは3つ。左から、下記の通り。

  • ViewController
  • First Responder
  • Exit

story_board2

■ViewController
 ViewController 自体を選択し、Xcode作業領域右端にあるユーティリティ・エリアに情報を反映させる際に使うアイコン。
 ViewController以外の部品だと、部品に対応するクラス名称が表示されます。

■FirstResponder
 XcodeのInterfaceBuilder周りのことを少し知っておいた方が判り易いですが、ビューが最初に応答するオブジェクトのことを FirstResponder と呼びます。
 →ファースト・レスポンダの詳細については、こことかこことか。

 この場合はViewController本体のイベント・ハンドラのことを指します。(※ファースト・レスポンダの場合、「タッチ以外の通知」が届くらしい。「タッチの通知」は、レスポンダ・チェーンの優先度順。またファースト・レスポンダは各ウィンドウに1つだけ。)
 ・イベント… キーが押された・クリックされた、というようなViewControllerに対しての通知のこと。
 ・ハンドラ… 取り回しを実際に執り行う処理のこと。

■Exit
 そのものをズバリ詳説している方がいたので、リンクを張っておきます。
  →StoryboardのUnwind Segueの使い方

 要点は2つ。

  • セグエのUnwindをコーディングで実現するのに用意されたしくみ
  • Unwindする際のデータ受け渡しをするしくみ

 Youtubeで説明している方を見つけたので、これも張っておく。

[iOS] 複数のStoryBoardファイルを使って画面遷移

 ちょっと複雑な画面構成になると大変そうな気がしたので調べた際の、めも。
 調べてみるうちに、StoryBoardを複数人で編集する際のコンフリクト問題を避ける意味合いで使っている人たちがいる事も判ってきた。。

 [iOS] 複数のStoryboardを使って画面遷移を作成する

 複数のStoryboardファイルを使ってViewの遷移を行う方法

 複数のstoryboardを使って、コードで画面遷移を実装する(要:Xcode6 & Swift)

A Short Practical Guide to Blocks

A Short Practical Guide to Blocks

  • BlocksはCocoa開発における強力な機能
  • それらはクロージャやラムダに似ている(※ということは、本来は結構理解は難しい系統。でも使いどころを絞ってみれば、便利な機能がいろいろあるはず。こことか参照してみるのもアリか..)
  • より詳細な理解が必要ならば、Blocks Programming Topics(日本語版はこちら)を参照すること
  • なぜ Blocksを使うのか
    • 作業単位のカプセル化と実行が容易になる
      (※マクロ的に処理を固めて、処理ごと別関数に渡すような機能を実現できる)
  • システムフレームワークAPI内のBlocks
    • Blocksを使う動機のひとつ:パラメータににBlocksを利用することで機能増加を図る
    • 概要の説明:フレームワークを理解する助けとして
    • Completion and Error Handlers:非同期処理のハンドリング
    • Notification handlers:通知のハンドリング
    • Error handlers:エラーのハンドリング
    • Enumeration:静的配列(※たぶん…)
    • View animation and transitions:ビューのアニメーション及びトラジション
    • Sorting:ソート方法
  • Blocks と 平行性(並列処理的な特性)

ラムダ式について、wikipediaにそれなりに判り易い説明があった。
ラムダ計算#非形式的な概説

基本的には、計算式(=操作)を(変数に置き換える..という意味において)数値のように扱う為の考え方なんですね..

例えば、数式「1+2」は抽象化されていないとても具体的な操作ですが、「x+y」と書くとそれは抽象的な加算操作だけを表します。(幾つと幾つを足し合わせるかは実際に値を貰った際に決まることとして、”足し合わせる”操作が定義されている。)

でもって、wikipediaの説明を引用すると..

f(x) = x + 2
から

λx. x + 2
と定義できる。

λx    .  x + 2
入力 . 出力
という 表現になる。

この関数に 3 を適用した場合(これは、以下のように考える)

f(3) = (λx. x + 2) 3
と書ける。
以上のことから

f x y = (f x) y
という抽象化された操作が定義される。

f(x) = x + 2 である時に、
式に3を引数として与えた f(3)
※上記 f(x) を内包する新たなラムダ式らしい..
これをラムダ式で書くと

λf. f 3
※「λf.f(3)」 じゃなく 「λf. f 3」 と書くらしい..
※f は関数。このあと f(x) = x + 2 が納まる。

これに式「x + 2」を適用すると
※ f(x) = x + 2 は、
※ λx. x + 2 と書くので

(λf. f 3) (λx. x + 2)
と書けるそうな。

ここまでの定義によって、
以下の3つの式は、全て同じ意味を成すようになる。

(λf. f 3) (λx. x + 2)

↓上記式の左辺を展開した形
(λx. x + 2) 3

↓上記式の左辺を展開した形
3 + 2

プログラム的にみると、「(λf. f 3) (λx. x + 2)」は、(λf. f 3)が関数で (λx. x + 2)は引数の扱いなんですよね..

このことからも見えてくる通り「ラムダ式表現ができる」ということは、
通常のプログラムに見られる「数値を引数に取る」動きではなく、「”操作”を引数に取る」動きが実現されるわけです。

ラムダ式を勉強すると、カリー化という概念も登場しますが、Pythonには関数と引数をひと括りにまとめるカリー化機能がありますね。
..概念的には同じなのかな?


クロージャの説明を見つけたので貼っておく。
Python Tips:Pythonでクロージャを使いたい

もっと優しめの
[JavaScript] 猿でもわかるクロージャ超入門 1 問題

上のを詳細に考察している感じのもの(2例)
クロージャと高階関数
なぜクロージャ(Closure)と言うのか?


カリー化
カリー化

正直処理的・実装的にどういうものかピンときてない。

f(x,y) = c

上記式が成り立つ場合に、
以下の形でも成り立つ式・実装をカリー化と呼んでいる。

f(x)(y) = c

ラムダ式の処理を、引数を1つずつ順に取る処理にできる。
というメリットがあるわけだけども、どうやって成り立たせるのかとか、不明な点だらけ。

上記の「f(x)(y) = c」は処理的には、以下の2ステップになる。

f(x) = g
g(y) = c
※ g というのは仮の変数名。
※関数オブジェクトが返されて yを引数に取る。

iOS developer libraly

 iOS開発情報サイトはここ。ということで、めも。

iOS developer libraly

日本語翻訳版
※往々にして翻訳版は、情報が遅い・古い・更新がなくなる…と言ったことが起きるので、必ず英語版も確認した方がいいと思います。。

 まずは、iOSアプリケーション プログラミングガイドを読むところから…かな。ただプログラミング・ガイドといっても「iアプリ作成手順」的な話は一切なくて、アプリケーション構成的な話です。

Xcodeの門を叩いてみる..

 毎日Z80で遊んでいる訳にも行かないので、軽くXcodeについて調べてみようかと思い立つ。
 いままで全く食指をそそられず…いまも特にそそられえはいないのだけども。。

 Xcodeを知らない人など、開発概要はこのへんを眺めるとなんとなくつかめるはず。


■Xcode起動
 OSXにはデフォルトで入っているかと思ったんですが、入ってなかったっぽいです。
 自分は未だにlionなのですが、AppStoreで更新してXcode4.6.3(英語版)が入っています。(2015.03.23現在だと)Xcodeの最新版は6.x系だったはず。
 入ってなければ、まずAppStoreで「Xcode」を検索してインストールしてください。

 アプリケーション・フォルダに入るので、その中からXcodeを探して実行してください。


■プロジェクトを作成する
 Xcodeでいうところの「プロジェクト」とは、なにかしら作業する場合に事前に作成する作業領域の事を指す。
 プログラミング環境を使う場合の共通用語ですね。

 とりあえず、キャッチーな感じでiアプリを作ってみようかと。。

  • “create a new Xcode project” または “File > New > project..” を選択。
  • iOS項目の”application” > “single view application” を選択。
  • choose_options..というウィンドウが出たら、Product Name, CompanyIdentifier, devices あたりを編集。この辺のサイトを見るのが良さそう。
  •  

  • 最後に保存場所を指定すれば、プロジェクトの作成は完了。(見失わないように、(ユーザーのホームディレクトリ)/dev/iapp/ の下にプロジェクトを作った。)

new_project create new project

choose_options
choose options


■StoryBoardを編集する
 開いたウィンドウの左端に「Project Navigator領域(フォルダアイコンが選択されている場合)」があるので、MainStoryboard.storyboardをクリック。

 どうでもいいけど、Windowsユーザーなのでシングルクリックに慣れずに、ついダブルクリックしがち。。

 クリックすると、左側にグレーの矢印で指された画面の枠が出てくる。

story_board

  • グレーの矢印には意味があって、「ここから始まるよ。」という意味。
  • 画面枠は ViewControllerと命名されている1画面の情報を保持するベースの枠組み。

 ViewControllerは同名のクラス定義を持っていて、コードでゴリゴリ定義を追加する事ができる。
 だがしかし、XcodeってばStoryboardを使えばコーディングレスで画面遷移を編集出来てしまう。
 プログラマがコードを書かなくていいプログラミング環境だなんて…。こういうエキセントリックなところがAppleですな。
 でも、自動的にコード追加されるわけなので、どこにどんな記述が追加されていくのかは把握しておく必要があります。バージョン管理ツール(git)もデフォルトで付いているので、フル活用して差を調べるのが良いと思います。

 あと…分らないことは、ちゃんとユーザガイドがあるので読みましょう。

 で。折角なので、定番の画面遷移をやってみようかと。


■パーツを追加してみる
 とりあえず初期画面と別画面で2画面を行ったり来たり遷移させたいので、画面は最低2つ。
 あと別画面を呼び出す為のトリガーが必要なので、初期画面の方にボタンを1個用意する。

  • デフォルトの画面とは別にViewControllerをもう一つ作業領域にドロップ。
  • 初期画面から別画面を呼び出す為のトリガーが必要なので、ボタン(Round Rect Button)を初期画面のView上に1個ドロップ。(うまくドロップ出来ない時は、「Interfacebuilder Dockのアウトライン表示」(作業領域の左側、Project Navigator領域の右側に開く領域。作業領域左下の三角ボタンをで開閉可能)で、ViewController内のViewを選択しておく。)

■Navigatorの設定
 ViewControllerが2つ揃ったら、今回はNavigatorを画面上部に表示しておく。

  • 各ViewControllerを選択して、”Editor > Embed In > Navigator Controller”を選択。
  • 追加されたNavigatorをダブルクリックすると表示名称を編集出来るので、画面に毎に異なる名前を付けておく。

■セグエの設定
 綴りは”segue”。
 「切れ目なく移行する」という意味があるんだそうです。へー。

 このセグエという機能でボタンと画面を接続すると、コーディングレスで画面遷移出来るそうな。。

 「初期画面 → 第2画面」て感じでいきます。

  • 初期画面上のボタンを選択。
  • controlキーを押しながら、(ボタンをドラッグするつもりで)ボタンの位置から第2画面上にドラッグ操作。
  • ボタンから画面に線が引かれるので、第2画面上にドロップ操作。(ボタンを離す)
  • 第2画面上にポップアップメニューが出るので、Pushを選択。

 操作を間違ってやり直してると変な定義とかゴミのように残りそうな気がするので、やっぱりある程度順番に沿って追加した方が良さそうな気がする。。
 なので慣れるまでは、「あー間違えちゃった…プロジェクト作り直そ。」って感じの作業になってしまったけども、慣れればそんなことはなくなると思う。

 とりあえず、以上の操作で画面遷移するプログラムが自動生成されるのです。

 英語のページだけど、こことか見るのでも、雰囲気が判るのではないかと。

 ホントはここからコーディングの事を書こうと思ったのに、ここまで書いたら書こうと思ってた事を忘れちゃったので、思い出したらまた書こうかと、、、orz