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

Inkscape のmacOS向けパッケージ作成にトライした話(人柱募集中)

Inkscape とりあえずやってみた

f:id:atuyosi:20170108234633p:plain

前回のエントリに記載したとおり、今の所Mac向けのバイナリは提供されていません。「無いなら作ればいい」の精神で試しに自分で作ってみましたよ、というのがこのエントリ。

a244.hateblo.jp

どうせやるならOSXネイティブ版で作成しました。そもそもOSXネイティブ版は実験的な扱いのはずですが、公式ページにMacPortsのパッケージのインストール手順が記載される程度には

概要

いわゆるOSXネイティブ版です。XQuartzなしで動作します。

不完全ながら直接日本語の入力が可能です(後述)。環境によっては動作が軽いかもしれません。

結局何をしたのか

CMakeでビルドして、元から存在するパッケージ作成(バンドル形式)用のスクリプトを改造してみました。  

お世辞にもエレガントとは言えないシェルスクリプトを改造したらできました。

本来ならCMakeにバンドル形式のファイルを作成させるべきなのでしょうが、そもそもCMakeに詳しくないので。

とりあえずパッチなどは以下に置いています。

Dropbox - patches

手順はgistにあります。

Procedure for create App bundle and dmg for Inkscape 0.92 on Sierra/Mountain Lion · GitHub

Broken English です。お察しください*1あとで日本語に直す、と思っています。

日本語版:

Inkscapeパッケージ(macOS)作業メモ · GitHub

作成したもの

興味があれば以下からダウンロードできます。最低限の動作確認しかしていません。絶賛人柱募集中です。

リンク先に日付のフォルダがあるのでその中のInkscape.dmgをダウンロードしてダブルクリック、です。

Mountain Lion でビルドしたもの

Dropbox - MountainLion

Mountain LionとSierraで最低限の動作確認していますが、Mountain Lion より古いIntel版のMacでは動かないと思います。

Sierraでビルドしたもの

Dropbox - build_on_Sierra

基本的な違いはビルドした環境とコンパイラのオプションです。

どういうご利益があるのか不明ですが、Sierra版のみオプションパッケージのGnome VFSを有効にしています。

上記とは別の問題を回避するために起動スクリプトを修正しています。

こちらのパッケージはSierra以外ではテストしていません。一つ上のMountain Lion版を使ってください。

備考

なぜMountain Lionかというと、手元のMacBook Air にインストール可能な最も古いバージョンだからです。

外付けSSDにインストールして必要な時だけ切り替える運用です。

VirtualBoxなりVMware Fusion上にインストールするのも一つの方法ですが、Mountain Lion より古いインストーラーを入手できないので。

もし仮想環境でやるとすればリカバリモードを使わずにインストールする関係からして、Mavericks (10.9) になると思います。

既知の問題

  • Inkscapeを終了してもDockにアイコンが残り続ける(完全に終了しない?)
  • ファイルを右クリックしてプルダウンメニューから起動しても対象ファイルを開くことができない
  • テキストツールで未確定の日本語文字列が表示されない(ファイルの保存ダイアログや、画面右側の「テキストとフォント」ダイアログでは問題ない)
  • Mac固有のキーを認識しない(commandキー、かな、英数)
  • キーバインドLinux系のまま(Controlキーが中心)
  • dmgファイルの背景画像のバージョン表記が古いまま

その他、以前から存在するネィティブ版パッケージと同じバグがあります。

そのほか

何を血迷ったかInkscapeの開発者メーリングリストにパッケージ作ったよ的なメールを投稿済みです。

私の予測では、そのパッケージ作成スクリプトはメンテナンスしてないからやめとけという趣旨の返信が来ることでしょう。

もちろん「CMake(とotool)の知識がないから無理。これで精一杯」と言って逃げる予定です。

macOSのライブラリ周りって実は色々とめんどくさかったのか、ということを理解したのが一番の収穫。

結局、@rpathなどmacOS固有の仕組みがどういう動きをするのか理解できませんでしたが動いているのでひとまずおしまい。


macOS版ユーザー各位、もっと開発者メーリングリストに参加しましょう。

以上です。

できるクリエイター Inkscape 独習ナビ Windows&Mac対応

できるクリエイター Inkscape 独習ナビ Windows&Mac対応

ITエンジニアが覚えておきたい英語動詞30

ITエンジニアが覚えておきたい英語動詞30

*1:開発者メーリングリストにかちこむため

Inkscape 0.9.2 がリリースされたけど……

Inkscape

一月一日付でInkscapeの新バージョンがリリースされています。

inkscape.org

Mac向けのバイナリ提供は今のところ無し。

背景?

開発者向けのメーリングリストからの断片的な情報*1によれば、 いつの間にか公式プロジェクトとしてはMac向けのバイナリパッケージは提供しないという決断をしたらしいです。

Macを保有するアクティブな開発者が不在なのか、経緯はイマイチ不明です。

Mac向けバイナリパッケージを提供しないほうが、アクティブなMac向けの開発者が参加するきっかけになるという目論見だったのでしょうか?

正式リリース告知後にMac向けのパッケージメンテナ(要するにソースからコンパイルしてアップロードする担当)の立候補者が開発者向けのメーリングリストに 登場したのが昨日。

そもそも公式プロジェクトとしてビルド用のツールとしてcmakeに移行しているのにMac向けの情報はAutotoolsを使う手順のまま。

メインの開発者側としてもWikiを更新しようという動きはあるようなので、しばらく様子見中。

そのうち公式Wikiページのビルド手順も更新されるでしょうし、時間が経てば公式のパッケージが提供されるのだろうと思います。

主な新機能・変更点

  • SVG2およびCSS3サポートの改善
  • (SVG2の)Mesh Gradientsのサポート
  • 新しいパスエフェクト
  • ペンシルツールにおけるインタラクティブなスムージング
  • すべての描画要素のための新しいオブジェクトダイアログ
  • CSS標準との整合性(?)のためにデフォルトの解像度を90 dpiから 96 dpi に変更

"Mesh Gradients"というのはどうやらAdobeIllustratorに存在するグラデーションメッシュに相当するようです。まるで写真のように本物らしく見えるグラフィックを作成できるとのこと。

デモ動画:Inkscape: Gradient Mesh - YouTube

解像度の変更ですが、以前のバージョンで作成したファイルを開くと確認のダイアログが表示されるようです。紙に印刷する場合など、用途によっては注意が必要かと思います。

リリースの告知文によると、今後の方針としてGUIツールキットをGTK3へ、バージョン管理システムをGitに、コードもC++11 にそれぞれ移行する方針のようです。

詳細なリリースノートは以下。CSS3の縦書きサポートの改善など日本語環境に関連しそうなものもあります。

Release notes/0.92 - Inkscape Wiki

なお、Mac環境固有のバグは修正されていないようです。

何はともあれ

MacPorts経由でインストールすることにします。 通常版ではなく、いわゆるネイティブ版としてビルド。

すでにMacPortsのパッケージ(というかビルド用のレシピ)が更新されているので、この方法でインストールするのが確実です。

XcodeそのほかMacPortsはセットアップ済みであるものとします。

※ 開発版をインストールしている場合はコンフリクトするのでアンインストール。

$ sudo port sync
$ sudo port install  inkscape +quartz

+quartzをつけなければ普通のXQuartzに依存したばいなりになります。

注意点

Sierraでビルドした場合の問題はそのままみたいです。そのままの日本語ロケールだと異常終了するので下記のように起動。

$ LANG=ja_JP inkscape

関連するバグなど

まとめ

そのうち通常版のMac向けパッケージがリリースされると思われるので、しばらく待つほうがベターと思われます。

おしまい。

*1:昨年末からほぼROM状態ですが参加しています

ラズパイにOpenCV 3.2 をインストールする(暫定版)

Linux OpenCV Raspberry Pi ラズパイ プログラミング 画像処理

前回の記事で年内の最後の予定だったけどせっかくなので。

ほぼ作業メモみたいなものです。

環境

準備

旧バージョンのアンインストール(元からインストールされている場合のみ)

OpenCV 3.1 をビルドしたディレクトリ(私の環境では~/work/opencv-3.1.0/build*1)に移動して下記を実行。

$ sudo make uninstall

ついでにmicroSDを圧迫するのでコンパイル時の中間生成物など古いファイルは削除しておく。

作業ディレクトリの作成

適当な場所に作業ディレクトリを作成して移動。

$ mkdir work
$ cd work

依存ライブラリについては過去記事参照。

a244.hateblo.jp

ソースの入手

公式からOpenCV 本体と拡張モジュール(contrib)のソースを入手。

本体の方は"OpenCV for Linux/Mac"というリンクをクリック。拡張モジュールの方は3.2.0の"tar.gz"のリンクから。

wget でダウンロードするなら下記のようにする。

$ wget https://github.com/opencv/opencv/archive/3.2.0.zip
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.tar.gz

展開

$ unzip opencv-3.2.0.zip
$ tar zxf opencv_contrib-3.2.0.tar.gz

本体の展開先に移動し、cmake用の出力先ディレクトリを作ってそこに移動。

$ cd opencv-3.2.0/
$ mkdir build_with_contrib
$ cd build_with_contrib

ビルド

最初から拡張モジュール(contrib)ありでビルドします。

CMake

前回と同じ要領で行くと、下記のバグ?に遭遇するのと、C++チュートリアル(Example)のビルドでこけるのでそこを踏まえてcmakeを実行。
またfreetypeというcontribのモジュールも無効化します(後述)。

github.com

TBBは並列化のためのバックエンドの一つ。つまり代替手段があるので無効化しても問題ない。

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
     -D CMAKE_INSTALL_PREFIX=/usr/local \
     -D INSTALL_PYTHON_EXAMPLES=ON  \
     -D PLANTUML_JAR=/usr/share/java/plantuml.jar  \
     -D ENABLE_NEON=ON \
     -D WITH_TBB=OFF -D BUILD_TBB=OFF  \
     -D WITH_QT=ON -D WITH_OPENGL=OFF \
     -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules \
     -D BUILD_opencv_freetype=OFF \
     -D BUILD_EXAMPLES=OFF ..

前回との変更点は以下のとおり。

  • TBBの無効化("-D WITH_TBB=OFF -D BUILD_TBB=OFF"に変更)
  • 8行目のOPENCV_EXTRA_MODULES_PATHを3.2向けに修正
  • freetypeモジュールをビルドしないように(-D BUILD_opencv_freetype=OFF)
  • サンプルをビルドしないように( -D BUILD_EXAMPLES=OFF )

cmakeの出力で、必要なモジュールが有効になっていることを確かめる。また、freetypeがDisabledのリストに存在することを確認する。

f:id:atuyosi:20161230232146p:plain

以下参考。

CMake configuration for OpenCV 3.2 (with contrib) 2016/12/30 on Raspbian jessie · GitHub

ビルド

f:id:atuyosi:20161230225017j:plain

$ make -j4

空冷ファンありなので発熱は気にせずに4並列でコンパイル

使用しているのはUSB接続の小型ファンです。電源はHDMIディスプレイのUSBハブから確保しています。

タイムリー USBファン [ 40mm角ファンモデル ]  LittleFAN40U

タイムリー USBファン [ 40mm角ファンモデル ] LittleFAN40U

輪っかにしたマスキングテープを両面テープ代わりにして固定しているだけです。小型ファンの宿命として騒音がかなり気になります。

取り付け方法によっては振動も気になりますが、発熱による警告マークは表示されません。

インストール

$ sudo make install

普通にインストールするだけ。

動作確認

C++

過去記事と同じコードをビルドして実行できたらひとまずOKとします。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>

int main( int argc, char** argv){

    cv::Mat img_rgb, img_gry, img_cny;

    cv::namedWindow( "Example Gray", cv::WINDOW_AUTOSIZE );
    cv::namedWindow( "Example Canny", cv::WINDOW_AUTOSIZE );

    img_rgb = cv::imread( argv[1]);

    cv::cvtColor( img_rgb, img_gry, cv::COLOR_BGR2GRAY);
    cv::imshow( "Example Gray", img_gry );

    cv::Canny( img_gry, img_cny, 10, 100, 3, true );
    cv::imshow( "Example Canny", img_cny );


    cv::waitKey(0);
    return 0;
}

過去記事と同じです。sample.cppというファイル名で保存して下記の手順でビルド。pkg-configを使うのはデフォルトでインストールされているOpenCV 2.4が間違ってリンクされるのを防ぐため。

$ g++ `pkg-config opencv --cflags --libs` sample.cpp

以下のようにグレースケール画像とエッジ抽出の結果が表示されれば問題なし。

f:id:atuyosi:20161230234328j:plain

Python 3

Pythonはモジュールのロードのみ確認。

$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0'
>>>

遭遇したエラーとその対処

以下、遭遇したエラーメッセージとその対処。基本的にビルド時に無効化しただけですが。

エラーメッセージでググった時にヒットすることを期待しています。読む必要は特になし。

TBB関連

エラーメッセージをメモし忘れた。現象は下記と同じ。

TBB compile error 3.1-dev · Issue #7890 · opencv/opencv · GitHub

前述の通り別の選択肢があるので無効にして回避。  

-D WITH_TBB=OFF -D BUILD_TBB=OFF

バージョン3.1の時はすんなり通ったはずなんだけど。

freetype モジュール

ビルド自体は成功するかに見えるが、Python 3でOpenCVモジュールをロードしようとすると下記のエラーに遭遇する。

>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/libopencv_.so.3.2: undefined symbol: hb_shape

必要なライブラリであるfreetype2harfbuzzはインストールされているので問題ないはずだが、実際にはエラーになっている。

関連:OpenCVのcontribにモジュールを追加してPRしてみた - Qiita

便利なモジュールが増えるのはいいことだけど、 使わない立場からすると微妙。環境依存でビルドに失敗するからといって文句言うのは筋違いなんだけど。

Githubの最新版では修正されているかも。

関連:Fix Opencv3.2 freetype module build failed in macOS10.12 #919 by Kumataro · Pull Request #926 · opencv/opencv_contrib · GitHub

macOS環境のビルドエラーの修正だけど、他のバグも一緒にクローズされてる。なのでこの問題も修正されているかもしれない。未検証。

Example ビルドエラー

これも前述のfreetype関連なのか?

[ 84%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/RobustMatcher.cpp.o
[ 84%] Linking CXX executable ../../bin/cpp-tutorial-pnp_registration
../../lib/libopencv_freetype.so.3.2.0: `hb_buffer_get_glyph_infos' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_font_destroy' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_ft_font_create' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_buffer_add_utf8' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_buffer_destroy' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_shape' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_buffer_guess_segment_properties' に対する定義されていない参照です
../../lib/libopencv_freetype.so.3.2.0: `hb_buffer_create' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/build.make:345: recipe for target 'bin/cpp-tutorial-pnp_registration' failed
make[2]: *** [bin/cpp-tutorial-pnp_registration] Error 1
CMakeFiles/Makefile2:21767: recipe for target 'samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/all' failed
make[1]: *** [samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/all] Error 2

ぶっちゃけなくてもいいので素直にOFFにする。

-D BUILD_EXAMPLES=OFF

まとめ

最低限の確認しかしていませんが、ひとまずビルド成功です。


ではまた。

*1:buildというディレクトリは自分で作成したビルド用のディレクトリで、Makefileが存在する場所

2016年の個人的振り返り

雑記

結論から言うと滲出性中耳炎という病気に苦しめられた年。

a244.hateblo.jp

現状など

残念ながら強制的なイベントは発生せず。

右耳の聴力低下と右耳で半ば強制的に封印されていたようなものですが。

3ヶ月もあれば治ると言う話だったのに9ヶ月も通院していて「どういうことなの?」という感じです。

一応、少しずつですが聴力は回復しています。まだ耳鳴り自体が完治していないので聴力も戻りきってない状態。

まあ病気療養中であるという大義名分のおかげで助けられている面もあるので、むしろ病気に感謝すべきなのかもしれません。

目標の達成度合いなど

当初の基本方針は問題なし。

基本方針は、頑張らない、見栄を張らない、無理しない、で行こうかな、と。

病気のおかげで結果的に無理が効かなかったので。

1月に立てた目標としては、

  • 作りかけのiOSアプリをリリースする(開発者ライセンスが切れる前に)
  • 形態素解析がらみで何か成果物をつくる
  • WebAPIをつくる(Rails5 でAPI向けの機能が入るみたいなので)
  • (多分)引っ越す

結局実現したのはiOSアプリ作成のみ。残念ながらAppExtentionに対応させようとするついでにリファクタリングしようとして頓挫していますがOKということで。

ブログ記事が2015年の51記事から今年はこの記事を除いて114記事なのでアウトプットは増えています。これは10月にラズパイを購入したのが大きい。

ラズパイとOpenCVに入門したのが今年のハイライトなんじゃないかと思います。

今年の出来事で印象に残っているもの

特に順序に意味はなし。世間のことはとりあえずスルー。

  • 関東遠征(観光)
  • 滲出性中耳炎
  • 寝袋
  • VPSの移行
  • 複合機の故障および廃棄
  • MacBook AirSSD交換
  • Kindle Unlimited
  • Ubuntu 16.04 LTS
  • Swift 3 リリース
  • ラズパイ購入
  • Mapt 加入
  • まさかの円高

こんなところかな?

精神的な変化

今年は去年以上に内省的だったような気もする。自分がプログラミングそのものが好きなんじゃなくて、コンピューターのもたらすご利益が好きというのが一年間で一番の収穫。

a244.hateblo.jp

もう一点、サービスにしろソフトウェアにしろ、IT系は基本的に「残らない」ってことを再認識したり。

a244.hateblo.jp

去年の11月にマレーシア在住の知人と話をした時はピンとこなかったけど、漠然と海外移住したいと思い出したのも今年。

聴力低下でリスニングがイマイチというのが最大のネック。

その他反省点

  • 先読みしてあれこれ買い込んで結局活用しないパターンが多いような気がする
  • Twitterのタイムラインをだらだら眺めて時間を浪費している
  • 根気強さというか集中力が続かないケース多し
  • 筋トレとかストレッチをサボり気味
  • 未消化TODO項目多すぎ
  • 現実逃避しすぎ

お察しくださいレベル。

来年(2017年)の抱負の候補

基本方針は継続。

1年前との心境の変化としては海外移住したいというのが一番。

来年1月から年齢制限が35歳まで緩和されるそうなので、聴力と資金がどうにかなればオーストラリアのワーホリを目指してみたい。

もう一つ来年やりたいのは翻訳(もちろん技術書)。

プログラミングよりコンピューター関係の本を読んだり知識が増えることに楽しさを感じるタイプなので。

ストレングスファインダーの結果からして悪くはないと思ってる。

audiobook.hatenablog.com

何はともあれ、やりかえの英単語帳の続きをやるのが第一歩か。

技術面の目標

f:id:atuyosi:20161230030238j:plain:w480

先週時点でOpenCV 3.2 がリリースされていたり、来年はTesseract の新バージョン4.x も控えてる。過去のパターンだとラズパイ関連は2月末に新製品が発表されるとか。

よく考えるまでもなく、あれもこれもはできないかも。

予算と余力があれば、以下も候補

そもそも新型のMacBook Pro が優先なので望み薄。

というわけで

まったくまとまりがないですが、皆さま良いお年を。

それではまた。

1Kindle Unlimitedで読んだ本と簡単な書評(2016年12月)

電子書籍 書評 Kindle Kindle Unlimited

11月は一旦休止していました。Kindle Unlimited シリーズ再開、です。やはりというかなんというか外れ率高め。

a244.hateblo.jp

教養・ビジネス

ウォーレン・バフェット 成功の名語録』

名語録としてまとまっているか、ちょっと疑問だけど含蓄に富む。

一番いいと思ったのは、就職に関するもの。

「最も尊敬している人のところでで働きなさい」

今の日本の就活なんて……。

次点としては

ねたみを避ける最良の方法は、自分が成功に値する人間になることだ

『出る杭は打たれる』という(ことわざ)に対する対処法としてもいいのでは。

一度でいいからウォーレン・バフェット氏と直接会って話をしてみたいですね。

『描くだけで毎日がハッピーになる ふだん使いのマインドマップ

描くだけで毎日がハッピーになる ふだん使いのマインドマップ

描くだけで毎日がハッピーになる ふだん使いのマインドマップ

リフロー形式。マインドマップ誕生の経緯とか。

あとは具体的なマインドマップの例を紹介しながら蘊蓄を語るような本。

マインドマップを肴に(?)、書いた本人または紹介者のコメントに著者がコメントする、というパターンが続く。最後のパートがマインドマップの書き方の解説。 章構成としてこれでいいのかは疑問。

他人がどんなマインドマップを書いているのか興味がある人向け。

そもそもマインドマップ自体を知らない人はこの本よりもトニー・ブザン氏の本を読むといいと思う。

難点は画像(マインドマップ)が小さいので各ブランチの文字が小さいところ。全体のイメージがつかめれば問題はないけどちょっと残念。

この本に限らずKindle版に良くあることだけど。

『Think Simple ―アップルを生みだす熱狂的哲学』

Think Simple ―アップルを生みだす熱狂的哲学

Think Simple ―アップルを生みだす熱狂的哲学

Apple のコピーライター、ケン・シーガル氏によるAppleマーケティングに関する本。故・スティーブ・ジョブズ氏とのエピソード多数。

ジョブズ氏が存命だった時の会議のやり方など、あまり一般に知られていないエピソードが多いのではないかと思う。

いわゆる大企業病についての批判など、参考になる部分は多い。平社員の立場ではどうにもならないよなあ、というのが正直な感想。

『黄小娥の易入門』

黄小娥の易入門

黄小娥の易入門

非科学的だけど、わりと面白い。血液型性格診断みたいに言われてみればそうかもね、という感じ。

昭和30年代に一世を風靡した本の新装版らしい。

縦書きリフロー形式。

最初に易の概要の説明をしたあと硬貨6枚で簡単に占うやり方を解説している。後半はその簡易式の易の結果の解釈が延々と続く。

サイコロを複数転がすのと大差ないような気もするけど、好奇心を満たすには十分。

『プログラミングで学ぶ20代までに身につけたい論理的思考: AIに負けない考え方』

フリーランスプログラマによるちょっとしたエッセイ。分量が少ないのですぐ読める。

ただし、定価で買うのはオススメしない。サブタイトルの人工知能云々から期待する内容ではなかったです。

おおむね妥当なことを書いてあるように思う。Kindleよりnoteで販売した方が良かったのでは。

印象的な箇所を引用しておく。

言い方を換えれば、AIは人間を補助するための道具に過ぎないのです。(L. 34より)

正論。人工知能(AI)脅威論はこの「人間のための道具」ってところをスルーしているように思う。

今後AIが進化し、人間に代わってできることが増えれば、人間はより人間らしい活動に専念できるようになっていきます。それは同時に深く考えることのない単純な労働は、AIに置き換えられていくことを意味しています。(L. 37より)

前半に目を向けるのが人工知能に対して楽観的な立場。後半が悲観的な立場。

この本の著者の主張は、しっかりと意思を持つ、論理的な思考力を身につける、の2点。前者については人工知能と無関係に当たり前だと思うけど。

いくら人工知能による自動運転が実現しても目的地を決めるのは人間ですよねって話。

本文でプログラミング教育の義務化の目的に疑問を提起しているけど、そもそも学校では個々人の「人生の目的」とか「どんな人生をおくりたいか」について考えさせない。

そんなことしたらみんな金持ちになりたがるし誰もサラリーマンやりたいとは思わないだろう。

学校教育の一環で「将来の夢」ではなく「どんな人生をおくりたいか」を考えさせるのはいいかもしれないと思うけど。

プログラマーにありがちな論理的思考賛美エッセイになってる。

『日本でいちばん社員満足度が高い会社の非常識な働き方』

日本でいちばん社員満足度が高い会社の非常識な働き方

日本でいちばん社員満足度が高い会社の非常識な働き方

社長自身による自画自賛だらけ。経営者の書いた本は大体そうだけど。


人違いでなければこの会社かな?  

「超選択と超集中」 – 株式会社 EC studio はChatWork株式会社へ社名を変更します! - EC studio 社長ブログ

ECスタジオという名称はESET なんたらというウィルス対策ソフトの販売代理店かなんかだっだような気がするのだけど。


大会系(格闘技経験者)ということなので嫌な感じはするけど、内容は面白い。

ちゃんと理解しているのか疑問だけど、Googleのサービスを会社全体で活用したり、ある程度高性能なスペックのPCを支給している点は評価する。

社長があまりITに強くないことが斬新な発想につながっているのかもしれない。

2010年紙媒体発行ということなのでかなり実態とは異なるのではないかと思う。

羽生善治×川上量生「羽生さんはコンピュータに勝てますか?」完全版』

羽生さんって頭いいなあと再確認した次第。どうも結論が曖昧な印象。

人間には人間ならではの、コンピューターにはコンピューターの良さがある、みたいな結論?

何と言えばいいのか、示唆に富む?  

英語

『自宅でできる翻訳の仕事』

翻訳関係のツールの使い方の説明とか、仕事の探し方とか。とりあえずこの著者には依頼したくないと思った。

著者のプロフィールを見ると慶應大学法学部卒で弁理士と記載さ入れているので、普通の人がそのまま鵜呑みにできるとは思えず。

Next Publishing ということでプロの編集が入っている割には章構成に工夫がないというか、章と章のつながりが悪いと思った。

技術系

『よくわかるディープラーニングの仕組み』

よくわかるディープラーニングの仕組み

よくわかるディープラーニングの仕組み

比較的文章量が少ないので一読するだけならさほど時間はかからないが、わかりやすいわけではない。どことなく「わかりやすさ重視」でざっくりとした説明になっているような感じがする。

なんとなく理解できたような気分にはなれる(というか、そんな気分になった)。

6章の『ニューラルネットワークの歴史』、7章の『ディープラーニングの開発環境』は概要を知りたい場合には有益。

以下、構成と組版についての不満。

  • 図の説明(特に記号の添え字)が不十分
  • 章見出しの下に余白がない
  • それぞれの章の冒頭に概要を書いて欲しい

LaTeXで組んだドキュメントに慣れている人間からすると組版に不満。

美術系

ゴッホ画集: 改訂版 (世界の名画シリーズ)』

ゴッホ画集: 改訂版 (世界の名画シリーズ)

ゴッホ画集: 改訂版 (世界の名画シリーズ)

日本人の大好きなゴッホです。暇な時に眺めるといい感じ。

だいたい200ページ(目次を除く)で200点ぐらいの絵が収録されてる。 最初に各画像のサムネイルのページがあり、目次からそれぞれの絵のページに遷移できるようになっている。この点は非常に良い。

小説・そのほか

『【合本版1-10巻】魔術士オーフェンはぐれ旅 新装版』

【合本版1-10巻】魔術士オーフェンはぐれ旅 新装版

【合本版1-10巻】魔術士オーフェンはぐれ旅 新装版

199x年代の代表的ラノベ。なんだかんだで一通り読んでしまった。ネットでタダで読める異世界転生系より断然お勧め。

挿絵のイラストが時代を感じさせる。

ネットの異世界転生系の小説がダメだというわけではありませんが、読んで損はないと思います。量が多いので一気に読むのはしんどいのが難点かな。

雑誌

『日経Linuxリナックス) 2016年 11月号』

日経Linux(リナックス) 2016年 11月号 [雑誌]

日経Linux(リナックス) 2016年 11月号 [雑誌]

ラズパイマガジンの特別編が付録としてくっついてる。ちょっとだけ得した気分。

『Mr. PC 12月号』

どっちかというとWindowsユーザー向けの雑誌。まあ一年間のPC関連の話題をざっくり振り返る分にはちょうどいい感じの内容。

紙媒体の方は付録DVDが付いているらしく、電子版の方は過去記事3年分など付録をダウンロードするためURLとパスワードが書いてある。

Kindle Unlimited 経由の読者がダウンロードしていいのかは不明。

まとめ

ちょっと今月は微妙だったかな。

読みかけのタイトルが何冊かあるのでそれを読み切るまでは契約していると思いますが、その先はちょっと微妙です。


それでは。

ラズパイ公式カメラモジュール その2

PiCamera Raspberry Pi ラズパイ

前回の続きです。

部品を購入したところで取り付けないと始まりません。

a244.hateblo.jp

前提条件と準備

前提条件は以下の通り。

過去記事で使っている環境にカメラが追加されただけです。

注意点など

  • Raspbian をアップデートした状態に
  • GL Driver は無効化*1しておく

以下のコマンドを実行してOSをアップデート。

$ sudo apt update
$ sudo apt upgrade

念の為、ファームウェアもアップデートしておく。

$ sudo rpi-update

正常終了したら再起動。

以下、参考。

$ uname -a
Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux

接続と設定

カメラモジュールは静電気に弱いらしいので、周囲の金属に触れるなどして静電気を逃がしてから作業する*2

  1. ラズパイの電源を切り、しばらく待っってから*3電源ケーブルを取り外しておく
  2. カメラ接続用のコネクタHDMIポートの隣)の両端の黒いツメを垂直方向に引き上げる
  3. 向きに注意しつつ、コネクタにケーブルを差し込む。青い文字の印刷されている側がUSBポート側になるように
  4. しっかり押し込んだ状態で、コネクタの黒いツメを押し込んで固定する

f:id:atuyosi:20161228025305j:plain
接続後の状態

f:id:atuyosi:20161228025244j:plain
反対側から

通電状態で作業しても問題ないのかもしれませんが、気軽に電源の入った状態で抜き差しできるUSBが特別なのであって、本来周辺機器は電源オフで取り外すべきかと思います。

ソフトウェア側の設定

GUI環境の場合

f:id:atuyosi:20161228031709p:plain

  1. 画面左上端のメインメニューから「設定」「Raspberry Piの設定」をクリックして設定画面へ
  2. インターフェイス」タブの「カメラ:」の有効というラジオボタンをクリック
  3. 「OK」をクリックすると再起動を促してくるので素直に再起動

f:id:atuyosi:20161228031804p:plain

CLICUI)環境

sudo rasps-configから設定。"5. Interfacing Options"から"P1 Camera"と順に進んで行けばOK。

f:id:atuyosi:20161229000245p:plain
特に説明は不要なはず

補足:エラーの例など

ケーブルがしっかり刺さっていない(もしくはRaspbian側でカメラ用のインターフェイスが有効になっていない)状態でカメラにアクセスすると下記のようなエラーが表示される。

$ raspistill  -w 1920 -h 1080 -o try.jpg
mmal: Cannot read cameara info, keeping the defaults for OV5647
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Camera is not detected. Please check carefully the camera module is installed correctly

ピント調整時にケーブルを引っ張ってしまったせいで遭遇しました。

なお、カメラモジュール自体が故障している場合のエラーは不明です*4

フォーカス調整

マクロよりの条件で撮影したい場合のみ。監視カメラなどの用途であれば不用意に弄らない方がベターだと思います。もちろん自己責任で。

f:id:atuyosi:20161228025114j:plain
調整用の治具

付属の治具*5の裏側をよく見ると、微妙に凹みがあるのでその部分をカメラの先端部にはめ込む*6

f:id:atuyosi:20161228025136j:plain

初回のみ強めに押し付けた状態で軽く時計回りにひねってやると固定用の糊が外れるのか、すんなり回転するようになります*7

初期状態では無限遠方にピントが合うように設定されているため、時計方向にはほとんど回らないはずです。

近方にピントを合わせたいときは反時計回りに、遠方にピントを合わせたいときは時計回りに。反時計回りに回しすぎると完全なピンボケ状態になる。

時計回りに締め込んで行くとほぼ出荷時の状態に戻る。

ピント調整は接続したままの状態で問題ないです。用途に応じて撮影結果を確認しながら調整(静電気対策もお忘れなく)。

例えば以下のようにコマンドにraspistill(後述)の-tオプションに"0"ミリ秒を指定するとCtrl+Cを入力するまでプレビュー画像を撮影し続けるのでかなり楽(raspvidでも可)。

$ raspistill -t 0

raspistillraspvidでプレビュー表示の見え方が微妙に違うので目的にあった方のコマンドで確認しながら調整する。

専用コマンドで撮影

公式ドキュメントによると、カメラモジュール専用のコマンドとして、raspistillraspividraspistillyuvの3つが紹介されている。

しかしながら現在のところ、raspistillyuvではなくraspiyuv'に名称が変更されていたり、raspividyuv`が追加されているので結局全部で4つとなっている。

  • raspistill : 静止画用の画像データ取得コマンド
  • raspiyuv : YUV形式でデータ画像を取得するコマンド
  • raspivid : H264形式で動画を撮影するコマンド
  • raspividyuv : YUV420形式で動画を撮影するコマンド

それぞれオプションなし、もしくは-?オプション付きで実行するとオプション一覧が表示される。なおこれらのコマンドはlibraspberrypi-binというパッケージに含まれており、基本的に最初からインストールされている。

基本的なオプションは下記のページに一通り記載されてる。

Interface(インターフェース) 2016年09月号にカメラモジュール自体と、付属コマンドの解説が載っているのでそちらも参考に。

Interface(インターフェース) 2016年09月号

静止画の撮影

静止画を撮影するには-oオプションでファイル名を指定したうえで実行する。もうひとつ重要なのは画像を回転させるための-rotオプション。

また、-hで撮影する画像の高さ、-wで撮影する画像の幅を指定する。省略した場合は最大解像度(3280x2464)。

最大解像度未満の値を指定すると、不要な部分を切り捨てるケースと指定された解像度に縮小するケースがある。結果として指定する高さと幅の比率が画角に影響する。

$ raspistill  -w 1280 -h 800 -o test.jpg

コマンドを実行するとプレビューが表示された後、画像が保存される。プレビュー画像の表示位置と解像度は-pオプションで変更可能。

デフォルトではコマンドが実行されてから5000ミリ秒(つまり5秒)ほど待機してから撮影される。これは-tオプションで変更可能。 

以下は2秒後に撮影する例:

$ raspistill -t 2000 -o image.jpg

png形式で保存する(可逆圧縮):

$ raspistill  -o image.png -e png

-eで保存する形式を指定しない限りファイル名の拡張子によらずJPEG形式で保存される((jpg, bmp, gif, png)の4種が指定できる)。

他にもカメラの設定を変更するオプションと、夜景や花火などの特定の撮影シチュエーション向けのモード指定オプション、撮影した画像にエフェクトをかけるオプション*8がある。

撮影してみた画像

そのままでは固定できないので、Amazonで購入したクリップで挟んで固定。

f:id:atuyosi:20161229013948j:plain
なんとも微妙な絵面。

下記のように画像サイズを指定する。

$ raspistill  -w 1280 -h 800 -o testimage.jpg

撮影した画像は以下のとおり(フォーカス変更前)。

f:id:atuyosi:20161229013813j:plain
普通にいい感じに見える。


フォーカスをいじった後の画像。

f:id:atuyosi:20161229014426j:plain ちょっとマクロよりに調整しずぎでピントが甘い。


ちょうどいい被写体がないので微妙ですが、マクロの例(だいたい8cmぐらい)。

f:id:atuyosi:20161229021437j:plain
その1

f:id:atuyosi:20161229021502j:plain
その2

Interfaceの記事の通り、5cmぐらいまではいけるのは確認済み。マクロよりにすると焦点の合う範囲が狭くなるのも記事の通り。

動画は面倒なので省略。

おわりに

静電気に弱いらしいのと、オートフォーカスがない点を除けば非常にいい感じだという印象です。

気が向いたらPytonのPiCameraモジュールを使うサンプルにトライするつもりです。 トランジスタ技術なりInterfaceの記事を参考に遊んでみたいとは思っています。


ひとまずこんな感じです。

その他・関連リンク

*1:初期状態では無効なので自分で有効にしていないなら何もしなくてよい

*2:気にしすぎ?

*3:少なくとも20秒、ランプが点滅しなくなるまで

*4:率直に申し上げてそのような状況には陥りたくない

*5:購入時期によっては付属してないかもしれない。「Amazon.co.jpが販売・発送」しているものは問題なし。11月中旬にKSYに問い合わせたところ、付属しているとの回答だったのでKSYも大丈夫なはず。

*6:押し当てた状態で左右にひねるとはまり込む

*7:誤ってこれ以上回転しない方向に破損しないように意図的に緩めた状態で固定しているのだと思う

*8:あくまでもGPU側の機能

結局、ラズパイ公式カメラモジュールを買った

Raspberry Pi ラズパイ 購入したもの PiCamera

まさかのAmazonポイントゲットという天の助け、まさに天佑があったのでポチッと*1

開封してやっつけ仕事でケースを自作したところまで、です。

付属のケーブルが短いのでどう使ったものやら。

はじめに

Amazonで購入する場合は販売元に注意されたし。私はAmazonポイントを使用すべくAmazonでで購入しました。

商品に付属のケーブルは15cmと短いのでKSYで別売の長いケーブル*2とセットで買うほうがベターだろうと思います。送料を除けば価格もAmazonよりKSYの方が安いし。

カメラモジュールの商品ページ:ホーム - Raspberry Pi Shop by KSY

カメラモジュールについて

f:id:atuyosi:20161227165518j:plain

公式の紹介:

搭載センサーなど詳細

  • 名称:RaspberryPi Camera Module V2.1
  • ソニーIMX219PQ(裏面照射型)
  • 実効800万画素(3280 × 2464 pixels)
  • 固定フォーカス
  • 25mm x 24mm x 9mm

一番の特徴は、高解像度という点ですが、固定フォーカスながら専用の治具を使うことでフォーカスを調整できるようです。

f:id:atuyosi:20161227165820j:plain
白いプラスチックの部品がフォーカス調整用の治具(10月末くらいからの出荷分には付属してるらしい)。

参考:ビジョンプロセッシング・コミュニティ:ブログ
11/8のエントリを参照。

諸事情はこの辺りに

具体的なフォーカスの調整についてはInterface の2016年9月号が詳しいです。どれくらいの調整量でどの程度の焦点距離になるか、表にまとめられています。

2016年9月号目次|Interface

記事によると無限遠から5cmまで調整可能。ただし自己責任で、だそうです*3

レンズに傷がつくリスクがあるので保護フィルムを貼れとか、思わず躊躇するような注意書きが書いてあります*4

紙媒体版はアマゾンでは在庫切れだったので、Tech Village から電子版を購入しました。 電子部品を取り扱っている店だとバックナンバーを置いてる店があると思います。
CQ出版からバックナンバーを購入することもできるようですが。

ケースの自作

ケースの自作は以下を参考に。

shikky-lab.hatenablog.com

問題はフリスクの20%増量によるパッケージ変更というところですかね。

このフリスクのケースの寸法ですが、長辺が約70ミリ、幅38ミリ、高さが9ミリとなっています。

カメラモジュールは2.5×2.4と微妙に正方形ではないうえ、コネクタが基盤の裏に出っ張っているせいで高さが9mm。そのままでは微妙にケースのカバー側が干渉します。

[2016/12/29 追記] 公式に寸法の資料がありました。

MECHANICAL DRAWING

加工手順

とりあえず真ん中でぶった切ります。多少ずれても目の粗い紙やすりでゴリゴリ削ってリカバリーできます。元から中央に丸くぼみと出っ張りがあるのでそこを目安に。

固定用のネジ穴を開けます。 コピー用紙*5にカメラモジュールのネジ穴の位置をマークしたものを貼り付けて、ピンバイスでサクッと固定用のネジ穴を開けただけのやっつけ仕事です。

f:id:atuyosi:20161227171459j:plain

上面はざっくり油性ペンでマーキングしてピンバイスでミニ四駆の肉抜きの要領で。

M2のネジとナット、上下にスペーサーを挟んで固定。ネジの長さはスペーサーの都合で5mmでは不足で15mmでは長すぎました…。

f:id:atuyosi:20161227172731j:plain
レンズの保護フィルムを剥がしていない状態です。


構造上、背面にネジが突き出すので固定する際に問題があります。 その辺りを考慮するなら、上記のリンク先と同様に前面カバー側に固定用の穴を開けて固定する方がいいと思います。

まあ暫定措置としてはいいんじゃないでしょうか。

販売されてるカメラケースも特にかっこいいとは思えないのでどっこいどっこいです。

このフリスクのケース、何が素晴らしいかというとラベルシールが綺麗に剥がれるというところです。あとは高さがもう2ミリほどあればレンズと干渉しないのでスライド式ケースにできたんですが。

付属のケーブルについて

よく考えるまでもなく15cmは短いです。もちろん用途によりますが。

Amazonでカメラモジュール用のケーブルを買おうとすると高いので、KSYで他の商品とセット購入がベターだろうと思います。


ラズパイと接続は次回ってことで。

それではでは。

*1:自分にクリスマスプレゼントとかなんとか

*2:12月末の時点でケーブルは品切れという悲しい現実もセットです

*3:まあいつものことです

*4:ピント調整の結果を確認するには保護フィルムを剥がす必要があるんですが

*5:方眼紙でやったほうがベターだったかな