如法会 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 をご参照ください。最後はまたイベントの宣伝になってしまってすみません。

PyCon JP 2016 ポスター発表: NVDA の開発とコミュニティ活動

9月21日と22日の2日間、PyCon JP 2016 に参加しました。2日目に「スクリーンリーダー NVDA の開発とコミュニティ活動」というポスター発表をしました。多くの人に見ていただけたようです。長い時間をかけてこちらの話に付き合ってくださったかたも多かったです。

PyCon JP 2016 ポスターの前に立つ西本

23日には開発スプリントのリーダーとして、NVDA 日本語版の開発の具体的な作業を紹介、そして Python でアドオンを開発するチュートリアルなどを行いました。メンバー4人で楽しくハッカソン的な時間を過ごしました。

NVDA日本語チームは2013年からユーザーを対象にしたイベントを行ってきましたが、今年、方針を変更してこういう技術者向けイベントに参加しました。結果として、より多くの人にNVDAを知ってもらったり、コミュニティのメンバーを広げたりする手段になったと感じています。

特に今年の PyCon JP は「多様性」がキーノートや講演でも取り上げられました。そのような中で、アクセシビリティの話が、多様性についての視野を広げるお役に立てていたらうれしいです。

PyCon JP の参加を通じて得た知識、気づいたことなどは、また改めて書いたり喋ったりしたいと思います。

11月12日開催の PyCon mini Hiroshima 2016 も「視覚や聴覚に障害をお持ちのかたを含めて、 誰にでも参加して楽しんでいただけるイベント」を目指しています。発表のプロポーザルを9月30日まで募集しています。

それから10月2日に広島での勉強会で Python と機械学習をテーマにLTをしようと思っています。こちらもよろしくお願いします。

PyCon mini Hiroshima 2016「広島とPython」 #pyconhiro #pyconjp

プログラミング言語 Python (パイソン)が気になりはじめた広島の皆様、広島のことが気になっていた全国の Python ファンの皆様のために、今年も PyCon mini Hiroshima を開催します。
開催日は2016年11月12日(土曜)、会場は広島市立大学サテライトキャンパス(広島市役所のすぐ前)です。

これから connpass サイトでの参加募集(および講演の申込受付)を開始します。

2015年11月22日、第1回 PyCon mini Hiroshima の基調講演は石本敦夫さん「Pythonの肩にのる」でした。
一人前のプログラマになるための勉強は果てしなく続く。でも焦ることはない。なにかひとつの技術やプロダクトに深く関わることが重要。
深く学ぶほど大きく広がる Python の世界はその理想的な入口のひとつ。
そんなことをご自身の20年の経験を踏まえて語っていただきました。

たまたま NVDA という Python プロダクトの活動(NVDA日本語チーム)をきっかけに Python を深く学ぶことになり、日本の Python の技術者やコミュニティの素晴らしいパワーに触れる機会を得てきた私には、自分の気持ちととても重なった内容でした。

半年以上が過ぎたいま、Python やその関連プロダクトは、広島の技術者の勉強や仕事に役立ち始めているでしょうか?

広島での PyCon mini の第2回となる今年は「広島から発信しよう」を目指しています。
県外から著名人をお招きしてお話を伺うことよりも「広島で Python がどう使われているのか」「広島で Python 技術者にどんなチャンスがあり得るのか」といった話題を持ち寄って、なにかを生み出したいと思います。
まず「広島で暮らす人々」「広島に観光で訪れる人々」をターゲットに「人間の言葉を理解するコンピュータ」の研究に取り組んでいる広島市立大学「言語音声メディア工学研究室」の関係者にご協力をお願いして、「広島とPython」の接点を探ります。
また IoT (Internet of Things) に適した言語としての Python という側面(例えばハードウェアの制御も Web APIの利用も Python から簡単にできたりします)を掘り下げていくために、今年立ち上がったフレッシュなコミュニティ IoTLT 広島と LT セッションを共同開催します。
スペシャルトークの火村智彦さんには「私はいま広島で○○というプログラミング言語を使っているけど、Python も勉強した方がいいのかな?」と思っている人に刺激を与えるようなお話をお願いしています。どんな内容になるのか、私もまだわかりませんが楽しみにしています。

今年、日本の Python コミュニティでは、初学者向けの勉強会(BootCamp)など新しい取り組みが各地で始まっています。
また Python を基盤にしたビッグデータ、機械学習、インフラ管理など、いろいろなツールのコミュニティも広がりつつあります。
この第2回 PyCon mini Hiroshima を、広島での継続的な Python コミュニティ活動のきっかけにと願いつつ、まずはご参加のご案内をさせていただきます。
講演テーマ募集は9月30日を締切とさせていただく予定です。
参加申込とあわせて、お気軽にご提案いただければ幸いです。

PyCon mini Hiroshima など

地域 PyCon mini を広島で という話を2月14日にしゃべってから、いろいろな方にご相談して、ご協力いただいています。
日程と場所が確定したので、今日の LT 駆動開発17 で紹介しました。

PyCon mini Hiroshima 2015
主催:PyCon mini Hiroshima 2015 実行委員会
開催日:2015年11月22日(日曜)
会場:サテライトキャンパスひろしま

私は実行委員長を務めることになりました。このイベントについての詳細はいずれまたお知らせします。
今日のLTでは、PyCon JP 行動規範に始まり、整備されたマニュアルやツールなど、イベントの運営についていろいろ学ぶことがある、という話をしました。

以下はLT駆動でしゃべらなかったですが、9月の東京でのイベントのお知らせの続報。
9月12日(土曜)「NVDAワールド 2015 東京」参加申し込みの受付を開始しています。

翌日も東京ですが、9月13日(日曜)『Web制作者のためのNVDA入門』というイベントで講師を担当します。

すごい広島 95 と NVDA 日本語版のソースコード管理

すごい広島 95 に参加してきました。

事前に呼びかけてみたら、NVDAユーザ会広島の関係者が、私を含めて3人集まりました。

やること宣言した作業は NVDA 日本語版の点訳エンジンに関する下記の検討でした。

日本語点訳で (日) と (火) の区別がつかない

NVDA 日本語版のソースコードは Git で管理されています。
また、NVDA 日本語版に含まれている日本語点訳エンジンにはテストコードが用意されており、なにか修正をしたときに、いままでうまくいっていた点訳の事例を壊さないように作業をしています。
テスト駆動開発の理念を尊重して作業しています。

いわゆる「デグレード」を避けるべき理由はいろいろあるでしょうが、不具合が増えてしまうと、それを嫌って「古いバージョンをわざわざ使う人」が増えてしまいます。
NVDA 本家版はそのようなことがないように努力しているのがわかるので、日本語版もそうしたいと思います。

私がこの日にやった作業は以下のような感じでした。

  • 点訳エンジンのテストを実行して、既存のテストケースでエラーが出ていないことを確認
  • 報告があった「不具合の事例」をテストケースに追加
  • 追加されたテストケースで、テストを実行して、そこだけが新しいエラーになることを確認

本当はエラーが出ているのでコミットするべきではないですが、作業手順の説明とバックアップのためにコミットされました。

帰宅して数日のうちにもうひとつのコミットを行い、この時点でエラーの数は0に戻りました。

作業はチケットに対応するトピックブランチ ti34973 で行い、作業が完了してから master にマージされました。

この作業をしたレポジトリは通称 miscDepsJp と呼んでいるもので nvdajpmiscdep という名前で管理されています。
この miscDepsJp レポジトリは nvdajp 本体のレポジトリから submodule として参照されています。

NVDA 日本語版の実行ファイルをビルドすることなく、miscDepsJp のソースだけで点訳エンジンの開発と単体テストが可能になっています。

修正の中身をすこし詳しく説明しておきます。

日本語点訳において(日)(火)などの曜日表記が、読み付与が間違っているためにどちらも「ヒ」になっていて、区別がつかない。
このような事例だけでも個別対応をして修正できないか、というのがいただいた要望でした。

日本語点訳の読み付与は Open JTalk の処理系に合わせて MeCab で行っています。

一般的には「日」や「火」という文字が出てくるたびにすべてを「ニチ」「カ」のように変換してしまうわけにはいかず、本来は文脈に応じた処理を行う必要があります。
もし文脈に応じた処理をしないと、たぶん既存のテストケースのどこかが壊れてしまうでしょう。。

今回はメーリングリストでいただいたアイディアを参考に、「(日)」のように「前後にカッコ、カッコとじがついている場合」だけ特別な対応をするという方針で作業をしてみましたが、実際には「記号」「一般名詞」「記号」という3つの形態素として処理されるべきなので、MeCab の辞書登録に加えて形態素解析結果の後処理で正規化(形態素の分割)を行って、なんとかつじつまを合わせています。

MeCab の辞書に単語を追加したので JTalk の読み上げにも影響が及ぶのですが、今回の作業の結果 JTalk の読み上げで「(日)」「(火)」は「ヒ」「ヒ」のままになっています。

音声読み上げについては音声合成に送られる前に句読点記号辞書が適用されるので、音声エンジンが受け取る前に「カッコ 日 カッコトジ」「カッコ 火 カッコトジ」のような文字列になってしまいます。

なので「(火)」のような単語を MeCab 辞書に追加しても、点訳エンジンに対してしか効果はありません。

以上、やった作業の簡単な報告でした。

NVDA 日本語チームのメーリングリストにおいて、日本語テキスト解析に関する開発には多くのひとが興味をお持ちのようなので、この部分に特化した開発をしていただくために、ソース、ドキュメント、ツールなどを整理したいと思っています。
複雑な作業であることにはかわりないので「誰でも開発に参加できるようになる」と期待されるとつらいですが。。

なお NVDA 日本語版のソースコード管理システムを github にまとめる作業を進めているところです。
ソースを github にコミットすると点訳エンジンのテストを自動実行する、いわゆる「継続的インテグレーション」などもやりたいと思っています。

NVDAミートアップ東京2015.1 & OSH2015

主催イベントと参加イベントの2件のご報告です。

2015年2月7日(土曜)に、東京都内にて NVDA 日本語チームによる初めてのミートアップを開催しました。

私は最初に「2015年のNVDAとWindows環境」という講演をしました。

Windows に限らずコンピューターやインターネットに関する技術の変化が速くなっています。
国際的な NVDA のコミュニティが目指す世界を日本の皆様に共有していただけるように、また日本のスクリーンリーダーの状況を世界に発信し、海外の NVDA ユーザーに対する貢献に繋がる活動を心がけたいと思います。

私たちが確保した時間の大半は「アンカンファレンス」と呼ばれる形式で進められ、その場で決まったテーマで3個ないし4個のグループに分かれて議論したり作業したりしました。

議論の一部は以下にて報告されています。

NVDA ミートアップ東京 2015.1 基調講演、翻訳、本家チケット、アプリ開発

Windows タブレットでNVDAを使う (2015.1 #2)

Webアクセシビリティの現状 (2015.1 #3)

タブレットタッチ操作

地域コミュニティの活性化とお互いの協力

2015年2月14日(土曜)に広島市内にて開催された オープンセミナー2015@広島 に参加してきました。

こちらは私は参加者として勉強してきたのですが、参加者も集まり、なによりも貴重な内容が多々あって非常に有益でした。

懇親会と同時開催だった勉強会「LT駆動開発11」にて「地域 PyCon mini を広島で」という提案のライトニングトークをしました。

NVDA 日本語チームの活動と並行して広島での地域コミュニティの方向性を模索してきましたが、まずはプログラミング言語 Python という大きな(とは言っても大きすぎない)枠組みで、広島とそのご近所の地域コミュニティ活性化を、というのが私の今年の目標になりそうです。

ぜひご理解、ご協力いただければ幸いです。

すごい広島89の覚え書き

すごい広島の毎週水曜日の活動にひさしぶりに参加してきました。

github でプルリクエストをするというルールのある勉強会(ミートアップ)です。

まだ完了していませんが、私の手順を記録しておきます。
(ふだんターミナルやコマンドプロンプトから git/github を使っているので、こういう操作は久しぶり)

下記は「ブラウザだけで作業が完結する手順」のはずです。

事前に Doorkeeper で参加登録をしていました:

http://great-h.doorkeeper.jp/events/20004

github の great-h/great-h.github.io の issues 画面:

https://github.com/great-h/great-h.github.io/issues

から右上の緑色のボタン New issue を押して、issue を作ります。

前例にならって「すごい広島 89 – 24motz NVDAの翻訳をする」のようにタイトルを入力します。
ちなみに私の場合 24motz は Twitter のアカウント名で nishimotz は github のアカウント名です。
説明も適当に書いておきます。

右側の「今日やること宣言」という赤いラベルを有効にします。
Milestone をその日の日付のマイルストーンに設定して、 “in progress” というラベルもつけておけばよいようです。
親切な人があっという間につけてくれましたが。。。

作った issue には通し番号がつけられます。
今回私の作ったものは 1507 になりました。

最後にプルリクエストを出すのですが、まずブランチを作っておきます。
開発でソースコードをいじるときにも、先にブランチを作ってから作業をするんですよ。。

本当は赤の他人はブランチを作る前にリポジトリそのものをフォークしておきます。
ただし「すごい広島」はフォークではなく参加者にブランチ作成権限を与える流儀になっているそうです。
「マージする前に管理者がブランチを直したいことがあるから」らしいです。

github のユーザ nishimotz は https://github.com/great-h/great-h.github.io の画面で、左上の「 branch: source 」というボタンを押すとブランチを作ることができます。

Switch branches/tags

と書かれていて、その下にブランチのリストが並んでいます。
上にあるテキストエディットは検索ボックスのようですが、よくみるとプレイスホルダーに

Find or create a branch…

と書かれています。ここに新しいブランチ名を書き込むと、いきなりブランチが作れてしまうわけです。

慣例に従って、issue 番号を入れて 1507-24motz ブランチを作りました。

このブログを更新したら、この記事のURL(固定リンク)が決まるので、実際に更新作業をしてプルリクエストを出せるわけです。

書いていて気づいたのですが、ここに全部(しかも画面キャプチャ入りで) すでにまとまっていた。。

そうですね、_posts の中の「その日の記事の .markdown ファイル」を edit して、commit して、メッセージに #issue番号 を入れてプルリクエストですね。。(泣)

追記:いま、この手順をやってみたら、 edit したときのコメント欄の下に
「このブランチにコミットするか、新しいブランチを作ってプルリクエストを出すか」
(Create a new branch for this commit and start a pull request.)
という選択肢が出てきました。
もしかするといまの github だと「ブランチを作る前に edit する」という手順はアリかも知れないです。。

追記2:プルリクエストを作ったら 1514 という番号がついた。

追記3(2月5日)1週間後にissueがクローズされた。

私が「すごい広島 89」でやったことをまとめます:

  1. NVDAの emoticons アドオンの紹介記事の日本語化
  2. NVDA Add-on 開発者ガイド 日本語版 の一部を更新

今後の予定ですが、ときどき「NVDAユーザ会広島」の人を水曜夜の コワーキングスペース MOVIN’ON にお誘いして、もくもく会の相乗りができないかと考えています。

2月7日の東京での NVDA ミートアップ東京 2015.1 で「アンカンファレンス」の運営を経験する予定なので、広島での活動に取り入れたいと思います。

今週末の2月1日にはボランティア団体 VIC のステップアップ講習会で NVDA の最近の状況、特に音声合成エンジン KCトーカー の紹介などをさせていただく予定です。

もうひとつだけ、私はただの参加予定者ですが、2015年2月14日に

「オープンセミナー2015@広島」(osh2015)

が開催されます。

テーマは「クラウド時代の構成管理入門」とのことで、いまホットな話題のひとつだと思うのですが、広島でこういう技術に興味のある(しかもバレンタインデーを勉強会に費やすことができる)人に「もっともっと参加を呼びかけたい」状況なんだそうです。

オープンセミナー2015@広島 参加申し込み

NVDA 日本語版の「更新チェック」を集計するのに Ansible を使っている、という話は LT駆動開発08 でしたことがありますが、「NVDA 以外の仕事」でも Ansible を使っており、こういう場で情報を得ないと、つい自己流になってしまうなあ、と思う日々です。

私がいまどういう仕事をやっているか、まだ詳しく書けないことも多いのですが、いつかは人を雇わなくてはいけない日が来ると思うので、こういう勉強会やイベントには、これからもなるべく参加したいと思っています。

追記3(1月30日): 1514のプルリクエストにTravis CI の結果がコメントとしてくっついてますね。markdown にエラーがないかどうかチェックする作業が自動化されているようです。素晴らしいね。。
こういう技術も「クラウド時代の構成管理」ですね。。

すごい合同勉強会 in 広島 2014

すごい合同勉強会 in 広島 2014 に参加してきました。

広島市立大学の学園祭の企画になっていたとのことで、会場に向かうエレベーターを降りるとお化け屋敷の受付、という刺激的な環境でした。

あいにくの雨でしたが、ライトニングトークのゆるい雰囲気と、プログラミング言語の本格的なトークの、バランスが取れたイベントだったと思います。

私のトークは「NVDA日本語版の思い出(仮)」で、(仮)を取りそびれて最後までこれがタイトルになってしまいましたが、オープンソースソフトウェアのコミュニティを作ること、続けることについて話したかったのでした。。

@nobkz さんのセッションで「勉強会の運営のために意見を抽象化する」という話があったのですが、お話したような事情もあり NVDAユーザ会広島 は活動を
「広島地域での NVDA と Python の勉強会」
に広げてみたいと考えています。

いままでも NVDA 日本語版の開発のために Python の勉強をしました。
自然言語処理、機械学習にも手を出したことがありました。
Python のエコシステムにはこういうツールや参考書がいろいろあります。

どの勉強会も同じだと思いますが、日程を決めて人を集めるのが難しいんですよね。。

最初は NVDA と Python の二兎を追うという前提で、集まっていただける人のやりたいことをすこしずつ整理していきたいと思います。

NVDAユーザ会広島には 招待制のメーリングリスト があるので、まずはお問い合わせいただければ幸いです。

追記(2014-11-03)コメントをいただいたので「勉強会の内容を絞っていくために」から「勉強会の運営のために」に修正しました。

ランチは広島市立大学から徒歩10分くらいの古民家カフェに(こっそり)行きました。

Python の Yield

LT駆動開発03という勉強会に参加して、「PythonのYieldをかじってみた」という発表をしました。

もともとやろうとした「状態遷移モデルをすっきり書く」という試行錯誤の例はこちらにあります。

やってみて何かもやもやしていたのですが、やっと気づいたのは「状態を切り替える処理ではないけど、状態に依存する処理」をどこに書くか、だったんですね。。
気づいたので何か方法がありそうな気がしてきました。

Python と同じようなアプローチで近々 JavaScript に Yield が入るらしいです。。

広島市内はフラワーフェスティバルというイベントでにぎわっていて、広島駅付近はプロ野球の観戦でにぎわっているのに、天気のいい日中に屋内で勉強会でした。

IT技術者も勉強会だけでなく平和大通りをパレードするようなイベントをやったらいいのに。。

と書いたら即座につっこまれました。。

とはいえ、若い人も含めてたくさん参加者がいて、みんないろいろ面白いことしてるなあ、という感じでよかったです。

広島ではまだまだ Python という言語そのものがマイナーなので、今後も地道に Python の発表をしていこうと思います。

すごい広島 #4 で Twitter API の勉強

すごい広島とは 広島のエンジニアやウェブデザイナーが毎週集まって、 もくもくしたり Hackしたり 読書したり する場所です。

ということで、今週は第4回でした。

NVDA の作業をしようかと思ったのですが、たまたま Twitter API 1.0 が今日終了したということで、あちこちでソフトやサービスが動かなくなったという話を聞き、久しぶりに Twitter API の勉強をしました。

よく考えたら、Twitter API はなんどか使ったことがあるのでした。最初に勉強したのは Twitter4r という Ruby のライブラリでした。。

まずは Apigee で Twitter API 1.1 を叩いてみます。OAuth 認証もやってくれて、JSON で情報が返ってきます。簡単ですね。。簡単すぎてつまらない。。

The Qube というスクリーンリーダー対応の Twitter クライアントは Python で書かれていて Tweepy というライブラリに依存しているという話。
なにかライブラリを試してみようか、ということで、調べたら Tweepy の他に Python Twitter というものが見つかりました。

せっかくなので使ってみました
が、タイムラインが取れて、ツイートができることは確認できたものの、GetFollowers などを使うと

twitter.TwitterError: [{u’message’: u’Rate limit exceeded’, u’code’: 88}]

になってしまい、うまくいかず。。

そもそも Twitter で何をしたいのか深く考えてなかったので、久しぶりに音声対話アプリを書いてみました。

書いたのはこんなコードです。

Windows 8 でこのプログラムを起動して、「今日はWindowsで音声認識を使うプログラムを作りました」「コンピューターいまのをツイートして」といえば、Windows 内蔵の日本語音声認識と日本語音声合成で、下記のようにツイートができました。

「コンピューターツイッターを読んで」といえばタイムラインを読んでくれます。

Python でこういうライブラリを使うと HTTP も JSON も文字コード変換もほとんどお任せでいいから便利ですね。。

静かな「もくもく作業の場」でひとりコンピューターに向かってしゃべり続けてしまい、すみませんでした。今度から突発的に音声認識アプリが書きたくなったときに備えて、常にヘッドセットを持参しようと思います。。

最近は Mac OS X や Chrome ブラウザにも音声認識機能がついてたりしますが、Windows 8 はクラウドでなくコンピューターの中で音声認識と音声合成をしています。でも作ったものが Twitter アプリだから、やっぱりネットワークにつながってなくてはならないわけで、違いをアピールしにくいです。。

今日は使いませんでしたが dragonfly – Python-based speech recognition framework – Google Project Hosting は SAPI と Dragon の音声認識APIラッパーらしいです。アプリケーションごとの音声コマンドのライブラリが充実している印象ですが、フレームワークがここまでやるとローカライズが大変かも。。

ところで、今週土曜日にはNVDA広島勉強会を行います。よろしくお願いします。

追記(6月14日)

Twitter クライアントの Qube は無事に API 1.1 対応したそうです: