読者です 読者をやめる 読者になる 読者になる

yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

拡張子とファイルのフォーマット

プログラミング(Other)

strimuer213p.hatenablog.com

先日Twitterでどうにも りーま氏(@strimuer213p)に拡張子とファイルのフォーマットは関係ないということが伝えられなかったので、ちょっと記事にしてみる。

ファイルの種類

まずいろんなファイルを片っ端からバイナリエディタで開いてみて欲しい。 Windowsをお使いならFavBinEditLinuxをお使いならGHexなどがいいのではないか。もちろんそんなところで宗教戦争をするつもりはないので、好きなものを使えばいい。
おれはコマンドがいいというなら、odコマンドがUnixにはあるし、GNU拡張のodコマンドはasciiの表示もしてくれる。

hex dump

さて、開いてみてわかる通り、つまるところファイルとはただ単にbyte列の羅列だ。
多くのバイナリエディタは16進数でbyte列を表示してくれるが、別に8進数で表示するもののあるし、単に見た目の問題だ。
つまりすべてのファイルは(厳密には)バイナリファイルだと言える。

これをとりあえず大きく2つに分類する。

テキストファイル

コンピュータで文字を扱うときにどうするかというと、特定のbyte列で文字を表す。文字をその特定のbyte列に直すことを、文字エンコード、と言ったりする。
この変換の規則が(広義での)文字コードである。

広義での、とぼかして書くのには理由があって、実際にはかなりややこしいことになっているのだが、

equj65.net blog.shibayu36.org

それはこの辺のサイトに説明を譲る。本題ではないからだ。

話を戻す。

とにかく、ある一つの文字コードによってエンコードされたbyte列のみで構成させるファイルをテキストファイルと呼ぶ。

(一般的な意味での)バイナリファイル

先ほど、

つまりすべてのファイルは(厳密には)バイナリファイルだと言える。

と書いたが、一般にバイナリファイルと言われて指すものはそうではなく、すべてのファイルからテキストファイルを除いたものである。

テキストファイルの種類

テキストファイルといってもさまざまな種類がある。 どういうことかというと、何らかのルールにしたがって羅列されたテキストファイル、というのがある。

例えばHTMLは、W3Cが定めたHTML規格に則って文字列を記述することで、例えばブラウザでいわゆるWebページを作れる。
Markdownは一応CommonMarkが標準規格としてあって、それにしたがって記述すれば、適当なツールでHTMLに変換できる(GFMはなんなんだという話はさておき)。
xmlは特定のデータ集合をソフトウェア間でやり取りするときに用いられ、xml上でのデータ構造そのものに意味がある。

(一般的な意味での)バイナリファイルの種類

バイナリファイルの形式は千差万別である。 C言語の構造体をそのまま書きだしたものと思ってよく、したがってバイナリファイルを扱うには処理系依存との戦いが開催される(C言語規格書の処理系依存部分との戦いの他に、エンディアン(バイトオーダー)との戦いがある)。多くのバイナリファイルフォーマットはバイトオーダーについて規定している(していないフォーマットはバグっている)。 このポータビリティ(可搬性)の低さと、多くのプログラミング言語で扱いが難しいことから、敬遠されやすい[要出典]

今日では、データが膨大になりやすい画像・音声・映像、それを格納するコンテナのフォーマットとして利用される傾向にある。

bmpは画像フォーマットの一つで、0x42 0x4dから始まる。

doc/xls/pptMicrosoft Officeで最もよく利用されていた利用されるファイルフォーマットである。

mp4は一般に映像や音声を格納するコンテナである。mp4そのものは映像フォーマットでも音声フォーマットでもないが、映像圧縮にh.264、音声圧縮にaacを使った(mp4(h.264/aac)と表記することが多い)mp4ファイルが広く流通しすぎた結果、mp4を映像フォーマットと勘違いしている人が多い。

zipはディレクトリ構造をファイルに変換すると同時に圧縮を行うことを想定しているファイルフォーマットである。もっとも圧縮は義務ではなく、複数の圧縮アルゴリズムから選択できる。一般的にはRFC 1951で規格化されたDEFLATEが圧縮アルゴリズムに採用されている。

また忘れてはいけないものとして、実行ファイルもある。Windowsなら.exeという拡張子がついている。

テキストファイルを特定のディレクトリ構造に配置したものをzip圧縮したファイルの種類

上記のようなバイナリファイルは扱いが難しいことから、複数のテキストファイルなどをzipで固めたものを独自のフォーマットとすることも多い。またこうすることで可搬性とデータサイズの小ささを両立しやすい。

こうしたファイルは特定の形式のファイルを特定のディレクトリ構造に配置したものをzipで圧縮していることを要求する。つまりzipファイルの特殊例(部分集合)である。

odt/ods/odp/odb/odg/odfはLibre Officeやその前身のOpenOfficeなどで最もよく利用されているファイルフォーマットである。実はMicrosoft Officeでも取り扱える。OpenDocument Formatと呼ばれ、ISO/IEC 26300などで標準化されている。

docx/xlsx/pptxOpenDocument Formatに対抗してMicrosoftが開発したファイルフォーマットでMicrosoft Officeで現在もっともよく利用されている。Office Open XMLと呼ばれECMA-376、ISO/IEC 29500:2008で標準化されている。

ただしここで大急ぎで補足しよう。

こう書くとバイナリファイルが2種類あると勘違いする人がいるかもしれないが断じて違う。
そもそも特定のディレクトリ構造をファイルに固めることができるファイルフォーマットはなにもzipだけではない(tarとかとか)。
zipファイルだって(一般的な意味での)バイナリファイルに含まれる
あえて数式で書けば、zip∈バイナリファイルだ。

ファイルはOSからどのように管理されるか

すこし話が変わる。FAT32とかNTFSとかext4とかという単語を聞いたことがあるだろうか?

私たちは普段ファイルを管理するのにディレクトリ(フォルダー)という概念を使っている。
これを実現しているのがさっき述べたようなディスクファイルシステムだ。

ファイル名や作成日時、更新日時、アクセス権限や、ディスクのどのセクターに書き込まれているかなどといった(例外はある)ことを管理している。

よく聞く拡張子とは、じつは単にファイル名の末尾から最初に現れた.までの文字列を(ただしファイル名の最初の文字が.の場合を除く)そう呼んでいるに過ぎない。

拡張子の役割

じつは何もない。むしろいらない。(大げさ)

しかし、人間がファイルを見てそれがどういう種類のファイルなのか判別するのにどうすればいいのかという問題がある。

バイナリファイルだけだったら、ファイルを解析して各フォーマットに固有なマジックナンバーを探すことで適切に処理ができる。それをパースして見せるソフトウェアがあれば人間はファイルの種類を判別できる。

しかしテキストファイルはそうはいかない。
xmlやhtmlのように冒頭で種類を宣言している場合はともかく、そうでない場合のほうが圧倒的多数である。

またファイルを解析するという作業は一度ファイルを開く必要があり、ディスクファイルシステムを見ればいいだけである拡張子をみる作業よりコストが高い。

そこで拡張子の出番だ。予めファイルの種類に対応する拡張子(かつてはアルファベット3文字程度が多かったが、しょっちゅう被るので最近は.vcxprojのように長いものが多い気がする)を利用者の間で決めておく。例えばWindowsでは実行ファイルはexecuteを省略して.exeを拡張子にするというコンセンサス(合意)がある。

C言語プリプロセッサとテキストファイルと拡張子

C言語を学習している人のために、もう一つ例を見てみよう。

御存知の通り、C言語ソースコード.cC言語のヘッダーファイルは.hという拡張子を主に使う。ここで

#include "a.h"

のようなソースコードC言語を学んだ人なら誰でも書いたことがあるだろうが、

#include "b.c"
#include "table.csv"

とかいうコードを見るととたんに頭がこんがらがる人いる。

これはC言語の入門書や入門サイト、はたまた学校での講義などが悪い。[要出典]

#includeはヘッダーファイルを読み込むときに使う構文ですよ。
ほら、#include <stdio.h>とかくとprintf関数が使えるでしょ?

などという嘘八百を平気で教えている。ひどいことにプリプロセッサが何かという説明すらしていないことも多い。
ハローワールドを教えた直後ならともかく、一通り教えたあとでもそんなことではお話にならないが、学校での講義や入門サイトはおおよそ例外なくそうなってしまう現状にあり[要出典]、入門書でも記述していなかったりする。
(なお独習Cは筆者にとっては残念なことに正しく解説がなされていたように思う)

C/C++にはプリプロセス時、コンパイル時、実行時の3つの世界が存在するが、

#includeとはこの内プリプロセス時にプリプロセッサによって解釈される構文だ。

機能としては、#include文を対象ファイルから消し去り、代わりに#include文で指定されたテキストファイルをその場所にコピペする、と言うものだ。

cpplover.blogspot.jp

[PDF] N4214: A Module System for C++ (Revision 2)

40年前のコピペ技術である#inludeにかわるモジュール機能の提案。

現在、C++が使っているコンパイルとリンクモデルは、C言語から受け継いだものである。各翻訳単位は、他の翻訳単位のことを一切知らずに処理される。翻訳単位を超えるには、名前リンケージ(シンボル名)を使う。名前に対応する定義はひとつだけでなければならない(ODR)。

翻訳単位の外に見える名前である外部名を、手動によるコピペで管理することを防ぐために、我々は40年前の技術である自動コピペ技術、プリプロセッサーによるヘッダーファイルを未だに使っている。これは、コンパイラーからみれば、コピペである。

ヘッダーファイルの中身はマクロによって書き換わってしまうおそれがあり、誤りの元である。

変数や関数の宣言ぐらいしか書かれていなかった昔のC言語ならば、まだ十分に耐えられたのだが、モダンなC++では、ヘッダーファイルには実行されるコードが記述されている。コンパイラーは翻訳単位ごとに重複した内容を処理しなければならず、現代のC++コンパイル時間の増大の原因になっている。

ただの自動コピペ機能なのだからテキストファイルならなんでも読み込める。まあそのあとコンパイルエラーになるかどうかは別問題であるが、それはコンパイル時のお話だ。

csvプリプロセス時読み込みはcsvに多少細工をしておくことで

qiita.com

に書いたように意味のあることに使える。

拡張子とソフトウェアの関連付け

Windows

Windowsの場合、拡張子とソフトウェアの関連付けはOSレベルで提供されている。

www.atmarkit.co.jp

もっというとレジストリに関連付け情報が記録されている。

レジストリの直接編集によるファイルの拡張子と関連づけ - Glamenv-Septzen.net

Mac

知らず

Linux

ない。なぜならばユーザーはどうせ適切なコマンドにファイルを渡すのだから。

ただ、GUI操作においては、ダブルクリックしたら適切なソフトが立ち上がらないと不便なので、ファイラーが関連付け機能を提供している。

まとめ

すべてのファイルは厳密にはバイナリファイルと言える。
すべてのファイルはテキストファイルであるかそうでないか(一般的な意味でのバイナリファイル)で分類される。
つまり、一般的な意味でのバイナリファイルとテキストファイルは全てのファイルの部分集合である。
またバイナリファイルと言っても、特にzipファイルは特定のファイルが特定のディレクトリ構造をとる場合の特殊例に名前がついていることがある(ex. xlsx)
zipファイルは一般的な意味でのバイナリファイルの部分集合であり、xlsxファイルはzipファイルの部分集合と言える。

さまざまな角度から拡張子とファイルのフォーマットについて見てきた。それぞれが全く異なるものであることがご理解いただけただろうか?そうであれば幸いだし、そうでなくても調べるきっかけくらいにはなっただろう。

をるふちゃんが懲りずにコミュニティを作ったらしいので参加した

プログラミング(Other)

wolf-cpp.hateblo.jp

ということで、自称Twitterよりきもち情報濃いめのゆるふわコミュニティに参加しました。

C++の会のSlackよりもだいぶゆるふわしている感じです。C++以外にもC#,lisp,ruby,Scala,php,go,python,Haskellなんかのチャンネルが

一応TOPページは

hackmd.io

から。


早速Wiki編集してきた

hackmd.io


追記

SlackとDiscord両方立ち上げるのが面倒なので、Franzというアプリを入れた。
Franz – a free messaging app for Slack, Facebook Messenger, WhatsApp, Telegram and more

唯一の欠点はDiscordの〜〜をプレイ中という機能が使えないことだろうか。
電卓をプレイ中は草。

FC2からはてなブログに移行した

はじめに

私は今まで フリーソフトの旅(windows) という、FC2のブログサービスを利用してほそぼそとブログを書いていたのだが、この度、はてなブログに移行した。

移行した理由

  • FC2で使っていたデザインテンプレートがHTML4.01で、HTML5にする作業をしてみたが思いの外面倒だった
  • 基本的に写真はGoogle Picasaに置いてそれを呼び出すようにしていたのだが、Google PicasaGoogle Photosになった時に、画像埋め込みリンクが簡単に取得できなくなったが、はてなブログにはGoogle Photosとの連携があるので極めて簡単に写真を貼り付けられる
  • Markdownが使える、HTML直書きしなくていい
  • はてなブログのデザインはGithub上でLESSファイルで提供されており、CSSのように人間を卒業しなくてもカスタマイズできる
  • はてなブログのデザインはレスポンシブデザインに対応している
  • はてなブログのデザインをShippableと組み合わせて自動デプロイする作業に憧れた
  • フリーソフトの旅(windows)」という前のブログのタイトルと中身があっていなかった
  • プログラマー界隈はやっぱりはてぶろ勢が多い
  • カテゴリーがFC2より柔軟

Markdownが使えるっていうのは大きいですね。wysiwygエディタは信用していないので(FC2のやつが吐くコードは糞だった)HTML直書きしていたんですが、さすがにつらみがあった。

移行のときに参考にしたもの

tsubakit1.hateblo.jp

なんかこの方は画像の移行に苦労しているけれど、ほとんどの画像はすでにGoogle Photosにあったので何もする必要がなかった。
Picasaを知る前に書いた記事2本だけはFC2に画像置いていたからこれはMarkdownで自力で書き直した。

また、この方はわざわざはてなダイアリーを経由しているが、そんなことはしなくても普通にいけた。もともとFC2ではHTML直書きしてたから、というのもあるのだろうか。 FC2のときはFC2解析を使っていたのでそのコードを各記事に埋め込んでいたのですが、それはFC2からExportしたテキストファイルの段階で消しました。

デザインの自作

できればあまりデザインを変えたくなかったのですが、FC2のブログデザインで使われている背景画像は著作権的にこっちに持ってこれないので、適当な画像を探していたら、

www.pakutaso.com

を見つけまして、ええやん、となって

github.com

一気に開発しました。

LESSとJavaScriptで開発しています。いや、JavaScriptはいらないはずなんですが、ブログタイトルのmarginpaddingを弄って背景画像とブログ記事の開始位置の相対位置を固定したくて使ってます。CSSだけだとまだ動的に幅の参照とかできないはず。HTML構造ごと変えればCSSだけにできるけどだるいのでJavaScript使ってます。

書いたLESSとJavaScriptはShippableというCIに投げつけて、LESSはCSSにしてminify、JavaScriptGoogle Closure Compilerでminify&ES5化してます。この辺は後でQiitaにでも書く予定。

追記

qiita.com

書いた。

不満な点

HTTPS化できないことかな。

かと言ってサーバー立ち上げたり借りたりしてWordPress使う気にはなれなかったし、 友人が

173210's Blog

でやってるみたいにGithub pages使うことも考えたけど、それはそれでコメントシステムとかどうすんの?という思いがありはてなブログ使っているけど。

まだ移行できていないもの

雲取山に登山した記事

雲取山に登山した記事で国土地理院の地図に書き込みしたものを公開しているのだが、国土地理院側の仕様変更がいつのまにかあったらしく壊れていた。今ちまちまコンバーターを書いている。

SyntaxHighlighter

はてなブログにはもともとSyntaxHighlightしてくれるやつがあるっぽい。実際使ってみたが、正直気に入らない。 あとインポートした記事のSyntaxHighlightは記法がちがうのかうまく行ってないのでどのみちSyntaxHighlighterが必要そうだ。

追記

試しに有効にしたらMaximum call stack size exceededとでて、かつトップバーが読み込まれないので、あきらめモード。data-unlink=""とかそういう問題じゃない。 minifyされてないSyntaxHighlighterで試したらなんかそこかしこで無限再帰している。はてなブログのなにが干渉しているのだろう。かといってiframesrcdoc使うのはなぁ・・・。

広告が表示されない

これは大問題だ。 Imgur この12個のエラー、どうにかならないのか・・・。

元記事からのリダイレクト

これどうすっかな・・・。まあJavaScriptで書くんだけど、URLががらっと変わってるもんで、厳密に各記事をリダイレクトするには変換テーブルを持っておく必要があるな・・・。

AviUtlの導入

動画系

最終更新日:2017/1/27

うーん、いくらなんでもごちゃごちゃし過ぎだな、簡略版を別途書くか・・・。

注意:現在pop.4-bit様のサイトは仮運用でもしかすると不安定です。
勝手にダウンロードリンク集 (2014.05)|rigayaの日記兼メモ帳
等も参考にしてください。

さて、動画編集といえばなんといってもAviUtlです。というわけで導入をしていきましょう。
ダウンロードって何?という人はこちら。
ダウンロードとは 【 DL 】 【 download 】 - 意味/解説/説明/定義 : IT用語辞典
http://e-words.jp/w/E38380E382A6E383B3E383ADE383BCE38389.html

AviUtlInstaller

Maverick氏があまりに煩雑なプラグイン導入までも自動化するすごいインストーラを開発しました。

これだけで最低限必要なプラグインが全て揃います。使い方は上記動画を参考に。

Download: http://www.videohelp.com/software/AviUtlより「Download AviUtl Extra Pack 1.13 (direct link) 」をクリック

あれ、この記事いらないんじゃね・・・。今後に期待。

目次
  1. まずはインストールたほうがいいものを
  2. プラグインとかダウンロード
    1. はじめに - 自動化ツール
    2. プラグイン
    3. auo_setup.exe派・手動派のみ必要なもの
    4. 手動派のみ必要なもの
  3. いろいろ配置していく
    1. Aviutlアップデートセット派
    2. x264guiEx付属のauo_setup.exe派
    3. 手動派
  4. 設定していく
  5. 拡張 x264 出力(GUI) Exについて
  6. tune touhou問題
  7. メモ
    1. L-SMASH Worksについて
    2. なぜノイズフィルターが必要かについて
    3. H.265
    4. AviUtlをWine on Linux Mint で
    5. その他
    6. 感謝
  8. リンク集(参考リンクとかとか)

まずはインストールたほうがいいものを

.NET Framework 4.0以外は基本任意。

  1. .NET Framework
    アップデートセット落としていれば不要。auo_setup.exe使うなら不要。
    大抵入ってるけど、一応確認。入ってるのかわからない人は
    http://homepage2.nifty.com/digitalcraft/help/dotnetver/
    で確認(IEじゃないとダメ)
    XP、VISTA、7の方
    Microsoft .NET Framework 4 Clinet Profile
    Microsoft .NET Framework 4 Client Profile 日本語 Language Pack
    x264guiEx 2.xxからは.NET 4以外不要。
    参考リンク:http://rigaya34589.blog135.fc2.com/blog-entry-370.html
    Microsoft .NET Framework 2.0 Service Pack 2
    Microsoft .NET Framework 2.0 Service Pack 2 (x86) 日本語 Language Pack
    Microsoft .NET Framework 4.5
    8の方→もう入ってるよ
  2. empty.exe
    MS謹製メモリー解放ソフト。AviUtlはメモリー管理があまり上手じゃないらしいので大規模な編集のお供に
    解説サイト:http://jutememo.blogspot.jp/2012/01/blog-post_10.html
  3. On2 VP6 VFW codec
    http://www.free-codecs.com/VP6_download.htm
    からダウンロードする。インストールは基本的に「NEXT」を選べば問題なし。
    後述するFLV (VP6/MP3) 出力で必要。K-Lite Codec PackのFullパックに入っていたらしい。
  4. Windows Media Video 9 VCM
    Windows Media Video 9 VCMはマイクロソフトが開発した評判の良いコーデック。
    [DL]http://www.microsoft.com/en-us/download/details.aspx?id=6191
    [日本語化バッチ]http://www.nihongoka.com/jpatch_main/wmv9vcm/
    [解説]http://www.gigafree.net/media/codec/windowsmediavideo9vcm.html
  5. Microsoftコンポーネント
    ・・・インストールする意味を見出せない。x264guiEx 2.xx に.dll付録してるから、それコピー。
  6. Ut Video Codec Suite
    可逆圧縮コーデック。AVIで中間出力するときとか使えそう。任意で
    32bit版と64bit版が有り、マルチスレッドを考慮した作りになっている
    http://umezawa.dyndns.info/wordpress/?cat=28
  7. DivX
    DivX1
    高画質・高圧縮率を実現している。h.264が出現するまで最強だった。アマレコTV使うときとか便利。任意で。
    http://www.divx.com/ja
  8. Xvid
    Xvid
    DivX」 の商用化に反発した、一部のDivX プログラマーが開発したビデオコーデックで、動画をDivX
    同等かそれ以上の品質で圧縮することができます。 任意で。
    http://www.koepi.info/xvid.html
  9. LAME
    MP3の定番コーデック。きっと要らないけど一応書いておく。インストールがちと面倒なので解説参照
    http://www.free-codecs.com/lame_acm_codec_download.htm
    [解説]http://senryaku.sengoku-jidai.com/Freesoft/AviUtl.html

プラグインとかダウンロード

はじめに - 自動化ツール

あまりに落とすべきものが多いので、導入をある程度自動化してくれるツールが誕生しております。
  • x264guiEx 2.xx付録のauo_setup.exe(作者:rigaya
    x264guiEx 2.xx
    最新っぽいもの(執筆時はx264guiEx_2.35v6.zip)をクリックしダウンロード。
  • Aviutlアップデートセット(作者:RRX
    http://sdrv.ms/1349Lwq
    から最新っぽいもの(執筆時はAviutl_Updateset_3.18.zip)をクリックしダウンロード。

auo_setup.exeの修正法
2014.05.16 x264guiEx インストール失敗の回避
2014/09/20くらいまでneroaacのサイトが閉鎖していて先行き不透明だったことから、auo_setup.exeではx264guiEx 2.15からqaac.exeを使うことになりました(neroも使えるけど)。

これらで落とせるのは

x264guiEx 2.xx 付録のauo_setup.exe Aviutlアップデートセット
---
AviUtl
拡張 x264 出力(GUI)Ex 拡張 x264 出力(GUI)Ex
x264.exe(x264_L-SMASH版かkomisar版落とせる方) x264.exe(komisar版)
qaac.exe neroaacenc.exe
---
MP4Box
L-SMASH(remuxer,muxer等) L-SMASH(remuxer,muxer等)
---
L-SMASH Works
---
Aviutlアップデートセット自身

となっており、アップデートセットは自動更新機能付きです。
使うも使わないもあなた次第。お好きなモノをどうぞ。

ちなみに、もしLinuxとかでwine上に入れたいときは多分アップデートセットは使えないんじゃないかなぁ。auo_setup.exeは実際に作者さんが実験してるから、x264guiEx 2.04以降なら大丈夫のハズ(なんか俺の環境だと失敗するけど。詳細は下記サイトコメント及びメモへ)
wine上のAviutl+x264guiExでエンコード
http://rigaya34589.blog135.fc2.com/blog-entry-435.html
AviUtlアップデートセット、auto_setup.exeともにレジストリには触っていません。.net4.0のインストールだけです。
http://rigaya34589.blog135.fc2.com/blog-entry-398.html#comment1943?

プラグイン

いいなぁと思ったものをどんどん列挙していきます。オレンジの字はとくに良さそうなもの。

いろいろ配置していく|Aviutlアップデートセット派

auo_setup.exe派・手動派のみ必要なもの


いろいろ配置していく|x264guiEx付属のauo_setup.exe派

手動派のみ必要なもの

いろいろ配置していく|手動派

いろいろ配置していく

まあ、最初に決めた宗派のやり方にそって。
ライブラリとかC:\users\とかC:\Program FilesとかC:\Windowsにインストールしちゃだめなことくらいは察してね。OSの保護機能がいろいろ邪魔する(ファイルの書き換えまわり)ので。

Aviutlアップデートセット派

  1. まずはウィルスチェックをする
  2. CubeICEとかとかお好みのソフトでAviutl_Updateset_x.xx.zipを解凍する。
  3. 「Aviutl_Updateset」→「plugins」を開きdamy.txtを読む。なんで読むか?だって面白いし。
  4. 「Aviutl_Updateset」→「Aviutl_Updateset」を開く
  5. update-setting.txtを編集する。まあお好みで。
    私はこんな感じ。
    http://simp.ly/publish/fQqvVY
  6. update.batを実行する。ちゃんと設定していればAviUtl本体も拡張編集もx264guiExも入るはず。このときdamy.txtは消滅する。
  7. CubeICEとかとかお好みのソフトで残り全部解凍する
    解凍前のはどっかにとっておくといいかもしれない。MakKi's SoftWareみたいにいきなりHP閉鎖したりするかもしれないし。
  8. 「Aviutl_Updateset」→「plugins」を新しいウィンドウで開く
  9. 先ほどダウンロードしたプラグインたちを「plugins」に移動していく。
    exedit92は全部コピー、MPEG-2 VIDEO VFAPI Plug-in のm2v.vfpをm2v.auiにリネーム、m2vconf.exe,mme.exeもコピー。fcacheはfcache1.aufだけでいいと思う。
    ほかは拡張子がauf,aui,vcmのものを「plugins」に移動。新しいウィンドウで開いたのはこの時の作業を効率化するため。
  10. exeファイルはaviutl.exeのあるフォルダーに「exe_files」とかつくってまとめておくのは激しく推奨しない。やりたいならバッチ書き換えろ。
  11. qaacを導入する場合は、QuickTimeInstaller.exeを解凍する
    7-zipやCubeICEで。ダブルクリックじゃない
  12. コマンドプロンプトを立ち上げ、次のように実行
    pushd [AppleApplicationSupport.msiのある場所]
    msiexec /passive /i AppleApplicationSupport.msi
    popd
  13. qaac_x.xx.zipの中身をAviUtl.exeと同じフォルダーとか、pluginsフォルダーが―あるときはAviUtl.exeより下のディレクトリに入れる
設定していく

x264guiEx付属のauo_setup.exe派

  1. まずはウィルスチェックをする
  2. CubeICEとかとかお好みのソフトで全部解凍する
  3. 解凍前のはどっかにとっておくといいかもしれない。MakKi's SoftWareみたいにいきなりHP閉鎖したりするかもしれないし。
  4. ええっとx264guiEx_x.xxを開いて
    x264guiEx_readme.txt
    を読みつつ
    auo_setup.exe
    を実行。neroaacのかわりにqaacが入るようになっています。
  5. 「aviutl100」というフォルダーを新しいウィンドウで開く
  6. 「plugins」というフォルダーを作り開く
  7. 先ほどダウンロードしたプラグインたちを移動していく
    exedit92は全部コピー、MPEG-2 VIDEO VFAPI Plug-in のm2v.vfpをm2v.auiにリネーム、m2vconf.exe,mme.exeもコピー。fcacheはfcache1.aufだけでいいと思う。
    ほかは拡張子がauf,aui,vcmのものを「plugins」に移動。新しいウィンドウで開いたのはこの時の作業を効率化するため。
設定していく

手動派

  1. まずはウィルスチェックをする
  2. CubeICEとかとかお好みのソフトで全部解凍する
  3. 解凍前のはどっかにとっておくといいかもしれない。MakKi's SoftWareみたいにいきなりHP閉鎖したりするかもしれないし。
  4. 「aviutl100」というフォルダーを新しいウィンドウで開く
  5. 「plugins」というフォルダーを作り開く
  6. x264guiEx_x.xx\auoにあるものを全て「plugins」に移動。
  7. 先ほどダウンロードしたプラグインたちを移動していく。但しAviutl_Updatesetはとりあえずシカト。
    exedit92は全部コピー、MPEG-2 VIDEO VFAPI Plug-in のm2v.vfpをm2v.auiにリネーム、m2vconf.exe,mme.exeもコピー。fcacheはfcache1.aufだけでいいと思う。
  8. ほかは拡張子がauf,aui,vcmのものを「plugins」に移動。新しいウィンドウで開いたのはこの時の作業を効率化するため。
  9. exeファイルはaviutl.exeのあるフォルダーに「exe_files」とかつくってまとめておくといいかも。
  10. qaacを導入する場合は、QuickTimeInstaller.exeを解凍する
    7-zipやCubeICEで。ダブルクリックじゃない
  11. コマンドプロンプトを立ち上げ、次のように実行
    pushd [AppleApplicationSupport.msiのある場所]
    msiexec /passive /i AppleApplicationSupport.msi
    popd
  12. qaac_x.xx.zipの中身をAviUtl.exeと同じフォルダーとか、pluginsフォルダーが―あるときはAviUtl.exeより下のディレクトリに入れる

設定していく

  1. AviUtl起動!aviutl.exeだよ。
  2. AviUtl上部メニューバーのファイル→環境設定→システムの設定と開く。
    最大画像サイズを幅「1920」、高さ「1080」に設定する。これでフルHD対応だ。

    引用
    http://www.geocities.jp/o94_4/mp4enc.html#2
    [注意]必要以上に最大画像サイズや最大フレーム数、キャッシュフレーム数を上げすぎるとメモリ不足の大きな原因になってしまいます。
    [ヒント]初期値の320000フレームで処理できる総時間は29.97fpsの動画で約178分間までです。

  3. 上部メニューバーのファイル→環境設定→入力プラグイン優先度の設定で画像のように設定する。
    explain1
    DirectShow File Readerはなるべく下に(あくまで最終決戦兵器)、
    AVI/AVI2 File Reader、Wave File Reader、MPEG-2 VIDEO File Readerなど、動作の早そうなものはなるべく上にするのがポイント。
  4. 上部メニューバーの表示→時間の表示にチェックを入れる。
    タイトルバーに現在位置の時間が表示されるようになる。
    explain2
  5. AviUtl終了!
  6. 「plugins」フォルダー内のm2vconf.exe起動。画像みたいになってるか確認、終了。
    explain3

拡張 x264 出力(GUI) Exについて

これにはプロファイルを作る機能がついていて、デフォルトでいくつか入っていますが、
を利用するとさらに便利かもしれません。

また
拡張 x264 出力(GUI)の設定項目とその機能について
http://nicowiki.com/拡張 x264 出力(GUI)の設定項目とその機能について.html
にまず目を通してください。

tune touhou問題

これはx264.exeについてになりますが、--tune touhouというオプションが存在します
x264.exe --fullhelp
とするとtuneオプションが全部出てくるんですが、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12119928032
によれば、ヘルプからはr1426の時点で削除されたみたいです。

これは開発陣数名が東方厨…(マジで)なので設けられたオプションらしいです。animationとgrainの中間のような感じだそうです。
もっぱら弾幕ゲームやReflecBeat向けです。
詳細は

魔道学研究所  東方のプレイ動画を綺麗にエンコしようforx264gui
http://es2z.blog98.fc2.com/blog-entry-53.html
x264各プロファイル毎のエンコードテスト。
http://kusurubird.blog74.fc2.com/blog-entry-111.html

を見て欲しいのですが、

--preset slow --tune touhou --psy-rd 0:0.2 --ipratio 1.65 --qcomp 0.65 --qpstep 12 --partitions all --scenecut 30 --min-keyint 60 --keyint 600 --b-adapt 2

とかしてあげるといいかもしれません。

追記
あるかないかわからないとか言いましたが、あります。アップデートセットの作者のRRX氏に感謝。

RRX氏とのメールを引用
x264ですが、 fullhelpには残念ながらチューニングの"touhou"は存在しません。が!
公式ソースコード
http://download.videolan.org/pub/videolan/x264/snapshots/
x264-snapshot-20160207-2245-stable.tar.bz2を解凍して、
x264-snapshot-20160207-2245-stable\common\common.c

else if( !strncasecmp( s, "touhou", 6 ) ))//←これね。
{
    if( psy_tuning_used++ ) goto psy_failure;
    param->i_frame_reference = param->i_frame_reference > 1 ? param->i_frame_reference*2 : 1;
    param->i_deblocking_filter_alphac0 = -1;
    param->i_deblocking_filter_beta = -1;
    param->analyse.f_psy_trellis = 0.2;
    param->rc.f_aq_strength = 1.3;
    if( param->analyse.inter & X264_ANALYSE_PSUB16x16 )
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
}
else
{
    x264_log( NULL, X264_LOG_ERROR, "invalid tune '%s'\n", s );//←ここで存在しないチューニングオプションはエラーを返す。
    x264_free( tmp );
    return -1;
}
と存在し、正しく動作しているので、おそらくイースターエッグです。
*イースターエッグというのは開発者が遊び心で入れた機能および要素の事。
一般使用者には分からないように細工される。
Googleでzerg rushと検索すると出てくるものもこれの一種。

メモ

L-SMASH Worksについて

というものが2chDTV板AviUtlスレ住民によって作成されました。参考に。

なぜノイズフィルターが必要かについて

魔道学研究所  投稿用動画用のフィルタ
http://es2z.blog98.fc2.com/blog-entry-35.html

H.265

なんかx265のもあるなぁ、まもなく主流になるはず。
[公式HP(rigaya氏)]http://rigaya34589.blog135.fc2.com/
[紹介記事]開発中x265でH.265/HEVCエンコード試用

AviUtlをWine on Linux Mint で

にしてもなんでWine上でうまくいかないんだろ。
GUIはずーっとカラー計算ばっかやってるのでやむなくkill
CUI
wine auo_setup.exe -nogui -dir /home/yumetodo/wine32/drive_c/AviUtl -update-ini -update-stg
とやったらインストールは出来たものの(途中「fixme:thread:NtQueryInformationThread info class 16 not supported yet」)、実験にWMVファイルを読み込んだら読み込めず。Aviファイルを拡張編集に読み込んで出力しようとしたら

「アドレス"0x30312065"で例外"0xc0000005"が発生しました。 発生モジュール:Unknown
備考:OUTPUT_PLUGIN_TABLE::func_config()[拡張 x264出力(GUI)Ex]
正常な動作ができない可能性がありますが、処理を継続しますか?」

となり、「はい」を押してもなんらレスがなく
と言った状態。やれやれ。

環境
linuxmint-16-cinnamon 64bit 
wine 1.6.1 

その他

アップデートセットが失敗するときはそもそもPATHにxcopy.exeがあるか確認。

ロゴを除去する編集方法

感謝

このページはRRX氏に査読して頂いており、それなくしてはこのような惨劇が繰り広げられていたことでしょう。心より感謝申し上げます。

リンク集(参考リンクとかとか)

Re:ある「プロ」の書いた、初心者向けc言語入門プログラム

プログラミング(C/C++)

きっかけ

ある「プロ」の書いた、初心者向けc言語入門プログラム: わき道

見てみると、コードの書き方云々の前にアルゴリズムがあかん。テーブル全数探査とか馬鹿げている。

全部書き直した

というわけで書き直した。

使用例。

気になる実装

まずアルゴリズムを変更した。

  1. 母音
  2. 子音+母音
  3. 子音+(y)+母音
  4. 子音+(y/h)+母音

この4つのテーブルに分けて、先頭文字からどのパターン化を判別し、変換するようにした。

元のプログラムではバッファーの大きさを取ってないわ、変換終了時のソースと出力の変換後の位置は取れないわでお話にならないので、strtol関数を参考に書き換えた。

内部ではC++イテレータのように作業位置のポインタと終端のポインタを持つようにした。下手にindexに変換するとsigned/unsignedが面倒だからだ。

エラー処理は、enumを書いてそれのformatterをつくるというありきたりな実装にした。その気になればstd::error_codeでのラップも簡単だろう。

VPS上のLinuxのユーザー空間にArch Linuxの環境を構築する話(2)

プログラミング(Other)

はじめに

まあまずは
VPS上のLinuxのユーザー空間にArch Linuxの環境を構築する話 — 173210's Blog
をみてもらうとして、これをmsys2上からやるときにどうするかという問題がある。

とりあえずそのままでは動かないので手順を書いておく。なおprootはサーバー管理者が上記記事のように入れてくれていることを前提にする。

msys2上での作業

まずこんなファイルを適当な場所に作っておく。

%echo Generating pacman keyring master key...
Key-Type: RSA
Key-Length: 2048
Key-Usage: sign
Name-Real: Pacman Keyring Master Key
Name-Email: pacman@localhost
Expire-Date: 0
%no-protection
%commit
%echo Done
EOF

次に秘密鍵を生成してサーバーに転送する。

$gpg --homedir gnupg --gen-key --batch < tmp.txt
$tar cf gnupg.tar gnupg
$scp -P 110 gnupg.tar yumetodo@kagucho.net:

VPN上での作業

まずはbootstrap用imageを落としてくる。

bootstrap用イメージはArch Linux - Downloadsからテキトーなミラーのリンクを踏めば見つかる. 試しにftp.tsukuba.wide.ad.jpに行ってみると無造作にファイルが置かれた中にarchlinux-bootstrap-2016.11.01-x86_64.tar.gzがあるのでこれを使う.
$ cd ~
$ wget http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/iso/2016.11.01/archlinux-bootstrap-2016.11.01-x86_64.tar.gz -O - | tar xz

proot上のpacman用のmirrorlistを編集する。すでに用意されているmirrorlistのうち近そうなサーバーのコメントアウト(#)を外せば良い。もちろんテキストエディタは好きなものを使えば良い。nanoの場合はCtrl+OEnterすれば保存、Ctrl+Xで終了だ。

$ nano root.x86_64/etc/pacman.d/mirrorlist

先程転送した秘密鍵を展開する。

$ tar -C root.x86_64/etc/pacman.d -xf gnupg.tar

準備が整ったのでprootでArch Linuxを開始するのだが、起動コマンドが長すぎてやってられないので、aliasを貼る。.bashrc

alias 'archlinux=proot -0 -b /etc/resolv.conf -m /dev -m /sys -m /proc -w / -r root.x86_64'

としておく。.bashrcを反映するためにsshし直すとかなんかして、

archlinux

で起動する。

proot上での作業

まずはgpgの初期化をする。

# pacman-key --init
# pacman-key --populate archlinux

さて、ここまでくればmsys2ユーザーにとっては日常だ。

# pacman -Syuu
# pacman -S base-devel git clang openmp gdb lldb

しばらく時間がかかるので放置したのち、動作確認だ。

# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release

Thread model: posix
gcc version 6.2.1 20160830 (GCC)
# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release

Thread model: posix
gcc version 6.2.1 20160830 (GCC)
# clang -v
clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/6.2.1
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/6.2.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1
Found candidate GCC installation: /usr/lib64/gcc/x86_64-pc-linux-gnu/6.2.1
Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/6.2.1
Candidate multilib: .;@m64
Selected multilib: .;@m64
# clang++ -v
clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/6.2.1
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/6.2.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1
Found candidate GCC installation: /usr/lib64/gcc/x86_64-pc-linux-gnu/6.2.1
Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/6.2.1
Candidate multilib: .;@m64
Selected multilib: .;@m64
# gdb -v
GNU gdb (GDB) 7.12
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
# lldb -v
lldb version 3.9.0 ( revision )
# python --version
Python 3.5.2
# python2 --version
Python 2.7.12
# git --version
git version 2.10.2

試しにhttps://github.com/yumetodo/string_splitでもビルドしてみるか。

# cd ~
# git clone https://github.com/yumetodo/string_split.git
Cloning into 'string_split'...
remote: Counting objects: 310, done.
remote: Total 310 (delta 0), reused 0 (delta 0), pack-reused 310
Receiving objects: 100% (310/310), 50.20 KiB | 0 bytes/s, done.
Resolving deltas: 100% (174/174), done.
# cd string_split/
# git submodule update --init
Submodule 'iutest' (https://github.com/srz-zumix/iutest.git) registered for path 'iutest'
Cloning into '/home/yumetodo/string_split/iutest'...
Submodule path 'iutest': checked out '3db6d7339ad8171cb742ee90bae02fc20cca5ad4'
# make Release -j2
g++ --version
g++ (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

cd test; make Release
make[1]: Entering directory '/home/yumetodo/string_split/test'
g++ --version;
g++ (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g++ test.cpp -o test.out -O2 -Wall -Wextra -std=c++14
mkdir -p bin/g++/Linux/Release && cp test.out bin/g++/Linux/Release/test.out
make[1]: Leaving directory '/home/yumetodo/string_split/test'
cd sample; make Release
make[1]: Entering directory '/home/yumetodo/string_split/sample'
g++ --version
g++ (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g++ sample.cpp -o sample.out -O2 -Wall -Wextra -std=c++11
mkdir -p bin/g++/Linux/Release && cp sample.out bin/g++/Linux/Release/sample.out
make[1]: Leaving directory '/home/yumetodo/string_split/sample'
cd benchmark; make Release
make[1]: Entering directory '/home/yumetodo/string_split/benchmark'
g++ --version
g++ (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g++ benchmark.cpp -o benchmark.out -O2 -Wall -Wextra -std=c++14 -Wunused
mkdir -p bin/g++/Linux/Release && cp benchmark.out bin/g++/Linux/Release/benchmark.out
make[1]: Leaving directory '/home/yumetodo/string_split/benchmark'
# cd test/
# ./test.out
[==========] Running 72 tests from 24 test cases.
[----------] Global test environment set-up.
[----------] 4 tests from ExtractLvalueBySingeCharTest
[ RUN      ] ExtractLvalueBySingeCharTest.type_char
[       OK ] ExtractLvalueBySingeCharTest.type_char (20ms)
[ RUN      ] ExtractLvalueBySingeCharTest.type_wchar_t
[       OK ] ExtractLvalueBySingeCharTest.type_wchar_t (119ms)
[ RUN      ] ExtractLvalueBySingeCharTest.type_char16_t
[       OK ] ExtractLvalueBySingeCharTest.type_char16_t (0ms)
[ RUN      ] ExtractLvalueBySingeCharTest.type_char32_t
[       OK ] ExtractLvalueBySingeCharTest.type_char32_t (0ms)
[----------] 4 tests from ExtractLvalueBySingeCharTest(141ms total)

[----------] 4 tests from ExtractLvalueByCStrTest
[ RUN      ] ExtractLvalueByCStrTest.type_char
[       OK ] ExtractLvalueByCStrTest.type_char (0ms)
[ RUN      ] ExtractLvalueByCStrTest.type_wchar_t
[       OK ] ExtractLvalueByCStrTest.type_wchar_t (0ms)
[ RUN      ] ExtractLvalueByCStrTest.type_char16_t
[       OK ] ExtractLvalueByCStrTest.type_char16_t (0ms)
[ RUN      ] ExtractLvalueByCStrTest.type_char32_t
[       OK ] ExtractLvalueByCStrTest.type_char32_t (1ms)
[----------] 4 tests from ExtractLvalueByCStrTest(1ms total)

[----------] 4 tests from ExtractLvalueByStlStrTest
[ RUN      ] ExtractLvalueByStlStrTest.type_char
[       OK ] ExtractLvalueByStlStrTest.type_char (0ms)
[ RUN      ] ExtractLvalueByStlStrTest.type_wchar_t
[       OK ] ExtractLvalueByStlStrTest.type_wchar_t (0ms)
[ RUN      ] ExtractLvalueByStlStrTest.type_char16_t
[       OK ] ExtractLvalueByStlStrTest.type_char16_t (0ms)
[ RUN      ] ExtractLvalueByStlStrTest.type_char32_t
[       OK ] ExtractLvalueByStlStrTest.type_char32_t (0ms)
[----------] 4 tests from ExtractLvalueByStlStrTest(0ms total)

[----------] 4 tests from SplitLvalueBySingeCharTest
[ RUN      ] SplitLvalueBySingeCharTest.type_char
[       OK ] SplitLvalueBySingeCharTest.type_char (0ms)
[ RUN      ] SplitLvalueBySingeCharTest.type_wchar_t
[       OK ] SplitLvalueBySingeCharTest.type_wchar_t (0ms)
[ RUN      ] SplitLvalueBySingeCharTest.type_char16_t
[       OK ] SplitLvalueBySingeCharTest.type_char16_t (0ms)
[ RUN      ] SplitLvalueBySingeCharTest.type_char32_t
[       OK ] SplitLvalueBySingeCharTest.type_char32_t (0ms)
[----------] 4 tests from SplitLvalueBySingeCharTest(0ms total)

[----------] 4 tests from SplitLvalueByCStrTest
[ RUN      ] SplitLvalueByCStrTest.type_char
[       OK ] SplitLvalueByCStrTest.type_char (0ms)
[ RUN      ] SplitLvalueByCStrTest.type_wchar_t
[       OK ] SplitLvalueByCStrTest.type_wchar_t (0ms)
[ RUN      ] SplitLvalueByCStrTest.type_char16_t
[       OK ] SplitLvalueByCStrTest.type_char16_t (0ms)
[ RUN      ] SplitLvalueByCStrTest.type_char32_t
[       OK ] SplitLvalueByCStrTest.type_char32_t (0ms)
[----------] 4 tests from SplitLvalueByCStrTest(0ms total)

[----------] 4 tests from SplitLvalueByStlStrTest
[ RUN      ] SplitLvalueByStlStrTest.type_char
[       OK ] SplitLvalueByStlStrTest.type_char (1ms)
[ RUN      ] SplitLvalueByStlStrTest.type_wchar_t
[       OK ] SplitLvalueByStlStrTest.type_wchar_t (0ms)
[ RUN      ] SplitLvalueByStlStrTest.type_char16_t
[       OK ] SplitLvalueByStlStrTest.type_char16_t (0ms)
[ RUN      ] SplitLvalueByStlStrTest.type_char32_t
[       OK ] SplitLvalueByStlStrTest.type_char32_t (0ms)
[----------] 4 tests from SplitLvalueByStlStrTest(1ms total)

[----------] 2 tests from SplitLvalueCovertToIntBySingeCharTest
[ RUN      ] SplitLvalueCovertToIntBySingeCharTest.type_char
[       OK ] SplitLvalueCovertToIntBySingeCharTest.type_char (0ms)
[ RUN      ] SplitLvalueCovertToIntBySingeCharTest.type_wchar_t
[       OK ] SplitLvalueCovertToIntBySingeCharTest.type_wchar_t (14ms)
[----------] 2 tests from SplitLvalueCovertToIntBySingeCharTest(14ms total)

[----------] 2 tests from SplitLvalueCovertToIntByCStrTest
[ RUN      ] SplitLvalueCovertToIntByCStrTest.type_char
[       OK ] SplitLvalueCovertToIntByCStrTest.type_char (0ms)
[ RUN      ] SplitLvalueCovertToIntByCStrTest.type_wchar_t
[       OK ] SplitLvalueCovertToIntByCStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitLvalueCovertToIntByCStrTest(0ms total)

[----------] 2 tests from SplitLvalueCovertToIntByStlStrTest
[ RUN      ] SplitLvalueCovertToIntByStlStrTest.type_char
[       OK ] SplitLvalueCovertToIntByStlStrTest.type_char (0ms)
[ RUN      ] SplitLvalueCovertToIntByStlStrTest.type_wchar_t
[       OK ] SplitLvalueCovertToIntByStlStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitLvalueCovertToIntByStlStrTest(0ms total)

[----------] 2 tests from SplitLvalueCovertToIntNoReturnBySingeCharTest
[ RUN      ] SplitLvalueCovertToIntNoReturnBySingeCharTest.type_char
[       OK ] SplitLvalueCovertToIntNoReturnBySingeCharTest.type_char (0ms)
[ RUN      ] SplitLvalueCovertToIntNoReturnBySingeCharTest.type_wchar_t
[       OK ] SplitLvalueCovertToIntNoReturnBySingeCharTest.type_wchar_t (0ms)
[----------] 2 tests from SplitLvalueCovertToIntNoReturnBySingeCharTest(0ms total)

[----------] 2 tests from SplitLvalueCovertToIntNoReturnByCStrTest
[ RUN      ] SplitLvalueCovertToIntNoReturnByCStrTest.type_char
[       OK ] SplitLvalueCovertToIntNoReturnByCStrTest.type_char (0ms)
[ RUN      ] SplitLvalueCovertToIntNoReturnByCStrTest.type_wchar_t
[       OK ] SplitLvalueCovertToIntNoReturnByCStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitLvalueCovertToIntNoReturnByCStrTest(0ms total)

[----------] 2 tests from SplitLvalueCovertToIntNoReturnByStlStrTest
[ RUN      ] SplitLvalueCovertToIntNoReturnByStlStrTest.type_char
[       OK ] SplitLvalueCovertToIntNoReturnByStlStrTest.type_char (0ms)
[ RUN      ] SplitLvalueCovertToIntNoReturnByStlStrTest.type_wchar_t
[       OK ] SplitLvalueCovertToIntNoReturnByStlStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitLvalueCovertToIntNoReturnByStlStrTest(0ms total)

[----------] 4 tests from ExtractRvalueBySingeCharTest
[ RUN      ] ExtractRvalueBySingeCharTest.type_char
[       OK ] ExtractRvalueBySingeCharTest.type_char (0ms)
[ RUN      ] ExtractRvalueBySingeCharTest.type_wchar_t
[       OK ] ExtractRvalueBySingeCharTest.type_wchar_t (0ms)
[ RUN      ] ExtractRvalueBySingeCharTest.type_char16_t
[       OK ] ExtractRvalueBySingeCharTest.type_char16_t (0ms)
[ RUN      ] ExtractRvalueBySingeCharTest.type_char32_t
[       OK ] ExtractRvalueBySingeCharTest.type_char32_t (0ms)
[----------] 4 tests from ExtractRvalueBySingeCharTest(0ms total)

[----------] 4 tests from ExtractRvalueByCStrTest
[ RUN      ] ExtractRvalueByCStrTest.type_char
[       OK ] ExtractRvalueByCStrTest.type_char (0ms)
[ RUN      ] ExtractRvalueByCStrTest.type_wchar_t
[       OK ] ExtractRvalueByCStrTest.type_wchar_t (0ms)
[ RUN      ] ExtractRvalueByCStrTest.type_char16_t
[       OK ] ExtractRvalueByCStrTest.type_char16_t (0ms)
[ RUN      ] ExtractRvalueByCStrTest.type_char32_t
[       OK ] ExtractRvalueByCStrTest.type_char32_t (0ms)
[----------] 4 tests from ExtractRvalueByCStrTest(1ms total)

[----------] 4 tests from ExtractRvalueByStlStrTest
[ RUN      ] ExtractRvalueByStlStrTest.type_char
[       OK ] ExtractRvalueByStlStrTest.type_char (0ms)
[ RUN      ] ExtractRvalueByStlStrTest.type_wchar_t
[       OK ] ExtractRvalueByStlStrTest.type_wchar_t (0ms)
[ RUN      ] ExtractRvalueByStlStrTest.type_char16_t
[       OK ] ExtractRvalueByStlStrTest.type_char16_t (0ms)
[ RUN      ] ExtractRvalueByStlStrTest.type_char32_t
[       OK ] ExtractRvalueByStlStrTest.type_char32_t (0ms)
[----------] 4 tests from ExtractRvalueByStlStrTest(0ms total)

[----------] 4 tests from SplitRvalueBySingeCharTest
[ RUN      ] SplitRvalueBySingeCharTest.type_char
[       OK ] SplitRvalueBySingeCharTest.type_char (0ms)
[ RUN      ] SplitRvalueBySingeCharTest.type_wchar_t
[       OK ] SplitRvalueBySingeCharTest.type_wchar_t (0ms)
[ RUN      ] SplitRvalueBySingeCharTest.type_char16_t
[       OK ] SplitRvalueBySingeCharTest.type_char16_t (0ms)
[ RUN      ] SplitRvalueBySingeCharTest.type_char32_t
[       OK ] SplitRvalueBySingeCharTest.type_char32_t (0ms)
[----------] 4 tests from SplitRvalueBySingeCharTest(0ms total)

[----------] 4 tests from SplitRvalueByCStrTest
[ RUN      ] SplitRvalueByCStrTest.type_char
[       OK ] SplitRvalueByCStrTest.type_char (0ms)
[ RUN      ] SplitRvalueByCStrTest.type_wchar_t
[       OK ] SplitRvalueByCStrTest.type_wchar_t (0ms)
[ RUN      ] SplitRvalueByCStrTest.type_char16_t
[       OK ] SplitRvalueByCStrTest.type_char16_t (0ms)
[ RUN      ] SplitRvalueByCStrTest.type_char32_t
[       OK ] SplitRvalueByCStrTest.type_char32_t (0ms)
[----------] 4 tests from SplitRvalueByCStrTest(0ms total)

[----------] 4 tests from SplitRvalueByStlStrTest
[ RUN      ] SplitRvalueByStlStrTest.type_char
[       OK ] SplitRvalueByStlStrTest.type_char (0ms)
[ RUN      ] SplitRvalueByStlStrTest.type_wchar_t
[       OK ] SplitRvalueByStlStrTest.type_wchar_t (0ms)
[ RUN      ] SplitRvalueByStlStrTest.type_char16_t
[       OK ] SplitRvalueByStlStrTest.type_char16_t (0ms)
[ RUN      ] SplitRvalueByStlStrTest.type_char32_t
[       OK ] SplitRvalueByStlStrTest.type_char32_t (0ms)
[----------] 4 tests from SplitRvalueByStlStrTest(1ms total)

[----------] 2 tests from SplitRvalueCovertToIntBySingeCharTest
[ RUN      ] SplitRvalueCovertToIntBySingeCharTest.type_char
[       OK ] SplitRvalueCovertToIntBySingeCharTest.type_char (0ms)
[ RUN      ] SplitRvalueCovertToIntBySingeCharTest.type_wchar_t
[       OK ] SplitRvalueCovertToIntBySingeCharTest.type_wchar_t (0ms)
[----------] 2 tests from SplitRvalueCovertToIntBySingeCharTest(0ms total)

[----------] 2 tests from SplitRvalueCovertToIntByCStrTest
[ RUN      ] SplitRvalueCovertToIntByCStrTest.type_char
[       OK ] SplitRvalueCovertToIntByCStrTest.type_char (0ms)
[ RUN      ] SplitRvalueCovertToIntByCStrTest.type_wchar_t
[       OK ] SplitRvalueCovertToIntByCStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitRvalueCovertToIntByCStrTest(0ms total)

[----------] 2 tests from SplitRvalueCovertToIntByStlStrTest
[ RUN      ] SplitRvalueCovertToIntByStlStrTest.type_char
[       OK ] SplitRvalueCovertToIntByStlStrTest.type_char (0ms)
[ RUN      ] SplitRvalueCovertToIntByStlStrTest.type_wchar_t
[       OK ] SplitRvalueCovertToIntByStlStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitRvalueCovertToIntByStlStrTest(0ms total)

[----------] 2 tests from SplitRvalueCovertToIntNoReturnBySingeCharTest
[ RUN      ] SplitRvalueCovertToIntNoReturnBySingeCharTest.type_char
[       OK ] SplitRvalueCovertToIntNoReturnBySingeCharTest.type_char (0ms)
[ RUN      ] SplitRvalueCovertToIntNoReturnBySingeCharTest.type_wchar_t
[       OK ] SplitRvalueCovertToIntNoReturnBySingeCharTest.type_wchar_t (0ms)
[----------] 2 tests from SplitRvalueCovertToIntNoReturnBySingeCharTest(0ms total)

[----------] 2 tests from SplitRvalueCovertToIntNoReturnByCStrTest
[ RUN      ] SplitRvalueCovertToIntNoReturnByCStrTest.type_char
[       OK ] SplitRvalueCovertToIntNoReturnByCStrTest.type_char (0ms)
[ RUN      ] SplitRvalueCovertToIntNoReturnByCStrTest.type_wchar_t
[       OK ] SplitRvalueCovertToIntNoReturnByCStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitRvalueCovertToIntNoReturnByCStrTest(0ms total)

[----------] 2 tests from SplitRvalueCovertToIntNoReturnByStlStrTest
[ RUN      ] SplitRvalueCovertToIntNoReturnByStlStrTest.type_char
[       OK ] SplitRvalueCovertToIntNoReturnByStlStrTest.type_char (0ms)
[ RUN      ] SplitRvalueCovertToIntNoReturnByStlStrTest.type_wchar_t
[       OK ] SplitRvalueCovertToIntNoReturnByStlStrTest.type_wchar_t (0ms)
[----------] 2 tests from SplitRvalueCovertToIntNoReturnByStlStrTest(0ms total)

[----------] Global test environment tear-down.
[==========] 72 tests from 24 testcase ran. (159ms total)
[  PASSED  ] 72 tests.

いいね。

余談

どういうわけかどこの.bashrcも読み込んでくれないようなのので、root.x86_64/etc/bash.bashrc

source "${HOME}/.bashrc"

を追加するといいかもしれない。msys2で使っていたものがほぼそのまま使える。例えば

export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[m\]\[\e[36m\]\w\[\e[m\]\[\e[0m\]\n$'

とか書いて置くと見た目がきれいでいい。

Kaspersky Internet Security 2016 16.0.1.445 のセルフディフェンス機能は盛大にバグっている(修正バッチが出たっぽい)

雑記

遭遇した現象

だいたいこんな感じで再現できる

  1. LinuxなどでWindows10を導入するパーティションを0クリアしてフォーマット(念のため)
  2. Windwos10 Install Disk(MSのサイトにて配布していたものをDVD-RWに焼いたもの)からWindwos10をインストール。念のためこちらでもインストール先のパーティションをフォーマット
  3. driver導入
  4. MSのサイトにて配布されているVisual Studio 2013, 2015のiso(2016/07/31時点の最新)をマウントし、順にインストール
  5. Kaspersky Internet Security 2016 16.0.1.445をインストール
  6. VSがハングする!!!

解決の糸口

こんなStack Overflowをみつけた

Visual Studio freezes or hangs on startup

When it hangs on the splash screen:

It could be that an anti-virus solution is blocking Visual Studio.

Kaspersky Internet Security 16.0.1.445 makes Visual Studio 2015 hang on the splash screen. The older version 16.0.0.614 works fine.

ほう・・・?

Kaspersky のサポートに問い合わせた

これではいまいち何が原因かわからないし、第一16.0.0.614はどっから手に入れればいいんだ。というわけで問い合わせた。

全文掲載すると長くてやっていられないので、要約すると

ということらしい。

具体的な対処手順については
【参考:カスペルスキー インターネット セキュリティ 2016 (16.0.1.445)をインストール後、アプリケーションのインストールが途中で停止してしまい完了しない、またはアプリケーションが正常に動かない】
を参照のこと。

感想

原因がわかってよかったけど、Windows10を10回も再インストールするはめになったので辛い

追記

いつの間にかKasperskyの公式サイトが更新されている。それによれば、修正バッチが出たっぽい。定義データベースをアップデート後にOSを再起動することでバッチが適用されるっぽいけどまだ試せていない。