緑のAACR 2022に参加してきました

先日、アルプスあずみのセンチュリーライド(緑のAACR)に参加してきました。

aacr.jp

これは私は以前にも参加していたのですが、コロナ禍で2年連続で中止となり、今回は3年ぶりの開催となりました。自粛ムードは世間でもすっかり緩んでいますが、新型コロナ感染者数で言えば今は2年前よりも去年よりも多いので、今年開催すること、それに参加することには異論もあると思います。しかし、このイベントは私にとっては大変楽しいイベントで、我慢ができなかった、というのが正直なところです。

前回参加した時の内容はこちら。

kmaebashi.hatenablog.com

イベント自体は5/22の日曜ですが、出走が05:30ですし受付は前日なので、土曜のうちに移動します。名古屋駅輪行袋に自転車を詰めてしなの7号で松本まで。

輪行は何度もやっているのに、毎回苦労します。

最後席を取ったので、席の後ろに置きます。しなの7号だとぎりぎりでした。

松本で輪行解除。

松本駅から受付場所の「梓水苑」というホテルまで移動します。途中のロイヤルホストで昼食。なんか3回連続でここに寄っていますが、せっかくここまで来ているのだから、うまそうな蕎麦屋でも探せばよかったですかね。次回はそうしよう。

受付場所の「梓水苑」はこのイベントに協賛しているホテルであり、160kmコースだとスタートとゴールもここなのでここに泊まれば一番楽なのですが、毎回予約でいっぱいいになってしまいます。AACRの参加申し込みをした後では間に合いません。

この日は天気も良くなかったので、受付がすんだらとっとと宿に移動して、宿に併設のお寿司屋さんで夕方から飲んで寝てしまいました。

お通し。

天ぷら盛り合わせ。山菜がたくさん。

カツオの刺身。

バイ貝の煮つけ。

茶碗蒸し。

翌朝に響くほどは酒飲んでませんよ!

 

で、翌朝です。

4時前には起きたのですが、あいにくの雨。出走までには止むといいなと思いながら朝食を食べて、宿を出ようとしたところでトラブルが。フロントのチェーンが外れてフレーム側に落ち込んで、しかもフレームとチェーンリングの間でがっちり挟まってしまい外れない。結局クランクをぐりぐり回してやっと外れたのですが、かなり焦りました。フレームに傷も増えてしまった……

で、荷物を預けて、いよいよスタート地点です。この頃には雨も上がっていました。

アルプスの山々も、よく見えない。

で、5人一組で10秒ごとにスタートします。

23kmほど走ると、第1エイドの穂高エイド。AACRでは、このように途中に何か所かエイドがあり、補給食を食べることができます。これが充実しているのがAACRの特長です。

写真の奥の方、木製のデッキとなっており、「すべるので注意してください!」と係りの方が盛んに声を出していました。それでも滑っていた人がいましたが、私の靴はロードバイク用のビンディングペダル(SPD-SL)ではなく、本来マウンテンバイク用のSPDだから大丈夫だろう、と余裕ぶっこいていたらやっぱり滑った。

ここの補給は、

米粉とポロネギのポタージュスープと、

やさいぱん。4種からふたつ選べるので、私は紫芋のとほうれん草のをいただきました。

みんなスタンド付いてないので、駐輪場はこうなります。私の愛車は右下の赤いTREK EMONDA SL5 2017年モデル。

ここから20kmばかり走ると、第2エイドの大町エイドです。あづみの公園の中にあり、公園内を結構走る必要があります。しかも結構な上り坂です。

その上り坂を登り切れば伝説のねぎ味噌おにぎり……だったのですが、今回は違っていました。

冷麦です。前回は冷麦(そうめん?)はこの次の木崎湖エイドだったのですが。

行者ニンニク入りの冷麦に、

水羊羹。

また20kmほど走って、今度は青木湖エイドです。この区間が、激坂というほどでもないゆるい上り坂がだらだらと続いて、精神的に一番きつい区間でした。エイドの直前には結構な坂があったし。

伝説のネギ味噌おにぎりは、このエイドで出てきました。

以前と違い、個包装のお弁当のようになっていますが、感染対策でしょうね。

ここからまたしばらく走って、折り返し点、白馬エイドです。

白馬エイドは場所が違っていて、レストランか何かの前庭でした。

ここの駐輪場にはバイクラックが用意してあったのですが、どうもわかってない人が設営したのか低すぎて、サドルを高く設定している人はかけられなくて困っていたようです。私はといえばサドルは十分に低いので楽勝でかけられましたよ畜生。

これがおそらく今回の目玉の石窯ピザ。これのために場所も変えたのでしょう。ちゃんと熱々でした。

甘酒。これの配布はボランティアなのか子どもがやっていて、「これ、お酒?」と聞かれて「ノンアルコール!」と即答していた。

白馬エイドで折り返したら、青木湖エイドに戻ります。往路は青木湖エイドから白馬エイドまでが基本下り基調で、また坂を上るのかー、と思ったのですが、復路は別経路で、もちろん上り坂はありましたけど一部に集中していてだらだらつづかないだけ楽でした。

ここの補給は、

冷奴と、

おやき。中身はあんこでした。

青木湖エイドから次のあずみのエイドまでの途中に、前回も前々回も寄ったヤマザキYショップがありました。ここはAACRの参加者には有名なところなのですが、そのせいか見ての通り混んでいて、おやきはさっき食べたしな、と今回はスキップ。

……寄っとくべきだったかなあ。

しばらく走ると最終エイド、安曇野エイドです。

ここの補給は前回前々回と同様、ごまおはぎとリンゴジュース。写真撮り忘れ……

ここから20kmばかり、地味な登りの道を走ると、ゴールです。

ゴールした人たちがまったりしています。

ピントが地面にあってしまっていますが、「完走証代わりのりんごパイ」と、なぜかレッドブルがもらえました。私なんかは前回も完走しているからいいけれど、「初めて160km完走した!」って人なんかは完走証が欲しかったんじゃないかなあ。

この後は、梓水苑のお風呂で汗を流して、また輪行で帰りました。

以下、風景です。正直今回、写真ポイントにおける参加者のマナーが悪すぎて、あれに混じるのも嫌だなあ、と思ったのであまり撮っていません。白馬エイドで撮ればいいやと思っていたのに今回場所が違ってたしな。

白馬エイドは毎回絶景なんですが、今回の場所だとちょっと木が邪魔ですね……

帰路。駅弁が全部売り切れという悲劇。

これは運営側が「これぐらいのペースで走るとちょうどいいですよ」と公開しているシートです。これよりはちょっと早めに走って、15:40頃にはゴールしたのですが、今回ヤマザキYショップに寄らなかったし、後半になるにつれて余裕の時間が減っていったのがなんとも。

コロナでなまったか。それとも単に加齢か。3年経ったしなあ。

今回も大変楽しかったので来年も(開催されれば)行くのは確定として、もうちょっとのんびり、寄り道なんかもしながら120kmで参加するか、今回と体力の衰え方を比べるために160kmで出るべきか、迷い中です。

プログラミング言語の作り方のサンプルとして、言語「samplan」を作った

「samplan」という新しいプログラミング言語を作りました。

ソースはGitHubに上げてあります。

github.com

私のWebページの方に、説明記事を上げておきました。

kmaebashi.com

ざっくりとした見た目はこんな感じになります。

# samplanサンプルプログラム
var hoge int := 10;
var piyo real := 20.0;
var result real := ((hoge + piyo * 2) / 3 - 5);

print("result.." + result);

# 1から、与えられた引数までの数値の和を計算する関数
function sum(value int) int {
  var i int := 1;
  var sum int := 0;

  while (i <= value) {
    sum := sum + i;
    ++i;
  }
  return sum;
}

# 1~10の和は、55
print("sum(10).." + sum(10));

発端

元はみずしまさんが「今から一時間でプログラミング言語を一つ作る」というのをやっておられたのを見て、まあ私には1時間では無理ですが、言語をひとつガシガシと作ってみたくなったのでした。

そこで、10/23土曜日の昼過ぎから作成開始。

正直、うまくいったらこの日のうちに何となくでも動いて、動いたらビールで乾杯、くらいに思っていたのですが、さすがに処理系いっこ、静的型付けありでVMで動く言語となるとそうはいかず、土曜はパーサが動くので精一杯、日曜にまたちょっと作業して、その後の平日もちまちま(1時間かそこらしか時間は取れないのですが)作業したりしなかったりして、金曜の晩に一応最後まで書いて動かしてみたがめちゃくちゃ、次の土曜は晴れたのでいつもの養老コースで走りに行って、夕方に帰宅後ちょっと直してようやくぼちぼち動くようになったのでした。

samplanはどんな言語か

samplan(sample languageの略です)は、CやJavaJavaScriptのような波括弧系の言語ですが、Cとかとは以下の点が異なります。

  • if文とかの{ }は省略できません。その代わりにifの後ろの()は不要です。
  • if文の{ }が省略できないので、Cとかのelse if構文は使えません*1。その代わりに予約語elsifを追加しています。
  • 型は後置です。つまり「int hoge;」ではなくて「var hoge int;」です。思えばCの、「型 変数名;」であるかのように見える(Cでは実は違うのですが)という宣言の構文にどれほど多くのプログラマが惑わされてきたことか!!
  • 代入は=ではなく:=です(Pascal風)。それに伴い、等値比較は「=」になっています。

かつて私は以下のページでcrowbarとかDiksamといった言語を作りましたが、

kmaebashi.com

この時は、if文の{ }は省略不可にしてelsifを導入したものの、型は前置にしましたし、代入は=にしました。if文の( )については、crowbarの最初のバージョンでは不要にしたものの、自分自身間違えてばかりだったので結局戻しました。Cに慣れたプログラマ(私)にとって、Cに近いということはそれなりにメリットがあるだろう、と考えたわけですが、まあ、samplanは、実用的に使おうなどという人が現れるはずもないので好き勝手してもいいかな、と。

実質3人日程度で作った簡易言語なので、配列もありません。作っておいて言うのも何ですが、まあ現状では実用性はありません。でもその分処理系は小さいので、プログラミング言語の作り方を知りたい、という人が眺めるにはよいのではないでしょうか。

実装について

samplanは、レキシカルアナライザやパーサのジェネレータ(Cならlex/yaccJavaならJavaCCとか)を一切使わず、手書きのレキシカルアナライザと、1トークン先読みの再帰下降パーサで構文解析を行っています。

上記のcrowbarやDiksamではlex(flex)とyacc(bison)を使いましたが、構文解析周りは、知らない人からすれば、黒魔術に見えるほど難しい作業に見えると思います。その黒魔術部分を、ブラックボックスのパーサジェネレータに頼ったのでは、魔術を解明したという面白みに欠けるでしょう。再帰下降パーサでプログラミング言語を作る、というのは、私が表に発表したものでいうと、11年以上前に日経ソフトウエアの特集記事に載せていただいたスクリプト言語MILがそれにあたります。

kmaebashi.hatenablog.comただ、MILは、全ソースコードを紙面に乗せようとしたためソースの行数に制約があり、いろいろ試した結果、「解析木を作らずに直接VMのコードを吐く」という形になりました。解析木を作るとなると解析木のための型定義が必要で、VM用のバイトコードを吐かない解析木実行タイプの言語にしたとしても、型定義の分だけで長くなってしまうようです。この時は、解析木を作るものも含め何パターンか実際に処理系を作ってみて、一番処理系のソースが短いものとしてこれを選んだ記憶があります。関数定義も(行数の都合で)入れられなくて、代わりにgosubを付けていますね。

行数が少ない方が読者にはとっつきがよいでしょうし、挫折する人も減るかもしれませんが、「解析木を作らずに直接VMのコードを吐く」言語は、入門書ならともかく、実際にはあまりないでしょう。言語の作り方を学ぶなら、解析木を作るところもやっておきたいところです。また、crowbarや昔のRubyのような「解析木を辿りながら実行する言語」は、最初のうちは確かに楽に作れるのですが、breakやcontinueや中途returnを入れたり、(Cで作るなら)GCのことまで考えると、結構面倒くさくなります。それなら、最初からVMを作った方が手っ取り早いと思います。

そんなわけで、samplanは、コンパイラが生成したバイトコード*2をSamplan Virtual Machine(SVM)が実行するタイプの言語としました。上であげたDiksamもバイトコード実行タイプの言語なので、samplanのコンパイラ構文解析から先はDiksamをJavaに移植したようなものですし、SVMの命令セットはほぼDVM(Diksam Virtual Machine)のサブセットです。samplanのソースを読んでみようという人は、上記「プログラミング言語を作る」のDiksamの解説が役に立つかと思います。

作ってみて

この1週間ばかり、寝食を忘れて、というほどではないですが、帰宅したらそそくさとPCの電源を入れてコードを書く、という生活でした。こういうのは久しぶりです。洗濯機を回したら即コード書きに戻って、気づいたら洗剤入れるの忘れてた、とかね。

俺もまだこんな風にコード書きに熱中できるんだなあ、という感慨はありますが、それが、何度も書いたことがあり過去コードを貼り合わせたような言語処理系、というのはちょっと残念ですね。もちろん過去何度も書いたようなコードでも新しい発見はあるものですが、次は何か、新しいものを作ってみよう……

それはそれとして

ちょっと前ですが、「完全初心者のためのプログラミング入門」にも新章追加してます。こちらもよろしくお願いします。

kmaebashi.com

広告

宣伝しても、今となっては中古本しか手に入らないでしょうから、私の稼ぎにはなりませんが…… (Kindle化って重要)

*1:Cとかにはelse if~という構文がある、と思っている人は割と見かけますが、あれは単に{}を省略したelse節に次のif文がぶらさがっているだけです。

*2:型はintなので「バイト」コードではないですが

Windows8.1時代のLet's Noteを初期化してWindows10に上げた

2015年から使っているLet's Note CF-SX4Windows Updateが勝手に当たって、それはよいのだが音が出なくなってしまったので復旧した、という話。
まあ、リカバリ領域を使って初期化しただけなんですが、Windows8.1時代に購入して無償アップグレードでWindows10に上げたものなので、リカバリするとどこに戻るのか、Windows10に再アップグレードは可能なのか、といった話を書き留めておく。やる前に調べたんですが、自分でやったという人は見つからなくて、こういう情報でもネットに上げておけば助かる人はいるかもと(ただし、誰もが同じ結果になるとは限らないので、真似する人は自己責任でお願いします)。

症状

気づいたのは2021/06/12。おそらくはその数日前のWindows Updateが悪かったと思うんですが、私の普段使いのPC、Let's Note CF-SX4から音が出なくなりました。Windowsの復元ポイントは一つもなくて復元できず。タスクバーのスピーカーアイコンのところに斜線が入っていて、クリックするとトラブルシューティングが走るが原因が特定できませんでしたとか言われて回復せず。PanasonicのサイトからWindows8.1用のサウンドドライバをダウンロードしてインストールしたが回復せず、Windows10用のドライバにはサウンドドライバっぽいものはなかったが、汎用のものに含まれてないかな、とめぼしいものを入れたが回復せず。

必要なものはバックアップしてリカバリ領域使って初期化すれば直るんでしょうが、このPCはもともとはWindows8.1で、無償アップグレードでWindows10に上げたものなので、初期化後、ちゃんとWindows10にできるかどうか確信が持てなくてずるずる延ばしていたところ、意を決して8/8頃にリカバリ実施。

結果から言えば、リカバリしたら8.1に戻ったけれども再度Windows10に上げることは可能でした。

やったこと

スクショとか残してないですが。

  1. BIOS画面からリカバリパーティションを選んでリカバリ実施。Windows8.1に戻った。
    参考サイト

    https://www.monodeasobu.com/entry/2021/01/03/143737

  2. Microsoftアカウントと紐づいたアカウントでログイン(これが必要かどうかは不明)
  3. Windows10のダウンロードサイトからUpdate Assistantをダウンロードして実行。

    https://www.microsoft.com/ja-jp/software-download/windows10

これで、実施時点の最新のWindows10に更新できました。

誰かの参考になりましたら。

JavaScriptってJavaにそっくりだよね

JavaScriptJavaは、違う言語である。それは間違いない。

しかし、「JavaScriptはもともとLiveScriptという名前だったのが、マーケティングの都合だけでJavaScriptに改名されたんです! その名前以外、Javaとは共通点は一つもありません!! JavaJavaScriptはメロンとメロンパンくらい違う!!!」と言われると、それはそれでちょっとおかしいだろう、と思う。「JavaJavaScriptはメロンとメロンパンくらい違う!!!」のところは、インドとインドネシアとか、すっかり大喜利状態になっているけれど、そんなふうに「まったく違う言語」と言い切るには、JavaScriptJavaにあまりにも似すぎている。

gist.github.com

togetter.comこれは、「どちらもC言語を先祖としているから……」といったレベルの話ではない。

web.archive.org

JavaがCに類似する構文を持っているのと同程度に、JavaScriptJavaの構文は似ています。しかし、JavaがCのサブセットではないように、JavaScriptJavaのサブセットではないのです。

Cが先祖である、程度の理由で、文字列のメソッドのstartsWith()とかcharAt()とかlength()とか、そんなことまで一致するはずがない。JavaScriptはあからさまにJavaに似せて作られている。

JavaScriptはもともとLiveScriptという名前でー! マーケティングの都合で―!!」と言いたがる人たちは、LiveScriptなる言語がいったいいつから存在したと思っているのだろう? LiveScriptは、そのさらに前にはMochaと呼ばれていて、Mochaが作られたのはJavaの登場より後だ。Mochaがコーヒーの名前であるあたり、明らかにJavaを意識している。このあたりの話は、JavaScriptの作者であるブレンダンアイク自身が、以下のように語っている(JavaScript Ten Years)。

Javaは、高価なコンポーネントウィジェットのためであるのに対し、Mochaは、Webデザイナー向けの言語である、と言っているわけで、JavaScriptは「Javaスクリプト言語版」であるという、メロンとメロンパンの人たちが否定する位置づけは、それなりには根拠があるように思える。何しろ、JavaScriptは、JavaのDateクラスの2000年問題のバグまでそっくり似せて作られている*1

f:id:kmaebashi:20210704234454p:plain

確かに、JavaScriptは、関数がファーストクラスオブジェクトであったりレキシカルクロージャがあったりと、プログラミング言語の進化の系統樹からすれば、C→C++Javaという系統よりも、Lispから取り入れたものが多い言語だとは思う(あとは、プロトタイプオブジェクト指向言語として、SELFとか)。しかし、それにしても、これほどあからさまに「似せて作られた」ことを無視して「メロンとメロンパン」とか「インドとインドネシア」とか言い募るのは、あまり誠実な態度とは言えないんじゃないですかね。

参考ページ:

https://www.markupdancing.net/archive/20081111-083300.html

 

――というようなことも、「完全初心者のためのプログラミング入門」には書いておりますよ! という宣伝でした。

kmaebashi.com

はじめに――完全初心者のためのプログラミング入門

*1:2021年現在、getYear()が121を返すことだと思われる。

プログラミングを始める前の予備知識って結構多いな、という話

しつこく、「完全初心者のためのプログラミング入門」の話。

完全初心者のためのプログラミング入門

http://kmaebashi.com/programmer/beginner/index.html

だいぶ前ですが、以下のようなツイートをしたことがあります。

で、実際、「完全初心者のためのプログラミング入門」には「ファイルとフォルダ」の項を入れました。

ファイルとフォルダ――完全初心者のためのプログラミング入門

Windowsを毎日使ってWebを見ていたとしても、ファイルやフォルダのことは知らない、エクスプローラーなど起動したこともない、という人は多そうですし、仕事でWordなりExcelなりを使っているからファイルやフォルダのことなんか当然知っている、という人でも、拡張子をデフォルトのまま非表示にしていて思った通りのファイルを作れなかった、というケースがありました。だったらやっぱりここから説明が必要です。いくらなんでもこんなことは知ってるよ、という人は読み飛ばしてもらえばよいとして。

まあ、これくらいのことは最初から覚悟していたのです。でも、いざ書き始めて、BMI計算プログラムを作ったところで、「あ、ここで身長体重に全角文字を入力してしまってはまる人もいるだろうなあ」と思って『「文字コード」とは何か?』を書き始めたりしてまあ時間がかかることかかること。

「文字コード」とは何か?――完全初心者のためのプログラミング入門

文字コードとは何か、を説明するにしても、いまどきJIS X 0201(半角カナ)とかJIS X 0208(シフトJISとかEUCとかの文字セット)とかはいらんのではないか、いきなりUnicodeUTF-8でよいのではないか、とは思いましたが、発端が「身長体重に全角文字を入力してしまってはまる」ことを想定しているわけで、そもそもパソコンを使い始めてからずっとプロポーショナルフォントを見てきた人にしてみれば、これぐらい歴史を追わないと全角・半角の区別などというものがなぜあるのかわからないでしょう。

コンピュータを使う限り、当然、ビットとかバイトの理解も必要ですし(これがわからないと文字コードエンコーディングの概念もわかりませんし)、

ビット、バイト、2進数、16進数――完全初心者のためのプログラミング入門

いろいろ書いているうちに書き手の私がどうしても「処理系」という言葉を使いたくなるわけですが、そうなるとコンパイラとかインタプリタの話題も必要です。

コンパイラとインタプリタ――完全初心者のためのプログラミング入門

本編の、「UFOゲームを作ってみよう」という話題を書き始める前に、この辺でずいぶん時間を取られてしまいました。

それにしても、我々プログラマは、みんな最低限の知識としてこれぐらいのことは身につけているわけです。そりゃまあどんな仕事でもこの程度のことは覚えなければいけないのかもしれませんけれど、プログラマというお仕事も、結構な専門知識が必要であるようです。それこそ「底辺」と呼ばれるような仕事であっても。

自分の仕事に誇りをもって、「給料増やせ!」と叫ぶべきですね。

「完全初心者のためのプログラミング入門」に改題しました

先週公開した「本当の初心者のためのプログラミング入門」ですが、公開後にぐぐってみたら、同名の書籍がKindleにあることがわかりました。向こうが先なので、「完全初心者のためのプログラミング入門」に改題します。

完全初心者のためのプログラミング入門

確かに、かぶっても不思議ではないタイトルでした。事前に確認しておくべきでしたね……

 

「本当の初心者のためのプログラミング入門」始めました

タイトルからして無謀ですが、「本当の初心者のためのプログラミング入門」というのを始めました(始めました、と言いつつ、続くかどうかは評判次第ですが)。

kmaebashi.com

この入門では、JavaScriptを使って、以下のような「UFOゲーム」を作ります。

下にある「キャノン砲」で、飛び回るUFOを撃墜するゲームです。

UFOは1機しかいないし、UFOは撃ってこないし、キャノン砲が発射するビームも画面上には1発しか存在しません(ビームが消えるまで、次のビームが撃てない。昔のスペースインベーダーギャラクシアンはこうだった)。しょぼいゲームですが、最初の一歩はこれでよいかな、と思っています。

実のところこのUFOゲームは、かつて「マイコンBASICマガジン」、略して「ベーマガ」の1982年8月号に載っていた「UFOゲームを作ってみよう」へのオマージュです。ベーマガのUFOゲームは、BASICで作られていて、「AAA」のUFOを「I」のビームで撃墜するようなゲームでした。ゲームとして遊ぶに足るものかどうかはともかく、当時のBASICゲームの作り方を学ぶにはとても参考になりました。当時の私は中1でしたが、それでも十分読みこなせる記事でした。

それに比べ、現在のプログラミング初心者は、どのようにプログラミングを学び始めればよいのでしょうか。スイッチONでBASICが動いた80年代のパソコンと違い、まず開発環境のインストールが必要ですし、Webアプリでも作ろうとするならHTMLとCSSとサーバ側言語とJavaScriptSQLが必要です。とても初心者の手に負えるとは思えません。

JavaScriptでUFOゲームを作るなら、HTMLとJavaScriptさえ覚えれば、あとはメモ帳1本で可能です(あ、絵を描くのにペイントも要るか)。最初は、正体不明のファイルを山ほど自動生成する統合開発環境を使うより、メモ帳なりのテキストエディタガリガリ書いていく方が、自分がやっていることがすべて理解できて勉強になると思います。

――とはいえ、最初の言語にJavaScriptが適切か、ということに関してはずっと思うところがあって。

 とはいえ、Windowsを買ってきたら環境構築なしでいきなり使えて、UFOゲームのようなゲームも作れて、世間に情報が多い言語というとやはりJavaScriptくらいしかないでしょう*1

というわけで書き始めてみると、これが大変で大変で、「本当の初心者」を対象にするのなら「ファイルとフォルダ」の概念くらいは書かなければいけないだろう、とは最初から思っていましたが、書き始めてみるとあれもこれもと書かなければいけないことが増えていって、ずいぶん時間がかかってしまいました(書き始めたの、いつだったっけ?)。

今回公開分で、ひとまずUFOゲームは最後まで作っています。最終的には、これくらいのシューティングゲームくらいまで持っていきたいと思っていますが、さて、どうなりますことやら。

※このシューティングゲームは、以下のリンクから遊べます。

http://kmaebashi.com/programmer/beginner/shooting03/shootinggame.html

 

*1:実のところ私はこの目的で1個言語を作ったりもしたのですが、個人開発の、ライブラリも揃わない、情報もない、バグもありそうな言語に初心者を巻き込めないよね。