新型コロナ、かつてない大きさとなっている第三波。非常事態宣言が広がり、医療機関の逼迫も聞こえてきます。 東京の救急医療が混雑していたときに適応される「救急医療の東京ルール」の適応件数の上昇が、東京都の対策サイトから確認できます。

自分や自分の周りの人を守る行動、不要不急な外出を避ける #STAYHOME 再びです。
かつての伝染病時とは違い、我々にはネットがあります!

jig.jp開発&提供、みんなのライブ配信「ふわっち」を使った #STAYHOME の新しいカタチ、配信アプリづくり!

Macを持っている方、ステキなオープンソース「HaishinKit.swift」を使ってかんたんにオリジナル配信アプリが開発可能です。

1. HaishinKit.swift をダウンロード
2. ライブラリを準備

$ brew install carthage $ carthage update

3. 配信画角設定を 1280x720 に変更

4. ふわっちをPCで開き、配信準備ボタン、外部エンコーダーを使うを選択

RTMP URL と Stream Name が表示されます。

5. Preference.swift に設定を書き込む

これで設定完了!自分だけの配信アプリになりました。もし公開する場合、 Stream Name も公開してしまわないよう注意。

6. 実機でビルド(Apple Developer Program 加入が必要)
7. ふわっちで「配信する」
8. アプリで配信する
画面、下から二番目、ビデオとビットレート隣にあるボタンを押すとアプリからの配信スタート!

9. 配信できました!

あとは、いろいろと楽しいエフェクトを作ったり、アニメーションにしたり、プログラミングで自由自在!#STAYHOME じっくり、家で開発三昧!
高専生プログラマーさん「jigインターンオンライン」でチーム開発も楽しいかも?

変更済みのソースコード、こちらからダウンロード可能です。
taisukef/HaishinKit.swift forked from shogo4405/HaishinKit.swift


COVID-19 新型コロナウイルス対策ダッシュボード
場所に応じて警戒を!
「#STAYHOME x ふわっち」「PANDAID - パンデミックから命をまもるために」バナーはじめました。

福井は3年ぶりの大雪。勝山市の山間部での積雪はなんと3mとも。雪の重みによる家屋倒壊リスクがありますが、大雪時の雪かき、雪下ろしにも危険が伴います。 Facebookでの呼びかけを見て、技術検討開始。加速度センサーを使って何かあったことを検出し通信するwebaアプリ「雪かきアラート」とiPhoneで通知を受けるアプリ「PushGet」を作成しました。


雪かきアラート」(src on GitHub)
iPhoneで動かす、webアプリです。「雪かきスタート」で、10秒おきにビープ音が鳴り動作スタート。画面が消えてしまうと止まってしまうので、スリープしないように一時的に設定してください(制限)。 しきい値を超える加速度(G)を検出すると高いビープ音が鳴ります。指定時間動きがないと断続的にビープ音が鳴ります。音量は最大にするといいでしょう。

課題は2つ
- 通知が手軽にできない(iPhoneネイティブアプリの開発と申請、サーバーの運用が必要)
- 常時起動ができない(スリープ中のスマホを定期的に動かし加速度を取得する方法がない)


PushGet - src on GitHub
通知で伝えるiOSアプリを作りました。表示されるQRコードから上記「雪かきアラート」を呼び出すことで、通知を受けることができます。iPhoneアプリはAppleへの申請が必要なのですぐには使えません。 オープンソースなので、Xcodeとサーバーが分かるエンジニアで、Apple Developr Programアカウントがあれば、設定して使用可能です。 通知システムAPNsとの接続は、Node.jsとDenoで作った「apnpush on GitHub」を使ってください。

現在、メッセンジャーアプリでおなじみ「通知」は手軽ではありません。iPhoneユーザーに通知するためには、年1万円のApple Developer Programへの登録と、何らかのサーバーが必要です。 命を救う可能性がある通信、もっと手軽に実現したいですね。


アイコン作成は Keynote と、先日作った「AppIconMaker」が役立ちました。


鯖江の積雪、80cm。雪かきしないと車は移動不可能。この4倍近くとは・・・。

まだ不自由なスマホの仕様、スマホに頼らず、雪かきお守りIoTを作ったほうがいいかもしれません。

Armになった MacBook Air、USキーボードの問題は日本語入力と英字入力の切り替え。Ctrl+Spaceでの切り替えは、トグルなので現在状態をチェックするか、一度打って見る必要があって面倒。

見つけてくれた解決策はソフトウェア「英かな」は、左右のcommandキーに独立して、英字入力、かな入力に設定できるキーを割り当ててくれます。

ただ、この手のソフトウェアに気をつけたいのは安全性。押しているキーを全部補足できるので、セキュリティホールになりかねません。ただその点「英かな」はオープンソースなので、自分でその安全性を確認できて安心です。


せっかくなので、macOS Sierra対応のアプリを、Swift 5 / Big Sur / Apple M1 対応。元のアプリは、Intelでしたが、ArmのApple M1ネイティブになりました。

forkしたソース、こちらオープンソースです。Swift 5 の学習用にもどうぞ!
taisukef/cmd-eikana: Application of macOS which switches Alphabet / Kana by pressing left and right command key alone. Other key remapping is also possible.」(forked from iMasanari/cmd-eikana)

日本語キーボードと比べてスペースキーが大きいので、ちょっとコマンドキーを押すのに慣れが必要ですが、これなら快適に使えそう!

システム環境設定、キーボード、修飾キー、上記のように caps lock、ctrl、option、command をひとつずつずらして設定すると、日本語キーボードっぽくなります。 commandキーをアクションなしにしてしまうと、イベントも来なくなってしまうのでそのままにしておきます。

SwiftUIでつくりやすくなったiOSアプリ、自分のiPhoneに入れてならぶアイコンがなにもないと寂しいですが、なぜかいろんなサイズをたくさん用意する必要があって面倒です。 そこでプログラム!必要なアイコンサイズは、JSONデータに書いてあったので、ひとつの大きな画像をドロップすると、単純縮小で一気に25画像を生成、ファイル名を記載したJSONデータと合わせてZIPで固めてダウンロードする、webアプリをつくって解決! 展開したファイルを、Shared/Assets.xcassets/AppIcon.appiconset に置くだけでOKです。

AppIconMaker for Xcode12.3」(src on GitHub)
webアプリ/JavaScriptでの画像ファイルのドラッグアンドドロップ、zip圧縮、ダウンロード処理の参考にもどうぞ!


「SwiftUICalc」(src on GitHub)
なかなかおもしろい作り方をするSwiftUI、Swift5への慣れも含めてGitHubに公開されていた電卓アプリを小数対応してみました。Thanks, RyoNishimuraさん!

福井高専在学時、ネットカフェのマスターからもらったJava(JDK1.0.2)の本の、UIをBorderLayoutなどを使ったコーディングだけで作るスタイルに感動した記憶が蘇ります。 データとUIを一体化させるReactな考え方を取り込み進化したSwiftUI、なかなかいい感じ。


jig.jpインターンシップ
プログラミング好きの高専生に送る、jig.jp、冬のオンライン特別企画。プログラミングスキルを上げたい人、チーム開発やってみたい人、エントリーください!

IchigoJam BASICでプログラミングの学び方が分かったら、いろんな言語にチャレンジしよう!

スマホやパソコンで動くゲームやちょっとしたツールなら、HTML/CSS/JavaScriptの組み合わせが手軽なのでおすすめ。

今回は、更に踏み込んだネイティブアプリ開発の紹介。

2019年に発表されたSwiftUI、Objective-Cに代わる言語としてAppleから登場したSwiftもバージョン5。 古い知識や書籍はどんどん使えなくなってしまうので、自分で調べたり、本家の公式ドキュメントなどを読んで作るチカラが必要。


「DrawWithSound」src on GitHub
CPUがIntelからArmに代わった MacBook Air、無料の公式開発環境 Xcode を使って、絵を描いているときにピコピコ音が出るお絵かきアプリづくり。 なかなかおもしろい作りの SwiftUI、なかなかシンプルに書けて、サクサク動きます!(iOSではなぜか音がでない、最初の一筆が描画されないなど、まだ謎あり)

つくりたいもの、じゃんじゃんつくろう!

ArmになったMacBookAir、IchigoJamからステップアップ候補にもなる一番安い8GBモデルで実験。起動やブラウザの表示などいろいろと軽快!ファンレスでひざの上で使っていても熱くならないのはうれしい!

RosettaによるIntelエミュレーションがあるので動かないアプリも少なそう。IchigoJam ap、USBシリアルとCoolTermでIchigoJamとのやりとりも問題なし。JavaScriptのランタイム「Deno」もターミナルの「情報を見る」「Rosettaで開く」をチェックし起動すれば、インストール、PATHの設定で普通に使えるようになりました。

続いて、iPhoneアプリの開発実験、無料でダウンロードできるApple純正の開発環境「Xcode」をAppStoreからダウンロード。かなり大きいアプリなので、半日放置してダウンロード完了。驚いたことにアクティビティモニターで8つのCPUの内、4コアがそれなりに高負荷になっているにも関わらず発熱なしでバッテリーの減りも20%程度というのに驚く。


Mac、iPhone、iPad、Apple Watch、全部まとめて開発可能なユニバーサルアプリを試しに創ってみました。といっても、プロジェクトを新規に作成し、ラベルや数値を少しいじるだけならSwiftの深い知識は不要です。IchigoJamでテキストプログラミング言語とコンピューター英語に親しんだこども達なら、きっとすぐ慣れちゃいます。

Xcodeとエミュレーターをいくか起動して、8GBのメモリがだいたい埋まりますが、ちょっとしたアプリ開発には十分いけます。並行してたくさんブラウザを開いたり、大規模アプリの開発を考えるなら、16GBモデルが余裕あっていいかも。

キーボードの配列はDvorak。左手に母音(AOEUI)が集まっているので左右交互に打てて楽です。Dvorakの弱点とされるカ行の入力は、CをKの代わりに使うのがポイントです。(IchigoJamも実はCによるカ行入力に対応済み)

Google IMEでエクスポートしたおすすめローマ字入力のデータはこちらです。
romantable.txt
macOSでは、キーボード入力として簡単にDvorakを選んで使えます。より楽な入力に向けてチャレンジしたい人、どうぞ!


ひさびさにPCの進化を感じた、新チップ Apple M1 とIntel x86_64 のエミュレーションRosetta。 将来、更に省電力なオープンソースなコア RSIC-V への移行するとしても、スムーズにいきそう!

福井に引っ越してきたときの最寄りの高校、藤島高校。25年越しに初潜入。
おもしろいことになってるコンピューター/AIの世界とプログラミングの入り口を紹介したら、鯖江の学生!
Hana道場でも再会果たし「NT鯖江」にも行くと75%の約束してくれた!

やはり最新のスゴさを見せて、体験してもらうのが一番!
iPhoneに搭載された機械学習ライブラリ CoreML を使った画像識別をアプリづくり。

こちら、モノの名前を教えてくれるメガネ「monoglass」
覗くと見えるデジタルフィルターされた世界。モノの名前が見える!
識別時間に遅れなし!速い!


見た目はいつものスマホAR


2つ同じ画面を左右に表示して、外に穴が空いたスマホVRゴーグルにセットすればOK!

今回の識別にはオープンデータな画像識別学習データセット MobileNet を使っていて、999種類の識別をしてくれます。
(レコード1000の内 crane が重複しているので999種類)
元データ MobileNet-Cafe、iOS用に変換されたデータ MobileNet.mlmodel

PythonやJSなどで、自分で学習させたモデルにも切り替えも簡単にいけそう。
(src for iOS on GitHub (meganeworld) - 日本語訳はざっくりしたままなのでその内ちゃんとしたい版)


なんと福井高専の地球物理学研究会Namaz(なまず)は、藤島高校にもあった!
月曜日が基本の活動日、Namaz藤島グループ、地図班、震源特定班、調査班に分かれて作業開始!


藤島高校中庭、この囲いの中に秘密あり


このケースの中には・・・


加速度センサー!10年稼働し続けているとのこと。


こちら記憶装置とバッテリー。バッテリーは数ヶ月に一度交換。


福井県内の高校、6箇所で収集した、サンプリング周波数250Hz/3軸の加速度データから震源が計算できる!
高校生が特定した震源データ、ぜひオープンデータ化してみんなでいろいろいじるときっともっと楽しい!


JavaScriptを使えば、地図アプリも簡単に作れるよ!と見せようとしたら、フィルターに阻まれた。
地図アプリづくり、Chrome推奨だけど、きっとEdgeを使えば大丈夫!


気を取り直して、IoT側、IchigoJamを使った簡単プログラミング入門と、ハードウェア制御を紹介。
とても気に入ってくれた、リーダーはなんと鯖江出身。
Hana道場を紹介したら即来道!いいね、行動力!

AIIoTスマホアプリもプログラミング
人類の英知、活かしていこう!

鯖江のものづくり力と、プログラミングの力、おいしいものに出会えるイベント、鯖江ものづくり博覧会NT鯖江、今週末!

links
- かわくだりゲームのIoT改造! 親子IoT&講師向け研修の学びをまとめたスライド公開
- イノシシ x IoT x G空間地図アプリ! 誰でもつくれる地図アプリハンズオンセミナー資料
- TensorFlow.jsだけで画像の学習から予測までをミニマム実装! AIはじめのいっぽ

祝、高専プロコン30周年!記念にメガネアプリをバージョンアップ、Procon edition!

審査員のみなさんと!(src in Swift on GitHub - for iOS
MacとiPhone持ってる人、Swift使ったプログラミング、ぜひやってみてください!


2日目も楽しみです!
起業家甲子園、挑戦権は誰の手に!?

(追記、procon30th写真集)




開発手法のレクチャーから始まった2020内定者合宿、2日目は成果発表会。

鯖江に来た学生に役立つサービスをテーマに開発された「ALUKO」


寸劇で利用シーンを紹介、鯖江に遊びに来た学生ゲンゾウ君、余裕ある時間をどう使う!?


アプリ立ち上げると表示される3パターンのコース


コンパスに従って歩こう!途中、秘密の寄り道ポイント経由で鯖江のいいところにご案内。到着すると種明かし、ゴールカードをGET!

ビジョン「鯖江に来た学生が遠足気分で鯖江を満喫できるコンパス」
地図がでないので、地図が苦手な学生でも安心。
近づくに連れて間隔が短くなる振動でお知らせするので安全。
たどり着くまでどこに案内されるか分からない、ワクワク感。
データシティ鯖江の5つ星オープンデータをSPARQLで取得、いい感じアルゴリズムで目的地が決まります。


タスクかんばん、最終形!
普段は1週間のスプリントを、約2時間くらいのショートバージョンで駆け抜けた短期決戦版スクラム。
毎スプリント毎に「KPTでふりかえり」をして、改善し続けることこそ肝。


jigカレー&ピザ&LTで懇親会!


内定者へ伝授したjigカレーのつくりかた、本日のトライは、秋の味覚、ブドウ!


辛口ベースを牛乳いれてマイルドにして、完成!

今回苦労したのは、ウェブアプリ上でのコンパスの実装。
どうも現在のJavaScriptでは、うまく方角が取れない模様。(コンパスの謎
仕方ないので、GPSで座標の履歴からまっすぐ歩いたと仮定して方角を算出、目的地との差分をとって表示する形で実装してました。


iOSのネイティブだったらどうなるか?調べてシンプルに8方向で方角を表示するアプリを作ってみました。

Swiftでの実装、CLLocationManagerを使って、startUpdatingHeading のコールバックで magneticHeading として受け取れる角度。
とっても素直に動き、使えます。ブラウザ上の機能、もう少しがんばってほしい。

import UIKit import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate { let locationManager: CLLocationManager = CLLocationManager() var label : UILabel! override func viewDidLoad() { super.viewDidLoad() locationManager.delegate = self locationManager.startUpdatingHeading() let sw = self.view.frame.width let sh = self.view.frame.height self.label = UILabel() self.label.text = "北" self.label.textAlignment = .center self.label.font = .systemFont(ofSize: 150) self.label.frame = CGRect(x:0, y:0, width:sw, height:sh) self.view.addSubview(self.label) } func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) { print(heading.magneticHeading) let dir = [ "北", "北東", "東", "南東", "南", "南西", "西", "北西" ] let ndir = Int((heading.magneticHeading + 360 / 16) / 360 * 8) % 8 self.label.text = dir[ndir] } }

ネイティブアプリとして実装して、リリース目指す!?

世界で学べ 2030に生き残るために」を実践するインフィニティ国際学園。夏休み明け、初の特別授業として遠隔講演&ディスカッション。 オープンデータ、IchigoJam、プログラミング、メガネに興味を持ってもらえました。

IchigoJamで使っている、100円のCPUで1秒5000万回、なんとスマホでは遂に1秒1兆回計算できるまでに高速化したiPhone11。 この有り余る計算能力を使って作ろう、楽しいもの!人がカボチャに見えるメガネアプリ、作りました!あがり症の人も安心です。

テレビ会議越しでの記念撮影写真を、カボチャメガネアプリ越しで再撮影。(src in Swift on GitHub - for iOS13
超広角レンズを使うには、builtInUltraWideCameraを指定すればOK!


画面を2つに分けることで、スマホVRゴーグルを使ったスマホARが実現できます!
撮影角120度の超広角レンズを使うと視界が広々、快適!
通常より遠く見えてしまうので、視野角120度近いスマホARゴーグルが登場すると、更にいい感じに使えそう。


iPhone 11 で搭載されたAIチップが効いているのか、iPhone Xとの比較で、顔認識速度が桁違いにスピードアップ!いろいろ作りたくなります。

見たいものが見える電脳メガネ世界
何が見えたらうれしいですか!?

残念ながら、気軽に作って公開できる、webアプリで実現するWebMeganeでも使いたいところですが、インカメラとバックカメラの2つしか認識していませんでした。Safariのバージョンアップに期待です。 (加速度センサー、地磁気センサーがiOS13からはパーミッション制で使えるようになったのはうれしい!)


Zoomを使った遠隔授業。彼らは現在、フィリピンにいます!


「鯖江から世界へ」をテーマに、世界中の課題解決に対する jig.jp のアプローチを紹介する前半。
後半は、3社起業に至った理由と世界をつなぐアイデアを紹介。プログラミングやってみたいとの声、うれしい!

ないものはつくる!

世界中を旅する高校、インフィニティ国際学園の学生が見つけた、まだないもの。
実現へのアシストしたいと思います!


インフィニティ国際学園1期生のみなさん、質問、コメント、いつでもどうぞ。
コミュニケーション帯域豊富なリアルで会える機会を楽しみにしてます!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS