curluneの日記

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

Azure Web Serviceで拡張機能のComposerを使うとvenderを含むurlへアクセスできなくなる問題を回避する ひとりぷちアドベントカレンダー2017 04日目

Azure Web Serviceにて一部のurlへできないと思ったら、拡張機能のComporserがブロックしていたというお話。 原因となるルールを削除することでアクセスできるようになります。

#タイトル長過ぎてひどい。

拡張機能のComporserを使うと起きる事

urlの中にvenderが含まれると、それ以下のファイルへアクセスできなく(403)なります。 たとえば、次のようなアドレスです。

これ、しばらくは原因が分からず地味に悩みました。拡張機能がこんなありがた迷惑なことをしているとは思わなかった。

対処方法

公開ディレクトリのweb.configに次の項目を追加するとvender以下へアクセスできるようになります。 やっている事は簡単、原因であるvender以下をブロックするルールを名前を指定して削除しています。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <remove name="RequestBlockingRule1" />
      </rule>
    </rewrite>
  </system.webServer>
</configuration>

普通webrootを変更して、comporservenderディレクトリはwebrootの外になると思います。 なので、ルールを削除するだけで一件落着です。

拡張機能の中身

拡張機能を追加後、一覧の中から選ぶと詳細を確認できます。 f:id:curlune:20171204050353p:plain

この記述によると本体はこちらの模様。 github.com

そして原因は次の部分。

ComposerExtension/applicationHost.xdt at df2eee9426f89f7d193a7b4254cacae5ff30db39 · SyntaxC4-MSFT/ComposerExtension · GitHub

一見問題ないように見えるけれど、urlの途中にあるvenderにもマッチするようなのです......。

おわりに

こういう問題って分かってしまえば簡単なのだけれど、原因に気づくまでが大変です。

トラップに嵌る人が減りますよーに。

Unityのcourseware(2015ver)の字幕を見やすくする ひとりぷちアドベントカレンダー2017 03日目

なにやらUnityのcourseware(2015ver)が利用できるらしいのでやってみよう、というお話です。 そのなかで動画の字幕が読みにくい、という事でスタイルを弄ったりしてみました。

ご案内

数日前にUnityからメールが来ていました。

An important message about your courseware access.

内容は多分こんなやつです。(すごく適当翻訳)

  • コースウェアの2015verがもうすぐ終わるよ。
  • 利用権利が残っているよ。
  • 気になったら期限までに利用してね。

何で貰った権利か謎ですが利用してみる事にします。

#おそらくOculusの時のオマケ?

#あるいは先日のPlus分?? (オマケ付きで半額かー、ということでポチった!)

コースウェア

内容としては、ブラウザで動画を見ながらひとつのゲームを作ってみよう、というものらしいです。 残念ながら音声は英語ですが、日本語を含むいくつかの言語の字幕を表示する事ができます。 f:id:curlune:20171202215526p:plain 公開の期限は2018/03/01まで、そして1or3ヶ月分のアクセス権もってるよ、とのこと。 3ヶ月の人がフルに活用できるように、というタイミングでのお知らせぽいですね。 私の場合は1ヶ月分でした。

はじめてみる

!注意! 同じように権利を持っていて、まだ開始しない場合はご注意ください。どのタイミングでカウントスタートするのか微妙なので...

下記のコースウェアページの右上からログインをすると開始できます。 f:id:curlune:20171202220509p:plain Unity Certification - Courseware

トップのページはこんな感じ。 f:id:curlune:20171202215812p:plain コース状況等の確認は左上のメニュー、My Activitiesの各項目で確認できます。 f:id:curlune:20171202214605p:plain

字幕が読みにくいので対策する

ぽちぽちクリックして動画を開始するまでは良いのですが、字幕が読みにくいです... f:id:curlune:20171202233057p:plain でも安心、字幕表示はhtmlなのでどうにでもなるのです。

下の画像はChromeディベロッパツール(Ctrl+Shift+I)を利用してスタイルを上書きしたものです。htmlの場合はこのようにユーザ側から介入する事ができるので良いですね。 f:id:curlune:20171202233113p:plain

スタイルはこんなやつです。敵(?)はインラインスタイルのため、!importantを指定して強制的に上書きしています。

/* 字幕部分 */
span.ttmlStyled {
    /* 文字 */
    color: #002835!important;
    font-size: 2em!important;
    /* 背景 */
    background-color: #62ff00bf!important;
    border-radius: 0.2em;
}

Stylusを利用して自動適応

毎回面倒、という場合は拡張機能を利用して自動適応しましょう。

今回はStylusというページ毎に追加CSSを適応してくれる拡張を使います。

github.com

で、こんな設定をすると自動で字幕スタイルを適応できます。 urlを2つ指定しています。これは動画部分がiframeな事への簡易な対策です。 f:id:curlune:20171202235321p:plain

https://unity3d.docebosaas.com/learn/course/
https://cdnapisec.kaltura.com/html5

おわりに

字幕表示も快適になったのでちまちま読み進めていこうと思います。

ぷちアドベントカレンダーのはずなのにお手軽度が不足してる......。 さて、いつまで継続できるのか。

bashのヒストリーのショートカット辺りのお話 ひとりぷちアドベントカレンダー2017 02日目

昨日に引き続きbash周り、今回はヒストリーについてのお話です。 historyという、ズバリな内部コマンドがありますが、今回はそちらは省略で。

これだけ覚えておくとべんり

  • Ctrl+rでヒストリ検索開始
  • 探したい文字列を入力して過去方法へインクリメンタル検索
  • Esc > 過去へ行き過ぎたら振り出しに戻る (Esc を押した後に >を入力)

ヒストリー

bash(に限らないですが)では、以前に実行したコマンド確認、再実行できる仕組みがあります。 カーソルの上下で以前の入力が出てくるあれです。 これを利用することで入力の手間を軽減できます。

素早く探す

履歴は検索を利用する事で素早く取り出す事ができます。

直近に利用した物であれば、カーソルの上下(or Ctrl+p, Ctrl+n)でも十分です。けれども、しばらく前のものを実行する場合は検索した方がらくちんです。

Ctrl+rを入力するとインクリメンタル検索が始まります。

(reverse-i-search)`':

この状態で文字を入力すると、入力した通りの内容が含まれる行が表示されます。 あとはエンターで実行か、Esc or 左右のカーソルで検索モードを終わりにして編集する事ができます。

分かりにくい動作

便利な機能ですが、見つからなかった時の動作がとてもにくいです... 次のこと覚えておくと良いと思います。

  • 該当行が見つかったらそこまで上キーのみの連打(をしたような状態になる)
  • 該当行が見つからなかったら画面は何もかわらない
    • けれども、内部的な検索文字列は入力全てを持っている。

検索例

下記のような履歴の時の動作を説明します。 下の行ほど新しい(最近の)履歴です。 pushdを実行した後の状態からスタートです。

#履歴 数字は行番号
10000  cd
10001  pwd
10002  echo
10003  pushd
10004
$ 
#`Ctrl+r`で検索を開始
(reverse-i-search)`':
#`c`を入力
#下から順に`c`を含む行をさがす
#見つかったので10002行目まで上キー連打
(reverse-i-search)`c': echo
#`o`を入力
#該当が無いので何も変わらない
#けれども検索中の文字は`co`
(reverse-i-search)`c': echo
#`p`を入力
#検索中の文字は`cop`
(reverse-i-search)`c': echo
#バックスペースを入力
#検索中の文字は`co`
(reverse-i-search)`c': echo
#バックスペースを入力
#検索中の文字は`c`
#`c`を含む物が見つかったので上連打
(reverse-i-search)`c': cd
# `Esc`を入力
#検索終了
# 開始時の状態から10000行目まで上キー連打と同じ状態
$ cd

該当がなかった場合には表示は変わらず検索文字だけ変わっている、という動作...

戻りすぎてしまったとき

検索は最近から過去への一方向です。 そのため戻りすぎた場合は現在地?を未来分に進める、つまりは下キー連打が必要です。また、連打の代わりにEsc > の順に入力することで一気に最新分に戻れます。

実のところ未来方向への検索も存在するのですが、下準備をしないと利用できません。Esc >で事足りるので忘れてしまいましょう。

履歴に関する設定

履歴に残す条件や履歴の最大保持件数など、いくらかの項目については変数を通して設定を行うことができます。 .bash_profile辺りに HISTSIZE=大きな数字を追加して保存数を増やしておくと、より活用しやすくなります。

おわりに

分かりにくい部分もありますが、慣れてしまえば大丈夫。 履歴検索を使って楽をしましょう。

その他いろいろについてはマニュアルへ!

Man page of BASH

マイナーだけど便利なpushd/popdコマンド ひとりぷちアドベントカレンダー2017 01日目

日々の思いつきの内容で ぷちアドベントカレンダー をやってみようというやつです。 中身は軽く雑多に、なにかしらアウトプットしよう、ということで。

マイナーだけど便利なpushd/popdコマンド

今回はCUI環境bashのコマンド、pushdpopdのお話です。

ざっくり行ってしまうと、便利なcdです。

通常のcd

通常のcdは場所を指定して移動します。

pwd
# /tmp/adv01
mkdir -p path/to/dir
cd path/to/dir
# /tmp/adv01/path/to/dir

場所の代わりに-を指定すると移動前にいた場所へ戻ります。

cd -
# /tmp/adv01

もう一度実cd -を実行すると、同じように移動前にいた場所へ戻ります。

cd -
# /tmp/adv01/path/to/dir

この動作は、以前の場所を記録して、移動の毎に上書きすることで実現されています。

echo $OLDPWD
# /tmp/adv01

上書きしてしまうため、2回移動するとスタート地点の情報は失われてしまいます。

複数回分記録してくれるpushd/popd

pushdpopdは複数回の移動を順番に記録してくれるcdのようなものです。

移動する時はpushd、戻る時はpopdを使います。

cd /tmp/adv01
# /tmp/adv01
pushd path/to
# /tmp/adv01/path/to
pushd dir
# /tmp/adv01/path/to/dir
popd
# /tmp/adv01/path/to
popd
# /tmp/adv01

地味な違いですが、何かと便利な機能です。

作業範囲のトップへ移動してからpushdpopdを活用する事で、親ディレクトリへの../../を軽減する事ができます。 子ディレクトリから親へ辿るよりも、親から子へ補完入力するほうが楽な場合が多い気がします。

ほぼ移動しない場合はcd -でも大丈夫ですが、うっかり複数移動しても戻れる安心感は良いものです。

また、とても環境依存な話ではありますが、複数人でアカウント共有する場合に便利な場合があります。 他の人が使わないためbashのヒストリーから利用しやすいのです。 ヒストリー周りについてはまた別の機会に。

おわりに

今回のpushdpopdは特定のバイナリではなく、bashの内蔵コマンドです。 そのためbinディレクトリをあさっても出てこない、という辺りがマイナーさをより強くしている気がします。

今回のコマンドを含め、内蔵のコマンドには割と便利なものが埋もれています。たまにはマニュアルを眺めると良い事があるかと思います。

Man page of BASH_BUILTINS

bash小ネタ集になる予感......。

Paintstorm Studioを購入する際は余計な記号を含まないメールアドレス使いましょう

現在セール中のペイントソフトPaintstorm Studioのお話。 購入する際は余計な記号を含まないメールアドレスを使いましょう。

場合によっては、ライセンス登録で不都合が生じてサポートのお世話になるのです...

Paintstorm Studioとは

f:id:curlune:20171126011047p:plain
Paintstorm Studio icon
Win/Mac/Linux対応の2Dペインソフトウェアです。PC系とは別ライセンスですがiPad版もあります。UIは日本語もあります。

www.paintstormstudio.com

詳細は他所でどうぞ。

BLACK FRIDAYセール

期間は把握していないですが、2017/11/26現在セールにより50%offとなっています。 1ライセンス$10、2ライセンスセットだと$15です。 お得なタイミングで手を出してみる事にしました。

ライセンス登録

通常のライセンス認証は簡単です。 ソフトを起動した際に購入時のメールアドレスを入力するだけで完了です。

ライセンス登録の罠

ただし、これには思わぬ落とし穴がありました。 このダイアログ、何やら通常のテキスト入力ではないらしい?のです。

英語キーボード相当で入力してね、と言うのはよいのですが(ダイアログに@の入力方法が書いてある優しさ)、一部記号が入力できないのです...。Ctrl+vで張り付けを試みるも、vが入力されるだけ。

詰んでしまったのでサポートへ助けを求める事に。

素早く対応して下さったサポートに感謝

最終的にはサポートに連絡して、メールアドレスを変更してもらう事で解決しました。

やり取りはざっくり以下のようなものでした。怪しい機械翻訳でもどうにかなる世界万歳!

プラスの入力方法か、他の登録手段教えてー

登録メールをプラス(とその後)除いたものにしたよ!、他のものが良ければ教えてね

対応感謝です。

避けられるトラブルは避ける

日本語以外のやり取りは精神的にアレですが、案外どうにでもなる物です。

けれども、面倒事は無いのが一番。同じ罠に嵌る人が出ませんように。

Azure App Service で拡張子の無いファイルをダウンロードできるようにする

以前に困った事があったのでメモ。

AzureというよりはwindowsなwebサーバIISの都合での問題。

mimeが設定されていないファイルへのアクセスはブロックされるので、どうにかしないといけないというお話。

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

解決方法

ふつうなやり方

公開ディレクトリに下記の内容のweb.config追加すればok。

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <staticContent>
                <!-- 動作が怪しい時は一旦割当を削除してみると良いかも -->
                <remove fileExtension="." />
                <!-- 拡張子無し バイナリとして割り当てる -->
                <mimeMap fileExtension="." mimeType="application/octet-stream" />
            </staticContent>
        </system.webServer>
    </configuration>

ファイルは App Service のメニュー App Service Editor (プレビュー) から作成・編集する事ができます。 f:id:curlune:20171030053601p:plain

設定の都合上、mimeはすべてのファイルで共通です。通常はこれで問題ないと思います。諸事情により別の方法も書いておきます。

へんな事をしたい場合

urlの書き換えとphpを利用するとこんな感じでもいけます。

  • web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="my file" stopProcessing="true">
                    <match url="^files/(.+)\.([^\.]+)$" />
                    <action type="Rewrite" url="/download.php?file={R:1}&amp;ext={R:2}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
 </configuration>
<?php
$dir = 'files';

$file = @$_GET['file'];
$ext = @$_GET['ext'];
$fileName = "{$file}.{$ext}";
$parts = [__DIR__, $dir, $file];
// XXX ディレクトリトラバーサル
$filePath = implode(DIRECTORY_SEPARATOR, $parts);

if (!is_file($filePath)) {
    http_response_code(404);
    echo 'Not Found!';
    exit(1);
}

$mime = mime_content_type($filePath);
$length = filesize($filePath); // max 2GB

header("Content-Type: {$mime}");
header("Content-Disposition: inline;");
// 保存させたい場合はこちら
// header("Content-Disposition: attachment; filename='{$fileName}'");
header("Content-Length: {$length}");
readfile($filePath);
exit();

ファイルが触れないなら、触れるところから出力すればいいじゃない、という強引な方法。

こうすることで個別にmimeなどの情報を切り替えることができます。本当はファイルに拡張子を付ければよいだけなのだけれど...。

下記のようなプログラムがあって、これに近い事してごまかしたことがありました...。

  • ファイルは拡張子無しのハッシュ値名で保持
  • 拡張子は別途管理
  • アクセスは拡張子付きのリンク
  • url書き換えで実ファイルへアクセス

参考

https://support.microsoft.com/ja-jp/help/326965/iis-6-0-does-not-serve-unknown-mime-types

IIS 6.0 Web サーバーのファイルを要求した際、そのファイルの拡張子が Web サーバー上に定義済みの MIME の種類ではないと、次のエラー メッセージが表示されます。

HTTP エラー 404 - ファイルまたはディレクトリが見つかりません。

stackoverflow.com

リモートデスクトップ環境でCD等を再生する

手元のメモの整理をかねて。

リモートデスクトップで音楽CDやDVDの再生などを行うためには、グループポリシーの設定が必要なようです。 通常のデータディスクを開く分には設定等は不要です。

解決方法

偶然下記の参考のページを見つけて解決。 以下の操作で音楽CD等もアクセスできるようになります。

Win+R で ファイル名を指定して グループポリシーエディタのプログラム gpedit.msc を起動。

f:id:curlune:20171001234207p:plain

ローカルコンピュータポリシー > 管理用テンプレート > システム > すべてのリムーバブル記憶域クラス: リモート セッションでの直接アクセスを許可する

f:id:curlune:20171001234231p:plain

未構成 から 有効 へ変更。

f:id:curlune:20171001234643p:plain

適応を行うとアクセスできるようになっています。

参考

srad.jp

ディスクを 開く 場合と 再生 する場合でアクセス方法違うのだなあ。