2018年02月10日

英語教育に文法は不必要か

 「文法は必要?不要? 英語教育の最前線」(日経ビジネスオンライン,池田和弘氏)。池田氏は、「今後は『必要最小限の文法』という発想になっていく」と書かれている。世にありがちな「英文法なんて不要」という暴論に流れていないところはさすが。だからこそ、きちんと教育現場で結果を出してこられたんだろう。

 「英文法は不要」という論に流れる教員は、往々にして、何のルールも説明せずに英語の「例文」だけを延々と垂れ流して、それが英語教育だと思い込んでいる場合がある。そこから「自発的に」規則性を読み取れる生徒がいないわけではないが、そんな子供はほんの一握りだろう。池田氏は、伝統的な学校英文法の枠ではないとしても、必要な「ルール」はちゃんと言葉で説明している。別記事で挙げられている「仮定法過去は、過去形に『私の想像だけど…』という意味がある、と説明すればよい」という例は、目からウロコだった。また、「すべて英語で教えるのではなく、日本語で説明を加えることが大事」とも述べられている。これも大切なこと。

 ただ、5文型や能動態/受動態の転換練習は有害だ、というのは、あまり賛同できないかな。自動詞/他動詞の区別、目的語/補語の違い、能動態と受動態の関係などは、「ルール化して理詰めで説明」してもらった方がよくわかる、という子っているんですよ。特に、理数系科目はまあまあできるけど、国語がさっぱりで、言語をあやつる能力自体があまり高くない人には、こういう傾向が強い。これは、語学教育だけをやっている人にはわかりにくい感覚かもしれない。

タグ:教育 社会
posted by toshinagata at 10:34| 日記

2018年02月04日

LÖVE のページ作りました

 LÖVE のページを作りました:「LÖVE (Love2D) プログラミング」。

2018.2.10. 追記:「LÖVE (Love2D)」と表記するようにしました。「LÖVE」って検索しにくいんですよね。「Love2D」だと見つけやすい。

 以前に Luajit で作った「さかなは踊る」を移植してみた。この動画は Mac で動かしたもの。ラズパイでも動くけど、なぜか音がずれる。

 プログラムはこちらにあります

 ついでにメモ。スクリーンショットで作成した動画をアスペクト比 16:9 にして mp4 に変換する方法。まず、アスペクト比を保ったまま縦を288ピクセルにして、その後黒い枠を左右に追加する(下の例では左右に78ピクセルずつ)。

$ ffmpeg -i fish.mov -vcodec h264 -acodec aac -vf "scale=356:288,pad=512:0:78:0:black" fish.mp4
posted by toshinagata at 23:54| 日記

2018年01月27日

LÖVE でゲームプログラミング

 スクリプト言語で簡便にプログラミングできる環境をいろいろ検討していたのだが、最近 LÖVE というのを見つけた。

 これ、ファイナルアンサーじゃないかなと思いつつある。こういうのが欲しかったんだよ。

  • Windows/Mac/Linux のクロスプラットフォーム。Raspbian でも動く。iOS/Android 版もある?
  • 完全にフリーでオープンソース。
  • プログラム言語は Luajit。
  • GPU によるハードウェア描画をサポート。Raspbian 上では、X がなくてもフレームバッファ直書きで動く。
  • コミュニティが活発。フォーラムには毎日数件の投稿がある(英語だけど)。

 惜しむらくは、入門者向けのチュートリアルが少ない。例えば Scratch で遊んでいた人が移行できる感じではない。もともと Lua の知識がある人なら、スムーズに入っていけるんだと思うけど。また、日本語の情報はまだまだ少ない。このへんを参考に。

 とりあえず Mac で動かしてみた。LÖVE のホームページから Mac 版をダウンロードして展開、/Applications に置いておく。適当な場所に fish というディレクトリを作って、その中に main.lua を以下の内容で作成する。PNG ファイルはこれをダウンロードして、fish/images ディレクトリとして展開する。

player     = {}
fish       = {}
images = {}
cwide      = 320
chigh      = 240

love.window.setTitle('Les Poissons Danse')
swide = love.graphics.getWidth()
shigh = love.graphics.getHeight()

function love.load()
  images.fish0 = love.graphics.newImage('images/fish0.png')
  images.man0 = love.graphics.newImage('images/man0.png')
  fish.x    = 0
  fish.y    = 0
  fish.img  = images.fish0
  fish.width = fish.img:getWidth()
  fish.height = fish.img:getHeight()
  fish.speed = 150
  player.x     = 150
  player.y     = 150
  player.img   = images.man0
  player.width = player.img:getWidth()
  player.height = player.img:getHeight()
  player.speed = 200
end
    
function love.update(dt)
  dx = player.speed * dt
  if love.keyboard.isDown("right") then
    if player.x <= (cwide - player.width - dx) then
      player.x = player.x + dx
    end
  elseif love.keyboard.isDown("left") then
    if player.x >= dx then
      player.x = player.x - dx
    end
  elseif love.keyboard.isDown("down")  then
    if player.y <= (chigh - player.height - dx) then
      player.y = player.y + dx
    end
  elseif love.keyboard.isDown("up") then
    if player.y >= dx then
      player.y = player.y - dx
    end
  end
  dx = fish.speed * dt
  fish.x = fish.x + dx
  if fish.x >= cwide - fish.width then
    fish.speed = -math.abs(fish.speed)
    fish.x = fish.x - dx
  elseif fish.x <= 0 then
    fish.speed = math.abs(fish.speed)
    fish.x = fish.x - dx
  end
end
    
function love.draw()
  love.graphics.scale(swide / cwide, shigh / chigh)
  love.graphics.draw(player.img, player.x, player.y, 0, 1, 1, 0, 0)
  love.graphics.draw(fish.img, fish.x, fish.y, 0, 1, 1, 0, 0)
end

 ターミナルから /Applications/love.app/Contents/MacOS/love fish で実行。まだキャラクタを動かしているだけで、ゲームにはなってませんけどね。

20180127-1.png

 ラズパイでも動くことは確認した。ちょっとインストールが面倒なのと、挙動不審なところもあるので、まだ調査中。そのうちまとめます。

posted by toshinagata at 11:34| 日記

2018年01月25日

iPS研不正の件:利益相反なのか?

 共同通信の記事。今見ると、記事のタイトルは「山中所長が給与全額寄付 京大iPS研、論文不正」となっているし、利益相反を疑わせる印象操作は(あるけど)強くはない。批判を受けて記事を差し替えたんでしょうか。そうだとしたら、そのことを明記すべきですね。

(以下、上記の共同通信記事についてではなくて、一般論として書いています。)

 科学誌の世界では、誤報を出してしまったら、元の記事と同等の扱いで撤回記事が出ます。誌面の隅っこに小さく載せてごまかすようなことは許されません。また、元記事は「取り消された」ということが明記された上で、そのまま公開され続けるはずです(無かったことにはならない)。科学的事実を伝えていくための責任を負うためには、そういう扱いが必要とされるからです。

 新聞社も、自分が「社会的事実を伝えている」という矜持があるんだったら、誤報は元記事と同等の扱いで公開することと、誤報記事を「誤報である」という注釈付きで公開し続けることを選ぶべきだと思います。なぜなら、最初の報道の時点で自社が「誤報を伝えた」ということ自体が、一つの社会的事実であるからです。そこまでの客観的姿勢を貫く新聞社があれば、誰からも「フェイクニュース」などと嘲られることはなくなると思う。

タグ:社会
posted by toshinagata at 22:01| 日記

2018年01月21日

SmileBASIC で「コリドール」(ボードゲーム)

 パソコンミニの SmileBASIC で「コリドール」というボードゲームを実装してみた。二人プレイのみ。コンピュータとの対戦は(まだ)できません。

20180121-1.jpg

 「コリドール」は、正しくは "Quoridor" と書く。Gigamic 社が開発・販売しているゲームです。 ルールの説明と SmileBASIC のソースコードはこちらにあります。

 一人二役の対戦しかしてないのだけれども、二人でプレイしたら雰囲気悪くなりそう。お互いの進路を邪魔し合うゲームだからね。将棋で待ち伏せされたら「ひきょうだ」とか怒り出すタイプの人とはやらない方が無難。

 コンピュータにプレイさせるとしたら、どういう思考プラグラムを作ればいいだろうか。コマを動かす手は最大5種類だから選択肢が少ないが、壁を置く手はルール上可能な手が非常に多いので、案外面倒かもしれない。特に評価が難しそうなのが、「壁を置くことによって、相手に壁を置かれることを防ぐ」という戦略だな。誰か作ってみませんか。BASIC では難しそうだけど。

posted by toshinagata at 21:23| 日記

2018年01月20日

ジャズピアニストとクラシックピアニスト

 「同じ『ピアニスト』でもジャズとクラシックでは脳の使い方が違うことが判明」(Gigazine)。ああ、そりゃそうだろうなあ。クラシックピアノのトレーニングを受けていても、ジャズピアノって弾けるようにはならないんですよね。

 逆はどうなんだろう。ジャズの人で、ある程度その道を極めた後に、クラシックの勉強を始める人がいるじゃないですか。「脳の使い方」はともかくとして、音楽の捉え方が変わって、ジャズの演奏にもいい影響を及ぼしたりするんだろうか。中途半端な音楽になってしまったりしないんだろうか。

 ジャズの人が学ぼうとする音楽は、たいていバッハかモーツアルト。近現代の音楽に興味を持つ人もいるようです。いわゆるロマン派の音楽(たぶんベートーヴェンも含む)はあまり関心を持たれないようです。これも何か意味があるんだろうか。

タグ:音楽
posted by toshinagata at 10:41| 日記

2018年01月16日

PQI Air Card II でラズパイのベアメタル開発

 PQI Air Card II を購入。32 GB の microSD カードとセットで、2,400 円。

20180116-1.jpg

 一見 microSD カードのアダプタなのだが、実は無線 LAN の機能を持っている。SD カードの形をした無線 LAN 機器として FlashAir が有名だけど、この品物は、挿入された microSD を外部記憶装置として認識できる。無線 LAN 部分と記憶装置部分が分離されているため、使い道はさらに広い。

 今回は、ベアメタルラズパイの microSD カードに無線でアクセスできるようにする目的で購入した。こんな風に使っています。サンコーのmicroSD-SD エクステンションケーブル を使って、ラズパイの microSD スロットにフルサイズの SD が接続できるようにする。もともとラズパイに入れていた microSD を PQI Air Card II に入れて、それを SD スロットに挿入する。このままラズパイの電源を入れると、普通に立ち上がります。つまり、microSD-SD アダプタとしてもちゃんと機能している。

20180116-4.jpg

 無線 LAN の設定。立ち上げると、"PQI Air Card" という無線 LAN アクセスポイントが見える。そこに接続して(初期設定ではパスワードはない)、192.168.1.1 にウェブブラウザでアクセスすると、次の画面になる。

20180116-2.jpg

 PQI Air Card に PC からアクセスするとき、初期設定通りに PQI Air Card がアクセスポイントとなっていると、アクセスするたびに通常のインターネット接続と PQI Air Card を切り替えないといけないので、相当に煩わしい。そこで、PQI Air Card が自分ちの無線 LAN アクセスポイントにクライアントとして接続するように設定を変更する。Wifi Setup の画面で、Hotspots の項に自分ちの無線 LAN アクセスポイントの設定を書き込んでおく(下図の@)。

20180116-3.jpg

 ちなみにAは、PQI Air Card をアクセスポイントとして使う時のパスワード。普段は使わないけど、念のために設定しておく。

 立ち上げ時にクライアントモードで起動させるためには、microSD のルートディレクトリに autorun.sh というファイルを作成して、次の内容を書いておけばよい。(この情報は、ひとりぶろぐさん「デジカメ内部でRubyを動かす狂気!無線LAN内蔵SDカードアダプタPQI Air Cardの間違った使い方」による。)

#!/bin/sh
sleep 5
/usr/bin/w2

 再起動して、ターミナルから ftp でアクセス。IP アドレスが何かは推測するしかない。固定 IP で接続する方法ってあるのかな。

$ ftp 192.168.1.17
ftp: Can't connect to `192.168.1.17': Connection refused   #  違った!
ftp: Can't connect to `192.168.1.17'
ftp> quit
$ ftp 192.168.1.18
Connected to 192.168.1.18.     #  通りました
220 Operation successful
Name (192.168.1.18:xxxxxx):    #  ユーザー名もパスワードもなし
230 Operation successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 EPSV ok (|||37389|)
150 Directory listing
drwxr-xr-x    4 root     root             0 Dec 31 17:00 mtd
drwxr-xr-x   10 root     root          4096 Dec 31 17:00 sd
226 Operation successful
ftp> ls sd
229 EPSV ok (|||36661|)
150 Directory listing
-rwxr-xr-x    1 root     root         18693 Aug 21  2015 COPYING.linux
drwxr-xr-x    3 root     root          4096 Dec 31  1979 DCIM
-rwxr-xr-x    1 root     root          1494 Nov 18  2015 LICENCE.broadcom
...(snip)...
-rwxr-xr-x    1 root     root       3939492 Jul  3  2017 start_x.elf
226 Operation successful
ftp>

 SmileBASIC のファイルは /sd/PCM/SB, MZ-80C エミュレータのファイルは /sd/PCM/MZ80 に入っている。大文字・小文字は区別される。ディレクトリ名を打ち間違えてもエラーを返してくれないので、要注意。


ftp> cd sd/PCM/SB
250 Operation successful
ftp> put something
local: something remote: something
229 EPSV ok (|||52093|)
150 Ok to send data
100% |***********************************|  3852       27.41 MiB/s    00:00 ETA
226 Operation successful
3852 bytes sent in 00:00 (200.65 KiB/s)
ftp> 

 ところが、SmileBASIC 側で Files しても、ファイルは認識されていない。こっそりファイルを書き換える操作はサポートしていないのかも。結局 reboot が必要だった。さらに、リブートしたあと USB キーボードが認識されない。一度コネクタを抜き差ししないといけない。なんだか、いろいろ不便だな。電源を切って microSD を差し替えて、というよりはよほど楽だけどね。

タグ:Raspberry Pi
posted by toshinagata at 22:19| 日記

2018年01月14日

京都大学にムーミン出現

 Yahoo! トップページの「話題のツイート」で「京都大学」が一位に上がっていたから、何かと思ったら。

 あははは、京大生の仕業やな。左の写真のはあまりムーミンっぽくないけど、右2つの写真のはよくできてますね。昨日の「センター試験でムーミン出題」という話題に乗じて、一晩で作ったんだろう。

 この写真を見ると、京都もかなり雪が降ったようですね。センター試験の日って、天気が荒れることが多いような印象がある。受験生のみなさん、健闘を祈ります。

タグ:社会
posted by toshinagata at 12:20| 日記

2018年01月13日

SmileBASIC で「マージャンソリティア」

 引き続き「パソコンミニ」の SmileBASIC で、「マージャンソリティア」を実装してみた。ソースコードはこちらにあります。

20180113-1.jpg

 SmileBASIC の特徴、つづき。

  • グラフィックは4面。スプライトの画像データ置き場も兼ねている。つまり、スプライトは「あるグラフィック画面の指定した長方形部分の画像」として定義される。画像ファイルをいくつも並べて定義するよりずっと扱いやすい。
  • スプライトには「Z 座標」を指定できる。これは重ね合わせの順序を指定するだけで、自動的に遠近処理をしてくれるわけではない。
  • なぜか画面上部の 32 ドット分が表示されない。config.txt をいじって、ディスプレイ設定を 1280x800 にしているせいかも。「ちょっと違う設定」にすると正常に動かなくなるのはつらいですね。
  • テキスト画面は、8x8 ドットのフォントで表示される。漢字と英数字が同じサイズで表示されるのは、正直言って美しくない。
  • ただ、SmileBASIC の仕様として、「文字列の内部表現は UTF-16」となっていて、漢字も英数字も UTF-16 の1ワードで表現されている。「1文字=画面上の1文字」と対応づけることで、テキスト画面の扱いを単純化しているのだろう。
  • ファイル操作は少し弱い印象。たとえば、300 行弱のプログラムを save コマンドで保存する時、はっきり分かる程度の待ち時間がある。ベアメタルラズパイだと、SD カードを高速に読み書きするのが難しいので、その影響があるかも。
  • 外部記憶装置はサポートされていない。パソコンで作成したプログラムをパソコンミニに転送するには、一度シャットダウンして、micro SD カードを取り外して、パソコンにマウントしてコピーするほかない。
  • 本体でプログラムを編集したあと、うっかり未セーブでシャットダウンすると、そのままプログラムは消えてしまう。こんなところまでレトロパソコンを模倣しなくてもいいんじゃないの?
posted by toshinagata at 13:40| 日記

2018年01月11日

SmileBASIC で「さめがめ」

 「さめがめ」をパソコンミニSmileBASIC で実装してみた。ソースコードはこちらにあります。

20180111-1.jpg

写真が下手すぎだな。スクリーンショットの機能が欲しい…

 SmileBASIC は初めて使った。特徴はこんな感じかな。

  • 行番号に頼らないのは◎。今どき当たり前だけど、昔の BASIC に慣れた人は「やっぱり行番号への GOTO がわかりやすい」とか言うんだよな。(その価値観を子供向けの「プログラミング教育」に持ち込むのはやめてほしい、と切実に思う。)
  • 関数・手続きが定義できるのもよい。また、関数・手続きの中で VAR, DIM で変数を宣言すると、ローカル変数とみなされる。これも、今どきの言語では当然実装されているべき。
  • 手続きの定義は DEF name arg1, arg2,... で、関数の定義は DEF name(arg1, arg2,...)。つまり、カッコのあるなしで区別される。この仕様はちょっと違和感があるけど、「命令(カッコなしで使う)」と「関数(カッコありで使う)」の定義だと思えばいい。
  • 2つ以上の値を返す「命令」は、DEF name arg1, arg2,... OUT var1, var2,... と定義する。あまり見たことがない仕様だが、「アドレス渡し」の引数を実装するよりは、わかりやすいかもしれない。
  • 配列参照は a(i) ではなくて a[i]。関数と見た目を区別する意味では、この変更は良いと思う。
  • 「等しい」演算子は = ではなくて ==。また、「等しくない」演算子は <> ではなくて !=。配列参照も含めて、このあたりは現在よく使われている言語に合わせてある。
  • ビット演算子 (NOT, AND, OR, XOR) と論理演算子 (!, &&, ||) は分けてある。&&, || は C などと同様にショートカット機能を持つ。
posted by toshinagata at 19:47| 日記
email.png
Powered by さくらのブログ