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

7/13、弓削商船高専のある25の島からなる愛媛県上島町で開催されるサッカーフェス「U-12 PUENTE FESTIVAL」にて、IchigoJamプログラミング体験会実施します!

本フェスの主催はFC今治所属、日本代表経験もある、元プロサッカー選手、橋本英郎さん。
「子供達と最新テクノロジーで溢れる未来の上島町」に向けて、弓削商船高専協力の元、プログラミング体験イベント実施となりました。(下記、ご案内)


はじめてのゲームプログラミング in 上島町 (PDF)
フェス公式サイトと日時が異なりますが、上記が最新となります。

対象:小中学生。大人の方、先生の方の見学も歓迎です!
体験:無料、7/13(土) 13時〜18時(1回10分〜15分)
内容:LEDゲームづくり、かわくだりゲームづくり、キラキラロボ他
講師:IchigoJam開発者、福野泰介&弓削商船高専生
会場:上島町生名開発センター 2F 和室

IchigoJam (イチゴジャム) は、日本生まれの小さくお手頃なパソコン。
2020年、小学校プログラミング必修化、鯖江市では全校実施中の教材。
1500円程度 (いち、ごー) で買えて、軽やかさジャムセッションの如し。
電源を入れたら1秒で起動、シンプルだけど本格的なプログラミング環境。
テレビゲームやロボットづくり、IoT火災報知器など、可能性は無限大。
プログラミング学習用のBASIC言語を使って自分でつくって遊ぶゲーム。
学ぶ楽しさにはまったらこっちのもの。大人も子供も一緒に学ぼう最先端。
コンピューターを使った、新しい社会づくりの世界へようこそ!


主催:U-12 PUENTE FESTIVAL
企画:株式会社 B Inc. (jig.jp group)
協力:PCN弓削、弓削商船高専&高専生

海が間近な瀬戸内海、きっと魚釣りも身近だろうと作った魚釣りゲーム。

IchigoJamミニゲームズ」の「はんのうそくどゲーム」の改造版で、反応時間によって釣れるものが変わります。

大人も驚嘆、こどもも熱狂、最新VRだってプログラミングを学び、ネット環境を手に入れれば、思い通りに世界を作る楽しさに触れられます(50行マイクラ風)。

オープンデータ先進地、福井県鯖江市の小学校プログラミング教育の取り組み状況など、ご紹介できればと思うので、大人の方、先生の方、どうぞ気軽にお越しください。
総合2コマから始める鯖江の小学校プログラミング! 総合的な学習の時間、IT遊具、クラブ活動、地域ICTクラブ、高度IT人材へのベストプラクティス

2度目の上島訪問、楽しみです!(前回2016年

links
- U-12 PUENTE FESTIVAL
- 国立弓削商船高等専門学校
- こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
- 瀬戸内の夕日をバックにボックスクラフトVR、弓削商船高専マイコン部IchigoJam&VRレクチャー編
- 翌日にはプログラミングの先生に! 弓削商船高専マイコン部の高専生大活躍、サッカー少年 meets IchigoJamゲームプログラミング!+かみりんゲーム
- 360度写真でまとめる、上島町(弓削島/佐島/生名島)の記憶のVR追体験

プログラミングが大事なのは世界共通。世界各国で進む、プログラミング教育。
すでに200の小学校で採用!IchigoJamの兄弟「FunTick」は中国全土で活躍中! – about yrm

大好きなレゴテクニックシリーズを使ったマインドストームとWeDoの間に、SPIKEプライムが新登場!
同じく福井に本店を構える、アフレル社で先行体験。


SPIKEプライム、初めて開ける新しいおもちゃ、ワクワクしますね!


専用コネクタ、WeDoと形状は一緒ですが互換性はないそう。


距離センサーには秘密が隠されているとか・・・。


本体には5x5の単色階調設定付きディスプレイ。下の丸いボタンは色が変えられます。


テクニックシリーズでも見たこと無い、便利そうな新パーツ!


ひとまず、距離センサー付きミニロボ。モーターが軽快で、無理やり止めてもモーター内部でなんとかする安全設計。回転角の取得もできるので、後でこれを利用。


続いて、6つの同梱センサーとモーターを全部つなげたロボットをつくって実験。カラーセンサーでブロックの色を読み取っていろいろできます。まだ公開禁止な開発環境のベースはScratch。


完成した、階調付きドット絵ツール。カーソルの縦の座標を右のハンドル(タイヤ)で、横の座標を下のハンドルで動かし、圧力値取得できるプッシュボタンで描画します。
ハードウェア的なユーザービリティをあれこれ自由に試行錯誤できるのがレゴテクニックシリーズゆずりのいいところ!
プログラムを転送してしまえば、microUSBケーブルは外して自分だけのモバイル機器のできあがり!


北京淡路島帰りのまったさんが作ったオルゴールマシン!
レゴブロックをつないで作曲、モーターでブロックをレールにそって動かしカラーセンサーで読み取って鳴らす。超有名な曲を奏でてました。


アフレル本社がある永和システムマネジメントの1Fには、Agile Studio Fukui
mruby x IchigoJamRuby on IchigoJam board で、福井発のアジャイル組み込み開発とかどうでしょう?


(撮影、アフリカ プログラミング教育ツアー2019を発表した、PCN/ict4e 原さん)
何故か熱い、福井のプログラミング!

カムロボで活躍中、IchigoDyhookでますます活躍広がる予定のIchigoDake。
お家にIchigoJamがある人は、それを活用してIchigoDakeのプログラミングもできちゃいます。
工作したものを設置(=デプロイ)したいけどもうちょっと小さくしたかったり、使わない端子がもったいない時に活用ください。

ランダムな光にぼんやり光らせるプログラムの例。
(ver 1.4搭載予定の WS.LED コマンド&ボタン押さなくていい自動起動 @ARUN 使用)


IchigoDakeをIchigoJamで使うには、ジャンパー線が7本あればOKですが、抜き差ししやすい変換基板を作ってみるのも楽しいです!
(7本:VIDEO1, VIDEO2, GND, VCC, KDI1, KBD2をIchigoDake-IchigoJam間でつなぎ、IchigoJamのRESET-GNDをつなげばOK)


RESET-GNDをつなぐ治具づくり。抵抗を使うとやけどの心配が少なく、楽。


IchigoDakeのRESET-GNDはIchigoJamにつながないのでカット。


IchigoJamのREST-GNDを接続して無効化しておくのがポイント。上の基板と接してしまうと、IchigoDakeもリセット状態になってしまいます。


IchigoDakeを単体で動かすための電源モジュールも最小構成で作りました。
USBのソケットに電池2本のスイッチ付きケースをつなぐだけ。


今回はWS2812Bを制御するために3ピンソケットを装備。


IchigoDakeの右側につないでスイッチON、光りました!


和紙を貼るため、両面テープ。


和紙を竹型にカット。


光る竹


暗いところで見るとなかなか幻想的。明かりの量が足りなければLEDを追加して、例えば5つ光らせたい時は WS.LED 1,5 とすると5つまとめて同じ色で光る。


見た目はほとんど同じな、ツェナーダイオードとショットキーダイオード。
電圧を落としたい時に使うのは、ツェナーダイオード。電力に余裕のあるCN5の5Vを使って光らせたいけど、3.3Vの信号線では規格外。そんな時は5Vをダイオードで少し電圧を落とす時に使います。

不審者アラームを作ってみよう!
通るはずのない時間、場所に設置して、人影を察知したら鳴らす非常ベル!IoT化するのもいいですね。


照度センサ(フォトトランジスタ)45円のものも)を使います。
長い足をBTNへ、短い足をGND、VCCから長い足へ抵抗でつないでできあがり。
抵抗をいろいろ変えて試したところ、10kΩがいい感じ!


ブレッドボードも使わず、はんだづけもしない接続と言えば、ジャンパーピン!
長い足と10kΩの抵抗の片方を差し込みできあがり!
(ジャンパーピンはお安い! 25個100円1000個1600円2000個1600円


OUT4をGNDとして使うことにして短い足を指し、長い脚をANAで読み取るためにBTNに、抵抗の反対側をVCCに指す。

10 ?ANA():CONT

明るさで値が変わることが確認できます!(明るいと200、暗いと800とか、真っ暗で1000くらい)


仙台梅澤無線で購入したベル、特価100円!


手元にあったリレー(40A対応、SSR)を使って不審者アラームを作ってみよう。
こちらははんだづけが必要。早速抵抗まちがえてつけました。R1につけるべき330Ωを、R2に付けちゃってます。焦らず説明書を読みましょう。


40A版は基板に直接指さらないので、抵抗の切れ端を使って接続。
(今回のベルなど電力消費量が大きくないものは、基板に実装可能な、20A版でもOKです)


ベルも接続して、プログラム。常に明かりが点けている場所を想定、一瞬でも暗くなったらアラーム!

10 IF ANA()<500 CONT 20 OUT 1,1 30 WAIT 60*60 40 OUT 1,0

OUT1に接続したベル、1分たったら止めます。
・・・でも、このベルの音量とんでもなく大きいので、実際フルで鳴らすことができていません。


裏を見たら100Vで動くソレノイド。60Hzで強烈に叩いて音がでているわけです。明和電機の力の源ですね。


DAISOの単3電池用モバイルバッテリーは、電流が多く取れて便利ですが、電池が外しにくいのがネック。そこでペンチ!
真ん中のプラスチックの仕切りを挟んで・・・


ぐっとひねれば取れます。これで電池も取り外し楽!


充電可能な電源ボード、JuiceServerを使ってみます。

大きい迫力、リアル信号機をIchigoJamで制御している羨ましい姿を発見!
赤から黄色に変わって青になる、そんな信号もあったりします。
めちゃめちゃな動きをさせてもおもしろそう!

MSXを使っていた頃から好きなライフゲーム、原題、Conway's Game of Life
2012年の一日一創でも3作品、チェックボックス3レイヤーアート
今回は異次元デバイス、Oculus Quest向けにライフゲームを3D/VR化、新パターン探索が楽しいです!


LifegameVR」Game of Life 3D/VR by @taisukef
トリガーで置いたり消したり、グリップで時間を動かしたり止めたり、Aボタンでランダム、Bボタンで全消しする。
50行マイクラ同様、コントローラーによる直感的に操作できるのが魅力。
PCやスマホでは、画面クリックやタッチで、ランダムのみ操作可能。

ライフゲーム3D - 生死のルール
1. 3次元空間上のある点の生死は、3軸それぞれ-1〜1、自分を含め合計27個の生命によって決まる
2. 自分を含め上下左右前後の生命は重みを1、それ以外を0.5として合計を求める
3. 合計値が3以上3.5以下であれぼその点は生き(または誕生)、それ以外であれば死ぬ

Game of Life 3D by @ taisukef - Rules of Life and Death
1. The life and death of a certain point in a three-dimensional space is determined by a total of 27 life, from -1 to 1 for each of 3 axes, and oneself
2. The life on the top, bottom, left, right and back including yourself is calculated with a weight of 1 and the other 0.5
3. The total value is 3 or more and 3.5 or less, the point is alive (or birth), otherwise it dies

3x3x3、27点全部同じ重みで調整するもカオスから抜け出せず、上下左右前後だけでは増殖していかないので、シンプルな重み付けをしたところいい感じの生命感がでた。2次元ライフゲームでのパラメータ、3以上4以下を使うと、発散しすぎる。


遊んでいる様子。4つの四角は安定。箱の隣にひとつ置くとその方向に動かせるのがおもしろい。


DNAもプログラミングする時代に突入。生命は驚くほどコンピューターに近い。
遺伝暗号コドンの衝撃、生物は超小型2bitコンピューター!? 食べるをハックする蛋白質DNA編
ハードウェアなので、記述言語はVerilogベースとのこと。2bitコンピューターとも言える生命、多値トランジスタの実現がシミュレーションを加速してくれるかも。

コンピューターサイエンスは、人間自身、生命自体を見つめる科学でもある。

データで遊ぼう!

山口県工業技術センターにて開催「衛星データ解析技術研究会」にてオープンデータ特集。
オープンデータと宇宙データを組み合わせると、ますます楽しく遊べます。

自治体5つ星オープンデータ化を支援するodpなど、5つ星オープンデータの広まりを心待ちにしつつも、いますぐプログラミングして遊べる楽しいこと、はじめましょう!


Tellusで使える2010年3月〜2018年7月末までの降雨量データ、緯度経度共に0.1度の精度で降雨量が分かります。これを使って宇部市、常磐公園や宇部高専あたりの晴天率を調べてみました。

2018年6月の晴天率は、60%とでました。
Tellus OSでもチェックできますが、プログラムにするといろんな場所を自動的にチェックできて便利です。

こちらが計算するのに使った、Jupyter Notebookで動かすPythonプログラム。

TOKEN = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" import os, json, requests, math from skimage import io from io import BytesIO import calendar import matplotlib.pyplot as plt %matplotlib inline def get_image_GSMaP(date, xtile, ytile): sname = "GSMaP" zoom = 5 url = "https://gisapi.tellusxdp.com/{}/{}/{}/{}/{}.png".format(sname, date, zoom, xtile, ytile) print(url) headers = { "content-type": "application/json", "Authorization": "Bearer " + TOKEN } r = requests.get(url, headers=headers) return io.imread(BytesIO(r.content)) def ll2tile(lat, lng, z): w = math.pow(2, z) / 2 yrad = math.log(math.tan(math.pi * (90 + lat) / 360)) return [ (lng / 180 + 1) * w, (1 - yrad / math.pi) * w ] def get_pixel_GSMaP(date, lat, lng): tile = ll2tile(lat, lng, 5) img = get_image_GSMaP(date, math.floor(tile[0]), math.floor(tile[1])) return img[math.floor(tile[0] * 256 % 256)][math.floor(tile[1] * 256 % 256)] def calc_fine_ratio(y, m, lat, lng): cnt = 0 _, ndays = calendar.monthrange(y, m) for d in range(1, ndays + 1): date = "{:0=4}-{:0=2}-{:0=2}".format(y, m, d) rgba = get_pixel_GSMaP(date, lat, lng) #n = (rgba[0] << 24) | (rgba[1] << 16) | (rgba[2] << 8) | rgba[3] n = rgba[3] print(date, n) if n < 255: cnt = cnt + 1 return cnt / ndays calc_fine_ratio(2018, 6, 33.931245,131.277600)

緯度経度からタイル座標への返還は、こちらJavaScriptのプログラムを参考にしています。


PCN山口代表のコヤマさんにも会えました!宇部高専生によるPCN宇部との連携、はじまります!


さくらインターネット、小笠原さん、牟田さんとも楽しいパネルディスカッション。


講演資料オープンデータ「オープンデータと宇宙データで地域活性化(PDF)


日本の衛星、だいち2号(ALOS-2)の1/3スケール模型。この子が宇宙からデータを届けてくれているんですね!
1/1スケール模型、Oculus QuestでぜひVR表示させたいところ!3Dオープンデータ探します。


山口名物、瓦そば!
瓦そばオープンデータがあったら、衛星データと組み合わせて、どんなアプリを作りますか?
こどももおとなも、レッツ、プログラミング!

徳山高専生まれの教育用コンピューターTeC & 福井高専生まれのこどもパソコンIchigoJam。
どちらもガチなコンピューターサイエンスを、はんだづけから学べます!

元徳山高専で、現福井高専校長の田村さんも推薦、開発者の重村先生!なんと、参加した高専プロコン函館大会時の担当をされていたとのこと。高専プロコンを紹介してくれ、卒検の担当教官でもあった福井高専の斉藤先生と大学時代の同期だったとのこと!良い縁に感謝です!
重村研究室へようこそ 」(プログラムや教科書も on GitHub


新幹線徳山駅からレンタカーを借りて、徳山高専に到着!


徳山高専の正門すぐの池に設置されている謎装置。ソーラーで発電し水を汲み上げている模様。藻の繁殖を防ぐ効果?


大きなコイやメダカ、元気でした!


徳山高専生!


学食でVR


3世代揃ったTeC。コアは、XilinxのFPGA、Spartan-2で始まりSpartan-6! おそらく全国で高専で一番、マシン語を深く学習する高専、徳山高専。熱い!


安価で入手可能なビデオカセットのケースのサイズで決まった基板サイズ!アセンブリ言語の命令表がケース内面に貼ってある!
ワラビモ長者 Warabimochoja 徳山高専教育用計算機の歴史について聞く - YouTube


高専はしご、高速を使って1時間ほどで、宇部高専に到着!


元寮を使った部室が集う建物、クラブハウス!うらやましいっ


IchigoJam / IchigoSodaを使ったIoTプログラミング、ミニ講座、受けてもらいました。

IOT.OUT 1 OK ?IOT.IN() 1

こちらが簡単16bitの数の送受信ですが、

S="abcdef":IOT.OUT S,8 OK ?STR$(IOT.IN()) abcdef

こんな風に、パラメータを2つ使ってデータをまとめて送信する機能に、受けとったデータを文字列として返す機能もあるので、メッセージのやりとりもできちゃいます!
ichigojam-1.4.0b02.zip」 ベータ版ダウンロード


顧問の江原さん、初Oculus QuestのVR!ベジェ曲線、知っているほどに楽しい。VRはここでも大人気!
まずはみんなつくってみたいゲーム。JavaScriptでつくる3D/VRのゲームも楽しいよ。チャレンジしてね!
#VR - 一日一創


小学生にプログラミング教えてみたい!PCN宇部も誕生!
「教える」は良い「学び」。教材や、キット、プログラムをつくって、ベーマガへの投稿や、PCNでの販売にもチャレンジしてねっ!


活躍楽しみな、宇部高専コンピュータ部
コンフェスに向けてがんばろー!
人気の音ゲーづくりもやってみますね。
いったことある高専キャンパス数が2増えて、34になりました!

- 楽しく深いプログラミングカリキュラム案 IchigoJam編 (各コマ90分、演習は長めでもOK)

1. プログラミング入門 (IchigoJamのみ使用、一部IchigoSodaがあるといい)
1-1. はんだづけしてコンピューターづくり
1-2. BASICでエルチカ&ゲームプログラミング 90分(小学校実施例
1-3. IoTプログラミングと電子工作(京都造形芸術大学実勢例
1-4. 演習、リファレンスを見て自由製作

2. コンピューターアーキテクチャ入門 (IchigoJamのみ使用)
2-1. マシン語プログラミングとハンドアセンブル(連載
2-2. コンピューターのアーキテクチャ(ALU、メモリ、メモリマップトI/O)
2-3. コンピューター内蔵フルカラーLED、WS2812Bを制御してみよう
2-4. 演習、マシン語を使った自由製作

3. コンパイラ入門 (IchigoJam + PC使用)
3-1. マシン語をプログラムで生成、コンパイラ入門とPCとの接続
3-2. C言語というコンパイラを使ってIchigoJamゲームづくり(c4ij
3-3. 逆アセンブルして、C言語の動きをチェック!
3-4. 演習、C言語を使った自由製作

4. ネットワーク/IoT入門 (IchigoJam + PC使用)
4-1. IchigoJamを2台つないでネットワークづくり (ジャンパーで接続)
4-2. クライアント、サーバーアーキテクチャーでネットワークゲームづくり
4-3. IchigoJamで環境計測して、PC上でCSV化、Excelでグラフ化
4-4. 演習、社会課題を解決する自由製作

宇宙データプラットフォームを使った分析はじめ、続いては、お気に入りデバイス Oculus Questと組み合わせます。
2.5mの分解能で宇宙から標高を計測する、ALOS-PRISM。Tellusの開発環境、Jupyther Notebookを使って富士山付近のデータをエクスポートして、VR表示しました。


VR fujisan
マイクラでリアルなマップを再現したい夢、データとプログラミングを使えば簡単に叶います!

作り方
1. Tellusに、Jupyther Notebook か Jupyter Lab を利用申請。
2. 富士山の位置のメッシュを調べる。(タイル座標確認ツール
3. Jupyter Notebook上、Pythonでプログラムをかく

TOKEN = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" import os, json, requests, math from skimage import io from io import BytesIO import matplotlib.pyplot as plt %matplotlib inline def get_image(zoom, xtile, ytile, opacity=1, r=3, g=2, b=1, rdepth=1, gdepth=1, bdepth=1, preset=None): sname = "aw3d30" url = "https://gisapi.tellusxdp.com/{}/{}/{}/{}.png?opacity={}&r={}&g={}&b={}&rdepth={}&gdepth={}&bdepth={}".format(sname, zoom, xtile, ytile, opacity, r, g, b, rdepth, gdepth, bdepth) if preset is not None: url += '&preset='+preset headers = { "content-type": "application/json", "Authorization": "Bearer " + TOKEN } r = requests.get(url, headers=headers) return io.imread(BytesIO(r.content)) img = get_image(10,906,404) io.imshow(img)

富士山の標高データが画像で表示されます。
4. RGB値が最高になっているようなので、最大値を求めてみる(きっともっとシンプルに書けます)

max = 0 for d in img: n = (d[0] << 16) | (d[1] << 8) | d[2] if n > max: max = n print(max)

結果

12766

富士山の高さは3766mなので、9000ずれた1m単位だと推定。 5. 試しにテキストで表示してみる

for y in range(256): for x in range(256): d = img[x,y] n = (d[0] << 16) | (d[1] << 8) | d[2] n -= 9000 n /= 4000 n = math.floor(n) print(n,end='') print()


それっぽい。
6. JavaScript用に配列データとして出力

h = [] for y in range(256): for x in range(256): d = img[x,y] n = (d[0] << 16) | (d[1] << 8) | d[2] n -= 9000 h.append(n) print(h)

このデータを、fujisan-data.js として保存して、JavaScriptでWebVRを使ったVRアプリをつくって、できあがり!

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>VR fujisan - data by Tellus</title> <script src="https://aframe.io/releases/0.9.1/aframe.min.js"></script> <script src="https://fukuno.jig.jp/app/webvr/fujisan-data.js"></script> </head> <body> <script>"use strict" window.onload = function() { var scene = document.querySelector('a-scene') const r = 1 const rw = 4 // sampling rw * rw const bw = 256 // org data sampling w and h const w = bw / rw let map = [] for (let i = 0; i < w * w; i++) { const x = i % w const y = (i / w) >> 0 const p = x * rw + y * rw * bw const n = HEIGHT[p] map[i] = n } for (let i = 0; i < map.length; i++) { const x = i % w const y = (i / w) >> 0 const h = map[i] * 0.0005 let box = document.createElement('a-box') box.setAttribute('position', { x: (x - w / 2) * r, y: h / 2 * r - 7, z: (y - w / 2) * r }) box.setAttribute('depth', r) box.setAttribute('width', r) box.setAttribute('height', r * h) scene.appendChild(box) } } </script> <a-scene id="scene"> <a-sky color="#000000"></a-sky> <a-light color="blue" position="1 0.1 0.5"></a-light> <a-light color="cyan" position="0.1 4 2"></a-light> </a-scene> </body> </html>

縮尺は適当なのでリアルな富士山ではないですが、これで怪獣や巨人になった気分で富士山付近を歩けます。
VR x Tellus、楽しいですよ!

links
- VRではじめる現代HTML入門 - Oculus Quest x 福井高専生
- 50行で作るVRマイクラ風 / boxcraft for Oculus Quest with A-Frame
- モバイル時代こそバス! つつじバスロケVRビジュアライズ - リアルタイムオープンデータ x Oculus Quest
- 異次元の分かりやすさ、触って学ぶVR数学、ベジェ曲線編 on Oculus Quest

600万円、これは世界一高い参議院選挙立候補に必要な供託金(市議選は30万円)。
第25回参議院選挙の投票日は7/21。 前回投票日の2016年7月10日の投票所と人の流れをTellusで見てみました。


Tellus ver 1.1 によって追加された、位置情報データ「Profile Passport」を使って、投票日7/10の10時時点(日本時間はUTC+9時間)を品川区の5つ星オープンデータ、投票所と組み合わせて表示した図。 もう一歩分解能がほしいところですが、投票所への人の流れがわかるかも?通常の日曜日との比較なども可能です。


鯖江市の選挙ポスター掲示場、オープンデータと宇宙データ、だいち(ALOS)のセンサーAVRIR-2による植物活性度を重ねたもの。鯖江市の東側、自然豊かな場所にあることが一目瞭然。


Tellusを使った分析は、Jupyter Notebookや、後継サービスJupyter Lab上のPythonで行います。
5つ星オープンデータを集約する opendata.cc のAPI、SPARQLを呼び出し、GeoJSONにしてpostするとTellus上の「取り込みマップ」として表示できます。

API_TOKEN = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # Tellus マイページ、APIアクセス設定で生成したトークン import json, requests, urllib.parse URL = "https://api.tellusxdp.com/v1/geojson-files" def get(id = ""): return requests.get(URL + "/" + id , headers = { "Authorization": "Bearer " + API_TOKEN }).json() def post(data): headers = { "Authorization": "Bearer " + API_TOKEN, "Content-Type": "application/json" } return requests.post(URL, headers = headers, json = data).json() def delete(id): return requests.delete(URL + "/" + id, headers = { "Authorization": "Bearer " + API_TOKEN }).json() SPARQL_ENDPOINT = "https://sparql.opendata.cc/data/sparql?output=json&query=" def sparql(query): url = SPARQL_ENDPOINT + urllib.parse.quote(query) return requests.get(url).json() def toGeoJSON(res): fs = [] for d in res["results"]["bindings"]: f = { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ d["lng"]["value"], d["lat"]["value"] ] } } if "name" in d: f["properties"] = { "name": d["name"]["value"] } fs.append(f) return { "type": "FeatureCollection", "features": fs } def addLayer(rdftype, layername): gj = toGeoJSON(sparql(""" select ?uri ?name ?lat ?lng { ?uri <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <""" + rdftype + """>. optional { ?uri <http://www.w3.org/2000/01/rdf-schema#label> ?name. } ?uri <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat. ?uri <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?lng. } """)) #print(gj) post({ "originalName": layername, "transparency": 1, "windowNumber": 1, "data": gj }) addLayer("http://odp.jig.jp/odp/1.0#Polls", "odp 投票所") addLayer("http://odp.jig.jp/odp/1.0#PosterPlace", "odp 選挙ポスター掲示場") print("ok")

rdftypeに設定するデータ種別と対応地区は「5つ星オープンデータ対応一覧表」をご参照ください。


Tellus x オープンデータ、いろいろ遊んでみましょう!

福井高専1年生からリクエストあって、プログラミング入門。
HTMLで3D空間は思いのまま!JavaScriptを使ったオリジナルwebアプリで自慢しよう!

1. 締切は守る
2. まず自分で調べる
3. 失敗するほど成長する


3D HTML入門でテンション上がる、福井高専生

作ってみたいもの、作りたいもの、とりあえず勢い、なんでもいいので、いろいろチャレンジ!
やればやるほどやりたいこと、やると楽しいことが見えてくる。


Webアプリはじめのいっぽ HTML+JavaScript
50行でつくるVRマイクラ風、IoT、スマホのゲームもHTMLとJavaScriptを使えば作れちゃう!
大文字小文字の違い、空白の有無に気をつけて!


3D雪だるまづくりでHTML入門を追え、次はJavaScript!ゲームに必須な Math.random() でググり方を体験したら、オリジナルサイコロアプリづくりに挑戦。 画像づくりの制限時間5分。締切は、過ぎたら0点というゲーム!


The-Dice」 by 福井高専学生
開いたら1から6までの目が出る。PCでもスマホでもゲーム機でも動く、立派なwebアプリ。


GitHubはじめのいっぽ
作ったwebアプリは、じゃんじゃん公開していこう!GitHubのアカウントをつくって、初アプリをコミット!

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