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

マイクロソフトのWebサーバーは、1996年、ASP(Active Server Pages)という技術からスタート。 Windows Script Host として、VBScriptというスクリプト言語でサーバーアプリケーションが作れます。

なんと、VBScriptの互換でマルチプラットフォームな「OpenVBS」がナチュラルスタイルから登場!
さすが、ZOZOを支える福井の企業!
ZOZO / NaturalStyle ~ZOZOを作っています~ | Natural Style

早速動かしてみます。

cat > test.obs WScript.ECho "HELLO!"

そして、実行

penb test.obs HELLO!

なんと、ASP風も動きます。

cat > webserver.obs osp = new OpenASP osp()

webサーバーアプリケーション用のコードはこれだけ

penb webserver.obs bindto: 0.0.0.0:8000. Press ENTER to stop server.

http://localhost:8000/test.osp を開けば、wwwroot/test.osp がサーバーで実行され、ブラウザで表示されます。
WebSocketでつながりサーバーとのリアルタイム通信もできる test.osk のシンプルなコードがすごい!
Windows, Mac, Linux で動きます!

ASPはC++で簡単に拡張できるのがポイント。COMコンポーネントを作って、CreateObjectで生成する仕組みもちゃんとあります!

懐かしついでに、かつてよく作ったアクセスカウンターをOpenVBS用COMコンポーネントとして作ってみました。

COM-COUNTER (src on GitHub)

C++との接続部分の COUNTER.cpp の一部はこんな感じ。必要な部品はサクッとつくって、BASICをグルー言語、のりのように使うのもいいですね。 久々に使った、iostreamとオーバーライドされたアロー演算子!

HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId){ if (_wcsicmp(*rgszNames, L"Inc") == 0){ *rgDispId = 0; } else if(_wcsicmp(*rgszNames, L"Dec") == 0){ *rgDispId = 1; } else if(_wcsicmp(*rgszNames, L"Get") == 0){ *rgDispId = 2; } else if(_wcsicmp(*rgszNames, L"Reset") == 0){ *rgDispId = 3; } else { wprintf(L"###%s: Implement here '%s' line %d. (%ls)\n", __func__, __FILE__, __LINE__, *rgszNames); return DISP_E_MEMBERNOTFOUND; } return S_OK; } HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { if (dispIdMember == 0) { n++; save(); } else if(dispIdMember == 1) { n--; save(); } else if (dispIdMember == 2){ pVarResult->vt = VT_I8; pVarResult->llVal = n; } else if (dispIdMember == 3){ n = 0; save(); } else { return DISP_E_MEMBERNOTFOUND; } return S_OK; }

VBScriptは、MSXでも使われた Microsoft BASIC、Windows用に広く使われる Visual Basic の血を受け継ぐBASIC系言語。 BASICならいける!という方、サーバー側プログラムにもチャレンジしやすい環境が誕生しそうです!

WScript.Echo という文字が懐かしく、昔書いたVBScriptのプログラム探してみましたが見つからず。合わせて使えた ほぼJavaScriptな JScript の方を使っていたようです。 後のHTML5となるマイクロソフト提唱 dynamic HTML と後にJavaScriptに取って代わられた Java Appletを使って、サーバーとのリアルタイム通信であれこれ遊んでいた90年代、webの世界は広がりましたが、ベース技術は変わってませんね。

ソースコードがコンパクトかつCC BYのオープンライセンスなので、プログラミング言語の学習、web技術の学習、オレオレ言語、オレオレプラットフォームづくり、C++を使った限界までパフォーマンスを引き出したい人にもオススメです!

Let's start OpenVBS!

2012年からスタートした一日一創、地味に活躍しているアプリを発見、その名は「パスワードメーカー」
ご要望にお応えして、紛らわしい文字を除く機能を追加した新バージョンです!

パスワードメーカー
開いた瞬間、生成したパスワードを選択した状態になるので、即時にコピー(Ctrl-C / Command-C)できます! 使う文字種、長さ、設定はURLに反映されるので、お好きな設定でブックマークしておくと便利です。

パスワードの強さはどう決めたらいいでしょう?

オンラインサービスのパスワードは何度か間違えるとロックされるので、そこまで気にしなくてもよかったりしますが、パスワード付きのExcelやzipファイルは要注意です。 何度間違えてもペナルティーがないので、力技の全探索が可能です。解読されるリスクを計算してみましょう。

例えば、数字4文字だと10の4乗、つまり1万通りのパスワードになります。IchigoJamのCPUでさえ1秒で5000万回計算できるので一瞬です。

数字を20文字まで伸ばすと10の20乗通り、全探索するのに、1秒に1兆回(10の12乗)試行できたとしても、10の8乗秒 = 10億秒 = 約30年かかる計算です。なかなか強くなりました。(ざっくり1日は10の5乗、1年は10の8乗と覚えておくと便利)

ただ、油断半禁物です。30台使えば1年、3万台使えば1日で解読できてしまいます。誰でも数千台とかを一時的に借りられるクラウド時代、非現実的な手段とは言えません。

オススメは、今回アプリの初期設定、アルファベット小文字、先頭は大文字の20文字。そこそこ短さながら10の27乗。1日で解読するためには3000億台のコンピューターがいるクラスです。大文字小文字を混ぜてほしいシステムにも対応。どうしても記号や数字が必要な時用にオプションもあり。

それでも、まだ不安な方のために、どーんと100文字設定を準備しました。10の100乗、記号などを含めると10の151乗までになるので、国家レベルどころか、全宇宙中のリソースを持ってしても現実的な時間で破ることはできないでしょう。(・・・と思いましたが、そもそも本プログラムの場合、乱数の品質で頭打ちです。強い乱数に関してはまた改めて)


パスワードメーカー」旧バージョン
こちら元になった2012年バージョン、そのまま残しておくことにしました。

パスワードメーカー」新バージョン
依存ライブラリがない、単一HTMLで動くシンプルでオープンなライセンスによるオープンソースなので、安全を自分でご確認いただけます。 また、自由に改造、再配布が可能なので、かわいくするのも、かっこよくするのも自由自在!

「ストップ、パスワードのつかいまわし」
自分の身は自分で守ろう、情報セキュリティの啓蒙用にもどうぞ。

links
- 一日一創 2012

ベーマガ&電子工作マガジン、最新号発刊!
楽しそうな IchigoJam BASIC のプログラムの数々。小学校現場の声から生まれた新型IchigoJam、IchigoDyhookがマンガで紹介されてます!

楽しそうな画面、ムーンレスキューはプログラムも1KB以内でコンパクト、オールBASICでわかりやすく打ちやすい。遊んだ後も、豊富な解説を参考にいろいろ改造して遊んで二度おいしい! (電子工作マガジン2019年秋号 別冊付録付き


こちらは1Kプログラムx4で、4kbyte使ったRPG!
豪華3Dアニメーション付きのRPGもプログラムの基本や構造は一緒。
最大132KB使ったプログラムがかけるEEPROMを使うのもありです!
ちょっと長めのプログラムも、部分的に動かして遊びながら打ち込んでいくのも勉強になって良いですよ!
作者への思いを巡らせながらのプログラミング写経。作れる幅を広げる伝統ある学習方法です。


ハードウェアと親和性高い、実機版IchigoJamがイチオシですが、学校のコンピューター室や、PCを持っている子供や大人への体験版として IchigoJam ap、最新1.4β版を用意しました。

IchigoJam 1.4β12
- IchigoJam ap 追加(for Windows / for Mac)


IchigoJam-FANで話題のライフゲームを使った比較動画ですが、ap、メチャクチャ速い!

10 CLS:VIDEO3 20 FORI=1TO50:LCRND(14)+1,RND(10)+1:?CHR$(1):NEXT 30 FORI=#911TO#9A1STEP16:FORJ=ITOI+13 40 A=PEEK(J-17)+PEEK(J-16)+PEEK(J-15)+PEEK(J-1)+PEEK(J+1)+PEEK(J+15)+PEEK(J+16)+PEEK(J+17) 50 IF A=2 B=PEEK(J) ELSE B=A=3 60 POKEJ+192,B:NEXT:NEXT 70 COPY#900,#9C0,192:IF INKEY() RUN ELSE GOTO30

キーを押すともういちど!
ランダムの代わりに、有名で動きがかわいいパターン、グライダーにするプログラムはこちら

20 LC1,3:?CHR$(1,1,1,LEFT,UP,1,LEFT,LEFT,UP,1)

どのくらい速いのか、ベンチマークしてみたところ、IchigoJam 1.4β12、LPC1114での実機版と180倍違いました。 IchigoJamのArm Cortex-M0 48MHzとMacの Intel Corei5 2.3GHzで、58倍。画面描画で速度が3分の1程度になっていることを加味すると計算ぴったり。


小学生の内に自分のパソコンを持ってほしい!
「じぶんでつくる、じぶんのパソコン IchigoJam」起動時にPRしてみました。
IchigoJam ap β版、いろんな環境での動作報告、お寄せいただけるとうれしいです。
IchigoJam-FAN - Facebook

ruby4ijを早速使っていただきました!「風船 Ruby 版 (ruby4ij)/Kidspod;

ただ、なかなかにやっかいな開発環境づくり。開発するために必要なツールが多く、それぞれがバージョンアップするので環境構築方法が変わってしまったりして鬼門です。 そこで便利なweb技術。クラウド処理もありですが、IchigoJam web でも使っている、エッジ技術、WebAssemblyを使ったパパっと手元で軽快動作を目指します。

手始めに、こちら学習用ミニCコンパイラ「ci0」を移植して作った「webci0

webci0 - mini C compiler ci0 in WebAssembly
C言語風に書いたプログラムをスタックマシンなVM用マシン語に変換、インタプリタとして実行します。標準関数は文字列表示のputstrと数表示のputnumのみ。メイン部分は500行ちょっとのオープンソース、いろいろ改造して遊んでみましょう!

WebAssembly用に標準ライブラリ系を準備して、clang, llvm-link, llc, s2wasm, wat2wasm の手順でコンパイル。16KBのWebAssembly用バイナリ ci0.wasm ファイルができあがり!(参考、WebAssembly開発環境 WABTコンパイル用シェルスクリプト

printfは「Linuxをはじめよう!:printfを自作してみる」を使わせてもらいましたが、WebAssembly環境で複数の引数の時にうまく動いていないので ci0.c では回避策をとっています。

ブラウザ上のコードエディタとして Ace を使用。快適に動作するので、普段使う標準エディタにしてもいいくらい! カラーテーマも「Ace Kitchen Sink」からC言語のハイライトに合う感じのものを選んでみました。

ci0のスタックマシンはWebAssemblyのマシン語ともよく似ているので、WASMコンパイラとして育てるのもおもしろそう!
Cコンパイラを作ってみたい人、自作言語を作ってみたい人、WebAssemblyでの開発、オススメです!
(WASM、現時点では、goto非対応、例外非対応な点に注意!)

WebAssemblyマシン語入門
- ブラウザだけでOK! 1+1からはじめる、WebAssemblyマシン語入門その1
- プログラミングはプログラミングで楽をする、WebAssemblyマシン語入門その2
- もっと楽するコンパイラ、WebAssemblyマシン語入門その3

マシン語が分かると楽しいC言語!
IchigoJamで楽しむC言語「c4ij」を最新API対応のバージョンアップ!

1セクター4KB、8セクターで32KBあるIchigoJamの内、2セクターを使って、最大7KBものマシン語プログラムを書き込んで、BASICから呼び出すことが可能です。

デモとして、WS2812B/WS2811用のドライバ呼び出しを使って色相環をぐるぐるまわすプログラムを作りました。

IchigoJam BASICで書いたHSV2RGB変換をC言語に移植!
割り算処理は、IchigoJam OSに含まれるものを使って、省メモリ化してます。

#include <std15.h> /* 100 @HSV2RGB:R=V:G=V:B=V:IF S=0 RTN 110 D=H/60%6:C=V-(59-H%60)*V/60*S/100:E=V-H%60*V/60*S/100:F=V*(100-S)/100 120 IF!DG=C:B=F 130 IFD=1R=E:B=F 140 IFD=2R=F:B=C 150 IFD=3R=F:G=E 160 IFD=4R=C:G=F 170 IFD=5G=F:B=E 180 RTN */ static void hsv2rgb(int h, int s, int v, uint8_t* grb, uint64_t (*divfunc)()) { int r = v, g = v, b = v; if (s == 0) return; int d = divfunc((uint32_t)divfunc(h, 60), 6) >> 32; int hmod60 = divfunc(h, 60) >> 32; int c = v - (uint32_t)divfunc((59 - hmod60) * v * s, 6000); int e = v - (uint32_t)divfunc(hmod60 * v * s, 6000); int f = (uint32_t)divfunc(v * (100 - s), 100); if (d == 0) { g = c; b = f; } else if (d == 1) { r = e; b = f; } else if (d == 2) { r = f; b = c; } else if (d == 3) { r = f; g = e; } else if (d == 4) { r = c; g = f; } else { g = f; b = e; } grb[0] = g; grb[1] = r; grb[2] = b; } __attribute__ ((section(".main"))) int main(int param, int ram, int rom, uint64_t (*divfunc)()) { const int v = 50; const int n = 20; uint8_t* grb = (uint8_t*)(ram + 0x800); int h = 0; for (;;) { for (int i = 0; i < n; i++) { hsv2rgb(h + i * 5, 100, v, grb + i * 3, divfunc); } ws_led(3 * n, grb, GPIO_OUT1); if (inkey() == 27) break; h++; } return 0; }

新API、ws_ledを使って多数のWS2812Bを高速制御!最大輝度50(=v)で、20コのLEDを5度ずつまわす色相環。ESC(=27)が押されたらマシン語からBASICへ処理を戻します。64bitで返すことにして使うdivfuncは、上位32bit(=R1)があまり、下位32bit(=R0)が除数となります。

このコードで256byteをちょっと超える感じ(追記、hsv2rgbをstatic関数にすることで下回りました。Thanks > @fujitanozomu さん)。#700-#8FFまでを使った512byteまではプログラムに含められます(make poke)。それ以上はFILE1〜3の領域を使って、3KBまでのプログラムで書き込みます(make write)。 SAVEするのを諦め、まるっと残り7KB使ったプログラムづくりも可能です。(bas2bin機能をc4ijに統合しました)

IchigoJamで容量不足や、速度不足を感じて来たときの選択肢のひとつ!
(C言語はちょっと難しそうという方、Ruby版もあります)

「明和電機 x ギャル電」のイケてるアクセワークショップ!電子の力でキラキラさせよう!


夏休み特別企画「明和電機 超! 技能訓練所」開催! - 明和電機 - Maywa Denki明和電機 – Maywa Denki」 (オモチャは買って遊ぶより、自分で作ったほうがはるかに楽しい)

links
- 高専でなぜC言語を学ぶのか? IchigoJamマシン語生成プログラム c4ij で作る、C言語版かわくだり
- C言語で拡張するIchigoJam BASIC - 3KBマシン語をIchigoJamで動かすウラワザ
- c4ij - イチゴジャム レシピ
- IchigoJamで計算する色相環、色相・彩度・明度を光の三原色に / HSV2RGB in BASIC
- 実機転送実行まで1秒! Ruby on Jam でサクサク楽しい組み込みアジャイル開発

はんだづけして、自分のパソコンづくりからチャレンジするプログラミング&こどもシビックテック!
初めての「はんだづけ」資料をバージョンアップ。

はんだづけ、はじめのいっぽ(PDF)」(イラレaiファイル
やけどに注意と、はんだごてより怖い、ニッパーの注意を強調。はんだの盛り具合、動画へのQRコードを追加。
CC BYのオープンデータなので、どこかに出典を書いていただければ、自由に改変、再配布、販売用途にも活用方法は自由です。

ひとまず手頃に集められる機材
- はんだごて 30W 500円 - DAISO
- こて台 300円 - DAISO (または、灰皿や陶器のお皿などはんだごてを置けるもの)
- ニッパー 100円 - DAISO
- 鉛入りはんだ 0.8mm または 1mm 100円 - DAISO (1コで十分組み立てできます)
※もし、鉛フリーはんだを使う場合、はんだごては温度調整機能付きのものをご用意ください。


今年は2日間、2組の親子に体験してもらう、こどもシビックテック。Day1に続いてDay2の講師は、地元PCN品川代表、清水さん!


まずは、はんだづけ!


LED1、ついた!


ゲームづくり、楽しんでくれました!改造したら、それは、自分だけのゲーム!


センサーデバイスをつくった!手であたためると赤くなる。センサーを持って、まちあるき!


感想をそれぞれまとめます。


発表!


電子工作が楽しくなったら「電子工作マガジン&ベーマガ」をどうぞ!
PCN五反田、電波新聞社の大橋さん、登場!


ご参加、ありがとうございました!


会場、豊葉の杜(ほうようのもり)学園、ステキな学校!


PCN五反田PCN品川PCN鯖江

links
- 親子でチャレンジ、まちをよりよくプログラミング in 品川区! データ収集活用入門、温度センサーxフルカラーLEDで簡易快適度チェッカー Day1

夏休み、品川区でオープンデータ関連こども向けイベント with Code for Tokyo & PCN品川

品川区の小中学生にパソコンづくりとプログラミング、電子工作によるデータ収集とまちあるきを伝授!
10時〜17時、長時間ワークショップ後にもこの笑顔!


会場、品川区立 豊葉の杜学園!いい天気!


はじまりました、おやこでチャレンジ、まちをプログラミングでよくしよう with IchigoJam in 品川区


まずは今日使うパソコンをはんだづけして組み立てるところからスタート!
小学2年生、初めてのはんだづけにチャレンジ!


ニッパーの使い方もバッチリ! (指を添えて切れ端が飛ばさないように注意)


カラフルパーツで自分だけのパソコンに!


カラーカスタマイズで姉妹IchigoJamでも間違えない!


動いた!


みるみる慣れるキーボード。


使うセンサー集めで、電子部品パーツ屋さん気分!


自分で作ったセンサーデバイスを持って、データ収集、まちあるきスタート!


まちあるき後はまとめの時間。
暗いところと明るいところ、人の感覚とセンサーによる値の違いがおもしろかったとのこと!
IchigoJamの絵、ありがとう!

こちら、触れなかったおみやげの温度センサーMCP9700Aの使い方例を紹介!

温度センサーもマイコン内蔵LEDも直接挿して使えちゃいます。


光の三原色で遊ぶ、マイコン内蔵フルカラーLED、PL9823の使い方 for IchigoJam 1.4β
IchigoJamのバージョン番号に注意! (書き換え方法PCN秋葉原でも書き換えできます!)
ichigojam-1.4.0b07.zip


快適温度で調整しておくと、暑いときには赤、涼しいときに青に変わるデバイスのプログラム。


画面に表示される値を、20行にいれるとその値が基準となって、高いときには赤く、低いときには青くなります。


上記加筆したスライド「おやこでチャレンジ まちをプログラミングでよくしよう with IchigoJam (PDF)」(Keynote, PowerPoint)
(はんだづけ、エルチカ、エルチカロボ、かわくだりゲーム、改造方法、光センサー、温度センサー、マイコン内蔵フルカラーLED)
自由に活用可能なオープンデータ、復習にもどうぞ!


ご参加、ありがとうございました!

links
- はんだづけ、はじめのいっぽ - まちをよくするプログランミング in 品川区 Day2! (2019)
- こどもも大人もコードフォーじぶんのまち! 品川区はんだづけ&センサー入門、練馬区IoT資料 - with PCN (2018)
- 地図アプリでふりかえる、センサーとまちあるき!まちをよくするアイデアとIchigoJamプログラミングつぎのいっぽ (2018年)

総額3700万円をかけた一大イベント、鯖江市議選「SABAE20総選挙」スタート!
候補者25人から今後4年、10億円をかける鯖江市議会の運営メンバー20名が決まります。(議員報酬1人あたり3400万円)
福野あおい 鯖江市議会議員 — 鯖江市議会議員選挙

鯖江市の未来を担う、20名のポートフォリオを決定するのに、1名だけを選ぶという不思議な選挙制度ですが、現行ルールなので仕方ありません。
Code for Sabae として、候補者一覧オープンデータ(CSV-utf8)デジタルポスター掲示版アプリをひとまず開発しました。 いろんなアプリを作って盛り上げましょう!(ハッシュタグ #sabae20


SABAE20総選挙2019 鯖江市議候補者デジタルポスター&オープンデータ
ダブリンコアに習って、sabae.cc語彙を作りました。schema.orgにないものを勝手に作っていきます。

選挙カーを使う候補者の方、前回の2015年選挙時につくったアプリをご活用ください!

選挙カー連呼スポット探しアプリ
オープンデータ選挙カー連呼スポット探しアプリ 鯖江市議選スタート!
* 認められているのは、8時〜20時、学校・病院・診療所その他の療養施設の周辺以外、連呼行為(車上の連呼以外は公職選挙法違反です)

各地で欲しいとの声多数。地方公共団体の方、学校と病院オープンデータ、ぜひ5つ星オープンデータ化してください。(odpへの登録いただければ、即アプリに反映されます)

投票日は、6/30日曜日です
鯖江市議会議員選挙のお知らせ – めがねのまちさばえ 鯖江市

音は数学と物理でできています。
何かが1秒間に440回振動すると「ラ」の音、440Hz。
倍の880回だと1オクターブ高い「ラ」。220回だと1オクターブ低い「ラ」。

こちらがオクターブ1の「ド」からオクターブ5の「シ」までの、周期の半分の8bitに収まる数値、60コ、60byte。これをテレビ画面に1ライン引くために使っている、15.7068kHzで動くタイマーを流用して鳴らしています。 流用しないで別途タイマーを使うこともできますが、サーボやモーターの速度制御に使う分を確保するとあまりがありません。

240, 226, 213, 201, 190, 179, 169, 160, 151, 142, 134, 127, 120, 113, 106, 100, 95, 89, 84, 80, 75, 71, 67, 63, 60, 56, 53, 50, 47, 44, 42, 40, 37, 35, 33, 31, 30, 28, 26, 25, 23, 22, 21, 20, 18, 17, 16, 15, 15, 14, 13, 12, 11, 11, 10, 10, 9, 8, 8, 7

今回このタイマーをひとまず倍速で動かし精度を上げてみようと思いましたが、1ライン描画するタイマー処理と重なってしまうため、きれいな周期で鳴らすことができず断念。VIDEO0でビデオ出力を止めた時のみ音痴が直るという実装方法ならありかもしれません。 ひとまず今回は倍速化までで容量オーバー。

IchigoJam 1.3.2β16 - 「ichigojam-1.3b16.zip
(VIDEO0にした際のサウンド倍速化(暫定版)、ビデオ表示調整(VIDEO3以降)、複雑な式でComplex expressionがでるように変更)


付属の圧電サウンダーから、「エイリアンスピーカー」や、ステレオ端子経由やアンプ経由でスピーカーにつなぐとだいぶ良く聞こえます。

SOUND端子ではなく、OUT5端子などに接続し、プログラムで音痴を回避する方法もあります。
IchigoJamのPLAY文と似ているMML風に書くとPWMを使って鳴らしてくれるプログラムが、KidsPod;に公開されています!(by イチゴジャムおじさん
ジングルベル PWM_MUSIC/Kidspod;
PWM_MUSICの検索結果/Kidspod;

平均律に近い音階の周期データを計算するC言語のプログラムはこちら!

#include <stdio.h> #include <math.h> int main() { int vsync = 3056; int cpuhz = 48000000; int cnt = 0; for (int i = -33; i <= 26; i++) { double freq = pow(2, (double)i / 12) * 440; double len = 1.0 / freq; double d = len / ((double)vsync / cpuhz); int n = (int)(d + 0.5); //printf("%f %f %d\n", freq, d, n); printf("%d, ", n); cnt++; } printf("\nlen: %d\n", cnt); return 0; }

進む、jigインターン2019の選考プロセス。面接で好きなプログラミング言語を聞いて、C言語と答える高専生は割と多い。 黒い画面にテキストで動く地味なプログラム、それで楽しさは伝わるのだろうか?

中学生の頃、その頃のパソコン好きが辿った、BASIC、Z80マシン語の次のC言語。妙に気に入ったのが、ファイル変換プログラム。バイナリデータをテキストに変換するプログラム(matsumoto)や、K&Rスタイルしか対応していなかったMSXのC言語をモダンに使えるように変換するプログラムなど、BASICでは遠かった実用性を感じて感動。

時は現代、IchigoJamβのバグフィックス。C言語なくてはありえない24KBのOSづくり。スクリプト言語ではランタイムが収まらず。マシン語で書くには複雑すぎる。 C言語の魅力は、生成されるマシン語が想像でき、コンピューターの本来の力をほぼ最大限に引き出してあげられてる感にある。

コンパイラが生成したLPC1114用24KBのバイナリをAPI追加するポストプロセス。インテルHEXファイルに反映し忘れていた不具合を直すため、変換プログラムを書く。 RubyでもPythonでもJavaでもJavaScriptでも書けるが、エコなC言語が気持ちいい。このくらいの規模だと、自作コンパイラでも手が届く。


「bin2hex.c - バイナリデータからインテルヘックスファイルへの変換プログラム in C」

このプログラムを使ってできあがったもの
IchigoJam 1.3.2β15 - 「ichigojam-1.3b15.zip
(USキーボードで効かないキーがあった不具合修正、HEXファイルでAPIが使えない不具合修正)

API呼び出しサンプルプログラム RNDを使ったサイコロプログラム(for IchigoJam 1.3.2b15)

10 LET[0],#21C0,#8809,#4708:?USR(#800,6)+1 RUN 5

地味ゲー好きだとカミングアウトしてくれた鯖江の少年に後押しされて誕生したIchigoJam。 自動運転、キラキラVR、ロボット、ドローンなど、派手な応用領域も地味なファイル変換も根っこは同じ、コンピューターとの対話、プログラミング。


福井県小中学生 プログラミング・フェス
福井新聞との取り組み、小中学生プログラミングフェスも4年目!
今年の舞台は禅のふるさと、福井県永平寺町の曹洞宗の大本山、永平寺。
座禅とプログラミングで、自分自身をアップグレードし続ける楽しさに気づけるか!?

去年大活躍した、自分でプログラミングする自動運転車「らでぃっしゅ」今年も登場!


プログラミングフェス2018の様子を、福井県庁の岩田さんが取材してくれた様子。
体当たり撮影「すごい」県庁職員 福井県広報課の岩田早希代さん | 政治・行政 | 福井のニュース | 福井新聞ONLINE

伝えよう、世界中のどこにもないものを創り出せるワクワク感。

links
- 福井県小中学生 プログラミング・フェス

bin2hex.c

#include <stdio.h> void out(int address, char* buf, int nbuf) { int crc = nbuf + address + (address >> 8); printf(":%02X%04X00", nbuf, address); for (int i = 0; i < nbuf; i++) { printf("%02X", buf[i] & 0xff); crc += buf[i]; } printf("%02X\n", -crc & 0xff); } int main(int argc, char** argv) { char buf[16]; int nbuf = 0; int address = 0; for (;;) { int c = getchar(); if (c == EOF) { if (nbuf > 0) { out(address - nbuf, buf, nbuf); } printf(":00000001FF\n"); break; } buf[nbuf++] = (char)c; address++; if (nbuf == 16) { out(address - nbuf, buf, nbuf); nbuf = 0; } } return 0; }

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