カテゴリー
hiroshima nvda python shuaruta

オープンセミナー2020@広島

オープンセミナー2020@広島が昨日(2020年2月8日)開催されました。

Togetter まとめ

私も3年くらい前から実行委員の一人として運営に関わっていて、今回は副委員長を務めました。

おかげさまで100人を超える(懇親会の参加者だけでも67人)多くの人にご参加いただき、盛況に終わりました。

次回以降のスタッフ希望のご連絡は @24motz 宛でも結構ですので、お待ちしています。

PyCon mini Hiroshima 2020

私の会社(シュアルタ)は前回に続いてスポンサーとなりました。

去年に続いてスポンサーセッションの時間を5分いただいたのですが、イベントのテーマ「エンジニアライフHacks」に沿った話をするには時間が短すぎました。

そこで 過去にブログに書いた内容を「PyCon mini Hiroshima のウェブサイトとアクセシビリティ」として紹介しました。

200208 osh-nishimoto-v2 from Takuya Nishimoto

スライドの中でご紹介した重要な告知は

「2020年10月10日(土曜)に PyCon mini Hiroshima 2020 をやります」

です。詳細はこれからすこしずつ発表していきます。よろしくお願いします。

「正しいことを」の話

スクリーンリーダー NVDA のコミュニティ活動を踏まえてウェブ制作の配慮の話をしました。

私の活動のモチベーションを「正しいことを躊躇なく行うのは、気持ちいい」と表現しています。

「正しいことを躊躇なく」は、Python コミュニティの著名な人たちからヒントを得たキーワードです。

「正しいことを行うことに喜びを感じている人たち」は、アクセシビリティのコミュニティで著名な人たちについての私の観察です。

「エンジニアは正しくないことを行いたくたい」は、自分の感じていることでもあり、よく語られていることでもあります。

こういったことを考えていたら、前述のようなトークになりました。短い時間で説明するのは難しかったですね。

Hacks?

各セッションは聞きながら響いたキーワードや感じたことをツイートしています。

2020年2月8日 @24motz のTwiLog

どなたもきちんと考え抜いて丁寧に「エンジニアの生き方・学び方」あるいは「ソフトウェア開発の最先端」を語っておられました。

「働くこと」と「楽しむこと」の両立についても多く語られました。

これは、前回の「学び方Hacks」のときからテーマ決定に参加している私の反省になるのですが、設定したテーマが「Hacks」という、ちょっと斜に構えたキーワードになっているのは、アンバランスだなあ、と思いました。

学び方にも生き方にも「Hacks はない、まじめにやろう」という、当たり前のようなことを、去年と今年と2回にかけて、登壇者の皆さんから感じ続けています。

座長&実行委員長

昨夜の懇親会で挨拶しましたが、PyCon mini Hiroshima 2020 の座長も、オープンセミナー2021@広島の実行委員長も、どちらも「やります」ということになりました。

この一年、いろいろご協力、ご支援をいただければ幸いです。よろしくお願いします。

株式会社シュアルタ

私が2011年に広島に戻って以来、基本的にフリーランスのような働き方でエンジニアとしてやってこれたのは、オープンセミナーや PyCon のようなコミュニティのイベントで、いろいろなことを学ばせてもらったおかげだと思っています。

株式会社シュアルタは2018年2月9日(肉球の日)設立で、今日は会社の設立記念日でもあります。

無事に第2期が終わり、今月から第3期として営業をしております。

ウェブアプリ、モバイルアプリなどの受託開発、ソフトウェア開発のコンサルティングをしながら、スクリーンリーダー NVDA 日本語版の活動を行い、ペット事業の研究も続けています。

シュアルタも引き続きよろしくお願いします。

カテゴリー
nvda python shuaruta

NVDA 2019.3 の新機能

このエントリーは Webアクセシビリティ Advent Calendar 2019 の3日目の記事になります。

NVDA日本語チーム の西本です。ふだんは広島県広島市にいます。オープンソースのスクリーンリーダー NVDA の日本語対応に関わりながら、NVDA 日本語版のリリースを続けています。
ウェブアクセシビリティ基盤委員会 WAIC WG2 にも参加しています。

広島では Python のコミュニティ活動やイベント開催に関わっています。
フリーランスの技術者として NVDA に関するコンサルティングや開発のお仕事をいただくこともあります。
私の会社(シュアルタ) にご相談ください。

NVDA相談会の開催報告

本題に入る前に NVDA 日本語チームのブログ記事をご紹介します。
2019年11月1日にサイトワールド2019で「NVDA相談会」を開催しました。

NVDA 相談会 in サイトワールド2019 開催報告

191101 nvda-sightworld-nishimoto from Takuya Nishimoto

NVDA 2019.3 の新機能

NVDA 2019.3 はまだリリースされていませんが NV Access のブログ で変更点が紹介されています。

私も 翻訳 をしていて、単に Python のバージョンが変わるだけではなく「新機能も盛りだくさん」になってきたなあと感じています。

ここでは Web アクセシビリティに関わる皆様に関係があることを中心にご紹介してみます。

フォーカスハイライト

2016年のアドベントカレンダー記事 など何回か紹介した「フォーカスハイライト」という NVDA アドオンですが、ついに NVDA 2019.3 で NVDA 本体の機能になります。

この機能は「画面が見えにくい人」の支援技術であると同時に、NVDA の「ナビゲーターオブジェクト」や「ブラウズモード」がどう動くのか、どういう状態なのかを把握できるので、アクセシビリティ検証に役立つと思います。

私の実装は大幅に書き直しされましたが、基本的に「私がやりたかったこと」を「私がやってきた方法」で実装してもらえました。

さらに、NVDA 本体に入ることのメリットとして、NVDA に視覚的な拡張を行うアドオン(ビジョン拡張プロバイダー)の仕様が決められて、その枠組みで新しいフォーカスハイライトが実装されました。

現状では、NVDA 2019.3 のフォーカスハイライトと、私のアドオンは、それぞれ以下のような利点があります。

  • 本体機能:ブラウズモードのカーソルをハイライトできる。Webブラウザで左右の矢印キーで1文字ずつ移動すると、どの文字を読んでいるかがわかる。
  • アドオン:ハイライトの色や太さのカスタマイズができる。NVDA+Alt+P でハイライトの表示/非表示を切り替えできる。過去のバージョンの NVDA でも利用できる。

おそらく今後は NVDA 本体のフォーカスハイライトの改良に貢献したほうがよいと考えています。ご要望があればお知らせください。

スクリーンカーテン

さきほど紹介した「ビジョン拡張」のもうひとつの機能として「スクリーンカーテン」が追加されました。

VoiceOver にもあるのでご存じかも知れませんが、簡単にいえば「画面を真っ黒にする」機能です。

アクセシビリティ検証作業のために目をつぶって操作をしていた晴眼者の皆様にも、待望の機能かも知れませんね。
(スクリーンカーテンを終了する方法をちゃんと練習してから試してください。)

NVDA 2019.3 設定「ビジョン」カテゴリ

WAI-ARIA など Web 標準への対応の強化

NVDA の Enhanced Aria アドオン に相当する機能強化が NVDA 本体で行われました。

例えば Issue 9485 として aria role group への対応を確認しました。

報告されていた例をすこし手直しした下記の例をブラウザのロケーションバーに入力して

data:text/html, <p><button>1</button></p><p role="group" aria-label="A"><button>2</button></p><p><button>3</button></p>

1, 2, 3 という3つのボタンが上下に並んでいる

最初は Tab でボタンに移動、続いて下矢印キーで操作すると

  • ボタン 1
  • A グループ ボタン 2
  • グループの外 ボタン 3

のようになります。

この「グループ」の報告は「書式とドキュメント情報」で有効・無効を切り替えられます。
また「入力ジェスチャー」でカスタマイズすれば、1文字ナビゲーションで「グループ」単位の移動ができます。
(デフォルトではキー操作が割り当てられていません)

他には例えば Issue 9616 として role=combobox 対応の不具合が修正されています。

この他に figure 要素や article 要素への対応も強化されています。

コンソール対応の改善

Web 関連ではありませんが、2019.3 ではコマンドプロンプトや WSL など、いわゆる「コンソール」への対応が改善されます。

この作業の一部は、Google Summer of Code の支援で行われました。

従来の NVDA ではコマンドプロンプトが日本語の文字を正しく処理できない場合がありましたが、新しい NVDA では改善していると思います。

2019.3 リリースへの道のり

NVDA の通常のリリース作業は、本家ベータ版のリリース、翻訳チームの作業期間の宣言(string freeze と呼ばれます)とその作業締切(通常は2週間後)、リリース候補版、通常はその1週間後に正式リリースとなります。

今日すぐに本家ベータ版がリリースされたとしても、最短で3週間後に正式リリースとなります。

あれ、NVDA 2019.3 は本当に2019年12月31日までにリリースされるの?

みたいなハラハラドキドキも私たちと共有したいという皆様、まずは NVDA 日本語チームのメーリングリストへのご参加から、私たちの活動にご協力いただけると嬉しいです。

詳しくは www.nvda.jp をご参照ください。

カテゴリー
hiroshima nvda python

PyCon mini Hiroshima 2019 のサイト制作

2019年10月12日(土曜)に PyCon mini Hiroshima 2019 を開催しました。

イベント自体については別の場で報告を書こうと思っていますが、チームから「ウェブサイト構築の話を共有してほしい」という意見があったので、忘れないうちに、まずここに書いておきます。

hiroshima.pycon.jp は2015から2016にかけては GitHub Pages で私が自分で作りました。

2018 からは参加費をいただくイベントとして開催することに決めて、専門家に制作をお願いして、WordPress で構築されました。
(現在は静的サイトに変換して残しています)

2019 では、もっと自分たちでコントロールしながら制作したいと考えて、Next.js を使いました。

さいわいチームにはコーディングもデザインもやっていただける Nyoho さんがおられて、私は作業をチェックして本番環境にデプロイする、という立場になりました。

今年の PyCon mini Hiroshima チームは GitHub のプライベートリポジトリを作りました。
ウェブサイトのソースコードを Git で管理し、ウェブサイト制作のタスクも、それ以外のタスクも、すべてこのリポジトリの issues として管理しました。

日程だけを告知する私の仮サイト(BootStrap Studioで作成)を、Next.js のサイトに置き換えていく作業は、6月ごろ始まりました。
リダイレクトに必要な nginx の設定をリポジトリに含める提案があり、それを私が pytest と requests でテスト駆動しながら導入する、というのを(すごい広島 with Python のネタにしながら)やったのが6月下旬。

7月上旬には、プルリクエストごとにプレビュー用の Web アプリのビルドが行われるようになり、本番環境を更新する前に、ブラウザでレビューが行える体制が整いました。

このころから、私自身は node.js で React のコードを触るのをやめて、逆に本番環境へのマージの権限は私だけが持つことにして、レビューアーに徹することにしました。

7月末に Nyoho さんが SVG アニメーションで動くヒーロー画像を制作したあたりから、私は、いろいろな環境に配慮したアクセシブルなサイトであることをレビューするようになりました。

残念ながら SVG アニメーションは最後まで IE11 や Microsoft Edge では動かせなかったのですが、かわりに動かないタイトル文字を出してもらうようにしました。
このやりとりの中で、Next.js を使いながらアクセシビリティを確保できそうだ、という見通しが得られました。

やがて、スクリーンリーダーの利用者が適切に操作・閲覧できることを、私自身が「NVDA でアクセシビリティの検証をするディレクター」の立場で行うようになりました。

ページが複数になったときには、タイトルをページごとに変えてもらうようにしました。

アニメーションの機種依存振り分けの議論の途中で、 CSS で display:none するとスクリーンリーダーから読み取れなくなることを紹介すると、そうだったのかと驚かれました。

「日時」や「会場」などの情報を h2 や h3 などの見出しレベルにどう割り当てたらよいのか、あるいは見出し要素に情報そのものを入れてしまっていいのか、といったことも議論しました。

例えば「日時」という見出しがあって、その真下に「10月12日」と書いてあるのと、見出しそのものが「10月12日」になっているのは、どちらがうれしいだろうか。

スクリーンリーダーの「見出しジャンプ」という機能を紹介すると、「じゃあ見出しに情報が入っていたほうが効率的だね」という議論になりました。

一方で「日時」というテキストをスクリーンリーダー利用者にだけ読めるように提示する、というテクニックはどうだろう。
いわゆる sr-only クラスのような実装はあるけれど、想定外の閲覧環境で(例えば -10000px の位置指定が)どうなるかわからないし、みんなが同じコンテンツを読むほうがよいのではないか、と私はアドバイスしました。

テキストの表記についても、「10:00~」はちょっと不安。「10:00開始」はよさそう。「10時00分開始」はさらに安全。

けれど、このあたりの読み上げはユーザーエージェントに依存しているし、読み手は 10:00 を時刻だと解釈できる可能性は高い、などなど。

一方で IE や Edge でレンダリングが崩れる、といった指摘、機種依存文字の指摘、などもありました。

プレビュー Web アプリのおかげで、効率的に検証することができました。

ですが、Nyoho さんもご多忙だったので、実際に解決したい課題がすべてクリアできたのは、イベントの前日の夕方でした。

この話には Python の要素がほとんどないのですが、今回の一連の作業を通じて、PyCon mini Hiroshima チームの中で「アクセシビリティ、こんな風にやっていくんだなあ」という感覚を共有できたこと、私自身も「アクセシビリティやっていき勢」としての活動ができたことを、ちょっぴりうれしく感じています。

今回のイベントにスクリーンリーダーユーザーが参加してくださったわけではなく、リアルなフィードバックをいただくのもまだこれからの課題です。

このチームの経験を、次回の PyCon mini Hiroshima で、かどうかはわかりませんが、どこかで活かしたいと思っています。

カテゴリー
nvda python

NVDAのこれから

このエントリーは Webじゃないアクセシビリティ Advent Calendar 2018 の12日目の記事になります。

NVDA日本語チーム の西本です。ふだんは広島県広島市にいます。オープンソースのスクリーンリーダー NVDA の日本語対応に関わりながら、NVDA 日本語版のリリースを続けています。ウェブアクセシビリティ基盤委員会 WAIC WG2 にも参加しています。

今年は自分の会社 シュアルタ を設立しました。
NVDA に関するコンサルティングや受託開発を、株式会社シュアルタでお受けするのでよろしくお願いします。

後述するように NVDA と Windows アクセシビリティを取り巻く環境は2019年にも大きく変化します。
視覚障害者の雇用などで NVDA を活用したい企業や団体などの法人に向けて、コンサルティング契約により NVDA の技術サポートを提供します。
現在は申込受付の準備中です。
詳細は info@shuaruta.com にお問い合わせください。

Windows と Edge のこれから

Webアクセシビリティ Advent Calendar 2018 の4日目として NVDAのブラウズモード という記事を書いて、「Microsoft が Chromium 技術で作ったデスクトップアプリ」の紹介をしたら、直後に Microsoft Edge が Chromium に移行するという発表がありました。
momdoさんの日本語訳

そこまで Chromium 大好きになってたのか。。

Windows 10 がリリースされた直後に NVDA は Microsoft Edge をちゃんとサポートできていない、という宣言をしたのが懐かしいですね。
最大の理由は Internet Explorer 11 がサポートしてきたアクセシビリティAPIを Edge が廃止して UI Automation という技術に移行してしまったから、なのですが、その後、長い間をかけて Microsoft と NV Access は Edge が NVDA でちゃんと動き、性能的にも問題がないようになった、というのが2017年の終わりごろでした。

Chromium になった Edge は、もはや Chrome や VS Code や Skype のようにきちんと NVDA で操作できるようになるのだろうな、と思ったら、今度は Microsoft が Chromium の UI Automation 移行を進める、という話になっています。ということは Edge と Chrome にちゃんと対応できたばかりの NVDA は、また新たな作業が必要になるかも。。

Windows スクリーンリーダーのワクワク・ドキドキ・ハラハラの日々はなかなか終わりそうにありません。

NVDAのこれから

Python 2 のサポートが2019年末に終了する、ということがわかっていたにも関わらず NVDA はいまだに Python 2.7 に依存しています。

あれやこれやのアップデートに対応する作業に NVDA が追われることがなければ、もっと前向きな作業ができたのではないか、と言われそうですが、私は「もともとスクリーンリーダーというのはそういう運命のもの」だと思っています。

つまり OS やアプリやコンテンツが「理想的に作られていない」ことで起きる不具合を「取り繕う」のが、スクリーンリーダーの(本質とまでは言わないけれど)「重要な価値」になってしまっています。

なので「スクリーンリーダーの未来は?」と聞かれると、「スクリーンリーダーがなくなる」は言い過ぎとしても「スクリーンリーダーが単純になるのが理想の未来」と私は答えます。

話を戻すと、NVDA は来年 2019.1 から 2019.4 までの4回のリリースを行うあいだに、互換性を切り捨てて大きく変わり、Python 3.7 あるいは Python 3.8 を積んでパワーアップした NVDA に生まれ変わります。

ですが、そのパワーアップは、ユーザーには「何の得にもならない」と思われる可能性が高いです。

Windows XP のサポートが終わったときにも、Firefox で WebVisum が動かなくなったときにも、ガラケーで Web サイトが閲覧できなくなったときにも、むかしの Visual Basic で書かれたアプリが動かなくなったときにも、同じような話がありました。

今度は NVDA にその試練が降りかかる番ですね。。
たぶん NVDA 2018.4 やその日本語版を、アップグレードしないで何年か使い続けたい、という要望が出るだろうなあと覚悟をしています。
まあ、そういう使い方をする PC を割り切って温存するのは「アリ」かも知れません。。

ユーザーが直接得をしない「新しい技術への移行」は、そうは言っても、標準化、ソフトウェア開発、セキュリティ、オープンソース、など多くの企業やコミュニティの活動が関わって作られた「大きな流れ」であり、逆らうことは「孤立」を意味します。

そして「孤立」は「コンピューターとインターネットを学びたい、楽しみたい、活用したい」というスクリーンリーダー利用者には「残念な」選択だと思います。

実はまだ NVDA コミュニティは NVDA を Python 3 に移行させるための技術的課題を完全にはクリアできていません。

私の手元で動いている Python 3.7.1 版 NVDA は、今日やっとフォーカスハイライトが動いたところですが、まだ重要な機能がボロボロと欠けている状態です。

大丈夫なのか、ほんとにやれるのかよ、と心配しています。

来年は NVDA 日本語版よりも、まず本家 NVDA コミュニティのチャレンジを支えたい、と思っています。

NVDA 日本語アルファ版の新しい仕様

ここからはメーリングリストに投稿した内容です。

現在 NVDA 2018.4 のリリース候補版が出ていて、NVDA 日本語ベータ版 nvda_2018.4jp-beta-181210j はその変更が反映された、事実上の日本語リリース候補版になっています。
来週中に 2018.4jp の正式版もリリースできると思います。

本家は NVDA 2019.1 に向けた作業を進めており、日本語アルファ版では 2019.1 に向けた変更をテストしています。

最新の日本語アルファ版で、NVDA のアドオンについて大きな変更があるので、お知らせしておきます。

以下の説明を読んで、不都合と思う場合は、前もってリリース版やベータ版に移行することをお勧めします。

2019.1 以降の NVDA は、原則として、アドオン開発者によって互換性が確認されたアドオンだけをインストールできます。

アドオン開発者は、互換性を確認していることを知らせるために、アドオンを作り直して公開する必要があります。
先日リリースした focusHighlight 5.4 ではこの問題を修正しています。

NVDA 2019.1 系の日本語アルファ版をインストールするときに、従来のアドオンがインストールされていると、
「アドオンの互換性について了解しました」
というボタンが表示される場合があります。

ですが、そのボタンを押してインストールを実行するだけだと、互換性のないアドオンはすべて無効化されてしまいます。

インストールを実行する前に「アドオンの互換性の確認」というボタンからダイアログを開き、それぞれのアドオンについて「有効にする」のチェックボックスをチェックすれば、従来のアドオンを使い続けることができます。

この作業は、すべてのアドオンについて必要です。
(NVDA をインストールし直すたびに必要かどうかは再調査中です)

アドオンをたくさんインストールしている場合や、頻繁に NVDA 日本語アルファ版を更新している人には、かなり面倒ではないかと思います。

場合によってはベータ版や安定版に切り替えたほうがよい、というのはそういう理由です。

この数日、本家では、この仕組みのリリースで大きな混乱がありましたが、メーリングリストなどの議論を読んでいるかぎりでは、アドオンの互換性チェックを見直すつもりはなさそうです。

NVDA が依存している Python を2019年末までに 2 から 3 に切り替えて、そのほかの NVDA の内部の改良を進めるために、アドオン開発者に対応をしてもらう必要があり、その準備としてこの機能が必要だと考えられているためです。

NVDA 日本語版についても、こういう仕組みになったことを早く知っていただこうと考えています。

インストール時のアドオンの操作についてのメッセージは、日本語アルファ版では日本語に翻訳しました。
通常よりも早いタイミングで翻訳作業をしたので、不完全な部分があるかも知れません。

従来動いていたアドオンが「手動で有効化」すれば動くかどうかは、アドオンごとに状況が異なりますが、2019.1 で動いているとしても、アドオンそのものが更新されなければ、2019.4 や 2020.1 で動かない可能性が高いです。

新しい日本語アルファ版を試してもらい、どのアドオンで不都合なことが起きるかを調べながら、NVDA 日本語チームの取り組むべきことを検討したいと思います。

アドオン開発者のための補足

アドオン開発者のための公式の説明は developerGuide に書かれています。

https://github.com/nvaccess/nvda/blob/master/developerGuide.t2t

具体的には manifest ファイルに

minimumNVDAVersion = 2017.4
lastTestedNVDAVersion = 2018.3

のように記載します。
前者を「最小要件の NVDA バージョン」
後者を「動作確認済みの NVDA バージョン」
と日本語では表記しています。

未来のバージョン番号を 2019.2 のように書いてもエラーにはなりません。
(が、最新のアルファ版のバージョンにしておくべきという本家のMLでの議論あり)

2019.1 と書くと本家版 2019.1 とも互換性があり、NVDA 日本語版 2019.1jp とも互換性がある、と解釈される見込みです。
(日本語版でしか動かない、みたいなチェックは想定していません)

本家のコミュニティで公開されているアドオンのテンプレート
https://github.com/nvdaaddons/AddonTemplate
こちらには
updateChannel
という項目もありますが、これは本家の addonUpdater で使われる項目で、不要な場合は None にしておきます。

focusHighlight の buildVars.py も紹介しておきます。

https://github.com/nvdajp/focusHighlight/blob/master/buildVars.py

NVDAとアドオン開発者のための補足の補足

ユーザーには何の役にも立たないように見えるであろう「NVDA の Python 3 移行」ですが、NVDA の現在と未来の開発者が幸せになれる、というメリットが、めぐりめぐって NVDA のユーザーを幸せにする、という展望があります。

例えば、いままで NVDA が日本語環境でうまく動いていない不具合の多くは「Windows で日本語の文字コードが使われている場合だけで起きる問題」の見落としでした。

Python 3 への移行で、そのような不具合が起こりにくくなる、と私は期待しています。

おまけ:今年出演したポッドキャスト(再掲)

サイトワールド2018特集 第6回 NVDA日本語チーム(日本視覚障害者ICTネットワーク JBICT ポッドキャスト)

AccSell ポッドキャスト第140回: 「こういうもの俺自分で作らなくて良い時代になったんだ」

わしポ 9: Kinsai PyCon mini Hiroshima (nishimotz)

カテゴリー
hiroshima nvda python speech twitter

PyCon mini Hiroshima 2018 終了

PyCon mini Hiroshima 2018 が無事に終了しました。
有料イベントになったにも関わらず、60人以上の人にご参加いただくことができました。

私は実行委員長として、また企業・団体パトロンの株式会社シュアルタとして、そして「舞え!ひろしま Kaggler」講演者として、あわただしい一日でした。

181006 nishimoto-kaggle from Takuya Nishimoto

まだまだ記録とか精算とか報告作成とかやっている途中です。

Togetter まとめ

いつものように最後にスタッフみんなでご挨拶した写真。

まだ広島で Python 流行ってないの?と言わせてるみたいなスローガンでしたが、今回は「広島で流行らせよう!」というテーマをすこしずつ実践できていけそうな、そんな一日でした。

今後ともよろしくお願いします。

カテゴリー
hiroshima python

PyCon mini Hiroshima 2018 参加者・発表者募集中 #pyconhiro

2018年10月6日(土曜)に PyCon mini Hiroshima 2018 を開催します。

概要

PyCon mini Hiroshima 2018
すごいPython 広島で流行らせよう!
2018年10月6日(土曜)

基調講演
Pythonで遊ぼうコンピュータ将棋
芝 世弐(岡山県立大学情報工学部)
Pythonの10年と今、これから
佐藤治夫(株式会社ビープラウド)

会場
広島大学東千田未来創生センター
広島県広島市中区東千田町1-1-89

参加費
学生:無料
一般:1000円
事前の申し込みをお願いします)

講演者募集

Python に関するご講演を募集しております。

講演申込 Google フォーム をご利用ください。

またはメールでのお申し込みに関する説明を参照してください。

申込締切は8月29日(水曜)です。

西日本豪雨の影響

以下、現時点での個人的な見通しです。

  • 当日の会場への新幹線(JR広島駅)や広島空港からの交通アクセス:問題なし
  • 広島市中心部から西側(宮島など)の観光スポット:問題ありませんが、JR在来線の運行区間に変更があり、運行本数も少なめです。時間に余裕をもって行動するとよいと思います。
  • 広島市中心部から東側(呉、東広島、尾道など)へのアクセス:JR在来線が被災し、10月の時点ではまだ全線復旧できていない見込みです。バスや車での移動は運休、不通区間、渋滞に注意が必要です。
  • 西条酒まつり:開催されます。ですが JR 在来線で広島市内から移動できない可能性があります。酒蔵ツアーについては8月中旬にご案内する予定です。
  • 追記(8月16日)PyCon mini Hiroshima 2018 Sake-Matsuri Tour 募集中です!当日はJR在来線で広島市内から移動できる見込みです。

雑感

私自身は、豪雨から3週間以上が過ぎた現在も、自宅地域が避難勧告の対象になっています。川沿いの道路がいたるところで陥没して、愛犬と散歩をする道がごくわずかになってしまいました。それでも、この地域にも多くのボランティアが来てくださって、砂ぼこりを巻き上げていた道路が少しずつきれいになり、通勤などでの不便は残っているものの、日常を取り戻しつつあります。

こんな状況でしたが、7月22日に「PCNひろしま」のプログラミング教室を予定通りに開催して、改めて、自分の置かれた状況に配慮しながら、やってきたことをやり続けることの意味もあるような気がしました。

PyCon mini Hiroshima でも、広島で今年起きたことを踏まえた取り組みを、なにか扱えるのでは、と思っています。先週の水曜日に開催した「すごい広島 with Python」でも、位置情報を扱うライブラリやオープンデータなどの情報交換をしたところです。

「すごい広島 with Python」は1年以上毎月開催して、ここで Python を勉強しはじめた人が、東京で開催される PyCon JP のプロポーザルを出す(通ったかどうかはいずれ。。)という段階までたどり着きました。参加者としても今年も何人かが広島から PyCon JP に参加することになりそうです。

Python を広島で使い始めている人に、ちゃんと広島にコミュニティがあって、全国的なコミュニティとつながっている、ということを知っていただくために、もうしばらくこのイベントを続けたい、という気持ちで準備を進めています。

現在受付中の講演募集ですが、30分、15分に加えて、持ち時間5分のライトニングトーク(LT)も選択可能にしています。 Python に関するいろいろなアイディアやノウハウをお持ちの方は、お気軽にお申込みください。

よろしくお願いします。

追記

講演申込締切を8月29日(水曜)に変更しました。(8月15日)

カテゴリー
nvda python

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 さんの「社内じんわりアクセシビリティ普及活動報告」だそうです。お楽しみに。

カテゴリー
hiroshima python

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

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

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

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


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

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

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

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

カテゴリー
nvda 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 申し込みで「開発者枠」でお申し込みください。

カテゴリー
python

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章を引用しました。