2016年3月10日木曜日

MATLABで関数型プログラミング入門

先日まで Northeastern University の Robust Systems Lab で訪問研究員をやっていました.その時に関数型プログラミング入門のチュートリアルを行ったのですが,わりと好評だったと思うので,スライドを日本語化したものを公開します.



いわゆる手続き型の言語にも関数型言語由来の機能が追加されるようになって久しく,研究のためのコーディングでもこれらの機能は有用です.しかし,これらの機能の使い道がピンとこないまま,あるいは存在に気づかないまま活用できずにいる学生が多いように感じています.

普通であれば「関数型プログラミングについて勉強しておいて」と学生に伝えれば済むのですが,典型的な関数型プログラミングの解説は典型的な学生に関数型プログラミングの有用性を理解させられるものではなく,学生にとっての体感的な学習コスパ(=有用性/学習コスト)が著しく低いために身につかないように思われます.僕の感覚では,「手続き型言語に追加されている関数型言語由来の機能でちょっと楽をしたい」程度の低いこころざしの範囲であれば,関数型プログラミングの学習コスパは極めて高く,これは適切な教材の不在によって生じている損失のように思われました.

というわけで,このチュートリアルを行うにあたっては,学生が興味を持ちそうな卑近な(日々の宿題を解くのに役立ちそうな)例題を選び,利便性の積極的なアピールを行うアプローチを試みています.大学生という聴衆に特化しているので役に立たない場合も多々あるかと思いますが,何かの参考になりましたら幸いです.



2016年1月7日木曜日

Atom で LaTeX on Windows (+ 最近のビルド環境)


新しい環境を求めて LaTeX の編集環境を Sublime Text 2に移行しましたが,Sublime Text 3 がいつまでもβ版だったりして停滞感があるところで Atom が流行してきたので,そっちに移行していました.

当初は完成度が低くて実用的ではなかったのですが,最近(2016年1月頃)は実用にギリギリ耐える気がしてきたので,設定や注意事項をメモしておきます.

TeXのインストール

多くの方のご尽力により,世界でも標準的な TeX Live をインストールすれば日本語でも不自由しないので,これを使っています.以下でも TeX Live で普通にインストールした環境を前提としています.

何かとTeX関連のバイナリにパスが通っていることを前提としているパッケージが多いので,

C:\texlive\2015\bin\win32

を環境変数Pathに追加してください.
(上記はTeX Live 2015を既定の設定でインストールしたときのパスですが,バージョンなどに合わせて適宜読み替えてください.)

Atomのインストール

Atomのホームページからインストールできます. 最近は標準的なインストールで日本語が問題なく使えます.ただ,後述しますがフォントの設定はした方がよいように思います.

シンタックスハイライティング

文法に応じて色付けするあれです
をインストールします.なお,Atomでのパッケージの検索とインストールは File メニューの Settings で設定のタブを開き,Install を選んで表示される画面から行うことができます.

Latexmkによる自動コンパイル

一応ビルド用のパッケージがあるのですが,日本語原稿と英語原稿で設定を切り替えたりするのが面倒なのと,TeXのエラーメッセージは機械可読性がいまいちで完全にエラーハンドリングできることを期待できないので,最近はエディタのパッケージでビルドを行うのではなくlatexmkで常時自動コンパイル状態にしています.

latexmkrcファイルの準備

文書ごとにフォルダを用意し,TeXのソースを格納しているフォルダに日本語の場合は以下のような latexmkrc ファイル(ファイル名の頭にドットはついていません)
英語の場合は以下のような latexmkrc ファイル
を配置して,TeXのソースを格納しているフォルダで開いたコマンドプロンプトで

latexmk -pvc

を実行しておけばTeXのソース(やbibファイルや図のファイル)が更新されるたびに自動でコンパイルしてくれます.自動でビューワーの起動も行うのですが,後述の Atom内PDFビューワーを使う場合は不要なので設定ファイル内のコメントのように exit か何かを指定しておくとよいと思います.ビューワーを起動しないでコンパイルだけするオプションは無いような気がします.

また,この場合TeXソースがあるフォルダまでCDするのは面倒なので

  • エクスプローラーでシフトキーを押しながら右クリックするとメニューに密かに「このフォルダでコマンドプロンプトを開く」という項目が増えているので,これを使う.
  • atom-terminal パッケージをインストールすると,atom 左側の tree-view でフォルダや右クリックした際に表示されるメニューに Open terminal at root が追加されるのでこれを使う.

などの方法を覚えておくと便利だと思います.

エラーの確認

エラーは.logファイルに出力されています.後述するPDFファイルのタブとともにAtomで開きっぱなしにしておいても順次更新されるので,僕は開きっぱなしにしています.なお,logファイルを色付けして表示するためには Grammar を LaTeX Log に設定する必要があります..log ファイルを開いた状態で右下に Plain Text と表示されているので,これをクリックすると Grammar を選択することができます..logの拡張子で自動的にGrammarを変えることも可能でしょうが,LaTeX以外でも.logの拡張子を持つファイルがあるので特に設定していません.

備考

ファイル名の頭にドットがついた .latexmkrc をホームフォルダ(WindowsではHOME環境変数で指定したフォルダか C:\Users\maruta とかになっていると思います)に配置すると latexmk はデフォルトでその設定を使ってくれますが,昔のTeXソースをコンパイルするときの設定を忘れたり英語原稿と日本語原稿で記述を変えたりするのが面倒なので,TeXの原稿ごとに設定ファイルを配置するこの形に落着きました.

Atom内でのPDFプレビュー(+SyncTeX)

実は大してメリットがない気もしますが,AtomのタブでPDFを開けるとなんかカッコいいです.
をインストールするとこれが実現でき,表示されたPDFをクリックした際に対応箇所のTeXソースに飛ぶSyncTeXを利用することができます.

日本語PDF問題

長らく標準では日本語のPDFが文字化けしていました.これに関してIssueがあったものの途中で止まっていたのですが,調べてみたところ解決できそうでしたのでお願いして直してもらいました.


バージョン 0.39.0 以降では日本語が利用可能です.Issueを作成された@yohasebeさんと開発者の@izuzakさんに感謝いたします.

PDFへのフォント埋め込み設定

Atom の pdf-view パッケージではフォントを埋め込んでいないPDFファイルの漢字には中国語フォントが適用されるようです.ひらがなに使われる日本語フォントとの組み合わせと相まって日本語の文書は大変見苦しくなりますので,何らかのフォントの埋め込みをお勧めします.
TeX Live のコマンドプロンプトで

kanji-config-updmap status

を入力して状況を確認し

kanji-config-updmap ipaex

などのコマンドで埋め込むフォントを選択することができます.

pdf-view の現状の課題

ここまで書いておいてなんですが,100ページくらいのPDFを開くと簡単に不具合を起こしたり,テキストが選択できなかったり検索がかからなかったりするのであまり使い勝手が良いわけではありません(2016年1月現在).今後の進化に期待です.

SumatraPDFでのPDFプレビュー(+SyncTeX)

Atomの外部でPDFをプレビューする場合,いわゆる Acrobat や Reader でPDFファイルを開くとPDFファイルがロックされてTeXのコンパイルができなくなるので,コンパイルのたびにビューワーを閉じないといけませんが,PDFファイルをロックしない SumatraPDF を使うと,PDFを開いたまま修正とコンパイルを行うことができます.SumatraPDFは
からダウンロード可能です.

またビューワー上でクリックした際にTeXソースの該当箇所に自動で移動する SyncTeX については,上述の latexmkrc 内での指定のような -inverse-search オプションを付けて起動するか,適当な(TeXで生成された)PDFを開いた状態でSumatraPDFの左上のアイコンをクリックして表示されるメニューから Settings → Options をクリックし,Set inverse search command-line の項目を

"C:\Users\maruta\AppData\Local\atom\bin\atom.cmd" "%f:%l"

のように設定してください.

atomの実行ファイルはユーザー毎のフォルダにインストールされているので,どの場合も実行ファイルのパス中に含まれる maruta を自分のユーザー名で置き換えることに注意してください.

スペルチェッカの設定

Atomには標準でスペルチェッカがついています.が,Windows の場合
  • Windows 標準のスペルチェッカが使われる
  • 言語はシステムの設定に準じる
という仕様になっているで,英語のスペルチェッカを使うためにはシステムの言語設定を英語に切り替えるしかありません.この辺の仕様については色々と議論があるので,
そのうち改善するような気もしますが,今のところAtomでLaTeXを使う上で最大の問題かもしれません.LaTeX編集中にスペルチェッカを有効にするためには
[File]-[Setting]でPackagesの画面を開き,spell-checkを検索します

そしてspell-checkパッケージの設定画面(Settings)に移動し,Grammarsの項に text.tex.latex を追加します.

フォントの設定

File メニューから Settings の画面を開き Font Family のところに CSS でフォントを指定する要領で書くことができます.僕の設定は

Consolas, メイリオ

です.カンマで区切って列挙すると最初のフォントに含まれない文字は次のフォントで表示される感じになるので,簡単に好きな英文フォントと和文フォントを組み合わせることができます.個人的には,ここの簡単さとフォントのレンダリングがWebブラウザ並みに綺麗という点が LaTeX 編集に Atom を使う最大のアドバンテージな気がします.

僕は日本語を書くときには等幅を妥協する派ですが,等幅フォントが好きな人はMiguフォントとかを使うと良いと思います.

覚えておくべき機能

スニペット Snippet

今どきのエディタの定番機能で,定型コードの入力を大幅に省力化できます.とりあえず language-latex パッケージをインストールした際にLaTeX用のスニペットが登録されているので,適当なTeXファイルを開いて[Alt]+[Shift]+[S]のショートカットを使うと一覧を見ることができます.

この一覧から使いたい項目を選択することもできますが,項目の上側に表示されているprefixを覚えておけば,通常の文と同様にprefixを入力し[TAB]を押すことでスニペットを使うことができます.

文脈によって(数式環境の中とか外とか)有効なスニペットが変わったりするので色々試してみてください.

使い方に慣れてきたらスニペットの自作をお勧めします.

マルチカーソル

これまた今どきのエディタでは定番の,複数のカーソルを使って複数の箇所を同時に編集する機能です.
  • [Ctrl]キーを押しながらクリックするとその位置にカーソルが増えます. 
  • 適当な文字列を選択した状態で[Ctrl]+[D]を入力すると,選択中の文字列を検索してその位置にカーソルが増えます.繰り返し[Ctrl]+[D]を入力することで順次検索&カーソルの追加が行われます. 
慣れるとすごく便利なのでぜひ使うように心がけてみてください.

LaTeXの編集作業の中では,表や数式をいじるときに使いどころが多いと思います.

便利なパッケージなど

アイコンの拡充

をインストールするとファイルのアイコンが豊富になります.TeXのファイルも専用のアイコンになり,ツリー表示やタブが少しわかりやすくなるのでインストールをお勧めします.

minimap

今どきのエディタによくあるカッコいいあれです.
標準では入っていないですが
をインストールすると使えるようになります.

ファイル名補完

LaTeXで図や写真・画像などを使う場合,ファイル名を入力するのが地味に面倒だったりしますが,
を使うと補完の候補にファイルやフォルダの名前が出現するようになります.

カレントディレクトリ配下のファイル名を入力したい場合「./」と入力を始めると候補が表示されます.

\cite, \ref の補完

参考文献や数式,図表の番号を参照する際に
を入れておくと自動で補完してくれて快適です.参考文献については .bib ファイルを読み込んでいるので,BibTeXを使っていない場合は機能しないと思います.

まとめ

Atomはオープンソースの申し子のようなエディタであり,これまでの急速な改善からみても,いまどきの定番エディタの地位を長く維持できるような気がします.

ただし LaTeX や Windows や日本語といった辺境領域への対応はまだまだ不安定だったり完成度が低い感じですので,これからさらに開発が盛り上がることを期待したいです.
自分でもちょいちょいと貢献できたらな~と考えています.

あと,個人的には SublimeText2でだいぶお世話になり,最近 Atom 版の開発が始まったLaTeXTools に期待しています.
いまのところ動かない機能が8割といった感じなので(2016年1月現在),頃合いをみて試してみたいと思います.


2015年12月25日金曜日

TeXclipで作成した数式を後で編集する方法

TeXclipで作成した数式を修正する必要があるとき,再度TeXのコードを入力するのが面倒だという要望を頻繁にお受けしますので,簡単な方法を以下で説明します.

TeXclipの画像には代替テキストとしてTeXのソースコードを指定しています.
したがって,普通にPowerPointにコピペした画像については,「図の書式設定」の「代替テキスト」のところからTeXのソースコードを回収することが可能です.

以下のスクリーンショットは PowerPoint 2016 のものですが,リボンインターフェースに変わる前のバージョン(2003くらい?)でも「図の書式設定」ダイアログで同様の情報を取得できたはずです.「図の書式設定」はバージョンによらず画像を右クリックすると表示されるコンテキストメニューから表示できると思います.


フォントや解像度の設定についてはお手数ですが手作業で復元してください.

2015年12月24日木曜日

AdWordsで個人開発のWebサービスを宣伝してみた

はじめに

刊行ペース検索」というサービスを作りました.これはコミックや小説などの過去の巻の発売日を検索し,まとめて表示するサービスです.
  • いつごろKindle化されるか?
  • 新刊はいつ頃発売されるか?
といったことを予想するために,過去の巻の発売日を調べる作業は意外と時間がかかります.周りの友人に聞いた感触では,同じようなことに無駄に時間を使っている人は多く,潜在的な需要はそれなりにあるWebサービスなんじゃないかと思います.


しかし,こういう「意外となかったけど便利系」のサービスは,能動的に探しにくるユーザーを期待できないので,放置しても誰も来ないです.自分のために作り,レンタルサーバーの余剰リソースで運用しているサービスなので誰も来なくても特に問題はないのですが,誰も使ってくれないと寂しくなるのが人情です.

というわけで,前々からやってみたかった Google の AdWords での宣伝を試してみました.

AdWordsの設定

キーワードの選択

AdWordsはGoogleで検索する時,キーワードに応じて検索結果に混ざって表示されているあの広告を出稿するためのサービスです.AdWordsに出稿する上では,どのキーワードで検索しているユーザーをターゲットにするか?ということが最大の問題ですが,
  • 競合する広告主の少なさ(安価に広告を出せる)
  • 検索者が抱えている問題を「刊行ペース検索」が解決できる可能性の大きさ
    (クリックあたりで料金が発生するので,「刊行ペース検索」の潜在的顧客だけにクリックしてほしい)
といった点を考えた結果「Kindle版」で検索している人をターゲットに選ぶことにしました.「Kindle版はいつ発売されるんじゃ~」と思っている人以外は使わなそうなキーワードなので,用がない人を呼び込みにくいだろうというのが狙いです.

予算の設定

つぎの問題は,いくらかけて何人くらいのお客さんを呼び込むかということです.AdWordsでは1クリックあたりに支払う金額の上限と1日当たりの予算の上限を設定することができますが,どの程度の投資が効率的かはキーワードにも強く依存し,初めてだと見当もつきません.

これについては,Googleが提供している「キーワードプランナー」というツールで,どのキーワードにいくら払えば,だいたいどれくらいのアクセスを呼び込めそうか?ということが予想できるようになっています.

(このツールが意外とおもしろいので,宣伝するべき適当なサイトをお持ちの方は,このツールで遊ぶために一度AdWordsを使ってみるのもいいような気がします.)

調べてみた結果「Kindle版」のキーワードだと,限界まで投資しても15人/日くらいしか呼び込めなさそうだったので,10人/日程度のペースでサイトに誘導するべく500円/日,30円/クリックを上限に広告を出稿することにしました.

AdWordsの効果

1か月ほどAdWordsで宣伝してみた感想は以下のような感じです.

集客できた

途中いろいろと調整しましたが,だいたい10人/日くらいのペースで集客できて費用は200円/日くらいでした.特に友達でもない人を10人もサイトに連れてくるのは実際なかなか大変なので,コストパフォーマンスは悪くないと思います.

テスターを確保するツールとして意外と優秀だった

ぬるいサンデープログラマーなので,テスターを雇うことは考えたこともなかったですが,AdWordsで誘致したお客さんの行動はサイトの構造や説明文のブラッシュアップを行う上でとても参考になりました.たとえば,
  • 雑誌で検索して失敗して帰る人が多い
  • 途中で出版社が変わるコミックシリーズがそれなりにある
  • 作者の刊行ペースを検索したい人が結構いる
  • スマホでのアクセスが多い(大きい表はイマイチっぽい)
  • (Kindleをターゲットにしているので当然かもですが)
    普通のサイトよりタブレットでのアクセスがかなり多い
といったことは,AdWordsで流入したユーザーのログを見てはじめて認識できました.

また,予算の設定で流入をかなりコントロールできるので,サイトをひっそり公開しつつ,変更するたびにユーザーを流入させて,サイトの出来をチェックすることができます.まともなWebサービスで,このようにテストとも宣伝ともつかないことをやるのは悪手のように思いますが,お気楽にだらだらと開発している個人のWebサービスでテスターを確保する手段としてAdWordsは有用でした.

いつもと違う人が来る

大抵,自分が作ったサイトは自分に似た属性の人が来るものですが,広告で集客すると傾向が変わります.今回の場合,想定していたよりも年配・女性の方を多く集客しているように思いました.

自分の想定が若年・男性にバイアスしているのか,広告をクリックする寛容な人が年配・女性に多いのかちょっと判断つきかねますが,自分と属性が離れた人を集めるのは普通難しいので,使いどころによってはすごく便利かもしれません.

おわりに

というわけで,意外と得るものが多かったAdWordsでの宣伝ですが,そろそろ利用パターンが出尽くしてリピーターが増えてきた感があるのと,通常の検索流入も増えてきたので打ち切ろうかと思っています.

個人でWebサービスを開発した場合,お金を払って宣伝することにハードルを感じる人が多いのではないかと思いますが,AdWordsでの宣伝はGoogleの技術の一端に触れることもでき,意外と楽しいのでおすすめです.

2015年12月4日金曜日

Arduino とレゴで倒立振子(3)電源の性能

かなり前に
という記事を書きましたが,その後これに関連して学会発表をしたり特集号の記事を書いたりしてブログの更新を忘れていました.

特集号の記事は
にあります.現在は計測自動制御学会の会員でないと全文が読めませんが,一年後(2016/3)から無料で読めるようになるはずです.

また,記事の補足として実験機が動作している動画を公開しておきます.


この実験は安定化されているモバイルバッテリーを電源にしていることのメリットを示すためのもので,ギリギリ安定化できている程度の性能が悪い(=よく揺れる)制御器でも14時間程度連続して倒立しており,電源の消費によって実験の再現性が損なわれていないことを確認するものです.

制御器を完全にチューニングすれば持続時間は日単位になると思いますが,あまり意味がないわりに面倒な実験なので試していません.長時間動作させる実験では,地面の起伏とタイヤの滑りで倒立振子が予想できない方向にじわじわ動いていくために,意外と広い実験場所が必要になることと,実験を記録するためのカメラの持続時間が問題になります.もし同様の実験をされる方がいらっしゃいましたら参考にしてください.

3年間授業でこの倒立振子を使っているうちに,いくつか新しい技術が利用可能になり,改善したい点もでてきたので,そのうちまた実験機と記事をアップデートすると思います.

2015年11月18日水曜日

Kindle版の発売日を推定するためのWebサービスを作りました

Kindle版が紙媒体の書籍からどれくらいの時間差で発売されるかは,特に出版社ごとに決まった法則があるわけでもなく,本によってケースバイケースのようです.

しかし,漫画のようにコンスタントに続巻が発売されるものでは,発売日を順番に並べてみるとそれなりに規則性があり,十分に発売日を予測可能なように思われます.

というわけで,Kindle版・コミック版などの発売日を検索し,並べて表示するサイトを作りました.

刊行ペース検索
Kindle版に限らず発売日の予測に便利なので,ぜひご利用ください

以下は技術的なメモです.

2015年6月19日金曜日

netduino 3 wifi で雨量確認ガジェットを作る




最近,研究に使う関係で色々なマイコンを調べていますが,その中でも比較的最近発売された netduino 3 wifi というのがおもしろそうだったので,個人的に購入して遊んでみました.