MacBook Proが充電できないとき

今朝起きたらMacBook Pro (2017)が起動しなくなっていた.
ACアダプタに繋いでいるのに,ずっと充電されず,0%のまま….

ちょっと焦ったけど,調べるとSMC (System Management Controller)をリセットすれば良いということがわかった.

リセットの仕方は以下の通り.

  1. キーボード左側のShift+Control+Optionを押しながら電源ボタンを10秒押す
  2. その後,キーを離してから電源ボタンを押す

これは公式にも書かれていた.

その後MacBookは起動し,無事使えるようになった.

OpenCVの最新版をMacで使う

MacでOpenCVを使う場合,以前の記事で書いたように,

brew tap homebrew/science
brew install opencv

すればよい.
現在,2.4.9がインストールされる.

しかし,現在の開発版は3.0.0-devで,それを使いたいときはどうするか?

brew で普通にインストールすると,gitのリポジトリだと一番新しいtagのがインストールされる…のかな?
こういう,git等で公開されているやつの最新版(masterブランチのHEAD)を取ってきてインストールしたい場合は,

brew install --HEAD opencv

という風に --HEAD オプションを付ける.
これで,めでたくOpenCV 3.0.0-devがインストールできた.

これはOpenCVに限ったことではなく,他のライブラリやツールでも同じように最新版を入れたいときは --HEAD をつければ良い.
ただし,HEADは不安定なことも多く,通常用途では,--HEADを付けない方をおすすめする.

Skim.app使ってます

この時期,卒修論の添削をしている.直接学生に直接会って返却することが出来る場合は紙ベースのやりとりをするが,休みの日等で直接あって返却出来ない場合,PDFベースのやりとりになる.

Acrobat ReaderでもPDFに注釈を付けられるけど,最近MacのアプリのSkim.appを使っている.

アップデート

 

ツールバーはこんな感じ。

skim

ひと通りのことができることがわかると思う。下線や打ち消し線を弾いたら、クリックしてコメントも記入できる。

 

g++でリンカエラー

Mac OSX 10.9 Mavericksを使っている。homebrewを使ってインストールしたgcc48のg++でコードをコンパイルしていると、次のようなエラーが出た。

Undefined symbols for architecture x86_64:
 "isalpha(int)", referenced from:
 (略)
 ld: symbol(s) not found for architecture x86_64
 collect2: error: ld returned 1 exit status

isalphaが無いとのこと。isalphaがないとかありえない。これは、cctype functions (e.g. isprint) not defined at link time when using g++ -std=c++11が原因。g++でコンパイルするときに-std=c++11オプションをつけるとcctypeがリンクできないとのこと。

解決方法があって、/usr/include/sys/cdefs.hを開いて

#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)

#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) && !defined(__cplusplus)

に書き換えれば良い。なお、編集時にはsudoを使う。

sudo vim /usr/include/sys/cdefs.h

これでコンパイルが通るはず。

XVimを使う(断念→できた)

XVimはMac用統合開発環境のXcodeのプラグインで,Xcodeをvimキーバインドにするもの.普段はvimでコードを書いているけど,たまにはXcodeを使ってみようかと.ただvimキーバインドでないとコードが書けないので入れてみた.

インストール

githubから取ってきて,Xcodeで開いてビルドすればOK.

git clone https://github.com/JugglerShu/XVim.git

…と思ったのに,Xcode 5.0.2 ではコンパイルのリンカエラーに.よく見るとXcode 4用のようだ.

早くXcode5用のが出ないかな?

 

* 追記
こんな感じでプロファイルを変更すればXcode5でコンパイルできるようです.

Mac OSX (Mountain Lion) の homebrew で OpenCV のインストール

パッケージ管理システムのHomebrewを使って,OpenCVをインストールしたときのログです.
ここでは,Homebrewの設定は済んでいるものとします.
このへんのページを参考にしてください.

まず,OpenCVに必要なライブラリをインストールします.
必要なものは

  • TBB ( Intel Threading Building Block ) 並列化ライブラリ
  • Qt GUIライブラリ

です.
それぞれ

 brew install tbb
 brew install qt
 

でインストールします.

次に,OpenCVをインストールします.
これもbrewコマンドで一発ですが,上でインストールしたライブラリを有効にするためにオプションを追加します.

 brew install opencv --with-tbb --with-qt
 

僕の環境では,これではコンパイルが通りませんでした.
コンパイルにllvmを使うように指定します.

 brew install opencv --with-tbb --with-qt --use-llvm
 

これでコンパイルが通るかと思います.

僕はインストール前に,

 brew edit opencv
 

して,--with-qtの行を参考に,--with-cudaと--with-eigenというオプションを追加して,各ライブラリを有効にしたコンパイルをしています.

OmniGrafflePro使ってみた

OmniGraffleProはMacのチャート図表作成アプリケーション。
非常に綺麗な図が作成できるようだ。
商品の紹介ページから引用すると。

『Omni Graffle』は、米国 Omni Group 社により開発された、Mac OS X用ビジネスドローイングツールです。パーツ同士の関連性を保った描画が特徴で、主にチャート図表を作成する際に有用な機能を搭載。ベクターベースの美しい図表作成を可能にします。

だという。

公式サイトから試用版がダウンロードできるので試してみた.

まずは起動画面.
いろいろなテンプレートが用意されている.

こちらがステンシルウインドウ.
この中からドラッグ&ドロップでワークスペースにオブジェクトを配置していく.

こちらがツールパレット.
線のスタイルや塗りつぶしの色などを変更する場合はこれを操作する.

そしてこれがワークスペース.
ここにいろいろなオブジェクトを配置していく.

適当にマウスのドラッグ&ドロップでこういうグラフがさっと書けた.
使い勝手のイメージとしては,PowerPointで図を描いていくのと同じような感じ.
色を変えたり矢印の両端を変えたり,かなり色々やれそう.

保存形式は.graffleという形式だが,[ファイル]→[書き出す] によって,PNGやPDF,SVGなどに出力できる.

試用期間は14日なので,その間フル活用したい.

[shogun 1] shogunを使ってみよう

最近Shogun - A Large Scale Machine Learning Toolbox という機械学習のツールボックスを使い始めたので,shogunについて紹介します.

まず紹介ページの英語を適当に日本語に訳してみます.

SHOGUNは大規模なカーネル法と特にサポートベクタマシン(Support Vector Machine: SVM)[1]に重点を置いている機械学習ツールボックスである.いろいろなSVM実装(OCAS [21], Liblinear [20], LibSVM [2], SVMLight, [3] SVMLin [4] and GPDT [5])に対するインターフェースになる汎用的なSVMオブジェクトを提供する.SVMは様々なカーネルと組み合わせることができる.このツールボクスは線形カーネル,多項式カーネル,ガウシアンカーネル,シグモイドカーネルだけでなく,Locality Improved [6], Fischer [7], TOP [8], Spectrum [9], Weighted Degree Kernel (with shifts) [10] [11] [12]なども提供する.また効率的なLINADD [12]最適化法も実装している.線形SVMに対して,COFFIN framework [22][23]は疎行列,密行列他様々なデータタイプの混合に対してもオンデマンドで処理ができる.さらにSHOGUNは様々なpre-computedなカーネルで動くようになっている.重要なものとしては,サブカーネルの重み付き線形和による結合カーネルがある.この各サブカーネルは必ずしも同じドメインである必要はない.最適なサブカーネルの重みはMultiple Kernel Learning (MKL) [13][14][18][19]で学習できる.現在SVMは,1クラス,2クラス,多クラス分類,回帰問題を扱える.SHOGUNは線形判別分析(Linear Discriminant Analysis: LDA),線形計画マシン(Linear Programming Machine: LPM),パーセプトロン((Kernel) Perceptrons),隠れマルコフモデル(Hidden Markov Model)も実装されている.入力データは様々な型の疎・密行列を利用することができる.平均を引くなどの一連の前処理を各入力データに適用することもできる.
SHOGUNはC++で実装されており,Matlab, R, Octave, Python, Java, Ruby向けのインタフェースが用意されており,機械学習のオープンソースソフトウェアとして公開されている.

長々と書きましたが,重要なのは以下のポイントになります.

  • 様々なSVM実装が利用できる
  • 様々なカーネルを使える
  • SVM以外にもLDAとかHMMとかいろいろ使える
  • C++/Matlab/R/Octave/Python/Ruby/Javaなどで使える
  • オープンソースソフトウェアである

関西CV・PRML勉強会で紹介した時のスライドはこちらにあります.

僕はこのツールボックスを,Pythonから利用しはじめました.スライド中ではapt-getやMacPortsでインストールできると言っていますが,サンプルコードなどを入手したい場合は,gitを使ってソースコードをダウンロードし,コンパイルしてインストールするのがお勧めです.

gitがインストールされているならば

git clone git://github.com/shogun-toolbox/shogun.git
git clone git://github.com/shogun-toolbox/shogun-data.git

のコマンドで,shogunディレクトリとshogun-dataディレクトリができます.shogunディレクトリにはshogunのソースコードとサンプルコードが,shogun-dataディレクトリにはサンプルのデータが入っています.

ソースコードをダウンロードしたら,

cd shogun/src
./configure
make

し,管理者権限で

make install

することでインストールすることができます.
./configureの前に,swigがインストールされていないとpythonなどからの利用ができないので,先にインストールしておく必要があります.これはapt-getやMacPortsなどでインストールすることができます.

サンプルコードを動かすためには,サンプルデータのディレクトリの設定をする必要があります.shogunディレクトリ中で

rmdir data
ln -s ../shogun-data data

としてリンクを張っておく,もしくはshogun-dataの中身をshogun/dataへ移動すると完了です.

次のエントリではPython版のサンプルコードを動かすためのノウハウについて書きます.

Macでnumpyモジュールのインストール

Pythonのモジュールはeasy_installを使ってインストールしています.

easy_install nose
easy_install numpy

という感じ.

ただし,numpyはインストールする際にCのコード,Fortranのコードのコンパイルが必要です.
ここで詰まったのでメモ.

Cのコードのコンパイル
Cのコードをコンパイルするためには,Python.hが必要です.
Python.hは /usr/include/python2.7/Python.h にありますが,インクルードのパスが通ってないので,Python.hがないと言われます.
なので,
sudo ln -s /usr/include/python2.7/Python.h /usr/include/Python.h
してやります.

Fortranのコードのコンパイル
デフォルトではFortranコンパイラのgfortranが入っていないので,
http://hpc.sourceforge.net/ から,gfortran-lion.tar.gzを取ってきて,
sudo tar zxvf gfortran-lion.tar.gz /
してやります.

この2点を済ませば,numpyがインストールできると思います.

SynergyでWindowsからUbuntuを操作

Synergyとは

Synergyとは,Windows / Mac / Linux間でキーボード,マウスを共有するアプリケーション.キーボード,マウスを接続したマシン上で予め(適切に設定した)Synergyサーバを起動しておき,キーボード,マウスを接続していないマシン上でSynergyのクライアントを実行すると,LAN経由で各マシンを操作する事ができるようになる.

Synergyのインストール

今回の環境はこちら

  • windows1 : Windows (クライアントマシン)
  • ubuntu2 : Ubuntu 10.04 (サーバマシン(キーボード,マウスがつながっている))

サーバの設定

Ubuntuなので,apt-getを使ってインストール.

sudo apt-get install synergy

これでOK.次に設定ファイルを書く.適当なエディタ(ここではvim)を使って~/.synergy.conf を編集する.

section: screens
        windows1:
        ubuntu2:
end

section: links
        windows1:
                right=ubuntu2
        ubuntu2:
                left=windows1
end

最初のscreensセクションで,画面(マシン)が何個あってそれぞれなんというホスト名なのかを指定している.

二つめのlinksセクションでは,どの画面のどちら側に別のどの画面があるのか(実世界上での画面の配置)を指定している.

以上の設定でサーバの準備はOK.あとはターミナル上で,

synergys

を実行すればサーバが起動する.

クライアントの設定

次にWindowsのクライアントをインストールする.普通に配布されているやつは,日本語キーボードに対応していないため,こちらからSynergy日本語化バイナリを落としてくる.で,普通にインストール.

起動した後,サーバ欄に上で起動したサーバ(ubuntu2)を指定して接続すると,windows1のキーボード,マウスが,ubuntu2のマシン側から操作できるようになる.

Macで使う場合

Macの場合は,QuickSynergyという Mac / Linux 用のGUIのツールがあるので,それを使うと楽.