PyPENのデバッグ
授業中いろいろと新しいプログラムを作っている生徒に逆三角関数とかをサポートしたことを伝えたら, 関数の中でのループとかがうまく働いていないことを指摘された。 そんなわけで1時間後にそれを修正。
授業中いろいろと新しいプログラムを作っている生徒に逆三角関数とかをサポートしたことを伝えたら, 関数の中でのループとかがうまく働いていないことを指摘された。 そんなわけで1時間後にそれを修正。
以前,物理シミュレーションのプログラムを作っている生徒から 「逆三角関数がないのが地味につらい」と言われたので作った。 また,コード欄が広げられないのがけっこう不便なので, bcralnit.jsに手を加えてそれができるようにした。 ライブラリが1つ増えたが仕方ない。
大阪教育大学でCE153。 今回は「高等学校情報科『情報I』教員研修用教材」第3章のプログラミング部分に PyPENが適用できるという内容で発表したのだが, 実は情報処理学会関係でPyPENの発表をするのはこれが初めてである。 発表途中に耐えきれずトイレに駆け込むというハプニングはあったが (参考文献がほとんどCEとSSSであることを含め, 関係者が現場に山ほどいるということが緊張の原因だったと思う),それはそれ。 Micro:bitの制御についてはWeb Bluetoothが使えるのではないか, Web APIについてはJSONPを試すのも一つの手であろう, FILE I/OについてはWebストレージが基本的にキー・バリューなのだから「そう見える」実装は簡単だ, などのコメントをいただいた。
情報交換会でも「言語の実装は楽しい」という話で盛り上がった。 PyPENがDNCLから見てもPythonから見ても中途半端であるという話を受けてのことだが, それは逆に自分がカッコいいと思う表現を実装するチャンスでもあるだろうと。 たとえばforループはwhileのマクロみたいなものだというCの発想を引きずっているから, ループを抜けたときにカウンタが最後の番号の次になるみたいなことが起きるのであって, それをPython風にしたければそう実装すればいいのだと (ループ抜けたら参照できなくなるという実装もあるよね,という話も)。 結局一番中途半端なのは,そこで迷っている自分なのだろう。
論文やスライドは いつものところ で。
ということで豊田西高校へ。
こんな風に生徒の考えを引き出してそれを具体的な活動に結びつけることは, 自分ではうまく出来ていないので感心することしきり。
某所で「プログラミングでおすすめの言語は何ですか」という質問を見るたびに, 「そんなの作りたいものに合わせて決めるだけのことやんか」と思うのだけど, そういう質問をする人はそもそもプログラミングで何ができるかがわかってなかったりするような気がする。 きっと「調理をすることで料理ができる」ことをわかるのと同じレベルで, プログラミングで何ができるかをわかることが必要で, 初等中等に求められているプログラミング教育ってそういうことじゃないかと思う。
ずっと使ってきた印刷プログラムをUnicode対応にするべく対応中。 というか入力はもともとXMLでやっていたのでその部分は何も変わらない。 問題はIVSへの対応だ。 職場で名簿に外字を使いまくるのをそろそろやめて, IPA mj明朝を使うことにしてはどうかと計画しているところなのだ。 しかしそれを使うメリットはIVSを使うことであり, Graphics.DrawStringはこれに対応していない。 TextRenderer.DrawTextではちゃんと異体字が表示できるのだけど, 縦方向横方向の倍率を変える方法がわからない (そもそも公式には印刷に対応していないAPIだ)。 SharpDXも使ってみてその両方に対応できることはわかったが, 印刷のときにどうやってHDCを取得するかがわからない (適当にやったらエラーになる)。 どうするのが正解なのかなあ。
縦横の倍率を変えるというのは横倍角がやりたいということではなく, 決まった枠の中に文字列を押し込めるときに, 文字の横幅だけを変化させて対応したいということだ。 生徒氏名短冊とかそれを前提に設計したフォームが多数あるのでなんとかしたい。 もちろんフォントの方でサイズを変更するのも一つの方法で, それは既に実装しているのだが, 全体的に小さい文字になるのがシャクなので。
学年通信の当番だったので,軽い文章を書いてみた。
Twitterを眺めていたら,面白い投稿を見つけた。 その人がTwitterを始める前,始めてから,そして利用時間に制限を設けたときの, それぞれの時間の使い方をグラフにしてみたというものだ。 うろ覚えだがだいたいこんな感じだったと思う。\ IMG /images/20200128.png グラフ
始める前は勉強や読書に使っていた時間をTwitterにずいぶん侵食されてしまったので, 時間制限をしてみたら空いた時間は何もせずに過ごしてしまっていたというのだ。 納得できるとか,自分もそうだというようなコメントが多くあった。 筆者自身にも身にしみてわかる話だ。
時間を使うということ自体も一つの能力なのだということを話しておきたい。
いつだったか,碁会所で囲碁の小さい大会に出たことがある。 持ち時間が決められていたので対局時計にセットしたところ, 対局者が「時計押さなくていいよ」と言い出した。 ルール無視で大丈夫かと思ったが, とりあえず時計は進めるだけ進めて打ち始めた。 その対局はそれまで打った中で一番よく頭を使ったのだが(結局コウの損得を見誤って負けた), 終わって時計を見ると2人合わせて1人分の持ち時間さえ消費していなかった。 プロの対局は1人数時間の持ち時間で行われたりする(テレビでやっているような早碁は別)。 それは彼らがそれだけの時間考えることができるということであり, 筆者のような素人は考えることに何十分かの時間を使うのが精一杯だったのだ。
高校生であるみんなは実際のところ忙しい。 部活動や生徒会活動では中心的な役割を果たすことも多いだろう。 受験と言われてもそれらが片付くまでは本腰を入れられないという気分になることもわかる。 しかし,いろんなことが片付いて時間ができたとき, 本当にそれを使うことができるだろうか。 最初のTwitterの話のように,空いた時間をただ空いたままにしてしまったりはしないだろうか。
森博嗣という(元?)小説家は,最近出した新書のあとがきで, 自分が面白い生活をするためにずいぶん時間をかけて準備をしてきたということを語っていた。 趣味である工作を思う存分行うためにはお金が必要で, そのために今使えるリソースを検討した結果, 夜の空いた時間を使って書いたことがない小説を書くことを決めたのだという。 部活が終わったら,入試が終わったら,就活が終わったら,結婚したら, 子供が独り立ちしたら,定年が来たら…そうやって|やりたいことだけでなく,やるべきことまでも先延ばしにしてしまうのは, 結局のところ面白くないことなのだと考えている。
2学期の積み残しがなかったクラスでPyPENを使った授業を開始。 生徒のコメントの中に「3の2乗はどう書くのですか」というのがあった。 これは演算子として**を実装しろという要求なのだろうか。 あってもいいと思うので, 優先順位低めでやってみようかとは思う。
0除算のエラーに関するコメントもあった。 数学では「できない」なのがエラーになるという「違い」に着目したとのこと。