スキップしてメイン コンテンツに移動

投稿

p5.jsを使った来月からのプログラミング教室のためのツール開発 by ClojureScript

 久しぶりの投稿になりました。 ニャンパス株式会社として受託開発を中心に忙しい日々を過ごしており、コワーキングスペースHaLakeの運営も順調に行っています。 HaLakeの最初の頃からプログラミング教室を定期的に開催しており、現在10名近くの小学生から社会人までの方を対象にレッスンをしているのですが、来月からのテーマを p5.js を使ったJavaScriptでのゲーム開発を題材にしようと考えています。 p5.playというライブラリを組み合わせればそれなりのゲーム開発ができることも分かっており、それをスマートフォンのいわゆるウェブアプリとしてインストールしてもらい、教室で作っったプログラムを普段のスマホに入れて遊んでもらおうと思っています。 そのためのツールを開発しようと考えており、Windows、Macで動くCLIをClojureScriptで書き、npmのライブラリであるnexeで実行ファイル化して配布しようと思い付きました。 ( こちら を参考にしました。) 来月から実際に使おうと思っているので時間はないですが、CLIとしては以下のような機能を実装する予定です。 WebサーバのAPIを実行してユニークなIDを発行する 特定のディレクトリで実行しそのディレクトリ下の差分を検知して、Webサーバに差分をアップロード 一方サーバ側では、 ユニークなIDを発行するAPI IDと対応したHTML、JSファイルの配信 ということを想定しています。 アプリケーションは、iOS、Android用に作成し(Flutterを想定)、上記のIDを入れてもらうとサーバから取得したHTML、JSファイルをウェブアプリとして単体で動作するようにし、普段ゲームとして遊ぶ分にはアプリ無いブラウザであることは意識させない作りを考えています。 まだ、構想して試しに、ClojureScriptでnexeでバイナリを作ってみた程度なので実際に形になったら、Githubのニャンパスのリポジトリとして公開しようと考えています。

ClojureScriptとBLE

2017年Clojure Advent Calendar 15日目の記事として書きました。 今年、ニャンパスとして、またプライベートでいろいろとBLEを扱うコードをClojureScriptで書きましたので、まとめてみます。 使用したデバイスは、micro:bitです。秋葉原や通販等で手に入り、BLE、25個のLED、加速度センサーがついている学習用のボードです。ブラウザ上でビジュアルプログラミングでの開発ができたりと面白いので、年末年始に遊んでみてください。 ClojureScriptでの環境の作り方から始まって、micro:bitとPCとの接続、リモートでのLチカを試すというIoTなClojureScriptの内容となってます。 1. ClojureScriptで、BLEな環境を作る Node.js、npm、Leiningenを入れておいてください。プロジェクトを作ります。   $ lein new figwheel-node ble figwheel-nodeテンプレートを使い、できたファイルはこんな感じです。 ./project.clj ./README.md ./package.json ./.gitignore ./src ./src/ble ./src/ble/core.cljs ./dev ./dev/user.clj 今回、PC側をBLEのセントラルとして振る舞わせ、micro:bitをペリフェラルとして操作しますので、そのためセントラル側のプログラムとしてnobleというライブラリを使います。 OS毎に依存するものが違いますので、サイトで事前に確認しておいたほうが良いです。    https://github.com/sandeepmistry/noble ※nobleはMac、Linux、Windows、FreeBSDをサポートしており、 僕自身今年nobleを使ったコードをClojureScriptを使って、Windos、Mac、Linuxそれぞれで動かしていて動作は安定していました。 では、nobleを以下のコマンドを実行しておきます。   $ npm install noble ※普段はlein-npm等を使

コワーキングスペースHaLakeが出来て2年3ヶ月

埼玉県越谷市、越谷レイクタウン駅と近接する形で、コワーキングスペースHaLake(ハレイク)を作って2年3ヶ月が経ちました。当初の計画から比べて現在どのような運営になっているかをまとめてみました。 1. 小学生向けのプログラミング教室を毎週開催 今ではコワーキングスペースHaLake主催のプログラミング教室として毎週日曜の9時半から主に僕が講師として、マインクラフト、オリジナルで作った電子工作を学ぶツールのHaLake Kit(後述)の二つを使い、小学生にプログラミングを教えています。 教えているといっても、できるだけプログラミングそのものの楽しさを感じてもらえればと言う点に主眼をおいており、小学生低学年の子でも簡単にコードを打ってもらう、結果が分かりやすく動きとして分かる、そこからの応用を考えてもらうといった手順を心がけています。 HaLakeスタートから以下のように変わりました。 当初: テーマはScratchとArduino → 現在: マインクラフトとHaLake Kit 当初: 小学生を対象というよりは、小中高生、ひいてはプログラミングを学びたい社会人も対象としていた → 現在: 小学生とその親御さん マインクラフトに切り替えたことで、そもそもマインクラフト自体が小学生に大変興味深いゲームである上に、その環境の中でプログラミングを学ぶ(ComputerCraftというModを使います。)ようにしたことで、ゲームの延長という認識でコードを書いてもらっているのではと思います。 対象者に関しては、こちらで絞ったということではなく、結果的にこうなりました。今でも年齢を問わずプログラミングを学びたいという方向けの教室ではありますので、ご興味ある方はぜひ。 2. 月額会員プランから技術支援を分離 僕自身がプログラミングをニャンパスを立ち上げる前からマンツーマンでプログラミング初学者に対してのレッスンをしていました。その経験を活かそうと、HaLake当初から月額会員になっていただいた方の特典としてITに関する相談、アプリ開発やウェブサービスのペアプログラミングとしてのお手伝いなど、一ヶ月あたり3時間のサポートをしますという内容込みのプランとしていました。 コワーキングスペースを一ヶ月利用できる

HoloLensでのREPL開発を試してみる

コワーキングスペースHaLake で開催しているLaketown.clj(Clojureもくもく会)を開催しました。 またニャンパスとして先月HoloLensを購入していましたので、HoloLensでClojureが動かないかなという好奇心を満たすため、HoloLens上で動くUnityアプリに Arcadia を導入してみたところ、ちょっと試した限りではREPLが動き、Clojureのコードを送り込むことが出来ましたのでその手順を記憶が新しいうちにまとめてみます。 Clojureもくもく会中、REPLから操作しているGameObject この手順でやっていることは、HoloLensのHolographic Remotingアプリを使って、Windows機(Surface)からのUnityで繋いだ上で、そのWindows上でArcadiaを使ってREPLサーバを立て、そこにMacから(REPLクライアントとして)接続し、Unity上のGameObjectを操作するという方法です。 (Holographic Remotingを使わずに、UWPとして書き出してからのREPL接続までは試せていませんので、次に時間があるときに試してみます。) まずはHoloLensからのUnityアプリ開発環境を用意します。 こちら の中村 薫さんの資料通りに設定しており、大変参考になります。 Unityのプロジェクトを作成し、HoloLensへHolographic Remotingで簡単なGameObjectが表示されるところまで確認しておきます。 作成したプロジェクトのAssetへ、Arcadiaを導入します。 cd <Unityプロジェクト>/Assets git clone https://github.com/arcadia-unity/Arcadia.git Unityを立ち上げるとAracadiaメニューが追加されていれば成功で、自動的にREPLサーバを起動してくれます。 HoloLensからHolographic Remotingを起動、表示されるIPアドレスに対してUnityからのWindowメニューからHolographic Emulationから接続、UnityのPlayを押します。(このタイミングでREPLサーバが再起動されま

HaLakeKit Lino開発しました!

少し前になりますが、 デブサミ2017 にて、IoTLTさんのブースで、HaLakeKit Linoを展示させていただきました。 HaLakeKit Lino デブサミでの展示 デブサミでの展示 HaLakeKit Linoは、BLEモジュールとして、昨年からニャンパスで作ってきていたもので、ボタン電池で駆動し、スマートフォン等から、BLEを手軽に操作してもらえるようなプログラムを書き込んであります。 ニャンパスの運営するコワーキングスペースHaLakeでもささやかにワークショップを行いました。 HaLake KitというESP8266を使ったデバイスをすでに開発して、プログラミング教室で利用していますが、HaLake Kitの場合は、IoTではありますが、Wifiモジュールですので、Wifiを前提としない、スマートフォンと直接接続が出来るBLE版が欲しかったというのが開発の動機です。 特徴としては、電圧が最大12Vで駆動し、実装されているMOSFETのお陰で、そのままの電圧をGPIOから出すことが出来ます。プログラムとして、4つのGPIOを制御できるようなBLEのプログラムが予め書き込まれているため、BLEデバイスのプロトタイプとして開発していくことが可能になっています。 また、オープンハードとして公開しており、KiCadで設計しています。BLEモジュールの開発PCBの参考にもぜひどうぞ。 https://github.com/nyampass/halakekit_lino Revisionが3となっていることからも分かる通り、3回目の設計であり、というのも当初想定したSoCが生産中止になったため、最終版で切り替えています。 サンプルとして動作するiOS、Androidアプリのソースコードも、Linoと連携するものをすでに要しており、今後Githubで時間のあるときに整理して公開予定です。 ニャンパス自体がソフトウェア開発がメインの会社ですので、できればライブラリ化して簡単にBLEモジュールを簡単に操作できるようにしたいと思っています。(Linoに限らずそういうことが出来れば理想。) ワークショップの情報は こちらのConnpass で行いますし、HaLakeで毎月開催のIoT勉強会でも触ってもらえるよう

コワーキングスペースHaLakeでのシステム化の取り組みまとめ

ニャンパスがコワーキングスペースを初めて、早二年以上が経ちましていくつかのシステムやら、IoTっぽいものを開発してきましたので、一度現時点でまとめたいと思います。 ソフトウェア開発がメインの会社ですので、コワーキングスペースをはじめた当初は、Raspberry Piを使って簡単な実験をやっていた程度でしたが、毎月開催のIoT勉強会をやるようになり、そこで得た知見から、また小学生へのプログラミング教室の毎週の開催から HaLake Kit といったデバイスの開発をはじめ、ソフトウェアに限らないものづくりを割りと盛んに行うようになりました。 今回は、そんな開発したものの中でコワーキングスペース運営に特化したものの紹介です。 Raspberry Piでのレシートプリンター 受付時にレシート発行するシステムです。Raspberry PiからUSBでつながれたプリンターを直接操作して印字しています。 写真にあるように500円ボタン、1000円ボタン、印刷ボタン、リセットボタンがあり、ドロップインのお客さんが2時間利用の場合500円ですので、二人いらっしゃった場合には500円ボタンを2度押して印刷ボタンを押すと二時間利用2名分という内訳で印字されます。 印刷ボタンを押してからレシートが一瞬で吐き出される様子は一見の価値ありです。 ソースコードも公開しています。 https://github.com/nyampass/halake-raspi staff-ops HaLakeにアルバイトとしてお手伝いいただいているスタッフとしてお手伝いしてもらっている方用のチェックリスト、タスク管理なものです。やってもらった作業や、コメントがSlackに通知されるようになっており、コワーキングスペースに足りない備品もこのシステムを使って把握できるようにしています。これで少なくなっている備品がリモートで把握できますし、同時にSlack上にはAmazonで購入したメールを流すようにしていますので、すでに購入されていてまだ届いていないのか、あるいは購入漏れがあるかどうかも全員が分かるようになっています。 今回のエントリーの中で唯一ソフトウェアだけのものです。 こちらもソースコードも公開しており、Heroku上で動くことを想定しています。 https:

IoTデバイス用のお手軽サーバリリース!

手軽にIoTデバイスのステータス管理ができるWebサーバをGitHubで公開しました。 https://github.com/nyampass/iot-srv Herokuへのデプロイボタンがあり、デプロイを用意にしています。Heroku Redisに保存します。 Herokuアプリが一つだけなら24時間動かしたとしても無料枠に収まる範囲かと思います。(ただHeroku Redisの無料枠に収まるかは使い方次第です。) HTTPロングポーリングに対応していて、ステータス変更時のJavaScriptコードの実行、ステータスの可視化も対応しています。 IoTデバイスからHTTP経由での状態の変化に対してリアルタイムに対応させたい場合というケースは経験上わりとありまして、そのための対策としてHTTPロングポーリングでステータスの変化を知る仕組みがあるのが特徴です。 ある程度検証も終わりましたので、今後 コワーキングスペースHaLake として、小学生向けのプログラミング教室として Halake Kit を使ったレッスンをしてますのでそこでも利用しつつ、かつ教室ではマインクラフトとModとしてComputerCraftも題材として使っていますので、マインクラフトの世界と現実世界をつなげるサービスとしても利用予定です。(ComputerCraft上でLua言語が記述できHTTPアクセスが可能ですので、iot-srvとの連動が容易です。)