背筋を伸ばして、まいにち笑顔

ブログには何度も挫折してきた。今度こそ、とりあえず体裁なんて忘れて、消しカスみたいなことでもアウトプットしていきたい。

Unityで日本語の音声認識する

久々の投稿。OSとかいう低レイヤーとは打って変わって、Unityの音声認識について書きます。とは言っても、Unityも音声認識も全くの初心者なので、ググった内容をまとめるだけです。

直接的な方法はない

Unity内で直接マイクを拾って日本語に文字起こしする方法は、調べた限り分かりませんでした。何らかの方法で、外部の音声認識エンジンと連携します。Unityからそこそこ手軽に使えそうな音声認識エンジンには、以下のようなものがあるようです。先に参考リンクまとめ。

Juliusで音声認識

この方法はUnityからJuliusサーバーを起動し、Unity(Juliusクライアント)とTCP/IPで通信して文字起こしできます。

の環境で、上記参考URL通りにセットアップしたら、サンプルシーンは特に問題なく動きました。最初は認識結果が文字化けしまくって頭を悩まされたのですが、Yahoo知恵袋で同様の問題と回答が見つかりました。 使ってみたところ認識精度はそんなに良いとは言えませんが、サンプルのようにあらかじめ用意された有限数のコマンドを実行するならば不便は無さそうです。UnityPackageになっていてさくっと導入できるのも良いところです。

その他は試してない

その他の方法は試していませんが、Perceptual SDKVisual Studioが必要そうだったこと、Web Speech APIChromeとWebScoketサーバー(Node.js)が必要そうだったことがあり、どちらも不可能では無さそうながら面倒だったため試していません。本当は認識の精度とか特徴とかを比較できればよかったんですが。

もし比較された方が居たらぜひご一報ください。

OS自作入門4日目

f:id:tkntkn:20150224053451p:plain

久々

ブログを始めた初日以降12日間更新を怠っていたわけですが、1日坊主を克服すべくようやく更新です。久しぶりに背筋を伸ばすことと笑顔を作ることを意識しました。

以前に「30日でできる!OS自作入門」に挑戦していると書きましたが、ブログ同様こちらの方も、最近少し忙しくて手を付けられなくて、本の内容で言うとやっと4日目に突入です。このペースだと90日ぐらいかかる見込みですが、これからもっと忙しくなるので、多分終了までにあと120日ぐらいです。とりあえず何日かかっても挫折しないように頑張ります。

矩形表示

4日目の結果は貼りつけた画像の通りです。まあ本の内容を丸々コピペして走らせたら得られる結果なのですが、そうはいっても、GUIなんてHTMLとCSSでしか触ったたことなかった人間としては、ディスプレイに直接描画させられるようになるのが面白いです。

インターフェイスを叩く

今回ふと思ったことを垂れ流しておきます。うまくまとめられていないなくて、何を言っているのか分からないと思いますが。不勉強だから間違ってるかもしれない。

プログラミングで言うと、初めて触れたのはHTMLで、これまでそこからJavaScriptC言語Rubyとかじる程度に裾野を広げてきたわけですが。HTMLとかJavaScriptを書いているときには、ブラウザのAPIを叩いているだけだという感覚が拭えませんでした。なんというか、「本物」のプログラムを走らせているのだ、本当に画面に表示させているのだ、というよりは、一皮挟まっていて、CPUの歓声が聞こえてこないというか。

それが、C言語とかRubyとかを触るようになって、少し本当にコンピュータを回している感覚に近づいた気がしました。しかしいろいろ触っているうちに、結局それもほとんど言語やOSの用意したAPIを叩いているだけで、結局「本物」には触れていないのだという感覚がありました。そして、それはOSというのは、その「本物」を自在に使いこなすプログラムなのだろう、と思っていました。

そうしたあこがれもあり手を出した本書で、今回初めて画面に矩形表示をしたわけですが。そうして思ったのは、この画面表示のプログラムだって、ちょっとした自前の計算はしているものの、結局は、BIOSとかVGAdiplayへの命令を、VARMに関する規定とかいったお約束に従って、叩いているだけなんだ、という感覚です。プログラミング言語からライブラリの用意された関数を呼び出すよりは、メモリに直接書き込んだりして非常に生々しくはあるのですが。

べつにがっかりとか、そういう訳ではないけれど、きりがないんだな、という気持ちにはなりました。あれだけ本物があると思っていたOSにも、なんで画面に表示されるのか本質は分からなくて、なんでメモリが書き換わるのか本質は分からなくて。そうやって、階層化して一層ずつ綺麗に隠ぺいしているからこそ今があるわけですが、たどり始めたら、CPUとかディスプレイとか、あるいはさらにもっと電気的な部分にまで踏み込んで行って、先が長いというか、きりがないというか。

まあそうは思うものの、そういうこと自体に気づけること、OSによって今まで隠されていた色々な部分のインターフェイスが見えてくることはとても面白いです。果てしない階層化の中でもかなり大きなウェイトを締めるものではありますよね。実用面でも、流石にCPUの電気的特性が分かったところでWebサービスには活かせないけれど、OSが分かれ何かしら役立ちそうだし。

ということで、先は長いですが頑張って読み切りたいと思います。

PowerShellでsudoみたいなことをやる

sudoしたい

PowerShellから管理者権限が必要そうなことをやると、権限がありませんと怒られる。 Linux系ではすかさずsudo (command)と叩く所だけれど、Windowsにはsudoがない。いちいちPowerShellを右クリックして管理者権限で実行しなければいけない。かといっていつも管理者権限でコマンド叩くのは怖い。

参考になりそうな情報

Windows で sudo なことをする。 | みむらの手記手帳

こちらはワンライナーsudoをする方法を紹介している。要するに、そのままプロンプト上で打ち込めばsudoの代替になるコマンドだ。しかしワンライナーと言えどpowershell -command "Start-Process -Verb runas (command)"と長いので、どこかにシェルスクリプトとして置いて$env:pathを通すという方法を紹介している。

PowerShell Code Repository - elevate-process (sudo)

こちらはそもそもワンライナーで書くことを諦めて、elevate-processという関数(?)として実装している。そしてその関数をsudoで呼び出せるようにエイリアスを設定する。

function elevate-process
{
        $file, [string]$arguments = $args;
        $psi = new-object System.Diagnostics.ProcessStartInfo $file;
        $psi.Arguments = $arguments;
        $psi.Verb = "runas";
        $psi.WorkingDirectory = get-location;
        [System.Diagnostics.Process]::Start($psi);
}
 
set-alias sudo elevate-process;

これらをすべて$profileに書き込んでおけばよいという訳だ。

まとめ

どちらも大変参考になります。ありがとうございます。

取りあえずシェルスクリプト用にわざわざ$env:pathを通すのは何だか億劫だということで、後者を採用した。ただ僕がまだPowerShellを知らないだけで、きっと前者もsudoのaliasとして$profileにうまく取り込めるのだろう。ちょっとそこまで勉強する気力は無かった。あとよく考えたらどうせ自作スクリプト置き場を作って最終的に$env:path通すことになりそうだから、最初っからやっとけばいいやと思ったけど、まあいいや。

とりあえず気軽に管理者権限で走らせることができるようになって有難いのだけれど、使っていてどうもLinuxのそれと少し話が違うことが分かった。要するに、管理者権限で実行したプロセスは、元のシェル上じゃなくて新しいシェルの上で走る。sudo choco install vimとかやると、新しいパワーシェルのウィンドウが立ち上がってしまうのだ。

このあたりはもはや、(全然よく知らないのだけれど)そもそも管理者権限周りのWindowsの仕様なのではと思って、今は諦めている(UACに関するきちんとした理解が必要である)。このあたり詳しい情報があったら、ぜひご教授願います。

chocolateyの導入とvimのインストールで苦しむ

経緯

Windowsの黒い画面を最近ようやく触り始めたのですが、いちいちファイル編集にエディタが立ち上がるのがもっさりしていてvimを入れたいと思い、調べていたらChocolateyというものを見つけました。

環境

Chocolatey

Windowsパッケージ管理ソフトです。 Macのhomebrew、 Linuxyum/apt-get(/rpm?実はよく分かっていない...)みたいなものですね。 冒頭のVimはもちろん、Git、VirtualBoxFireFox等、 さまざなアプリケーションがCUIで管理できるようになります(らしい)。

公式サイトの指示に従えばPowerShellに1行入れるだけでインストールできます。

僕の周りでは、最近は優秀な人たちはだいたいみんな林檎を使っていて、 僕含め彼らから教育を受けたWinユーザは、 Windowsにはhomebrewが無いからねMacを勧められつつ、 泣く泣く諸々全部GUIインストーラから導入しているイメージです。

そんな人たちに是非使ってほしいですね。

GetOne

ググっていてさらっと斜め読んだ情報だったので出典を忘れましたが、 Windows10からはGetOneという、 Microsoft謹製のパッケージ管理ソフトが導入されるようです。

Chocolateyを知るのがちょっと遅かった感。

(余談)PowerShell

Windowsの黒い画面に触る前にUbuntuを触り始めてしまったので、 これまでほとんどコマンドプロンプトとご縁が無かったものの、 やはりWindowsでもシェルスクリプト組みたいと思うことがちょいちょいあって、 つい最近PowerShellを触り始めました。

Vimのインストールに苦しむ

結論から言うと、Soureforgeの障害のせいでした。

管理者モードからPSを立ち上げchoco install vimと入力すると、

vim v7.4.560
Installing vim...
Write-Error : vim did not finish successfully. Boo to the chocolatey gods!
-----------------------
[ERROR] Exception calling "Start" with "1" argument(s): "ファイルまたはディレクトリが壊れているため、読み取ることができ
ません。"
-----------------------
At C:\ProgramData\chocolatey\chocolateyinstall\helpers\functions\Write-ChocolateyFailure.ps1:30 char:3
+   Write-Error $errorMessage
+   ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Error
(以下エラーが続く)

と怒られました。出力からはどのファイルが壊れているのかも分からないし、 PowerShellもChocolateyも初めてで嫌な感じしかしない(^^;

とにかくまず日本語のエラーは検索しずらいので対応する英語を探します。 なんかよく分からないけどエラーの対訳サイト情報が見つかりました。

http://homepage3.nifty.com/aokura/tips/winerror.csv

1392,"ファイルまたはディレクトリが壊れているため、読み取ることができません。","The file or directory is corrupted and unreadable."

これをもとに色んな情報を漁りますがいまいちピント来るものがありません。 ただ何か所かで詳しそうな人がchocolatelyに-debugオプションを付けて と言っているのを見かけたので自分で試してみます。choco install vim -debug

(前略)
デバッグ: Running 'Start-ChocolateyProcessAsAdmin' with
exeToRun:'C:\Users\(ユーザ名)\AppData\Local\Temp\chocolatey\vim\vimInstall.exe', statements: '/S '
デバッグ: Elevating Permissions and running C:\Users\(ユーザ名)\AppData\Local\Temp\chocolatey\vim\vimInstall.exe /S . This
may take awhile, depending on the statements.
Write-Error : vim did not finish successfully. Boo to the chocolatey gods!
(以下さっきのエラー続く)

どうやらvimInstall.exeにアクセスしたところでエラーが起きている模様。 エクスプローラで開いて確認するとファイルサイズ1KB。これは怪しい。

ただ問題がどこにあるのか分からない。Chocolateyの問題なのではとタカをくくっていろいろ調べていても分からない。デバッグ出力を読んでみても分からない。っていうかデバッグ: Checking that 'C:\Users\(ユーザ名)\AppData\Local\Temp\chocolatey\vim\vimInstall.exe' is the size we expect it to be.とか言ってるし。もしかして問題ないんじゃないの。

かなり悩んだ挙句、最終的に言ったいこのexeファイルのバイナリはどうなっているんだということで、SublimeTextにドラッグ&ドロップすると…。

<html><head>
<title>Testing</title>
<!-- <script src="/js/jquery.com/jquery-1.11.0.min.js"></script> -->
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//sourceforge.net/js/mirrors.js"></script>
<script src="/js/sf.js"></script>
<script>
var DR_loc = DR_parse_hash_url();
if (DR_loc) {
    DR_sf_main(DR_loc);
} else {
    window.location.href = 'http://sourceforge.net/home.html';
}
</script>
</head><body>
<noscript>
We're sorry -- the Sourceforge site is currently in Disaster Recovery mode, and currently requires
the use of javascript to function.  Please check back later.
</noscript>
</body></html>

バイナリではなくHTMLが出てきました。なんと原因はSourceforgeのサーバ障害(?)にあったようです。Twittersourceforge disaster recoveryとかで検索しても直近数時間に何件かヒットしたのでここ最近の問題の模様。

( ̄▽ ̄)

初めてのChocolateyで一番最初に入れようとしたVimでエラーが起きたとなったらそりゃChoolateyの方を疑うでしょう!いきなりサーバ障害のエラーにぶつかるとは何とも不運なこった、と思いながら今に至ります。ちゃんちゃん。

virtual boxでhello worldした

f:id:tkntkn:20150211000319p:plain

OS自作入門をやってます

30日でできるっていう謳い文句のすっごい分厚い本(Amazon.co.jp: 30日でできる! OS自作入門: 川合 秀実: 本)。30日じゃ絶対無理でしょ、と思いつつ、手を付けてみた記録です。

環境

hello world

ふるかった

2006年に出版された本とかで、フロッピーディスクを用意してくださいとか書いてあるんですよね。

そのフロッピー使って、 バイナリimgファイル作成→フロッピーに焼く→起動時にBIOSかなんかがフロッピー読む みたいな流れですたぶん(よく分かってない)。

ただ、今どきフロッピーなんて無いと。

仮想化の進む現代

一応PC再起動とかだるい人向けに、QEMUだか何だか仮想化ソフトが付属しているんですが、 ただでさえ仮想なのに、良く知らない仮想マシンで動いたところで、あんまり嬉しくないじゃないですか。

で、VirtualBoxで何かできないかなー。と思っていじいじしてたら、 設定に仮想フロッピードライバあるじゃんと気づきました。 そこにimgファイルそのまま指定したら見事hello worldできたという訳です(画像参照)。

バイナリとかCPUとか全然分かっていないのですが、 なんだかよー分からんけど動いた!という初学者のウキウキを思い出せたので、 とりあえず目出度し目出度しということで。

VM立ち上げるのもだるい

ついでに、VirtualBox立ち上げるのもだるいので、PowerShellから1コマンドで走るようにしておきました。 PowerShellも初めて触ったんですが何だか良い感じですね。