マトリョーシカ的日常

ワクワクばらまく明日のブログ。

学生でなくなっても可能性は無限大だし、日々は楽しいよ。

f:id:kyokucho1989:20191225053539j:plain
Photo by John Fowler on Unsplash


広島大学ITエンジニアアドベントカレンダーの25日目の記事です。

 楽しそうなアドベントカレンダーを見つけたので、少し前のことを思い出しながら文章を書こうと思う。私は少しほど前は学生をしていた。授業に出て、単位をとり、サークルに通って適度にバイトをしていた。広島大学のキャンパスは無駄に広くてなんだか自由な雰囲気が出ていた。私はそこで機械工学を学んだ。ITではない。

 なぜ機械を選択したのか、不思議でならない。そもそも願書を出す直前までは、私は電気系を志望していた。それがどういう経緯かは忘れたがメカメカしい学科を選択していたのだ。そういうちょっとした食い違いが今日の私を作っていることもあって、人類の神秘である。

 いろんなことをやってみようとしたし、実際やった。自分ではない何かになりたかった。何者かになりたかった。あの大学の自由な風を浴びていたら、いつか自分もすごいことができるようになるのでは、とちょっとした期待があった。だけれど、結局私は普通の人間であるということがわかった。そうだった。

 みんな大人になってしまって、わたしももれなく大人になってしまって、こうして広島の地に生きている。それでもどこか、現状に抗う自分がいて、いろいろやってしまっている。「まだやれるんじゃないか、まだ間に合うんじゃないか」そういった思惑もある。答えは大きくYESだった。全然OK。

 毎年二つか三つか四つか五つか、十ほどの新しいことに取り組んでいる。楽しげな日々を過ごしている。なかでもM5Stackはすごい。これ一つでなんでもできるのではないか。実際できそうだ。単純なLチカだけで済ませるにはもったいないマイコン。来年はSORACOMのサービスを使って彼の知性を有効に活用したい。

 デバイスだけでなく、もっと人とかかわりを持って生きていきたい。オフラインのイベントに行けたらいいが、地方在住ということもあって、なかなか難しい。まずはオンライン上のコミュニティでふんばっていこう。それこそm5stackのユーザーグループとか、farmtory-labでわっしょいやろう。

 そんなかんじで学生でなくなっても、可能性は無限大だった。やれることはいくらでもあるし、私は一人だけど世界は世界だった。今が一番若いという理論を信じて、これからもよろしくお願いします。


 できることならもう一度サークル棟の前でジャグリングしていたいけどね。

え? 月額45円でIoT!?   できらぁ!

f:id:kyokucho1989:20191224053106p:plain

 みなさんこんにちは。これはSORACOM Advent Calendar 2019 ふたつめ の24日目の記事です。
 よくわからない年末の空白をてきとうに埋めるべく、記事を書くことにしました。

 みんな大好きSORACOMです。数年くらい前からなんとなーくその存在を認識していたのですがどうもぼやけていました。「なんかよくわからないけど便利そう」「アイコンがかっこいい」その程度にしか思ってませんでした。しかし、最近になって会社でSORACOMを使うようになってから、SORACOMのすごさが分かってきました。やばいなにこれ。確実に世界取ろうとしている……!
 個人の人がとっつきやすいデバイスをセットにして攻めてきたらとんでもないことになるな。そう感じました。


 そうしたら、すでにあるじゃないですか。
soracom.jp

 M5Stackセット!


そして
IoT データ通信サービス「SORACOM Air for セルラー」 月額0.4 USD(約45円)から利用可能な低トラヒック用途向け新料金体系を 5月16日より提供開始、日本でもグローバル向け Air SIM が購入可能に - IoT プラットフォーム 株式会社ソラコム


 月額45円でIoT!?


 できらぁ!

続きを読む

【PR】クラスの理解につまづいたらゲームプログラムを作ろう

Photo by Idil Mohamed on Unsplash

1.問題点:クラスが理解できない

 10月くらいからRubyの勉強をはじめている。1日30分~1時間程度しか時間がとれないが、それでも徐々に理解は進んでいる。for文を使わないRuby独特の構文もなれてきた。:をつけたキーワードなんちゃらというのもなんとなくわかった。
でもクラスの理解が進まなかった。
「クラスって何?」
「インスタンスって何?」
「オブジェクト指向って何?」
 クラスやらオブジェクトとかいうのはRubyに限らず、他のプログラミング言語にも登場する。きっと便利なものなのだろう。けれどもなんだか難しい。
 いままでの内容(配列・ハッシュ)はイメージが湧きやすかった。配列の並べ替えや、ハッシュから値のみを抜き取るというのも、一度やれば挙動が理解できた。
 でもオブジェクト!となるとさっぱりである。ウェブで検索しても言葉の説明ばかりでまったくわからない。いったいどうすればいいのか。

2.解決策:コードを書く!楽しく書く!

 答えは簡単。コードを書くことである。クラスを使ったコードを実際に書き、体で挙動を感じるのだ。そしてひととおりできたら、ちょっと修正してみる。「あ、そうか! ここをいじるとこうなるのか」とわかる。

 さらに欲をいえば楽しくコードを書ければいうことはない。楽しいは正義である。「いや、コードは苦しみながら覚えた方が身に付く!」という意見もあるかもしれないが、それで続かなければ意味がない。

何か自分に興味のある分野、親しみやすいジャンルに関係するコードを書ければいい。

3.ドラクエ風アプリをつくろうの概要

3-1:概要

 そこで出てきたのが今回紹介する教材である。「ドラクエ風ゲームプログラムを作ってみよう!」はドラクエっぽいコードを書きながら、クラスの理解を深めることができる教材である。
https://www.techpit.jp/courses/enrolled/696793

 ドラクエっぽいといっても超本格的なRPGをつくるわけではない。この教材では戦闘シーンの本当にコアな部分をつくるだけだ。つまり、「勇者とモンスターが1対1で戦い、どちらかのHPが0になったら終了」というものだ。

 本教材は4章で構成されてる。

  • 0章: 環境構築
  • 1章:勇者クラスの定義
  • 2章:モンスタークラスの定義
  • 3章:攻撃処理の実装
  • 4章:クラスの継承・ファイルの分割・リファクタリング

 実際のところ、3章までやれば動くものはできる。でも、「動いたからもう教材はやらなくていいや!」と投げ出さないでほしい。4章ではリファクタリング、つまりコードをより見やすく改善していく。煩雑としていたコードが徐々にきれいになっていく様はけっこう感動する。すげーとなる。

3-2:誰を対象にしているか

 この教材の対象者は、明確に記載はされていないが、個人的な考えでは次の2点はクリアしている必要があると思う。

  • RubyでHello Worldができている人(環境構築が済んでいる)
  • 配列・ハッシュが理解できている人

 ちなみにRubyの参考書として有名ないわゆる「チェリー本」で考えると5章まで理解できていれば問題ない。(6章の正規表現は使わない)

3-3:環境構築について

 本教材の第0章では環境構築について書かれている。しかし、私はそれに忠実に従う必要はないと思う。ひとまずはrubyをインストールしており、日本語の出力が出来ていれば問題はない。

puts "ハローワールド"

ができればいい。

 この教材をやるだけならxcodeやRailsはインストールしなくてもいい。さらに発展的な内容を学習するには必要だが、それはそのときにやればOK。
とりあえず教材を見ながら最後までコードを書いてみてほしい。

4.学習してみて

4-1. クラスがなんとなくわかった!

 ここからは実際に教材で学習をしてみた感想を書く。
 まず、クラスがなんとなーく理解できたのがよかった。クラスは設計書であり、仕様書であり、金型だった。おおまかな外観やふるまいをあらかじめ設定しておくことで、コードがきれいになる。
配列やハッシュや関数と違うのは堅牢さ。クラスは外からは変更できない場所にデータを収納できるので、途中でおかしな挙動をみせることが少ないらしい。そうか。

あとは、勇者やモンスターのパラメータの設定を通じて、アクセサメソッドのこともわかった。ここは本を何回読んでもしっくりこなかったところなので、わかるようになって嬉しい。HPのように途中から値が変わるものは`aatr_accesor`, 攻撃力、防御力のように変化しないものは`aatr_reader`を使えばいいことがわかった。

4-2. 処理を考えるのが楽しい!

 教材では2章の冒頭から、「まずは自分で処理を考えてみよう」というスタンスになる。1章でやったことと同じことをベースに自分で処理を考える。これが自分には楽しかった。「これでどうだ!」とコードを書いて教材の文章で答え合わせをする。というのを繰り返していた。どうもわかりないときは教材を見た。
そんな感じなので、「うまくできた!」と思っても作者とやり方がちがっていた...ということもあった。そのときは質問コーナーで「〜〜とやっても大丈夫ですか?」と聞いた。問題なかった。

 例えば、「3-3 モンスターの攻撃処理実装」の項目。モンスターの攻撃処理は以下の仕様だった。
>1.HPが半分よりも多ければ通常攻撃
2.HPが半分以下になると変身して攻撃力が1.5倍

自分は`@hp`とは別に`@initial_hp`というインスタンス変数を作ってそれを条件分岐に使った。でも、作者はそれとは別のやり方をとっていた。(詳しくは教材を確認してほしい)

 何はともあれ、処理を考えるのは楽しい。

4-3. リファクタリングが楽しい!

 ついでに言うと、4章からのリファクタリングも楽しい。4章のはじめに勇者クラスとモンスタークラスの親となるキャラクタークラスを作成した。あとはファイルの分割やモジュール化を行い、コードが読みやすくなった。掃除をしたあとのようなすがすがしい気持ちになる。
 PCの前にいないときは、スケッチブックにコードの流れやそれぞれの関数の役割を書いた。そして、「どこをどう直せば読みやすくなるか」「共通化できるところは何か」を考えた。こういうのも楽しい。教材では早い段階でファイル分割をしてしまうが、自分としては先に全体の関数を整理してからのほうがやりやすかった。
 

4-4. 紙の教材では味わえないリアルタイム感

 最後に書きたいのが、紙の教材では味わえないリアルタイム感である。普通の参考書を見ながらの勉強はわからないところがあっても、著者はどこか遠くにいる感じがある。でも今回のようなウェブ上の教材は違う。質問しても翌日には回答がかえってくるし、内容もすぐに修正される。

この動画を思い出した。堀江さんとマコなり社長という人が対談をしている。マコなり社長はプログラミングのカリキュラムをオンラインで作成していて、フィードバックを受けながら修正しているのだという。「教科書はアップデートされるべき」といった一言には堀江さんもメモってた。


【堀江貴文×マコなり社長】プログラミングは超絶簡単

5 まとめ

 ドラクエ教材のおかげで、非常に楽しくクラスの理解を深めることができた。来年はRailsをどんどんやっていくぞ!


www.techpit.jp

定点観測とm5stack

Photo by NOAA on Unsplash

 これはfarmtory-labのアドベントカレンダー16日目の記事だ。いろいろ書いていく。

 m5stackという単語に初めて出会ったのは、カワヅさんの音声配信だった気がする。どこか遠い国のことばような雰囲気があって、そこまで関心はなかった。それでも去年の年末の記事ではm5stackに言及しているので、自分としても何かしら思うところはあったのだろう。それから年が明けて、わたしはm5stackを購入した。いろいろ初期設定で躓いたがなんとかなった。デバイスのパッケージに入っていた説明書はあまりあてにならなかった。
matoyomi.hatenablog.com

 彼がやっと動き出したのだが、小さなhelloworldを表示しているだけで、それ以上でも以下でもなかった。私は公式のドキュメントや技術ブログを斜め読みして、彼の挙動を感じることにした。文字の大きさや文字の色は比較的簡単に操ることができた。しかし、それくらいで技術士の試験対策のためにそのような遊びはお休みすることにした。それが四月の中旬。

 七月の中旬に筆記試験が終わり、私はヘルニアになっていた。リハビリに通いながらm5stackをいじることにした。直近の予定では技術書典7があったが、大きなことはできなかった。モーター駆動の方法はわかったが、うまいこと機構物をつくることができず、ハンコ押しロボットはお蔵入りになってしまった。

matoyomi.hatenablog.com
matoyomi.hatenablog.com

 それから会社でいろいろあって、職場でm5stackを使えるようになった。すごいことだった。今まで遊びは遊びで、仕事は仕事だったが、仕事が遊びになってしまったのだ。私は平日は遊んで、休日も遊んでいる。m5stackはIoTプロタイプの素材に適していた。ディスプレイがついているしボタンもある。wifiやbluetoothが中に入っている。これらを使えば工場の稼働状況を可視化することだってできそうだった。実際そういう雰囲気になってきた。

 あらゆる物事が良い方向に進みつつある。あとは自分がどれだけできるか。細切れの時間をなんとかしてつなぎ合わせ、素敵な人生を過ごしたい。

 

くっそくだらないM5Stack工作/カップラーメンタイマー

 おはようございます。この記事は M5Stack Advent Calendar 2019 二日目の記事です。
M5Stack Advent Calendar 2019 - Qiita

 全体的にM5Stackな一年だった。去年は彼をただの箱っぽいものとしか認識していなかったが、いまは「IoTっぽいことができる箱」くらいの認識を持つようになった。素晴らしいプロダクトだと思うが、私の技術が追いつかない。「それでもなにか作れるはずだ!」 そういうわけで作った。

 ボタンを押すとカウントダウンが開始して、0になるとLINEに通知が行く。これでカップラーメンができたかどうか遠隔地にいても分かる。すごい!

 技術的なあれこれはいろんなところからもらっている。まずはタイマーの部分はArduinoのサンプルコード「RepeatTimer」から。Arduinoのタイマー割込みはMsTimer2というすっばらしいライブラリがあるのだが、M5Stackではつかえなかったのでこちらを使う。
 RepeatTimerの解説ページ↓
RepeatTimer

 M5Stack から LINEへはIFTTTというサービスをつかっていいかんじにあれしている。
IFTTTで簡単IoT!M5StackとLINEを連携する方法 | マトリョーシカ的IoTブログ

ESP32 Wifi経由でIFTTTへ接続しLINEへ通知 – thousandiy
ESP32からIFTTTを使ってLINE Notifyで通知を送ってみた - Qiita

これから

 短いけどこれで終わり!来年はもっといいかんじにIoTをやっていく!
技術書典にもなんか書きたいし、SORACOMも使ってみたい。楽しい未来にしたい。