M5Stackを買ってから顔表示するまで

やりたいこと

M5Stackが届いたのでまずは適当なサンプルプログラムを動かしてみたい。

2,3時間で顔表示までできた。

 

必要なもの

- M5STACK-GRAY M5Stack Gray(9軸IMU搭載)

 

5,260円。

9軸IMUはいらんかったかもしれんけど+800円くらいだったのでこっち購入。

 

開発環境整え

なにも設定せずに届いたM5StackをPCに繋いだら起動したので、ラズパイのようにSDカードにOSを書き込んだりは必要ないらしい。

なのでまず開発環境から整えることにする。

下記を参考にm5cloudの設定をする。

M5Stack −LCDとWi-Fi付きの小型マイコン− と開発環境M5Cloudをためしてみる #m5stack | Developers.IO

 

PCにインストールしたもの

- SiLabs CP2104 Driver (USBドライバー。M5Stack内部にCP2104 UART-USBブリッジがあるのでそれ用のドライバ)

- esptool (M5Stackのプログラムを削除したり書いたりするツール。M5StackのマイコンがESP32なのでそれ用の書き込みツール)

M5Cloud/firmwares at master · m5stack/M5Cloud · GitHub ( wifi設定のためのFW。とりあえず最新のm5cloud-20180516-v0.4.0.binを使う )

 

あとは手順通りesptoolでbinを書き込んで、M5Stackにwifi設定を行ってコード取得→m5cloudに登録すればクラウドから開発可能。FWアップデートもwifi経由で行けるので便利。すごい。

 

問題

動かしてみたい顔表示プログラムGitHub - meganetaaan/m5stack-avatar: An M5Stack library for rendering avatar facesc++で記述されているが、m5cloudの対応言語がPython or Luaしかない。

f:id:tango64:20180801105210p:plain

開発環境を変える必要がありそう。

 

開発環境をArduinoに変える

下記をインストール

- EPS32 Arduino Core 

- Arduino IDE側でライブラリのインクルード

M5Stack Documentation

Aruduino IDEはもとからPCに入ってた。

 

次に、顔表示プログラムのLibraryも取り込んであげる

GitHub - meganetaaan/m5stack-avatar: An M5Stack library for rendering avatar faces

 

あとはexampleのface-and-colorとかをコピペして、マイコンボードに書き込んでやる

 

結果

できた

f:id:tango64:20180801112429p:plain

ポチポチボタンを押すと顔が変わる。

 

PlatformIOって何?

M5Stack-AvastarのREADME.mdを見ると、AruduinoIDEとPlatformIOで確認済みとの記述がある。Platform IOってなんだ。

 

Different microcontrollers normally have different developing tools . For instance Arduino rely on Arduino IDE. Few more advanced users set up different graphical interfaces like Eclipse for better project management. Sometimes it may be hard to keep up with different microcontrollers and tools. You probably thought that single unified development tool could be great. Well this is what PlatformIO open source ecosystem is for. 

What is PlatformIO? — PlatformIO 3.6.0a11 documentation

 

なんかマイコンが違っても使える開発ツールらしい。最近だとAtomでも使えるって書いてた。

次はこれを試してみよう。

 

参考

開発環境の整え

M5Stack −LCDとWi-Fi付きの小型マイコン− と開発環境M5Cloudをためしてみる #m5stack | Developers.IO

内部構造の理解

M5stack ( ESP32 搭載 ) を分解したり電源を入れてみて、いろいろ思ったこと | mgo-tec電子工作

後で見る

PlatformIO is an open source ecosystem for IoT development — PlatformIO 3.6.0a11 documentation

ESP32 - Wikipedia

raspberry pi3でスクレイピング

■やりたいこと

macselenium + chromedriverでスクレピングのプログラムを作ったので、それをraspiで動かしたかった。

 

■必要なもの

- raspberry pi3

 

■raspberry pi3の初期設定

- diskutilを使ってmicroSDカードのFATフォーマット

- ddコマンドでimgファイルの書き込み

Raspberry Pi 3にRaspbianをインストール(Mac OS X を使用)

 

今回入れたのは「2018-06-27-raspbian-stretch.zip」これ

Raspbian GNU/Linux 9.4 (stretch)

 

FATって何?

→File Allocation Tableの略。SDカードとかUSBメモリで使われるファイルシステムのこと。FAT16, FAT32, exFAT, NTFS(NT File System)などがある。FAT32だと最大4GB, NTFSは2TBしか入らないとかの成約がある。ただNTFSWindows専用らしいので今回はNG。

FATとNTFSの違い

 

seleniumのインストール

python3は最初から入っていたのでほとんどインストールせずに動いた。seleniumはpip3で入れた

- sudo pip3 install selenium 

 

■Raspbian用のchromedriverがない件

どうも公式で配布しているchromedriverにはlinuxmacwindows版しかないらしい。

Downloads - ChromeDriver - WebDriver for Chrome

これを入れて動かそうとすると

  driver = webdriver.Chrome(executable_path="./chromedriver")

 File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__

   self.service.start()

 File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/common/service.py", line 76, in start

   stdin=PIPE)

 File "/usr/lib/python3.5/subprocess.py", line 676, in __init__

   restore_signals, start_new_session)

 File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child

   raise child_exception_type(errno_num, err_msg)

OSError: [Errno 8] Exec format error

こんなエラーが出る。 

 

この場合ubuntuで公開しているchromedriverを持ってくればOK

launchpad.net

これ

を使う。するとうまくいった。

 

 

■数分おきに動かすようにする

crontab -e

*/9 * * * * /usr/bin/python3 /home/pi/Desktop/test.py

みたいな感じで登録しとく。

すると9分おきにpython3 test.pyされるはず。

だけどなんか動いていないっぽい。

決まった時間に処理する | Make.

を参考にvar/log/cron.logを吐き出させてみる。

なんかNo MTA installed, dicarding outputって言われてる。

→エラーのメール送れないよって意味であってエラーの原因ではない。

じゃあなんでちゃんと実行できていなかったかというと、test.py内で相対パスで記述されていた部分があったり、seleniumを使っているからだった。

なのでcrontabへの記述を

*/9 * * * * cd/home/pi/Desktop; export DISPLAY=:0 &&  bash -lc 'python3 test.py'

の形に変更するとうまく行った。

 

■参考

https://www.reddit.com/r/selenium/comments/7341wt/success_how_to_run_selenium_chrome_webdriver_on/

『勝ち続ける意志力』の読書ログ

 

勝ち続ける意志力 (小学館101新書)

勝ち続ける意志力 (小学館101新書)

 

 

なぜ読もうと思ったか

以前話題になってたから

ブックオフでセールになっていて安かったから

 

 

成長が止まる条件

・プラスとマイナス、その両方を分析することが重要。一つの勝ち方に拘ると成長できない。自分なりのスタイルを確立してはいけない

・セオリーに依存しては行けない。セオリーは強力な力をもっているが、依存してしまうとそれ以上の域には達せられない。それ以上を行くには一から自分で積み上げていく必要がある。

・戦術に特許はないので一つ戦術を開発したら、すぐに捨てて新しい戦術を開発ししなくてはならない

 

成長のためのヒント

・気になったポイントをなあなあにしておくと後で痛い目に会うことが多い。そのため、気になったポイントはなぜ気になったのかを研究し、後々のために備えることが大切。こういうのは残さずメモしておく

・変化する際のコツは「そうすることによって良くなるかどうかまで考えない」変化すること自体に自身の成長に寄与する部分が多いため、それに寄る結果は度外視したほうがいい。

・他の目をきにせず、思考する時間が集中力を高める

・「楽しみたい」「勝ちたい」という指針よりも「自身の成長に繋げる」という指針で物事を捉えると吉。負けても問題なし。自分の世界に閉じこもろう

・仮説と実証を繰り返す

 

 

『人工知能はどのようにして 「名人」を超えたのか?』の読書メモ

タイトル長いので省略

 

 

なにを知りたかったか

 

知能とか知性って?

コンピュータによる大量の計算結果に意思や感情を感じるのはなんだか不思議なものですが、これは私だけの感覚ではありません。のちのことですが、ポナンザやほかのコンピュータ将棋と戦ったプロ棋士たちも、「ここはコンピュータが焦ったのでしょう」というような、まるでコンピュータに意思や感性があるかのような発言をするようになるのです

 意識はあるように思える。

ここからは完全に私の想像ですが、さらに議論を進めると、もしかしたら「知能とは画像である」と言うことすらできるかもしれません

マルチモーダルで画像にて何かを判断できるようになれば、知能が宿ると言えるかも。

この局面でポナンザに検討させてみると、なんとわずか1秒で後手の王様が詰むことを発見できました。以前は3分かかっていたので、その効率は100倍以上です。 つまり、「将棋で勝つ」という、ある意味漠然とした目的よりも、より限定された適切な目的(Plan)を強制的に与えたことで、探索(Do)と評価(Check)がより効率的に運用されたのです。目的を設計するという力のすばらしさをわかってもらえたでしょうか

人間はPDCA(adjust)を回せるが、マシンはD,Cのみ。このマシンには知性があるとは言いにくい。

また現在、十分に学習したディープラーニングは、学習の効果が「転移」することが認められています。 学習の効果が「転移」するとは、ある程度将棋を勉強した人はチェスも強くなる、というようなものです(実際にはそううまくはいかないので、ちょっと乱暴なたとえですが)。何かの分野で獲得した知見を他の分野にも活かす、ということですね

あるジャンルのノウハウを、別 ジャンルに応用させてより良いPを導きだせるのであれば、知性といえるかもしれない。また、これは「何かを極めた人間は他の事柄に挑戦したときにも活躍できる」説と通底するものがある。

 

ponanzaで使われているアルゴリズムは?

・探索と評価→評価数は数千点

機械学習→後に強化学習。教師なし学習になった。ただし教師なし学習は雑巾絞り。

・複数コアCPU→「怠惰な並列化」((何か仕事のやり方で活かせそうで並列処理

 

 

AlphaGOで使われているアルゴリズムは?

ディープラーニングで「打ち手予測器」を作成し、その予測器同士の対戦結果からディープラーニングで「勝敗予測器」を作成した。

モンテカルロ法による勝敗予測

上記①+②を組み合わせてアンサンブル効果をうみだした。

 

将棋と他のボードゲームの違いは?

↑パターン少

|チェス…機動力が高い→コマをどれだけ盤面に残しているかが勝敗に直結

|将棋…コマが良い位置にあるか否かが勝敗に直結

囲碁…盤面の「評価」をどう捉えるかが難しい。画像として盤面を解釈できる。

↓パターン多

 

 

・評価の基準をどうするか

プロの対局した将棋の手順の記録を棋譜といいます。残念ながら、プロ棋士がその局面をよいと思っていたか、悪いと思っていたかの情報はありません。そういった情報があれば、現在の局面をプロ棋士がどれくらいよいと思っていたかの情報をもとに学習できるのですが……。

映画を見ている時の人間の感情を映画脚本化にフィードバックできたらいいのにって思った。それを基準に面白い映画を人間が作れるようになる。

 

・還元主義⇔黒魔術

ディープラーニングは還元主義として分析できないため、科学ではない。

以前の機械学習の現場では、数理的な数式を使った説明がたくさんありました。しかし最近の機械学習の文脈では、数式ではなく、「ディープラーニングの気持ち」について語る人が増えたと思います。 複雑過ぎて数理が見えないものに対して、人間は「気持ち」で推し量るしかないのでしょうね。私も将棋プログラムについて考えるときには、数理よりも「ポナンザの気持ちについて」推し量ることが多くなっています。 別分野の科学者にそうした状況を解説したところ、「人工知能は科学ではない」と言われたことがあります。私はその言葉に非常に納得しました。もちろん、その人は人工知能のことを批判する意味で言ったわけではありません。要素を切り分けて個別に理解していくという、還元主義的な科学の思想とは相容れないことを指摘したのです

 ・最初から教師なし学習はキツイ

しかし忘れてはいけないのは、将棋で強化学習が可能になったのは、すでに強化学習前のプログラムがある程度強かったからだ、ということです。つまり、プロ棋士棋譜で事前に教師あり学習をして十分強くなっていたことが強化学習が成功した大きな理由の1つだったのです。まったく知識がない状態からの強化学習も可能かもしれませんが、その場合はある程度強くなるのに途方もない時間がかかるでしょう。プロ棋士棋譜をもとにすることが、「強化学習」を現実的なレベルで可能にしたのです。 人工知能の開発においては、必ず大量のデータが必要になるのです。そのうえで、最初は「教師あり学習」。そしてその後は「強化学習」に移るはずです。この流れは今後人工知能が普及するなか、さまざまな場面で出てくると思います。ぜひ覚えておいてください

守破離A.I.にも存在する。 

 

ディープラーニング職人

チャネルは192個がいちばんいいのか、レイヤーは13層が最適なのか、それも最初はわからない。ディープマインド社ではチャネルを128、192、256……といくつか試してみていちばんよかったのを採用する、とかそういうことをしているようです。ディープラーニング職人は、そういうのを毎日地道に調整してるんですよ(笑)。ほかに、論文には書いていないこともいろいろ試しているはずです

21世紀にはそういう職人が居るらしい。

 ・漫画的な展開

現在世界トップの柯潔という中国の天才棋士がいるんですけど、彼は第1局でイ・セドルが負けたときは、「アルファ碁はイ・セドルに勝てても私には勝てない」とか言ってたんですよ。 山本 あ、その人知ってる。すごい強気発言だったよね。第2局が終わったときも「イ・セドルは人類を代表して戦う資格がない」とか言ってた。 大橋 まあ、本当にめちゃくちゃ強い棋士なんだけどね。それが、第3局が終わったら「自分の勝利の可能性は5%に落ちた」とか言い始めた(笑)

 ・初めはプロの打ち筋予測から始まった

加藤 DQNを使ったプログラムは、スペースインベーダーブロック崩しの画像とコントローラを与えたら、勝手に学んで、人間のプロに勝つまで強くなった、と記事で読んだことがあります。その会社をグーグルが買収して、アルファ碁を作ったんですよね

山本 そう、その方法でアルファ碁はプロの手を膨大な棋譜から学んだんですよ。そうしてある局面を与えたら、次にプロが打つ手を57%くらいの確率で予測できるようになった

 ここを作ることを目的に何かをスタートさせることは敷居が低くて楽しそう。最初から囲碁A.I.を作るのは疲れそう。

 

 

『ゼロからトースターを作ってみた結果』

 

ゼロからトースターを作ってみた結果 (新潮文庫)

ゼロからトースターを作ってみた結果 (新潮文庫)

 

 

なぜ読もうと思ったか

  • ゼロから物を作る際にどのようなプロセスを踏むのか知りたかったため
  • 何が彼をそんな気持ちに駆り立てるのか知りたかったため
  • トースターを構成する要素・機構を知りたかったため

どんな内容だったか

トースターを分解し、5つの主素材(鉄・銅・ニッケル・マイカ・プラスチック)で作られていることを突き止める。自身が作成するトースターを要求分析する。それぞれの原料入手・加工をし、組み立てる。稼働する。テスト、リファクタは行わない。

何を学んだか

  • ゼロから物を作る際にどのようなプロセスを踏むのか知りたかったため

1.既製品を分解、部品として何が必要か判断する。

2.有識者(大学教授)に相談し、大筋の流れを決定する

3.企業に掛け合って、原料を入手する

  驚くことに、鉱業所(鉄鋼石)、BP社(石油)、ナショナル・ノン・クロップス・センター(プラスチック)、アクソン・リサイクリング(プラスチック)、アングルシー・マイニング(銅)、鉱山の近くにいたおっさん(マイカ)など、多くの人に協力を申し出ている。なおニッケルの入手はカナダの記念硬貨を元にしていたのでルール違反。

4.加工をする

  加工手段は鍛造、鋳造など。切削加工は殆ど行っていない?加工の道具として、ハンマー、自作の溶鉱炉、自作の鋳型、伸線機、電子レンジなど登場する。なお電子レンジは産業革命前に存在しない道具のためルール違反。

5.組み立てをする

 

  • 何が彼をそんな気持ちに駆り立てるのか知りたかったため

1.卒業制作用

2.トースターを1個作成するのに環境への負荷がどの程度あるのか知りたかったため

3.異世界に飛ばされた時用に自分一人で作れると格好良いため

 

なぜトースターなのか?

1.トースターが「あると便利だが無くても平気」で「簡単に捨てられてしまうもの」という、近代の消費文化の象徴であったため

2.『銀河ヒッチハイクガイド』の一説「自分の力でトースターを作ることはできなかった。せいぜいサンドイッチぐらいしか彼には作ることができなかったのだ」でトースターが触れられていたため

 

  • トースターを構成する要素・機構を知りたかったため

鉄・銅・ニッケル・マイカ・プラスチック。部品数404個。機構に関する記述はなし。(ニッケルが加熱され、マイカが断熱などの記述はあり。)

 

  • マイカ探索の旅がマインクラフトでの地表に出てる鉄鉱石の探索みたいで面白い
  •  全体的にDASH村のノリを彷彿とさせる
  • 鉄鉱石を熱処理する際にコークスを熱源に使用すると硫黄や亜リン酸が混じり、銑鉄が生まれる。素人が鉄鉱石から鉄を抽出には木材を熱源にするのが吉。なお加工時に一酸化炭素を使用しないと鉄が酸化してしまうため更に注意が必要
  • おおよその標準電圧(単相)→日本100/200V、NA120/**V、EU230V

『ねじの人々』について

 1〜3巻を読んだので思ったことを記録する。

 

なぜ読もうと思ったか 

友人が面白いと言っていたから。

 

考えたこと

スマホの利便性

スマホがあるおかげで繋がりが必然的に生まれる。ラインで気軽に会話を飛ばせるようになった反面、送られた側はそれに対して何らかの繋がりが生まれてしまう。返信すれば当然コミュニケーションが発生するし、返信しなくても「既読無視(未読無視)をした」という意志表示をすることになる。スマホを持って、ラインIDを交換する以上、孤独に時間を過ごすことができなくなってしまう。コミュニケーションの敷居が下がった反面、一人で誰にも邪魔されずに過ごすことが難しくなった。

f:id:tango64:20180101220630j:plain

 

持ちネタ

オチにキャラクターの持ちネタを持ってくると綺麗に収まる。

f:id:tango64:20180102002146j:plain

(初出)

f:id:tango64:20180102002329j:plain

(持ちネタ化)

f:id:tango64:20180102002157j:plain

オチ

 

ピラミッド頂点の孤独

19話、20話の話の作りが綺麗だと思ったのでなぜ綺麗だと思ったのか考えた。

●初めと終わりは

はじめ:根地君主人公をやめたい

おわり:主人公をやめたいと思う気持ちが消える

行って返ってくるという構造になっている。

 

●役割と構造は

最初:主人公=山の頂

中盤:山の頂=孤独

f:id:tango64:20180101232428j:plainf:id:tango64:20180101233945j:plain

 

●動機は

主人公やめる動機:根地君のやりたいことと噛み合っていない。根地君は自分が何者か知りたいだけ。向いていない。

 

●流れは

主人公をやめたい→主人公の存在とは→働く存在→なぜ働く→お金のため(主人公の仮説)⇔孤独のため(外的要因からの真実)→孤独を埋めるには?→友達が必要→友達はいるか?→いた→主人公をやってもよい

 

●何が良い

「孤独を埋めるには?」の部分の深掘りで第一話で抱いた疑問をつながっているのが原点回帰的で良い

f:id:tango64:20180102000059j:plain

 

一話目

f:id:tango64:20180102000642j:plain

 

この漫画で言いたかったことは何か

正しい方向になぜ?を問うと見えなかった万子ちゃんが見えるようになる。考え続けると見える景色が変わって見える。

 

f:id:tango64:20180102012241j:plain

 

読書記録どこに残すか問題

来年からちゃんと読書記録残したい

結論

ひとまずここに残す。まとめ方はあとから考える

 
どうやってのこすか
  • ノート(手書き)
  • エクセル
  • ワード
  • エバーノート
  • ブログ
  • iPhoneメモ
  • kinbleメモ
  • ツイート
  • アプリ管理

 

評価基準
  • 気軽に残せる(重い腰を上げなくて良い)
  • どこでも残せる(スマホからも可能)
  • 画像を貼れる(手書きのメモも残せると尚良い)
  • 楽しく残せる(テンションが上がると良い)
  • フォーマットがある(フリーフォーマットは嫌)
  • 振り返りやすい(書いたら書きっぱなしにならない)
  • 検索できる
  • 汎用性(他に移行したくなったときにすぐデータ移せるかとか)
  • 加筆しやすいか(一度作ったらもうもう変更できないとかだとキツイ)
  • 他の+αがある(印刷して冊子にできるなど)

 

以前はどうやってたか
  • ニコニコ動画のメモを残すときはマイリストのメモ機能を使ってた

  →長続きした、有効活用できた

  →長続きしなかった、有効活用できなかった

  • エバーノートでのメモ

  →たまに見返すけど、やっぱりほとんど見直さない。記録が長くなると重くて加筆できなくなるのが辛い。何かをまとめる際には良いと思うけどログとして定期的に加筆するのはあまり良くない気がしている

 

調査

他の人はどんな感じで管理しているか

読書記録アプリ

app-liv.jp

インストールして使用感の調査をした。

 

■ビブリア

 読書冊数や行数保存

 メモ機能(文字のみ)

 

■Readee

 読書冊数や行数保存

 メモ機能(文字のみ)

 

読書メーター

 メモ機能(ツイート形式:画像も可?)

 SNS機能

 本以外も読書登録できる

 f:id:tango64:20171230152117p:plain

 遊戯王カードも積読登録可能

 

議論

ツイートみたいに文字数縛りがあったらあったら楽しく残せる。

画像は確実に貼れるようにしたい。手書きノートメモの線が消えるが、手書きでの図の保存も使いたい。どうするか。

エクセルやワードでフォーマットを作ってそこに記録してって、一年立ったらそれを冊子として印刷 みたいなやり方も悪くない。年末に記録を楽しく振り替えれることを考えると、記録を付けるのも楽しくなる。振り返りのしやすさに重きを置きたい。

何度も読み返すこと前提に関しては加筆できるようにしたい。

何を持って読書完了とするか。その本から得たい情報を取得したらひとまず完了としたい。アプリのようにページ数や文字数記録をしだすと「読書完了=全ての文字に目を通す」になってしまうので嫌だ。技術書は読み飛ばすことが多いため。

アプリはinbookやブクペのようにサービス終了がまま起こるので怖い。

漫画も同人誌も記録したい。

テンプレートを作って、それにそって記録したい。下図のようなイメージ。

f:id:tango64:20171230154345j:plain

『 アイディア大全』

 

f:id:tango64:20171230154738j:plain

 

先端技術とメディア表現1 #FTMA15