マトリョーシカ的日常

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

神経がつながっていくイメージでRailsを学んでいる

 基本的に、わからないことを知るのは楽しい。私はそんな人間だ。数年前は哲学書をななめ読みする日々があって、どの書物も訳のわからなかった。それでもゴリゴリと読み進めていくと、他とリンクしていたり言葉のニュアンスがわかったりするときがある。「なるほどね!」となる。嬉しい。

 プログラミングも似たようなものだ。Rubyのロジックはほぼわかってきたので、Railsをやっている。これも最初はわけがわからなかった。へんな文字列をちょっと打つだけで、わけのわからないファイルがぶぁーっとできる。なにこれ。model? controller? view? データベースってなんだよ、ルートってなんだよ。単語がふわふわ浮いている。書籍通りに手順を踏んでアプリを作るもいまひとつ理解が進まなかった。

 それで、自分のアプリをつくる段階になってやっとつながってきた。言葉のそれぞれが何を包含しているか、順序はどうなっているか、関係性はどうか。やっとつかめてきた。右手をあげたいと思ったら、右手があがるようになった。そんなイメージだ。

 現在作っているアプリが無事にデプロイ!できたら、もうちょっと理解がすすむはずだ。楽しいなあ。

Photo by César Couto on Unsplash

文章だけ書いていこう

 実際のところ、文章とならない日々が続いており、ボキャブラリーは枯渇している。数年前の自分からは想像できないかもしれないが、ここ一年ほどまともに本を読んでいない。言葉に触れる機会がめっきり減ってしまった。それは優先事項とか現実味とか地に足のついた行動を目指したためである。ちょっとは現実的になってきたのだ。

 ここはだれもみてない場所であるから、わたしはわたしだけの言葉を書いていけばいい。あとのことがらはまた次回に回せばいい。そうやって生きていくのだ。

 日々コードを書いている。この間、Rubyでゲームを作ったらけっこう楽しかった。なんだかそれらしいロジックも組めるようになったので、今度はRailsもいっぱい頑張ることにした。Railsは共同開発をほかのだれかと繰り返しながらわっしょいやってる。Gitとかいう生き物を使いこなせるようにしよう。

 プログラミングがなんか人生にしっくりきている。もうちょっと早くやればよかったと思ったけど、小学生の頃からやっていたので時期は問題ではなかった。生きている時間のうち、プログラミングをする時間をもうちょい増やしたい。そうすればたのしく生きれる気がする。

 たのしさ。たのしさはいいなぁ。私の主成分はたのしさでできているなぁ。

Photo by Roman Kraft on Unsplash

31歳になった

 この一年はまったく本を読んでおらず、とんでもなく語彙が少なくなってしまった。それでも文章は書けるわけで、いったいこれを文章たらしめている物体はなんなのか、見当がつかない。31歳になった。

COVID-19

 やばくね? いろいろやばい。でも一個人ではどうすることもできないので、マスク手洗いうがいをがんばるしかない。社会がふにゃふにゃになってきているので、自分もふにゃふにゃにならないといけない。

勉強

 昨年とりくんだ技術士二次試験は筆記試験で落ちてしまった。再チャレンジはまだしない。いまはそれ以上にやりたいことが多すぎる。プログラミングとしてRubyとRailsに取り組んでいる。えいやとやりたい。

つくったもの

 なにかあるだろうか。技術書典はコロナの影響で流れてしまったが原稿は書いた。
FARMTORY JOURNAL vol.3 育てる食べる×テクノロジー 電子版 - farmtory - BOOTH

 あとはカップラーメンタイマーや春を感じるIoT、ハンコ押しロボット(もどき)などをつくった。

仕事

 コロナの影響で弊社もやばい。生き残れるかどうかわからない。自分の身は自分で守るしかない。ちょっと足回りを軽くしてやって、どこへでもいけるようにしないといけない。
 仕事でもIoTをやれるようになった。非常に楽しい。

子供

 二人目もだんだんと大きくなって、家中うるさい。あと十年はこの状態が続くのかな。コロナが落ち着いてたらみんなで旅行に行きたい。

オンラインサロン

 この一年でわたしの周りの環境が変わった。人生逆転サロンというオンラインサロンへ入会し、メンターになった。IoTの情報を発信している。ワクワクIoT講座も開講していて、いろいろがんばっている。あと、そこでRubyも勉強している。みんないいひと。みんなたのしい。

やりたいことリスト

 以前はやりたいことが腐るほどあったが、ただリストアップするだけではなにもできないことに気づいた。現実的な期限を設けないといけない。

 というわけで、31になってもがんばります!

 


Photo by Akhil Lincoln on Unsplash

近況の文章

 久しぶりに文章を書こうとしたら、世間はコロナばかりになっていた。感染者数は日々増えていて、企業にも休業要請がだされたりした。わたしたちも家にひきこもらないといけない。そのような世の中だ。私の勤めているところは、社員の一部を休業させながらなんとか回っている。いや、まわってないけど。

オンライン登壇

 ここ一ヶ月でオンラインイベントに参加するようになった。コロナの影響で、IT関係のイベントがすべてオンラインになったのだ。地方民の私としては、トーキョーが一気に身近なものになった気がする。ただ参加するだけではもったいないので、いくつかはオンライン登壇した。
 
【オンライン開催に変更】ビジュアルプログラミングIoTLT vol2 - connpass


【オンライン】M5Stackユーザーミーティング番外編【LINE Beacon化ハンズオン】 - connpass


 オンライン登壇は手軽で楽しい。会場へ移動することもないので、LTの5分が終わったら、すぐにこどもと遊ぶことが可能だ。これからはオンラインの時代になる。というよりオフラインは制限されていてなかなかできない。IoTの勉強会もオンライン上で開いてしまえばいい。そう思った。

cluseterVRがたのしい

 クラスターは、あのコロナのクラスターではない。バーチャルSNSと呼ばれているサービスだ。利用者は仮想空間でアバターを動かすことができる。VR機器がなくてもPC・スマホで利用することができる。たのしい。

 広島のclusterイベントにも参加した。たのしい。


 farmtory-labの紹介がclusterVRで行われていたので参加した。わっしょいやってる感があって、よかった。

 時代はなんかすごいはやさでかわっているらしい。わたしも変わらなくちゃいけない。生存しよう。
 

Photo by David Marcu on Unsplash

soracomでワクワク☆IoT生活  第2回「疑惑のバイナリ」


バイナリ通信を使ってみる

 人間の指が10本だったので、世界は10進数で溢れている。しかしながらPCの世界は2進数で表現される。彼らはON/OFFしかないのだ。(量子コンピュータは知らないが) だから、2進数を送ってやると都合が良い。

 さっと記事を書こう。前回の記事でUDP通信が使えるようになった。これを利用して、soracomにデータを送ることにした。今回は通信プロトコルだけでなく、通信するものごとも変更し、データ利用量を軽減しよう。バイナリデータを送るのだ。幸いなことにsoracomにはバイナリパーサというサービスが提供されている。バイナリデータを送ると、あちらでJSON形式のデータに変換してくれるのだ。

dev.soracom.io

バイナリパーサの設定

 soracomのコンソール画面上でいろいろ設定する。soracom air のところでバイナリパーサをONにする。肝心のデータフォーマットは、バイナリパーサplaygroundを使うと、いい感じに決まる。
binary-parser-playground.soracom.io

 わたしはこんな風にしてみた。

flag_1:0:bool:7 flag_2:0:bool:6 flag_3:0:bool:5 flag_4:0:bool:4 Num:0:uint:2:1 


データ送信プログラム

 ATコマンドで送ってみよう。各種設定をして、以下のようにプログラムを作成した。

const char * host = "uni.soracom.io";
const int port = 23080;
int send_byte = 1

略

  modem.sendAT(GF("+USOCR=17"));
  delay(1000);
  modem.sendAT(GF("+USOCO="), 1, ",\"", host, "\",", port);
  delay(1000);
  modem.sendAT(GF("+USOST="), 1, ",\"", host, "\",", port, ",", send_byte);
  delay(1000);
  modem.stream.print("00001111");

取得したが…!?

やってみたのだが、なんかうまくいかない。データは送信されているが、期待するデータとは違うのだ。以下の表に示す。

送信データ 期待する受信データ 実際の受信データ
-------- -------- --------
00001111 xxxx No.3 xxoo No.0
11111111 oooo No.3 xxoo No.1
00000000 xxxx No.0 xxoo No.0
01111111 xooo No.3 xxoo No.0
00111111 xxoo No.3 xxoo No.0
00001111 xxxx No.3 xxoo No.0
00001111 xxxx No.3 xxoo No.0


左の4bitでo x のbool値を返し、右の2bitでナンバーを返すようにしていた。のだが、なんか違う。バイナリパーサplaygroundではうまくいくのにね。

もしかして、16進数?

 そこから小一時間悩み続けて、ふっと閃いた。「もしかして、文字列を送っちゃっているのか!?」そう。自分が2進数だと思っていたのは実は文字列の01だったのだ!!文字列の"0"や "1" はアスキーコードで以下のように表現される

"0" 
->  00110000

"1"
->  00110001

 これで先ほどの表の結果がかちりとわかった。あれは左の1bit目が0だったら「b00110000」を、 1だったら「b00110001」を返していた結果だったのだ。そうか!!

変換しよう

 そういうわけで、ATコマンドで送る前に2進数を16進数のアスキーコードに変換して送る必要があることがわかった。コードは以下のようになる。

int bit_state = B000000;
a_s = (int)bit_state;
key = (char)a_s;

modem.stream.print(key);

bit_stateはbitWriteなどを利用して所望のbitにしてしまおう。

 そうしてうまくいった。非常によかった。

おわり

 soracomのネタ、まだまだ尽きない。日々のインプットに、アウトプットの速度が負けそうだがなんとか頑張って記事を残していこう。

Photo by Meckl Antal on Unsplash