スキップしてメイン コンテンツに移動

投稿

ラベル(tips)が付いた投稿を表示しています

Mac から iPhone のカメラを起動して写真を直接取り込める

Via: The Verge ID セルフィーや (物理) 書籍のページスキャンなど携帯電話のカメラを使って写真を取り込むことは日常的な所作になっているが、写真の使い途が何かの申し込み用 Web フォームなどで iPhone より Mac の方が操作し易いときなどは億劫だ。Mac 組込の FaceTime カメラは 720p とか 1080p しかなくて非力すぎ、かといって iPhone で一旦撮影したものを Photos から探して AirDrop するのも面倒である。 実は macOS Mojave / iOS 12 以降には Continuity Camera という機能がある。これを使うと Apple 製の Mac アプリケーションから iPhone / iPad のカメラを起動して、余計な中間コピーを残すことなく写真を Mac に転送できる。 使い方は簡単で、対応している Mac アプリケーションのコンテキストメニューに “Import (or Insert) from iPhone (or iPad)” という項目がある。“Take Photo” だと一枚、“Scan Documents” だと複数の写真を (歪み補正しつつ) 連続で撮影して転送できる。 対応 Mac アプリケーションは Finder のほか iWork (Keynote, Numbers, Pages), Mail, Messages, Notes, TextEdit となっている、のだが実は Preview でも使える。同様にコンテキストメニューあるいは “File” メニューから起動できる。

開発環境の構築に asdf が便利なので anyenv から移行した

プロジェクト毎に異なるバージョンの言語処理系やツールを管理するために、pyenv や nodenv など *env の利用はほとんど必須となっている。 これらはほとんど一貫したコマンド体系を提供しており、同じ要領で様々な環境構築ができる非常に便利なソフトウェアだが、それを使うことで別の問題が出てくる: *env 自身の管理である。 無数の *env をインストールし、シェルを設定し、場合によりプラグインを導入し、アップデートに追従するのは非常に面倒な作業だ。 幸いなことにこれをワンストップで解決してくれるソリューションとして anyenv がある。これは各種 *env のパッケージマネージャというべきもので、一度 anyenv をインストールすれば複数の *env を簡単にインストールして利用できる。さらに anyenv-update プラグインを導入すればアップデートまでコマンド一発で完了する。素晴らしい。 そういうわけでもう長いこと anyenv を使ってきた。それで十分だった。 ——のだが、 ここにもう一つ、対抗馬となるツールがある。 asdf である。anyenv に対する asdf の優位性は大きく2つある: 一貫性と多様性だ。 一貫性 “Manage multiple runtime versions with a single CLI tool” という触れ込み通り、asdf は様々な言語やツールの管理について一貫したインタフェースを提供している。対して anyenv は *env をインストールするのみで、各 *env はそれぞれ個別のインタフェースを持っている。 基本的なコマンド体系は元祖である rbenv から大きく外れないにしても、例えば jenv のように単体で処理系を導入する機能を持たないものもある。それらの差異はユーザが把握し対応する必要がある。 多様性 asdf はプラグインシステムを持っている。というより asdf 本体はインタフェースを規定するだけで、環境構築の実務はすべてプラグイン任せである。 そのプラグインの数は本稿を書いている時点でおよそ 300 を数える。これは言語処理系ばかりでなく jq などのユーティリティや MySQL のようなミドルウェアも含むが、いずれにしても膨大なツールが asdf を使えば...

MacPorts の GHC が macOS Sierra でビルドできない件の回避策 (i.e. MacPorts のパッチの当て方)

多分じきに修正されて腐る内容だが、MacPorts の port にパッチする方法としてまとめておく。 会社を辞めたので久方ぶりにブログを書こうと思い、pandoc をインストールしようとしたところ GHC のビルドがコケた。 ログをみると GetTime.c というファイルのコンパイルに失敗している。MacPorts の Trac を検索してみると果たして 既知の問題 だった。「Haskell 処理系とそれに依存する全パッケージがインストールできない」問題が四ヶ月前に報告されていまだに直っていないという大らかさ。 幸いチケット内に パッチ が提案されていたのでこれを適用してことなきを得た。 まずローカルに GHC の port をコピーし、MacPorts の ports tree として登録する: $ sudo -i Password: # mkdir -p /usr/local/ports/lang/ && cd /usr/local/ports/lang/ # cp -r $(port dir ghc) ./ # cd ghc && port lint # cp /opt/local/etc/macports/sources.conf{,.orig} # vi /opt/local/etc/macports/sources.conf # 作成したディレクトリをデフォルトの ports tree の前に追記する # diff -u /opt/local/etc/macports/sources.conf{.orig,} --- /opt/local/etc/macports/sources.conf.orig 2017-02-10 14:10:00.000000000 +0900 +++ /opt/local/etc/macports/sources.conf 2017-02-10 14:11:04.000000000 +0900 @@ -29,4 +29,5 @@ # sites, etc.), the primary MacPorts source must always be tagged # "[default]", even if switched from the def...

Algorithm::SVM の注意点

要旨 Algorithm::SVM は極めて有用だけど API がなんか変なので注意が必要。 詳説 CPAN に Algorithm::SVM 1 というモジュールがあります。これ Support Vector Machine (SVM) 2 を提供する LIBSVM 3 という有名なライブラリの Perl バインディングなのですが、なんか API に癖があるので注意点を解説します。 まず使い方を簡単に紹介します: use strict; use warnings; use Algorithm::SVM; my @data_set; while (<DATA>) { chomp; my ($label, $vector) = split /:\s+/, $_, 2; my @vector = split /,\s+/, $vector; my $data = Algorithm::SVM::DataSet->new( DataSet => \@vector, Label => $label, ); push @data_set, $data; } # 本当はパラメータ調整が要るけど省略。全部デフォルトなのでガウスカーネル利用の C-SVC になる。 my $svm = Algorithm::SVM->new; # 分類器を訓練する。 $svm->train(@data_set); # ラベル1に分類されるべき未知のデータ。 my $test_data = Algorithm::SVM::DataSet->new( DataSet => [ 4.6, 3.2, 1.4, 0.2 ], # ラベルは未知なので仮に 0 とする。単に無視されるので -1 でも 65536 でも 42 でも良い。 Label => 0, ); # 未知データを分類。1 が返るはず。 my $label = $svm->predict($test_data); print "$label\n"; # Iris Data Set (http://archive.ics.uci.edu/ml/datasets/Iris) より...

Perl - -CスイッチでPerlIOレイヤを操作

要約 マルチバイト文字を扱うワンライナはとりあえず-CSDとでもしておくと安心。 長文 どう書く?org で バイナリクロック のお題に 解答したら 、あの 小飼弾氏 が さらに短くして下さいました 。うはー! perl -CIO -Mutf8 -le 'print for map { $_ = sprintf "%06b", $_; tr/01/□■/; $_ } (localtime)[2,1];' Perl5.8対応(そうか、-lで $\ 出力だった)はともかく-Cスイッチって何ぞや、と思ったのでperldoc perlrun : −C [number/list] The "−C" flag controls some of the Perl Unicode features. 「Perl5.8.1より前はWin32のワイド版APIを使うためのスイッチだったけど、誰も使わなかったから使い回すことにしたよ」とか中々楽しいことが書いてあり、現在はPerlIOレイヤを操作するスイッチになっているそうです。 以下簡単な説明。 -C(I|O|E|S) -C(I|O|E)はそれぞれ標準(入力|出力|エラー出力)のPerlIOレイヤをUTF-8に設定するオプションです。つまり次のコードと等価になります: binmode STDIN, ':utf8'; # -CI binmode STDOUT, ':utf8'; # -CO binmode STDERR, ':utf8'; # -CE また-CSオプションで、これらをまとめて指定できます。 -C(i|o|D) -C(i|o)はそれぞれ読み出し(<)、書き込み(>)用に開くファイルハンドルに適用されるデフォルトのPerlIOレイヤをUTF-8に指定します。-CDは両者の一括指定。それぞれ open プラグマを使った以下のコードと等価です: use open IN => ':utf8'; # -Ci use open OUT => ':utf8'; # -Co use open ...