新しく使えるようになったUbuntuのコマンドラインをWindows10上で使う

新しく使えるようになったUbuntuコマンドラインをWindows10上で使う

7/10に「Ubuntu」が“Microsoftストア”でリリースされたそうです。ということでインストールしてみました。

f:id:ueponx:20170713175043p:plain

それだけのエントリーです。Bash on Ubuntu on Windowsとの違いってなんなんですかね?

事前の手順

まず、事前にWindows10 Insider Preview Buildに変更する必要があります。(16215以降でないとだめっぽいそうです。)

つべこべ言わずにInsiderPreviewにすればいいと思います。

f:id:ueponx:20170713181738p:plain

それもまた人生。 f:id:ueponx:20170713174028j:plain

また、UbuntuWindows 10にインストールする場合は、コントロールパネルから【プログラムと機能】を開き、【Windowsの機能の有効化または無効化】を選択、【Windows Subsystem for Linux】にチェックを入れ、一度OSの再起動が必要です。

f:id:ueponx:20170713174009j:plain

ウインドウ左側【Windowsの機能の有効化または無効化】を選択、

f:id:ueponx:20170713173959j:plain

リストから【Windows Subsystem for Linux】にチェックを入れ【OK】ボタンを押すと再起動を促されます。

ストアからインストー

あとはストアからダウンロードします。自分はインストール済みだったので表示が【起動】になっていますが、未インストールであれば【インストール】ボタンが表示されます。

f:id:ueponx:20170713175043p:plain

【インストール】ボタンをクリックするとダイアログが途中で表示されますが、気にする必要はありません。

f:id:ueponx:20170713173825j:plain

終わりにはユーザネームとパスワードが尋ねられます。これでインストール作業は完了です。

f:id:ueponx:20170713201147j:plain

root権限を使う場合にはsudoを使ってねって感じでインストールは完了します。スタートメニューやツールバーに登録もできるのでそこから起動するのが便利ですかね。

f:id:ueponx:20170713201208j:plain

終わりに

とりあえずインストールが完了しました。ssh、gitもデフォルトで使用可能でpython(Version3.5)も一応使えました。gccなんかはないですが、aptが使えるのでそれでインストールすればいいんでしょうか。

ip -aを実行するとインターフェースが多すぎて泣きたくなりました。

後は、ローカルマシンとのディレクトリ構造の対応が分かればまあいいのかなと思ったんですが、できるんでしょうかね。そのうち調べてみたいと思います。(ストアアプリ側にファイルシステムがあるみたいです)

Raspberry PiをFirewall/NAT越しにSSH・RDPをする【ngrok】

Raspberry PiをFirewall/NAT越しにSSH・RDPをする【ngrok】

前回のエントリーに引き続きngrokに関連した話題になります。

uepon.hatenadiary.com

前回の話題でhttphttpsに関しては無事にngrokを経由して公開をおこなうことができました(httpsに関しては言及してませんでしたが、URLは同時に発行されますのでそのまま使用できます。あと、httpなサーバーブログラムでも、ngrok側で対応してくれるようです。)

後はその他のサービスはどうなるかになります。ngrokはレジストしていないとhttp関連しか対応することができないのですが、サービスにユーザ登録を行うと別のサービスなどにも対応することができるというメリットがあります。

ユーザ登録

メインページに行って画面上部の【Login】をクリックします。

f:id:ueponx:20170709115536p:plain

画面が切り替わります。

f:id:ueponx:20170709115551p:plain

メールアドレスやパスワードを使っても新規登録を行うことはできるのですが、Githubアカウントやgoogleアカウントでもログインが可能です。今回はGithubアカウントを使用してみます。画面内の【Login with Github】のボタンをクリックします。

すると、画面が切り替わりログインが完了し(登録状態になります。)、【Get Started】という画面の表示になり自分のサービストークンなどが表示される画面になります。

f:id:ueponx:20170709115602p:plain

この【Get Started】の画面の手順通りに進めます。発行されたトークンを引数に以下のコマンドを実行します。実行すると~/.ngrok2/ngrok.yamlトークン情報が保存されます。CLIで実行する度に指定することもできるのですが面倒なのでこの方法のほうがおすすめです。

$ ./ngrok authtoken 【発行されたAuthkey】
Authtoken saved to configuration file: /home/pi/.ngrok2/ngrok.yml

以降はトークンの指定は自動的に行われます。 後は該当するポートなどを指定してngrokを起動します。

SSH接続を行う

例えば、SSHであればport番号は22でtcp接続になりますので

$ ./ngrok tcp 22

となります。実行するとこんな風な画面になります。

f:id:ueponx:20170709121718j:plain

あとは画面に記載されたForwardingの値を使用して接続をします。 teratermの場合にはログインダイアログで

f:id:ueponx:20170709115717j:plain

【host】と【port番号】を変更します。これで接続はOKです。

RDP接続を行う

RDPであればポート番号は3386になりますので以下のようにします。ネットを検索していたところ、デフォルトではサービスリージョンがus(アメリカ)になってしまうのですが、コマンドラインでサービスリージョンを変更できるようです。(-regionオプションがそれになります)。今回は流れるデータが大きくなるのでap(アジアパシフィック)にしました。

$ ./ngrok tcp -region=ap 3389

となります。

【参考】

qiita.com

情報ありがとうございます。

実行すると以下のような画面になります。RegionもAsia Pacificに変更されているのがわかります。

f:id:ueponx:20170709121734j:plain

これで準備完了です。接続はWindowsリモートデスクトップ接続で行います。xrdpなどはインストールされている前提となります。Forwardingの値を【コンピュータ】のパラメータに設定して【接続】をクリックします。

f:id:ueponx:20170709115744j:plain

vncのログインダイアログが表示されるのでいつも通りログインすれば…

f:id:ueponx:20170709115757j:plain

Xが起動します。まあ、実用できるかというとやっぱり反応はそれほど良くないので、保険のような感じなるのかもしれませんが。

f:id:ueponx:20170709115813j:plain

ちなみにngrokでも接続ステータスもみることができるので色々良さそうです。

f:id:ueponx:20170709115608p:plain

終わりに

ngrokを使用することでローカルの環境を比較的自由にネットワークサービスを公開できるようになりました。あくまでも、デバッグハッカソンなどでの短時間の使用になるかと思います。ご使用にはごくれぐれもご注意ください。

Raspberry PiをFirewall/NAT越しにWebアプリケーションを公開する【ngrok】

Raspberry PiをFirewall/NAT越しにWebアプリケーションを公開する【ngrok】

RaspberryPiなどでWebアプリケーションを使用しているとルータなどの環境ではネットワークのポート開放などをしないとWebアプリケーションの公開ができないというのがちょっと残念なことが多くあります。

以前もSlackのWebhookを使用したbotの作成時にはルータのポート開放をやるのが非常に手間だったという印象です。

先日行った勉強会でngrokというものを教えていただき、この悩みが解決しましたのでメモとしておいておきます。

ngrok.com

Secure tunnels to localhost

簡単にいうとプログラムを起動すると、ngrok.com側に登録し、更にローカルホスト側にサービス経由でトンネルを開けてくれるサービスになります。

インストールの準備

インストールは簡単でバイナリをダウンロードするだけです。RaspberryPiの場合にはLinux ARMをダウンロードすることになります。

上記のリンクにバイナリのダウンロードリンクがあります。

ページにアクセスして

f:id:ueponx:20170708160038p:plain

下にスクロールすると出てきます。

f:id:ueponx:20170708152221p:plain

ダウンロードが終わったら、unzipして展開します。基本的にはこれだけで終了です。Pathの通ったところにコピーするなどすれば便利かと思います。

$ ls
ngrok-stable-linux-arm.zip
$ unzip ngrok-stable-linux-arm.zip
Archive:  ngrok-stable-linux-arm.zip
  inflating: ngrok

起動するかを実験してみます。

$ ./ngrok help
NAME:
   ngrok - tunnel local ports to public URLs and inspect traffic

DESCRIPTION:
    ngrok exposes local networked services behinds NATs and firewalls to the
    public internet over a secure tunnel. Share local websites, build/test
    webhook consumers and self-host personal services.
    Detailed help for each command is available with 'ngrok help <command>'.
    Open http://localhost:4040 for ngrok's web interface to inspect traffic.

EXAMPLES:
    ngrok http 80                    # secure public URL for port 80 web server
    ngrok http -subdomain=baz 8080   # port 8080 available at baz.ngrok.io
    ngrok http foo.dev:80            # tunnel to host:port instead of localhost
    ngrok tcp 22                     # tunnel arbitrary TCP traffic to port 22
    ngrok tls -hostname=foo.com 443  # TLS traffic for foo.com to port 443
    ngrok start foo bar baz          # start tunnels from the configuration file

VERSION:
   2.2.6

AUTHOR:
  inconshreveable - <alan@ngrok.com>

COMMANDS:
   authtoken    save authtoken to configuration file
   credits      prints author and licensing information
   http         start an HTTP tunnel
   start        start tunnels by name from the configuration file
   tcp          start a TCP tunnel
   tls          start a TLS tunnel
   update       update ngrok to the latest version
   version      print the version string
   help         Shows a list of commands or help for one command

実験してみる

基本的には

ngrok 【プロトコル】 【portナンバー】

と実行すれば大丈夫です。 例えば、httpをポート80で公開するのであれば

$ ngrok http 80

となります。実行してみます。

今回は次の様に実行してみます。

$ ngrok http 8080

f:id:ueponx:20170708153553j:plain

実行するとこのような画面になります。赤く四角のある部分にはランダムな文字列がngrok側から発行されます。このURLにアクセスを行うと公開ができるようになります。(もちろん、8080ポートに対応したプログラムがないと失敗しますので注意です)

では、アクセスの実験を行います。 サーバとしてはpythonのSimpleHTTPServerモジュールを使用します。

ngrokを起動したコンソールとは別のものを開いて以下の様に起動します。(-mはモジュール起動の際に必要になります)

$ python -m SimpleHTTPServer 8080

これで準備OKです。あとはクライアント側からアクセスを行います。まずはローカル環境からのアクセスを行ってみます。更にクライアント用のコンソールを開きcurlコマンドを使用してアクセスしてみます。実行すると以下の様になると思います。(実行するとサーバ側のカレントディレクトリ一覧が表示されるます。)

$ curl http://localhost:8080
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href=".bash_history">.bash_history</a>
<li><a href=".bash_logout">.bash_logout</a>
<li><a href=".bashrc">.bashrc</a>
<li><a href=".cache/">.cache/</a>
<li><a href=".config/">.config/</a>
【中略】
</ul>
<hr>
</body>
</html>

【実行画面】 f:id:ueponx:20170708155249j:plain

ローカルでのテストがうまくいったので、今度はngrok経由でアクセスを行います。ngrok起動時に表示されたURLに対してアクセスを行います。(*********はランダムな文字列です)

$ curl http://********.ngrok.io
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href=".bash_history">.bash_history</a>
<li><a href=".bash_logout">.bash_logout</a>
<li><a href=".bashrc">.bashrc</a>
<li><a href=".cache/">.cache/</a>
<li><a href=".config/">.config/</a>
【中略】
</ul>
<hr>
</body>
</html>

【実行画面】 f:id:ueponx:20170708154030j:plain

無事にアクセスしデータが取得できたと思います。

アクセスはngrokプロセス側にも以下の様に表示されます。

f:id:ueponx:20170708155501j:plain

終わりに

ngrokを使用することでRaspberryPiで作成したWebアプリケーションを容易に公開することができました。開発時やハッカソンなどで短時間で公開したい場合にはかなり有効かなと思います。

ngrokはユーザ登録しない場合にはhttp(https)しか使用できませんが、ユーザ登録を行うとSSHやRDPなども使用できるようです。次回はそのあたりも行ってみようと思います。

IchigoJamのファームウエアをバージョンアップさせる

IchigoJamのファームウエアをバージョンアップさせる

久しぶりにIchigoJamを使用しようと思ったのですが、ファームウエアのバージョンがかなり古かったのでバージョンアップをしました。 以前にもファームウエアのバージョンを上げたことはあるのですが、メモなどを取っていなかったのでかなり苦戦しました。 苦戦というよりもハマったという感じでした。(たぶん自分だけかも知れない現象ぽい)

IchigoJamってなに?って人は以下を参照ください。

ichigojam.net

自分は秋月電子さんで購入しました。

IchigoJamのファームウエアのバージョンアップ

PCとの接続

IchigoJamのバージョンアップはメイン基板に載っているLPC1114のシリアルポートとPCを接続する必要があります。今回は家にあったUSBシリアル変換を称することにしました。IchigoJamは3.3Vなのですが、自分の持っていたのは5.0Vと3.3Vの変換をジャンパで切り替えることができるものでした。

シリアルポートとの接続に関しては以下を参考にしました。

d.hatena.ne.jp

nuneno.cocolog-nifty.com

基本は

IchigoJam PC(USBシリアル変換)
GND GND
TX RX
RX TX
ISP GND(基板のGNDから取ったほうが早いです)

このように接続を行います。

【写真】 f:id:ueponx:20170702152306j:plain

ソフトウエアの準備

ファームウエアに関しては公式サイトに公開されているのでそれをダウンロードします。

ichigojam.net

今回はversion 1.2.2をダウンロードすることにしました。ダウンロードするとアーカイブにはNTSCやキーボードなどにより複数の種類のROMがあり、そこからファイルを選択することになりますが、自分はntscとJPキーボードのファームウエアを選択しました。(ファイルはichigojam-ntsc-jpkbd.hexです。)

あとはこのファームウエアを書き込むソフトウエアであるFlash Magicをダウンロードします。

www.flashmagictool.com (画面右側にあるFlashMagic.exeのボタンをクリックすればダウンロードができます)

参考にしたサイトの情報でわかったのですがPC(Windows)でシリアルポートの設定を見る方法があるようでmodeコマンドを叩くとスピードなどがわかるようです。これって常識なんでしょうか?これまではGUIで結構確認していたのですがこちらのほうが圧倒的に楽ですね。COMポートも分かりますし。

f:id:ueponx:20170701140914j:plain

基本は参考にしたサイトと同様なのでファームウエアを書き込むだけです。

自分の場合はmodeコマンドでUSBシリアル変換機の接続がCOM3と判別されたのでこれを設定し、以下の画面の様にします。

f:id:ueponx:20170702135911j:plain

あとは書き込むだけなんですが…。

またしてもトラブル…

ここまで来て毎回トラブルなんですよね…

Flash Magicのメニューにある虫眼鏡のアイコンボタンをクリックするとIchigoJamに接続してメモリ状態を表示することができるのですが Error発生します。エラーメッセージからすると自動でボーレートの設定に失敗したというものでした。

【メモリ内容の表示ダイアログ】 f:id:ueponx:20170702141428j:plain

【エラーダイアログ】 f:id:ueponx:20170702141951j:plain

Auto設定なんてあったっけなあと思いつつ、ネットにこういう情報もあったのでシリアル変換器の不安定さの機器側の問題なのかもと思いつつも設定を見直すことにします。

【参考】 パソコンと接続 - イチゴジャム レシピ

Flash Magicのメニューから【Options】→【Advanced Options】を開くと

f:id:ueponx:20170702142410j:plain

設定のダイアログが開きます。

f:id:ueponx:20170702142642j:plain

そこで【Communications】タブをみると【High Speed Communications】にチェックがついていました。何となくこの部分が怪しい感じです。そこでチェックを外してみます。

f:id:ueponx:20170702143827j:plain

チェックを外して【OK】ボタンをクリックします。再度、【虫眼鏡ボタン】をクリックすると…。

f:id:ueponx:20170702142250j:plain

無事にダンプができました。一応これでシリアル接続も無事に行えました。

書き込みを行う

後はFlash Magicに書き込むROMのファイルを設定し、【Start】を押すと…

f:id:ueponx:20170702144808j:plain

書き込む処理が開始されます。

f:id:ueponx:20170702144841j:plain

ウインドウの左下に【Finished】が表示されると無事に終了になります。 電源をOFFにして、ISPピンとGNDを接続しているケーブルは抜いておきます。

起動すると…

シリアルコンソールとの接続をそのままにして電源をONにすると

f:id:ueponx:20170701140852j:plain

無事にVer1.2.2の開始画面が表示されます。

終わりに

トラブルはありましたが、なんとかバージョンアップができました。あんな設定触ってないと思ったんだけどなあ。

DragonBoard 410c(Debian)で日本語音声合成(Open JTalk)のTTSしてみる

DragonBoard 410c(Debian)で日本語音声合成(Open JTalk)のTTSしてみる

前回のエントリで音声の出力ができるようになったDragonBoard。この機能を元にOpen JTalkを用いた音声合成を行ってみたいと思います。

Open JTalk - HMM-based Text-to-Speech System

以下の過去エントリを参考にしていきます。

OpenJTalk関連 uepon.hatenadiary.com

Bluetoothスピーカー関連 uepon.hatenadiary.com

Open JTalkのインストー

Open JTalkMMDAgentをインストールします。

$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001
$ wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip
$ unzip MMDAgent_Example-1.6.zip
$ sudo cp -R MMDAgent_Example-1.6/Voice/mei /usr/share/hts-voice/

一度行っているので迷うことはありませんでした。

TTSを実行するシェルを編集する

Open JTalkのパラメータを設定し実行するシェルスクリプトを編集します。

$ vim jtalk.sh

【jtalk.sh】

#!/bin/bash

# HTSVOICE=/usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice
HTSVOICE=/usr/share/hts-voice/mei/mei_normal.htsvoice

voice=`tempfile`
option="-m $HTSVOICE \
  -s 16000 \
  -p 100 \
  -a 0.03 \
  -u 0.0 \
  -jm 1.0 \
  -jf 1.0 \
  -x /var/lib/mecab/dic/open-jtalk/naist-jdic \
  -ow $voice"

if [ -z "$1" ] ; then
        open_jtalk $option
else
        if [ -f "$1" ] ; then
                open_jtalk $option $1
        else
                echo "$1" | open_jtalk $option
        fi
fi

aplay -q $voice
rm $voice

編集が終わったら実行権限を与えます。

$ chmod 755 jtalk.sh

これで準備完了です。

TTSの実行

ここまで終わったので実際に実行させてみます。 コンソール上から以下の様に話したい文章を引数として与えます。

$ ./jtalk.sh こんにちは、今日は雨が降っているなか、お越しい
ただき、ありがとうございます
$ ./jtalk.sh 最大級のパワフルボディ!ダリラガーン!ダゴズバ
ーン!
$ ./jtalk.sh ドリーミングガール、恋のシミュレーション。乙女
はいつも、ときめきクライシス。

正常に動作できたようです。

【動画】

youtu.be

おわりに

思ったよりすんなりOpen JTalkを導入できました。 これでDragonBoardでも音声でアナウンスするようなものは簡単にできそうですね!

/* -----codeの行番号----- */