Kubernetes上で動くマイクロサービスとして「毎時新聞」を作り直した

これは何?

f:id:inajob:20181020191454p:plain

インターネットの世界が常に気になるけれども、ずっと見ているわけにはいけません。例えば私は仕事をしているときはTwitterをずっと眺めているわけには行きません。

 

そんな人に向けたサービスが「毎時新聞」です。
Twitterで盛り上がっている画像や、トレンドワードを1時間ごとに集約します。
寝る前に今日のページを見ると 大まかなインターネットの盛り上がり方を知ることができます。

 

実はこれ、以前も作ったことがあります。

inajob.hatenablog.jp

数年運用したのですが、最近Closeさせてしまいました。で、今回また作りました。

デモ

こちらからアクセスすることができます。

page.inajob.tk

 

こんな感じで、1時間ごとにTwitterで流行った画像を閲覧できるサービスです。

ちょうど10/20の8時で、シンカリオンの画像がはやっている様子がわかります。

f:id:inajob:20181020191234p:plain

 

 もうひとつ10/21 9時、皆さんご存知ニチアサタイムが観測できます。

f:id:inajob:20181021094824p:plain

仕組み

今回はKubernetesクラスタ上で動かすマイクロサービス群として実装してみました。

Kubernetesクラスタは以前紹介した方法で作成したものです。

inajob.hatenablog.jp

トレンド取得部分(trend-checker)

肝となるトレンド取得は、TwitterのStreaming APIを利用しています。

GET statuses/sample — Twitter Developers

一般利用なので、すべてのTwitのストリームを取得できませんが、そこそこたくさんのデータが流れてくるので、ここに流れてくる画像を含むTwitの数を数え続けるアプリケーションをGo言語で書きました。

このアプリケーションはメモリ内にランキングを保持しており、外からHTTPでアクセスすることで、このランキングを取得することができるようになっています。

ランキング取得とスコアリングのバッチ処理

上記トレンド取得のAPIを1時間ごとに呼び出して、その結果をファイルとして保存する仕組みです。これにはKubernetesのCronJobの仕組みを利用しています。

さらに、いかがわしい画像などを判定するためのスコアリングを計算するために後述のNFSW APIを呼び出して、ランキングデータにスコアデータを付け足します。

NSFW API

毎時新聞を作った時に気づいたのは「エロ画像が多い」ということでした。

まぁそれも毎時新聞の醍醐味なのかもしれませんが、せっかくなら分類してみたい、、ということで調べているとYahooが公開しているOpen NSFWというモデルがあることを知りました。

 

github.com

これは最近はやりの機械学習の仕組みで、エロ画像など職場で見るにはふさわしくない(NSFW:Not Safe For Work)な度合いを判定してくれるものです。

さらに、このOpen NSFWをWebサーバとして利用できるように改造したものを作ってくれた方がいたのでこれを利用することにしました。

blog.kksg.net

フロントエンド

ここまでで、NSFWのスコアのついた毎時の画像ランキングデータがファイルサーバに格納できました。後は表示するだけです。フロントエンドはJavaScriptを使って、ブラウザ上で画面を組み立てるようにしました。

NSFWのスコアによる表示の有無もブラウザで判定しています。

図解

f:id:inajob:20181020190320p:plain

図にすると結構壮大な感じになりました。

まとめ

以前作ったものと同じ内容のサービスですが、Kubernetesを利用したマイクロサービスとして作ることで新たな学びがたくさんありました。

このように役割ごとにマイクロサービス化することで、改良もしやすく、また別の何かを作るときもここで作ったマイクロサービスを機能として取り込みやすい作りになったと思います。

おまけ

ここまでの説明で、気づいたかもしれませんが、フロントエンドのコードをちょっと変えるだけで「裏モード」を作ることができます。「裏モード」とはつまりNSFWのスコアの高いものだけを表示するようにした毎時新聞です。 いろいろまずい画像が表示されますので、注意してアクセスしてください。

page.inajob.tk

平塚旅行してきました

8月に平塚旅行に行きました。

f:id:inajob:20180909140523p:plain

僕は関東圏に住んでいるので、平塚はそんな遠いところではありませんが、前日夜入りして翌日は平塚観光をし、さらに1泊し翌々日に帰宅という2泊2日の日程での旅行でした。

f:id:inajob:20180909141431p:plain

 

Day0

仕事終わりに平塚に移動。そのままホテルに向かいました。夕食は

”なまらうまいっしょ 平塚駅北口店” で食べました。

www.namara-umaissyo.com

 

f:id:inajob:20180909141243p:plain

Day1

この旅の一番の目的地「平塚美術館」にいきました。

www.city.hiratsuka.kanagawa.jp

 

f:id:inajob:20180909141514p:plain

この金魚実は全部絵です。

f:id:inajob:20180909141549p:plainf:id:inajob:20180909141639p:plain

素人にもわかりやすい 美術というより技術デモを見ている印象の作品でした。

作成年代別に作品が展示されており、徐々に様々な技法が確立していく様子が技術の進歩を見ているような感覚でした。

 

昼ご飯は平塚のソウルフード(らしい)ラオシャン(老郷)ラーメン!

老郷(ラオシャン)|神奈川県平塚市50年伝統のラーメン |

f:id:inajob:20180909141907p:plainf:id:inajob:20180909141937p:plain

酢が入っているというスープと、とても淡白なそうめんのような麺が独特で、おいしかったです。

 

その後図書館を見に行きました。かなり大きな図書館でうろうろしているだけで楽しかったです。

特に事典系が別の階で扱われており、そこの本は普段図書館で見ない(気づかない?)ような本が多く興味深かったです。

f:id:inajob:20180909142159p:plain

それからホテルに戻り、少し休憩(昼寝)

その後、これまた平塚名物(らしい)「都まんじゅう」を食べました。

調べてみるとこの「都まんじゅう」は八王子などでも買えるらしく、同じ製造機械で作ったものはすべて「都まんじゅう」というようです。

都まんじゅう - Wikipedia

f:id:inajob:20180909142451p:plainf:id:inajob:20180909142516p:plain

これがその製造機 2週回って饅頭が出来上がる様子は見ていて飽きません

f:id:inajob:20180909142552p:plain

夕食までもう少し時間があったので、せっかく海まで来たので海岸に向かいました。

f:id:inajob:20180909142904p:plain

夕食は平塚近くの友人を交えて、それらしい雰囲気の喫茶店で食べました。

Day2

2日目はほぼ帰るだけの予定だったのですが、少し元気があったので隣の大磯にあるらしい「めしや大磯港」に向かいました。

「めしや大磯港」では港らしくおいしい魚料理を食べることができました。(当日は時化だったらしく、小田原港で取れた魚のようでしたが・・)

かなり有名な店らしく、開店前の11時ごろから人が並んでいました。

ホーム - 大磯漁協直営! めしや 大磯港

f:id:inajob:20180909143247p:plain f:id:inajob:20180909143306p:plain

で、帰る前に喫茶店で一服し

f:id:inajob:20180909143540p:plain

グリーン席で帰ってきました。Suicaでグリーン席に乗ったのは初めてで、天井にあるSuicaマークにタッチするという初体験をしました。

f:id:inajob:20180909143611p:plain

まとめ

関東圏に住んでいながら、同じく関東圏への旅行というのは案外良いものだなと思いました。

また、旅行中Twitterで平塚にいる旨を発現したところ、followしている友人から平塚の観光スポット情報をもらうことができ、充実した旅行にすることができました。

あと、なんといっても平塚付近の友人と旅先で一緒に食事できたのが良かったです。

最後に旅に誘ってくれた妻に感謝です(言ってみたかった)

 

RaspberryPi Zeroを使って変愚蛮怒専用機を作った

これは?

f:id:inajob:20180902132057g:plain

f:id:inajob:20180902130755p:plain

変愚蛮怒変愚蛮怒 公式WEB )というローグライクRPGがあります。ローグライクRPGとは、いわゆる「シレン」や「トルネコ」の元となったゲームです。 特に昔ながらのローグライクRPGはテキストだけで画面が構成されているという非常に渋いゲームです。

f:id:inajob:20180902123907p:plain

一般的なRPGとは違い、死んでしまうと、そこで冒険は終わり。セーブデータには死亡回数が刻まれ、またレベル1からやり直すというハードなRPGです。 ゲーム内のキャラクタのデータはリセットされますが、プレイヤーはその経験を生かして次のプレイではより高いレベルまで成長できるという「プレイヤー自身が成長する」という感覚が魅力です。(と僕は思っています)

また、操作はキーボードを駆使して行います。装備変更は「e」食事を食べるのは「E」物を投げるのは「f」といった具合です。 そのため、スマートフォンやゲーム機に移植したものとは操作感覚が全然違います。やはりファンとしてはキーボードを使って操作したいところです。

ということで、変愚蛮怒専用機を作ることにしました。

材料

  • RaspberryPi Zero WH
    • WifiBluetoothが使える方のRaspberryPiZeroです。今回はBluetoothキーボードを使いたいのでWHのほうを選びました。

  • Raspberry Pi用の3.5インチ液晶
    • 解像度は480x320、SPI接続により映像信号を送るタイプです。(HDMI接続のモニタも試しましたが、HDMIケーブルの取り回しが難しくSPI接続のモニタにしました。 しかしSPI接続は転送速度が遅いので、アクションゲームなどには不向きです)

  • モバイルバッテリー
    • ダイソーの500円のモバイルバッテリーを用意しました。一般的なモバイルバッテリーは消費電力が少ないと電力供給をやめてしまうものが多いですが、このバッテリーはそのような動作をしませんでした。

【100均検証】ダイソーの500円モバイルバッテリー(3000mAh)を使ってみた結果…!! | ロケットニュース24 (この記事ではひどいこと言われてますが、このサイズ感は魅力です)

  • 3Dプリンタで作った筐体
    • 上記の部品を組み合わせた形がぴったりおさまる筐体を作りました。これはまだ改良の余地がありそうです。

Raspberry Piのセットアップ

RaspberryPiをセットアップして、変愚蛮怒が動作するようにします。

OTGケーブルによるPCとの接続

Raspberry Pi ZeroはOTG接続により、パソコンとネットワークを共有できます。 これによりWiFi接続などの設定をせずにパソコンからSSH接続でRaspberryPiを操作することができます。

この記事の情報を利用しました。 https://qiita.com/Liesegang/items/dcdc669f80d1bf721c21

液晶の設定

https://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A) このページを参考にして、液晶の設定をします。 設定後、液晶をピンヘッダに接続して起動すると液晶画面にRaspberryPiの画面が表示され、タッチパネルも有効になります。

キーボードの設定

Bluetoothキーボードの設定はRaspberryPiのGUIから行いました。(コマンドでもできるはずです。) 一度ペアリングをしておくと、再起動後も引き続き有効のようです。

ここまで操作すると、PCからのSSH経由での操作の他にBluetoothキーボードでの操作もできるようになります。

簡素なGUIに変更

Raspberry Piの標準的なGUIは、便利ですが、変愚蛮怒専用機には不要です。 変愚蛮怒Xorg上で実行するつもりなのでXorgはそのままにして、session-managerとwindow-managerの設定を変更します。

  • /usr/bin/x-window-manager を消す(これは/etc/alternatives/x-window-managerを指していて、さらにopenboxを指しています)
$ sudo rm /usr/bin/x-window-manager
  • /usr/bin/x-session-managerを消す(これは /etc/alternativess/x-session-manager を指していてさらに /usr/bin/startlxde-pi を指しています)
$ sudo rm /usr/bin/x-window-manager

デフォルトのターミナルはlxterminalですが、これをxtermに変更しておきます。

$ sudo apt-get install xterm
$ sudo update-alternatives --config x-terminal-emulator
# /usr/bin/xterm を選択

$ sudo halt

ここで再起動すると、今までのGUIはどこかへ消え、真っ黒なターミナルが起動するようになります。

変愚蛮怒のビルド

変愚蛮怒Linux版はソースコードで提供されています。そのためビルドする必要があります。 必要なライブラリをインストールします。

$ sudo apt-get install libncurses5-dev libx11-dev libxt-dev 

変愚蛮怒をダウンロードして、ビルドを行います。 最新のリリースは https://ja.osdn.net/projects/hengband/releases/ で確認してください。

$ curl https://ja.osdn.net/projects/hengband/downloads/10331/hengband-1.6.2.tar.gz/
$ tar xzf hengband-1.6.2.tar.gz
$ cd hengband-1.6.2
$ ./configure
(略)
$ make
(略)
$ make install
(略)

EUC-JPロケールの追加

raspi-configを実行し、「4 Internationalisation Options」→「I1 Change Locale」を選択し、「ja_JP.EUC-JP EUC-JP」と「ja_JP.UTF-8 UTF-8」をスペースキーで選択します。 これによりEUC-JPロケールが追加されます。

12pxの日本語フォントの追加

320x480のディスプレイで変愚蛮怒を表示するには12pxのフォントが最適です。これをインストールします。

$ sudo apt-get install xfonts-shinonome

起動用のシェルスクリプトの追加

起動のための設定をシェルスクリプトとして作成します。

#!/bin/sh

export LANG="ja_JP.eucJP"
export ANGBAND_X11_FONT='-*-*-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-*-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0'

unset LC_ALL
unset LANGUAGE
unset XTERM_LOCALE

./hengband -- -n

起動して、キーボードでboot.shを実行することで変愚蛮怒で遊ぶことができるようになりました。

3Dプリンタでの筐体の作成

3Dプリンタで筐体を作成します。本当はこういう平べったいものはレーザーカッターのほうが作りやすそうなのですが、、 Fusion360でそれっぽく作ってみました。

f:id:inajob:20180902130109p:plain

まとめ

今回は電子工作を全くせず、ただ買ったものを組み合わせただけでゲーム機を作成しました。 RaspberryPi Zeroは非常に小さいので、こういうものを作るのには適していると感じました。 最近は自作キーボードなども流行っており、さらにそれに液晶を組み合わせて、小型のPCを作るのが流行っているようです。今回はキーボードは既存のbluetoothキーボードを使いましたが、次は自分で超小型のキーボードを作って組み合わせてみたいなと思っています。

ともあれ、これで通勤中も変愚蛮怒が遊べます!

f:id:inajob:20180902130755p:plain

Maker Faire Tokyo 2018でのRakuChordキット販売への道のり

Maker Faire Tokyo 2018に出展しました!

ここ数年と同様に、会社の知人のサークル「コネクト・ミー」に混ぜてもらって参加しました。

connect-me-net.tumblr.com

 

「コネクト・ミー」での僕の役割は、回路回りでのトラブルなどがあった際に知恵を貸すといった、「電子工作のスーパーバイザー」的なものです。

ただし、今回は7月に風邪で体調不良だったため、ほとんどお手伝いできず、、ただただ混ぜてもらっただけとなってしまいました。

今年は、「コネクト・ミー」としても”モノを売りたい!”というところで、コマーシャルMakerとしての出展を行いました。

 

「コネクト・ミー」メインの展示について

メインで販売していたのは、「みみにゃん」

電子工作的に面白いところはそれほどないのですが、耳の造形にこだわっており、そこそこそれっぽいネコミミだったのではと思っています。(会場内で購入してくれた方がつけているのをみて、わざわざ買いに来てくださる方がいるほどでした。)

f:id:inajob:20180806150055p:plain

また、みみと合わせて「ひげにゃん」という、猫の口を模したマスクを展示していました。(こちらは展示のみ)ひげにゃんは裏側に距離センサーが付いており、顔の前にマスクがある状態で、口をパクパクさせる動きを認識し、喋ったり、ひげが動いたりするというハイテク猫マスクです。

f:id:inajob:20180806150317p:plain

コネクト・ミーの展示は、子供連れの親子の方や、若い女性、カップルなど、多くの方にウケていました。

初めての販売だった「みみにゃん」についても、予定通りに売ることができました。

 

さて、ここまでは私が居候(?)させていただいている「コネクト・ミー」メインの展示の話でした。

 

コネクト・ミーの展示スペースの端を少し借りる形で、私も自分の作った電子工作の展示とキットの販売を行っていました。

inajobの独自コーナーについて

今年はコマーシャルMakerで参加ということで、僕は長年開発を続けている自作の電子楽器「RakuChord」を販売することにしました。完成品は難しそうなので、キットの販売です。

f:id:inajob:20180806152045p:plain

 

また、去年に引き続きですが、「組みひも組み器」ESP-WROOM-02ゲーム機」「自作Gamebuino」を展示しました。

さらに新作として「o-bako on ESP32」というESP32を使ったゲーム機も展示しました。

 

f:id:inajob:20180806151716p:plain

 

「組みひも組み器」は、興味を持ってくれる方が多く、たくさんの方が人が足を止めて説明を聞いてくれました。

またRakuChordを目当てに来てくれる方もいて、大変感激しました。

inajob.hatenablog.jp

inajob.hatenablog.jp

 

毎年自己紹介をすると「Twitterのこのアイコンの人ですね!」といわれることが多いので、今年は自分Tシャツを着て参加しました。

f:id:inajob:20180806151338p:plain

おかげで、ほかの方のブースに行った時にも一目で「おっあのひとだ!」と認識してもらえることが何度かありました。Twitterで活動してる方にはオススメです。

RakuChordのキットについて

RakuChordのキットについては、このイベントに向けてというわけではなく、ライフワーク的にコツコツと進めてきました。

このページを作ったのが今年の2月です。また同時にソースコードも公開しました。(GitHub - inajob/rakuchord

inajob.github.io

 

そして、興味のありそうな知人にRakuChordの貸し出しなどを行い、人に使ってもらう際のノウハウを集めました。

 

そうこうしていると今回のMaker Faire Tokyo 2018にコマーシャルMakerとして出ようというという話が出てきて、これは良い機会! ということでキットの準備を始めました。

組み立て説明書の作成

実はこれはMaker Faire Tokyo 2018参加が決まる前から作業していました。仮にこのイベントがなくともどこかでキットを配りたいなと思っていたからです。

inajob.github.io

1台を自分で組み立てる様子を写真で撮り、それに説明のテロップを追加して説明書を作成しました。

f:id:inajob:20180806144658p:plain

 

また部品の一覧表も作成しました。

手順は簡単なのですが、ステップにばらすと意外と枚数が多く、苦労しました。

販売個数の決定

今回は、お試しということで家に余っているRakuChordの基板(中国に発注する時は10枚で注文するので、大抵余る)を売ろう ということで、販売個数は8個に決定しました。

部品調達

基板は余っているものだったので、もう準備することはないのですが、それ以外の部品に関しては家にないので、調達する必要があります。

表計算ソフトに、必要な部品を列挙し、それぞれどこで何個購入するかをまとめて、発注しました。中国通販(AliExpress)で購入したり、普通に秋葉原の小売店で必要数購入したりして、部品をそろえました。

f:id:inajob:20180806144910p:plain

それぞれの部品の価格についてもまとめておきました。

部品製作(筐体)

今回は8個ということで、我が家にある3Dプリンタで作成しました。休みの日や、早く帰宅した日を利用して、淡々と出力しました。

3DデータはOpenSCADで作成しています。(後ほど公開予定です)

f:id:inajob:20180806145046p:plain

価格決定

ここはかなり悩みました。今回は単純に材料費の合計にマジックナンバーを掛けるという方式で価格を決定しました。

極端に安く売ることもできるのですが、売れば売るほど損をするようでは、僕の財布も、モチベーションも保てません。

スイッチサイエンスで販売されているキットの価格なども参考にしつつ、大まかな価格感を決定しました。

 

「4500円」

f:id:inajob:20180806145115p:plain

これが高いと感じるか、妥当と感じるかは人それぞれなのかなと思います。。

検品

キットなので組み立てて動作を確認することができません。怪しい部品については部品単位で動作を確認します。特に中国通販で買ったICに関しては、動作が怪しい気がしたので、確認したところ実際に期待した動作をしないものがあったりしました。

キッティング

部品が次々と届くわけですが、販売用にこれらをキット化する必要があります。文具屋やダイソーなどで小分けの袋を購入したり、説明用のチラシをネットプリントで印刷します。

そしてそれらをキットとしてパックします。

f:id:inajob:20180806145516p:plain

f:id:inajob:20180806145609p:plain細かく紛らわしい部品が多いので、一度詰めた後に再度確認しました。

運搬

わざわざ見出しを書きましたが、今回は8個だけだったので、普通に手提げ袋に入れて自分で運びました。大量に売るとなると運搬も業者に頼むなどが必要なのだろう、と思いました。

販売

実際の販売は楽しいものでした。Maker Faire Tokyoには何度も出展したことがあるので、同じ感じなのですが、販売をしていると、プラスアルファで「売れる」という喜びがあります。

たくさん在庫があると、売れ残ったらどうしよう・・みたいに思うところですが、今回は8個ということで、気楽に構えていました。

結果6個売れるということで、なかなかの戦果だったのでは?と思います。

まぁ実際買ってくれた方の多くは、以前からの知り合いやTwitterで仲良くしている方たちだったので、コネで売った 感はあります。初見でも「ほしい!」と思わせる何かを作るのは、大変なのだなと感じました。

販売後

Twitterなどで作成報告を書いてくださっている方もいて、販売後も楽しみがあります。(不備があるかも、、と考えると心配ではありますが・・)自分の作ったものが、他人にも認められて、購入されて、しかも活用されている!というのを見られるのはとても感慨深いものがあります。

まとめ

今回は自分で作った電子工作作品を他人に販売するという貴重な体験ができました。

RakuChordはライフワーク的に作っている楽器で、今後もソフトウェア面、ハードウェア面ともに改良を続けていく予定です。

また面白いものができたら販売していきたいなと感じました。次はネットで販売するのをやってみたいな!

f:id:inajob:20180806152344p:plain

 

3DプリンタX軸の自己修復的な修理

X軸の調子が悪い

3Dプリンタを買ってもう1年半ほどですが、どうも最近X軸の調子が悪い

inajob.hatenablog.jp

具体的にはX軸のベルトが頻繁に緩むようになっていました。

Y軸のベルトは対して緩まないのになぜX軸だけ、、?と思いながら、緩んでいるときには、ケーブルをきつく付け直していました。

f:id:inajob:20180725213828p:plain

↑緩んでいたのは赤く囲った部分のベルトです。

f:id:inajob:20180725213942p:plain

↑今回問題となったのはここの部品。この部分は3Dプリンタで作成されたものです。

f:id:inajob:20180725214046p:plain

現物はこんな感じです。一見問題ないように見えますが、モーターを固定している部分が大きく曲がってしまっているのです。

f:id:inajob:20180725214159p:plain

取り外すとわかりやすいですが、波打つように曲がってしまっています。

X軸のベルトの張力により、徐々にプラスチックが曲がってきてしまったようです。

そのためベルトが他の部品にこすれるようになってしまい、摩耗していましたし、X軸の移動もスムーズではなくなりかけていました。

f:id:inajob:20180725214356p:plain

そういえば3Dプリンタのマニュアルに、パーツのデータも同梱されていたので、同じものを3Dプリンタで出力。自分で自分を修理するというのができるのが3Dプリンタの面白いところです。

ベアリングがかなりきつくはめ込んであって外すの、入れなおすのも苦労しましたが、とりあえず新しいパーツに付け替えて今は問題なく動いています。

 

これにて修理終了。

f:id:inajob:20180725214804p:plain

左右でパーツの色が違っているのも愛嬌ということで。これからも働いてもらいます!

 

3Dプリンタを使って何が作れるかはこちら

inajob.hatenablog.jp

マイコンボードまとめ

最近マイコンボードがたくさん出てきているので、CPUごとにまとめました。(ついでにゲーム機もまとめました) Arduinoとか、mbedとかメジャーなものはまだ記載していません。

LPC1114

IchigoJam

PIC32

OrangePico

Machikania

STM32F103C8

Blue Pill

ESP8266

ESPr Developper

KOMAINO

ESP32

ESPr Developper 32

obniz

Nefty BT

m5stack

ATSAMD21

Gamebuino META

Arduino M0 Pro

LPC11U6x

pokitto

ATTiny85

8pino

Digispark

Atmega328

nekoboard2

ちっちゃいーの

Dotsuino

TinyDuino

Gamebuino Classic

Atmega32u4

Arduboy

Beetle

Arduino Esplora

nRF51822

micro:bit

未分類

Teensy

Trinket

micro:bit

Mbed

ESP32を使ったゲーム機"o-bako"のシミュレータを開発した

ESP32を使ったゲーム機 "o-bako"

”o-bako” とは最近僕が作っているゲーム機です。

ESP32と128×128の液晶、アンプとスピーカ。十字ボタンとA,Bボタン、スタートボタンを搭載しています。

さらにPS/2キーボードが接続できるようになっています。

f:id:inajob:20180527165238p:plain

ESP32-DevKitC を利用しており、arduino-esp32を使うことで、Arduinoのようにプログラムを組むことができます。

f:id:inajob:20180527175931p:plain f:id:inajob:20180527175958p:plain

3Dプリンタで簡易的なケースも作成しました。

f:id:inajob:20180527180919p:plain

構成としては最近話題のm5stackと似たようなものです。

また、Lua言語のインタプリタを動かせるようになっており、Luaで書いたプログラムを実行することができます。

さらにWiFi機能を使ってWebサーバとしても動作します。このWebサーバにアクセスすることで、Luaプログラムを閲覧したり、編集することができます。

 

f:id:inajob:20180527174542p:plain

o-bako Simulator

 o-bakoはまだ開発中なのですが、o-bakoで動かすLuaで書かれたゲームはそれ以外の環境でも、理論的には動かすことができます。

パソコンでプログラムを書いて、o-bakoに転送し、動作を検証し、という作業を効率化するためにブラウザで動作するo-bakoのシミュレータを開発しました。

inajob.github.io

 

f:id:inajob:20180527171658p:plain

理論的にはこのシミュレータで動作するように書いたプログラムは、o-bakoでも同じように動作します。

 

いまのところo-bakoが定義している命令は下記の9個だけです。(まだ追加する予定ですが、それほど大きく増やすつもりはありません。)

tone(no, freq, vol) 音を鳴らす(no: 0-2, vol: 0-255)
spr(x,y,w,h,sx,sy[,sw,sh]) (x,y)にspriteを(sx,sy)からサイズはw,hで描画する。sw,shを設定すると拡大、縮小できる。
pset(x,y) (x,y)に1ピクセルのドットを描画
color(r,g,b) ペンの色を[r,g,b]に設定。(r: 0-255, g: 0-255, b: 0-255)
text(s,x,y) (x,y)に文字列sを描画
drawrect(x,y,w,h) (x,y)にサイズw,hの四角形の枠線を描画
fillrect(x,y,w,h) (x,y)にサイズw,hの四角形を塗りつぶす
fillcircle(x,y,r) (x,y)を中心に半径rの円を塗りつぶす
btn(n) ボタンの入力を取得 ボタンを押してからのフレーム数が返る

テキストエリアにプログラムを書き込んで「Execute」をクリックするとゲームが動作するので、試してみてください。


ゲームプラットフォームとしての"o-bako" 

最近Arduboy, Gamebuino, Pokittoなど様々なゲームプラットフォームが出てきていますが、それぞれで作ったゲームはそのゲーム機専用になってしまい、ほかのプラットフォームでは動作しません。

Luaのようなもうすこし高レベルの層を定義し、それに向けたゲームを作るようにすることで、ほかのプラットフォームでも簡単に動作するものができるのではないか?と考えています。

LuaC言語が動作する環境であれば、非常に簡単に移植することができます。(メモリ、CPUがそこそこ必要ですが・・)

 

とか書きましたが実際のところは僕が作ってみたいので作ってるだけです。生暖かく見守ってください。