pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


コマンドプロンプトの新しいカラースキームを作業環境に取り入れてみる

Windows10 Fall Creators Update からは、コマンドプロンプトの配色が変わるようですね。

www.itmedia.co.jp

いままでの配色は青系の色が見づらくてイマイチだと思っていたのですが、もともとの配色はブラウン管向けだったそうです。液晶とブラウン管では色特性が違うので、そのままの配色ではどうしても見やすさが違うわけですが、新しい配色では見やすくなるようです。ただし既存環境からのアップデートでは新しいカラースキームが導入されないそうです。また仮に導入されたとしても結局は来月以降の Fall Creators Update の話です。従って現在利用中の Creators Update には全く関係ありません。

そこで、手元の Creators Update に新しいカラースキームを適用する設定を導入してみることにします。

コンソールのカラースキームは HKEY_CURRENT_USER\Console にありますので、これを上書きしてやればOKです。

ただし手作業でやるのはめんどくさいです。特に複数の環境に同じ設定を適用したい場合には、相当に厳しい。なので reg ファイルをこんなふうに作ってみました。これなら複数の環境にも容易に適用できます。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"ColorTable00"=dword:000c0c0c
"ColorTable01"=dword:00da3700
"ColorTable02"=dword:000ea113
"ColorTable03"=dword:00dd963a
"ColorTable04"=dword:001f0fc5
"ColorTable05"=dword:00981788
"ColorTable06"=dword:00009cc1
"ColorTable07"=dword:00cccccc
"ColorTable08"=dword:00767676
"ColorTable09"=dword:00ff783b
"ColorTable10"=dword:000cc616
"ColorTable11"=dword:00d6d661
"ColorTable12"=dword:005648e7
"ColorTable13"=dword:009e00b4
"ColorTable14"=dword:00a5f1f9
"ColorTable15"=dword:00f2f2f2

あとはこれを newcolorscheme.reg のような名前で保存してインポート(ダブルクリックとか)をすればOKです。

なお、カラースキームのカスタマイズについては2点の注意事項があります。

  • この設定は Bash on Windows にも引き継がれます。
  • Bash on Windows のカラースキームをカスタマイズしている場合は、そちらも別途変更するか、カスタマイズ自体を削除する必要があります。(あるいはコンソールを使う他のアプリでも同様)

NextTrain形式の時刻表データを1行1情報に変換してみる

朝の通勤時にできるだけ混雑した電車を避けるために、最寄駅で乗る電車の編成や時刻を把握しておくことはとても大切なことかもしれません。

そして、最寄駅の上流側に車両基地があるようなケースでは時間帯により「途中駅からの始発電車」というラッキーなパターンに乗れる可能性があります。もしも上流側2駅くらいの範囲で始発で出る電車があるならば、その電車は確実に空いているでしょうから、それを積極的に狙いたくなります。しかしそのような分析に使える時刻表はなかなか見当たりません。

駅.Lockyのデータが使えないだろうか?

そんなときにふと思い出したのは駅.lockyという時刻表アプリ。このアプリでは時刻表データが利用者のボランティアベースでメンテナンスされているのですが、Q&Aの中に以下の案内があります。

■ 駅.Lockyで収集された時刻表データを他の時刻表アプリに入れて利用しても良いですか?
個人利用に限り、他のアプリで利用することができます。

というわけで、今回のケースも個人利用なのでOKの範囲と言える、と、多分思います。。。

さて、駅.Lockyの時刻表データは、NextTrain という形式が用いられています。この形式は NextTrain というフリーソフトウェアで用いられていたのですが、フォーマットがシンプルなことから時刻表表示アプリの多くでデファクトスタンダード的に使われています。

そして実際のデータ形式駅.Lockyの時刻表リストのページで確認できますが、ここではその形式を1行1情報の形式に変換してみることにします。

駅.Lockyのデータの中には、始発電車が明示されているものがありますので、そういうものを使えば、自分の最寄り駅、その上流側の駅のデータを1行1情報で比較できます。すると空いている電車の予測がつけやすくなります。

作ったスクリプト

gawk でこんなのを書いています。macOS の場合は brew などで gawk をインストールした上で、1行目の記述を #!/usr/local/bin/gawk -f のように書き換える必要があります。

#!/usr/bin/gawk -f
#
# nexttrain 形式のデータを
# 1行1情報に変換するスクリプト
#
# 例えば 駅.Locky の以下のデータを使うと...
# http://eki.locky.jp/site/list?pageid=tbl&code=237978
#
# こんな出力が得られる
# [MON][TUE][WED][THU][FRI]
# 新大阪・博多方面(平日)
# 06  06:00   ⑭のぞみ1号博多
# 06  06:16   ⑮のぞみ3号博多
# 06  06:20   ⑰のぞみ293号新大阪◆運転日注意
# 06  06:26   ⑯ひかり501号新大阪
# 06  06:30   ⑱のぞみ5号博多
# 06  06:33   ⑲こだま631号名古屋
# 06  06:43   ⑭のぞみ201号新大阪
# 06  06:50   ⑱のぞみ7号博多
# 06  06:56   ⑰こだま633号新大阪

BEGIN {
    # フィールドの区切りをデフォルトから変える
    FS="[:;\t ]*"
    destination_pattern=0
}

# 行き先や種別(各停、急行)から
# 置換用のマッピングを作る。
$1 ~ /^[a-zA-Z]/ {

    destination_char[destination_pattern] = $1
    destination_full[destination_pattern] = $2
    destination_short[destination_pattern] = $3
    destination_color[destination_pattern] = $4
    destination_pattern++

    next
}

# 駅名情報や曜日情報はそのまま出す
$1 ~ /^[#\[]/ {

    print
    next

}

# 時刻表情報を1行1情報に変換して出力する
{
    hour=$1

    # print $0
    # 行き先
    for ( i = 0 ; i < destination_pattern ; i++ ) {
        gsub( destination_char[i], destination_full[i], $0 )
    }

    # print $0
    for ( i = 2 ; i <= NF ; i++ ) {
        match($i, /([a-zA-Z]+?)([0-9]+?)/, timedetail)
        traintype=timedetail[1]

        min =substr( $i, match($i,/..$/) )
        dest=substr( $i, 1, length($i) - length(min))
        # printf "%d:%d ", i,NF
        printf "%02d\t%02d:%02d\t%s\n", hour, hour,min, dest
    }
    next
}

mitmproxy のプロキシ用ポートを変える

mitmproxy はデフォルトで 8080/TCP を使いますが、このポートはWeb系の様々なツールが標準的に使おうとしたりしますよね。

手元の環境では、Delphi/C++Builderで中間サーバを実装するためのフレームワークである RAD Server (EMS) の開発サーバがデフォルトで 8080/TCP を使っています。

そうするとツールを複数併用したい場合にツールの取り合いになって楽しくないけど、mitmproxy は補助ツールなわけすから、mitmproxy の使用するポートを変えることにします。

さて、手元の環境では Windows 向けの mitmweb を使っているので、この話は mitmweb で検証しました。

パラメータ

プロキシ用のポートは --port で変更できます。 また mitmweb の Web 用ポートを変更したい場合は --web-port で変更できます。

たとえば以下のように実行すれば、10080と10081を使うようにできます。

C:\mitmproxy-2.0.2-windows>mitmweb --port 10080 --web-port 10081
Proxy server listening at http://0.0.0.0:10080/
Web   server listening at http://127.0.0.1:10081/

mitmdump でもこの通り。

C:\mitmproxy-2.0.2-windows>mitmdump.exe --port 10080
Proxy server listening at http://0.0.0.0:10080

InterBaseデータベースのDB容量、BLOBサイズはデータベース作成時のページサイズで決まるらしい

InterBaseの各種データ量制限を調べていて意外に手間取ったのでメモとして残す。

ネタの出典は InterBase2017 の OpGuide [http://docs.embarcadero.com/products/interbase/IB2017/ OpGuide.pdf]

ページサイズ データベース上限 テーブル上限 BLOB上限
1KB 2TB 2TB 64MB
2KB 4TB 4TB 512MB
4KB 8TB 8TB 4GB
8KB 16TB 16TB 32GB
16KB 32TB 32TB 256GB

デフォルトのページサイズは4KBだけど、通常はこれで充分だろう。

なお、最初は日本語版の OpGuide を調べたけど記述が微妙に抜けていたりするので、最終的には英語版を見たほうがよさげ。

また docwiki の情報も英語版、日本語版でそれぞれ記述が怪しかったりする場合があるので、そのへんがちょいと困る。

しかしまあ、モバイルデバイス組み込み、デスクトップ、サーバのいずれも同一データファイルで利用できるのは案外便利なのですよ。商用サポートも受けられるわけだし。

FireDACで大量のデータをデータベースに一括登録する

ちょいと調べたのでメモ。

配列DMLを用いるか、またはコマンドバッチを使う方法があるようだ。

配列DMLはクエリのパラメータに配列を使うので、同じ形式のクエリを大量に実行する場合に使える。

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/配列DMLコマンドのパフォーマンス(FireDAC)

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/配列_DML(FireDAC)

DBが配列DMLに対応していない場合はFireDACがエミュレーションしてくれるので、接続先のデータベースの仕様によらず使える。ただしエミュレーションの場合は速度は期待できないはず。

コマンドバッチは同じクエリでも異なるクエリでも良さげだけれど、個々のクエリを ; でターミネートすべきかどうかはDBによって異なることが注意点かも。

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/コマンド_バッチ(FireDAC)

Anker PowerCore Fusion 5000でMacbook Pro 2016の充電を試みる(2)

先日、こんな記事を書きました。

pslabo.hatenablog.com

しかしこれは簡易的な検証でしたので、もうちょっと内容を広げてみることにします。負荷が高い状況での比較とか、PowerPort+5との比較とか。

なお、0%~100%の充放電テストは行っていません。時間がかかってつらいので。

使用する機器

試験内容

  • そこそこの負荷をかけた場合に、Macbook Pro 2016 13inch のバッテリはどのように減るか。さらに、Anker Power Core Fusion 5000 の内蔵バッテリから給電したら、内蔵バッテリの減るペースがどの程度緩和されるか?
  • 負荷を掛けない状態でのApple純正充電器とPowerPort+5 での違いは?
  • 負荷を掛けた状態でのApple純正充電器とPowerPort+5 での違いは?

負荷の掛け方

下記コマンドを同時に4本走らせておく。

cat /dev/urandom | md5 &

試験結果

Anker Power Core Fusion 5000 の内蔵バッテリからの給電によって、Macbook Pro 2016 13inch の内蔵バッテリの減りはどの程度緩和されるか?

f:id:pslabo:20170712095027p:plain

Macbook の内蔵バッテリが減る速度は、Power Core Fusion 5000 からの給電により半減できる模様です。

負荷を掛けない状態で、Apple 標準のMacbook Pro 13inch 用USB-C充電器とAnker PowerPort +5 では充電速度がどれくらい違うか?

若干ではありますが、純正の充電器のほうが充電速度は速いです。しかし Anker PowerPort +5 でも全く問題なさげです。

f:id:pslabo:20170712095220p:plain

そこそこの負荷を掛けた状態で、Apple 標準のMacbook Pro 13inch 用USB-C充電器と Anker PowerPort +5 では充電速度がどれくらい違うか?

f:id:pslabo:20170712095229p:plain

こちらは純正の充電器のほうが相当速いですね。そういう意味では、Anker PowerPort +5 の給電能力は少々不足気味ではあります。ただし充電ができないわけではない。

結論?

Anker PowerCore Fusion 5000 は基本的には気休め程度と割り切って使う感じ。モバイルバッテリ機能が不要なら、Anker PowerPort +5 がやはりベターな感じですね。

Anker PowerCore Fusion 5000でMacbook Pro 2016の充電を試みる

Anker PowerCore Fusion 5000 はモバイルバッテリーとUSB充電器がニコイチになったデバイスなので、スマートフォンタブレットの予備充電器としてはとても便利に使えます。

しかし、このデバイスのoutputは下記の仕様ですから、USB-PD 仕様のノートパソコンを充電するにはパワーが足りません。

  • AC使用時 5V=2.1A (最大合計x2.1A)
  • バッテリー使用時 5V=3A (最大合計3A)

そのことは承知の上で、あえて Macbook Pro 2016 の充電をトライしてみることにします。

ついでに、同じく Anker の PowerPort+ 5 の充電速度も測って比べてみることにします。

試験内容

  • Macbook Pro 2016 13inch のバッテリーが空の状態で Power Core Fusion 5000 のバッテリでの充電を試みた場合に、何%まで充電できるかを確かめる。

  • Macbook Pro 2016 13inch を利用中に Power Core Fusion 5000 と接続した場合に、Macbook 内蔵バッテリーの減りをどの程度抑えられるかを調べる。

Macbook Pro 2016 13inch のバッテリーが空の状態で Power Core Fusion 5000 のバッテリでの充電を試みた場合に、何%まで充電できるかを確かめる。

実際にやってみたところ、約3時間ほどで Power Core Fusion 5000 のバッテリは空になり、Macbook Pro 2016 13inch のバッテリーは 30%程度 まで回復していました。

f:id:pslabo:20170709122649p:plain

なお、Anker PowerCore Fusion 5000接続時の給電状態は12Wでしたので、Macbook Pro を使用中に充電するには給電電力量が足りないことは言うまでもありません。しかしながら Macbook Pro 2016 13inch のUSB充電器を自宅またはオフィスに忘れてきたときに、AC電源が取れない場所で多少時間が掛かってもよいのでMacbook Proを使用しないときにバッテリーを回復させたい場合には使えそうです。

Macbook Pro 2016 13inch を利用中に Power Core Fusion 5000 と接続した場合に、Macbook 内蔵バッテリーの減りをどの程度抑えられるかを調べる。

こちらは Macbook Pro 2016 13inch で youtube で動画を再生しつつ、以下の状態を比較します。

  • Power Core Fusion 5000 をAC接続して給電した場合に充電できるか?
  • Power Core Fusion 5000 の内蔵バッテリで給電した場合に充電できるか?
  • Mac book pro 2016 をバッテリ駆動した場合にバッテリがどれくらい減るか?
  • PowerPort+ 5 でどれくらいのペースで充電できるか?

youtube の動画再生はいまどきのハードウェアには軽い負荷なので、給電系への負荷試験としては適切ではない可能性があります。

本当ならば、Macbook pro 2016 で仮想マシンを実行し、そこで youtube を再生するべきだったかもしれませんが、とりあえず今回はそういう測り方をしていません。これは後日測ってみます。

Power Core Fusion 5000 をAC接続して給電した場合に充電できるか?

基本的には、充電はできない、と考えて頂いだほうがよいです。しかしMacbook Pro の内蔵バッテリーが減るペースは抑えられるかもしれません。

以下は時間ごとのバッテリ残量の変化です。

f:id:pslabo:20170709191352p:plain

Power Core Fusion 5000 の内蔵バッテリで給電した場合に充電できるか?

今回の前提条件ではバッテリは減りませんでしたので、AC接続の場合と同様にMacbook Pro の内蔵バッテリーが減るペースは軽減できるはずですが、充電は厳しいでしょうね。

f:id:pslabo:20170709191410p:plain

Macbook Pro 2016 をバッテリ駆動した場合にバッテリがどれくらい減るか?

当然ながら、Macbook Pro を内蔵バッテリだけで駆動させるとバッテリは減ります。この試験では概ね3分ごとに1%づつ減っています。

f:id:pslabo:20170709191516p:plain

PowerPort+ 5 でどれくらいのペースで充電できるか?

Macbook Pro の内蔵バッテリが減るペースよりは速いペースでの充電が行えています。

f:id:pslabo:20170709191453p:plain

結論

  • Macbook Pro 2016 がスリープ中なら Power Core Fusion 5000 での充電は可能です。ただし相当に時間が掛かることを覚悟の上で。
  • Macbook Pro 2016 を利用中に Power Core Fusion 5000 で充電することは非常に困難なので、これを目的として購入してはダメです。ただしバッテリーの減りを軽減させる目的ならアリかもしれません。
  • PowerPort+ 5 は案外使い物になります。そこそこの出力が取れるUSB充電器が欲しいなら、現時点ではおそらくベストチョイスです。