投稿者: nishimotz

  • なぜ @24motz aka @nishimotz は #RubyKaigi で講演をするのか

    いよいよ開催が迫ってきた RubyKaigi 2017 (開催地:広島)で、オーガナイザーのひとりとして活動している「にしもつ」 @24motz aka @nishimotz です。
    What visually impaired programmers are thinking about Ruby? というトークもさせていただく予定です。
    2015年から Python の活動を広島でやっていて、やっと Python がブレイクしてきた今年、そっちの活動を保留して RubyKaigi のお世話をすることになったのですが、私のもともとのモチベーションが NVDA 日本語版の紹介、そして「アクセシビリティ」だったので、じゃあ RubyKaigi で自分がアクセシビリティ関連の貢献をすればよいのでは、と気持ちを切り替えたのが、上記のトーク提案の背景です。
    今年 PyCon JP 2017 ではスクリーンリーダー関係の発表や活動をしていません(聴講者として参加して楽しんできました)が、かわりに東京では NVDA ワールド 2017 を10月31日(火曜)に開催します。
    私がアクセシビリティの委員会活動やスクリーンリーダーのコミュニティでつながっている人の何人かは、音声合成による画面読み上げや、点字ディスプレイというデバイスを PC に接続して、プログラミングやインフラ管理などをやっておられます。
    その人たちに Ruby について質問してみたことをヒントに、私が Ruby のドキュメントやエディタなど主にツールのアクセシビリティを調べています。その結果を NVDAでの実演を交えて紹介します。
    今年の RubyKaigi サイトにはアクセシビリティのポリシーのページがあります。
    会場に託児所を用意していること、発表は録画して後日公開されること、など、いままで RubyKaigi が取り組んでいたことも「アクセシビリティ」の一環として位置づけられています。
    現在まで視覚や聴覚の障害をお持ちの方から「参加するので配慮をしてほしい」というご要望はありませんでしたが、もし早い段階でなにかご要望があれば、可能なことの手配をお手伝いしようと思って構えていたのは事実です。
    (すべての日本語セッションに英語同時通訳をつけるというレベルの予算と体制のイベントなので、やれば手話通訳も要約筆記もできるはず。今年なくても来年でも)
    いや、いまからだと遅いといっているわけではありません。いまからできることをベストエフォートで提案するので、障害をお持ちのかたの RubyKaigi 参加を今からでも(少なくともオーガナイザーの一人である私は)歓迎します。
    チケットの購入はこちらです。
    本当に障害の当事者の人に参加してもらうためには「その人たちが聞きたいと思うコンテンツ」を用意することも必要だと、私は過去の学会活動やイベント運営の経験から感じています。
    RubyKaigi は「Ruby プログラミングが気になる人のためのイベント」というよりも「Ruby 言語の開発者たちが集まって Ruby の未来を真剣に語り合う場」なので(たぶん)、敷居が高いのだと思いますが、そんな中で私が「Ruby の開発者にも障害の当事者にも興味がありそうな話」ということで提案したのが「視覚障害者は Ruby についてどう思ってるのか」という発表です。
    なんせ私が当事者の声を代弁するだけなので、ぜひ「本当はこう思ってる」という人にフロアにいてほしい、あるいは後からでも議論のきっかけになってほしいと思っています。
    実は最初は「プログラミング言語の文法の違いは、アクセシビリティに影響がある」「Ruby の文法はアクセシビリティ的に優れている」みたいな仮説を検証できるといいなあ、と思ったのですが、ちょっと考えたり調べたりして、やはり無謀な計画だと思いなおしました。
    そういう話は10年くらい前に、視覚障害の学生にプログラミングを教えている先生からちらっと聞いていました。
    いわく、メソッドチェーンでどんどん1行で書いていけるので、コーディングを教えやすいし、音声読み上げにも向いている、と。。
    この仮説の検証はいまは無謀だと思えてきたわけですが、たとえば Python と比べて Ruby の文法が「視覚障害者に書きやすいか?」と自問自答すると、はっきり言えるのは「インデント」でしょうか。単純な問題ではなさそうです。
    けっきょくは、何をやりたいのか、求められるアウトプットはどういう状態なのか、仕事なのか趣味なのか、どういう環境やツールなのか、本人のスキルはどうなのか、といった話になります。
    最後に広島のグルメ情報でも書ければいいんですが、あいにく私はグルメでないし人生の半分くらい広島県外にいたので、「るびま」のリンク集にお任せします。
    かわりに、視覚障害者のプログラミングについて雑談します。
    彼ら(主に男性)は、スクリプト言語やドメイン固有言語(DSL)が好きな人たちだと私は見ています。
    たとえば Hot Soup Processor (HSP)日本語プログラミング言語「プロデル」はスクリーンリーダー利用者にとても愛されています。
    また世界的に有名なスクリーンリーダー JAWS には JAWS スクリプトという言語があって、アクセシビリティに問題のある Windows アプリの不具合を補うためにエンドユーザーがスクリプトを書いて共有しあっています。(同じようなことを汎用プログラミング言語 Python でやれるようにしたというのが NVDA の特長の一つです)
    ニュースサイトをスクレイピングして簡単に音声読み上げできるようにする「視覚障害者専用アプリ」もいくつかあり、人気を博していますが、スクレイピングのためのマクロや正規表現をメーリングリストで共有する、という文化も根強く続いています。
    そんな人たちが Ruby に向き合うとどうなるのか。。できるだけわかりやすく話せるように頑張りたいと思います。お楽しみに。
    余談:もうすこし予習したい人には、ラックの外谷さんの記事「スクリーンリーダーの音声を聞いたことがありますか?」をご紹介しておきます。

  • Windows + Python + Conda

    昨日は第4回の「すごい広島 with Python」でした。
    前回の報告:

    Interface as Mimesis


    このときに py.exe による Windows 環境での Python の切り替えについて詳しく書かなかったので、このブログでその続きを書きます。
    昨日は「もくもく会」だったので、ディープラーニングの環境構築にとりかかりました。行ってみると「話したいので聞いてほしい」という参加者が多数いらっしゃって、楽しかったのですが、私の作業はあまり進まなかったです。。
    やってみたこと:Windows に Theano を(GPU対応なしで)インストールした。
    環境:Windows 10 Home (64bit)
    もともと入っている Python:Python 2.7 (32bit) と Python 3.6 (32bit)
    もともとできていたこと:
    Python 3.6 を入れるとついてくる py.exe を使って py -2 または py -3 で両者を切り替えることができた。
    今回 theano をインストールした手順:

    1. Miniconda Windows 64bit installer をデフォルトのオプションでインストール
    2. コマンドプロンプトで
      > conda install numpy scipy mkl
    3. つづいてコマンドプロンプトで
      > conda install theano

    theano の動作確認:

    C:\work>python
     Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
     Type "help", "copyright", "credits" or "license" for more information.
     >>> import theano
     >>> from theano import tensor as T
     >>> x1 = T.scalar()
     >>> w1 = T.scalar()
     >>> w0 = T.scalar()
     >>> z1 = w1 * x1 + w0
     >>> net_input = theano.function(inputs=[w1, x1, w0], outputs=z1)
     >>> print('Net input: %.2f' % net_input(2.0, 1.0, 0.5))
     Net input: 2.50
     >>> import numpy as np
     >>> x = T.fmatrix(name='x')
     >>> x_sum = T.sum(x, axis=0)
     >>> calc_sum = theano.function(inputs=[x], outputs=x_sum)
     >>> ary = [[1, 2, 3], [1, 2, 3]]
     >>> print('Column sum:', calc_sum(ary))
     Column sum: [ 2. 4. 6.]
     >>> theano.config.floatX = 'float32'
     >>> ary = np.array([[1, 2, 3], [1, 2, 3]], dtype=theano.config.floatX)
     >>> print('Column sum:', calc_sum(ary))
     Column sum: [ 2. 4. 6.]

    この状態で python コマンドは今回インストールした Miniconda の Python になっています。
    この状態での Python 処理系の切り替えの確認:

    C:\work>py -3.6
    Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    C:\work>py -3.6-32
    Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    C:\work>py -2
    Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.

    公式 Python は 32bit 版を入れて Anaconda 系 Python は 64bit 版を入れる、という使い分けが必要にはなりますが py.exe ですべての環境を切り替えられることを確認しました。
    なお Theano の動作確認は Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 第13章を引用しました。
     

  • 学習・発達支援員養成講座(広島)のお知らせ

    西本は NPO法人 日本インクルーシブ教育研究所 の理事として、発達障害への正しい理解の促進、支援方法の普及啓発のお手伝いをしています。
    この団体の主な活動は発達障害を持つ人や保護者の直接的なサポートではなく、そういう問題に関わっておられる専門家の育成や支援です。
    教師、特別支援教育のアシスタントや指導員の方々などが会員として、あるいは受講者として参加しておられます。
    IT技術者向けの勉強会やイベントと重なってあまり行事に参加できないのですが、ときどき講演会や講習会のお手伝いをすることがあり、現実の現場の厳しさ、そういう場で活躍しておられる専門家の知見や洞察の深さ、そして受講生の方のモチベーションの高さなど、驚くことが多いです。
    私は主に事務の効率化やツールのアドバイスをしたり、組織運営の方針について議論をさせてもらったりしています。
    チャットワークのNPO支援プログラムは私が提案したツールの一つで、すっかり定着して便利に活用されています。ありがたいプログラムだと思います。
    そんな日本インクルーシブ教育研究所ですが、現在、第3期の「学習・発達支援員養成講座」として、広島で「学習・発達支援員ライセンス」の取得を目指される受講者を募集しております。
    理事として日ごろあまり貢献できていないので、いまさらですが、ブログで告知を引用させていただきます:

    (お知らせ ここから)
    今年もNPO日本インクルーシブ教育研究所では、広島市内の小中学校へ専門性のある支援員を配置したいといった思いから、学習・発達支援員養成講座を開きます。
    この養成講座は東京都港区とNPOエッジ(ディスレクシア普及団体)が12年前に始めたもので、民間と行政が協働で専門性のある学習支援員を各学校に配置したところ、不登校がゼロになった、子どもの成績が上がった、子どもが自立して支援員が必要なくなった等数々の良い報告があります。
    また文科省のホームページにもこの制度の素晴しさが載っていますのでご覧ください↓
    http://www.mext.go.jp/a_menu/shotou/tokubetu/material/012/013.htm
    一刻も早く、今を生きる子ども達が適切なサポートを受けて大人になっていける学級づくりをしていけるよう、私達はその一助となりたいと思っています。
    第3期学習・発達支援員養成講座についてはこちらからご覧頂けます↓
    https://www.hikk.biz/seminar/lsa-3/
    この養成講座の説明会もございます↓
    https://www.hikk.biz/seminar/muryo-setsumeikai/
    この養成講座にはフォローアップ研修もあります↓
    https://www.hikk.biz/seminar/follow-up/
    また、学習・発達支援員ライセンス取得者には定期的に事例検討会に参加できるよう現在準備を進めています。
    発達障害のある子ども達が、周りからの無理解や不適切な対応により二次障害となり社会へ出ていけなくなるといった最悪の事態を防ぐためにも、どうか周知のご協力をよろしくお願いいたします。
    (お知らせ ここまで)

  • すごい広島 with Python &環境構築

    PyCon mini Hiroshima と Python Boot Camp in 広島 のフォローアップ活動として、毎月最後の水曜日の夜に「すごい広島 with Python」を開催しています。
    4月からはじめて3ヶ月やってみて、定着してきたので、やっと自信をもって報告してみることにしました。
    毎週水曜日の定例の「すごい広島」は「もくもく会」なのですが、「with Python」は、なにかやってみて知見を共有する、というところに力を入れていて、いまのところライトニングトーク形式での開催が続いています。
    私の提供した話題は5月は Django の環境構築、今月は某プログラミングコンテストの例題 with Python でした。
    先月も今月も「Linux で Python の作業環境の構築ではまった」という話を聞いたので、情報共有サイトで言い尽くされているのに、と思いながら、繰り返し喋ったことをもう一度ここで書いておきます。
    Linux のディストリビューションはたいてい Python 処理系に深く依存しています。なので、/usr/bin/python をアプリ開発に使ったり、逆に上書きしてしまうことは賢明ではありません。
    パッケージで Python を入れたいという気持ちは十分に理解できますが、私は Python Boot Camp テキスト をいちど読んで、その方法を理解することをお勧めします。
    このテキストでは Linux 向けの環境構築は「ソースからインストールしなさい」になっていて、不親切に見えるかも知れないのですが、実はデプロイ環境を作る手順として一番つぶしがきくというのが私の実感です。
    つまり、ソースから素直にコンパイル・インストールして、例えば /usr/local/bin/python3 が存在する状態を作り、その python3 に紐付いた環境で作業をするということです。
    丁寧にやるなら

    /usr/local/bin/python3 -m venv env

    で環境を作れば、ちゃんとその venv 環境では、自分がインストールした実行ファイルがパス指定なしに python や pip になってくれます。
    (コマンド名が python3 か python かも気にしなくていい)
    自分は /usr/local/bin しか使わないことにすれば、OS 環境への影響を心配する必要がありません。
    デプロイ環境でも、面倒がらずに最初に env/bin/activate するのが安全と思います。
    応用として、この手順は 2.7 系と 3 系を安全に切り替えたりするときにも有効です(詳細は省略)。
    Windows では複数のバージョンの Python を使い分けるときに、まず最新の Python 3 系をインストールして、ランチャー(py.exe)と venv (virtualenv) を使えば、どの処理系にも事前に PATH を通す必要がない(はず)です。
    上述した私の Django セットアップは「Boot Camp 方式」で仮想マシンの環境構築をしていますし、例題 with Python でも py.exe をちょこっと紹介しています。
    ふだんは私は個人的な技術メモは別のサイトにこっそり書いていますが、この件は、きっと同じようなことをいろんな人がしつこく書かないといけないのだろうと思って、めずらしくブログに技術ネタを書きました。

  • こどもプログラミング教室(PCNひろしま)参加について

    「PCNひろしま」という団体の立ち上げに参加し、こどもたちに「プログラミング専用パソコン IchigoJam」を体験していただくイベントを開催することになりました。
    第1回は私が講師を担当する予定です。開催日は7月30日(日曜)午後1時開始、3時30分終了の予定です。
    会場は「イノベーション・ハブ・ひろしま Camps」です。
    募集開始が7月になっていますが、詳しくは connpass のイベントページをご参照ください。

    経緯

    ここでは、私の視点での IchigoJam の魅力、そしてこの活動に関わることになった経緯を書いておきたいと思います。
    2015年の年末に「こどものプログラミング教室」について相談を受けたことがあり、ちょうど気になっていた教材候補の一つとして2016年1月に IchigoJam を購入してみました。
    いわゆるビジュアルプログラミングの教材もいくつか試してみたのですが、私は IchigoJam がシンプルで扱いやすい、魅力的な教材だと感じました。
    また、ある程度ハードウェアを拡張でき、しかもその扱いも簡単であることから、教育用としてだけでなく、大人のちょっとした電子回路の実験にも使えるように思いました。
    とは言いつつ、最初はいろいろ不満もありました。なぜ PS/2 キーボードなのか、なぜ(アナログの)ビデオ出力なのか、などなど。。
    私の作業場所にはアナログビデオ入力のディスプレイがなかったため、アナログから HDMI に変換するスキャンコンバーターを購入してみたのですが、微妙に信号の規格がずれているらしく、実用的なクオリティの画像を HDMI ディスプレイに出力できませんでした。
    中国からの輸入品で購入した超小型の液晶モニタがちょうどよくて、作業環境はやっと落ち着きました。
    けっきょく去年「こどものプログラミング教室」に私は関わることはなく、しばらく IchigoJam の応用例を参考にして MicroPython + ESP8266 の実験をやったりもしていました。
    今年の2月の「オープンセミナー広島」に jig.jp の福野さん(IchigoJam の開発者)がいらっしゃって、それにあわせて開催された IchigoJam の体験会に立ち会わせてもらいました。
    そして、この教材に対する見方がまた変わりました。
    一言でいえば「こどもの教材としてよく考えて作られている」ということでした。
    ご自身がちゃんとこどもたちと向き合ってプログラミングを教えながら、その経験を踏まえて仕様を改良して、現在に至っているということが理解できました。
    その後、福野さんを広島に招いたり体験会を企画してくださった石崎さんを代表として「プログラミング・クラブ・ネットワーク (PCN)」の広島版を立ち上げることになり、やっといま、第1回イベントの告知にこぎ着けたところです。
    広島に戻って以来、大学生にプログラミングを教えることからもしばらく遠ざかっていたのですが、私自身がこども時代に「黒い画面とキーボードだけのコンピューター」にワクワクしていた気持ちを思い出して、私が理解した IchigoJam の魅力を多くの人にお伝えしたいと思っています。

    おまけ

    西本はことし RubyKaigi 2017 オーガナイザーとして、全国・世界の Ruby 技術者が9月18日からの3日間広島に集まるお祭りの裏方をやっております。
    現在は Super Early Bird 料金でのチケットを販売中です。
    またスポンサー企業も募集しております。
    そろそろカンファレンスの詳細がいろいろ発表されると思います。ご期待ください。
    去年まで活動していた Python のイベントはどうなったのかというと、今年は「すごい広島 with Python」として、4月から毎月1回、定期的な勉強会として盛り上げていこうとしています。
    スクリーンリーダー NVDA に関しては、VIC への参加、そして今年は秋以降に NVDA 日本語チームとして東京圏での活動を計画中です。
    あわせて今後ともよろしくお願いします。

  • 「つくれば工房」で MicroPython 体験会

    この記事は たまに広島 Advent Calendar 2016 20日目の記事です。
    広島で Python のカンファレンスを開催してきた PyCon mini Hiroshima 実行委員会の西本です。
    その他に、オープンソースの Windows 用スクリーンリーダー NVDA の日本の開発者コミュニティ、NVDA日本語チーム、そして広島のコミュニティNVDA ユーザ会広島などをやってきました。
    11月12日の PyCon mini Hiroshima の報告は PyCon JP のブログに書きました
    また 11月27日 OSC 2016 Hiroshima のセッション『jus研究会広島大会「ITコミュニティの運営を考える」』で NVDA のコミュニティについて喋らせてもらいました。開催レポートで詳しく紹介していただいています。

    つくれば工房

    広島で「電子工作やLED手芸など自分で自由に作るものづくりの場」=「つくれば工房」を運営しておられる遠藤さんが PyCon mini Hiroshima 2016 に参加され、私が紹介した MicroPython について興味を示してくださったので、MicroPython 体験会を提案しました。
    事前に見学をさせていただきました。
    会場は広島市西区楠木町のアドウィンテクノ塾です。
    お子さんから年配のかたまでいろんな人がいらっしゃって、Arduino や 3D プリンタなど、いろいろなことにそれぞれ取り組んでいらっしゃいました。
    毎週土曜日に欠かさず開催されているそうです。ものづくりの「もくもく会」だと思いました。

    MicroPython体験会

    ということで12月10日の「つくれば工房」にて「MicroPython体験会」を開催していただきました。

    つくれば工房のウェブサイトに報告を掲載していただいているので、自分用の記録をここにまとめます。

    • 参加者 17人くらい。やはり年配の方からお子さん(お母さん同伴)まで。マイコン開発経験者もPython経験者もいらっしゃった。Windowsパソコンを持ってきたけどプログラミング未経験、というかたもいらっしゃった。
    • スイッチサイエンスの ESPr One の持参を推奨したが、他の ESP8266 基盤を持参された方もいた。機材によってはLED点滅の実験のためにLEDをGPIOポートにつないでいただく必要があった。
    • ファームウェアの書き込みのためにPCとMicroUSBケーブルで接続していただいた。充電はできるけど通信はできないMicroUSBケーブルもあり、サポートに手間取った。
    • 西本が事前に確認したのは PC 側に Python 2.7 + esptool.py をインストールして書き込みをする手順だった。体験会をした部屋で WiFi がうまく使えなかったため、USB メモリで ESP8266 Flasher と MicroPython のバイナリ、ESPr One のUSBシリアルドライバなどを回覧してセットアップしていただくことになった。
    • Windows に TeraTerm をインストールしていただいたら、バージョン 4.93 に文字化けの不具合があり、4.92 を入れ直していただいた。

    説明したこと:

    • nishimotzのサイトで紹介したLED1の点滅を、ターミナルから逐次入力でやってもらった。
    • コンマとピリオド、コロンなど、文法を説明した方が間違えにくいということに気づき、基本的な Python の文法の説明をした。
    • ペーストモードの説明をして、このLEDの点滅を def blink() のように関数として「メモ帳」に書いてもらって、ペーストモードで貼り付けてもらった。そうすると blink() だけで点滅を実行できる。
    • 早くできた人は PWM でだんだん明るくなるコードを自分で試していた。
    • トラブルシューティング:ペーストモードで改行が余分に入る。TeraTermの改行設定を送受信ともにCRにしてもらう。
    • WiFiを触ってもらうと面白いのだろうが、いろいろ難しそうだったので今回は説明を見送り。

    質問されたこと:

    • WebREPL が動いてない:MicroPython 1.8.6 から初期化を実行しないと WebREPL が動かない仕様になった。
    • 割り込みは?:ユーザーボタンを押すとメソッドを実行する、といったコードは動作を確認している。
    • 起動すると自動的に実行するコード(main.py)をどうやって書き込むの?:WebREPLでアップロードするか、プログラムをファイルシステムに書き込むためのプログラムをターミナルで実行する。
    • 本格的に使えるの?:処理系を自分でビルドすれば、C言語拡張モジュールを組み込むことができる。CQ出版「インターフェース」2016年10月号に情報あり。

    私はいろいろ準備不足でしたが、ベテランのかたが気を利かせてサポートしてくださったおかげで、無事に体験会を行うことができました。
    ふだん Arduino でマイコン開発を楽しんでおられるかたも何人かいらっしゃいましたが、MicroPython のメリットや面白さをなにか感じていただければと思います。
    広島に Python Boot Camp を誘致する計画も進んでいますが、広島で MicroPython 体験会、いかがでしょうか。こんどやるときはもっと上手にやれると思うので、ご連絡ください。
    自分が映ってる写真を撮り忘れたので、「つくれば工房」さんのサイトからお借りしました:

  • NVDA で Excel を使う

    この記事は Webじゃないアクセシビリティ Advent Calendar 2016 13日目の記事です。
    前日はFCSアプリが公開されました。:友加の日々の記録:So-netブログでした。
    オープンソースの Windows 用スクリーンリーダー NVDA の日本の開発者コミュニティ、NVDA日本語チームの西本です。

    NVDA 2016.4jp

    このアドベントカレンダーにエントリーした時には NVDA (本家版)の次のバージョン 2016.4 は string freeze (翻訳者向けに新機能の追加や英語のドキュメントの更新が停止された段階)に入っていました。
    予想では11月29日にリリース候補版(RC)が出て、12月6日に正式リリース、ただし、なにかの事情でRCが2回出ることになったら1週間遅れるだろうと思い、この日を登録しました。
    結果的に「なにかの事情でリリース候補が遅れる」に加えて「リリース候補が2回でる」ことになり、本日12月13日には 2016.4 RC2 が出ました。おそらく正式版は今週末か来週でしょう。
    本家の正式版が完成したらすぐに日本語版 2016.4jp をリリースする見込みです。
    NVDA日本語版 2016.4jp の新機能ですが、Microsoft Excel でセルの罫線の報告を実装しました。
    この機能は(本家版にも提案はしていますが)いまのところ日本語版限定の機能なので、「日本語設定」に罫線報告を「なし」にしたり、色だけを省略できるオプションがあります。
    NVDA の Excel 罫線対応を実装するために使ったワークシート
    このほかには「NVDAキー」の表記を「NVDA制御キー」に揃えるなどの用語の変更、修正を行っています。
    NVDA 日本語版の課題やご要望の報告には「新規チケット登録」をご利用ください。
    ご報告いただいた件について詳細の調査や本家への提案などをお手伝いいただける NVDA 日本語チームの仲間も募集しております。
    前置きが長くなりましたが、ここから本題です。

    NVDAのExcel関連機能の紹介

    NVDA ユーザーガイドには Excel 関連機能がまとめられています
    VIC 広島市視覚障害者情報支援センター(ボランティアサークル)の12月4日の例会で、この NVDA の Excel 関連機能を講習会形式で紹介してみました。
    教材として使ったファイルは docs.com に置きました
    マクロを有効にした、いわゆる xlsm ファイルでお配りしています。
    メッセージボックスを開く簡単な VBA マクロを使っています。
    マクロが無効のままだと最後の「フォームフィールド」の実習がうまく動きません。
    「セキュリティの警告 マクロが無効にされました。」
    のようなペインが(F6キーで移動していくと)表示されるので、右側の「コンテンツの有効化」ボタンを押してください。
    NVDAでExcel.xlsm ファイルのSheet1を開いた画面

    ワークシートの切り替え

    Excel のファイル(ブック)には複数のワークシートを含むことができます。
    表示中のワークシートを切り替えるキーボードショートカットは Ctrl+PageUp および Ctrl+PageDown で、これは Excel の標準機能です。
    しかし NVDA で Excel を操作しているときには、要素リストで切り替えることもできます。
    NVDA+F7 :要素リストを開く
    要素リストで Shift+Tab を押して種別を「シート」に切り替えて、ツリービューに戻って、移動したいシートの名前で Enter を押します。
    なお NVDA 制御キーを押し損なうとただの F7 キーになってしまい、これは Excel のスペルチェックの呼び出しです。
    では、教材ファイルの Sheet2 に切り替えてみましょう。

    グラフの値を読む

    NVDAでExcel.xlsm の Sheet2 の画像。日付と数値の右側に棒グラフがある
    ワークシートの中を矢印キーで移動すると「グラフ」を選択することができませんが、要素リストを使うとフォーカスをグラフに移動できます。

    1. グラフが含まれているワークシートに移動します。
    2. NVDA をフォーカスモードにします。(ブラウズモードのままだとうまくフォーカスがグラフに移動しません)
    3. 要素リストで種別「グラフ」を選び、ツリービューでグラフを選択して Enter を押します。
    4. 要素リストのダイアログが閉じて、そのグラフにフォーカスが移動した状態になります。

    NVDA+Tab を使うと、グラフがフォーカス位置であると確認できます。
    この状態で、下矢印キーを押していくと、グラフを構成する各要素にフォーカスを移動できます。
    グラフの種類やオプションによって変わりますが、以下のような要素が見つかります。

    • 系列 系列1 1の1
    • 目盛
    • データラベル
    • グラフの軸 種類 項目 グループ 主
    • グラフの軸 種類 値 グループ 主
    • プロットエリア
    • グラフエリア

    「系列 系列1」に移動した状態で、今度は右矢印キーを押します。
    すると、以下のように値を読むことができます。

    • 1月2日 363.5
    • 1月9日 418.0

    右矢印キーを押し続けて、最後までいくと先頭に戻ります。
    また左矢印キーで逆方向に移動できます。
    この機能ですが、グラフの内容やデータの形式によっては不完全だったり不自然な読み上げになります。
    例えば、日付をシリアル値(数字)として読み上げてしまう、セルの書式設定を無視して小数点以下をすべて読み上げる、といった課題を確認しています。
    今回の教材では「NVDAがうまく読み上げるように」あらかじめ手を入れてあります。

    コメント

    Sheet1 のセル B12 には「コメント」がついています。
    NVDA はコメントのつけられたセルに移動すると「コメント」と報告します。
    コメントの内容は NVDA+Alt+C で確認できます。
    また要素リストの種別「コメント」を使うと、コメントを一覧できます。

    数式

    要素リストの種別「数式」を使うと、現在のワークシートに含まれる数式を一覧できます。
    Sheet1 のセル B3 には「=B2*消費税率」と書かれています。
    「消費税率」はセル B8 につけられた「名前」です。
    名前を管理する方法は NVDA にはありませんが、Excel の機能「名前の管理」は Ctrl+F3 で呼び出すことができます。

    行と列の見出しの自動報告

    A1 から B3 にかけて見出しのついた「表」があります。
    ちょっと小さくて物足りないので、以下のように書き足してください:

    • C1: 商品B
    • C2: 200
    • C3: (セルB3をコピーして貼り付けます)

    セル B2 の数式は B8 を名前で参照しているので、C3 には 200 * 1.08 = 216 が表示されます。
    では A1 にカーソルを移動して、以下を実行します。
    NVDA+Shift+C 見出し列の設定
    列を左右に移動したときに、1行目の内容を見出しに使って「商品A」「商品B」と読み上げるようになります。
    もういちど A1 にカーソルを移動して、今度は以下を実行します。
    NVDA+Shift+R 見出し行の設定
    さきほどの列見出しの報告に加えて、今度は行を上下に移動したときにも、A列の内容を見出しに使って「金額」「税込金額」と読み上げるようになります。
    この「見出し行と見出し列の場所」を保存するときに NVDA は Excel の「名前」機能を使っています。
    (さきほど紹介した Ctrl+F3「名前の管理」で確認できます)
    この状態でファイルを保存しておくと、Excel や NVDA を起動し直しても見出しの自動報告は再現されます。

    フォームフィールド

    NVDA 2016.3 で追加された機能が「フォームフィールドの操作」です。
    Sheet1 で NVDA+F7 要素リストを開いて、「種別」フォームフィールドに切り替えます。
    「ボタン1」というボタンが見つかるので、Enter を押します。
    これでフォーカスが Sheet1 のシートに貼り付けられた「ボタン」に移動した状態になりました。
    スペースを押すとボタンを押すことができます(既定のアクションの実行)。
    教材ファイルは「こんにちは」という小さなメッセージボックスを表示しています。
    「OK」というボタンがあります。
    このメッセージを閉じるまで Excel の他の操作ができません。
    OK ボタンにフォーカスを移動してスペースを押す、
    Enterを押す、あるいはEscを押す、といった方法でダイアログを閉じてください。

    最後に

    以上、要素リストの機能を中心に、NVDA が Excel に対して提供している機能を紹介しました。
    機能の実装や日本語の翻訳など、まだまだ課題もあると思うので、なにかお気づきのことがあればお知らせいただけると助かります。
    なお Excel をスクリーンリーダーで使う場合の一般的な解説をいくつか紹介しておきます:
    視覚障害者のためのExcel 2010キー操作マニュアル
    Microsoft Office 2013 のアクセシビリティ
    Excel 2016 でスクリーン リーダーを使用する方法のヘルプ

  • NVDA 2016.4 と FocusHighlight アドオン

    この記事は Web Accessibility Advent Calender 2016 の6日目の記事です。
    5日目は「「画像置換はアクセシブル」じゃないよ、という話」でした。
    オープンソースの Windows 用スクリーンリーダー NVDA の日本の開発者コミュニティ、NVDA日本語チームの西本です。
    NVDA と Web アクセシビリティの情報提供のために Webアクセシビリティ基盤委員会(WAIC) WG2 にも参加しています。

    NVDA 2016.4

    このアドベントカレンダーにエントリーした時には NVDA (本家版)の次のバージョン 2016.4 は string freeze (翻訳者向けに新機能の追加や英語のドキュメントの更新が停止された段階)に入っていました。
    翻訳者の作業締切が11月28日ごろに設定されていたことから、11月29日にリリース候補版(RC)が出て、12月6日に正式リリースになるだろうと予想し、この日を登録しました。
    ですが、なにか事情があったらしく、2016.4 RC は12月2日にリリースされ、おそらく正式版は今週末だろう、という状況です。
    本家の正式版が完成したらすぐに日本語版 2016.4jp をリリースする見込みです。
    NVDA 2016.4 で予定されている主な変更点ですが、ウェブなどのアクセシビリティを検証する開発者に便利な「スピーチビューアー」の操作性が改善されました。
    具体的には、スピーチビューアーを表示した状態で NVDA を終了すると、NVDA を次に起動したときに、スピーチビューアーを自動的に再表示するようになりました(「NVDA起動時にスピーチビューアーを表示」というチェックボックスで有効化できます)。
    直前に表示されていたスピーチビューアーのウィンドウの位置も保存されるようになりました。
    NVDA2016.4のスピーチビューアー
    スピーチビューアーと併用して、NVDAの音声エンジンの設定「音声なし」を選べば、音を出さないでキー操作や読み上げるテキストのチェックをする、という使い方ができます。
    2015年9月のセミナー資料 開発者のためのNVDA もご参照ください。
    もうひとつの変更点として、Microsoft Edge ブラウザへの対応が NVDA 2016.4 で改善しています。
    (2015年7月の Windows 10 のリリース以降、NVDA はずっと Edge ブラウザを非推奨としてきました)
    せっかくのWebアクセシビリティのアドベントカレンダーですが、私の準備が不十分であることと、「これで終わり」ではなさそうなので、Edge 対応はいずれ改めてお知らせしたいと思います。
    NVDA に関する最近の講演スライドとしては、11月3日に東京で登壇したときの資料を紹介しておきます。


    以上、前置きが長くなりました。ここから本題です。

    NVDA のアドオン FocusHighlight

    今日は、私が開発している NVDA のアドオン FocusHighlight について、やや詳しく紹介したいと思います。
    ブラウズモードの表示例(フォーカスが赤色の線、ナビゲーターオブジェクトが緑色のギザギザ線):
    www.nvda.jp でのフォーカスハイライトの利用例。In English リンクにフォーカスが、その下の「NVDAとは」にナビゲーターオブジェクトがある
    フォーカスモードの表示例(フォーカスが青色の斜線入り太線):
    www.nvda.jp におけるフォーカスハイライトの利用例。NVDAがフォーカスモードで、フォーカスが In English リンクにある

    このアドオンは、NVDA のナビゲーターオブジェクトや、フォーカスのあるオブジェクト・コントロールの場所を、色のついた長方形で強調して表示します。画面の見えにくい人、晴眼の指導者、開発者にとって有用です。

    NVDA 本家アドオンコミュニティのダウンロードページ
    開発版のダウンロードページ(GitHub)

    フォーカスハイライトに関する動画

    2016年4月に Deque Systems が Accessibility Testing with the NVDA Screenreader として YouTube動画 を公開しました。
    この中で NVDAのインストール手順の一環として Focus Highlight アドオンが紹介されました。

    2016年6月にはミツエーリンクスさんのブログ記事 「Deque SystemsがNVDAの紹介動画を公開」 でもこのことを取り上げておられます。
    多くの NVDA のアドオンは視覚障害の当事者にとって便利な機能を追加するものですが、Focus Highlight アドオンは「見えない人には一切なんの役にも立たない」アドオンです。
    NVDA のコミュニティではあまり話題になりません。
    ですが、今年はこの動画で紹介されたせいか、このアドオンについて、ちょこちょこ海外から問い合わせが来ました。
    バグ修正や改善の要望が増えてきたので、取りかかる前に、自分のモチベーションを思い出すために、開発の経緯を振り返りました。

    開発の背景

    Windows やウェブブラウザには「フォーカスの位置を示す表示」があります。もともと、フォーカスがどこにあるかは分かるはずです。
    (それが邪魔だということでWeb開発者がフォーカス位置表示を消すと問題になるわけですが。。)
    とはいえ、他のスクリーンリーダーに「Windowsの標準機能よりもしっかりフォーカス位置を強調する機能」があるので、NVDA にもつけて欲しいという話をときどき聞きました。
    スクリーンリーダーの利用者は全盲の人とは限らず、残存する視力を有効に活用するためにはいろいろな視覚的支援が必要です。
    また、本人に視力がなくても、隣でサポートをする人が操作の状況を把握しやすい、といったメリットもあります。
    一方で、私自身は、NVDA の挙動や仕様を深く理解するために、自分のためにこの機能を追加しようというモチベーションもありました。
    フォーカスは見えるからいいのですが、スクリーンリーダーが「なにかを読むために」Windowsに追加している機能(ブラウズモード、ナビゲーターオブジェクト、レビューカーソル)については、NVDA は可視化してくれないからです。
    振り返ると NVDA のコア開発者は二人とも全盲で、NVDA は画面表示については非常に大雑把か不完全でした。
    私は何度か本家に画面表示の不備や不具合の修正提案をしてきましたが、そのたびに「他に誰もいないんだなあ」と思ってきました。
    本家が 2016.4 でスピーチビューアーなどの表示に関する改善をしたのは、本家の開発元 NV Access が今年になってやっと「見える人」を雇ったから、ということのようです。
    こうしたことから「フォーカスハイライト」という名前ではあるものの、私の目標はもともと「フォーカス以外のハイライト」でした。

    2013年

    2013年5月1日に作業を開始。
    sourceforge.jp (現在は osdn.net) の nvdajp プロジェクトにチケット 31261 を作成。
    フォーカス位置のハイライト機能
    「ハイライト表示を既存のウインドウに重ねるにはどうするの?」ということで MSDN の蛍光ペンのサンプルを参照。
    四角い枠を描画するには、Windows API で4辺をそれぞれウィンドウとして描画する以外にない。仕方なくその方向性で進める。
    最初は Windows 8 の UI Automation に対応する拡張のための NVDA 本体の作業ブランチでした。
    何も考えずに4辺をウィンドウとして描画すると、それぞれがWindowsからアプリとして認識され、タスクトレイのアイコンが4つ増えてしまう。
    それを出さないようにウィンドウクラスのオプションを指定する必要がある。
    2013年5月23日
    NVDA が内部的に保持しているオブジェクト座標情報の取り出し方を変更し、NVDA のプラグインとして実装するように変更。
    NVDA 本家版と NVDA 日本語版の両方で動くアドオンを目指す。
    2013年5月24日
    Focus Highlight アドオン 0.0.1 のリリース。
    日本語のユーザーメーリングリスト nvda-japanese-users に投稿。
    本家(英語)のメーリングリスト nvda-addons ML に投稿。
    ライセンスは NVDA 本体に合わせて GPLv2 とする。
    2013年5月26日
    0.0.2 リリース。
    2013年6月4日
    0.0.3 リリース。
    やっとナビゲーターオブジェクトを表示できるようになった。
    まずフォーカスを赤で、ナビゲーターオブジェクトを緑で表示。
    0.0.4 リリース。
    フォーカスとナビゲーターオブジェクトが一致しているときに、赤い表示だけを行うようにした。
    2013年6月20日
    0.0.5 リリース。エラー処理などの改善。
    2013年7月7日
    本家アドオンコミュニティに登録されることになり NVDA Addon Team にレポジトリが folk される。
    2013年8月4日
    readme.md がついて本家アドオンコミュニティから公開される。
    2013年8月27日
    本家 NVDA の issue で言及される
    2013年10月22日
    NVDA 翻訳チームの作業 英語+日本語+10言語の readme.md および 英語+日本語+11言語の nvda.po がマージされる。
    当時アドオンコミュニティに登録されたアドオンの翻訳とリリースは、アドオン開発者の手を離れ、アドオンコミュニティのリリース担当者に委ねていた。
    2013年11月12日
    1.0 リリース。本家アドオンコミュニティでの扱いが「安定版」になる。
    このころ報告されていた不具合:
    Windows 8.1 「すべての項目のサイズを変更する」対応
    NVDA本体が2014.1でDPI-Awareになって解決したはず。

    2014年

    2014年1月25日
    バージョン 1.1 をリリース。
    ナビゲーターの緑のマークをハッチブラシに変更し、色の区別がつきにくい状況への配慮を行った。
    アクセシビリティについては人に教える立場だと思っていたのですが「赤と緑の区別がつきにくい人」への配慮を怠っていることに気づきました。
    色を変更するといろいろたいへんなので Windows API のブラシで「ギザギザ線」などを導入しました。
    2014年5月4日
    プラグインの再読み込みでエラーが起きないように修正。
    2014年8月5日
    フォーカスモードを視覚化。
    フォーカスモードの場合にフォーカスを青いハッチラインで描画するように変更。
    NVDA+スペースで NVDA のフォーカスモードとブラウズモードが切り替わるのですが(さらに決まった条件で自動切り替えするようにもなっていますが)、このモードの違いを意識しないと NVDA でのWebブラウザ操作はうまくいきません。
    フォーカスハイライトでフォーカスモードが簡単に把握できれば、音声出力をミュートしていても楽に扱える、と思いました。
    2014年9月15日
    バージョン 2.0 をリリース。
    このころアドオンコミュニティのバージョンナンバリング方針がかわり、機能アップデートはメジャーバージョンアップ、翻訳アップデートはマイナーバージョンアップ、ということになりました。
    2014年12月4日
    アドオンコミュニティの作業フローになじめないでいたら、私にかわってバージョン 2.1 (translation updates) を NVDA Addon Team がリリースしました。
    2014年12月29日
    NVDA 2015.1 でオブジェクトの座標情報を取るための方法が変わるので、前もって互換性の改善をコミット。

    2015年

    2015年1月18日
    2.1 がリリースされたのに readme.md に changes for 2.1 がなかったので改定するコミットを私が行う。
    こういうこと私がやらないといけないなら、いまのコミュニティの作業フローってやっぱりおかしくない?と不審に思う。
    2015年1月18日
    本家の翻訳者メーリングリストで、アドオンコミュニティWebサイトの翻訳について質問が出る。
    例えば stable focusHighlight-2.1 と development focusHighlight-1.1dev があるのはなぜ?みたいな問題提起をされる。
    それはリリースとコミュニティWebサイトとレポジトリの readme.md 更新のワークフローが混乱してるからじゃね?と内心思う。
    2015年1月18日
    次は 2.2 でなく 3.0 を出したいとアドオンコミュニティのメーリングリストで宣言しました。
    2015年1月21日
    stable focusHighlight-2.1 と development focusHighlight-3.0-dev がコミュニティサイトに掲載された状態になりました。
    2015年4月12日から4月27日
    リファクタリングをしていたつもりが、ウィンドウのオプションの変更が裏目に出て、タスクトレイにアプリケーションのアイコンが出てきてしまう。
    本家に不具合報告(4961)されてしまい、慌てて元に戻しました。
    2015年5月31日
    本来は画面に追加情報を表示するだけで、アプリのフォーカスの挙動に影響を与えないはずのアドオンが、コンボボックスの挙動を変えてしまっていることが判明。
    focusHighlight 利用時のコンボボックスの値の変化の通知
    苦肉の策でコンボボックスのフォーカスだけアドオン側で制御しなおすワークアラウンドを実装。
    2015年6月1日
    focusHighlight-3.0-dev-150601 スナップショット
    2015年7月24日
    3.0 正式リリースに向けて addon_url の値を https://github.com/nvdajp/focushighlight に変更。
    アドオンの置き場も nvda.jp に変更した。
    https://www.nvda.jp/addons/focusHighlight-3.0.nvda-addon
    2015年8月1日
    アドオンコミュニティのリンク更新してもらい 3.0 をリリース。
    2015年8月27日
    バージョン 4.0 に向けた作業開始。
    NVDA 2014.4以前との互換性の不具合を再修正
    2015年10月22日
    バージョン 4.0-dev-151022
    2015年10月25日
    NVDA がスリープモード(デスクトップ配列で NVDA+Ctrl+S, ラップトップ配列で NVDA+Ctrl+Z)の場合にフォーカスハイライトの表示を消去するように変更。

    2016年

    気づいたら1年くらい放置していました。
    2016年10月2日
    GitHub Releases を使い始める。
    バージョン 4.0-dev-161002

    反省と今後

    NVDA 日本語ガイドブック には公式ドキュメントに書かれていない NVDA の仕様がいろいろ含まれています。
    例えば 4.1 「レビューカーソルの使い方(前編)」で「NVDA+B = アクティブウィンドウの読み上げ」がレビューカーソルを勝手に動かす、と説明していますが、これはフォーカスハイライトのおかげで気づいた挙動です。
    また、NVDA のタッチディスプレイ対応が実はレビューカーソルの移動であるということも、フォーカスハイライトで確認できた仕様です。
    NVDA日本語版の開発においても、JTalkの読み上げ位置情報の修正ATOK候補コメントへの対応などでフォーカスハイライトが役立ちました。
    Firefox などの Web ブラウザでは、ブラウズモードで上下矢印キーを押すと緑ギザギザ線のナビゲーターオブジェクトだけが移動し、リンクやボタンなどにぶつかるとフォーカスの赤い線が移動するのですが、こういう基本的な挙動も、フォーカスハイライトがあれば安心して検証できます。
    とはいえ、キーボードを使わずに(例えばマウスホイールで)ブラウザがスクロールした場合には、ハイライト位置はうまく更新されません。
    マルチディスプレイの環境でも不具合があることを把握しています。
    また気になるのは、どうやら Windows 10 の Insider Preview だとギザギザ線がうまく描画されないようです。さすがにこんな昔の Windows API の仕様はいずれ廃れていくのかも。。
    現在はこのアドオン用の GitHub Issues を使って、海外のユーザーからのフォードバックを得たり、進捗を報告しようとしています。
    本家アドオンコミュニティとの関係について触れましたが、2016年の夏から秋にかけて、アドオンコミュニティが翻訳のマージやリリースを取り仕切るのをやめて、各アドオンの開発者に権限と責任を委譲しよう、という方向性になっています。
    他のアドオンと違って、コミュニティの中でレビューされることが少なかったのがフォーカスハイライトの悩みでしたが、今後は Web 開発に関わるユーザーからのフィードバックを尊重しながら改良やリリースを進められると思います。
    もし NVDA のアドオン開発に興味があれば、NVDA 日本語チームの運営するメーリングリストもご利用ください。
    西本宛の私信での相談やご依頼は、無償では対応しない方針ですのでご理解いただければ幸いです。
    追記:
    ブログを書いたらやる気が出てきたので、フォーカスハイライト 4.0 を正式リリースしました。
    追記(2018年12月4日):
    バージョン 5 以降のフォーカスハイライトでは描画に GDI+ を使っています。いわゆる「高DPI」サポートが従来のAPIでは困難になってきたからです。

  • 電子工作のためのPython: MicroPython on the ESP8266

    2016年11月12日に PyCon mini Hiroshima 2016 を開催しました。
    開催報告記事は準備中ですが、まず私の発表を紹介しておきます。


    作ったプログラムと回路図
    準備のためにいろいろ実験していた記録
    過去のIoTLT広島での私の発表の記録
    録画(YouTube)
    質疑応答の時間に「産業界での利用状況は?」というコメントがあり、産業界というよりも教育分野での盛り上がり(BBC micro:bit 対応など)のことしか触れなかったのですが、Damien George さんの講演(YouTube GOTO2016 の動画)では「宇宙開発への応用のための SPARC 移植版」などに言及されていました。開発者がもともとそういう分野の出身なのだそうです。思い出せなくてすみませんでした。。

    私の発表では ESP8266 での動作状況だけをお話しましたが、もともとのターゲットである PyBoard などの ARM 系 CPU については、実行時にバイトコードではなくCPUのネイティブ命令を生成する機能など、性能を上げる処理がいろいろ実現されています。
     


    このブログ記事では、今回の発表をどのように準備したかを簡単に振り返っておきます。
    まず9月末に ESPr One を入手し、MicroPython の書き込み、動作確認をしました。
    そして手頃なセンサーやデバイスをいろいろESP8266の入出力につないでMicroPythonで動かしてみました。
    明るさセンサー(NJL7502)は「IchigoJamではじめる電子工作&プログラミング (I・O BOOKS)」で紹介されていて、いずれ遊ぼうと思って入手していました。
    また圧電サウンダ(ピエゾ圧電ブザー)は IchigoJamU に付属していたものをそのまま拝借しました。すでにモデルチェンジしているようなので、現在購入できるモデルにブザーがついているかどうかはわかりません。

    超音波センサーHC-SR04は5月にソラコムのハンズオンをやった(IoTLT広島で紹介済み)ときのパーツです。
    ESPr Oneからは5Vと3.3Vの両方の電源をとることができます。
    HC-SR04は5V駆動で、ESP8266のGPIOは(Arduinoと同じ)3.3Vとのことなので、ECHO の入力側は抵抗で分圧しています。
    こういうのは “Arduino 3.3V HC-SR04” で検索すると見つかるので、人気のあるパーツを選ぶと便利ですね。
    MicroPython for ESP8266 の Quick Reference にはデジタルの入出力方式として SPI, I2C, OneWire が紹介されています。
    今回 SPI は手頃なパーツがなかったので実験しませんでした。
    I2C でつないだのは小型のディスプレイ(OLED)です。
    MicroPython のライブラリや Adafruit のサイト記事や動画を見て SSD1306 というドライバーのものが簡単に使えると知ったので安価なものを Amazon で探しました。
    TonyDさんは ssd1306.py を組み込んでビルドし直していますが、MicroPythonのソースに入っているドライバーファイルをWebREPLでアップロードすればそのまま動きました。メモリを節約したかったら組み込んでビルドしたほうがいいと思います。


    OneWire は Quick Reference に書かれていた温度センサー DS18B20 をすでに入手していました。
    Arduino や Raspberry Pi などの書籍や記事でよく出てくるパーツだったので買っておいたのでした。
    手で触ると体温で温度が上がるのはわかるのですが、実際に組み合わせて使い道を思いつかなかったので、マイコンの起動直後に温度を表示して、18度から20度までの範囲だったら “good condition” と表示する、みたいな「しょうもない」使い方しかしていません。
    OneWire はプルアップの抵抗が必要なのですが、ESPr One のボード内の(おそらくは Arduino のプログラミングモード切り替えのための)抵抗をそのまま使えるように GPIO のポート番号を選びました。
    ESPr Oneにはスイッチがあって GPIO で値を読むことができますが、ボードをケースに入れてしまったせいで、細い棒のようなもので突かないと押せません。

    じゃあ光センサーと超音波距離センサーをスイッチの代わりにするか、ということで、全体を「光線銃ゲーム」に仕立てることに決めました。
    光センサーを「懐中電灯を当てたときに閾値を超える」ように AD 変換で使う抵抗の値を選び、超音波センサーは「距離測定を3回実行して80センチ未満が1回以上あったかどうか」を判定することで誤判定をなるべく回避するように実装しました。まあ誤判定しますけど。。
    ゲームにつきものの乱数は MicroPython の math にはなくて os.urandom で得られるランダムなバイト列を使いました。
    MicroPython の PWM は LED の明るさを変える目的で使われると思いますが、ここでは LED と圧電ブザーを並列につなぎ、メロディを流すのに使いました。
    性能が足りないのか精度が足りないのか、高い音は綺麗に出ません。
    音が出ているときはLEDも光ります。音を止める時は duty=0 にして信号が0になるようにしています。
    ゲームそのものの実装とデバッグは本番直前の2〜3日でやりましたが、よく考えると(電子工作やマイコンに親しんでいた子供時代を含めて)人に見せるために電子工作やミニゲームを開発したのはこれが初めてだなあ、と思いました。
    私が子供のころの電子工作はハンダ付けで組み立てるのが普通で、ブロックを組み合わせるような電子工作実験回路を羨ましく思ったものでした。
    いま、こういう回路がブレッドボードで簡単に組み立てできて、入出力デバイスもモジュール化されて、マイコンとデジタルで繋がって、しかもPythonで対話的に開発、実行できる。
    いい時代になったんだな、と素直に思った、そんなこの数日間でした。
    私に懐かしい世界を思い出させてくれた IchigoJam も好きですが、MicroPython と ESP8266 も、教材が充実してくれば、子どもの遊びやプログラミングの教育に使えるのではないでしょうか。

  • 如法会 2 と「2つのPython」

    如法会2の報告を書いていただいたのですが、過大に評価していただいたようなので言い訳を書きます。
    私のトークはこういう内容でした。
    Pythonで統計や機械学習という記事、文献、書籍がこの1年くらい日本語でもどんどん出版されています。
    私は英語の書籍も含めてそうした資料をいろいろ読んでいて「いわゆる PyData とオリジナルの Python は本当に同じ言語仕様なんだろうか」と疑問に感じてきました。
    そこで NumPy が Python という言語をどのように拡張しているのか、という観点から資料を探していたら見つけたのが神嶌さんの「機械学習とPythonとの出会い」でした。
    無料で公開されている文献なら紹介しやすいし、単純ベイズだけを扱っているので、やりたいことはわかりやすい。通して読んでみたのですが、さて勉強会で紹介するとしたら「単純ベイズ」のところだけが難しく感じられるだろうなあ。そう思って準備したのが「『機械学習とPythonとの出会い』との出会い」でした。
    このテキストを説明しようとして、別の文献をいろいろ読むことになったので、私自身も勉強のきっかけになりました。また、いわゆる Jupyter Notebook をスライドのように使う方法もあわせて勉強させてもらいました。
    1990年代の音声認識技術からパターン認識の分野に関わったので、ひとつのアプリケーションで有用な技術がどう他の対象に応用できるか、といった発想で物事を考えることはあいかわらず多く、そういうことが(データさえあれば)すぐに形にできる時代になったのはすごいことだなあと思いつつ、一見時代遅れのパターン認識手法をどこかでしゃべるのも、なにか新しいことに役立つかも、と思ったりもします。
    Pythonのエコシステムが機械学習をコモディティ化してしまった現実に凄まじさすら感じた、というのが私にとっての PyCon JP 2016 でしたが、オマケのように喋ったのが「2つのPython」というキーワードでした。
    Python 2 と Python 3 ですよね、と思われるかも知れませんが、もうその話は終わってたんだな、ということを東京で納得してきました。
    むしろ新たな「2つのPython」は、簡単に言えば pip でパッケージ管理される公式 Python の世界と、Anaconda に代表される数値計算コミュニティ向け Python の世界ですね。いろいろ温度差があるということを薄々感じ始めています。。
    このニーズや方向性の微妙に違う2つのコミュニティが関わり合って未来の Python が作られている、その現場を私は PyCon JP で見た気がしました。
    コミュニティが分断されないためには多様性が尊重されるカンファレンスの場が必要なのだ、ということも強く感じました。
    如法さんのブログでは PyCon mini Hiroshima 2016 (11月12日開催)でこの続きが聞きたいと書いておられましたが、取っておこうと思ったことを如法会で喋ってしまい、大したことでもなかったな、と思えてしまったので、私はたぶん別の話を(時間があれば)すると思います。
    実は講演プロポーザルの締切を10月5日まで延長したので、まだ講演の提案をお待ちしているところです。詳しくは connpass をご参照ください。最後はまたイベントの宣伝になってしまってすみません。