6歳にプログラミングを教えて失敗した話
microbitをなんとか有効的に使いたい & 前からプログラミング教育に興味があったので、隣家の家族に協力してもらい、男の子(6歳)にプログラミングをマンツーマンで教えてみた。
使ったもの
生徒(1人)
- 隣人の6歳男子
- ゲーム大好き
- プログラミングに興味があるかは不明(多分ない)
- 母親はプログラミング教育にかなり興味あり
授業について
- 授業会場は筆者の家のリビング
- 授業時間は30分
- microbitサイトのビジュアルプログラミングで動作を組み立てるやり方
- 筆者の家なので妻と娘(1歳)がリビングで自由にしてる
- 生徒の親は不参加
やったこと
- プログラムとはなにか?を軽く説明
- Microbitで起動時にLEDで好きなマークを表示
- microbitのAボタン押下でLEDにお化けを表示(if的な処理)
- microbitのBボタン押下でLEDにウンチを表示(if的な処理)
結果
- 「ゲームはプログラムで作られている」と説明すると「え?ほんと?」と興味を示す
- 最初にmicrobitでLEDを表示させた後、飽きたのか席から逃亡して娘のオモチャで遊び始める
- なんとか席に戻してもすぐ、逃亡して授業がなかなか進まなかった
- なんとか授業は完遂したがプログラミングとは何か的なことは10%も伝わってない
- 俺「なんとか終わったね、お疲れ様!」 男の子「そんな事より外で遊ぼうよー」
反省点
マウスが操作できる前提だった
- まずこれが間違い
- マウスに慣れてない子だった
- クリックが狙ったところにできず苦労していた
- 今時の若い子はPCを使えると思ったが、時代はスマフォが主流らしい
microbitに興味を示さなかった
- 6歳の男の子なら光る機械に興味を持つだろうと思ったが、これが間違い
- LEDを1回表示させたら飽きた
- Scratchのようにキャラクターを動かすやり方の方がいい
- microbitを使うならもう少し年齢が上じゃないとダメ
授業机にコタツはNG
- コタツだと簡単に立ち上がって席から離脱できてしまう
- 机+椅子で多少逃げにくくすべき
授業部屋はテレビがON & オモチャがあってはならない
- 娘がテレビを見ていたので男の子もついつい見てしまう
- 娘のオモチャが気になってPC画面を見てくれない
- むしろ授業PCよりもテレビとオモチャを多く見ていた
- 授業するなら誘惑するモノを同じ部屋に置いてはならない(当たり前)
男の子の母には成果物としてmicrobitの完成物を見せ、「え?これを作ったんですか?」的な驚きコメントを頂いた。
が、結果としてプログラミング学習できたかは怪しく、「子供にモノを教えて静かに聞いてもらえるって難しいですね」と伝えると笑ってくれた。
今回の失敗で得たもの
環境作りは超大事!
- 家でやるならPC以外に何もない部屋を用意しなければならない
絵で説明すること
- 口だけで説明しても男の子は全くイメージできてなかった
- 下手な絵でもいいから紙にでも書いて説明するべき
年齢に合わせた学習方法を選ぶこと
- 光るデバイスに飛びつくのは少数派らしい
- 子供が興味をもつキャラクターものにするべき
次回に盛り込みたいこと
- 生徒数を複数にしたい(競争させて集中させよう作戦)
- ラズパイ3でScratchでの授業を試したい
- microbitを使うなら音を出す授業にしたい(音が出せるの?と興味を持っていた)
- デバイスを使わずCode Monkeyのようなサイトでの授業もやってみたい
The following classes could not be instantiated:- android.support.v7.widget.AppCompatTextView
現象
Android Studio 2.3.3でPreview画面に何やらerrorが出とる。
The following classes could not be instantiated:- android.support.v7.widget.AppCompatTextView
java.lang.NullPointerException at android.content.res.Resources_Delegate.getValue(Resources_Delegate.java:788) at android.content.res.Resources.getValue(Resources.java:1286) at android.support.v4.content.res.ResourcesCompat.loadFont(ResourcesCompat.java:212) at android.support.v4.content.res.ResourcesCompat.getFont(ResourcesCompat.java:206) at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119) at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:208) at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:152) at android.support.v7.widget.AppCompatTextHelperV17.loadFromAttributes(AppCompatTextHelperV17.java:38) at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:81) at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:71) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:475) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:250) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:213) at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadClass(LayoutlibCallbackImpl.java:193) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:333) at android.view.BridgeInflater.onCreateView(BridgeInflater.java:152) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:717) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:785) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:222) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at com.android.layoutlib.bridge.bars.CustomBar.<init>(CustomBar.java:95) at com.android.layoutlib.bridge.bars.StatusBar.<init>(StatusBar.java:67) at com.android.layoutlib.bridge.impl.Layout.createStatusBar(Layout.java:224) at com.android.layoutlib.bridge.impl.Layout.<init>(Layout.java:146) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:301) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:429) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:368) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:567) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:549) at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:863) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:549) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$1(RenderTask.java:680) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
一体なんだこのエラーは...
解決方法
values/styles.xmlのベーステーマのを修正する。
Theme.AppCompat.Light.DarkActionBar
から
Base.Theme.AppCompat.Light.DarkActionBar
にすると直った。
<resources> <!-- Base application theme. --> - <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> + <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
MacOS Sierraでラズパイssh接続時にWarning: untrusted X11 forwarding setup failed: xauth key data not generated
MacをSierraにアップグレードした後、ラズパイにssh -Xで接続すると以下のエラーが出ていた。
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
はじめは気付かず、ssh越しにラズパイの画像をCLIで表示しようとすると動かず
$ feh Pictures/image.jpg feh ERROR: Can't open X display. It *is* running, yeah?
一体なにがあった...
原因
エラーをググるとStackOverFlowに同様の現象を質問してる人を発見。
MacOSがSierraになってからxauthの場所が変更されたらしく、
どうやら ssh -XでXQuartzが起動してないようだ。
対処法
- termnalで
/etc/ssh/ssh_config
をひらく
sudo vi /etc/ssh/ssh_config
- 最後の行に以下を追加
XAuthLocation /usr/X11/bin/xauth
- Mac再起動
これで ssh -XでXQuartzが起動するようになった。
解決!
feh ERROR: Can't open X display [Mac]
MacからラズパイにSSHで接続して、
USBカメラで撮影した画像を feh
コマンドで表示しようとするとエラーが出る。
$ feh ./image.jpg feh ERROR: Can't open X display. It *is* running, yeah?
これ、前も見たことあるエラーだな。
ググってあれこれ探した結果、MacではXQuartzを入れれば解決する事がわかった。
解決策
- XQuartzをインストールする。
- Macを再起動する
- terminalからラズパイに-Xを付きでssh接続する
ssh -X pi@raspberrypi.local
(-X でMacのXQuartzが起動する) - fehコマンドで画像を開くと… 画像が見れた!
参考リンク
やいまふにWeb版を公開
やいまふにWeb版を公開した。
八重山諸島を結ぶ離島船の運行情報を簡単にチェック。
安栄観光、八重山観光フェリー、石垣ドリーム観光に対応。
また、船の運行を左右する風や波などの天気情報も確認できる。
開発の話をすると、
- Vuejsフレームワーク
- Materializecssでスタイルを作成
- API周りはFirebase Realtime Database
- 公開サーバーはFirebase Hosting
初めて公開できるWebサイトを作った。
初めてのデザインや慣れないJavascriptなど、学ぶべき事が多すぎて苦労したが、
どうにか公開できてホッとしている。
この達成感こそプログラマーの醍醐味だよね
Error: Error parsing triggers: Cannot find module 'firebase-functions'
事象
久々にfirebase Hostingにdeployしようとしたらエラーが出てデプロイできない。
$ firebase deploy === Deploying to 'my-app'... i deploying database, functions, hosting ✔ database: rules ready to deploy. i functions: ensuring necessary APIs are enabled... i runtimeconfig: ensuring necessary APIs are enabled... ✔ runtimeconfig: all necessary APIs are enabled ✔ functions: all necessary APIs are enabled i functions: preparing functions directory for uploading... Error: Error parsing triggers: Cannot find module 'firebase-functions' Try running "npm install" in your functions directory before deploying.
firebase-functionsが無いぜ!npm installしてね、というメッセージ内容。
1ヶ月前までfirebase deployで何事もなくデプロイできていたのに!
解決方法
functionsというディレクトリの中にpackage.jsonがあったので、これをインストールしればいいらしい。
つまり、functionsディレクトリ内で npm install
するだけ。
$ cd functions $ npm install ...
インストール完了後に再度デプロイしてみると
$ firebase deploy ... ✔ Deploy complete!
デプロイ成功!
log4phpでエラー「Call to undefined function simplexml_load_file」in CentOS
PHP7.0をremiコマンドでインストール済みのCentOSで、log4phpを設置する事になった。
しかし、log4phpのconfig.xmlを読み込むところでエラーが吐かれた。
Fatal error: Uncaught Error: Call to undefined function simplexml_load_file() in log4php/configurators/LoggerConfigurationAdapterXML.php:87
simplexml_load_fileが無いと申しておる。
ならば、xmlを読み込むモノを入れようではないか。
$ yum install php-xml
するとズラズラとログが流れるが、最後にエラーの文字が
Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * epel: ftp.riken.jp * remi-safe: mirror.smartmedia.net.id Resolving Dependencies --> Running transaction check ---> Package php-xml.x86_64 0:5.4.16-42.el7 will be installed --> Processing Dependency: php-common(x86-64) = 5.4.16-42.el7 for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.24)(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.22)(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18)(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.13)(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11)(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libxslt.so.1()(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Processing Dependency: libexslt.so.0()(64bit) for package: php-xml-5.4.16-42.el7.x86_64 --> Running transaction check ---> Package libxslt.x86_64 0:1.1.28-5.el7 will be installed ---> Package php-xml.x86_64 0:5.4.16-42.el7 will be installed --> Processing Dependency: php-common(x86-64) = 5.4.16-42.el7 for package: php-xml-5.4.16-42.el7.x86_64 --> Finished Dependency Resolution Error: Package: php-xml-5.4.16-42.el7.x86_64 (base) Requires: php-common(x86-64) = 5.4.16-42.el7 Installed: php-common-7.0.15-1.el7.remi.x86_64 (@remi-php70) php-common(x86-64) = 7.0.15-1.el7.remi Available: php-common-5.4.16-42.el7.x86_64 (base) php-common(x86-64) = 5.4.16-42.el7 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
最後のエラー文を抜粋すると
Error: Package: php-xml-5.4.16-42.el7.x86_64 (base) Requires: php-common(x86-64) = 5.4.16-42.el7 Installed: php-common-7.0.15-1.el7.remi.x86_64 (@remi-php70) php-common(x86-64) = 7.0.15-1.el7.remi Available: php-common-5.4.16-42.el7.x86_64 (base) php-common(x86-64) = 5.4.16-42.el7 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
なぜか
php-xml-5.4.16-42.el7.x86_64 (base)
という古いバージョンをインストールしようとして
php-common(x86-64) = 5.4.16-42.el7が必要、と出てるが
既に最新の php-common-7.0.15-1.el7.remi.x86_64 (@remi-php70)
が入っている申しておる。
こういう時はオプションを付けて、remiリポジトリに向けると解決するらしい。
$ yum install --enablerepo=remi php-common php-xml
インストールログはないけど、log4phpが動作するようになった。
めでたしめでたし