福野泰介の一日一創 - create every day

日本の宇宙オープンデータ時代の幕開け!
宇宙(ソラ)からの目、衛星データを無償提供する、Tellus OS ver 1.0 公開記念イベント。
目標は、現在の日本の宇宙関連市場1.2兆円を2030年までに倍の2.4兆円!

Tellus SPACE xData Fes.
Tellusが提供するオリジナルの衛星データなどは、ユーザー登録、原則コピー不可な、非オープンデータですが、 二次成果物の利用は自由となっているので、オープンデータ化することが可能です(利用規約に一部条件あり)。 また、エンドユーザーに有償で利用させる場合(利用規約)は、別途アグリーメントが必要。


さくらインターネット社長、舞鶴高専の高専違いの1つ上の先輩、田中さんによるオープニング!
公開したら終わりの従来ソフトウェアではなく、プラットフォームなので、ここからが本当の始まり。
膨大なデータを解析するための環境も用意し、宇宙データを使う敷居をぐっと下げる。
小学生でも活用しちゃうかも!?


世界最高水準50cmの分解能の衛星写真(光学)と、雲を透視でき植生などが分かる電波の反射による地上観測データ(SAR)が、無償で閲覧可能になりました!(画像提供、さくらインターネット)


宇宙 x ??、トークセッション1に登壇。
夏野さん、お久しぶりです!日本中のオープンデータ、全部Tellusに入れちゃう案、大賛成。
ガラパゴスにならない世界連携プラットフォームを創る最後のチャンス!
夏野さん、これからのベンチャーに何が必要ですか? (impress QuickBooks)


夏野さんの宇宙事業へのアドバイスは「派手に」
TELLO EDU 操縦用プログラムによる、自動撮影デモにで撮れた映像です。
新しいソラからの目、衛星とドローンとは補完関係。
(Python3による自動撮影プログラムは末尾参照)


宇宙 x アートが熱かった、トークセッション2
高解像度な宇宙アート写真が3,000万円! 月や火星などへの第二次宇宙ブーム、未知への憧れ、再び!


衛星画像データから、船が動いているか、停まっているか、艀(はしけ)かをいかに認識できるか競った、賞金総額200万円のAI画像認識コンテストの総評。
ロシア人プログラマーのNick Sergievskiyさんによる最優秀モデルで、56.7%と、なかなか難問だった様子。(最終評価で47.5%?)
コンペティション詳細/Tellus Open&Free Platform / 経済産業省 | SIGNATE - Data Science Competition


こちら、正解データ。3種類を高精度で見分けるモデルをいかに作れるか?


分割して、回転させたりジッターしたりで学習用画像を水増し、よく効くと噂の Faster-RCNN でモデルを組んで、機械学習!
上位はみんな類似のモデルだったそうです。(使用言語は、ほぼPythonほぼDeep Learning


THETAで撮った小笠原さんによる乾杯!宇宙っぽく丸く。広い会場、満員な上に椅子増席という人気!


懇親会時に開催された、Tellus SPACE アイデアワークショップ!
宇宙データと地上データをマッシュアップして何作ろう!?


宇宙感!


xData SPACE Fes. 会場向かいは、東京タワー。
今日、この遥か上空からの見下ろす「宙(ソラ)の目」を、誰もが獲得したわけです。
さて・・・あなたは何を見る?

links
- 2019年2月リリース! 衛星データプラットフォーム「Tellus」でできること | 宙畑 (SORABATAKE)
- 衛星データを無料で活用できるクラウドサービス「Tellus」、さくらインターネットが開始 | IT Leaders
- ASCII.jp:衛星データプラットフォーム「Tellus」が運用開始
- 衛星データを無償公開 さくらインターネット  :日本経済新聞
- 政府、衛星データを無料提供 新ビジネス創出を期待 - 毎日新聞
- 衛星情報の無料開放始まる 様々なサービスに期待
- 衛星データ“無料開放”サービス|NHK 首都圏のニュース
- 衛星データの”開放”は成功するのか? | 新・科学の世紀 | NHKオンライン
- さくらインターネット、クラウド上で衛星データの分析ができる日本初の衛星データプラットフォーム「Tellus(テルース)」を運用開始|さくらインターネット株式会社のプレスリリース
- 宇宙オープンデータ活用アライアンス「xData Alliance」参画! オープンデータで理解する大気圏、成層圏、対流圏
- 宇宙からのデータ活用で社会が変わる!衛星データプラットフォーム「Tellus(テルース)」発表
- 【イベント】日本の宇宙ビジネスを加速させる日本初の衛星データプラットフォームが公開!「Tellus(テルース)」記者発表会 | さくらインターネット
- 宇宙データはイノヴェイションの新たなトリガーだ!:Tellus SPACE xDATA Fes.で語られたこと|WIRED.jp

TELLO EDU による、360度自動撮影 Python3 プログラム

import threading import socket import sys import time event = threading.Event() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) tello_address = ('192.168.10.1', 8889) sock.bind(('', 9000)) def recv(): while True: try: data, server = sock.recvfrom(1518) print(data.decode(encoding = "utf-8")) event.set() except Exception: print('Exit recv') break recvThread = threading.Thread(target = recv) recvThread.start() def send(command): msg = command.encode(encoding = "utf-8") sent = sock.sendto(msg, tello_address) event.wait() event.clear() import cv2 import datetime def getNow(): return datetime.datetime.today().strftime("%Y%m%d%H%M%S") takepicture = False def takePicture(): global takepicture takepicture = True print("take a picture") videowriter = None def startMovie(): global videowriter if videowriter is None: FPS = 30.0 SIZE = (960, 720) FOURCC = cv2.VideoWriter_fourcc(*'mp4v') videowriter = cv2.VideoWriter("cap/" + getNow() + ".mp4", FOURCC, FPS, SIZE) print("start movie") def stopMovie(): global videowriter if videowriter is not None: vw = videowriter videowriter = None vw.release() print("stop movie") cap = None def capture(): global cap while not cap.isOpened(): time.sleep(0.1) while True: if cap is None: break ret, frame = cap.read() if frame is not None: global takepicture if takepicture: cv2.imwrite("cap/" + getNow() + '.jpg', frame, [ cv2.IMWRITE_JPEG_QUALITY, 95 ]) takepicture = False global videowriter if videowriter is not None: videowriter.write(frame) def startCapture(): global cap cap = cv2.VideoCapture('udp://127.0.0.1:11111') capThread = threading.Thread(target = capture) capThread.start() def endCapture(): global cap if cap is not None: tcap = cap cap = None tcap.release() send("command") send("streamon") print("stream on!") startCapture() startMovie() send("takeoff") takePicture() send("up 200") send("flip f") send("cw 360") send("flip b") send("land") stopMovie() endCapture() sock.close()

PM2.5が気になる季節、以前作った福井PM2.5 APIを使って、しゃべるPM2.5計スマートスピーカー Google Home Mini版を作ってみました。 人感センサーをつけて、朝一のリビングに入った時などに、しゃべってもらうといい感じかも。

Google Home を、ただのネットワークスピーカーとして使いたいときには、google-home-notifier。 再生してほしいmp3の音声ファイルのURLを渡すと通知して鳴らしてくれるというシンプルなもの。

PM2.5の値を取得し、しゃべらせたい文章を作成、Mac標準の音声合成コマンド say を使って、音声ファイルを作って、ffmpegでmp3化して、ローカルで立てたwebサーバーに設置して、Google Home Mini へ通知を送ればできあがり!

saypm25.py - PM2.5 APIから鯖江市神明の値を取得し、次へ

import os import urllib.request url = 'http://sabae.club/pm25/1/fukui/sabae.txt' req = urllib.request.Request(url) with urllib.request.urlopen(req) as res: body = res.read() n = int(body) print('response: ' + str(n)) s = 'おはようございます!鯖江市神明地区で計測したPMにぃてんごの値は、' + str(n) + 'です。' if n <= 70: s += '不要不急の外出は避けましょう。' os.system('./say-google.sh "' + s + '"')

say-google.sh - 日本語をmp3音声ファイルに変換して、次へ(ローカルwebサーバーの所定pathを設定)

say -v Kyoko $1 -o say.aiff ffmpeg -y -i say.aiff say.mp3 cp say.mp3 [** path ** ]/ node say.js

say.js - google-home-notifier を使って、通知する(ローカルwebサーバーの所定URLを設定)

const googlehome = require('google-home-notifier') googlehome.device('Google Home', 'ja') googlehome.play('http://[** ip, port, path ** ]/say.mp3', function(res) { console.log(res) })

毎朝、決まった時間にしゃべらせるなども、カスタマイズしましょう。

小さくても、結構大きな音がでる Google Home Mini、イベントや、ハッカソンなどでも活用できそうです。

G空間ハッカソンで活躍した、webアプリハンズオン研修、来週、福井市で再び開催!
G空間オープンデータで地図アプリ作成ハンズオン - connpass

links
- PM2.5時計(鯖江編)
- 玄関先でPM2.5の値を教えてくれる音声合成を使ったIoTデモ

人気のプログラミング言語、Pythonを使ったリアルタイム画像処理と思って、Macのカメラを読み込み、とりあえず画面に表示するだけプログラムをつくるも、フレームレートが著しく悪い。カクカクして、これでは興ざめ。

import cv2 cap = cv2.VideoCapture(0) print("fps: " + str(cap.get(cv2.CAP_PROP_FPS))) while True: ret, frame = cap.read() frame = cv2.flip(frame, 1) # horizontal flip cv2.imshow("esc key to close", frame) k = cv2.waitKey(1) if k == 27: break cap.release() cv2.destroyAllWindows()

Djangoより、シンプルなwebアプリフレームワーク Flask を使って、ブラウザで表示するととっても滑らかになりました!

左右反転させるだけのただの鏡アプリです。
画像認識してネコ耳を上書きしたり、背景を消したり、いろいろ遊ぶテンプレートとして活用ください。

import cv2 from flask import Flask, Response app = Flask(__name__) webcamid = 0 cap = cv2.VideoCapture(webcamid) print("fps: " + str(cap.get(cv2.CAP_PROP_FPS))) def getFrames(): while True: ret, frame = cap.read() frame = cv2.flip(frame, 1) # horizontal flip ret, jpg = cv2.imencode("test.jpg", frame) yield b'--boundary\r\nContent-Type: image/jpeg\r\n\r\n' + jpg.tostring() + b'\r\n\r\n' @app.route('/') def video_feed(): return Response(getFrames(), mimetype='multipart/x-mixed-replace; boundary=boundary') import webbrowser webbrowser.get().open("http://localhost:5001/") app.run(host = '0.0.0.0', port = 5001, threaded = False) # only 1 client

ブラウザを開くコードもついているので、Python3で動かすと、ブラウザが開いてすぐに表示が始まります。
Content-Type: multipart/x-mixed-replace は、初めて使いましたが、なかなか豪快なプロトコルでおもしろい!
複数開いて問題が置きないように、Flashの設定で threaded = False として、シングルスレッド処理としています。

スレッドモデルなプログラミング言語 Python の yield がポイントです。

目指せ世界最先端IT国家、日本の危機脱出にIT活用は必須!
プログラミングもIoTも、ちょっと試せばぐっと楽しい!大人も始めよう、国民総エンジニア&国民総データサイエンティスト!(昨日は徳島県、大塚グループさんにてIoTプログラミング研修

予想外に湧いた、DJIの教育用ドローン「TELLO EDU」をプログラミングによる自動運転飛行!プログラミングがちょっとできると、結構いいことありますよ!


スライド「1行で簡単実現「IoT」プログラミング×オープンデータ利活用! (PDF)
こどもたちに未来を切り開く、エンジニア&データサイエンティストスキル獲得のきっかけを!


360度カメラ、THETAで撮った舞台、ここでドローンの自動飛行!


Intelさんの機械学習に寄る画像識別のデモ展示、OpenVINOは無料お試し中のこと!
プログラミングができると遊べる最先端のおもちゃが、世界中から日々登場するエキサイティングな時代!
何年やっても飽きないどころか、いつか使ってみたい積みテクノロジーが増える一方。
みんなでシェアしましょう。


徳島県立 徳島科学技術高等学校の展示、鏡型情報端末。
身の回りのデバイス、IoTでみんな自分のコントロール下に置いちゃいましょう!


穴吹情報公務員カレッジの展示、どこでもリモコン。
レゴを使って、リモコンを物理で押す、潔さ!(IchigoJam学習リモコンもどうぞ)


教えないのが逆にいいCodeDojo tokushima 代表、谷岡さんと!
小中学生のものづくりを表彰する、PCNこどもプロコン、ぜひご活用ください!


京都で実験中、スマート観光の取り組み by シスコさん!


デジタルサイネージを通じて、遠隔の観光地のおじさんから声がかかるのおもしろい!


なんと徳島で、鯖江のおとな版地域活性化プランコンテストで一緒に戦った、京都のADDD Link 上治さんに再会!


会場は、昨年の高専プロコン以来のアスティとくしま!
明日は、いよいよこどもプログラミングワークショップ! IoT もちょっと実演するので、大人の見学も大歓迎!
親子で挑戦!こどもパソコン「IchigoJam」でプログラミング!|徳島県ホームページ


プログラミングで飛ばすドローンのデモも、やりましょう!
壇上から飛んだ TELLO EDU、Python3による制御プログラムはこんな感じでした。
(TELLO SDK: dji-sdk/Tello-Python: This is a collection of python modules that interact with the Ryze Tello drone.)

import threading import socket import sys import time locaddr = ('',9000) event = threading.Event() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) tello_address = ('192.168.10.1', 8889) sock.bind(locaddr) def recv(): while True: try: data, server = sock.recvfrom(1518) print(data.decode(encoding="utf-8")) event.set() except Exception: print('\nExit . . .\n') break recvThread = threading.Thread(target=recv) recvThread.start() def send(command): msg = command.encode(encoding="utf-8") sent = sock.sendto(msg, tello_address) event.wait() print("next!") event.clear() send("command") send("takeoff") send("up 500") send("flip l") send("up 200") send("left 250") send("forward 250") send("right 250") send("flip f") send("right 250") send("back 250") send("left 250") send("flip r") send("land") sock.close()

links
- とくしまICTバザール - とくしまICTバザール

I want to make web apps in Python3.
Python3でwebアプリを創りたい!
Django!


I made the simplest sample web app. (only 27 lines)
超シンプルなサンプルwebアプリを作りました。(たった27行)

import os webappname = os.path.basename(__file__)[0:-3] if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE', webappname) import django.core.management django.core.management.execute_from_command_line([ '', 'runserver' ]) SECRET_KEY = 'secret' ROOT_URLCONF = webappname WSGI_APPLICATION = webappname + '.application' import django.core.wsgi application = django.core.wsgi.get_wsgi_application() DEBUG = True #ALLOWED_HOSTS = [ "localhost" ] # webapp main from django.http import HttpResponse from django.shortcuts import redirect, render def root(req): return HttpResponse("<h1>simple django</h1>") from django.contrib import admin from django.urls import path urlpatterns = [ path('', root), ]

At the first, install Django.
まずは Django のインストール

pip3 install django

If you want to run after saving that python program as the name 'test.py'
動かすときは、さきほどのPythonプログラムを 'test.py' として保存して

python3 test.py

Try to access 'http://localhost:8000/' on your browesr!
ブラウザで 'http://localhost:8000/' へアクセス!

It's simple isn't it?
シンプルでしょ?

This is a sample program using the parameter and redirecting (see also official document)
パラメータを使ったり、リダイレクトしたりするサンプルはこちら(詳細は公式ドキュメントをどうぞ!)

# webapp main from django.http import HttpResponse from django.shortcuts import redirect, render def root(req): return HttpResponse(""" <h2>hello django</h2> <a href=t1?p=param>param</a><br> <a href=t2>redirect</a><br> """) def test1(req): return HttpResponse(req.get_full_path()) def test2(req): return redirect("http://fukuno.jig.jp/2388") from django.contrib import admin from django.urls import path urlpatterns = [ path('', root), path('t1', test1), path('t2', test2), ]

links
- Django
- Django documentation | Django documentation | Django
- Django ドキュメント | Django documentation | Django
- simpledjango src on GitHub

3社共催、親子プログラミングイベント、楽しんでくれました!

2019-2-3 はじめてのIoTデータ活用 親子プログラミングワークショップ

かんたんデータ管理の kintone(キントーン)の サイボウズ
かんたん格安IoTの sakura.io(サクラアイオー)の さくらインターネット
かんたんプログラミングの IchigoJam(イチゴジャム)の jig.jp

人間業じゃない計算力と記憶力を持ち、世界中とつながるコンピューターくんを味方にしよう!
「データで遊ぶ」をテーマに、その入口を親子で楽しく体験するイベント。

スライドダウンロード
はじめてのIoTデータ活用 親子プログラミングワークショップ kintone x sakura.io x IchigoJam (PDF)


サイボウズ社長室ビジネスプロデューサー 中村龍太さんから、kintoneの魅力をご紹介!
牛乳で身長は伸びる?運動で身長は伸びる?データで検証してみよう!


まずはプログラミングはじめの定番、LEDの制御、エルチカゲーム、エルチカロボット、かわくだりゲーム!
電子工作も、プログラミングも、極力シンプルでインパクトあるものにとチューニングしています。


本題、IoTとは? IoT = Internet of Things、(人じゃなくて)モノのインターネット
いろんなものとネットを通じて話ができたり、モノとモノ同士がお話したりする世の中のスタートです。


インターネットは、世界100億台のコンピューターがつながったもの。
2台のIchigoJamをつないでネットワーク実験!
子供2人、Aさん、Bさんとしてペアになって、順番に操作!


遠隔操作、ブロック、チャット体験、コンピューターはつなぐともっとおもしろい。


今回使ったIchigoSodaは、IoT通信モジュール sakura.io が内蔵されたIchigoJam。

こちらが1行ずつ、楽しくキーボードからタイピングしてできあがった、かわくだりゲーム!

10 CLS:X=15 11 CLT 20 LOCATE X,5:?"O" 30 LOCATE RND(32),23:?"*" 35 WAIT 3 36 X=X-BTN(LEFT)+BTN(RIGHT) 39 IF SCR(X,5) GOTO 50 40 GOTO 20 50 ?"GAME OVER!" 60 S=TICK():?S

1行足すだけで、IoTエディションのできあがり!

70 IOT.OUT S

かわくだりゲームが、みんなの反射神経を計測するIoTデバイスに早変わり!


kintoneでみんなから送られたデータをみよう!


かわくだりゲーム、スコアランキング!
しばらく放っておいたらチートされてすごいスコアにw


大人の問題、子供がチャレンジ!
お父さん、お母さんに課題を聞いて、IoTでどう解決するか考えてみよう!
「大人の課題」とかけて「子供の好きなもの」と解く、その心は?
と、なぞかけ形式にして、即興で答えを出してもらうのもいいかも。
時間があれば、じっくり時間をかけて「こどもIoTハッカソン」が楽しい!
(課題例:留守中の火災が怖い → 創電さん、IchigoSodaで、IoT火災報知器「火守くん」を開発、販売!)


自由時間、果敢にサーボや光センサーに挑戦する子供たち!


kintone の今回のイベントページ。質問や、感想などもこちらに描いていただきました。
右側にあるアプリがメイン!


お父さん参加が多かった、今回の親子ワークショップ。親子で楽しくプログラミング、ぜひご家庭でも!


自分でつくれる IcihgoJam、秋葉原にある PCN秋葉原Assemblage ではんだづけできますよ!


楽しい作品、PCNこどもプロコンへぜひどうぞ!
決まった、第9回のノミネート作品はこちら。
PCNこどもプロコン2018 一次審査結果発表 | PCN プログラミング クラブ ネットワーク


ちょうど節分!


kintone x sakura.io x IchigoJam IoT.OUT
大人も楽しいかんたん、IoTプログラミング!

IoTでデータを気軽に集めて、kintone のグラフでいろいろデータで遊んでみると、また新たなデータが欲しくなる。
オープンデータを含めて、たくさんデータを集めてできたビッグデータ、かんたんAIを使ったアドバンストコースも楽しそう!
さくらインターネットさん中心で進む、宇宙オープンデータプラットフォーム「Tellus」β公開しています!

Tellus


本日の機材、準備らくらく IchigoJamスピードパックのIchigoSoda&わくわく電子工作キットバージョン
こんの研修してみたい!機材提供など、ご相談ください!

技術的なお話

IchigoJam ver 1.3 で正式対応した、IoT.OUT を使って、64円/月/1万回通信の格安IoT sakura.ioを通じて、1コマンドでネットへ送信。 Python3 で sakura.io から WebSocket で受け取ったデータ kintone REST API で、kintone アプリに送信、グラフ化などが簡単!というシカケ。


通信モジュールを sakura.io の管理画面で登録、サービス連携として、WebSocketを設定。
ここで表示されるトークンを使います。


ドラッグ&ドロップでできちゃう、kintone上でのアプリづくり。
かわくだりゲームのスコアランキングアプリは、「文字列(1行)」でモジュール番号、「数値」でスコアを入れることにします。
設定、APIトーク、生成する、アクセス権、レコード追加にチェックをいれて、こちらのAPIトークンと、例として URL app=?? と書かれている ID を使います。

こちらPython3のプログラム、WebSocketで受け取ったデータを、kintone に送る

import http.client import websocket import json import ssl SAKURA_TOKEN = *sakura.ioのトークンを設定* KINTONE_DOMAIN = "*kintoneのドメインを設定*.cybozu.com" KINTONE_TOKEN = "*kintoneのAPIトークン" KINTONE_APPID = *kintoneのAPP ID* SAKURA_MODULE = [ { "id":"m01", "module":"*モジュールID1*" }, { "id":"m02", "module":"*モジュールID2*" }, ] def getModule(moduleid): for item in SAKURA_MODULE: if item['module'] == moduleid: return item['id'] return None def sendData(module, val): record = { "app": KINTONE_APPID, "record": { "文字列__1行_": { "value": module }, "数値": { "value": val } } } requestJson = json.dumps(record) headers = { "Content-Type": "application/json", 'X-Requested-With': 'XMLHttpRequest', 'X-Cybozu-API-Token': KINTONE_TOKEN } connect = http.client.HTTPSConnection(KINTONE_DOMAIN) connect.request("POST", "/k/v1/record.json", requestJson, headers) response = connect.getresponse() print(response.status) data = response.read() print(data.decode("utf-8")) def on_message(ws, message): data = json.JSONDecoder().decode(message) mestype = data['type'] if mestype == 'channels': module = getModule(data['module']) val = data['payload']['channels'][0]['value'] print('on_message: ' + module + " -> " + str(val)) sendData(module, val) if __name__ == "__main__": websocket.enableTrace(True) path = "wss://api.sakura.io/ws/v1/" + SAKURA_TOKEN ws = websocket.WebSocketApp(path) ws.on_message = on_message ws.run_forever(sslopt = { "cert_reqs": ssl.CERT_NONE })

*参考
レコードの登録(POST) – cybozu developer network
IchigoSoda スタートガイド — sakura.io ドキュメント
WebSocketでの通信内容の確認 — sakura.io ドキュメント


あとは受け取ったデータでグラフをつくるだけ。こちらも選択ボックスから順番に選ぶだけ、右側にプレビューがあるのでわかりやすい!


かわくだりゲーム、一番たくさんやったのはだれかなランキング!
いろんな切り口のグラフが、簡単に作って、すぐにグループ内で共有できます。


sakura.io、イベントアラートを設定しておけば、いつのまにかすごい数が通信されてしまう心配も無用。
切断アラートを使えば、電池切れや意図しないトラブルの検出もできます!

* 撮影協力、チアプログラミング 浅井さん

links
- 小学生がつくるIoTプログラム教室、サイボウズ、jig.jp、さくらインターネットが共催 - BCN+R
- はじめてのIoTデータ活用 親子プログラミングワークショップ レポート | CSAJ 一般社団法人コンピュータソフトウェア協会

JavaとJavaScriptは、メロンとメロンパンほどは違いません。
どちらもプログラミング言語、名前が似ているだけあって、使い方も似ているところも多いです。

何か得意な言語をもつと、違う言語の習得も楽々。私の場合、Javaが長いので、あまり変わりないJavaScriptは覚えやすく、ちょっと違うPython3はその違いを覚えるまでに一手間必要です。

こちら忘れがちな、Python3の文字列操作をJavaとJavaScriptとの比較と合わせて記載したものです。
結構似てます。単語単位では、英語とフランス語ほど違いがあるわけではありません。言うなれば方言程度?


Python3の短さがよくわかりますね。慣れるとJavaやJavaScriptでの文字列操作が億劫になってしまうほど!


strfuncs」 - シンプルな JavaScript 文字列操作チェックプログラム

PCNこどもプロコンの一次審査では、JavaScript, Python, Swift を使いこなしている小学生もちらほら!
ありがとう、329作品! 小中学生PCNこどもプロコン一次審査とJavaScriptで触るScratch - lib4scratch.js

links
- IchigoJamからのステップアップ - IchigoJam BASIC / Python3 / JavaScript / Java / C言語 対照表

オープンデータ伝道師への出動要請あって、新潟県妙高市へ。

鯖江市などでのオープンデータの活用を事例を交えて紹介、IoTプログラミング体験、地理院マップアプリをベースに避難所一覧2つ星オープンデータのアプリ化、SPARQL!

妙高市役所、上越市役所の皆さんと!5つ星オープンデータで、つなげましょう、上越と鯖江!


妙高市避難所一覧(サンプル)
こちら、研修内にて使った、妙高市オープンデータの避難所一覧を表示するものに、更に、今回の旅写真を加えてみました。避難所データはWordファイルで、緯度経度未記載。緯度経度地図を使って、3点ほど追加してみました。 マップアプリづくりも、IchigoJamのプログラミングを一歩先。(src on GitHub

5つ星オープンデータを手軽に実現する odp で、アプリ作成もとっても簡単に!
災害別避難所案内「ヒナンパス」は、データをいれると、即使えます。


縮小すると、上越妙高駅付近や、名物とん汁ラーメンなどの写真も置いてみました。(addIcon)


妙高市議の村越さんと!(アップいただいた、IoT研修中の動画


月額64円で実現、IchigoSoda(sakura.io x IchigoJam)でかんたんIoTプログラミング!
妙高市役所、オープンデータ担当の池田さん、とても楽しそう!


雪の上越妙高駅!雪は少ないそう。


会場は、妙高市役所。エレベーターで見かけたゆるキャラ「ミョーコーさん
胸元の馬は、雪解けとともに山に現れる、跳ね馬!
跳ね馬(はねうま)・牛形 - haneumas jimdo page!
妙高市役所最寄りの新井駅から上越妙高駅をつなぐ、妙高はねうまラインの名前の由来。


災害相互応援協定を結ぶまち、姉妹都市など、関係ある都市同士を結ぶオープンデータもおもしろそう。


松茶屋のとん汁ラーメン、一見大きなとん汁


でも、らーめんが入ってる!


唐辛子を雪にさらして、3年寝かす、薬味、かんずり!いろいろ付けておいしい!


上越妙高駅近くにあるコンテナを並べた飲食店、FURUSATTO(フルサット)


こちらにも、かんずり!特性中華ソースで食べる、地元の鳥料理が美味!(食堂酒場 酉かつ

その土地ならではの特産物、ローカルチェーンなど、グルメオープンデータ、あるといいですね!

EXIFのGPS、位置情報付き写真から、JSONデータをつくるPython3のプログラムつくりました。お手軽マップづくりがはかどります。

from PIL import Image def toDegree(v): d = float(v[0][0]) / float(v[0][1]) m = float(v[1][0]) / float(v[1][1]) s = float(v[2][0]) / float(v[2][1]) return d + (m / 60.0) + (s / 3600.0) def fixfloat(d, beem): s = str(d) n = s.find('.') if n < 0: return s s += "0000000000" return s[0:n + beem + 1] def fixnum(n, beem): s = "0000000000000" + str(n) return s[-beem:] def getExifGPS(fn): im = Image.open(fn) exif = im._getexif() for id, value in exif.items(): if id == 0x8825: # GPS gps = value lat = toDegree(gps[2]) if gps[1] == 'S': lat = -lat lng = toDegree(gps[4]) if gps[3] == 'W': lng = -lng return fixfloat(lat, 7) + "," + fixfloat(lng, 7) return '' def getExifDate(fn): im = Image.open(fn) exif = im._getexif() for id, value in exif.items(): if id == 0x9003: # DateTimeOriginal s = ''.join(value.split(':')) return ''.join(s.split(' ')) return '' def getImageSize(fn): im = Image.open(fn) h, w, c = im.shape return str(w) + '.' + str(h) import os import sys files = os.listdir('./') list = [] for f in files: if f.endswith('.jpg') or f.endswith('.JPG'): list.append([ f, getExifDate(f) ]) list.sort(key = lambda x: x[1]) if len(sys.argv) > 1: nameprefix = sys.argv[1] n = 0 for i in range(len(list)): f = list[i][0] f2 = nameprefix + '-' + fixnum(n, 2) + ".jpg" os.rename(f, f2) list[i][0] = f2 n += 1 print('[') for item in list: f = item[0] print('{ name: "' + f + '", size: [ ' + getImageSize(f) + ' ], latlng: [ ' + getExifGPS(f) + ' ] },') print(']')

光るIchigoJamバッジができました!

アイロンビーズと光る電子工作は相性、良し!


KidsVenture@児童養護施設のアイロンビーズ部屋で創られたIchigoJamバッジ!


ダイレクトにつないでもOKですが、いろんなものを接続しやすいように、WS2812B付属のコネクターを使って、着脱式にしてみます。


L字ピンヘッダーが壊れにくい。熱収縮チューブを使ってはんだづけ部分を強化しておきます。


IchigoJam側の端子、できあがり。


WS2812B、LEDテープを10コずつ、2つ切り出す。


電線でDOUT-DIN、5V、GND同士をつなぎ、DIN側に接続コネクターをはんだづけ。


ホットボンドで裏面に接着。


あとはIchigoJamでプログラムを打ち込むだけで、光る!
WS2812B x IchigoJamでエモいウェアラブル「イチゴ帽子」プログラミング入門とマシン語、舞鶴x鯖江コラボに向けて
光らせ方、自由自在!いろんな作品作れそうですね!

ブログにアップする写真、EXIFデータを消して軽くする方法 (Python3編)

pip install pillow

画像編集ライブラリ、PILをインストール

import os import PIL.Image dir = './' files = os.listdir(dir) for f in files: if f.endswith('.jpg') or f.endswith('.JPG'): with PIL.Image.open(dir + f) as src: src.thumbnail((1220, 1220), PIL.Image.ANTIALIAS) data = src.getdata() mode = src.mode size = src.size with PIL.Image.new(mode, size) as dst: dst.putdata(data) dst.save(dir + f, 'JPEG', quality=90, optimize=True)

画像サイズを1220にリサイズして、データだけ保存することで、EXIFデータが消えて軽くなる。
ちょっとした手間、プログラミングでどんどん自動化して時間創出!

links
- 広がるプログラミングと電子工作、こども、おじいちゃん、校長、そして、ギャル!見事にちょうどいいカセットテープ x IchigoJam

交流深い、鎌倉と鯖江。
鎌倉に本社を置くカヤック、社長の柳澤さんより届いた新刊「鎌倉新本主義

なんと、帯デビューというスゴイ演出、ありがとうございます!(柳澤さんによる解説

地域内最適をするほどに下がってしまうGDPという20世紀指標に替わる、地域資本のバランスという考え方とその実践が、鎌倉資本主義に詰まってました。

鎌倉資本主義提唱の地域資本を引用しつつ、新指標を勝手に名付けた「NDD」
N - 何をするか? 地域経済資本(財源や生産性) 地域内GDP?
D - 誰とするか? 地域社会資本(人のつながり) 社会的欲求、承認欲求を満たすもの?(自己実現理論より)
D - どこでするか? 地域環境資本(自然と文化) その土地の魅力?

1つ目のDは、地域通貨の流通、2つ目のDは、そこに住む人の幸福度でそれぞれ計測し、バランスと総量で比較するとおもしろそう。


カマコンバレーからカマコンとなって全国へ拡散中!
福井県鯖江市の名前も入れてもらっていました。

課題に対して理由を探るのは縦だとすると、みんなでアイデアを積み重ねるブレストは横。
縦で思考すると、横の思考が鈍るというのはなんとなく思い当たる気がします。
鯖江を楽しくイノベーションする「ブレスト」、「サバコン」としてやってみましょう!

次回、UDトークなど、多言語アプリをテーマにした鯖江市商工会議所でのイベント「あたらしもんずき勉強会 vol.3」でもブレストします。 ご都合つく方、ぜひどうぞ!

イベントの司会進行を多言語かつ自動で進めるスクリプトを作ってみました。
ひとまず、Macの標準搭載の音声合成コマンド「say」を活用したコンソール版。

時間とアナウンスして欲しい言葉を記述言語、アナウンス言語、テキストの順に書くCSVファイルを作ればOK。

0,ja,ja,英語でカップラーメンの作り方をご案内します 10,ja,en,カップラーメンにお湯を注いでください 20,ja,en,3分間の蒸らし時間に入ります 30,ja,en,10秒経過しました 40,ja,en,20秒経過しました 80,ja,en,残り2分です 140,ja,en,残り1分です 190,ja,en,10秒前 200,ja,en,カップラーメンができあがりました。どうぞお召し上がりください。

プログラムは、オープンソース、「tagengo - GitHub」にあります。
多言語翻訳アプリコンテストのアイデアやサンプル実装としてもどうぞ!
webアプリ化できると手軽に使えて便利かも。

イベントがより手軽に楽しくできるようになるツールで、地域資本主義も一歩前進!?

参考までに、多言語翻訳ライブラリを使った、Python3のプログラムはこんな感じ

import sys if len(sys.argv) < 4: print("[client_id] [clint_secret] [script.csv]") exit(0) client_id = sys.argv[1] client_secret = sys.argv[2] csvfn = sys.argv[3] from getAccessToken import getAccessToken access_token = getAccessToken(client_id, client_secret) from datetime import datetime startt = int(datetime.now().strftime('%s')) import csv with open(csvfn, newline = '') as csvfile: reader = csv.reader(csvfile, delimiter = ',') for row in reader: dt = int(row[0]) src = row[1] dst = row[2] text = row[3] if src != dst: from translate import translate text2 = translate(access_token, src, dst, text) print("time " + str(dt) + "sec : " + text + " -> " + text2) else: print("time " + str(dt) + "sec : " + text) text2 = text from time import sleep while 1: sleep(0.1) now = int(datetime.now().strftime('%s')) if now > startt + dt: break from say import say say(dst, text2)

links
- 新刊『鎌倉資本主義』の「はじめに」と第一章を全文無料公開します。 | 面白法人カヤック
- UDトーク | コミュニケーション支援・会話の見える化アプリ

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