音声」タグアーカイブ

枯れる分野と研究生活

私がまだ小学生や中学生だった頃,未来は非常に明るいもののように感じられた.その頃は自分がおとなになったときに,どんなことをしてるかは漠然としていたけれど,それでも将来の自分に対する夢と希望であふれていたように思う.ところが大学に入り周りの状況を知るに連れて,世の中がそれほど甘いものではないことを徐々に理解していった.

枯れる分野と研究室選択

一応忠告だが,これからする話はあくまで工学部の情報系に限ったことである.他の分野でどうであるかは,その分野によりすぎるところがあるので,参考程度に留めるように.

研究分野には,当然人気がある分野とない分野がある.今の流れで言えば,人気がある分野は,例えば画像や音声などのマルチメディア系であり,人気がない分野は例えばプログラミングの型システムや,デバイス系などだろうか.実はこういった画像系や音声系などの人気のある分野は,重箱の隅をつつくような地味な研究テーマを扱っていることが多い.今でこそディープラーニングで賑わっているものの,それより少し前はやることに意味があまり見いだせないようなことをやっていることが多々あった.これは,人気があればあるほど研究が進んでしまうために,やり尽くされてしまう傾向があるためだ.アカデミックの世界では既存研究がすでに存在することはやっても意味がないとみなされるため,分野が発展にするに連れてどうしても苦しくなる.そして苦しくなれば苦しくなるほど,重箱の隅をつつくような研究が増えていく.こういった研究は,大抵の場合,やってる側としてもつまらない事が多く,またつまらない研究はインパクトも大したものではないことがほとんどである.しかし,こういった状況はよほどの革新がない限り改善されることはないため,ジリ貧状態は悪化する一方だ.もしジリ貧状態から本当に脱却したいのであれば,異なる分野にシフトするかない.

大学の学部生の段階では,上記のような,分野によってはやることがないくらい堀尽くされていることがあることをよく知らないため,研究室選びのときに,単に面白そうという理由だけで選択することになる.面白くなさそうな分野をやるのは,苦痛にしかならないことがあるため,当然,面白そうな分野を選択するべきなのだが,だからといって本当に面白いことができるかどうかは別問題である.実のところ,入るべき研究室とは,
– 分野が枯れておらず
– 先生が人としてまともで
– それなりに興味が持てる分野
という三拍子を揃えているところをいう.そして,当たり前だが,この3つの要素を満たしている研究室というのは一握りしかない.それ以外の大多数の研究室は,致命的な問題を多く抱えているのが実情なのだ.特に,その先,研究者として生きていくことを考えているのであれば,トップカンファレンスや高インパクトファクターのジャーナルに論文を通していることも重要となってくる.しかし,今の時代,流行に乗った分野かつ,まともな指導教官などそうそういるはずもなく,理想とは一転して暗い研究室生活を経験するのは理系大学ではありふれたことである.

完璧とは絶望だヨ。

サブタイのセリフを知っている人は多いだろう.これはBLEACHの涅マユリの有名なセリフの一つだ.BLEACHの作者である久保帯人が科学についての知識があるとは思えないが,この「完璧とは絶望だヨ。」は科学のある側面を絶妙に捉えている.分野にもよるだろうが,特に工学は人にとっての利便性が最も重要視されるため,研究が進むに連れ,ほとんど完璧とでも言える状態になってしまう事がある.そうなると,研究する意味がほぼ皆無になってしまい,その分野で食っていくのが絶望的な状態になってしまう.例えば,通信路における符号理論,ネットワークセキュリティ,回路設計における論理回路や回路アーキテクチャの研究は大部分がやり尽くされた感があるように思う.加えて,世の中がこれほど便利になったのは,様々な分野が彫り尽くされたことの裏返しなのだから,上に上げた以外にも多くの分野がやり尽くされてしまっているのではなかろうか.

実は物理学の分野でも,このように言われた負の時代があったようだ.大昔,ギブスという有名な物理学者がちょうど学生だった頃,物理学では,まだ量子力学と相対性理論が知られておらず,すべての事象はニュートン力学で書き表されると考えられていた.ニュートン力学では,初期状態として位置と運動量(速度)が与えられれば,あらゆる物体の挙動が一意に定まるという性質がある.そのため,当時はラプラスの悪魔という,世界は実は生まれた直後から将来どうなるのかが全て決まっているという考えに支配されていた.そのため,物理学をそれ以上,研究することに意味があるとは考えられておらず,当時成績優秀であったギブズが物理を専攻した際には,周りに物理学なんてやめたほうがいいと促されたという話が残っている.しかし,その後すぐに相対性理論と量子力学が主にアインシュタインやボーアによって切り開かれることで,そんな負の時代から一転,黄金時代に移り変わったのだから皮肉なものである.

企業で働くという考え

すでに述べたとおり,面白そうなことほど研究が進むため,現状残っている研究課題が面白い内容である保証はまったくない.特にお金になる分野は,企業が一気に投資して研究を進めるため,大学の研究者はジリ貧になりやすい傾向がある.

数学の分野では世の中の問題がすべて解かれることはないことを次のように説明する.すなわち,今の世界に残された問題の数は明らかに加算無限個存在するが,人間がいくら頑張っても永遠にとき続けることは不可能であり,したがって,世の中のすべての問題がとき終わることはない.これは確かに数学では真だろうが,他の分野ではおそらくそうではない.どうしても先行研究があると論文にならないという性質上,ジリ貧になってしまうものである.

面白いことがしたいのであれば,あえて研究者になるという道を選ぶ必要はない.もっと手っ取り早く面白いことをする方法として,企業で働くという選択肢もある.大企業に行ってしまったら,面白いことをするという目的はほとんど叶えられそうにないが,ベンチャーや起業などを行えば,比較的望み通りの結末が得られるのではないかと思う.

内容についてどう思いますか?
  • いいね (5)
  • だめ (0)

やりたいこと

やりたいと思っていることがいくつかある.箇条書きにすると

  • FPGAのCPU実装をもっと頑張る(具体的にはUnix系OSを動かす)
  • Rustをやる(できれば研究とかバイトのコードも徐々に移行したい)
  • 日本語力を上げる
  • もっといろんなことを勉強する(暗号,音声,機械学習,etc)

のような感じ.別に最後のやつは普段のタスクの中に自然と組み込まれている感じなのであまり意識する必要はないだろうけど,上から2つは個人的に時間を作ってやらないとできるとは思えない.3つ目は文章が下手くそなのでうまくなりたいなということ(願望).

FPGAのやつはできればCPUの実装のコード(verilog)をきれいにしたというのもある.研修Aという研究室の自由課題でやったものだから,締切に合わせて結構その場しのぎでやってしまった感があって,それをどうにかしないと次に進む上で障害になりそう.かと言ってあれってそんな簡単に直せるとは思えない… 抜本的に書き直す羽目になりそう.そもそもverilogってアセンブリに近いものがあって全然きれいに書けてる自信がわかないんだけどどうすりゃいいんだろう.高位合成とかと違って結構低レイヤだから記述量が多くなりがちなのが影響して,とてもじゃないけど見やすくならない.あれも結局経験値で決まってくるやつなんだろうな.

Rustについて言えば,とにかく実践で使っていくしかないだろうなって思ってる.入門書とか初心者向けの記事とかをただ追って読んでるだけだと全然頭に入ってこないたちなので,実際に使って鍛えていくしかない.自分もそんなに詳しいわけじゃないんであれだけど,c言語とかc++みたいなシステム周りとか結構低いレイヤのプログラミング言語って,D言語とか他にもあるんだろうけど結局のところc言語 or C++がデファクトスタンダードって感じがあるように思う(マイコンとかの開発環境でC++/C以外の言語を使う場面ってなくはないけど少ない気がする).LLだとか関数型言語とかだと選択肢がありすぎるくらいにはあるのに,低レイヤ向けの,アセンブリより抽象度が一つ上なメジャーな高級言語ってのが,もう何十年も前に発明されたCとかC++のまま変わってないってのは,あまりに時代遅れな感じがする.と言いながらもう10年近くCだとかC++を書いてきた人間がこんなことを言うのは説得力にかけるのかもしれないけど,流石に限界というかこのあたりにもイノベーションがあってもいいよねってのは薄々思っていたところ.確かにC++は最近になってC++14とかC++17とか新しくなってきてるけど,もともと難解だったC++に更に付け足しつけたしで色々くっつけたもんだから複雑怪奇になって来てて,「C++を理解してます」ってのがジョークになるという笑うにも笑えない状態になってる.

だから流石にそろそろ新しくそういうシステム周りもかける言語を習得したいなと思ってたわけだけど,ちょうどMozillaがRustを開発してるという話を知って,これは良さそうと感じた.最近はライブラリも結構充実してきてて特に問題もなさそう.他に最近話題のコンパイルするような静的型付け言語としてはGoとかもあるけど,あれはポインタを叩くような処理をするというよりは,コンパイルできるLLみたいなイメージが有る.Google的には速度が出るLLが作りたかったってことなんかなという印象(素人目線).個人的にはやっぱりLLとシステム記述向けの言語って住み分けができてると思ってて,前者が簡単にかける代わりに詳細な記述をしたり速度を出したりすることが難しいもので,後者がその反対という感じ.よくGoとRustを対比させる記事を見るけど,それはこの2つがちょうどLLとシステム記述向け言語の間くらいに位置する言語だからということなんだろうな.ただGoはどちらかと言えばLL寄りで,Rustがシステム記述向けよりなんだろうと思うし,だからこの2つは用途が衝突するところもあるけど,全くかぶらないところもあるんだと思ってる.

確かにLLって半端じゃないくらいに遅いから早くしたいと思う人が多いのは当然だよね.pythonくらいしか経験がないけど,それでもC++なら一瞬で終わる処理が半端じゃないくらいに時間かかったりするのを見て,何とも言えない感じなることはある.プログラミング界隈で有名な話?に80:20則ってのがあって,プログラム全体の20%が実行時間の80%を占めてるって経験則なんだけれど,LLの哲学的には,重い20%のコードをCとかにまかせて,速度がでなくても大丈夫な80%ところをLLでどうにかするって話だったんだと思う.確かにそれは合理的に見えるし,全部を無駄に書くのが大変な言語で修行のごとく記述していくのは意味がないってのは大いに賛同するところなんだけど,現実はやっぱりなかなか厳しいものがあって,そう簡単じゃない.実際に使ってみると,LLがおそくてその80%が馬鹿みたいに大きくなったりして,僕の書き方が悪いってのはあるんだろうけど,なんだかなーって結果になることも往々にしてある.そんなこんなあって,みんな早いLLを求めてたんだろうから,Goみたいな言語が出て来たんだろうなという予想.本当のところどういうことなのかはGoを勉強しないとわからないけど,今のところGoが重要そうなWeb界隈の方には全く関わりがないので,実用的な観点でやることはなさそう.

とまあ前置きが長くなったけどRustを勉強したいなと思ってる.関数型言語の流れを受けて色々と拡張があるみたいだし,加えてC++とかと比べて安全だと言われればやらない理由も特にない.速度も結構早いみたいだしね.

ということで今年度も頑張っていきたいと思います.

内容についてどう思いますか?
  • いいね (2)
  • だめ (1)

BoWで音を鳴らす

Windowsの次の大型アップデートはCreators Updateというらしい.このCreators Updateでは様々な変更がなされているらしいが,今回注目したいのはBash on Windows(BoW)である.今までは日本語が不自然に切れてしまったり,ちょっとしたことで落ちてしまったりと微妙な感じだったが,今回のアップデートでは随分完成度が高くなるとのことである.

この新しいBoWがどの程度の完成度なのか非常に気になったので,試しに最新のビルド(番号は忘れた)をインストールして試してみることにした.インストールした直後はなぜかWindowsが不審な動きをして,非常に焦ったが時間が立つと勝手に治っていつもどおりの状態になった(よくわからない).次にBoWを起動して使ってみると,確かに今までと比べて色んな所が改善されており,これならある程度常用に耐えられるかもしれないと感じるまでになっていた.しかし,残念ながら音を流すことができない.私としては音声ファイルを再生して確認したい場面が多いため,これは非常に困る(音声関係もやっているので).そこでどうにか音を流す方法を調べたところ発見できたので備忘録として残しておこうと思う.

まずlinuxで音を流すといえばpulse audioを使うのが標準的だろう.ただしBoWはホストのオーディオデバイスを叩くことができない.そこでネットワーク経由でデータをホスト側に転送する方法が考えられる.具体的にはWindows用のpulse audioサーバを用意し,そこにBoW側のpulse audioを接続する形だ.この方法であればネットワークつながっていさえすれば音を流せるはずである.ここではその設定の詳細は次のサイトを参考にした.

http://nishio.hateblo.jp/entry/20111215/1323962652

さてこれに合わせて設定を行ったわけだが,残念ながらうまくいかない.

どうやら内部のpulseaudio側でクラッシュしているようだ.これをどうにか解決したいところである.そこでgoogleで調べると次のURIを発見した.

https://github.com/Microsoft/BashOnWindows/issues/486

これに従えばpulseaudioのソースコードを修正することで起動させることができるらしい.そこでまずはpulseaudioのソースコードをgitを使って手に入れる.

つぎにsrc/pulsecore/mutex_posix.hを編集し,23行目あたりを次のように編集する.

これで./autogen.shと言いたいところだが,実行したところ私の環境ではエラーが出てしまった.どうやらlibtoolのバージョンに伴うエラーのようだが,そもそも必要なバージョンより新しいものが入っているのでこれはおかしい.そこでこの部分をコメントアウトした(もっといい解決方法がある気がする…).具体的にはconfigureの10206行目にある

の部分である.コメントアウトできたら./autogen.shをする.もしエラーが出たら,基本的にパッケージ絡みのエラーだと思われるので必要なパッケージをインストールしまくる.必要なパッケージはエラーメッセージで検索すればわかるだろう../autogen.shが成功したら,次に下記のコマンドを打ち込む.

これでインストールは終了である.

さてここまでやって先程と同様にvlcを起動してもうまくいかない.なぜならvlc側でロードされる動的ライブラリはあくまで標準ライブラリのpulse audioのものであって,今回用意したものではないからだ.そこで次の環境変数を設定することで動的ライブラリをすり替える.

これをした後にvlcを利用するとうまくいくことが確認できる.めでたしめでたし.

 

内容についてどう思いますか?
  • いいね (0)
  • だめ (0)