研究ブログ
VoiceOver等の読み上げソフトでrubyタグを二重に読まないようにする方法
1 はじめに
ゴールボールをしているほぼ全盲の方と話をしていて、一般向けに行なった講演に興味があるということだったので、発表資料を渡そうとして愕然としました。プレゼンソフトで作成した資料は、テキスト部分を中心に読み上げソフトで理解することは可能ですが、あちこちでテキストの配置などに意味を持たせ、視覚的にでないと分からないように作ってあり、そのまま渡しても理解できないと思われました。
Apple KeynoteやMicrosoft PowerPointのアクセシビリティに関する機能を調べ、読み上げに適したPDFファイルが作れるか調べましたが、そういう機能はないようでした。Adobe Acrobatの機能で、PDFファイルにあとづけで読み上げるテキストを埋め込めるか調べましたが、これも無理そうでした。そこで、テキスト中心の文書をHTMLファイルで作ることにしました。
こうすれば、ほぼ最初から資料を作ることになりますが、音だけでも確実に分かる資料が作れそうです。ただ、これもそう簡単ではなく、macやiPhone等に標準塔載されている読み上げソフトであるAppleのVoiiceOverが、ちょこちょこ読み間違いをしたり、固有名詞をうまく読んでくれなかったりします。
ちょっと調べたところrubyタグで読み仮名をつければよさそうなのですが、残念ながら本体の漢字とルビを二重に読んでくれるので、イマイチです。さらに調べるとCSSとJavaScriptを使って、読み上げモードと閲覧モードを変更するようなボタンをHTMLに組み込めるようにして、さらに、この方法を広く発信しているページを見つけました。
ただ、自分でHTMLに組み込む際に、ちょっと分かりづらかったので、自分がやった手順を説明します。WordPressなどは用いず、HTMLファイルを直接編集することを前提としています。
なお、実際に作ったページ「未来共創スクール@くまもと森都心プラザのプレゼン資料」も参考のために共有します。こちらでは、CSSでu-visually-hiddenというクラスを用意して、ボタンを見えないようにしています。これで、読み上げを使わない人は、このボタンが見えなくなります。
2 「まなキキプロジェクト」とスクリーンリーダーモード
この文書で紹介するのは、「学びの危機」 Counter Learning Crisis Projectのページである「スクリーンリーダー特集:スクリーンリーダーモードの作り方その(1)」です。
このプロジェクトは、障害があっても学んでもらいたいと思って、様々な取り組みをされているようです。実際、このページ自体に「ふりがなをつける」や「もじのあいだをひろくする」といったボタンがつけられており、「ふりがなをつける」を押すと、rubyタグ内のrtタグで指定されたふりがなが漢字の上に表示されるようになります。これにより、例えば、難しい漢字が読めない子でも無理なく読めるようになるでしょう。
読み上げに関しては、上記ページの「スクリーンリーダーモードをつくる」のセクションにあります。簡単に仕組みを説明すると、HTMLでボタンをつけ、これに名前をつけておきます。その上で、コンテンツを作成する人はrubyタグにread_kanaというクラス属性を付与しておきます。こうしておいて、上記ページで準備されているJavaScriptのコードを使うと、さきほどのボタンが押された時に、ページ内のrubyタグで囲まれた漢字が、read_kana属性を持つふりがなに置き換えられます。元の漢字は消えて、ひらがなやカタカナになるだけですので、VoiceOver等の読み上げソフトが二重に読むこともありませんし、間違えて読むこともありません。
3 スクリーンリーダーモードの設置の仕方
一つのHTMLページしかない場合、CSSもJavaScriptはHTMLに埋め込んでもよいでしょう。この場合、CSSは下記のようにstyleタグに囲んで、headタグ内に記述しましょう。
<style>
</style>
JavaScriptについては、上記ページには明示的に書いてなかったのですが、著名なライブラリでありjquery.jsを使っているようなので、これも読み込んでおきます。jqueryのバージョンは、まなキキページのソースコードを見て、同じバージョンに揃えています。これもheadタグ内に置いておきます。
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js?ver=3.6.1' id='jquery-core-js'></script>
この上で、HTMLファイルのbodyタグ内の最初のほうに、スクリーンリーダー向けのボタンを設置します。この位置は、本文内であれば好きなところで良いのですが、最初のほうにあったほうが良いでしょう。
最後にscriptタグに、上記ページのJavaScriptのコードを貼りつけます。headタグ内でもよいし、bodyタグ内でもよいですがjqueryを読み込んだ後でないといけない気もします。
ここまでは、同じファイルに埋め込むことを前提で説明しましたが、複数のHTMLファイルがある場合は同じコードを大量に書くことになるので、CSSとJavaScriptをそれぞれ.cssと.jsという拡張子をつけたファイルにまとめ、これらをHTMLページから読み込んでも問題ありません。例えば、CSSをfile.cssというファイルに、JavaScriptをfile.jsに保存し、HTMLファイルと同じ場所に置いてあると仮定すれば、以下のような感じになります。
<link rel="stylesheet" type="text/css" href="file.css">
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js?ver=3.6.1' id='jquery-core-js'></script>
<script src="file.js"></script>
4 おわりに
なお、このResearchMapについて調べた限りでは、HTMLのヘッダ部分の編集ができないようで、同様の仕組みを実現することはできませんでした。
mu4eのmu-1.10系へのアップデート
■ はじめに
時々mu4e(mu)のインストールのことを書いています(前回は「mu-1.4系へのアップグレード」)が、今回はmu-1.10系へのアップデートについてです。網羅的に調べているわけではなく、ちょっと調べてみた程度ですが、後々自分で参照するのに便利そうなことをメモとして残しておきます。
■ 準備
MacPortsを使ってEmacsなどをインストールしています。
% sudo port install emacs-mac-app
% sudo port install gmime3
% sudo port install xapian-core
また、メールはpopでローカルにコピーして、ローカルにあるファイルを読み書きしていて、IMAPは使っていません。メールの取得にはgetmailを使っていて、これもMacPortsからのインストールです。
% sudo port install getmail
■ インストール
今回用いたのはmu-1.10.3.tar.xzです。
% tar xfz mu-1.10.3.tar.xz
% cd mu-1.10.3
このあとコンパイルするのですが、やり方がだいぶ変わっています。実は、前回のインストール時には、すでに変更されていまして、従来のconfigureとmakeからmesonとninjaを使うようになっています。オプションとして、makeでもコンパイルできるようになっていて、前回は従来通りmakeを使っていましたが、以下のような感じでインストールできます。
% env PATH=/Applications/MacPorts/EmacsMac.app/Contents/MacOS:$PATH meson --prefix=/opt/local build
% ninja -C build
% sudo env EMACS=/Applications/MacPorts/EmacsMac.app/Contents/MacOS/Emacs ninja -C build install
こちらではMacPortsを使ってEmacsをインストールしていて、このEmacsを使うようにするため、ちょっと工夫が必要ですが、基本的にはmake時代のころと同じです。例えばprefixオプションとして、MacPortsのフォルダを指定しています。
最初のmesonのところにPATHを設定しているのは、MacPortsでインストールしたemacsコマンドを見つけてもらうためです。envで環境変数を設定しますが、もちろん、あらかじめsetenvなどで設定しておいても問題ないでしょう。
その語初期化して、必要ならインデキシングを実行します。
% mu init --muhome=~/.mu --my-address=myaddress@xxxxx.yyyyy.jp --maildir=/xxxxx/yyyyyy/Maildir
% mu index --muhome=~/.mu
■ full searchについて
今回のアップデートで一番驚いたのは、full searchが簡単に使えるようになっていたことです。muも、そのEmacs用インターフェイスのmu4eも、検索をベースにしているものの、デフォルトでは500件が検索結果として表示されます。今回、メッセージが表示されている画面でP (M-x mu4e-headers-toggle-property)で、全部の結果を表示させるように選べるようになっています。
検索条件や移動先のフォルダ(これも実は検索)によっては、full searchだと時間がかかることもあるかもしれません。その場合はfull searchをオフにすることも可能です。
■ inboxフォルダについて
新規メールはルートフォルダ("/")に保存されており、従来、このフォルダに移動するためには、明示的に"/"(スラッシュ)を入力していました。新しいバージョンでは、フォルダ名を入れる画面で、最初から"/"が入力されており、その後"/"を入れると"//"フォルダが表示されます。
"//"というフォルダは存在しませんが、もともとmuでは検索を実行しているだけなので、maildir://という検索語で検索が実行されますが、これがほとんどのメールが合致するようです。ルートフォルダはもちろん/trashや/sentなどのメールも合致していまい、「ルートフォルダの表示がおかしくなった!」と勘違いしてしまいました。
Woooの録画動画をAQUOSから見る
■ はじめに
長年使っていたテレビ(Wooo)の画面が正常に映らなくなってきたので、久々にテレビを買い替えることに。これに伴い、Woooの録画データを新しいテレビからも使いたいというので、新しいテレビの規格はもちろん、そもそもWoooはどんな規格に対応しているか、など調べたので共有しておきます。
■ 新旧テレビとNASの型番と仕様
旧テレビ:日立プラズマテレビ Wooo P42-XP05
新テレビ:AQUOS 4K液晶テレビ4T-C42DJ1
Woooのマニュアルを確認してみると、「ホームネットワーク」で動画を別の端末で表示したりできるようです。規格としてはDLNAというもののようです。最初は、動画ファイルそのものを適切に変換して新テレビに保存できればと思ったのですが、ちょっと敷居が高かったので、DLNAに対応したネットワーク対応HDD(NAS)を準備することにしました。
こちらではBuffaloのLinkstationを準備しました。
このNASがDLNAのサーバとして働き、AQUOSがクライアントとなって動画を表示できます。
■ データの移行:WoooからNASへ
これら2台を同じネットワークにつなぎ、Woooで録画データを選択した状態で「メニュー」を押し、「ダビング」を選びます。すると、内蔵HDDだけでなく「外部接続機器」として同じネットワーク上のDLNAサーバ(この場合はLinkstation)が見えるので、これを選択すると、いくつか質問されてダビングが始まります。
テレビとルータ(無線LANの基地局でもある)の位置が離れているのですが、Woooが無線LANに対応していないので、ルータまで長い線を用意しました。線はジャマになるけど、保存がおわったらはずせばよいので、という感じです。
ただ、つないでみたら、何かムダなパケットを相当にやりとりしているのか、他の機器のネットワーク接続スピードが劇的に落ちてしまいました。当初はその理由が分からなかったのですが、後で振り返ってみると、この時期、遠隔会議がバスバス切れるということが起こっていたりしました。で、線を抜くとそのようなことはなくなったので、どうもWoooのDLNA機能そのもの、または、WoooとLinkstationの相性がよくないようです。
線をはずしたものの、全部のデータはまだ移行していなかったので、外につながったルータではなく、使っていなかった古い別のルータを用意して、これにNASとWoooを有線接続してダビングすることができました。AQUOSとNASの場合、外につながっているルータである必要があったのですが、WoooのほうはLAN内にDLNAサーバが見えればよいようです。
■ 動画の視聴
AQUOSは無線LANに対応していて、電源を最初に入れた段階で、「どのネットワークつなぐ?」みたいなことを聞かれたので、長い線を引き回す必要はありませんでした。ルータのすぐ横にNASを置き、この間は有線で接続します。AQUOS側はテレビの地上波、BSなどと同じような位置付けでYouTubeやNKH+、NetFlixなどが選べるのですが、ここで「ホームネットワーク」を選ぶと、LAN内のDLNAサーバが表示されます。
Linkstationを選んだら、「ジャンル」ごとなどで保存されている動画を見ることができます。画質や遅延などは感じませんでした。ただ、見終った動画を削除したい時に、AQOUOSから削除する方法が分からなかったので、この後もう少し試行錯誤することになります。
■ 動画ファイルの削除とDLNAクライアントに関する試行錯誤
上述したように、見ることだけであればAQUOSで問題ないけど、動画を消すことができませんでした。DLNAクライアントは、テレビでなくてもあるかもと思い、このあと色々と試行錯誤するのですが、結論を先に書くとスマホ(Android)上のDiXim Playというアプリで、DLNAサーバ上の動画の一覧を確認でき、動画を選択して削除することができました。
上ではさらっと結論だけ書きましたが、うまくいかなかった例も共有しておきます。基本的にパソコンはMacなので、まずMac上のソフトを試すわけですが、いろいろうまくいかないのでParallels Desktop経由のWindows 11でも確かめました。
- macOS Ventura: VLC (サーバとフォルダまで見えるが個々のファイルが見れない), KoDi (そもそもサーバが表示されない)
- Windows 11:VLC, KoDi
- Android:KoDi, DiXim Play
DiXim Play以外うまくいかなかったわけですが、これがLinkstationとの相性なのか、そもそもうまくいかないものなのか、理由はよく分からないです。
■ いまさらながらWoooの高機能さについて
Woooにした理由は、液晶とプラズマを比較した時の、画面の白さの具合がプラズマがよかったという、結構単純なものだったんだけど、いまさらながに思うのは、特段の付属品をつけずに、ある番組を視聴しながら、別の番組を2つ同時に録画できるってのが、非常に便利でした。自分にとっては、これが当たり前にだったんだけど、今回、久しぶりにテレビを選んでみて、実はあまり普通ではなかったのかも、ということに思い至りました。
同時録画できるような機種を選んでも、見ている番組と別に裏番組を録画できるというだけで、Woooのように3番組を同時に扱えるものは珍しい(ない?)ようです。また、安い機種だと録画にはHDDが必要だったり、2番組録画には2台のHDDが必要だったりして、買ってきただけで、1つ見ながら別の2つを録画できるってのはすごかったんだなあと、古い機種のほうの凄さを再確認することになりました。
「アナログ」という用語の定義にこだわってみる
■ はじめに
例えば「関数」という名前。なぜ、こういう名前なのか、実体をうまく表しているのかというのが気になっていました。他にも「関係」が気になっていました。「関係データベース」とかの「関係」ですが、なんだか曖昧で、実体がよく分からないでいました。きちんと調べてみると「関係は集合である」ということを理解してからは、自分の中で名と体がしっかり一致して、いい感じです。最近だと、"DX"がそのような語でした。しかも、関数や関係といった数学用語と違い、明確な定義もありません。そうすると、【'DX'の「変革」部分を定義から説明してみる。】のように、用語の意味を自分できちんと理解できるまで考える必要があります。
さて、自分の中で、上の3つほどではないけど、ちょっとモヤモヤしていた用語に「アナログ」があります。特に、【小学生に教える標本化定理】や【「小学生に教えるフーリエ変換」再び!】のような、子供向けのイベントでアナログやデジタルを扱う時には、難しい言葉を使わずに、しかし、本質に迫る説明をしたいものです。
このエントリ中の2枚写真はphotoACのものを利用させてもらいました。
■ アナログとは
一般的に「アナログは連続的に変化するもの(関数や信号)」と定義されます。多くの教科書にこう書いてありますし(最後に実際に調べます)、自分でもこう説明していました。ただ、「連続」だと、なぜアナログの語源が"analogy"(類似、相似)なのか、語源との関係がよく分かりません。また、この定義だと、例えば関数の場合の「連続関数」でよく「アナログ」という用語は不要な気もします。また、連続ではない関数を「デジタル関数」とも言いません。
こういうちょっとモヤモヤした感じがずーっとしていました。ところが、たまたま【SWITCHインタビュ 達人達「川井郁子×大平貴之」】を見ていた時、プラネタリウム・クリエーターである大平さんが、天の川をボンヤリとした雲ではなく、個々の星の集りとして表現したことについて説明して、「拡大すると細いところまで見えるということは、アナログは変換で定義するのがいいんじゃないか」と閃きのように、急に思い至りました。
その時には、「うぉーっ!」みたいな大発見したような気分でしたが、そう思って探してみると、実は「変換の仕方がアナログ(またはデジタル)」というのはWikipediaにも書いてあるようなことでした。
アナログは、連続した量(例えば時間)を他の連続した量(例えば角度)で表示すること。
自分の発見ではなく、ちょっと残念ですが、いろんなモヤモヤが一気に晴れてきます。例えば、「日時計はアナログである」というのは「太陽の位置を影の位置に変換している」という意味で正しいことが分かります。時々、実数とアナログを結びつけた説明もみますが、「変換」の考え方だと、「ある一つの数字が無限の桁数があるからといって、アナログというわけではない」ということが分かります。
さて、自分では「変換」と思いついたのですが、Wikipediaのほうは「表示」とあります。この違いがよく分かる例として、時計を考えてみましょう。こちらの写真のように「連続的に動く針の時計がアナログで、数字で表示されるのがデジタル」と言われます。
しかし、「変換」だと時計が何を変換しているのか、ぱっとはよく分かりません。時計は「時間を表示」していますが、「時間という入力を変換している」わけではないからです。なので、「変換」というのはある面で鋭い見方でしたが、実体をちょうどうまく表しているわけではありませんでした。
■ 丁寧に定義すると...
さらに、ちょっと教科書をチェックしたところ、すごく納得できる良い定義をしている本を見つけました。
ここでは、区間や同型、連続(離散的)な集合といった概念をまず準備した上で、いったん、一般的にはアナログはどういう意味で使われているかを説明します。
連続な数や物理量などを長さ、面積、角度などで類似させることを言っている
その上で、
区間と同型な全順序集合をアナログ量という。
と定義しています。つまり、物理量などは様々な値を取り、それは「区間」と考えられる、その区間に写像した集合のことをアナログ量と定義していることになります。たしかに変換とか表示の考え方が入っています。
「区間と同型なものは連続だよね」ということを使って、さらに、この定義を一歩進めて
連続な全順序集合をアナログ量という。
としています。ここまでくると、一般的に言われる「連続なものがアナログ」ということと同じになりますが、その前に対応関係ということをきちんと導入した上でいっていることに注意しましょう。
ここまでしっかり定義したものは見たことなかったので、試しにアナログやデジタルの概念を使う信号処理の分野の本を何冊か見てみました。具体的には、まず、アナログなどのキーワードで本を探し、分野として信号処理(十進分類で547.1)に限定して、九大理系図書館の547.1の棚(配架棚2つ分)にある、信号処理に関するタイトルのものを選び、「アナログ信号」「アナログ量」「アナログデータ」などに関する索引がある本を探しました。
これらはちょうど30冊あり、このうち表示や変換という言葉が定義に明確に書かれていたのは、わずか3冊でした。ただ、定義としては触れてないものの、例として変換や表示のことが説明してあったものが2冊ありました。「アナログは連続」と定義することは間違いではないし、実際、上の本でも最終的にそのような定義になっていますが、ちょっとモヤモヤするなあという記述のほうが、信号処理の分野では圧倒的に多そうでした。
小学生に教える標本化定理
■ はじめに
2022年2月26日に「ジュニア科学者養成講座」ニュートンコースの一つ講座として、標本化定理を取りあげ、ウォーターパールなど様々な器具を実際に触りながら、その基本的なアイデアを体験してもらいました。
個人的には、これまで小学生向けにやってきたフーリエ変換の話の後継になります。
■ 標本化定理とは
標本化定理はサンプリング定理(Sampling Theorem)とも呼ばれ、証明した人の名前で染谷−シャノンの定理などとも呼ばれます。定理を簡単に書くと、
任意の連続的な波形は、これに含まれる最大周波数の2倍より大きい周波数で標本化すれば完全に再構成できる
となります。標本化とは、連続的な波形(関数)をとびとびに測定することで、下の図でいうと元の波形(緑の実践)に対し、青い丸の部分だけ測定することになります。
無限の時点で観測や測定をすることはできないので、とびとびで測定することは必須になります。最近、超スローモーション(960fpsなど)が撮れるスマホがでていて、1秒間に960回撮影していることになります。ただ、それでも1秒間に無限の枚数は撮影できません。しかし、とびとびに測定していても、とびとびの間隔が適切であれば、完全に元の連続的な波形が再現できるということで、けっこう衝撃的な内容です。
■ ウォーターパールと標本化定理
しかし、信号処理などを専門にしているわけでもない人は、そもそも標本化したいとも、元の信号を再現したい思っていないわけで、標本化定理はこういうものですと説明してもまったく響きません。そこで、適切ではない間隔で観測することで、不思議な現象が現れるウォーターパールを用いて、「なぜこういう現象が起きるのか?」というところから始めます。
ウォーターパールについては、こちらに説明を書いています。
これを理解する時には「元の動きが周期的」で「連続的には観測できない=とびとびに観測する」という二点がポイントになり、これを理解してもらうことが今回のゴールです。逆にいえば、適切なとびとびの間隔を厳密に求めることにはこだわりません。中高生くらいが相手だと、具体例におけるちょっとした計算をしてみて、二倍というのを考えてもよいかもしれません。
ちなみに、「適切な間隔」とは専門的にはナイキスト周波数とかサンプリング周波数とかよばれるもので、「CDのサンプリング周波数は44.1kHzである」というように使われます。
■ パラパラ漫画からウォーターパールへ
全体の流れとしては、最初にウォーターパールの不思議な現象を見せて(この時には触らずに見るだけ)、興味を持ってもらい、その後、同じようにフラッシュの光を使った実験をやっていくような流れまではある程度簡単に決まりました。
- トウィンクルピクト(詳しくはウォーターパールの仕組みをどうぞ)の仕組みを考える。
- 扇風機にストロボをあてて、どう見えるか確かめる。
- Webアプリでライトだけでなく動きの周波数も変えてみる
これらは、
- トウィンクルピクト:元の動きも光の動きも固定
- 扇風機とストロボ:元の動きは固定、光の動きは可変
- Webアプリ:元の動きも光の動きも可変
となっていて、元の動き(水に与える振動の周波数)とフラッシュの周波数が可変なウォーターパールへの理解が深まります。
問題は、最初に見たウォーターパールの後の、最初の実験です。最初のほうで「標本化」のことを伝えないといけませんが、これをいかにスムーズにするかずっと悩んでいました。一般的な標本化の説明だと、上でも説明した連続的な関数がでるのですが、これは小学生には厳しい感じがします。
結論からいうと、最初にパラパラ漫画を持ってきて、例えばボールの「動き」は連続的なものだけど、人間の目や動画のカメラはとびとびに見ていて、残像から連続的な動きを頭で作っている、という話しから入りました。これで、直接標本化の説明はせずに、「とびとびと連続」という説明ができました。この後は、トウィンクルピクトを使って、フラッシュを使わない状態では連続的に見えて、動物が動いているようには見えず、フラッシュでとびとびにすることでアニメのように見えることとうまくつながります。
パラパラ漫画の仕組みを説明することで、標本化の部分の説明がうまくできた上に、一番身近な道具から実験が始められたのもよかったと思いました。
最後は「ちょうせん状」として、こちらの動画の仕組みを考えてもらいました。いままでは暗い中、フラッシュの光でとびとびを実現していたのに、この動画では日中の明い中で撮影されています。これがなぜなのか、少しヒントを与えて考えてもらいました。
詳しく知りたい方は、上にリンクした「ウォーターパールの仕組み」で説明しています。
JIS配列キーボードのMacBook ProをUS配列で使う設定
以下、急ぐ人のための結論:
- AquaSKK:設定画面→[入力設定]→[キーボードレイアウト]で[オーストラリア]を選択
- 非AquaSKK(英語):システム環境設定→[キーボード]→[入力ソース]で[オーストラリア]を追加
- 非AquaSKK(日本語):該当の日本語入力プログラムの[英字のレイアウト]で[オーストラリア]を選択
■ はじめに
長い時間パソコンを使うため、キーボードの好みもそれなりにあり、配列はいわゆるUS配列が好きです。仕事で自分で使うノートパソコンを購入の場合、あらかじめUS配列が選べるものを検討しますが、学生用に購入するものは、国内ではこちら普通だろうと思うので、基本的にはJIS配列を購入しています。
学生用に購入したものを自分が使うようになることもあって、短い期間であればそのまま使いますが、ある程度しっかり使う場合だと、設定などによってUS配列を変えて使いたいものです。macOSの場合、このような用途には、まずKarabiner-Elementsが見つかると思います。これは、柔軟にキーボードの配列を設定できるもので、例えば、カナキーに何かの機能を割り当てることもできます。一時期使っていましたが、もともとUS配列にはないキーは単に使わないので、ちょっとスペックが高すぎです。
可能であれば、OSに付属の機能など、あらかじめ準備されている範囲でできれば嬉しいものです。キーボードの配列に関係しそうなOSはmacOS Big Surで、仮名漢字変換はAquaSKKを使っており、ハードウェアはMacBook Proです。まずはAquaSKKではなく、標準的な日本語入力プログラムの設定を述べた後で、AquaSKKでの設定を紹介します。
■ システム環境設定の[キーボード]から設定
[キーボード]の[入力ソース]タブでは、日本語入力プログラムを設定できます。例えばAquaSKKを使いたい場合は、インストール後に[AquaSKK 総合]などを選びます。標準でも、ローマ字入力またはかな入力が選べます。以下の図はローマ字入力を選んだところです。
英字を入力する場合のプログラムも選べて、下図のようにキーボードのレイアウトが表示されています。つまり、入力ソースは日本語のかな漢字変換プログラムを選ぶだけでなく、キーボードレイアウトの設定も兼ねていることになります。例えば、英語だと以下のような選択肢があり、ここを[イギリス]にするとShift+3で「£」が入力できるようになります。つまり、イギリス固有の記号が入力できるようになります。ただ、£記号は自分には必要ないため、英語のレイアウトは自分には無関係と思っていました。
上の図でも分かりますが、入力ソースを選ぶと、(キーボードレイアウトがある場合は)右側にキーボードの表示がされ、どこを押すと何の文字が入力されるかが分かります。一番上の日本語ローマ字入力の図では、普通の状態(shiftを押していない状態)で入力される文字で、二番目の図(ABC)では、shiftキーを押した状態でのスクショで、数字の2のところが"(ダブルクォーテーション)になっているなど、JIS配列であることが分かります。
この英語の入力ソースをいろいろ試してみると、[オーストラリア]では余計な記号はなく、しかも、US配列になっていることが分かりました。つまり、一般的な[ABC]ではなく[オーストラリア]でアルファベットの入力をすれば、US配列として使えます。
これが分かれば、標準的な日本語入力プログラムの設定も変更できます。[キーボード]の[入力ソース]タブで選択した日本語入力プログラムの設定で、[英字のレイアウト]というのがあり、キーボードのレイアウトが設定できるので、ここを[オーストラリア]にします。
[カナダ英語]でもUS配列となり、こちらでもよさそうです。JIS配列のMacBook Proで目視で確認したところ[オーストラリア]と[カナダ英語]の違いはなさそうでした。US配列のMacBook Airで確認したところ、多少の違いがありました。ここが[U.S.]や[イギリス]だと、JIS配列のままとなるようです。
その他[“¥”キーで入力する文字]なども設定できます。公式のドキュメントはこちら(「Macの日本語入力ソース環境設定を変更する」)です。
■ AquaSKKでの設定
[キーボード]の[入力ソース]タブで[AquaSKK 総合]を選んでも、キーボードレイアウトの設定はないため、表示されません。AquaSKKでUS配列を使う場合は、AquaSKKの環境設定の[入力設定]タブの[キーボードレイアウト]を[オーストラリア]を選びましょう。
ウォーターパールの仕組み:水の形編
なんだかタイトルが鬼滅の刃っぽくなってしまいましたが、今回は、ウォーターパールで水の形がなぜグネグネなるかについて説明します。この発端は、久しぶりにきたウォーターパールに関する質問でした。以前、同様の質問がきたときに「ウォーターパールの仕組み」にまとめたつもりでしたが、前回も今回も、質問した方は二つの違う現象についてを混同しているようでした。私のほうは、水が上昇して見えたり、止まって見えたりする現象(これをウォーターパールと呼ぶことにします)のほうに興味があると思いこんでいたので、もう一つのほう、つまり、水の形がグネグネして見える現象については説明していませんでした。後者の現象に名前がついているかどうかは分かりませんが、原理から考えて、ここではこのグネグネと水の形が変形する現象を「振動する水」と呼びましょう。
まずは、ふたこれら二つの現象がよく分かる動画(Amazing Water & Sound Experiment #2)を見てみましょう。上記のエントリにも貼ってあります。また、二人の質問者のどちらとも、この動画を見たようでした。
まず、「振動する水」が約20秒あたり("produce 24hz sine wave and adjust volume"という字幕が表示されて)から約1分5秒あたりまで、この現象だけが見えます。このあと1分6秒あたりで"25hz forward effect"と出てから、この現象に加えて、「ウォーターパール」が確認できます。つまり、グネグネと水の形が曲った上に、通常のスピードよりゆっくり水が落ちているように見えます。これは、動画をスローモーションにしているわけではなく、普通のスピードで再生していて、このように見えています。
この後1分45秒あたり("23hz reverse effect"の字幕)から、水が上に昇っていくように見えます。これが特殊効果や編集でないことは、1分50秒あたりで、実物の水が地面に落ちているにもかかわらず、水が上に昇っている様子が写されていることから分かります。
ウォーターパール現象の説明は、冒頭でリンクした別エントリを見てください。ここでは、もう一つの「振動する水」を説明します。結論から言うと、この現象はホースを振動させているから、水の形がそれに応じて変わっているだけです。ホースを手でブンブン振動させたら、出てくる水の形が変化するのと同じです。この動画では、手ではなく、スピーカーを通して音の振動をホースに伝えています。動画の最初のほうで、ホースをガムテープのようなものでしっかりスピーカーに固定しているのが確認できます。
ただ、音の振動による物理的な振動の振れ幅はそれほど大きくないので、振動を与えているようには見えないかもしれません。ある程度近くでスピーカーを見るか、触らないと、物理的な振動には気付かないと思います。この動画では1分30秒前後で、水の出てくるところをズームアップしてくれているので、ここを注意深く見ると、ホースが物理的に動いているのが分かります。
この振動は正弦波やサイン波、サインカーブなどと呼ばれるもので、数学的には三角関数のsin(x)の形をしています。実際、字幕にも"sine wave"(サイン波)と表示されています。普通の生活で我々が耳にする音は、複数の音が複雑に重なりあっているのですが、一つの音(例えばドの音)などは、キレイな正弦波の形をしています。逆にいうと、このような音が複数重なって、複雑な音になっています(重ね合せの原理やフーリエ変換など)。このようなキレイな正弦波の音(振動)を出すのがトーンジェネレータで、この動画の最初のほうでもtone generatorを使っていることが分かります。
正弦波の形は、例えば、こちらのページ(Wikipedia)などで確認できますが、よく見る形は二次元上の線です。この動画では、ホースの先端はある程度自由に三次元内で動くので、二次元上の線ではなく、動画のように円筒のまわりを周回したような感じに見えます。これが、かなり特殊で不思議な感じに見えるのでしょう。
一つの動画だけだと、この動画が特殊なことをしているように疑う人もいるかもしれませんが、トーンジェネレータはスマホでも動くし、スピーカーも簡単に手に入るので、誰でも作ることができます。実際、中学生向けのイベントで、同様にスピーカーの振動を使って「振動する水」と「ウォーターパール」を再現した時の動画があるので、ご覧ください。さきほど動画ほどきれいな線ではありませんが、やはり、グルグル回転したような感じになっています。また、この動画にはありませんが、振動の形を変えれば水の形が変わることも確認しています。
さて、YouTubeの動画は非常に明るいのに対し、我々の動画が暗いのは、ウォーターパールを再現するための仕組みが違うからです。YouTubeのほうは、カメラが飛び飛びの瞬間を記録していることを利用しているのに対し、我々の動画は暗くした上で、高速で点滅するストロボフラッシュを使って飛び飛びを実現しています。そのため、この現場に居て肉眼で見ても「ウォーターパール」が確認できますが、YouTubeの動画のほうは、振動する水は肉眼で見えますが、ウォーターパールは肉眼では見えません。保存した動画でなくても、カメラを通して見れば、見ることができます。実際にそのような実験をしたこともあります。一方で、我々の動画では、その場にいる人が興奮している様子が分かると思いますが、これはカメラを通さずに、ウォーターパールが見えるからです。
mu-1.4系へのアップグレード
■ はじめに
前回mu-1.2のインストールを紹介(「muやmu4eのインストールと日本語による検索」)したあと、気付いたら2020-06-10に1.4.10がリリースされていました。1.4から大幅な変更があるようで、インデックスやキャッシュの格納ディレクトリが変わったり、新しいmuのサブコマンドが導入されました。古い格納ディレクトリをそのまま使いたかったのですが、ドキュメントには明示的に書いていないような少しの工夫が必要だったので、ここにまとめておきます。
■ アップグレードの概略
なお、基本的なアップグレードの仕方は、News.orgに書いてある通りです。
- 最新版のmuコマンドをインストール
- Emacsを終了
- mu initコマンドを実行
% mu init --maildir=~/Maildir --my-address=jim@example.com --my-address=bob@example.com
- mu indexを実行
- 必要なら古いメールのキャッシュを削除
以下、この手順にそって説明します。
■ インストールとインデキシング
まずmuのインストール自体は、前回までと同様にできました。
次に、新しく導入されたmu initというサブコマンドで、muが使うデータベースを初期化します。自分のメアドが一つの場合は--my-addressは一つで構いません。また、こちらでは"~/Maildir"がメールのフォルダなのですすが、その場合--maildirオプションはなくても大丈夫でした。さらに、上述したように、古いキャッシュ用フォルダをそのまま使いたかったので、最終的に以下のように実行しました。
% mu init --muhome=~/.mu --my-address=jim@example.com
database-path : /XYZ/.mu/xapian
messages in store : 0
schema-version : 451
created : 水 7/15 22:53:01 2020
maildir : /XYZ/Maildir
personal-addresses : jim@example.com
するとdatabe-pathなどの変数と、それに設定された値が出力されます。
この後、索引語のインデキシングのために、mu indexサブコマンドを実行します。インデキシングの意味や日本語の検索との関係については、前回のエントリを参照ください。mu initで必要なオプションは設定したため、mu indexの時にはオプションなしで良いかと思っていましたが、そうではないようです。実際、以下のようにオプションなしで実行すると
% mu index
database-path : /XYZ/.cache/mu/xapian
messages in store : 14008
schema-version : 451
created : 月 6/22 22:31:01 2020
maildir : /XYZ/Maildir
personal-addresses : jim@example.com
/ processing mail; processed: 52950; updated/new: 39009, cleaned-up: 0
となり、最初に変数とその値が表示されていますが、 自分のアドレスはmu initで設定したものと同一ですが、最初のdatabase-pathは--muhomeで与えたフォルダになっていないことが分かります。
そこで、mu indexにも次のようにして--muhomeオプションを渡します。
% mu index --muhome=~/.mu
保持しているメールの量にも依存しますが、インデキシングにはある程度の時間がかかります。ただ、一度やっておけば、今後は新規メールのみになりますので、それほど時間はかかりません。
■ メールの検索
これで準備は整いました。普段はmu4eを使ってEmacsから使いますが、まずは確認のためコマンドラインからmu findで検索できるか試してみます。結論からいえば、ここでも--muhomeの指定が必要です。
% mu find --muhome=~/.mu query
これで"query"という文字を含むメールが見つかります。オプションは
% mu find query --muhome=~/.mu
のように、一番最後でもよいです。ただ、
% mu find query
% mu --muhome=~/.mu find query
のようにオプションを指定しなかったり、muのすぐ後に指定すると、あるはずのメールが見つからない結果におわりました。
最後にEmacsから使うために、設定ファイルに以下の一行を追加して、Emacsの中からも問題なくメールが読み書きできるようになりました。
(setq mu4e-mu-home "~/.mu")
ゴールボールを始めたわけ(5):リーダーシップ教育とビジョンの体験
■はじめに
なかなか更新が進みませんが、「ゴールボールを始めたわけ」もようやく5回目です。いままで書いてきたように、理由は複数ありますが、直接的な理由としては、今回のが一番大きかったように思います。
結論から書くと、ゴールボールがリーダーシップ教育、特にビジョンを伝える時の恐さを体験する実習課題として使えるのではないかと思ったから、まずは自分で体験してみたかったのです。その当時、実際に大学院向けの授業でやることを考えていました。結果的には、器具などの問題もあり、ゴールボール自体を授業で体験することはやりませんでしたが、後の述べるように、目を閉じて歩いてみる実習につながります。
■リーダーシップにおけるビジョン
noteに書いていますが、情報を伝えるという立場から「ビジョン駆動型リーダーシップ」という新しいリーダーシップのモデルに辿りつきました。
『指導者と管理者を分けるもの〜情報学研究者のリーダーシップ論〜』
ここでのリーダーシップは「閃きや感動など強い衝動を伴う想いを他の人に伝え、同じような想いをシェアするプロセス」と定義されます。例えば、ある映画を見て感動したので、知り合いにも薦めて、見てもらおうとするのはリーダーシップになります。注意点としては、あらかじめこの映画を面白いと思っている人に伝えるのは、今回のリーダーシップではなく、そうでない人に伝えるところがポイントです。
研究者には「強い想い=閃きで得た仮説」と考えてもらうと理解しやすいかもしれません。ビジネスの分野の人だと「ビジョン」になりますが、計画して論理的に得られたものではなく、閃きなどで得たものです。「ビジョンの定義(2/2):ビジョン駆動型リーダーシップのビジョン」に葉っぱビジネスの横石さん、宅急便の小倉さんの強い想いを例として説明しています。
閃きというと特別な天才だけのものと思われるかもしれませんが、単なる認知の一つで、誰にでも起こるものです。そのため、このモデルでは「誰でもリーダーになれる」ということが理論からの結論として導かれます。
ただ、現実にこのリーダーシップを発揮しようとする時には、少なくとも以下の二種類の難しさがあります。一つは、成長するにつれ、強い想いが湧きにくになってきます。つまり、潜在的には「誰でも」可能ですが、教育を受け、常識をつけて成長するに従い、これらが邪魔をして、感覚や感情に近い「強い想い」を持ちにくくなります。もう一つは「強い想い」が着想されたとして、これを人に伝えること自体にある種の勇気が必要になります。今回のテーマはこちらです。
■なぜ勇気が必要なのか?
前者の「成長するにつれ」というのは、ある程度成長した人であれば、誰でも納得してもらえるのではないかと思っていますが、もう一つのほうが意外に説明しづらいと思っていました。体感してもらうのが難しいといったほうが正確でしょうか。
まず、なぜ勇気がいるかということを説明してみます。一般的なリーダーシップで扱うビジョンは、正しく魅力的なものとして描かれます。正しく魅力的であれば、他の人に薦めるのに躊躇はいらないでしょう。しかし、提案のモデルではそうではありません。そこで「正しく魅力的」と対比させながら、勇気がいる二つの理由を説明します。
まず、「強い想い」は単なる想いであって、「正しいかどうか分からない」という性質があります。詳しくは「リーダーシップは正しくない?」に書いていますので、そちらを参照してください。経験がある人もいると思うのですが、研究でも事業アイデアでも「これで行ける!」と思って始めたものの、なかなか周囲を説得できなかったり、正しさが証明できず、「本当にこれでいいのか?」と疑心暗鬼になることもあります。リーダーシップの初期には、そういう正しいかどうか分からないけど、前に進まないといけないため、それなりの勇気が必要です。
もう一つは、他人にとって魅力的かどうか分からないということです。感動などがキッカケなので、自分にとって魅力的なのは明らかですが、自分が好きだった映画でも「えー、あんなの好きなの」と言いそうな人には、なかなか「面白かったから、ぜひ見てよ」とは言いにくいものです。もちろん、あらかじめ同じタイプの映画が好きと分かっている人同士では、そういう勇気は不要ですが、言い方をかえたら、このリーダーシップには「好きではなかった人の気持ちを変えさせる」ことが必要になります。これも勇気がいることだと思います。
■なぜゴールボール?
さて、「閃いた!」や「感動した!」といった強い想いを、その想いが正しいかの保証はない状態で、かつ、反対されるかもしれない人たちに伝えるのは大変です。ただ、この大変さは、自分で体感しないとなかなか分からないものだろうと感じています。とはいえ、何か閃いたり感動したりすることを学生に強制させることはできないので、提案するリーダーシップを授業で体験させるというのは、なかなか難しそうです。
そうすると、擬似体験をしてもらえればよいのですが、何をしたら似た体験になるか、最初は皆目見当つきません。ただ、もともとのビジョンの意味は「見ること」であり、また、スティーブ・ジョブズはこちらのインタビュー記事"Steve Jobs: The Next Insanely Great Thing"で、クリエイティブなことを知た人はすごい人というわけではなく、単に「見た」人であると言ってます。
When you ask creative people how they did something, they feel a little guilty because they didn't really do it, they just saw something. It seemed obvious to them after a while.
(訳) 創造的な人に、どうやってそれをやったのかを聞いても、彼らはちょっとバツが悪い感じがする。というのも、彼らはそれをやったわけではなく、単に見たにすぎないから。見えた人には、しばらくすると当たり前に思えてきます。
こういうことから、何か「見る」というのがポイントじゃないかと考えはじめました。
こういう問題意識を持っている時に、前回のエントリ「ゴールボールを始めたわけ(4):音で「見る」」で書いたような「見えていないのに見える人たち」のことを知り、自分でも実際に目を閉じて歩いてみたりしていたら、この「見えないのに前に進む状態が、周囲に反対されながらも、強い想いを持って前に進んでいく状態と近いのではないか?」と思うようになりました。よくノーベル賞を受賞した人や新しいビジネスを創造した人などから、最初は周りに反対されたけど、仮説やビジョンを信じて進んでいったといった趣旨のことを聞きますよね。
といっても、自分ではパラスポーツを一度もやったことがないので、まずはやってみようということで、前回のパラスポーツ体験につながるわけです。この時点では、パラスポーツを体験してもらおうと思ってたのですが、ブラインドサッカーは接触スポーツで、男女が受講者にいる講義では難しいなあと感じました。それで、ゴールボールのほうはどうだろうとなって、ゴールボールの体験に至るわけです。
ただ、日程の問題で、ゴールボールを自分が体験するより前に、リーダーシップの恐さを体験してもらおうと思っていた回がやってきたので、実際の授業では、歩道の上を目を閉じて30メートルほど歩いてもらうという実習にしました。ゴールボールに比べると、だいぶ簡単な実習になった気がしていましたが、手軽にできるのと、予想した以上に恐怖を感じることができて、結果的に大成功でした。実際、ほとんどの学生は、最初はそんなことして何になるという感じでした。ただ、その後の振り返りでは「実際にやってみて、先生(私)が言っていたことが分かりました」という感想が非常に多かったです。
歩いてもらう前の指示として、3人ほどのグループになり、目を閉じていない人が安全に注意をすることと、歩道の上の黄色いブロック(視覚障害者誘導用ブロック)の上に歩くことを伝えました。面白いのは、グループの他の人が先にやってみて、恐さを経験しているのを間近かで見ているのに、自分がやるまではその恐怖は体感できないということです。目を閉じて、おそるおそる進んでいるのを見て、ちょっと滑稽な感じすら持っていたかもしれません。こう考えると、上でしたような言葉による説明だけでは、まったく不十分ということが分かります。
■リーダーシップの教育
世にあるリーダーシップのほとんどは、実はマネジメントの教育だと感じています。チームビルディングで多数で一つのことを目指したり、いかにして部下を動かすかといったことです。例えば、暗闇の中でのアクティビティがチームビルディングや円滑なコミュニケーションを目的に利用されている事例は聞いたことがあります。これらは、突き詰めていえば「効率」や「ハウツー」だと思っています。それ自体重要なことだけど、まだ目的がない状態(仮説やビジョンと呼べるものがない状態)では、試行錯誤や失敗が重要になり、効率ではその行動を評価できません。
一方で、ここで説明した「目を閉じて歩く」というのは、まだ誰も歩いていないところを歩くというリーダーシップと不可分な恐怖を体験することを目的としたものです。同じ目的のために、他の手段もあるかもしれません。また、そもそも、リーダーシップにおける恐怖を体験させる教育というのは寡聞にして知りません。リーダーシップが、それまでの常識や行動様式を変えるものであり、そのため危険と隣りあわせであるということは言われ(例えばハイフェッツ)、その点には同意しますが、ここで言う恐怖は変化を嫌うものからの攻撃というより、自分の内面の問題であり、異なるものだと思います。
やってもらった後で感じたことですが、このブロックがビジョン(強い想い)の役割を果たしている気がします。つまり、目を閉じて何も見えなくなっても、目標とするものが何もないわけではなく、道標は存在しています。ただ、それでも、最初のうちは恐いわけですが。
ゴールボールを始めたわけ(4):音で「見る」
■始めに
前回「ゴールボールを始めたわけ(3):多様性を通した無意識への意識」では、自分とは違う感覚を持つ人と接することで、普段意識していないことを意識するキッカケになることを書きました。もともと、このシリーズの第1回目「ゴールボールを始めたわけ:自分の中のセンサーを鍛えたい」にも書いた「自分の感覚を鍛える」ということの延長線でもあります。
いろいろ書いてきましたが、今回、ようやくゴールボールに近づきます。
■ダニエル・キッシュ
このような状態で感覚や感情、脳科学といった分野の本に手を出して読み始めました。その中で、「最新脳科学でわかった五感の驚異」という本で見つけた、エコーロケーションでマウンテンバイクに乗って山をくだる全盲の人(ダニエル・キッシュ)にビックリしました。
こちらにTEDの動画もあるので、ぜひ見てください:
「ダニエル・キッシュ 音で「見る」ことで、世界を動き回る方法」
日本語の訳を読みたい方はこちらからどうぞ。
エコーロケーションは、イルカやこうもりがやっているのが有名ですし、潜水艦もソナーの反響で敵艦の位置を特定しています。ダニエル・キッシュは舌を「タンッタンッ」と鳴らして、その音の反射音で周囲の様子が「見える」そうです。単に「見える」のも衝撃的ですが、マウンテンバイクで山を降りるというのは非常に衝撃でした。さらに衝撃的だったのは、動画の最後のほうで質問に答えて言ってますが、音による視界は「360度のパノラマの視界です。私のソナーは前も後ろも把握できます。曲がり角も把握できるし、表面も把握できます。少しぼやけた三次元構造といったところでしょうか」ということです。光と視覚による視界だと視線を向けたほうしか見えませんが、360度見えているわけです!
■ブラインドサッカー
ただ、彼の話しはあまりに衝撃で、自分でやろうとは全く思いませんでしたが、その後、「武井壮のパラスポーツ真剣勝負」というNHKの番組で、武井壮さんがブラインドサッカーに挑戦してて、これに出演していたブラインドサッカーの選手が「音で世界を見ている」といったことを言ってました。番組の様子がYouTubeにあります。
ちょっと探してみたら、ブラインドサッカーの選手は同様のことをよく言っていました。例えば、こちらは読売新聞パラリンピック・スペシャルサポーターの仲里依紗さん、中尾明慶さん夫妻がパラスポーツの選手にインタビューするシリーズの一つで、川村怜選手が「皆さんが見ている状態に近いと僕は思っています。味方はあそこ、敵がここ、ゴールの位置があそこ、というように全体像を認知しています」と言っています。
上述したキッシュや前回紹介したハービンソンの例だと、自分でやってみようとはなかなか思いませんでしたが、サッカーだったら「あー、自分でもやれるかも」と思ったわけです。思いたったら行動あるのみで、(2019年夏ごろに)探してみたら、ちょうどパラリンピックが近いからか、福岡県内の各所でパラスポーツの体験イベントがあってました。
『パラスポーツ体験イベント 北九州地区』を開催します!!
県内で何回かやるようですが、その当時直近だった北九州まで行ってみたところ、その会場では、目を閉じてやる競技はブラインドサッカーのみでした。まだ、他のお客さんが来る前から参加して40分ほど連続してアイマスクをつけて目を閉じたままシュートを打つ練習をしてみました。お客さんが多かったら自分だけ占有してやり続けるわけにはいかないので、連続して集中してできたのはラッキーでした。止まったボールをシュートするだけの、視覚を使えたら簡単なことでしたが、アイマスクをした状態ではかなり難しくて、でも楽しい経験でした。
このころ目を閉じて、歩道の黄色い視覚障害者誘導用ブロックを歩くのがマイブームでしたが、意外に難しく、なかなかうまくブロックの上を歩けませんでした。ただ、体験をやった後にグンと上達して数十メートルくらいであれば、ある程度スタスタ歩けるようになってました。脳内で新しい回路が作られたのかもしれません。
■ゴールボールへ
ただ、自分はサッカーという競技はそれほどやったことがなくて、目を閉じているかどうかの前に、サッカー自体がちょっと難しいなと感じました。最初からサッカーの経験があるとかだとよいのかもしれませんが。また、次の回で述べますが、目を閉じてするスポーツを大学の授業でやってみたいと思っていたので、接触のあるブラインドサッカーを経験のない学生にさせるのはちょっと難しいかなとも思いました。それで、イベントを主宰していた県の職員の方と話したところ、次の福岡地区での体験イベントではゴールボールをやるから、ということでゴールボールにようやくつながりました。
「ゴールボールだ!」というある種の閃きに至るには、そこにつながる様々な経験があったからで、ゴールボールの記述はまだありませんが、これらがあってゴールボールにつながるわけです。noteのほうに書きましたが「まんじゅうは一つ目から!」における4つ目のまんじゅうに相当する部分ですね。
ゴールボールを始めたわけ(3):多様性を通した無意識への意識
■はじめに
前回のエントリ(ゴールボールを始めたわけ(2):周波数から視覚と聴覚へ)で、周波数を通した色と音との関係を示す動画まで辿りつきました。色や音は感覚として認知できますが、普段は無意識にできていることです。今回は、気付きにくい無意識への意識の仕方を、もうちょっと掘り下げて考えてみます。
■ 無意識と情報
前回紹介したようなフーリエ変換を小学生にという例だけでなく、模擬授業や一般向けの科学イベントには積極的に参加してました。大学の先生でも、このような活動に積極的な人もいればそうでない人もいるでしょう。自分が積極的だった理由は「自分が無意識で知っていることを、講演や模擬授業向けに意識的にまとめることにより、自分の理解が深まる」という感覚をもともと持っていてため、突き詰めていえば自分のためにやっているという感じです。その極端な例がフーリエ変換で、実際に、微積や三角関数などの道具を取っ払って説明するこで、自分の理解がより深いレベルに到達しました。
子供向けのイベントにも積極的だったため、子供から「情報って何?」と聞かれたらどう答えようと結構真剣に長いこと考えていました。その結果、情報って何?(1):審査の評価軸から考えるで書いたように「情報=心に起きた(起きる)ことを知らせること」と考えるようになりました。つまり、情報化とは無意識を意識できるように変換することです。このような意識があったため、上のような「無意識→意識」といったことを明示的に考えるようになりました。
■ 様々な無意識
こうやってシンプルな「情報=無意識→意識」というモデルができると、自分がこれまでにこだわってきたことの多くも、同じモデルで説明できることに気付きます。前々回のエントリ(ゴールボールを始めたわけ:自分の中のセンサーを鍛えたい)でも書いたように、腰痛持ちであったことに加え、もともと広く浅く様々なスポーツをやってきたため、身体知や体の正しい使い方といったことにも興味がありました。身体知というのは無意識の知識と言えるでしょう。しかし、身体知に落としこむまでは、意識的な動作などが必要になります。このあたりのことは、こちらのエントリ(情報って何?(3):スポーツから考える(2/2))にも書いていますが、「習得への情熱」(ジョッシュ・ウェイツキン)が面白いです。
このエントリにも書いたように、心理学や行動経済学では、我々の認知や思考には二種類があることが知られていて、システム1とシステム2と呼ばれます。システム1は無意識に働くもので、感覚など生来的にできるものもあれば、かけ算の九九のように訓練でほぼ無意識でできるようになるものもあります。この言葉を使えば、身体知はシステム1での理解と考えてよいでしょう。この言葉を使えば、「情報=システム1→システム2」と書けます。
前回のエントリ(ゴールボールを始めたわけ(2):周波数から視覚と聴覚へ)で書いた音や光の認知は感覚(システム1)で、身体知もシステム1で、難しい理論に関する暗黙知もシステム1といえます。自分だけの世界であれば、システム1のまま理解していて良いわけですが、人とその知識を共有したい場合、一般には言葉などを通して伝える必要があり、システム2を通すことになります。もちろん、その体験をしてもらって、システム1で体験してもらうことにより伝えるということもありますが。
■ 多様性:「無意識」に意識を向けさせるもの
簡単に「無意識」と繰り返しましたが、無意識であるために、それを自分で明示的に意識することは非常に難しいことです。フーリエ変換の例で考えると、難しい式での理解(こちらは説明できるのでシステム2での理解)で覆われている、自分でも意識していないような理解を掘り起こす作業になります。この例では「フーリエ変換は様々な分け方の平均で全体を表している」という理解に到達し、平均を用いることで小学生に説明できるようになったわけです。
この理解に到達したのは、はっきりした瞬間があります。ある種の閃きの瞬間です。大学の授業において、フーリエ係数を計算するところで、学生に「これは平均をとっているのと同じだよ」ともともと説明していました。それにもかかわらず、平均を使えばよいというアイデアには到達できませんでした。ただ、授業中にふとある学生が「フーリエ変換って平均だよね」みたいなことを呟いて「それだ!」となったのです。自分では意識するほどのことではなかった平均が、他人が言う言葉を耳で聞いて初めて突破口が開けました。感覚的には、外部刺激によって、脳の中でまったく違うところがつながり、新しい回路ができた感じです!
外部からの入力が重要でした。こう考えると、無意識を意識的に考える方法が見えてきます。例えば、海外旅行のように、普段と違う環境に自分を置けば、普段自分が無意識にやっていた思考や行動に気付きやすくなります。また、他の人から指摘してもらったり、あるいは、人の振り見て我が振り直せというように、他の人の行動を観察してもよいでしょう。
■ 障碍を持つ学生
自分が意識できない無意識に気付く機会は色々ありますが、ある授業で身体に障碍を持つ学生を担当した時もそうでした。障碍を持つ人に対する偏見はないつもりでしたが、具体的にどう対処してよいのか分からず、心理的にかなり動揺したのを覚えています。あらかじめ要望は聞いており、システム2としては、何をすればいいのか理解はしているものの、自分のシステム1(無意識)では拒否反応のようなものがあったのでしょう。こういう拒否反応を消すのは、実際に体験するしかないわけです。実際、授業を通して交流してみれば、他の学生と比較してもよくできる学生で、いろいろな違いもある上で、それでも特に大きな違いはないじゃんと思った記憶があります。
この時期からEテレのバリバラなどを見るようになったのですが、自分の無意識をガツンと変えてくれたのはNHK総合「ココがズレてる健常者 障害者100人がモノ申す」です。これはかなり衝撃でした。番組の最初のころは、見てはいけないようなものというか、拒否感のようなものがあったことを明確に覚えていますが、この番組を見て、かなり自分の無意識でのイメージが変わりました。これも、障碍を持つ人の主張を本などで読むのではなく、実際の行動を見ることができたのが大きかったように思います。
ゴールボールを始めたわけ(2):周波数から視覚と聴覚へ
■はじめに
ゴールボールを始めた理由がいろいろあるのでこんな文章を書き始めたのですが、単純に複数の理由が並列してあるというより、複数の興味がからみあってゴールボールにつながったという感じです。なので、今回のエントリ単体では直接ゴールボールまで辿りつかなかったです。今回は、科学教室で使っていた周波数というアイデアから視覚と聴覚を同一視した、ちょっと変わった動画までです。写真は、科学教室で使ったアプリの画面ダンプです。
■(少し難しいけど前提なので)フーリエ変換とは
もう10年くらい前になりますが、「フーリエ変換」と呼ばれる難しい理論の本質部分を小学生に分かるように教えたら面白いのではないかと思いついて、数年間試行錯誤して、実際に小学生向けの科学イベントをやりました。
・小学生に教えるフーリエ変換(2014/04/06)
この時は、近所の子供たち向けのイベントでしたが、改良したものを昨年MUJIのイベントとして一般の子供たち向けにやりました。
・「小学生に教えるフーリエ変換」再び!(2020/02/24)
フーリエ変換は、理系の大学2, 3年くらいで習う数学的な概念で、数学や物理学、情報を含む工学部の多くの学科で習います。無限級数や微分積分、三角関数などを用いていて、多くの人にとってはチンプンカンプンだと思います。ただ、現象としては日常的に体験していて、虹は典型的な例です。虹は、雨粒の屈折によって太陽光がいろんな色に分けられます。この場合、一つの色が一つの周波数(1秒間に何回振動する波かを表す)に対応します。大きな周波数の光は紫(紫外線とか)に見えて、さらに大きくなると紫外線と呼ばれます。音でいえば、高い音は大きな周波数(速い振動)で、低い音は小さな周波数(ゆっくりした振動)で、我々は様々な周波数の音が重なった音を聞いているわけです。
フーリエ変換は時間的に変化する波(音や光)を、その波の中にある周波数(ある高さの音やある色の光)がどれくらい含まれているかというように変換するものです。音にあわせて光のインジケーターが増えたり減ったりするイコライザーとかアナライザーとか呼ばれる機器がありますが、これらの機器は、基本的には入力された音の中に、どの周波数の音がどれくらいの量含まれているかを、おおまかな区間ごとに表示するものです。つまり、複数の音が重なったものを個々の音に変換するものです。
光でいえば、虹には、いろんな色が連続して変化しながら含まれていますが、もともとの太陽光にこれらの光が含まていたというわけです。太陽光ではなくて、例えば、ブラックライトの光をプリズムで分解してみると、紫外線のあたりの光だけが見えて、虹のように見えませんが、これはブラックライトの光が特定の周波数の光のみを含むからです。
■周波数で表すことの利点
周波数で表す利点はいろいろあると思いますが、小学生でも分かるような利点というとなかなか難しい気がします。ただ、日常的な現象の例として音や光を使うので、これらに関連したものがいいなと考えていたところ、TEDの動画でまさにドンピシャなものがありました。
ニール・ハービソン:「僕は色を聴いている」
この人は色覚に異常があり、色が見えず全てがモノクロに見えているそうです。そこで、21歳から小さなカメラを使って、このカメラで見えた色の周波数を適当な音の周波数に変換して、これをイヤホンで聞きます。つまり、タイトルにあるように、この人は「色を聴いている」わけです。これまで色は見たことないので、はじめのうちは、「この音は赤で、この音は青」というように学習する必要があります。その意味で、まったくランダムに音に色を割り当ててもよいのですが、似たような色は近い音で聞こえたほうが分かりやすいでしょう。人間に見える範囲の色と音は幅があり、その間は少しずつ周波数が変化しているので、端の色に端の音を割りあてて、あとは光の周波数を数式で変換して音の周波数に変えれば、近くに見える黄色の黄緑の音は近い音になります。このような変換が自然にできるのが周波数の良さです。
音には、楽しく聞こえる音や悲しく聞こえる音がありますが、上のような変換をしていると、「これは楽しい色」といった認識がうまれてくるそうです。すでにこのプレゼンの時には8年間このような経験をしているそうで、このような経験を積んでいけば、もともとは音のみの世界だった音楽にも色を感じるようになるそうです!例えば、モーツァルトの「夜の女王のアリア」を聞いたら、「黄色が多くてとてもカラフルです。いろんな周波数が混在しているからです。」だそうです!
「小学生に教えるフーリエ変換」再び!
■はじめに
もうかなり前(2018年8月)になってしまいますが、久しぶりに小学生を対象にフーリエ変換(の基本アイデア)を教えるイベントをやりました。前回は2013年度(2014年3月)に近所の小学校6年生を10名ほど集めて実施した「小学生に教えるフーリエ変換」ですが、今回はなんとパワーアップ(?)して、決断科学の学生さんが主催する一般向けのイベントとして、キャナルシティ博多のMUJIのスペースを借りてやりました。内容やイベントの進め方で、いろいろと考えたり、感じたりしたことをまとめておきます。
高校生や中学生向けには、時々模擬授業の依頼がくるので、同じ内容をベースにした内容を話すことがあるのですが、小学生には4年半ぶりくらいになります。依頼もないのに、わざわざ開催したいと思ったのは、うちの子どもが小学6年になるタイミングだからです。前回は長男と次男が6年のタイミングで、今回は三男です。また、このネタの話を知り合いにしたら、東京と北海道からも参加したいという人がいてので、夏休み時期の開催となりました。
イベントの様子は研究室のニュースのページにあります。また、イベントの資料(PDF)と、使ったアプリ(JavaScriptが使えるブラウザでどうぞ。ただしEdgeでは動かないかも)はこちらです。
■これまでの問題点
ブロックの形(の情報)を遠くに送りたいという問題設定にした上で、ブロックの高さをそのまま送るのではなく、様々な「平均」を送る、というのが話しのおおざっぱな流れになります。平均の概念は5年生の冬くらいに習うので、小学校の高学年であれば理解できることになります。
一方で、模擬授業を始め、いろんなイベントで活躍しているウォーターパールの説明が不十分という問題点がありました。ウォーターパールについては、こちらのエントリ「ウォーターパールの仕組み」をご覧ください。このページには動画もあり、これらを見てもらえばなんだか凄そうというのが分かってもらえると思います。実際、話が難しくて消化不良だった時にも、これを見せておけば大満足(!?)というもので、かなり重宝します。
「ウォーターパールの仕組み」にも書いたように、これはある現象の周波数(ウォーターパールでは水滴が落ちる間隔)と、それを見る周波数(ウォーターパールではマルチストロボの間隔)の二つにより成立する現象で、フーリエ変換を習うときにはだいたい習うサンプリング定理(標本化定理)と深い関係があります。ただ、「平均」として話しをしたものの、周波数のことには軽くしか触れていないため、ウォーターパールの仕組みは軽く紹介する程度でした。
■「波」を前面に押し出す
上述したように、今回は遠方からの参加者がいるため伊都キャンパス(は、中心部からだいぶ遠いのです)ではなく、天神や博多駅など中心部にしたいという思いがありました。それで、すでにキャナルシティでの一般向けイベントの実績があった決断科学の学生さんによる「サイエンスカフェ部」に相談して、キャナルシティのMUJIでやらせてもらえることになりました。「サイエンスカフェ部」でのイベントなので、まず、学生さんに趣旨の説明をして、それをもとに彼らが企画書を作るという流れになるので、まず、彼らにどんな内容なのか説明します。ここで、その学生さんの意見で、「波」を中心にしたストーリーにしよう、という話しになりました。
もともと、波の概念を小学校向けに説明するのは難しいと私が無意識に思っていたようで、当初はあまり乗り気ではありませんでした。しかし、リハーサルにつきあってくれた決断科学の学生さんや先生は、完全に専門外だったので、この人たちに向けに説明した上で、いろんなダメ出しをもらって、内容を修正して、最終的に「タイミング」という切口で説明するようにしてみました。
■今後の課題
ウォーターパールとの関連はよくなったものの、まだ、説明が多い気がしています。もっと子供たちが自分で考えるようにできるような工夫をすると、もっと楽しんでもらえそうです。
ゴールボールを始めたわけ:自分の中のセンサーを鍛えたい
■はじめに
ゴールボールを始めたキッカケは一つではなくて、いろんなことが影響しているので、ちょっとつらつらと書いてみます。一つの理由は、自分が持っているセンサーである「感覚」を鍛えたいなあと思ったことです。
■ゴールボールをやってみて
ゴールボールはアイマスクをつけてやるので誰でも参加できます。アイマスクをしていて視覚情報を使えないので、ボールに入った鈴の音など、使う感覚のメインは音になります。ただ、これまで自分は視覚情報に頼っていた分、情けないほど自分の耳はあてになりません。参加している練習会には女子日本代表(つい最近東京オリンピックの代表に選出されたニュースを見ました)の方もいらっしゃって、この人たちのプレーを見ていると、耳で「見ている」と感じるくらいの反応をされています。野球のキャッチボールでいうと、うまい人が「すっ」とボールのほうに体を寄せていくような感じで、ボールを受けとめています。
そうではない自分でプレーしていてて困るのが、さっきのプレーがどうだったのかの情報が得られない(フィードバックがない)ので、プレー自体を修正しようがないということです。もちろん、周囲から声をかけてもらえば分かるのですが、他の人がいないと自分自身で投げたボールがどこにいったのかもよく分からないわけです。ただ、考えてみればおかしな話しで、自分の動作に気をつけていれば、動作の結果がどうなるか予測できそうなものです。でも、普段はそんな自分の動作に気をつかうなどといった面倒くさいことをしなくても、視覚情報からフィードバックが得られるので、他の感覚を遊ばせていて、鍛えていなかったようです。
■腰痛とセンサー
ところで、自分にはずっと腰痛がありました。最初に違和感を感じたのは小学校の頃ですが、特に30過ぎて始めたバドミントンの影響で何回か立ち上がれなくなるくらいの腰痛があったこともあります。そのため、どんなストレッチをすればいいのか、どんな風に動けばいいのかいろんな本を読んだり、テレビを見たりしてきました。ただ、決定的なものはなく、だましだましやっているような感じでした。ところがこの状況が最近変わってきました。ここ2年ほど見てもらっている理学療法士さんのおかげで、普段の生活はもちろん、バドミントンをやっていても疲れが残らないようになってきました。
この理学療法士さんのアドバイスのポイントは「どんなことをすれば体によいのか」の前に、「自分の体がいまどういう状況にあるのか」をチェックして、しかも、私も理解できるような動きで体感できるようになったことです。おおげさに言えば、私は骨盤を左に傾けていたようで、左側の腰に過大な負荷をかけていました。逆に、右側は浮いていて力が入らない(使っていない)状態なので、脳の回路が右側を使わないような動作をしがちでした。これが悪循環になり、使わない右側は筋肉などが固まりがちで、さらに使いにくい状態となっていたました。因果関係は逆で、右が固いため左側を使うようになったのかもしれませんが。例えば、右腕を上げるという動作をするときに、右側は固まっていて肩関節から動かすのがしにくいため、おおげさにいえば、上半身全体を左側に傾けることで右側の自由度を確保して、固まっている右側全体を動かすことで、腕を上げるという感じになっていました。
細いところでは、右側の足首が固いとかも見つけてもらい、このあたりをやわらかくしつつ、体重を右に乗せる動きをゆっくり何度もやったりして、脳の回路を「デバッグ」していきました。こうすることで、「昨日バドミントンしたから、今日は左の腰にちょっとした疲れが残っているなあ」というようなことに敏感になってきて、右側により体重の乗せられるようになってきました。それまで、周囲から情報を得よう得ようとしていたのが、実は自分の中の情報に敏感になることで、こんなに変わるんだと気付いたわけです。
■おわりに
それでゴールボールに話しを戻すと、視覚を使わないことで、より自分の感覚に敏感になれるのではないかと思ったわけです。いまのところ、いかに自分が感覚を使っていないかを実感するばかりですが、目を閉じて歩道上の黄色のサインの上を、以前よりずっと長い間歩けるようになったり、少しずつですが感覚が磨かれているのかもしれません。
MacPortsでMecabをインストールした場合のRMeCabのインストール
■ はじめに
MacPortsを使ってmecabをインストールした場合、標準的な方法でRMeCabをインストールしてもうまく動かないようです。ただ、この後説明するように、問題を回避できたので、まとめておきます。説明に使うバージョンは以下の通りで、いずれもMacPortsからインストールしています。
- R 3.6.1
- mecab 0.996
- mecab-ipadic 2.7.0
■ 標準的なインストール
まず、こちらのサイトを参考に、RからRMeCabをインストールしてみます。
> install.packages ("RMeCab", repos = "http://rmecab.jp/R", type = "source")
上のサイトにあるように、MacやLinuxでは、typeとしてsourceを指定しないといけません。つまり、コンパイルする必要がありますが、コマンドライン・ツールのインストールなどを含め、上記サイトには丁寧に解説してあります。
このコマンドを入力すると、コンパイル作業が始まり、その様子が表示されますが、最後のほうは以下のようになります。
(略)
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I. -I/usr/local/include -fPIC -Wall -g -O2 -c docNgramDF.cpp -o docNgramDF.o
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I. -I/usr/local/include -fPIC -Wall -g -O2 -c setMeCabMap.cpp -o setMeCabMap.o
clang++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o RMeCab.so Ngram.o NgramDF.o NgramDF2.o RMeCab.o RMeCabC.o RMeCabDoc.o RMeCabFreq.o RMeCabMx.o RMeCabText.o collocate.o docDF.o docMatrix2.o docMatrixDF.o docNgram2.o docNgramDF.o setMeCabMap.o -L/usr/local/lib -lmecab -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RMeCab/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (RMeCab)
"clang++"というのがコンパイラで、1つの行が1つのファイルをコンパイルしていて、最後の長い行(clang++ -dynamiclibで始まる行)が、それまでにコンパイルした各ファイル(RMeCabC.oのように、拡張子が.oのファイル)を全て集めて、RMeCab.soというファイルを作ります。
コンパイルする時には既存のライブラリを用いることが多いのですが、ライブラリには、OSに最初から付属しているインストールされているライブラリ(標準ライブラリなどと呼びます)と、後からユーザがインストールしたものがあります。標準ライブラリは、インストールされる場所が決まっており、コンパイラがライブラリを探す時は、これらの場所から目的のライブラリを探しますが、ユーザがインストールしたライブラリを用いる場合は、どこにインストールしてあるかその場所をコンパイラに教える必要があります。そのオプションが-Lです。例えば、-L/usr/local/libというのが、RMeCab.soをコンパイルしている行にありますが、これはコンパイラに/usr/local/libというディレクトリを探してね、という指示です。このオプションは複数指定でき、ある場所になければ、他に指定された場所も調べます。
インストールされたRMeCab.soが、どのライブラリを使っているかは、以下のように調べます。まず、以下のようにして、R内で利用されるライブラリのインストール先を調べます。
> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/3.4/Resources/library"
ターミナルで、以下のように入力すると、これまでにインストールしたライブラリの名前がディレクトリとして表示されると思います。ここにRMeCabがあるはずです。
% ls -1 /Library/Frameworks/R.framewok/Versions/3.4/Resources/library
KernSmooth
MASS
Matrix
RMeCab
Rcpp
(以下、略)
さらに、RMeCabの中を確認すると、いくつかのサブディレクトリがあり、この中のlibsの舌にRMeCab.soがあります。このRMeCab.soというファイルに対して、以下のようにotoolというコマンドを用いると、どのライブラリが使われているか分かりますが、最初のほうに書いたように/usr/lib/libmecab.dylibが使われていることが分かります。
% otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RMeCab/libs/RMeCab.so
/Library/Frameworks/R.framework/Versions/3.4/Resources/library/RMeCab/libs/RMeCab.so:
RMeCab.so (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libmecab.dylib (compatibility version 1.0.0, current version 883.0.0)
/Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libR.dylib (compatibility version 3.4.0, current version 3.4.1)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1673.126.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 800.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.0.0)
このようにしてコンパイル、インストールが済んだら
> library(RMeCab)
> RMeCabC("テスト")
とRMeCabを実行できるはずなのですが、以下の画像のようなエラーがでます。
Exception:/BuildRoot/Library/Caches/com.apple.xbs/Sources/Mecabra/Mecabra-883.1.1/src/tokenizer/tagger.cpp(110) [load_dictionary_resource(param)] /BuildRoot/Library/Caches/com.apple.xbs/Sources/Mecabra/Mecabra-883.1.1/src/param.cpp(130) [ifs] no such file or directory: ./dicrc
エラーメッセージを見ると、設定ファイルが見つからないと言っているようにも見えますが、今回の場合は、後述するように、設定ファイルは関係なかったようです。
■ 回避策
今回紹介する回避策はRMeCab掲示版のこちらの書き込みを元に、もう少し詳しく手順を書いたものです。
RMeCabをインストールする前に、Mecabをインストールする必要がありますが、MacPortsでインストールしました。これによってlibmecab.dylibというライブラリがインストールされ、このライブラリを用いてRMeCabが動作しますが、MacにはOSに付属してlibmecab.dylibという同名のライブラリが存在します。このライブラリは、RMeCabが要求するものではないのですが、コンパイル時の設定によりこちらが使われているようです。そのため、回避策の骨子は、RMeCabのソースをダウンロードし、libmecab.dylibを読み込むディレクトリを指定した上でコンパイルしてインストール、となります。
まず、ソースファイルのダウンロードは以下のようにします。
> download.packages ("RMeCab", destdir = "~/Downloads", repos = "http://rmecab.jp/R", type = "source")
destdir の値は適当に修正してください。
ダウンロードしたRMeCabは、~/Downloads/RMeCab_0.99999.tar.gzなどとなります。バージョンが異なれば、~/Downloads/RMeCab_1.04.tar.gzとなったりします。
このファイルを展開した上で、RMeCab/src/Makevars内の
MECAB = -L/usr/local/lib -lmecab
を、以下のように変更します。
MECAB = -L/opt/local/lib -lmecab
MacPortsは/opt/local/lib以下にlibmecab.dylibをインストールするので、上のように変更しましたが、Homebrewなど/usr/local/libにインストールされる場合は、問題は起きないでしょう。
この後、修正したファイルを、再度tar.gzに固めた上で、以下のようにしてインストールします。
> install.packages("~/Downloads/RMeCab_0.99999.tar.gz", repos=NULL, type="source")
今度は、コンパイルの最後のところで、-L/opt/local/libとなっていると思います。otoolで調べてみると
% otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RMeCab/libs/RMeCab.so
/Library/Frameworks/R.framework/Versions/3.4/Resources/library/RMeCab/libs/RMeCab.so:
RMeCab.so (compatibility version 0.0.0, current version 0.0.0)
/opt/local/lib/libmecab.2.dylib (compatibility version 3.0.0, current version 3.0.0)
/Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libR.dylib (compatibility version 3.4.0, current version 3.4.1)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1673.126.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 800.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.0.0)
となって、今度は /opt/local/lib/ 以下にある /opt/local/lib/libmecab.2.dylib が使われていることが分かります。ここまでくれば、RMeCabが使えるようになります。といっても、簡単にチェックしただけですが...
MacでのKH Coderのインストール
経済の博士課程の学生からテキストマイニングについて相談を受けたので、KH Coderを紹介しましたが、Macではうまくインストールできなかったということでした。紹介した時には、簡単にインスールできるものと思いこんでて、たしかにWindows上でのインストールはそうなのですが、Macではかなり難しいですね。ターミナルからの操作が大量にあり、また、データベース管理システム(DBMS)のインストールもあって、大変です。KH Coder自体は無償ですが、Mac向けに有償(約4千円)のインストールパッケージがあるので、インストール作業に自信のない方は有償パッケージの利用をおすすめします。
自分の作業をざっとまとめておきますが、基本的にKH Coderが動くところまでしか確認しておらず、実際にはデータベース等の設定は行っていないので、そのあたりについては書いていません。まず、こちらの環境は以下の通りです。
- MacBook Air (Retina, 13-inch, 2018)
- macOS Catalina (10.15.2)
macOSへのソフトウェアのインストールにはMacPortsを使っています。HomeBrewでも同じようなことはできると思います。
最初にKH Coderのサイトの「KH Coder 3(最新版)ダウンロード」の「Mac」のセクションへ行き、インストールのための事前準備(主に、KH Coderのインストールの前にインストールしておく必要がある別のソフトウェア)を確認します。具体的には「必要なソフトウェア/ハードウェア」のLinuxに書いてあるものの準備が必要です。ここの記述を簡単にまとめると、X, ChaSen, MySQL, Perl, Rのインストールと、PerlおよびRの各種モジュール/ライブラリのインストールが必要です。また、配布物のREADME.mdには、"Installing khcoder on Ubuntu #91"が参考になると書いてありますので、そちらも参照してください。他にも、いろいろ探している時に、下記の掲示板の書き込みが参考になるとの情報がありました。
http://koichi.nihon.to/cgi-bin/bbs_khn/khcf.cgi?no=1105&mode=allread
http://koichi.nihon.to/cgi-bin/bbs_khn/khcf.cgi?no=1135&mode=allread
Xについては、XQuartxからダウンロードして、インストールします。Xでの日本語入力については確認していませんが、Macに付属のかな漢字変換ソフトを使っての入力はできないかもしれません。こちらはAquaSKKというソフトを使っていますが、このソフトではXQuartzでの日本語入力はできないようでした。他のソフトは全てMacPortsからインストールしました。
% sudo port install mysql8 mysql8-server
% sudo port install openjdk13
% sudo port install stanford-postagger
% sudo port install mecab
% sudo port install R
上のうち、POS Taggerについては、英文を解析しない場合は不要かもしれません。Perlについては、あらかじめMacPortsでインストールしていたので、上には含まれていません。
これらのインストールが済んだら、"Installing khcoder on Ubuntu #91"を参考にPerlとRのパッケージをインストールします。Rについては、
install.packages("RcolorBrewer", dependencies=TRUE)
の"color"のCを大文字にしないといけないようです。
また、Perlのモジュールについても、いくつかについては、そのままではインストールが失敗するものがありました。失敗したものは、以下のようにしてKH Coderを実行した時に以下のようなエラーメッセージがでます。
% perl ./kh_coder.pl
Can't locate DBD/mysql.pm in @INC (you may need to install the DBD::mysql module)
この場合は、DBV/mysql.pmが適切にインストールされていないということなので、「KH CoderをMacにインストール」を参考にしながら、ソースディレクトリに移動して、直接makeコマンド等を入力する時に、MySQLのコマンドを設定しておけば大丈夫でした。
% sudo env PATH=/opt/local/lib/mysql8/bin:$PATH perl Makefile.PL
% sudo env PATH=/opt/local/lib/mysql8/bin:$PATH make
% sudo env PATH=/opt/local/lib/mysql8/bin:$PATH make install
毎回、このようにenvを使わなくても、自分の設定ファイルでPATHを設定してもよいです。
"Installing khcoder on Ubuntu #91"には言及のなかったモジュールも必要と言われることがあったので、その都度インストールしました。
絶対値記号|y|のはずし方
はじめに
|y|のように文字式に対する絶対値について質問されて、よくある勘違いがありそうだと思ったので、まとめておきます。具体的な数字の場合
まず、文字式ではなく、具体的な数字で考えましょう。|2|=2で、|−3|=3のようになりますが、これを「正の数の場合はそのまま、負の数の場合マイナスをとって記号をはずす」と覚えていると、勘違いの元になります。そうではなくて、「正の数の場合は+1、負の数の場合は−1を掛けて記号をはずす」と理解しましょう。もうちょっと短く書けば「+1または−1か、同じ符号のものかける」です。そうすれば、|2|=+1×2=2ですし、|−3|=(−1)×(−3)=3となります。文字式の場合
|y|のように文字式の場合を考えましょう。この場合、yの値に応じて場合わけが必要ですが、さっきのルールはそのまま使えます。つまり、yが正なら+1を掛けるので、|y|=+1×y=yとなります。yが負なら−1を掛けるので、|y|=(−1)×y=−yとなります。正の数の場合、「そのまま記号をはずす」に比べ、わざわざ「+1を掛ける」のは面倒だと感じられるかもしれませんが、そのおかげで「+1か−1を掛ける」と、全体としては短いルールにまとめられます。
そもそも「マイナスをとる」というのは数学的な演算ではなく、しかも、文字式の場合にはとれるマイナスがついていないので、汎用的でもありません。一方で「+1か-1を掛ける」というのは四則演算ですし、文字式にも安心して使えます。
関連のエントリ
情報って何?(4):カッコはいつ取るの?(リンク)
役立つかどうかではなく、役立てられるかどうかだ!(リンク)
Mac標準の「写真」アプリからの移行に向けて
追記(2019-09-21)
はじめに
「写真」アプリ
移行の背景
移行のやり方
[ファイル]→[書き出す]→[1枚の写真を書き出す]
「タイトル、キーワード、および説明」
「位置情報」
新しい写真管理ソフト
muやmu4eのインストールと日本語による検索
(2019/5/10 追記) FLAG_CJK_NGRAMとXAPIAN_CJK_NGRAMの関係が分かりにくかったので、該当部分に文章を足しました。FLAG_CJK_NGRAMではなく、XAPIAN_CJK_NGRAMに適当な値(1など)をセットしてください。
はじめに
5年ほど前にmu4eに移行しました(mu4e: 検索ベースのメールソフトへの移行)が、2018/2/8にmu-1.0がリリースされ、つい最近mu-1.2がリリースされました。多少インストールの方法が変わったのと、Xapianの索引語についてようやく理解できたので、ここにまとめておきます。
まずmu4eは、muというコマンドライン上のツールに対するEmacsのインターフェイスとなっています。コマンドラインでは、例えば
みたいな感じで検索できます。
インストール
インストールの仕方は、mu-1.2の公式のドキュメント2の2.2節にあります。 2.1節に、あらかじめ必要なライブラリ等の説明があり、Emacsを除くと、こちらではgmimeとxapianをMacPortsからインストールしています。
$ sudo port install xapian-core
その上で、tar.gzまたはzipで固めたファイルをGitHubのページからダウンロードしてきて、以下のようにしてインストールします。
$ cd mu-1.2.0
$ ./autogen.sh
$ make
$ sudo make install
上記の公式ドキュメントにはautogen.shのあとにconfigureを実行するように書いてありますが、autogen.shの中で呼び出されています。
こちらの環境はMacPortsで構築しており、MacPortsが使う/opt/local以下にインストールするため、以下のようにオプションを渡します。autogen.shに渡したオプションは、そのままconfigureに渡されます。
また、Macには標準でEmacsがインストールされています(コマンドは"/usr/bin/emacs"でバージョンは22.1)が、バージョンが古いためMacPortsからインストールしたEmacsを使っています。こちらは、ターミナルからでなく、macOSのネイティブGUIで使えます(パッケージの名前はemacs-mac-app)。autogen.shを実行する時に、MacPortsでインストールしたEmacsを使うように指定するために、実際には以下のようにします。
$ make
$ sudo make install
初めてmu(またはmu4e)を使う場合、あるいは、バージョンをあげた場合はインデキシング(この言葉は後で説明します)したデータベースの更新が必要かもしれません。その場合は、以下のようにします。
メールがあるフォルダを指定するためには、以下のようにします。
こちらの環境では、異なるファイルシステム上のメールフォルダを、ホームディレクトリにシンボリックリンクして運用しており、(少なくとも以前は)
のように、絶対パスで指定する必要がありました。
日本語での検索について
muやmu4eでは、日本語による検索がイマイチうまくいっていませんでした。解決策を探している時に、同様の問題にあっている方が複数いることが分かりました。
- 「mu4e だと日本語検索むりぽげ?むむん? notmuch はいける。」
- 「もう少し実験してみると,2文字までなら検索できるが,3文字になるとだめなようだ.」
- 「残念ながら 日本語の扱いに問題があった ため、使えませんでした。」
muやmu4eはXapianという検索ライブラリを使っています。このような検索ツールでは、一般にメールなどの文書を単語に分割し、どの単語がどの文書に出現するかという情報をデータベースに格納します。この作業をインデキシング(indexiging)といいます。英語の場合、単語は空白で区切られるので、単語単位に分割するのは簡単と思われるかもしれませんが、例えば“makes”のsを除いたり、“made”と“make”を同一視したりすることもできます。つまり、単に空白で分けるだけでない処理が、英語でも行われます。日本語の場合は、空白で分かれていないので、さらに大変です。
mu4eの公式ドキュメントのFAQ "C.1 General"の8番に「インデキシングやmuやmu4eを使う前に、環境変数XAPIAN_CJK_NGRAMに値をnon-emptyに設定しておけば、中国語、日本語、韓国語の文字をサポートできます」と書いてあります。しかし、問題にあった方のページにもあるように、こちらで試しても、2文字なら検索できますが、3文字になるとだめなようでした。
一方で、この環境変数を使わなくても、ある程度は日本語の検索に対応しています。ただ、単語の区切りをどこにしているのかが、厳密に分からなかったため、あるはずのメールが見つからなくて困ることもありました。例えば、「クラス指導教員」で検索したら数十件のメールがヒットするのに、「クラス」で検索すると数件しかヒットしないということがありました。「クラス」のほうが「クラス指導教員」の部分なんだから、より多くのメールがヒットすると期待していましたが、そうはならないようです。個々のメールを見て推測したのは「クラス指導教員」のようにカッコであったり、あるいは改行や空白などで区切られた部分を単語の区切りとしているようです(ただ、それだけではないようなのでルールが分からず困るのですが)。そのため「クラス 指導教員」と空白で分割されていれば「クラス」でもヒットしますが、そうでなければヒットしません。
単語の区切りをどこにするかはmuやmu4eの機能ではなく、Xapianの機能なので、これまでもインデキシングに関する文書を探したことはありましたが、どのように分割しているのか、なぜ2文字は検索できて3文字はダメなのかよく分かりませんでした。今回、XapianのAPIに関する公式のドキュメント中に、以下の記述を見つけました(訳は私)。
環境変数FLAG_CJK_NGRAMに値が設定されているとXAPIAN_CJK_NGRAMの値も自動的に設定されます(ただし1.4.11でdeprecatedとなっています)
さらに、ここには、環境変数FLAG_CJK_NGRAMを設定しておけば『ユニグラムとバイグラムに分割される』と明示してあります。ユニグラムは1文字、バイグラムは2文字のことです。つまり、「クラス指導教員」は「ク ラ ス 指 導 教 員」というユニグラム(1文字)と「クラ ラス ス指 指導 導教 教員」というバイグラム(2文字)に分割されることになります。上で、なぜ3文字では見つからないのかと疑問がありましたが、分割はバイグラムまでで、トライグラム(3文字)には分割しないからです。
ただし、引用部分で注意してあるように、最近のバージョンではFLAG_CJK_NGRAMの値は自動的にはXAPIAN_CJK_NGRAMには設定されないので、XAPIAN_CJK_NGRAMの値を1などにセットしましょう。実際にFLAG_CJK_NGRAM=1でインデックスを作っても、うまく検索できず、XAPIAN_CJK_NGRAM=1でインデックスを作れば、うまく検索できました。
例えば「合弁会社」が含まれるメールを探す場合は、「合弁 会社」で探すことが考えられますが、これだと「xy社を合弁化し、会社として」のように「合弁」と「会社」が別々に出現するものがヒットします。つながりを持った「合弁会社」を探したければ「合弁 弁会 会社」で探してください、ということです。トライグラムや4-gram(4文字)も用意してくれたら、こんな面倒なことをせずにすむのにと思うかもしれませんが、たぶん、データベースが大きくなることがいやなのだろうと思います。またバイグラムがあれば、任意のつながりが表現できるので、十分だろうということでしょう。
4文字の「合弁会社」を毎回「合弁 弁会 会社」と入力するのは面倒くさいので、Emacs Lispで関数を準備して、3文字以上の日本語が与えられたら、2文字ずつバイグラムに分解したものをmu4eに渡すようにすればよいでしょう。文字列を入力として、アルファベットなら、そのままmu4e-headers-search関数に渡し、文字列が日本語ならバイグラムに分割した上で、この関数に渡すようにします(といいつつ、Emacs Lispはよく分かっていないので、どなたかやってくれる人がいたら...)。
特定のソフトに起因する文字化けへの対策
丸囲み数字やはしご高など、文字化けしそうな文字であっても、charsetが適切に設定してあれば問題なく表示できます。しかし、Microsoft社のメールソフトでは、これらの文字が送信するメール内に含まれていても、条件によってはiso-2022-jpと設定して送ることがあります。これは明らかに規約に違反していると思うのですが、意外にこのソフトを使っている人が多くて困っています。多くの場合、送った側はこのような問題を指摘しても対応できるとは思えないので、なぜかこちらが対応をする必要があります。
こんな問題に時間をかけるのもばからしいので、awkでちゃちゃっと以下のようなスクリプトを書き、charset="iso-2022-jp"と設定してあるメールの該当部分を"utf-8"に書きかえるようにしました。
(tolower($0) ~ /charset="iso-2022-jp"/){
print "charset=\"utf-8\"";
}
! (tolower($0) ~ /charset="iso-2022-jp"/){
print $0;
}
これを適当な名前でPATHの通ったところに置いておきます。このコマンド自体は、メールそのものを書き換えるのではなく、単に標準出力に書き出すだけで、mu4eのメッセージ画面で"|"(mu4e-view-pipe)として、保存したコマンド名を入力すれば、化けていないメールが読めます。単にパターンマッチをしているので、メールの内容によっては(本文内に同様のパターンがあるなど)、うまくいかない場合もあるでしょう。
ウォーターパールの仕組み
はじめに
ウォーターパールの仕組み
図でいうと、次のタイミング(t=2)では、水滴は一つ下の位置に降りている(灰色の矢印)のに、あたかもオレンジの矢印の対応関係のように止まって見えます。
逆に1.1秒間に1回光をつけたら、(自然落下よりも)ゆっくり下に落ちていくように見えます。
ウォーターパールのポイント
パラパラマンガのような感じです。スイッチを押すと円盤が回るのですが、これだけだと、高速すぎて、パラパラマンガのような動きは見えません。これが、アニメのように動きが見えるポイントは、上部にあるライト(光)です。このライトは点滅することで、(ほぼ)連続的に見える対象の動きをサンプリングして、離散的にしてくれます。これによりパラパラマンガのページと同様、異なる動きがうまく取りだされ、アニメのように見えます。
様々な動画:立体型から上昇・下降の同時アニメまで
こちらの動画では、ペットボトルの後にマッサージ器をくっつけて振動を与えています。ホースの水じゃなくてもよいわけですね。また、暗くして光で観測しています。
トゥィンクルピクトはパラパラマンガに似ていると書きましたが、より直接的にパラパラマンガを立体的にしたものはゾートロープと呼ばれます。こちらに動画をつけておきます。
ターンテーブルのようなものに人形を、少しずつ動きをずらして置けば、三次元的なアニメができます。実際にそれを実現しているものがありました。
これは、さきほどのゾートロープの動画と違い、見るスリットがないため、そのままではアニメのように見えません。トゥインクルピクトでフラッシュがないような状態です。
さらに、光のタイミングをいろいろ変えれば、動きのタイミングを変えたり、さらには逆方向に動くようにも見えます。