NVDA 行く年くる年

この記事は Web Accessibility Advent Calender 2017 の10日目の記事です。

オープンソースの Windows 用スクリーンリーダー NVDA に関するこの1年の活動を振り返るポエムで乗り切ろうと思ったのですが、ゆうべ広島フロントエンド勉強会で喋ったら気が変わってしまいました。

11月11日 JAC Vol.1 の講演「アクセシビリティ検証ツールとしてのNVDA入門」での失敗をフォローします。

決済サイト試作の入力バリデーション画面例

アクセシブルな決済システムの試作

アクセシビリティで難しそう、めんどくさそう、スクリーンリーダーで実際に検証しないと不安なポイントはやっぱりセキュリティだろう。

試してみたくなったのがクレジット決済 API を使うサイトの開発だった。

11月11日に見せようとした試作サイトは、以下のような方針で開発した。

決済サービスの選択

  • テストモード、つまり、ダミーのカード情報を送信して実際にWebアプリのテストができること
  • カード情報を Web アプリが保存しなくてよい、できれば受け取る必要すらないこと(情報漏洩のリスクを回避)
  • Python から簡単に使えること(個人的な好みです)

実際に使った決済サービスの仕様

  • JavaScript ライブラリがあり、ブラウザが決済APIサーバと直接通信を行い、カードと紐付いたトークン情報だけが返ってくる
  • そのトークン情報を Web アプリが受け取って、実際の課金を行うことが(Python ライブラリから)できる

つまり、ブラウザの中で「ユーザーにカード情報を入力させて、決済サーバに送って、カードのトークンを受け取る」という処理を、画面遷移せずに完結させたい、ということになる。

これは、セキュリティのために「動的なコンテンツを作らざるを得ない」ということで、アクセシビリティの題材としてはよさそうだと思った。

11月11日の前に作っていたもの

コードの抜粋はこちら

環境は Google App Engine for Python + Flask

(1) ログインする前の画面

ログインしてください、という表示になり、ログインのリンクがある。
実際にログインで使っているのは Google アカウント認証。

これが使いたかったので GAE を選んだ。本人確認されたユーザーのメールアドレスを取得。Google のログイン画面はスクリーンリーダーでちゃんと使えるはず。

ログインする前とログインしたあとの画面は Jinja2 (Python のテンプレートエンジン)で分岐している。

(2) ログインした直後の画面

ログインすると最初の画面が入力フォームになっている。

上から順に、以下のものがある。

  • テキスト「カード情報を入力して「確認」を押してください」
  • 4個の入力フィールド:カード番号、有効期限(年)、有効期限(月)、CVC番号
  • 「確認」ボタン(有効状態)
  • 「購入」ボタン(無効状態)
  • 「キャンセル」ボタン(無効状態)

ただし、デモなので、入力フィールドには決済サービスのテスト用カード番号があらかじめ入れてある。

確認ボタンを押すと URL が遷移するのではなく、JavaScript の処理が実行されて、コンテンツが動的に変化する。

(3) カード情報が正しくない場合の「確認」結果

「カード番号が正しくありません」などが表示され、入力フィールドの修正と「確認」ボタンしか有効にならない。

何が正しくないかというメッセージはテキスト( aria-live=”assertive” 属性の div )として表示され、スクリーンリーダーで読み上げられる。

つまり動的コンテンツだがバリデーション結果をアクセシブルに提示できる。

(4) カード情報が受理された場合の「確認」結果

「カード情報が確認できました。「購入する」を押すと***円のお支払いが完了します。」

のように表示され、「購入」ボタンと「キャンセル」ボタンが有効になり、入力フィールドと「確認」ボタンが無効になる。

購入ボタンを押すとカードのトークンが submit されて URL が遷移する。Python アプリで決済 API をたたいて結果を取得、次のページに「購入完了」みたいな表示を出す。

「キャンセル」を押すと、入力フィールドの値がふたたび変更可能になる。

本番でやったドジなこと

確認ボタンを押して入力フィールドが無効になった状態で、「じゃあ今度は値をわざと変更して正しくない入力内容にしてみましょう」とか言いながら、無効になっている入力フィールドのテキストを書き換えようとしてうまくいかず、デモを中断してしまった。

そのあとで考えたこと

aria-live=”assertive” とか、フォーカスの制御とか、invalid とか、いろいろ盛り込んだのだが。。

そもそも「自分がうっかり間違えるような UI 設計がよくない」と考え直した。

最近作り直したもの

(1) ログインする前の画面

ログインしてください、という表示になり、ログインのリンクがある。

(2) ログインした直後の画面

ログインすると最初の画面が入力フォームになっている。

上から順に、以下のものがある。

  • テキストA「カード情報を入力して「確認」を押してください」
  • 4個の入力フィールド:カード番号、有効期限(年)、有効期限(月)、CVC番号
  • 「確認」ボタン(有効状態)

(3) カード情報が正しくない場合の「確認」結果

テキストA「カード番号が正しくありません」などが表示され、入力フィールドの修正と「確認」ボタンが使える状態のまま

(4) カード情報が受理された場合の「確認」結果

  • テキストB「カード情報が確認できました。「購入する」を押すと***円のお支払いが完了します。」
  • 「購入」ボタン
  • 「キャンセル」ボタン

その他のものは非表示になる。

「キャンセル」を押すと、テキストAと入力フィールドだけの表示に戻る。

振り返って思うこと

なんのことはない、これはひとつの HTML ファイルにダイアログAとダイアログBがあって、交互に表示・非表示になる、一種のモーダルである。

たぶん最初の「非表示・無効」だらけの画面を作っていたときには、「この操作を実際に行うと、次にどういう段階に進むのか」みたいな見通しを伝えたかった。
だから、あとから有効になるけどいま無効なものをたくさん作ってしまった。
その流れで「さっきは有効だったけどいまは無効になった」ものも、たくさん残してしまった。

だが、けっきょくのところ「ひとつひとつの段階で迷わせない」「無関係なものを見せない」ということのほうが大事だったと思われる。

カード情報が確認できたときに、もういちどカード番号を表示する、みたいなことは、本当はやった方がいいのか、やっぱり不要なのか。。

こまかいこと

今回のデモでは invalid の判定には2種類ある。

(1) HTML の required と pattern を使う処理
(2) 決済APIサーバーのエラーメッセージに基づく処理

後者の場合には、JavaScript のコールバックで

<div id="input_guide" class="alert alert-primary" role="status" aria-live="assertive"></div>
<div class="col-12">
  <label for="card_number">カード番号</label>
  <input type="text" id="card_number" class="form-control" aria-describedby="card_number_help" value="5555555555554444" required aria-required="true" pattern="[0-9]{13,16}" />
  <small id="card_number_help" class="form-text text-muted">半角数字 <span aria-hidden="true">省略できません</span></small>
</div>
if (response.error.code === 'invalid_number') {
  $('#card_number').attr('aria-invalid', true).focus();
  $('#input_guide').text('カード番号が正しくありません').addClass('alert-warning').removeClass('alert-success');
}

みたいなことをする(jQuery を使っている)。

JavaScript 2行目の最後の .focus() がなければライブリージョンの「カード番号が正しくありません」が読み上げられる。

一方で、この .focus() をつけてしまうと card_number 要素の読み上げしか聞くことができない。

NVDA 2018.1jp-beta-171206x + Firefox ESR 52.5.2 でスピーチビューアを使って確認すると:

ブラウズモード
カード番号が正しくありません 
カード番号  エディット  正しくない入力内容  必須  オートコンプリート  半角数字 省略できません
55555555555544 選択
フォーカスモード

つまり、ライブリージョンの読み上げの直後にフォーカス位置の読み上げイベントが発生して、直前の読み上げを止めてしまうのだ。

(「フォーカスモードとブラウズモードの切り替えを音で報告」はチェックなし。後述の追記2を参照のこと)

実は最初のバージョンはこれが気に入らなくて(だって live region のデモにならないから)フォーカスを移動しなかったのだが、考えてみるとライブリージョンを読むことよりもフォーカスをエラー箇所に移動してあげることのほうがずっと親切で、ユニバーサルな気がする。

さらに、フォーカスを読み上げるときに「正しくない入力内容」もちゃんと読み上げているのだ。

本当にスクリーンリーダーで検証するべき「アクセシビリティのディティール」というのはこういうことなんだろうな、と思っている。

ここから追記

追記:NVDA の live region の実装がおかしいのではないか、と言われそうな気もするので(そうかも知れないけど)ちゃんと制御できるケースも紹介しておく。

$('#card_number').attr('aria-invalid', true);
$('#get_token_btn').focus();
$('#input_guide').text('カード番号が正しくありません').addClass('alert-warning').removeClass('alert-success');

こんなふうにボタンにフォーカスを移動して、直後に live region の内容を更新すれば、「カード番号が正しくありません」をちゃんと聞くことができる。
(このテクニックは最初のバージョンで使っていた)

追記2:さらに調べたら、NVDA の「フォーカスの変化を追跡する自動フォーカスモード」をチェックなしにすると、エディットにフォーカスが移動したときに live region を最後まで読み上げて、それからフォーカスを読み上げるようになった。

ボタンとエディットで挙動が違うのだから、もしやと思ったら、やっぱりそういうことだったか。。

おことわり

勘のいい人は shop.nishimotz.net というサイトを見つけたかも知れませんが、このサイトは「本当に何かを販売して決済を行うサイト」に作り替える予定の場所です。

明日は tosssaurus さんの「社内じんわりアクセシビリティ普及活動報告」だそうです。お楽しみに。

MicroPython の雑誌記事を執筆した話

広島版IoT縛りの勉強会! IoTLT広島 Vol.7 で「MicroPython の雑誌記事を執筆した話」をしました。

2017年11月25日発売 CQ出版 Interface(インターフェース) 2018年1月号

「第4部 マイコンPython無線センシング実験室」


元ネタとして蓄積してきた情報はこちら。

発売されてすぐにブログを書こうと思ったのに、すっかり遅れてしまいました。

記事のフォローアップはスライドを見てください。編集部に送るのが遅くなってしまい、紙面で触れられてませんが、ダウンロードできるソースコードも公開されています。

技術の検証は一段落したので、集めた素材を使っていろいろ面白いものを作りたいと思っています。

JAC vol.1 & NVDAワールド 2017 & NVDA開発者会

もんどさんのブログを読んで、私も書くことにしました。

Japan Accessibility Conference

Japan Accessibility Conference vol.1
2017年11月11日(土曜)
会場:ヤフー株式会社 紀尾井タワー セミナールーム

にて「アクセシビリティ検証ツールとしてのNVDA入門」という講演をします。

2015年に「Web製作者のためのNVDA入門」というイベントの講師をしたのですが、今回はハンズオンでもなく、時間も限られているので、いちおう下記のような予定です。

視覚に障害があるユーザーがPCを使う上で不可欠なものがスクリーンリーダーです。
無料で利用できる Windows 用スクリーンリーダー NVDA をご紹介します。

  • スクリーンリーダーとはどのようなものなのか、
  • スクリーンリーダーで Web ブラウザをどう操作するのか、
  • アクセシビリティ検証ツールとして NVDA をどう使えばよいか

をご説明します。

この講演は5月ごろから打診をいただいていたので、このイベントにあわせて NVDA 2017.3jp に導入した新機能もありますし、お馴染みの FocusHighlight アドオンも(RubyKaigi 2017で実演に使いましたが)新しいバージョンをリリースしたいと思っています。

なので、11月11日に話を聞いてくださった人には、これまでよりもスムーズに「アクセシビリティ検証ツールとしてのNVDA」をお試しいただけると思います。

(おわかりのとおり WordPress を使っているので、私のセッションの裏番組も気になります。。)

NVDAワールド2017

一方で、前述のイベントがこの日程になることがわかっていたため、11月1日から3日まで開催されるサイトワールドの翌日ではなく前日に開催することにした

NVDAワールド2017
2017年10月31日(火曜)
会場:日本マイクロソフト
(東京都港区港南2-16-3 品川グランドセントラルタワー)

は参加申し込みの締め切り(10月23日)まであと2週間になりました。

こちらの私のセッションは「ビジネスツールとしてのNVDA」というテーマにしました。
前述のカンファレンスの発表と内容が重複しない、はずです。。

概要:2013年に NV Access が視覚障害者コミュニティの支援で PowerPoint 対応を実現して以来、NVDA は視覚に障害がある人の就労手段としてグローバルに支持されています。

本セッションではビジネスツールとしての NVDA の機能を紹介しつつ、最近の NV Access や開発コミュニティ、 NVDA 日本語チームの活動を報告します。

NVDA の Microsoft Office 対応や Windows 10 対応の最新情報を、この機会にまとめてお伝えしたいと思います。

NVDA開発者会

最後に、NVDAワールド2017開催日の午前に行う予定の「NVDA 開発者会」について補足します。

いま NVDA 本家の開発コミュニティではいろいろな新しい動きがあって、NVDA の開発に興味がある人に伝えるべきことはとても増えています。

2017.4 で Windows XP/Vista 対応を打ち切ることが決まり、新しい動きは本格化しました。

開発に使われている Visual Studio のバージョンを 2015 から 2017 に上げること、各種の依存パッケージを更新すること、そして NVDA を Python 2.7 から Python 3 に移行させる作業が、これから2019年ごろまでに行われます。

今回の開発者会では、まず Windows 環境で Python 2.7 と Python 3.6 を共存させる方法をご紹介します。
これから1年か2年くらいの間 NVDA に関わるために必要な知識だと思うからです。

それから、おそらく当日までに本家の移行が完了しているはずなので、Visual Studio 2017 Community を使う前提で NVDA (本家版および日本語版)のソースコードからの実行方法やビルド方法を紹介する予定です。

日本語に対応していないことが課題になっている eSpeak や libLouis など音声合成エンジンや点訳エンジンなどの現状、ソースコードからの実行やテストの方法、開発コミュニティの動向などの情報も、時間の制約はありますがお伝えしたいと思います。

点字ディスプレイなどふだん私が検証できない機材は、その場に持参いただければ、不具合の調査などができると思います。

開発者会には NVDAワールド 2017 の connpass 申し込みで「開発者枠」でお申し込みください。

#RubyKaigi 2017 終了

What visually impaired programmers are thinking about Ruby?

発表も終了し、オーガナイザーとしての3日間も終わりました。

参加したことさえなかった RubyKaigi のオーガナイザーを引き受けることになり、どうなることかと思いましたが、スピーカーもさせていただいて、素晴らしいチームの一員として働かせていただいたことに、満足そして感謝しています。

ウェブアクセシビリティの観点から Ruby のドキュメントツールについて指摘したので、具体的に何をどう直したらいいか、もうすこし考えてみます。それまでは私の中で RubyKaigi は終わらないような気がしています。

なぜ @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」でした。

前回の報告:

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

このときに 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 体験会、いかがでしょうか。こんどやるときはもっと上手にやれると思うので、ご連絡ください。

自分が映ってる写真を撮り忘れたので、「つくれば工房」さんのサイトからお借りしました: