読者です 読者をやめる 読者になる 読者になる

MacPorts をアンインストールして Homebrew に戻す

IT Mac MacPorts

Inkscape仮想マシンでビルドすることにしたので、MacPortsからHomebrewへ。

継続的にメンテナンスされているパッケージと、そうでないパッケージの落差が激しいので。


Homebrewも問題がないとは言わないが、Bazaarとか一年前に2.7が出ているのに2.6のままだったり、しかもPythonのバージョンとの組み合わせでバグに遭遇するとか踏んだり蹴ったり。

あとは日本語のMacPortsの情報についてのWikiがちゃんと表示されないまま放置されていたりとか*1

ツールなりライブラリをインストールしたいのであって、issueトラッカーへのバグ報告がしたいわけじゃないので。

もちろんライブラリの共存機構やコンパイラの切り替えなどMacPortsにも長所はあります。ただ、それは私の求めているものではないいという話。

MacPorts のアンインストール

下記の公式の説明通りにすればよい。

2.4. Uninstall

MacPorts経由でインストールしたパッケージの削除。

$ sudo port -fp uninstall installed

いつも通りパスワードを訊いてくるので素直に入力。

続いて残りの関連ファイルを削除。

$ sudo rm -rf \
        /opt/local \
        /Applications/DarwinPorts \
        /Applications/MacPorts \
        /Library/LaunchDaemons/org.macports.* \
        /Library/Receipts/DarwinPorts*.pkg \
        /Library/Receipts/MacPorts*.pkg \
        /Library/StartupItems/DarwinPortsStartup \
        /Library/Tcl/darwinports1.0 \
        /Library/Tcl/macports1.0 \
        ~/.macports

最後に.bash_profileなどの設定ファイルをチェックする。 MacPortsをインストールする前の.bash_profile.bash_profile.macports-saved_<日付>_at_<時刻>という形式のフィアイルに保存されているので比較したうえでMacPorts向けの設定を削除する。

私の環境ではファイルの末尾にコメントとともに記載されていたPATHを設定するためのexportで始まる行を削除しただけ。

Homebrew のインストール

brew.sh

数ヶ月ぶりに復帰、です。

これも公式ページのとおりに。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

内部でsudoが実行されてパスワードを聞いてくるので素直に入力。

最終的に以下のメッセージが表示されるはず。

==> Installation successful!

==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
  https://git.io/brew-analytics

==> Next steps:
- Run `brew help` to get started
- Further documentation:
    https://git.io/brew-docs

メッセージの内容通り、ユーザーの行動についての情報を収集しているそうなのでオプトアウトする。

$ brew analytics off

もしくは環境変数HOMEBREW_NO_ANALYTICSに"1"をセット。

環境によっては/usr/local配下に管理者権限で作成されたファイル、ディレクトリが存在する場合があるので権限を変更しておく。

$ sudo chown -R $(whoami):admin /usr/local/

追加でインストールするもの

よく使うものをインストール

$ brew update
$ brew install lv the_silver_searcher tmux git cmake p7zip hub wget bash nkf

Python

Pythonpyenvで切り替える。

$ brew install pyenv pyenv-virtualenv

ついでにpyenv-virtualenvもインストールしておく。

~/.bash_profileに下記を追加する(環境によっては~/.profile)。

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
$ pyenv install --list

Bash の入力補完

/usr/local/etc/bash_completion.d/配下に補完用の設定ファイルがインストールされるので、~/.bashrcに設定を追加。

インストール済みのパッケージによって存在するもののみ読み込むようにする。

$ vim ~/.bashrc
source /usr/local/etc/bash_completion.d/ag.bashcomp.sh
source /usr/local/etc/bash_completion.d/brew
source /usr/local/etc/bash_completion.d/git-completion.bash
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/tmux
source /usr/local/etc/hub.bash_completion.sh

私の環境では~/.bash_profileから~/.bashrcを読み込むようにしています。RedHatLinuxを使っていた頃の名残というか癖というか。
aliasとか環境変数周りは.bashrcに設定するようにしています(bashの起動時に設定したいもの)。

まとめ

それぞれ一長一短あるように思いますが、

*1:Chrome系だから?

Interface 2017年3月号のTensorFlow による機械学習入門がいい感じ(もうすぐ次の号が出るけど)

書評 購入したもの 雑記 雑誌 電子書籍

あくまでも独断と偏見ですが。

TensorFlowで機械学習を始めるにはイメージがしやすい内容に仕上がってると思う。

理論とか数学的な詳細はスルーして、とりあえず動かしてみる、という場合には最適。

理論とかそっちは後でオライリーasin:4873117585:titile]を読めばいいと思う*1

紙媒体ではなくPDFを購入しました。

Interface 2017年3月号 ラズパイにON!Google人工知能/Google人工知能 TensorFlow初体験ガイド【PDF版】 | Tech Village 書庫&販売 - エレクトロニクス分野の電子書籍販売サイト / CQ出版株式会社


残念ながらこのPDF、パスワードロックがかかっていてテキストがコピーできないようです。

電子版と紙媒体版、同じ価格にする必要はないと思うんですがどうなんでしょう*2

トラ技と違って基板の類はついてこないのでどんどん電子化してもらって問題ないはず。

概要など

第1特集がTensorFlowを使ったキュウリの等級判定。

第2特集がJupyter Notebook とDocker による TensorFlow のセットアップと基礎。

第1特集

まずキュウリは長さとか曲がり具合などにより等級が存在し、出荷時に農家が手作業で仕分けしているとのこと*3

まず手作業で分類したキュウリに対して上下と横から見た状態の三方向から撮影して画像を用意。
この画像をグレイスケール化するなど加工したうえでニューラルネットワークをトレーニングさせて、その学習データを使ってノートパソコン上で判定処理を実行。

その後同じ判定処理をラズパイ、Google Cloud MachineLearningで実行させるまでの一部始終。

TensorFlow のチュートリアルを実行して終わりではなくて、改造した上でUIとサーボーモーター制御のサンプルを追加している。

以下、ちょっとした疑問と改善案。

  • きゅうりが撮影台に載っているかどうかを人工知能にさせなくても、普通にOpenCVの物体検出(動態検出)で良いのでは
  • 実際の仕分け現場では精度が8割まで低下したとのことで、原因として周囲の環境光が挙げられていた。周囲の環境光が原因だとするなら、撮影台に外部からの光を遮るようなシャッターのようなものを取り付ければいいのでは

第2特集

TensorFlow とJupyter Notebook のセットアップ済みのDocker イメージででTensorFlowセットアップして遊んでみようという記事。

Window 、MacLinuxの各環境向けのPythonのセットアップ手順から解説されている。

Docker for Mac で実行してみたがちゃんと動作した。

Python はインストール済みであるものとして、Docker for Mac ( or Windows ) をインストールして下記のコマンドを実行。

$ docker run -it -p 8888:8888 -p 6006:6006 --name tf gcr.io/tensorflow/tensorflow /bin/bash

ダウンロード完了後、自動的にシェルが起動する。

初期状態でNotebookAppという名称のディレクトリにいるのでそのままJupyter Notebookを起動する。

# jupyter notebook

コンソールに下記のメッセージとともにURLが表示されるのでブラウザのアドレスバー*4コピーアンドペースト

Copy/paste this URL into your browser when you connect for the first time,
to login with a token:

初回だけアクセストークン付きの長いURL。2回目以降はhttp://localhost:8888OK

ブラウザから接続すると特集記事のサンプルを動かせる。

[f:id:atuyosi:20170222024118p:plain]

特集記事の本文にある通り、一度コンテナを停止させた後で再度実行する場合はdocker startコマンドでコンテナを指定して実行する。

$ docker start -I tf


停止時はdocker stopを使う*5

$ docker stop tf

Docker の概要と基本操作はPaizaの解説ページが綺麗にまとまっている。

Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き) - paiza開発日誌

あとは実際に手を動かしていくだけ。

まとめ

一昨年ぐらいからTensorFlowに手を出そうと意識はしていたものの、今までろくに試せていなかったので最初のとっかかりとしては十分すぎる内容。

Interfaceという雑誌、組み込み機器などハード寄りのイメージの強い雑誌ですが、意外と侮れないと言う感想。

以前は技術評論社の雑誌を毎号購入していた時期がありましたが、最近は購買欲がわかない特集が多いです。その点、CQ出版のトラ技とこのInterfaceの方が興味をそそる内容の特集が多いような気がします。

別にSoftware DesignなりWeb+DB PRESSを買わないとかいうわけではないですが。


食わず嫌いなのか、あるいは「老い」というやつなのか。結構ググればそれなりにその場しのぎになるからでしょうか。

それではまた。

*1:まだ買ってないですが評判はいいみたいです

*2:技術評論社にも言えることですが

*3:流通にやらせればいいのに

*4:ロケーションバー

*5:KitematicなどGUIツールをインストールしておくと楽

iOS 10/Swift3 関連本あれこれ(洋書編 .ver)

Swift iOS 技術書 電子書籍 書評

購入したものとそうでないもの、読み放題サービスで中身を眺めたもの、旧版を買ったが現行版は買わない、などいろいろ。

個人の独断と偏見によるものです。あしからず。

随時追記する予定。


目次のようなもの

オライリー

50%オフというパワーワードの前に抗う術を持ちませんでした。Deal with Day とかいうヤツ。

Learning Swift Second Edition

Learning Swift: Building Apps for Macos, Ios, and Beyond

Learning Swift: Building Apps for Macos, Ios, and Beyond

  • 作者: Paris Buttfield-addison,Jon Manning,Tim Nugent
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2017/04/25
  • メディア: ペーパーバック
  • この商品を含むブログを見る

Learning Swift 3 - O'Reilly Media

まずmacOS向けのアプリを作成し、その後でiOSアプリを作るというアプローチ。これはこれで良心的な気がする。
旧版とタイトルが紛らわしいので注意。

あと、正式タイトルが"Learning Swift"の2nd editionなのか、Learning Swift 3なのかはっきりして欲しい。Packt からも似たようなタイトルのSwift 2.x向けが存在しているという。

例によって例の如く、"Early Release" 版の時点で購入しています。

  • プログラミング経験者が対象
  • Swift およびObjective-Cの経験はないと仮定
  • macOS/iOSの開発経験はないと家庭
  • Swift にフォーカス(つまりObjective-Cの話は出てこない)
  • 英語の本にしては画像多め
  • iCloud連携に関してはDeveloper License が必要なので注意されたし
  • 他のオライリー本より英文が平易で読み易い*1

最大の特徴は4部構成となっていること。それぞれSwift の解説(シンプルなiOSアプリ)、macOSアプリ作成、iOSアプリ作成、アプリの拡張(iOSアプリへのwatchOSアプリ追加、パフォーマンス改善)となる。

500ページぐらいなのでやや広く浅くになりがちだけどお買い得感はある。

サンプルコードなどは、以下。

GitHub - thesecretlab/LearningSwift2Ed: Code for "Learning Swift, 2nd Edition", published by O'Reilly Media, on developing apps with Swift 3.

iOS 10 Programming Fundamentals with Swift

iOS 10 Programming Fundamentals with Swift - O'Reilly Media

iOS 10 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics

iOS 10 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics

著者はMatt Neuburg氏。

前半がSwift 3の基礎で後半はiOSの新機能中心。

Programming iOS 10

Programming iOS 10 - O'Reilly Media

iOS 10 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics

iOS 10 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics

※ 正式リリースはまだ。購入済み。先は長そう。

著者はMatt Neuburg氏。Swift 3の基礎的なことは書いてないので同じ著者のもう一方を読んでくれとのこと。Objective-Cの知識もあった方が良い。

サンプルコード:GitHub - mattneub/Programming-iOS-Book-Examples: Downloadable code examples for my books, “iOS 10 Programming Fundamentals With Swift” (bk1) and “Programming iOS 10” (bk2).

同じ著者でこのページ数を書き上げるあたりはすごいとしか言いようがない。

Packt Publishing

Mapt経由による。

Test-Driven iOS Development with Swift 3

Test-Driven iOS Development with Swift 3 | PACKT Books

一冊5ドル祭りで購入したけど未読。

Swift 3 Game Development - Second Edition

Swift 3 Game Development - Second Edition | PACKT Books

同じ著者で過去にもゲーム作成の本を書いているのでまともな内容だろうと思う。

Mastering Swift 3

Mastering Swift 3 | PACKT Books

簡単なサンプルを作ってそこからリファクタリングしながら解説する形式だったと思う(うろ覚え)。

Mastering Swift 3 - Linux

Mastering Swift 3 - Linux | PACKT Books

タイトルの通りLinux版のSwiftをターゲットにしている。珍しい。

Swift 3 Object Oriented Programming - Second Edition

Swift 3 Object Oriented Programming - Second Edition | PACKT Books

Swift 3 Protocol-Oriented Programming - Second Edition

Swift 3 Protocol-Oriented Programming - Second Edition | PACKT Books

ほとんどの掲載コードはiOSmacOSLinux、(IBMが提供する)Webブラウザ経由で実行するSwiftで動作するらしい。

Swift 3 Functional Programming

Swift 3 Functional Programming | PACKT Books

2016年の6月に出ている、要するにDeveloper preview versionのSwift をベースに書かれている。そのため微妙に正式リリース版のSwift 3と違う部分があるかも。

Swift 3 Programming Cookbook

Swift 3 Programming Cookbook | PACKT Books

3月発売予定。Cookbookは当たり外れが大きいので目次をよく確認することを推奨。

Swift 3 Programming for Kids

Swift 3 Programming for Kids | PACKT Books

3月発売予定。子供がよろこぶようなプログラム、なのか、子供と一緒にプログラミングなのか不明。

Playgrounds で文法を学びつつサンプルアプリを仕上げるようなタイプに見える。

Pragmatic Bookshelf

Rails 関連本とかヘルシープログラマの原著を発売した出版社。

iOS 10 SDK Development

サブタイトルは"Creating iPhone and iPad Apps with Swift"。

iOS 10 SDK Development: Creating iPhone and iPad Apps with Swift by Chris Adamson with Janie Clayton | The Pragmatic Bookshelf

正式発売は年明けじゃないだろうか。

iOS 8版の時は一冊全体でTwitter クライアントをブラッシュアップしながら作るという本だった。サンプルソースを見る限り前半はPlaygroud でお勉強。後半からPodCast用のクライアントを作るのかな?

いちいちXcode のプロジェクトを作る必要がないという利点はあるけど、日本語の書籍のように一冊で複数アプリの作り方を解説というスタイルを期待していると肩透かしを食らう。

iOS 8版を踏襲しているとすると、順を追って機能を追加していくスタイルでちょっとまどろっこしい。せっかく写経したコードをバッサリ削除して次のステップへ、とか進化のなぞりかえしスタイルだったはず*2。音楽再生タイプのアプリを作りたいなら役に立つかも。

クリスマス前後とか元旦に割引キャンペーンがあると思う。ただし買う気はしない。

Raywenderlich.com

www.raywenderlich.com

ゲーム開発向けのチュートリアルで有名。

月額料金制のチュートリアルとは別に書籍も発行している。

購入したことがないのでなんとも言えないが、やや割高な印象。

日本語のレビューを見かけない……。誰かレビュー求む。

Big Nerd Ranch

www.bignerdranch.com

今まで購入したことはないのでなんとも。

macOS向けアプリ開発についての本(通称ヒレガス本)で有名。iOSよりmacOS向けの書籍に期待したい。

iOS Programming: The Big Nerd Ranch Guide (6th Edition)

iOS Programming Guide | Big Nerd Ranch

誰かレビュー求む。

Amazon.comのレビューは好評の模様。

所感など

本を買って満足、もしくは本の内容を把握して満足するという状態になっていて非常にまずい。

イギリスのPackt はちょっと自重しろよって感じです。昨年あたりから日本の方はRとPython本がバブル気味ですが、海外もProgramming 関連本はよく売れるんでしょうか。


インプット過剰気味なのでちゃんとアプリをリリースするところまでちゃんと持っていきたい今日この頃。

それではまた。

*1:個人の見解です。他の方が読み易いと感じるかどうかは語学力に依存すると思います。

*2:学習効果は高いと思うがなんかめんどい

Vine Linux 6.5 Beta 8 の感想など

IT Linux

鮭という魚は生まれた川を遡上するらしいですね。

まあそういう訳で久しぶりにVine Linux のベータ版を試してみました。

6.x の商用版購入したのはかなり前で、インストールした仮想マシンのデータが破損して以来、綺麗に放置してました。

そもそもLaTeX使う訳でもないし、サブマシンのつもりだったMacBook Air が結果的にメインのマシンになっていますし。


ベータ版についての情報は以下より。

Vine Linux News - Vine Linux 6.5 beta8 (final予定) を公開

開発者向けのMLを見る限り、3月上旬にリリースされそうな雰囲気だけど、開発版のMLでメンテナのお一人が離脱を宣言しているように見える。ものすごく心配。

[VineSeed:028367] Vine Linux 6.5 リリーススケジュール


3月に6.5をリリースしたとして、7.xのリリースした後で6.x系もメンテするつもりなんだろうか。そんなリソースあるとは思えないので強引にでも7.xに移行して6.xはサポート終了の方が良かったのではないですかね。

インストールしてみる

手元に未使用のマシンはないのでVirtualBoxにインストール

Vine Linux - Beta

ベータ版の配布サイトからダウンロードして、VirtualBoxにインストールしてみます。

$ wget http://beta.vinelinux.org/65/Vine65b8-DVD-x86_64.iso

VirtualBox へのインストール

CPUはx86_64、メモリ1GB。あとはデフォルトのまま。"Other Linux 64bit"にしておけばいい。

f:id:atuyosi:20170221011330p:plain
“Install Vine Linux"を選択した状態で"Enter"。

f:id:atuyosi:20170221011423p:plain
従来どりのインストーラ

日本語キーボードを選ぶぐらいでパーティション分割もインストーラのデフォルトのまま。管理者アカウントと一般ユーザーのアカウントを追加するぐらい。

インストール時のカテゴリは「デスクトップ」(うろ覚え)にしたと思います*1

”Guest Additions” についてはVirtualBox側の"Insert Guest Additions CD Image"からすんなりインストールできた。

長所

  • Ubuntuの標準デスクトップより軽い
  • RPM向けのaptが使える
  • 初期状態で日本語フォントの表示が(非商用フォントにしては)綺麗
  • 追加設定なしで日本語入力できる
  • systemd ではなくsysvinit (?)

日本語入力まわりの設定とフォントの表示の設定がチューニング済みというのは大きいと思います。商用版からsudo apt-get dist-upgradeすればデフォルトが商用フォントになるはずです*2

全くの余談になりますが、他のディストリビューションの場合、日本語フォントの表示まわりはPlamo Linuxの設定ファイルを参考にするのも一つの方法。こっちもかなりチューニングされてるのと、各種パッケージが新しいので。

各種パッケージなど

f:id:atuyosi:20170221011258p:plain

デスクトップは従来通り。

日本語入力はiBus + mozc。最初からきっちり設定されている。

fcitx + mozc のような、英語配列用の設定を除去する作業は不要。

$ uname -a
Linux localhost.localdomain 4.4.49-1vl6 #1 SMP Sat Feb 18 02:12:32 JST 2017 x86_64 x86_64 x86_64 GNU/Linux

カーネルはいいとして、他のコンポーネントが問題。

Ruby のバージョンを見て一瞬、インストールディスクを取り違えたかと思った。

$ cat /etc/vine-release 
Vine Linux 6.5 (Poupille)

Pythonはともかく、さすがにRubyは 2.x にして欲しいところ。なお、Pythonpython3パッケージが提供されているようです。 rbenvなりDocker でどうにでもなるけどpyenvと両方入れるとシェルの起動時にもたつくのでつらい。

とは思ったものの、apt search dockerしてもDockerのパッケージがヒットしない?

ニューサイトにリリース告知が掲載された時に主要コンポーネントのバージョンを見てドン引きされそう……。

所感など

最初に遭遇したLinuxVine Linux 2.1.5の頃)なのでなんだかんだで思い入れはあります。

アスキーLinuxマガジンが健在だった頃ははかなりユーザーがいたはずなのですが、最近は検索してもサーバー構築事例を見かけなくなりました。

他のディストリビューションの日本語環境もかなり充実しているのと、サーバー用途なら特に日本語固有の問題は起きないから昔ほどの優位性はないように思います。
エラーメッセージでググった時にヒットするのは英語のページがほとんどで海外のユーザーの多い方ディストリビューションの方が困った時に圧倒的に楽……。

また、リリースサイクルが不安定なのはマーケティングの面からかなりマイナスだと思います。リリースのたびに雑誌やニュースサイトで取り上げられるFedoraUbuntuと比較すると認知度が段違い。

新しいパッケージを試したいならArch Linux、安定志向ならDebian系、企業ユーザーならRHELCentOSあたりが定番なので、何か特殊なニーズを掴まないと厳しい。

もう以前のように雑誌で特集が組まれたり解説本が発売される確率は低そうです。ちょっと寂しい感じがします。

まとめ

Vine Linux らしいというか、いつも通り手堅く仕上がっていると思います。Ubuntuの標準フレーバーより確実に軽快に動作します。

ただ、どうしても一般ユーザーへのアピールポイントに乏しいという印象です。Ubuntu の日本語Remixのような競合が存在する中であえてVine にするかと言われると厳しいと思いました。セキュリティ修正パッケージの提供が遅いという悪評が定着しているようなのでLANの外でサーバー用途に使うのは流石に不安。

元祖国産ディストリビューションとして頑張って欲しいとは思うけど、Plamo Linuxの方がセキュリティ修正パッケージの提供は頑張っているように見える。
早いところ 7.x のリリースして巻き返して欲しいと思います。


3月のOSC Tokyoに6.5が間に合うと(マーケティング的に)何かと都合が良いと思うんですが、どうなんでしょう。

それではまた。

*1:ワークステーションだったかも」

*2:やってません

Inkscape 0.92.1 のパッケージ(gtk/quartz backend)をつくる

IT Mac Inkscape

Inkscape 0.92.1 がリリースされています。

Release notes/0.92.1 - Inkscape Wiki

日付が2月13日なのは少し疑問ですが、まあいいでしょう*1

相変わらずMac向けの公式バイナリはリリースされていませんが、次のリリースに向けてなんとかしようという動きはあるようです。

Tim Sheridan 氏によるビルド用のパッケージ作成スクリプトの修正版(ただしExperimental 扱い)が公開されています。

0.92.x_mac_packaging : Code : Inkscape

XQuartz 版が公開されています(まだテスト用扱い)。

inkscape.org

例によって例のごとく、XQuartzなしで動くバージョンが欲しいので、自前でビルドします。

そのうちMacPortsからsudo port install inkscape +quartzで最新版がインストールできるようになるはずです。

わざわざビルドする理由は、dmg形式にしておくとOSリカバリの時にビルドし直さなくていいよねってだけの話です。

自前でビルドしてみる

パッケージ作成スクリプトの修正版はまだメインのリポジトリに反映されていません。

素直に開発版のリポジトリから入手しようかと思いましたが、MacPortsをバージョンアップしたところ、bazaar(bzr)の挙動がおかしいので断念。

手っ取り早く最新のリビジョンを探し、”download tarball"のリンクをクリックしてダウンロード。差分だけ取得して0.92.1のソースに適用するのも可。

~tghs/inkscape/0.92.x_mac_packaging : revision 15379

今回はリビジョン15379

$ tar zxf ~tghs_inkscape_0.92.x_mac_packaging-r15379.tgz
$ cd ~tghs/inkscape/0.92.x_mac_packaging

移動した先のディレクトリの、README.txtファイルを参考にしてQuartz版を作成します(packaging/macosx/README.txt)。

ビルド

ビルド環境は過去記事でセットアップしたMavericks環境です。

まずはMacPortsのインストール先を環境変数にセット。

もし同一マシンでX11版とQuartz版を作り分けたい場合は、MacPortsのインストール先を区別できるようにするといいと思います。

$ export MP_PREFIX=/opt/local
$ cd ~tghs/inkscape/0.92.x_mac_packaging/packaging/macosx/

独自のPortfileを使用して追加パッケージをインストールすることが前提になっています。

そのためにMacPortsの設定ファイルを編集する必要があります。

$ sudo sed -e '/^rsync:/i\'$'\n'"file://$(pwd)/ports" -i "" "$MP_PREFIX/etc/macports/sources.conf"

現在のディレクトリのパスと、$MP_PREFIXの値を埋め込むので注意が必要です。

$ less "$MP_PREFIX/etc/macports/sources.conf"

最終行の一行上にPortfileの配置ディレクトリのための設定が追加されていればOK。

続いてパッケージのインデックスを更新。

$ (cd ports && portindex)

同じ要領でMacPorts全体のビルド設定(variants)を修正。以下はあくまでもQuartzバックエンドとしてビルドするためのものです。

$ sudo sed -e '$a\'$'\n''-x11 +quartz +no_x11 +rsvg +Pillow -tkinter +gnome_vfs' -i "" "$MP_PREFIX/etc/macports/variants.conf"

依存パッケージを一式インストール。それなりに時間がかかります。

$ sudo sed -e '$a\'$'\n''-x11 +quartz +no_x11 +rsvg +Pillow -tkinter +gnome_vfs' -i "" "$MP_PREFIX/etc/macports/variants.conf"

configureのバグを回避するため、osx-build.shを修正。

$ vim osx-build.sh

267行目の下に以下の二行を追加(250行目と251行目をコピーした結果)。

        # Workaround for https://bugs.launchpad.net/inkscape/+bug/1606018
        CONFFLAGS="--disable-strict-build $CONFFLAGS"

もしMountain Lion やYosemite以降でビルドするなら対応する箇所に修正が必要だと思う。いまのところMavericksでしか試していません。

起動時にエラーが表示される例のバグを回避するパッチを適用。

$ patch ScriptExec/launcher-quartz-no-macintegration.sh fix_lp476678.patch 

パッチは以下の通り。

--- ScriptExec/launcher-quartz-no-macintegration.sh.bak  2017-01-08 02:56:39.000000000 +0900
+++ ScriptExec/launcher-quartz-no-macintegration.sh 2017-01-08 02:58:25.000000000 +0900
@@ -143,7 +143,7 @@
    export LANG="en_US.UTF-8"
 else
    tmpLANG="`grep \"\`echo $LANGSTR\`_\" /usr/share/locale/locale.alias | \
-       tail -n1 | sed 's/\./ /' | awk '{print $2}'`"
+       tail -n1 | awk '{print $2}' | sed 's/\./ /' | awk '{print $1}'`"
    if [ "x$tmpLANG" == "x" ]
    then
        # override broken script

一気にdmgファイルまでビルド。

$  LIBPREFIX="$MP_PREFIX" ARCH="x86_64" ./osx-build.sh a c b -j 5 i p -s d

Inkscape.appdmgファイルが生成されているので動作確認する。

f:id:atuyosi:20170217153418p:plain

Sierra 対策

Mavericks でビルドしたバイナリをSierraで動かすと内部エラーで起動しない……。Mavericksでは普通に動くのに。

以前から知られている問題と同じようなので、その場しのぎの対応ですが、小細工で回避。

前述のパッチと同じ要領で、パッチを適応してdmgファイルだけ作り直す。

作業ディレクトリに戻ったうえで下記を実行。

$ patch Inkscape.app/Contents/MacOS/inkscape fix_SierraBuild.patch
patching file Inkscape.app/Contents/MacOS/inkscape
Hunk #1 succeeded at 154 (offset 3 lines).

dmgファイルの生成。

$ ./osx-dmg.sh  -p Inkscape.app

外付けディスプレイは外して置いたほうがいいかもしれない。

Inkscape.dmgが生成されるのでこれをインストール対象のマシンに持っていく。なお、修正パッチは下記の通り。

--- ScriptExec/launcher-quartz-no-macintegration.sh.bak  2017-01-08 02:56:39.000000000 +0900
+++ ScriptExec/launcher-quartz-no-macintegration.sh 2017-01-08 02:58:25.000000000 +0900
@@ -151,6 +151,10 @@
        export LANG="$tmpLANG.UTF-8"
    fi
 fi
+
+if  [ $OSXMINORNO -gt 11 ]; then
+    export LANG="$(echo $LANG | cut -d. -f 1)"
+fi
 [ $_DEBUG ] && echo "Setting Language: $LANG" 1>&2
 export LC_ALL="$LANG"

実行時にセキュリティがらみの警告が出る場合は、Applicationフォルダに移動して右クリックメニューから実行すればよかったはず。

もしくは環境設定からセキュリティまわりの設定を変更。

Maverciks からデフォルトのstdlibまわりが変更になっているので、コンパイラの最適化との関係で何かまずいんだろうと思う。

完成品

あまり需要がなさそうですが一応、置いておきます。 XQuartzなしで動くQuartz 版です。

www.dropbox.com

起動スクリプトのバグ修正を含みます。

変更点など

過去記事のビルドとの変更点は、以下のとおり。 独自のパッチ

  • CMake ではなく従来どおりのautotoolsによるビルド方式
  • Extension の動作に必要なファイルが追加(されたはず)

上述したとおり、独自の修正を含んでいます。

  • 日本語ロケールで起動時に「内部エラーが発生しました」というダイアログが表示されて起動できない問題
  • 特定の環境でビルドしたバイナリをSierraで実行すると起動できない

あとは冒頭のリンク先と同じです。

スクリーンショット

f:id:atuyosi:20170217200448p:plain

こんな感じ。


おしまい。

*1:確かにRC相当のプレリリース版はその辺の日付だった。

VirtualBox のゲストとしてMavericks (OS X 10.9) をセットアップしたメモ

IT Mac VirtualBox Mavericks

外付けストレージとのデュアルブート構成にしていたのですが、やはり不便なので仮装環境上にMavericksをインストールすることにしました。

Sierraではない理由はできるだけ古いOS X環境にしたいからです。

本来は手元のMacBook Air にインストール可能な最も古いバージョンであるMountain Lionにしたいところですが、リカバリ用のユーティリティからはインストールできても、 インストーラーそのものは手に入らないようなので。


基本的に以下のページと同じです。

qiita.com

iESDというコマンドを使う。メンテされてないようですが、インストール対象のゲストOS自体が古いので問題ないと判断しました。

GitHub - ntkme/iesd:  Customize OS X InstallESD.

参考(Sierraの場合): [VirtualBox]仮想環境で macOS Sierra を導入(isoイメージ作成)[Sierra] - Qiita

最初は安直にcreateinstallmediaコマンドの引数に空のdmgファイルを指定したらできるかと思いましたが、VirtualBox側が受け付けてくれませんでした。

ツールの入手と実行

githubからclone。

$ git clone https://github.com/ntkme/InstallESD.dmg.tool
$ cd InstallESD.dmg.tool
$ ls
LICENSE.md   README.md    bin          iesd.gemspec lib

インストール用ディスクのイメージをマウントしていると途中でこけるのでアンマウントされていることを確認してから実行。

$ bin/iesd  -t BaseSystem -i /Volumes/DSHGST/Data_Sub/resources/apple/Marvericks/Install\ OS\ X\ Mavericks.app/Contents/SharedSupport/InstallESD.dmg  -o Output.dmg

十数分はかかったはず。

ここで生成されたOutput.dmgVirtualBoxの起動ディスク(CD-ROM扱い)に指定すればインストーラーを起動できる。

仮想マシンの作成

VirtualBox 側で仮想マシンを作成します。「新規」をクリックするとウィザードが起動するので、仮想マシンの名称の箇所でmacOSOSX)っぽい名前を入れると中央のプルダウンメニューがそれらしき候補に変化します。

f:id:atuyosi:20170216154310p:plain

Linux系の場合より多くのメモリが必要なようです(結局、2GBに設定)。

その他、細かい設定は以下を参考にしました。

VirtualBox -仮想環境”OS X 10.9 Mavericks”を作成- | External storage

サイトによってはチップセットの変更に言及されていますが、ICH9でも動作するようです。私はビデオメモリ64MB、CPU数 2としています。

ゲストOS(Maverics) のインストール

仮想マシンを起動すると起動ディスクを指定するためのダイアログが表示されるので、前述のOutput.dmgをセットして続行。

注意点は、OS Xインストーラーはフォーマット済みのディスクしかインストール先として認識しないという点。

初回は仮装ハードディスクを認識するものの、フォーマットされていない状態なので、ディスクユーティリティに切り替えて「消去タブ」からパーティションをつくる必要がある。

なお、OSXEULAには仮装環境でのインストールは2台までと記載されています。もちろんApple製のハードウェア上で仮想化ホストOSが実行されている前提。

f:id:atuyosi:20170216154033p:plain

Xcode

Mavericks 用なのでXcode 6.1.1をインストール。対応するバージョンのComandlineToolsもインストールする。

どちらも入手はApple Developer のサイトから(要ログイン)。

制限事項

VirtualBoxのマニュアルにmacOSOS X)ゲストについての制限事項の記載があります。

参考:http://download.virtualbox.org/virtualbox/5.1.14/UserManual.pdf

セクション14.2あたりを確認。

  • 仮想マシンに割り当てられた一つのCPUで動作する(ホストのCPUクロックより高いクロック周波数のCPU扱いになる)
  • guest addon はmacOSゲストには提供されない(つまり、VirtualBox側のファイル共有手段が使えない)
  • 初期状態では画面解像度が1024x768(VirtualBoxが提供するコマンドで変更可能)

遭遇した問題など

  • USBデバイスの共有機能を使ってUSBメモリからファイルをコピーしようとするとなぜか途中でUSBメモリを見失って失敗する
  • 「このMacについて」というメニューからハードウェアの詳細を確認しようとするとログイン画面にフォールバックする

参考URL

macOS に Uniconvertor (ver 1.x) をインストールする

Inkscape とりあえずやってみた

何の因果かわかりませんが、微妙な時期に絶妙にマイナーなユーティリティのインストールについてのエントリを書いております。

どうやらInkscapeのエクステンションの中にこいつを要求するものがあるらしい。そして以前のmacOS向けパッケージにはバンドルされていたそうで。

そしてmacOS向けのバイナリは配布されていなし、MacPortsにもない…。


[2017/02/16 追記]

InkscapeソースコードMacPorts用のPortfileが含まれているのでそれを使う方が楽でした。
なんとも微妙な気分です。

ソースファイルを展開したディレクトリの、下記のファイルを適当なディレクトリにコピーし、あとはMacPorts側の設定を変更してやればいけるはず。

packaging/macosx/ports/python/py-uniconvertor/Portfile

[追記ここまで]

手順は基本的に以下のサイトを参考にする。

How to install Uniconvertor (command-line app) on Mac OS 10.7.2 (Lion)? - Super User

というかほとんどそのままです。

準備

まず必要なファイルを入手してくる。

UniConvertor Download Page

  • uniconvertor-1.1.5.tar.gz
  • uniconvw-1.1.5.tar.gz
  • sk1libs-0.9.1.tar.gz

依存パッケージをインストール。freetype2 など色々と必要なようだがInkscapeビルドするための依存パッケージをインストールすればほとんど揃っているはずなので省略。

Inkscapeが要求するのはlcms2だけどUniconvertorが要求するのはlcms

$ sudo port install  lcms

MacPortsPython

面倒なことに、OS標準のPython 2.7と、MacPortsPython 2.7の両方が存在している。他のライブラリとの兼ね合いからすると、MacPorts側でないと不都合がある。

そのため、明示的にMacPorts側のPythonを呼び出す。

MacでPython環境を作る時に気をつける事 - Qiita

上記のページを参考に、それぞれインクルードパスとインストール先を確認する。

OS標準のPython の場合

$ which python
/usr/bin/python

インクルードパス:

$ /usr/bin/python -c "import site; print(site.getsitepackages())"
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']

モジュールのインストール先:

$ /usr/bin/python -c "import distutils.sysconfig as s; print(s.get_python_lib())"
/Library/Python/2.7/site-packages

MacPortsPython 2.7)の場合

$ which python2.7
/opt/local/bin/python2.7

インクルードパス:

$ /opt/local/bin/python2.7 -c "import site; print(site.getsitepackages())"
['/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python']

モジュールのインストール先:

$ /opt/local/bin/python2.7 -c "import distutils.sysconfig as s; print(s.get_python_lib())"
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

ビルドとインストール

Pythonのライブラリによくあるsetup.pyによるインストール

アンインストール用のタスクのようなものは存在しないみたいなので、削除する場合は手作業。

sk1libs

いつも通りソースを展開。

$ tar zxf sk1libs-0.9.1.tar.gz
$ cd sk1libs-0.9.1

python2.7の部分は環境に応じて変更する必要があります。少なくともMacPortsを利用して必要なライブラリをインストールしている場合はOS標準の方ではなく、MacPortsでインストールしたPython 2系を指定。

$ LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include -I/opt/local/include/freetype2" python2.7 setup.py build

問題がなければインストール

$ sudo python2.7 setup.py install

MacPortsのPython2.7のインクルードパスにインストールするのが目的であるので、最後に以下のように出力されていればOK。

Writing /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sk1libs-0.9.1-py2.7.egg-info

Uniconvertor

同じ要領で。

$ tar zxf uniconvertor-1.1.5.tar.gz
$ cd uniconvertor-1.1.5
$ LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include -I/opt/local/include/freetype2" python2.7 setup.py build

ビルドに成功したらインストール

$ sudo python2.7 setup.py install

動作の検証

実行時にpython-imaging、python-reportlabを要求するので対応するパッケージか代替品をインストールする。

$ sudo port install py27-Pillow
$ sudo port install py27-reportlab

インストール先のディレクトリがパスに追加されていないので絶対パスで指定して実行。

$ /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/uniconvertor 変換したいファイル 変換後のファイル名

フォーマットは拡張子で自動判別される。

対応しているフォーマットは本家のサイトへ。

UniConvertor vector graphics translator

なお、PythonのパスがハードコーディングされているのでmacOS標準の方のPythonが呼び出されたりはしない。/usr/local/binシンボリックリンクを作成しておくといいと思う。

uniconvw

GUIのラッパースクリプトらしいです。InkscapeのExtentionからすると不要な気がしますが一応。動くかどうかは試していません。

上記と同じ要領でインストールすればいいはずだが、/usr/share/applicationsディレクトリを作成しようとしてこける。対処法としては setup.pyの103行目以降の、ハードコーディングされている/usr/share/usr/local/share、またはインストールディレクトリに合わせて変更する。

そのほか

注意点など

CorelDRAW(.cdr)形式のファイルの変換をサポートしていると記載されていますが、新しいバージョンのファイル形式はサポートされていないようです。Googlefiletype:cdrとしてヒットするファイルで試しても変換不能でした。スタックトレースとともに以下のメッセージで変換できませんでした。

    raise SketchLoadError(_("Parsing error: ")+ str(value))
app.events.skexceptions.SketchLoadError: Parsing error: unrecognised file type

また、Inkscapeで作成したSVGファイルについても、モノによっては処理が終了しないケースがあるようです。具体的な条件は良く分かりません。 エラーを吐かずにコマンドプロンプトが帰ってこない状態になります*1

LInux 向け情報

Ubuntu 16.04 のuniconvertor (python-uniconvertor)は動かないようです。

展開したソースに含まれるREADMEなどではプロジェクトのURLが"http://sk1project.org"という記載になっていますが、現在のURLは"http://sk1project.net"です。
なお、現在ダウンロードできるバージョン 1.1.5のLinux向けパッケージはUbuntu 10向けだったりとても古いです。

UniConvertor Download Page

最新版について

どうやら2.0のリリース候補(RC)版が存在するようです。

sK1 2.0 (ex.PrintDesign) vector graphics editor

Only import/export filters are not implemented yet. This functionality will be subject of RC3 milestone.

と書いてあるので、変換フィルタとしては使えなさそう。RCというのはRelease Candidate(リリース候補版)だと思うんですが、重要な機能の入っていないRC版というのも不思議ですがまあ今後に期待、ということで*2

開発中のバージョンのリポジトリgithubにあります。READMEによるとプロジェクト名の"sK1 Project"は"K"が大文字だそうです。

カラーパレット

このソフトを開発しているプロジェクトのサイトで各種グラフィック編集ソフト向けにカラーパレットのデータが配布されている。

sK1 Project - Free Palette Collection

カラーパレットの名称をクリックするとダウンロードページに移動する。

まとめ

とりあえず動いたようなので、次はInkscape本体のパッケージ化のリターンマッチです。

確実に言えるのはPythonインタプリタの場所をハードコーディングしている箇所は小細工が必要だろうということです。


何だか無駄に文字数が多い気がしますが、このエントリは以上です。

*1:用紙サイズとして設定された範囲外にオブジェクトがあるとうまくいかないのかもしれません

*2:どっちにしろInkscape側が対応してなさそうだからどうでもいい