curluneの日記

日々試行錯誤。雑多に、気ままに、てきとーに。HoloLens/Oculus Rift,Touchと戯れる日々。

AzureのApp Serviceでベーシック認証を使って簡易アクセス制限 ひとりぷちアドベントカレンダー2017 11日目

AzureのApp Serviceは、さくっとお試し環境を作るのに便利です。 お試し中に他所からアクセスされるのは宜しくないので、ベーシック認証で簡易アクセス制限を行ってみよう、というお話です。

App ServiceはWindows/Linuxを選択する事ができますが、Windowsな方についてです。

# フリープランはWindowsだけなのだもの

アクセス制限する

apacheのように設定ファイルだけ、とはいかないですが、ありがたいモジュールのおかげで簡単に実現できます。

github.com

管理ポータルのコンソールにて、次のようなコマンドを実行するだけで完了です。 このコンソール、ペーストがうまく行かない場合があります。 できない事は無いのですが、説明しにくいので頑張って入力しましょう。

f:id:curlune:20171211231912p:plain

git clone --depth=1 https://github.com/nabehiro/HttpAuthModule H
mkdir bin
cp H/P*/H* bin/
cp H/P*/W* .
rm -rf H

次のユーザ名とパスワードでアクセスできます。

user: hoge pass: hogepass

ベーシック認証とダイジェスト認証

先ほどの状態では、ベーシック認証ではなくダイジェスト認証になっています。 どちらもユーザ側としての操作は変わらないので、同じように利用できます。

両者の違いはパスワードのやり取りの方法です。ダイジェスト認証のほうがセキュアですが、たまに対応していないブラウザ(クライアント)がある?、らしいです。

設定の変更

コピーしたファイルのうち、Web.configに設定情報が入っています。

丁寧にコメントが入っているので詳細は省きます。

おわりに

IISなAzureは、apacheとは勝手が異なり多少つまづく事があります。けれどもまあ大体どうにかなるものです。

モジュール作者様に感謝。

vimのヘルプの言語を切り替えるプラグインをつくった ひとりぷちアドベントカレンダー2017 10日目

vimのヘルプにて、別の言語ではどのように書いてあるのか確認したいことがあったのでプラグインを作ってみました。

簡単そうで思いのほか苦戦してました。

完成品

github.com

ヘルプのウィンドウでコマンド:SwitchHelpLangを使用すると、別の言語のヘルプを表示します。

動作

現在表示中のhelp情報得る方法がわからなかったので、強引に実現してみました。

現在地は:tagsのテキストから正規表現で引っ張りだしています。 後は言語部分を置換えて開き直すだけ。

終わりに

現在のタグ(最後にジャンプしたタグ)ってどこかで取れそうな気もするけれど、見つかったので苦戦しました。もっときれいな方法があるかもしれない。

あとは、ドット.が改行にもマッチ?して悩んだりも。Vim scriptむつかしい。

ともあれ、初めてのプラグイン完成。ばんざーい。

検索・置き換え関系の区切りのスラッシュは別の記号も使えることがあるよというおはなし ひとりぷちアドベントカレンダー2017 09日目

たまにスラッシュ/を一生懸命エスケープしているものを見かけるので、楽な方法もあるよというお話。

# 他に書こうとしていたことが間に合わなかったのでごまかしているだけとも言う

解決策

区切りに別の記号を使う事で/エスケープが不要になります。 たとえば区切りに#をつかうと/はそのまま、#そのものはエスケープを利用して\#となります。直近で使わない記号を使うと、余計なエスケープが不要になるのです。

この仕組みは、いくつかの場面で使えるので覚えておくと便利です。

vim

2017/12/09

:s#/#-#g

説明はこちら

:h E146

'/' でパターンと置換文字列を囲む代わりに、英数字や '\', '"', '|' 以外であれば、 他の1バイト文字を使うことができる。これは検索パターンや置換文字列に '/' を含む 場合に有益である。例 :s+/+//+

php

$date = '2017/12/09';
echo preg_replace('#/#', '-', $date), PHP_EOL;

PHP: デリミタ - Manual

sed

echo '2017/12/09' | sed 's#/#-#g'
2017-12-09

など。

終わりに

地味だけどこういう仕組みはありがたいですね。 スラッシュはどこでも使われているからエスケープだらけになりやすいです。

vimのキーマップ設定にユニコードを使う ひとりぷちアドベントカレンダー2017 08日目

vimのキーマップ設定はユニコードの記述?でもいけるよ、というお話。

凡ミスにより、バックスラッシュ円記号との戦いの中でたどり着きました。

やりたかったこと

windowsvimで、円記号のキーを押したときチルダを入力する、という事が目的です。

そのときの環境は少し特殊で、キーボードにてバックスラッシュ円記号が別々にて入力できました。代わりにチルダの入力ができなかったのでキーマップでごまかしたかったのです。

ユニコードな指定方法

次のような記述で目的を果することができました。

"  c2a5 U+00A5 YEN SIGN
noremap <char-0x00A5> ~
noremap! <char-0x00A5> ~

単純に <char-0x に続けてユニコードな指定を行うというものです。 この辺りの詳細は次のヘルプで確認できます。

:help <Char>

そもそもの原因は

大本の原因は、いつのまにやらfileencoding=cp932になっていた事です。 この事に気づけなかったため今回の方法を探す事になりました。

前記の通り、バックスラッシュ円記号を別に入力する事はできます。

そのため.vimrcマッピングを設定するまでは問題ないです。 この時点ではg8によってバックスラッシュ円記号が別の文字である事が確認できます。 f:id:curlune:20171208044522p:plain

ですが、保存後に開き直すと円記号バックスラッシュに変化してしまいました。その結果、目的が果たせませんでした。円記号ではなくバックスラッシュ宛の割当になってしまうのです。

たしか印字文字以外での指定方法があったな、ということでいろいろ探した結果、今回の方法にたどりつけました。

終わりに

vimは柔軟にマッピングできるのでありがたいですね。発展を支えてくださる方々に日々感謝。

bashでメニュー補完を使う ひとりぷちアドベントカレンダー2017 07日目

CUIオンリーの場合、ファイルは目の前にあるけれど名前のせいで手を出せずに悔しい、ってことがたまにありますよね。先頭の文字が文字化けだったり、特殊文字だったりで入力できないという状況。

そんな時に活躍するのが、候補を順次入力してくれるメニュー補完(menu-complete)です。

機能自体はbashに内蔵されているのでキーを割り当てるだけで利用できます。

動作の違い

通常の補完(complete)は共通する一致箇所までを入力してくれます。

メニュー補完の場合は、候補を順次入力してくれます。 vimのデフォルト?の補完のような動作です。 ファイル数が少ない場合や、先頭文字が入力できない、という時に便利です。

元に戻す方法

変更の前に元に戻す方法です。

\C-というのは、Ctrlを押しながら、のキーです。 \C-iというのは特別な意味があってtabキーと同じ扱いです。

tabキーに通常の補完を割り当てることで、一致部分までの補完に戻ります。

bind '"\C-i": complete'

bindコマンドで遊ぶ時は、新たにbashを実行して分けておくとリセットが楽です。

補完動作を置換える

単に置換えてしまうのであればこれで行けます。

bind '"\C-i": menu-complete'

全ての候補を順次入力してくれます。

いつものように?先頭数文字を入力してから補完を開始すると、先頭一致の中で順次入力してくれます。

どちらも使えるようにする

使うたびにショートカットを上書きしても良いですが、もう少し使いやすくしてみます。

シンプルに別々のキーに割り当てる

空きキーがあるのであればこの方法。それぞれ好きなキーに割り当てる事でどちらもつかえます。

候補としては使いやすい箇所は \C-iの他に\e\e\C-xの後に好きなキーを使う、辺りです。

\eというのはEscキーで、Esc2回はtabと同じように補完が割り当てられています。

\C-x はプレフィックスとして他のキーと組み合わせて使われています。 続くキーには空きが多いので割り当てやすいです。

関数で切り替える

雑ですが関数を作るとトグルな切替もできます。

次のようなものを.bashrc辺りに保存して読み直す(. ~/.bashrc)とtoggleCompleteを実行するたびに切替できます。

_IS_MENU_COMPLETE=false
function toggleComplete()
{
    if [ "$_IS_MENU_COMPLETE" = true ]; then
        bind '"\C-i": complete'
        _IS_MENU_COMPLETE=false
    else
        _IS_MENU_COMPLETE=true
        bind '"\C-i": menu-complete'
    fi
}

ショートカットも追加する

さらに次のような割当も追加すると、Ctrl+x``tabの順の入力で切り替える事ができます。

bind -x '"\C-x\C-i": toggleComplete'

機会はないと思いますが、入力の途中でも切り替える事もできます。

終わりに

bashにもメニュー補完する機能はある、という事を知っているといつか役に立つかもしれません。

# 実際のところはvim:! 経由で対処する場合の方が多いです。けれどたまーにvimが無くて仕方なく...

Man page of BASH

go言語で引数を記録するだけのプログラムをつくった ひとりぷちアドベントカレンダー2017 06日目

昨日のテキスト読み上げを試す際に、どんな値を貰っているのか確認するために簡単なプログラムを作ってみました。

単に引数をlog.txtに追記するという簡単なものです。

完成品

数行だけで中身も何もないけれど......。

引数を記録するだけならこんな簡単なのだなあと。 github.com

実行結果

つぎの引数設定で実行してみました。

"%t" "%f"

出力結果はこうなりました。

(日時) [c:\users\...\logargs.exe こんにちは z:\...\savedata\speech_842109d487564d76ace6f1f2b00dab9a.wav]

単純に、読み上げるテキストと一時ファイルの場所をくれるのですね。 この場所を監視して、ファイルが来たら再生、一定時間たったら無視して進む、という感じかな。

無駄にクロスコンパイル

このプログラム、なぜかMac環境でバイナリまで生成していたりします。go言語ってお手軽にクロスコンパイルまでできるので、ちょっとしたツールに便利ですね。

GOOS=windows go build

おわりに

しょうもないプログラムだけれど、個人的には欲しかったものです。

大分昔ですが、他所から起動されるプログラムがあり、何か受け渡しているらしいけど分からない、という事がありました。 そのときも似たようなプログラムを作り、本来呼び出される物と一旦置換えて確認していました。 知識が足りなかった事もあるけれど、なにやらごちゃごちゃしていた記憶が。

いまなら簡単に作れてしまって良い時代ですね。

一部の吉里吉里についているテキスト読み上げを利用してVOICEROIDに読み上げてもらう ひとりぷちアドベントカレンダー2017 05日目

便利だけれど外部アプリケーションの呼び出し方法を忘れることあるのでメモ。 利用者いるよアピールも兼ねて。

テキスト読み上げを利用してフルボイスに!

テキスト読み上げ

音声のない部分を音声合成で読み上げてくれる機能です。地の文と音声がない人のセリフで、別の設定をすることもできます。

ワムソフトさんのところの吉里吉里についていますが、たまに付いていない事も。

有無については表向きには出していないので、起動するまでわからないです。

有効化

デフォルトではoffになっているので有効化します。 メニュー項目 文字表示の最後にあります。

f:id:curlune:20171205082830p:plain

設定

次のような画面がでてきます。

f:id:curlune:20171205083838p:plain

Windows 8 以降の場合は、特に準備はせずにSpeech APIが利用できるらしいです。 詳細については ヘルプ のところにテキストで詳しく書いてあります。

Speech API

大低の環境ではMicrosoft Harukaが読み上げてくれます。 別途Speech API対応の何かを入れていると他も選べると思います。が手元にないので不明です。

外部アプリケーションの呼び出し

読み上げのタイミング毎にプログラムを引数付きで呼び出してくれます。

アプリケーションには、読み上げ文字列とwavファイル出力する(してほしい)場所を渡せます。

wavファイルの出力ができず、直接音声を読み上げるものでも一応は動きます。ただし、その場合は音声の長さを伝える事ができないため、進行タイミングの同期は難しいです。

アプリケーション指定の他に、設定も必須です。設定で引数指定を行わないと呼び出し自体をしてくれないので注意が必要です。

VOICEROIDに読み上げてもらう

こちらの民安★TALKを利用するとVOICEROIDでの読み上げができます。ファイル出力はできないため、きれいに同期は取れないです。

publish-tool.blogspot.jp

動作は、起動中のVOICEROIDにテキストを入力して再生ボタンを押す、という感じらしいです。 適当に設定を済ませて、VOICEROIDを起動すると呼ばれる側の準備は完了です。VOICEROIDの窓自体は隠れていても、最小化しておいても問題ないようです。

そして吉里吉里側にて外部アプリケーションとして指定して、共通設定の設定にて引数を指定します。

f:id:curlune:20171205092046p:plain

コマンドラインオプションはテキスト指定のみなのでこれだけです。

"%t"

これで読み上げてもらえます。

おわりに

なんでも読み上げてくれるVOICEROID楽しいです。きりたんがお気に入り。どうにかwav出力もしたいなあ。

そしてそろそろ書く事が......ない訳ではないけれどもペースが間に合わない。日々いろいろと発信している方々は本当にすごいな、と改めて実感しました。