Terrarium

いわゆる掃き溜めの ありふれた有象無象

PlatformIOでArduinoの純正IDEから卒業する

PlatformIO

久々にArduinoを使うことになり,せっかくだしコマンドラインから開発したいなぁとなって調べているうちに,良いものを見つけました.

platformio.org

VSCode拡張機能としてインストールでき,ArduinoIDEが無くても動作する優れモノです. 今回はPlatformIOの導入方法について説明してみたいと思います.

Arduinoの純正IDE

(もしかしたら私が知らないだけの機能があるかもしれないです) よくプログラミングをする人はわかると思いますが,Arduinoの純正IDEは機能がとても少ない… 複数のファイル編集もタブしかなく貧弱ですし,変数や関数の補完もしてくれない. Vimキーバインドも使えないし…

いわゆるVSCodeみたいなインテリジェントなエディタに対して機能が貧弱なんですね.

PlatformIO

そこで開発されているのがPlatformIOで,コマンドラインから使えるマイコン向けのビルド・書き込みツールです. Arduinoだけでなく色々なマイコンに対応しているそう.

platformio.org

コマンドラインから使える,と言うことはコーディングと書き込みで別のツールとして使うこともできます. スクリプトを書いて自動で書き込みとかもできる. しかし,ボードの正式名称を調べたり決められたコマンドを使わなければいけなかったりと設定ファイルを作るのがちょっと面倒だったりする.

コマンドを覚えるのが面倒,そう言う人のために,PlatformIOを用いたIDE,PlatformIO IDEと言うものが用意されています.

platformio.org

また新しいIDEを入れなくてはいけないのか…と思いきや,ページを開けばわかりますが,AtomだったりVisualStudioCodeの拡張機能として導入できます(と言うより拡張機能がインストールされたAtomがダウンロードできるといった様子です).

VisualStudioCodeの拡張機能として導入するメリットは以下の通り.

  • 普段使い慣れたエディタで開発できる
  • GUIベースでプロジェクトの設定が可能
    • ボードの選択をはじめとしたプロジェクトの設定をビジュアルに行うことができる
  • ビルドや書き込みもワンボタン
    • PlatformIOの拡張機能をインストールすると左下に専用のボタンが現れ,ビルドや書き込みをワンボタンで行うことができる

VisualStudioCodeにPlatformIOを導入する

VisualStudioCodeは軽量かつ高機能なエディタとして誰にでもお勧めできます. インストールはこちらから.

code.visualstudio.com

何となくやればインストールは終わるはず.

次に拡張機能をインストールします.

f:id:tellusium:20180212133349p:plain

左側のアイコンのうち一番下をクリックし,検索窓にplatformまで入れれば一番上に出てきます(画像ではすでにインストールされていますがインストールボタンが出てくるはず). 基本それだけ.

インストールできるとPlatformIO Homeといったウィンドウが出てくるはず…または左下の家のマークをしたボタンからも開けます. f:id:tellusium:20180212133604p:plain

開いた時の画像. f:id:tellusium:20180212133754p:plain

NewProjectと言うボタンがあるはずなので,それをクリックしボードなどを選びます. ボード選択の部分は文字を入力でき絞り込みが行えます. フォルダの配置場所はご自由に. f:id:tellusium:20180212133903p:plain

プロジェクトが作成されると,フォルダ階層が表示されるはず. プログラム本体はsrc/main.cppにあるので,これを開き,Lチカのコードを書いてみます.

f:id:tellusium:20180212134021p:plain

あとは左下にある「→」ボタンをクリックすると,ビルドと書き込みが行われます.

その他の機能

Arduinoを使う上でシリアルモニタの使いやすさは捨てがたい. もちろんPlatformIOにもその機能が搭載されています. 左下にあるアイコンのうち右のほうにある,コンセントみたいなアイコンをクリックするとシリアルモニタがターミナル上に表示されます. ちゃんと動く.便利.

f:id:tellusium:20180212135050p:plain

まとめ

以上,VisualStudioCodeでPlatformIOを導入するメリットとその方法について説明してきました. 使い慣れたIDEで開発できる,しかもGUIでプロジェクトの設定やビルド・書き込みができるところが非常にありがたい. さらにシリアルモニタまで使えるとか,純正のIDEをはるかに超えた使いやすさでした.

注意

以前platformioを使おうとした時に,PythonのVer2を使えるようにしなくてはならず,PyenvでVer3を使っていた自分にとっては使いづらかった記憶があります(今は消しましたが…). 同様にPyenvを使っていてVer3をデフォルトにしている人は何かしら上記の手順でエラーが出るかもしれません. 今どのバージョンに対応しているのかがぱっと見わからなかったので,もしかしたらすでにVer3に対応しているのかもしれません.

2値画像中のある円領域内の画素数をカウントしたい

コーディング中…

既存論文の実装のために,2値画像中のある円領域内の画素数をカウントする必要が出てきた. 円領域…ということで愚直に実装してみたところ

# imgが画像(numpy array)
# p_x, p_yが円を囲む正方形領域の左上の点
# lengthが円領域の直径
c_x = length / 2 + p_x
c_y = length / 2 + p_y
radius = length / 2

count = 0
for x, y in itertools.product(range(p_x, p_x+length), range(p_y, p_y+length)):
    if ((x - c_x)**2 + (y - c_y)**2 <= radius**2) and img[x][y] > 0:
        count += 1

… 終わらない… 5分経っても終わらない…

調べてみた

こうなることはある程度予測できていたので調べてみた. すると次のStackOverflowのページがヒットした.

stackoverflow.com

np.ogridというものを使っているらしいが時間がないのであとで調べようということで,次のように実装し直した. createCircularMaskTrueFalseによるマスクを返してくれるので,正方形領域であるwindowを抽出したあとでそのマスクをかける. あとはただのnp.arrayなのでnp.count_nonzeroを実行すればカウントできる.

def createCircularMask(h, w, center=None, radius=None):
    if center is None: # use the middle of the image
        center = [int(w/2), int(h/2)]
    if radius is None: # use the smallest distance between the center and image walls
        radius = min(center[0], center[1], w-center[0], h-center[1])
    Y, X = np.ogrid[:h, :w]
    dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2)

    mask = dist_from_center <= radius
    return mask

c_x = length / 2
c_y = length / 2
radius = length / 2
count = 0

window = img[p_x: p_x+length, p_y: p_y+length]
window = window[createCircularMask(length, length)]
count = np.count_nonzero(window)

すぐに結果が返ってきた. やはりnumpyは偉大ですね.

ファイルに1行ずつ書かれたURLを全てダウンロードしたい

事件は起きた…

http://hogehoge.co.jp/img/hogehoge.png
http://fugafuga.co.jp/img/fugafuga.jpg
...

というファイルを入力にして,全部の画像をダウンロードしたい

TL;DR

普通はこれで動くはず…

cat images.txt | xargs -L1 wget

今回は改行コードが違っていたのでこれで動かした.

cat images.txt | tr `\n\r` `\n` | xargs -L1 wget

改行コードが違っていた…

Pythonまで書くのはめんどいのでShellでやってしまおう.

cat images.txt | xargs -L1 wget

と実行すると…

--2018-01-27 17:09:02--  http://hogehoge.co.jp/img/hogehoge.png%0D
Resolving hogehoge.co.jp... (IPアドレスの羅列)
...

とエラーがでた.

調べると0D0AWindowsの改行コードなのでうまく認識できなかったらしい(確かにWindowsを使っている方からいただいたファイルだった)

これは\n\rを意味するので,Macの改行コードである\nに置換してやれば良さそう.

cat images.txt | tr `\n\r` `\n` | xargs -L1 wget

これで動いた.

研究生活を支えるちょっとお高いガジェットたち(+すべった話)

この記事はeeic (東京大学工学部電気電子・電子情報工学科) Advent Calendar 2017 その2の20日目の記事として書かれたものです。

qiita.com

昨日は @CeleuC さんの研究バイトの記事でした.いいですね,私も研究でお金が欲しいです. 明日は @yunoLv3 のVRの記事みたいですね.彼は存在がVRって感じの人なのでどんな記事を書いてくれるか非常に楽しみです.

はじめに

EEIC2016でB4をやっているtellusiumです. 自分の趣味の一つとしてガジェット(デバイス?)集めみたいなものがあり,それらを研究生活にどう使っているかとそのレビューについて書いていきたいと思います. B3のころはバイト侍をしていて,結構お金に余裕もあり色々なガジェットを買っていました.おかげでほぼ使い切ってしまいましたが…

それでは,趣味の話であり研究の話でもあり,すなわちプログラミングの話と言えなくもない話の始まりです. (元々「趣味の話か研究の話かプログラミングの話かすべらない話」と書いていたので無理矢理)

起床

まずは朝ですね. 心地よい一日の始まりのためにも,朝は非常に重要です. そこで睡眠から起床に使えるガジェットのレビューです.

Fitbit Charge 2

起床用のガジェットとしては,Fitbitを使っていたことがあります.私が使っていたのは「Fitbit Charge 2」でした.

www.fitbit.com

価格は確か2万円ちょっとだったような.

機能

普段の生活とエクササイズ,睡眠に関わる様々な機能がついています. 詳細はHPに任せます. 特に私が使いたかったのは次の機能でした.

  • 睡眠のアクティビティをトラックしてくれる機能
  • バイブレーションによるアラーム機能

感想

使ってみた感想ですが,もちろん人によって変わるとは思うのですが,「あまり使っている意味を感じない」でした. 特に次の点です.

  • よく眠れている時と眠れていない時での差が一目ではわからない(し,わかるためにはデータとにらめっこする必要がある)
  • 毎回トラック結果を見るためにアプリを開かなくてはいけない

特にアプリを開かなくてはいけないのは自分の理想の使い方とは乖離していたので少し残念という感想です.

自分はFitbitをEvernoteやGooglePhotosのような「放置して貯めておく」系のサービスとして期待していました. 使っていれば自動的に1週間に1回睡眠のアドバイスがされる的な(そのうちそうなるかもしれない,技術的には可能なはず) しかし使ってみると,これは「積極的に使う必要のある」サービスだったように思います.

ということで最近はFitbitをつけることをやめてしまいました. ただ最近睡眠で少し悩んでいるので,寝るときだけつけてみることも検討しています.

通学

私は電車で結構な時間を通学するため,電車の中でどう過ごすかが1日のQOLを大きく左右します. そこで電車の中で使っているデバイスを3つほど紹介します.

iPad mini, iPad Pro 10.5

電車の中で論文を読むには,大画面デバイスが欠かせません. 昔はiPad miniを使っていましたが,途中でiPad Pro 10.5に買い換えました. 電車で立ちながらだとちょっと重いのですが,座っている分には快適に論文が読めます.

機能

多分みんな知ってるので割愛.

論文を読むのは昔はGoodReaderを使っていました.

GoodReader - PDF Reader, Annotator and File Managerを App Store で

DropboxGoogleドライブとの連携ができ,非常に重宝していました. しかし秋くらいにiPad Pro 10.5を買った際にこれらにログインしようとしたところ,Googleはそもそもログインできず(アプリ内ブラウザでのログインが利用できなくなった?)Dropboxは日本語ファイルがあると同期エラーが発生するという状況で,使い物にならなくなってしまいました(対応してくれー)

と悩んでいるときにちょうどiOS11のアップデートがきて,デフォルトでファイラーが使えるようになってからはこちらを使っています. (でもGoodReaderの方が使いやすい…)

感想

iPad miniiPad Pro 10.5の違いを感じたのは次のような点でした.

  • iPad miniで論文を読もうとすると少し小さく感じる
  • 一方iPad Pro 10.5はかなり快適
  • しかしiPad Pro 10.5は電車で立って読む際にはかなり重い

iPad Pro 10.5にしてからは,GoodReaderでもデフォルトのファイラーでも結構快適に論文が読めます. Kindleでコミックを読むのも大画面で快適. 画面が大きい分Macをラボに置きっぱにしていても家で快適にブラウジングは楽しめます.

とこれまで良い点を述べてきたのですが,ApplePencilと合わせて11万円(セルラー付きモデル)の価値があるかと言われると正直なんとも言えないです. まだ投資した額を回収できていない気しかしないので,最近は新しい使い方を模索中です. 例えばこんなものに挑戦しようとしてます.

iPhone X

はい出ました.某りんご企業への強い信仰心を持っておりかつ多額の寄付を行った信者のみが手にすることができるデバイスiPhone Xです(冗談です)

電車内で座れないとき,論文を読むのに欲しいのが大きい画面のスマートフォンです. 昔はiPhone5sを使っていましたが,最近iPhoneXに買い換えました(当日に予約しました)

機能

全てはここに記されています.

感想

言いたいことはたくさんあるので別記事にした方が良さそうなのですが,まあ満足度は高いです. 一応論文を読むという趣旨でこの記事を書いているので,それに基づくと

  • 画面が大きいので,2段組なら縦向きのままでも1段ずつ表示すれば十分読める
  • 画面が縦に長いので,1段組なら横向きにすると結構読める

画面がスマートフォン最大級なため,結構ちゃんと読めます. もちろんiPadに比べると小さいなという感想は否めませんが,電車で立っている場合に使うことを考えれば十分です. (まあ最近は実装中心で論文はほとんど読まないのですが…)

Amps AirSONY WF-1000X

電車で音楽を聴く人は多いと思います.自分も論文を読む気力がない時(ほとんどそうなんて言えない)は,音楽を聴いています. その時に使いやすいのが,左右分離型ワイヤレスイヤホンです. コードがないため,電車内でもたつくことなく装着できますし,タッチノイズもなく,電車を乗り換えている時でも快適に音楽を聴くことができます. 昔はAmps Airを使っていましたが,今はSONYのWF-1000Xを愛用しています.

http://solrepublic.jp/product/amps-air

www.sony.jp

機能

どちらもBluetooth左右分離型のワイヤレスイヤホンです. WF-1000Xの方はなんとノイズキャンセリングもついています.

それぞれの特徴を比較すると次のようになります.

  • Amps Air
    • WF-1000Xに比べ安い(13000円ほど)
    • 本体の電池持ちが良い(1.5h の往復すなわち3hでも余裕で持つ)
    • ケースにモバイルバッテリーがついているので本体の充電が切れた時も充電できる回数が多い
    • 音質はまあまあ
    • 遮音性は高い
    • 音がでかい(iPhoneの音量制限機能を使わないとでかすぎる,1でもでかいためGooglePlayMusicとかでは使えない)
  • SONY WF-1000X
    • 高い(25000円ほど)
    • 本体の電池持ちはそんなにない(1.5h使うと赤になる)
    • ケースに入れれば充電できるがケース自体の容量がそんなにない(2回くらいしか充電できない)
    • その分軽い
    • 音質はかなり良い(さすがSONY
    • ノイズキャンセリング機能付き
    • 音が控えめ

感想

正直に買ってよかったと思える買い物でした. 一度分離型ワイヤレスを使うと普通のイヤホンの取り回しが面倒になります.

上にも書きましたが(Bluetoothイヤホン全般は)音がでかいです. 1にしてもでかい. 音量調整が効くiPhone純正Musicアプリならそれを下げると少しましになるのですが,そこがなかなか使いづらい. 純正でないGooglePlayMusicなどを使おうとするとでかすぎて聴けないレベルでした.

私はWF-1000Xの発売の際にAmpsAirから買い換えたのですが,高い分こちらの使い心地は最高です. 音が控えめなので,音量制限を使わずとも快適に音楽が聴けます. 特にノイズキャンセリングは最高で,iPhoneで音楽を聴いていてもノイズキャンセリングを使うことができます.

お金に余裕がある方にはぜひお勧めしたい1品です.

(AmpsAirは胸ポケットに入れたまま洗濯してしまい買い換える羽目になったというエピソードが…)

研究室

最後は研究を進める拠点となる場所,研究室. いかに集中して作業に取り組めるかが鍵となります. しかしここは人が集まる場所,会話は時間的にも空間的にも偏在し,いつスマブラが始まるかわかりません. (個人的にはスマブラが勃発したほうが楽しげで好きですが) そんな時にも,ノイズキャンセリング. 私はSONYのMDR-1000Xを使っています.

MDR-1000X

www.sony.jp

WF-1000Xの登場に合わせて新しいモデルが出ています.

www.sony.jp

特徴

  • 高い(35000円ほど)
  • 音質が良い(自分が持っている中では最高)(高いからそれはそうという感じ)
  • ノイキャンをONにして音楽を流せば近くでスマブラしていても全く聞こえないレベル
  • ワイヤレスなので取り回しが楽

感想

この記事の中でもお勧めNo.1です. ノイズキャンセリングはとても優秀で,音楽や環境音などを流していれば周りの会話が気にならなくなります. 右側の耳にあたる部分にタッチセンサが入っており,ジェスチャで音量や音楽のスキップや戻る操作ができます(便利でもありちょっと不便でもある) 使い続けても疲れは感じません.

同じような商品にBOSEのQuietComfort35があるのですがデザインが好きなのでこちらを選びました. QuietComfortは使ったことがないので比較はできません.ごめんなさい.

www.bose.co.jp

Macbook Pro

みんな大好きMacbookProです. Macはラボ内でのデファクトスタンダードと言っても過言ではない. まあこれについては言うことは何もないのですが,Macを使うメリットは次の点だと思っています.

  • 画面が綺麗
  • フォントが綺麗
  • shellが使える
  • Adobe系のソフトが使える

最近Macbook系の値段がどんどん上がっており,TouchBarと言うよく分からないものがついてしまったり,ちょっと行く先が不安でもありますが…

まとめ

研究お役立ちガジェットのレビューはいかがだったでしょうか. 書いてみるとただのSONY製品とApple製品推しの記事でしたね.

将来技術者というか生産者になる以上,今最先端の製品やサービスがどうなっているかを知るのもとても重要だと思っています. と考えると,このような最新ガジェットを買うのもただの消費ではなく投資とみることができるかもしれません.

以上です.最後までお読みいただきありがとうございました.

すべった話

最近IT業界のブラックな噂,聞きますよね. 私も去年ちょまどさんをフォローしたあたりからIT業界って大変なんだなぁと感じた記憶があります. ところでそういうツイートってこんな風な書き方してますよね?

SIer出身の人と…

SIerに挨拶しにいったら…

SIerからWeb系に転職したのだが…

こういうツイートをみて私は思いました.

「スラーってどんなひどい会社なのかと」

Twitterのフォントって大文字のI(アイ)にセリフがないので小文字のl(エル)と見分けがつかないんですよね. 以上.謎の大企業Sler(スラー)に対して反感を持った私でした.

はい,これで「趣味の話か研究の話かプログラミングの話かすべらない話」がコンプリートできました. どうでもいいですね.最後までお読みいただきありがとうございました.