本日はものづくり好きデー!


技術実証費用としてチームごとに最大300万円の予算がつく、総務省主催、高専WiCON2020の審査会。 10高専のチームによるIoTや5Gを使ったさまざまな新しいものづくりへのチャレンジに刺激を受けます。実際作って試してみる、いいですね! 審査結果をお楽しみに!
高専WiCON2021」への応募内容も公開されてますよ!

最終金曜日の夜はCyberFriday!
新高校1年生、地域活性化アプリを企画する高校生、現役高専生、大学生、新社会人、料理人、二胡奏者、フィジカル職人、IT職人など多彩な参加者で賑わいました。


めがね 修理 再生工房」鈴木眼鏡工業の鈴木さんの展示コーナー。


壊れたメガネを修理するだけでなく、その持ち味生かした新しいアクセサリーへの生まれ変わる!


オセロのコマを投げあう新スタイル「投げオセロ」を体験!重ねたり、ぶつけて動かしたり、立てた状態にしたりといろいろ新感覚がユニーク! 来月はiPhoneでも動くようになる!?


動画でもどうぞ!


はんだづけコーナー!


NT鯖江で出会ったやきもの「抵抗の形のはんだこて台」かわいいでしょう!


すてきカフェ&眼鏡屋さん、EIGHT SENSEによる、竹の子えだ豆たきこみご飯 by EIGHT-SENSE


ほうれんそうキッシュ、デザートのブリュレチーズケーキ、ラスクも人気でした!


初投入のドローン。条件はGPS付き、4K写真撮影可能、200g未満!
HolyStone HS175


ドローンからの撮影、用意したmicroSDカードがうまく動かず、スマホへのストリーミング映像なので本気な画質ではありません。 次回の集合写真はドローンで撮ろう。


コンパクトに持ち運び用のケースもついてます!


LTタイム!おもしろいを共有しよう!


意外とすぐ乗れるようになる、セグウェイ体験も好評でした!


高専4年生によるミュージックシーケンサー「Tracks」CyberFridayで初お披露目!


音楽とコンピューターはなかよし!


押し心地の良いキーボードの赤軸の派生キーを使ったインターフェイス。レーザーカッターで切り出したケースを重ね合わせた丁寧かつ、CPUを魅せるスタイルがかっこいい! これは、ファームウェア開発にも力が入る!MIDI-OUT端子による他楽器やPCとの連動にも対応!


オススメ本の紹介コーナー。 「電子工作マガジン 記念50号」と「ゼロからのOS自作入門」。 ハードウェアから、基本ソフトもアプリも!


生成したefiファイルをUSBメモリに EFI/BOOT/BOOTX64.EFI として保存、BIOSをいじって起動、動きました!

Zen言語開発者クリス協力による、Zen言語によるUEFI ハローワールドはこちら!(src on GitHub)

pub const UefiHandle = *mut @Type(.Opaque); pub const SimpleTextOutputProtocol = extern struct { reset: fn (*SimpleTextOutputProtocol, bool) callconv(.C) usize, output_string: fn (*SimpleTextOutputProtocol, [*:0]u16) callconv(.C) usize, }; pub const SystemTable = extern struct { _: [60]u8, con_out: ?*mut SimpleTextOutputProtocol, }; fn printu8(out: *SimpleTextOutputProtocol, msg: []u8) void { for (msg) |c| { _ = out.output_string(out, &[1:0]u16{c}); } } comptime { @export(EfiMain, .{ .name = "EfiMain" }); } pub fn EfiMain(handle: UefiHandle, system_table: *mut SystemTable) callconv(.C) usize { const con_out = system_table.con_out.?; _ = con_out.reset(con_out, false); printu8(con_out, "Hello UEFI in Zen!"); while (true) {} }


ご参加、ありがとうございました!
ごはん、デザート、シーケンサー、スマホゲーム、コンピューター、地域活性化アプリ、めがねのリメイクアクセサリ、OS、いろんなものづくりに触れたサイバーフライデー。
来月は2021/4/30(金)、お楽しみに!

PCNの新製品発表会にて、新型IchigoJam「IchigoJam R」発表!

PCN新製品発表会


じゃん、こちらがIchigoJam R x IchigoSand


目玉はUSBキーボード対応!


IchigoSand、鯖江のメガネテクノロジー、人肌にやさしい石油を使わない素材、アセテートを使ったIchigoJam R専用ケース by EIGHT SENSE!


メガネ同様、いろいろな柄がかわいい!


テクニカルな大発表、IchigoJamは、ArmからRISC-Vへ。
2014.4.1誕生から長らく使ってきたCPU、NXP社のLPC1114、Arm Cortex-M0アーキテクチャーに加え、オープンなアーキテクチャーRISC-Vに対応!
(LPC1114向けサポートも続きますのでご安心を!)


なんとインタプリター、10倍速!
CPU周波数が倍、ビデオ信号の出力が、DMA(Direct Memory Access)によって空いちゃいました。


RISC-V Internationalメンバー、コネクトフリー社代表、Zen言語開発者、帝都久利寿!


Zen言語は、C言語に代わる、安全、快適、高速なプログラミング言語。


Zen言語zen4ij を使って、プログラムは全く一緒で、RISC-Vマシン語をコンパイルできます!

例えば、引数を1足すだけのシンプルなZen言語プログラム

export fn main(param: i32) i32 { return param + 1; }

Arm版 (make build; make dump)

0000000 1c40 4770

RISC-V版 (make buildr; make dump)

0000000 0505 8082

共に16bitのマシン語命令、オープンなアーキテクチャーなので、学習教材としても本気開発環境としてもフリーに大いに活用できます。
比べてみよう、RISC-VとArm、RISC-V対応かんたんマシン語「asm15r」

One more thing...


エンジニア大好きHHKB(Happy Hacking Keyboard)のPFU社、松本さん出演!
USB接続するHHKBにも対応したのを記念した、HHKBxIchigoJam コラボ!(USBハブ機能付きは未対応)


HHKB x IchigoJam コラボ企画 - Happy Hakking with Kids
なんと、Twitter投稿でIchigoJam R 墨とHHKBが当たる!


IchigoJam R 墨、かっこいい!

加速する、こどもプログラミング環境、こプサミレポートへ続く!
プログラミングは水泳の如し、全学年10時間カリキュラムに挑戦「クイズ タシテ テン!」

links
- こども達と楽しくプログラミングしよう!USBキーボードに対応した新「IchigoJam R」で、HHKB墨とのコラボ決定!Happy Hacking with KIDS! – about yrm
- 今年最後のイベントは「IchigoJam R」の発売発表 | SABAE CREATIVE COMMUNITY

日々進化を続けるコンピューター、プログラミングで楽しくフル活用しよう!

高専プロコン選出、起業家甲子園出場候補チームをメンタリング&電子情報工学科3年生のプログラミングの授業にてゲスト講師に母校、福井高専へ。

世の中には用途に合わせたいろんな言語。IchigoJam BASICは1年の時に体験してくれた電子情報工学科の3年生、JavaScript、C言語と学んでいるとのことで、Zen言語にチャレンジ!ダウンロード、展開し、環境変数「Path」を設定。基本的なPCスキル、大事ですね。

コマンドプロンプトで zen が起動したら準備完了!

$ mkdir zen-test1 $ cd zen-test1 $ zen init-exe $ zen build run

コンパイルされて、動きました!VSCodeをセットアップ済みなら・・・(Mac のシェルに code コマンドを登録する

$ code src/main.zen

で、表示する文字を編集して、再度 zen build run してみましょう!

例えば、フィボナッチ数を再帰で計算するプログラムはこんな感じ

const std = @import("std"); pub fn fib(n: i32) i32 { if (n <= 1) { return n; } else { return fib(n - 2) + fib(n - 1); } } pub fn main() anyerror!void { const n = 10; std.debug.warn("fib({})={}\n", .{ n, fib(n) }); }

シンプルで読みやすい?自明な時には型、省略可能です。


Zen Fib
build.zen を、WebAssembly向けの build.zen に変更して、ブラウザ上で動かすこともできます。(src on GitHub)
自分のPCで動かすためには live-server など、webサーバーが必要なのでちょっとひと手間入ります。

webアプリとして組み込んだZen言語版フィボナッチ!
HTML/CSS/JavaScript + GitHub入門」と合わせてどうぞ!

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Zen Fib</title> <style> body { text-align: center; font-family: sans-serif; } input { background-color: #ddddff; margin: 1em; padding: .5em; font-size: 150%; text-align: right; } button { background-color: #ffffdd; color: #880000; padding: 1em; font-size: 110%; } textarea { width: 21em; height: 12em; } a { color: gray !important; } </style> </head> <body> <h1>Zen Fib</h1> <input type="text" id="fibn" value="10"><br> <button id=btn>Zen言語でフィボナッチ計算!</button><br> <input type="text" id="ans"><br> <script type="module"> window.onload = async () => { const wasm = await WebAssembly.instantiate(await (await fetch("main.wasm")).arrayBuffer()); const ex = wasm.instance.exports; const fib = ex.fib; btn.onclick = () => { ans.value = fib(fibn.value); }; }; </script> </body> </html>


起業家甲子園に向けて、やるぞ!の図 at 福井高専、電子情報工学科!


Hana道場では中学生が、JavaScriptで新コンセプト付き七並べゲームを開発してました。
プログラミングのウデを上げたい福井高専生も遊びに来るといいよ!

型がないJavaScriptでは組みにくいロジックは、Zen言語で作ってきっちりつくって、かつ、高速化を狙うのもいい手。
いろいろ試して、自分に馴染むツール、見つけよう!

コンピューターやネットワークが社会が深く広く使われている現代におけるサイバーセキュリティは、セキュリティの一部ではなく、実生活全般の安全に関わる上位概念として捉える必要があります。

Hana道場の向かい、Hana工房で開催されたサイバーセキュリティー勉強会。来年本格実施予定の中高生向けのサイバーセキュリティコンテスト「CyberSakura」に向け修行中。 参加に名乗りを上げた、中学1年生3人が受講。サイバーセキュリティの入門とコンテストに向けた模擬競技が行われました。

サイバーセキュリティとは、コンピューター、ネットワーク、データを使い続けられるよう保全すること。 社会にとっての普通の状態を持続するためには、オンライン、オフライン問わず発生しうる迷惑なハッキング行為、悪意のないうっかりや、地震まで、さまざまなリスクに備える必要があります。

CyberSakura」は、その知識と実行力を養うコンテストを含む教育プログラム。
エキシビジョンマッチに向け、日本全国の中学1年生から高専高校の2年生までを募集中です。
CyberSakura 〜サイバーセキュリティ教育プログラム〜 | Peatix

誰が作ったか分からないアプリを自分のパソコンで動かすリスクを考えてみましょう。
プログラミングした人には分かりますが、ファイルを消すのも、編集するのも、どこかに送信するのもプログラムを使えば自由自在。 いくら見た目がかわいくても、自分自身をパソコン内部の分かりづらい部分にコピーし、こっそり動かし続け、何かの司令を待つ、そんなこともできてしまいます。

よく知られた、また、よく使われているアプリであっても完全に信用できるわけではありません。 突然そのアプリの所有者が変わって、悪意ある自動更新が起きない保証はありません。

対処する方法のひとつに仮想化技術があります。仮想的なパソコン上でアプリを動かすことで、実際のアプリの動きを手にとるように確認できます。 CyberSakuraは、問題あるOSの状態を仮想化環境上で動かし、対処します。


Zen言語3行でつくるWebAssemblyの続きとして、ZenからDOM操作の実験成功!(src on GitHub)

ブラウザ上で動作する静的型付け言語環境、WebAssemblyも、仮想化技術のひとつとして注目されています。 WASI (The WebAssembly System Interface) により、サーバー上での動作環境が整ってくると、より安心なサーバー運用ができそうです。

発明が、ソフトウェア化、オープン化したことによって、新技術が世界中から続々誕生するエキサイティングな世界は留まることを知りません。 大いに活用していきましょう!

福井県でのサイバーセキュリティ、キックオフ!
サイバーセキュリティフォーラム&交流会in 福井
2020/8/3(月)開催、オンライン開催となっています。

webアプリのサイズ、小さいほど読み込みが早くて快適に!
Zen言語でシンプルな WebAssembly、動かしてみました。(src on GitHub)


C言語以上に細部に手が届く、軽量静的型付け言語の「Zen言語」は、WebAssembly出力にも対応。 下記、たった3行、誰にでも分かりやすい足し算するだけのプログラムを「zen build」でコンパイルするだけ、HTML/JavaScriptから呼び出して、利用できます。(src on GitHub)

export fn add(a: i32, b: i32) i32 { return a + b; }

(プログラム解説)
export → 外部から使うよ
fn → function 関数だよ
add → 関数名はaddにしよう
a: i32 → 符号付き整数32bitのパラーメータaが関数addの引数1つ目
b: i32 → 符号付き整数32bitのパラーメータbが関数addの引数2つ目
i32 → 符号付き整数32bitを関数の値として返すよ
return a + b; → パラメータaとbを足したものを返すプログラム、終端記号は「;」セミコロン

コンパイルしてできあがった、main.wasm ファイルは、たった115byte。
下記のようにHTML内のJavaScriptでつないで、HTTPサーバーを立ててブラウザで開けば動きます!(ローカルファイルからは動きません)

<script type="module"> (async () => { const bin = await (await fetch("./main.wasm")).arrayBuffer(); const wasm = await WebAssembly.instantiate(bin); const ex = wasm.instance.exports; const add = ex.add; document.body.textContent = "WebAssembly in Zen, add(1,2) = " + add(1, 2); })(); </script>

簡単ですね!

別途 wasm-strip を使ったビルドコマンド「zen build strip」を使うと、72byteまで縮みます。

ランタイムがなく、追加容量なしでプログラムを分かりやすく整理できる(抽象化)Zen言語。
大規模Webアプリ開発にも使える予感!何かのアプリで実証してみたくなりますね!

links
- Zen言語で LPC810 Arm組み込み開発、Zenbedded!
- 言語づくりという解決手段、高速安全コンパクトなZen言語で簡単組み込み開発 on IchigoJam with zen4ij
- RustではじめるWebAssemblyはじめのいっぽ、足し算するwasmファイルは116byte
- IchigoJam BASIC on the web by WebAssembly

モダンでC言語以上の記述力、Zen言語でLPC810のベアメタルエルチカに成功!
LPC810は、NXP社製Arm Cortex-M0アーキテクチャーの最大30MHz動作する32bit CPU、RAM1KB、ROM4KB。

こちら、プログラム boot.zen。マシン語版からの移植がスムーズかつ、可読性高い!

const SYSAHBCLKCTRL: u32 = 0x40048080; const FLASHCFG: u32 = 0x40040010; const PINENABLE0: u32 = 0x4000C1C0; const GPIO_DIR0: u32 = 0xA0002000; const GPIO_NOT0: u32 = 0xA0002300; const WAIT_CNT: u32 = 400000; export fn reset() noreturn { @intToPtr(*mut u32, SYSAHBCLKCTRL).* = 0b0011011001; // WKT:off, SCT:off, SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM:off, ROM:off, SYS @intToPtr(*mut u32, FLASHCFG).* &= 0b11; // flash no wait: set 0b00 @intToPtr(*mut u32, PINENABLE0).* = 0xFFFFFFBF; @intToPtr(*mut u32, GPIO_DIR0).* = 0b1100; // PIO0_2 and PIO0_3 while (true) { @intToPtr(*mut volatile u32, GPIO_NOT0).* = 0b0100; // toggle PIO0_2, GND PIO0_3 var waitcnt = WAIT_CNT; while (waitcnt > 0) { asm volatile ("nop"); waitcnt -= 1; } } } export const RESET_VECTOR: fn () callconv(.C) noreturn linksection(".vector_table.reset_vector") = reset; export const DUMMY linksection(".dummy") = [5]u32 { 0, 0, 0, 0, 0 }; export const VALID_CODE: u32 linksection(".valid_code") = 0xEFFFFBDF; // 0x100000000-0x10000400-0x21

リンクスクリプト linker.ld とビルド用の Makefile を用意して、make、できあがり! サイズはたった96byte!ROM4KBの2.3%しか使ってません。マシン語もインラインでさらっと使える。(src on GitHub接続方法)


欲しかったZen言語の書籍「The Zen Book」と「Zenbedded」ゲット!
そういえば、Zen言語と、IchigoJam、両方色相環カラーリング。
色相環で光るネクタイ。Zen言語でパワーアップしよう!

links
- ごきげんよう、Zenへようこそ | Reduce your stress with the C language
- C言語よりコンパクトに! Zen言語開発者からのプルリクとマシン語の気持ち
- 言語づくりという解決手段、高速安全コンパクトなZen言語で簡単組み込み開発 on IchigoJam with zen4ij

Zen言語で作るIchigoJamプログラム zen4ij、なんとZen言語開発者自ら早速改造!?

実機で動かすため、IchigoJamのはんだづけもしてくれました!無事LEDが光り、PCとのUSBシリアル接続もOK。久利寿とオンラインで��しつつコンパクト版にトライ、動いた! 最終的なサイズは、112byte。C言語より4byte、Arm thumbのマシン語で2命令少ない!


zen4ij に、プルリク送ってもらって、こちらの環境でも確認、マージ完了!
(プルリク=プルリクエスト=改善案置いておくからよかったら引っ張って使ってねという意味、マージ=改善案を採り込むこと、共にGit用語)

Zen言語の使い方や、ビルドのコツを直接聞くことができた。サイズ縮小のポイントとして不要セクションの削減が肝だった。下記が改良版 かわくだりゲーム in Zen言語(switch構文がいい感じ)

const ij = @import("std15.zen"); export fn main() callconv(.C) i32 { ij.cls(); var x: i32 = 15; var score: i32 = 0; while (true) { ij.locate(x, 5); ij.putc(236); ij.locate(ij.rnd(32), 23); ij.putc('*'); ij.putc(10); ij.wait(3); switch (ij.inkey()) { 28 => x -= 1, 29 => x += 1, else => {}, } if (ij.scr(x, 5) != 0) { break; } score += 1; } return score; }

公平を期すため rust4ij も改良、ただ同じく不要セクションを消しても Rust 版では 124byteと、Zenの112byte、C(gcc -Os)の116byteに及びませんでした。 なぜ、サイズが違うのか?それは、それぞれのコンパイラが出力するマシン語に差があるからです。コンパクトなプログラムでいろいろ見比べると個性があっておもしろい!

果たして、どこまで小さくなるのか?
コンパイラを使わず、asm15マシン語でプログラムしてみたところ、82byteで実装できた! (追記、Thanks 100byte→98byte82byte by @fujitanozomuさん)

PUSH {R4-R7,LR} R6=#C0 'cls R3=[R6+(#CC-#C0)/2]W GOSUB R3 R4=15 ' X R5=0 ' S 'putc R7=[R6+(#C4-#C0)/2]W @LOOP 'locate X,5 R0=R4 R1=5 R3=[R6+(#CE-#C0)/2]W GOSUB R3 'putc neko R0=#EC GOSUB R7 'rnd(32) R0=32 R3=[R6+(#C0-#C0)/2]W GOSUB R3 'locate R0,23 R1=23 R3=[R6+(#CE-#C0)/2]W GOSUB R3 'putc *, enter R0=#2A GOSUB R7 R0=10 GOSUB R7 'wait 3 R0=3 R3=[R6+(#D6-#C0)/2]W GOSUB R3 'inkey() R3=[R6+(#CA-#C0)/2]W GOSUB R3 R0-=28 R0-=1 IF HI GOTO 2 ADC R4,R0 'scr(X,5) R0=R4 R1=5 R3=[R6+(#D0-#C0)/2]W GOSUB R3 R5+=1 R0-0 IF 0 GOTO @LOOP R0=R5-1 POP {R4-R7,PC}

IcihgoJam APIは、アドレスの8bit範囲内に16bit範囲内の関数ポインタを書き込んであり、ファームウェアのバージョンが変わっても使用できるMSXのBIOS的な仕組みを採っています。(例、CLSの呼び出し)

'cls R7=#CC R7=[R7]W GOSUB R7

削減のポイントは、使える命令が限定されるハイレジスタ(R8以降)で、唯一関数内で値を保存せず使用してよいレジスタ、R12を繰り返し使用するAPIのキャッシュとして使用したところです。 だいぶ最適化が進むコンパイラ技術ですが、まだ発展の余地があるってことですね!

ちょうどネコのキャラクターパターンが96byte目からなので、#700からマシン語を書き込んでも動きます!

POKE#700,240,181,204,39,63,136,184,71,15,36,0,37,196,39,56,136,132,70,127,137,32,70,5,33,184,71,236,32,224,71,32,32,192,38,54,136,176,71,23,33,184,71,42,32,224,71,10,32,224,71,3,32,214,38,54,136 POKE#738,176,71,202,38,54,136,176,71,28,40,0,209,1,60,29,40,0,209,1,52,32,70,5,33,208,38,54,136,176,71,1,53,0,40,219,208,104,30,240,189 ?USR(#700)

コンピューターに初めての触るこどもから、ガチなエンジニアまで、幅広く楽しめるIchigoJam。 そのヒミツを書いた「情報処理 2020年8月号 (日本語) 雑誌」 now on sale!

この度、情報処理学会の会誌『情報処理』に「プログラミング...

上松 恵理子さんの投稿 2020年7月20日月曜日


今日のおやつ、いちごティー

日本社会にテクノロジーが根付かない原因は信頼か? 独自開発のIoTとZen言語による解決を目指すコネクトフリーCEO、帝都久利寿さん。 マイクロソフトと任天堂があるシアトル出身、5才からプログラミングし、10代で会社を売却し、単独来日、再び創業。 日本&技術好きの同志。

プログラムが使うメモリ、使ったまま忘れたり、使ってはいけないところを触るとソフトウェアは停止する。 このいわゆるバグは、アプリを使う人をイライラさせ、車や社会インフラなどで起きると多大な影響を引き起こす。

現在主力となっているプログラミング言語の解決方法に、自動的にメモリを回収する仕組みを使う方法(GoやTypeScriptなど)、所有権という概念を入れて管理する(Rust)という方法がある。 Zen言語はそのどちらでもなく、後片付け構文とメモリ確保の明確化で安全にするというアプローチ。

IchigoJam BASICでは、そもそも使うメモリ量を固定化しているため問題が起きない。 Zen言語はこの古典定期かつ堅牢なメモリ使用方法を、一段上位で管理するイメージ。

GCを使う言語はランタイム(作ったプログラムを動かすために必要なベースプログラム)で容量が大きくなってしまうが、ZenはRust同様、ゼロランタイム。 IchigoJamなど、小さな組み込み用途にも使える。


zen4ij - Zen language for IcihgoJam
早速実験「かわくだり」のZen言語版が動いた。コンパイル済みバイナリ124byteと小さい。
(参考、Rust版 132byte、C版 116byte、Ruby版 325byte + runtime 2,376byte)

const ij = @import("std15.zen"); export fn main() i32 { ij.cls(); var x: i32 = 15; var score: i32 = 0; while (true) { ij.locate(x, 5); ij.putc(236); ij.locate(ij.rnd(32), 23); ij.putc('*'); ij.putc(10); ij.wait(3); const c = ij.inkey(); if (c == 28) { x -= 1; } if (c == 29) { x += 1; } if (ij.scr(x, 5) != 0) { break; } score += 1; } return score; }

IchigoJam BASICのかわくだり 150byteとの比較

10 CLS:X=15:S=0 20 LC X,5:?CHR$(236) 30 LC RND(32),23:?"*" 40 WAIT 3 50 C=INKEY() 60 X=X-(C=28)+(C=29) 70 IF SCR(X,5) ?S:END 80 S=S+1 90 GOTO 20

@マークで始まるものはZenの組み込み関数、std15.zenにてIchigoJamのAPIを定義している。 例えば、1文字表示するij.putcは、下記のように定義し、IchigoJam APIと接続している。

pub fn putc(x: u8) void { const addr = @intToPtr(*u16, 0xC4); const f = @intToPtr(fn(u8) void, addr.*); f(x); }

u8は、符号なし(unsigned)8bitの意味。Rustに似ているが、関数の返り値型に"->"が不要でよりコンパクト。 @intToPtrを使うことで、物理メモリにもアクセスできるので、OSづくりにも対応できる。(Rustではunsafeを使用する)


Zen言語のドキュメントだけでなく,コンパイラのエラーも日本語対応!優しい! (コンソールで export LANG=ja と設定してみよう)
ごきげんよう、Zenへようこそ | Zen Language Documentation


IchigoDyhookがあれば、亀蔵でもサクっと取り出し、 IchigoJam BASIC プログラミング!
久利寿氏、超久々のBASICでPRINT/GOTOループを決めているところ。

社会のあちこちで活躍するソフトウェアだが、本領発揮はまだまだこれから!
日本のソフトウェア技術力、どんどん上げていこう!


@yrm__ (IchigoLatte MINIScript)、 @kristopher (Zen language)、 @taisukef (IchigoJam BASIC)
国産言語プチサミット in 鯖江!

links
- C言語よりコンパクトに! Zen言語開発者からのプルリクとマシン語の気持ち

インターンDay9、永平寺町のエボリューション大使に就任したあみるが来てくれました!

Stand-up, less meetings / Pairing / TDD / CI/CD / Retro / Constant evolution とシリコンバレースタイルを解説。

その中でひとつ、TDDをIchigoJamで解説してみます。
例えば、こちら四捨五入を作る、IchigoJamプリントをTDDで作ってみます

まずは簡単に1の位を切り捨てるプログラムのテストコードを書きます

10 N=45:GOSUB100:IF N=40 ?"TEST CLEAR!1" RUN Line error

GOSUB100としているのに、100行がないのでエラーになりました。
ひとまず何もしない100行をつくりましょう

100 RETURN Not match in 110

今度はプログラムが終わらずRETURNにいってしまったので、ENDを追加。

99 END RUN OK

「TEST CLEAR!」と表示してくれません。何もしていないのでテストは失敗しました。
テスト成功するように書きます

100 N=40:RETURN RUN TEST CLEAR!1 OK

やった!テスト通った!
でも、他の数でテストすると・・・

20 N=32:GOSUB100:IF N=30 ?"TEST CLEAR!2" RUN TEST CLEAR1 OK

TEST1しかクリアしてくれません。
32でもちゃんとなるように作ってみます。

100 IF N=32 N=30 ELSE N=40 110 RETURN RUN TEST CLEAR!1 TEST CLEAR!2 OK

今度はOK!ですが、いろんな数でテストすると・・・

10 LET[0],55,50,22,20,10,10 20 FORI=0TO4STEP2:N=[I]:GSB100 30 IF N!=[I+1]?"ERR!";[I]:END 40 NEXT RUN ERR!55 ERR!22 ERR!10 OK

どんな数でも切り捨てるように、ちゃんと書きます。

100 N=N/10*10 RUN OK

うまくいきました!

このように、求める結果をまず書くのが、TDD(Test Driven Development = テスト駆動形開発)です!
お試しとして、四捨五入するプログラムのTDDもやってみましょう!


こちら、エボリューション大使、あみるのオフィス、永平寺町、四季の森文化館


Zen x Programming のワークショップが始まっています!


さくらインターネット高橋さんと永平寺町役場へ訪問!
まずはステキな結果を想像して創造する、福井エボリューション楽しみです!

Zen x Programming、インターンブログにも!
ZEN力開発! - jigintern2018’s diary


永平寺町のうたPV」公開!

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