タグ: hiroshima

  • AngularJS と NVDA

    <htmlday> 2013 ということで AngularJS で遊ぼう という勉強会に参加しました。
    AngularJS は Web アプリケーション開発のフレームワークということで、簡潔に書けて保守性が高いのが特長、らしいです。
    しかし、生産性の高い開発手法という話を聞くと「それってアクセシビリティは大丈夫なの?」とつい思ってしまいます。
    そこで、angularjs.org のトップページのビデオで紹介されていた TODO アプリケーションのサンプルをスクリーンリーダー NVDA 日本語版 と Firefox の組み合わせで確認しました。
    書かれたマークアップは内部で標準的なHTMLに変換されているので、フォーカス移動などはちゃんとできるのですが、チェックボックスにフォーカスしたときに、その右側にある項目名を読み上げないので、何の操作をするチェックボックスなのかわかりません。
    ふと aria-labelledby でやればいいんじゃない? と思ったので、下記のように直したところ、うまくチェックボックスの項目名を読み上げるようになりました。
    最初は id をつけるために todos モデルに通し番号のプロパティを追加したのですが、後で $index という特殊プロパティがあることを教わったので、todo.js 側のコントローラーとモデルは書き換えないで実装できました。アクセシビリティのための処理が View だけで完結するのは素晴らしい。AngularJS なかなかよさそうなのでもうちょっと勉強してみたいと思います。
    <htmlday>とは、日本全国でWeb制作者/開発者向けのイベントを同日に開催することで、日本のWebを一層盛り上げようという「お祭り」だったそうで、私も貢献できればと思いブログを書きました。
    ちなみに広島市中心部は「とうかさん」というお祭りの季節です。。
    以下のソースでは bootstrap.cssUnderscore.js を使っています:

    <!doctype html>
    <html ng-app>
      <head>
        <script src="angular.js"></script>
        <script src="underscore.js"></script>
        <script src="todo.js"></script>
        <link rel="stylesheet" href="bootstrap/css/bootstrap.css">
        <link rel="stylesheet" href="todo.css">
      </head>
      <body>
        <h2>Todo</h2>
        <div ng-controller="TodoCtrl">
          <span>{{remaining()}} of {{todos.length}} remaining</span>
          [ <a href="" ng-click="archive()">archive</a> ]
          <ul>
            <li ng-repeat="todo in todos">
              <input aria-labelledby="label{{$index}}" type="checkbox" ng-model="todo.done">
              <span id="label{{$index}}">{{todo.text}}</span>
            </li>
          </ul>
          <form>
            <input type="text" ng-model="todoText"  size="30"
                   placeholder="add new todo here">
            <button ng-click="addTodo()"><i></i>Add</button>
          </form>
          <button ng-click="clearCompleted()"><i></i>Clear Completed</button>
        </div>
      </body>
    </html>
    // todo.js
    function TodoCtrl($scope) {
        $scope.todos = [
    	{text:'learn angular', done:true},
    	{text:'build an angular app', done:false}];
        $scope.addTodo = function() {
    	$scope.todos.push({text:$scope.todoText, done:false});
    	$scope.todoText = '';
        };
        $scope.remaining = function() {
    	var count = 0;
    	angular.forEach($scope.todos, function(todo) {
    	    count += todo.done ? 0 : 1;
    	});
    	return count;
        };
        $scope.archive = function() {
    	var oldTodos = $scope.todos;
    	$scope.todos = [];
    	angular.forEach(oldTodos, function(todo) {
    	    if (!todo.done) $scope.todos.push(todo);
    	});
        };
        $scope.clearCompleted = function() {
    	$scope.todos = _.filter($scope.todos, function(todo) {
    	    return !todo.done;
    	})
        };
    }
  • すごい広島 #3 に行って勉強した

    すごい広島とは 広島のエンジニアやウェブデザイナーが毎週集まって、 もくもくしたり Hackしたり 読書したり する場所です。
    ということで、今週は第3回でした。私は最初の参加(広島Git勉強会から数えて2回目の参加)です。
    たまたま「プロになるためのJavaScript入門」という本を読んでいるところなので、最初の文法の説明を「写経」することにしました。

    プロになるためのJavaScript入門 ~node.js、Backbone.js、HTML5、jQuery-Mobile (Software Design plus)
    河村 嘉之 川尻 剛
    技術評論社
    売り上げランキング: 88,262

    こまかい作業は私の Wiki サイト JavaScript のページに書いたのですが、例えば、なぜ下記のようなものが出てくるのか、いろいろ打ち込んでみてやっとわかってきました:

    > new String({})
    { '0': '[',
    '1': 'o',
    '2': 'b',
    '3': 'j',
    '4': 'e',
    '5': 'c',
    '6': 't',
    '7': ' ',
    '8': 'O',
    '9': 'b',
    '10': 'j',
    '11': 'e',
    '12': 'c',
    '13': 't',
    '14': ']' }

    丁寧に書くとこういうことですね:

    > new String(({}).toString())

    JavaScript では new Object は {} と書けるので、({}) は toString() すると “[object クラス名]” という形式の文字列リテラルが得られる。これを与えて String ラッパークラスに与えるので、その(文字列リテラルではない) String オブジェクトの内部表記である { ‘0’: ‘[‘, ‘1’: … のような結果が返ってくる。。
    前から読もうと思っていたCategorizing values in JavaScript という記事 がまさにこういう話だった。。
    こんなことをもくもくやっていたのですが、集まった人たちがそれぞれ、もくもく何かをやっている状況は、とても刺激的でよい雰囲気でした。
    この「すごい広島」は勉強内容は自由ですが、記録や報告に git/github や Markdown を使うルールになっています。共同作業の練習になるので、興味のあるかたはぜひ。

  • NVDA 講習会でやったこと

    6月の VIC ステップアップ講習会で NVDA 日本語版の紹介をしました。
    やった内容を紹介します。
    (1)導入から入力ヘルプまで
    NVDA 日本語版の最新バージョンは http://i.nvda.jp でダウンロードしてください。
    NVDA のインストーラーを起動して、3種類の使い方があることを説明。
    Tabで移動、スペースで「同意する」のチェックボックスの操作、スペースでボタンを押す操作。
    NVDA の起動。ようこそ画面に書いてある「NVDAキー」の説明。ノートパソコンでは「無変換」を使うのが便利。
    NVDA+N で NVDA メニューを開いて、ヘルプ(サブメニュー)からもう一度「ようこそ画面」を開いてみるなど。
    ダイアログはEnterキーで閉じられる。メニューはEscキーで閉じられる。
    NVDA メニューを開いていないときも NVDA はずっと動いている。
    NVDA+1 を押して「入力ヘルプモード」を体験する。押したキーの説明。NVDA+N を押すとわかるように「NVDAコマンドの説明」にもなっている。
    入力ヘルプモードで NVDA+1 を押すと入力ヘルプモードの解除。
    (2)NVDA の設定
    NVDA メニューで「キーボード設定」を確認する。今回は「ラップトップ」配列でやっていただいた。
    アクセラレーターキーで項目の移動やチェック状態の変更ができるが、慣れるまでは使わなくてよい。
    項目は Tab で移動。そろそろ Shift+Tab で逆方向移動も。
    読み上げの中止は Ctrl で、中断(再開)は Shift で。
    音声設定で「速さの変更」と「記号読み上げレベル」だけ試していただく。
    記号読み上げレベル「読まない」にしたら、比較のためにもう一度「ようこそ画面」を開いてもらう。
    この記号読み上げレベルは NVDA+P でも変更できる。
    (3)ユーザーガイドで「一文字ナビゲーション」を体験
    NVDA メニューの「ヘルプ」から「ユーザーガイド」を開いてもらう。
    目次はリンクになっているので、Tab で移動して、スペースでリンク実行(ジャンプ)できる。
    覚えるコマンド(ラップトップ配列):
    NVDA+A (すべて読み上げ)
    H と Shift+H (見出しジャンプ)
    1, 2, 3, 4 (Shiftで逆方向、レベルを指定して見出しジャンプ)
    左矢印と右矢印(1文字ずつ確認)
    上矢印と下矢印(NVDA内部で文として扱われている単位での移動)
    NVDA+L (現在の行の読み上げ)
    NVDA+T (タイトルの読み上げ)
    ユーザーガイドはアプリケーションなので Alt+F4 で終了。
    (4)オブジェクトナビゲーションに挑戦
    オブジェクトとは? Windows の画面に表示されるあらゆるもの。
    Windows 7 の例を見せながら「電卓」で1ケタの足し算に挑戦。
    スタートメニューから電卓を起動。
    Alt+Tab (アプリケーションの切り替え)で、デスクトップと電卓が切り替わる。
    電卓を起動すると「結果を表示しているオブジェクト」が現在位置で、「0」と出ている。
    電卓がどんな画面なのかは、簡単にあらかじめ説明しておく。
    Alt キーを押すとメニューに移動できて、上下に移動できることも確認。
    Esc を押してメニューを閉じ、さらに Esc を押して元の場所に戻る。
    まず NVDA+Shift+下矢印 で「内側のオブジェクト」があるかどうか確認する。
    そして NVDA+Shift+左(右)矢印で前後に「オブジェクトがありません」と言われるまで移動してみる。
    これで3方向を確認したことになる。
    NVDA メニューと違ってオブジェクトは「上下が階層の移動」「左右が階層の中での移動」なので注意。
    いよいよ上に移動する。行き過ぎると「デスクトップ」まで行ってしまって、戻るのが大変になるので注意。
    Windows 7 の場合は、結果を表示するダイアログと、もう一つ名前のない「ダイアログ」がある。
    名前なしダイアログに30個くらいボタンがある。NVDA+Enterでボタンを押せる。
    「1」「加算」「3」「等号」と押せば、結果表示ダイアログに戻ってきたときに「4」と出ている。
    Tab 移動で操作できないアプリケーションでも、NVDAのオブジェクトナビゲーションはこのように活用できる。
    続きはぜひユーザーガイドを読みながら練習してみてください。
    こんな感じで2時間の講習でした。
    この内容は NVDA-KR の英語ポッドキャスト の第1回から第3回の前半までの内容を、ちょっと削ってコンパクトにしたものになっています。
    最後の内容はまほろばさんの記事を参考にしました。
    いずれ私もポッドキャストを作ったほうがいいなあと思っています。
    実演には開発中の「フォーカスハイライト」アドオンを使いました。
    ダウンロードは下記からどうぞ:
    focusHighlight-0.0.5.nvda-addon
    広島では7月から8月にかけて、何度か NVDA の講習会を行う予定です。詳しいことが決まったら、このブログなどでご案内します。
    追記(7月28日):focusHighlight のリンクを更新しました。
    講習会の告知は広島市広報誌の7月15日版に掲載されました。ご報告が遅くなって済みませんでした:
    視覚障害者向けパソコン音声ガイドソフト講習会