気になる歌の歌詞「0hzの恋人」

MOSAIC.WAVの歌で結構好きなのが「ギリギリ科学少女ふぉるしぃ」なのだが、それにカップリングされているのがこの「0hzの恋人」

いい歌なのだが、いつもこの歌詞の一節が気になって素直に聴けないのです。

君のリアクションはまだ 0Hz未満?だけど 私の胸のチャンネルは いつもいつも君を見てる

多分、この歌詞はリアクションが全然ない〜、ということが言いたいのだろうけど、ヘルツというのは振動数を示すわけで、つまり、1Hzだと一秒間に一回の振動があることになる。0Hzだと全く振動していないということで、「0Hz」という表現はまだ良いとする。ただいただけないのが「0Hz未満」という表現。

0Hz未満というのはありえない、というのも例えば、0.5Hzであれば、1Hzと比べると1/2Hzということで、1Hz未満という表現が使える。これを当てはめてで0Hzと比べても1/0Hzには0除算になってできないので、0Hz未満という表現はこの世に存在しない。

0より小さいとなると負数になるが、振動に負数は適用されないので意味がない。敢えて適用するとすると位相が反対の振動になるんだろうけど、その場合、今度は小さくなればなるほど大きくなってくるので0Hz未満〜ということを憂いているこの歌詞は成立しなくなる。

「ギリギリ科学少女ふぉるしぃ」が疑似科学をテーマにしているのでこれもそうなんだろう、と解釈すればそれでいいんだろうけど。

ReSharperが指摘してくれるコードスタイルのあれこれ

ReSharper(と同様のエンジンを内蔵しているRider)が指摘してくれるものにはいろいろな種類のものがあるのですがそのいくつかに関する考察。

Collection Initializerへの置き換え

次のようなコードがあったとします。

var list = new List();
list.Add(new Something() {unit = "One", value = 5});
list.Add(new Something() {unit = "Two", value = 6});

ReShaperは次のような置き換えを提案してきます。

var list = new List
{
    new Something() {unit = "One", value = 5},
    new Something() {unit = "Two", value = 6}
};

これは確かに冗長になりがちなのでシンプルな書き換えにするのにはいい方法。

Foreach文のLINQ式への置き換え

時々出てくるパターンとしてリストの中を辿りつつ内容に対して処理を行うパターン。foreachで辿るようなパターン、例えば次のようなパターンがあったとします。

foreach (var item in list)
{
     if (item.unit == "Two")
        result += item.value;
}

これは以下のように置き換えることを提案してきます。

var result = list.Where(item => item.unit == "Two").Sum(item => item.value);

処理が複雑になると可読性が失われたり、デバッグが複雑になったりすることがあるのでその点は注意です。

メソッドのstatic化

次のようなクラスがあったとします。

internal class Hoge
{
    private int _value;

    public int Foo(int v)
    {
        _value += v;
        return _value;
    }

    public int Bar(int v)
    {
        v -= 1;
        return v;
    }
}

ReSharperはこのうち、public int Bar(int v)をstatic化するように提案してきます。

internal class Hoge
{
    private int _value;

    public int Foo(int v)
    {
        _value += v;
        return _value;
    }

    public static int Bar(int v)
    {
        v -= 1;
        return v;
    }
}

これはインスタンス化を行うとその分、要求されるメモリが増えるので、必要がないものにおいてはVM内で共有したほうがいい、ということですね。

ただ、staticメソッドのインスタンス化はそのメンバを呼び出したタイミングで行われたり、ガーベジコレクションの挙動が普通とは異なってくるはず(というか、スコープから外れない場合は残存し続けるので、長期的に残り続ける挙動を示すはずです)のでその部分では注意が必要です。

JetBrains All Products Pack

最近JetBrainsのAll Products Packを購入したのでいろいろと。

まずはそれぞれのツールに関していろいろと書いてみる。

Rider

まずいちばん使っているのがこのRider。C#のIDEです。現段階で使っているのは.NET Core 2.0の機能を使いたいので、EAP版です。

ちなみにRiderはUnityと組み合わせ使うことも可能です。Linux版のUnity Editorと組み合わせて使用する場合に便利です。

機能面ではVisual StudioResharperを組み合わせたものに近いです。(Windows Formなどのビジュアルエディターはありませんが……。)

尚、Reshaperに関しても上位版であるResharper Ultimateが、All Products Packに含まれています。

プライベートではマルチプラットフォーム開発なので、あまり使う機会はなかったりしますが。(ただし、使う場合Visual Studio Communityでもちゃんと動作します。)

DataGrip

次によく使うのがDataGripです。DataGripはデータベース用のIDEです。

いろいろなデータベースをサポートしていて、SQL文を発行したり、内容を調べたりすることができます。

Gogland

GoglandはGoogleにより開発されている、Go用のIDEです。現在EAPで無料で使用できます。正式版では名前が変わるかも知れないようです。

IntelliJ IDEA Ultimate

IntelliJ IDEA UltimateJavaのIDEです。(正確にはJVMな言語は多くが対応しています。KotlinもJetBrainsが開発していますし、もちろん対応しています。)

尚、IntelliJ IDEA Ultimateにはオープンソース版のIntelliJ IDEA Communityも存在します。これ一本でJavaのアプリ、Androidのアプリなどを開発したりできます。プラグインを通してGoやPythonなどの他の言語も開発することができるようですが、挙動など言語特化のIDEがより言語に特化した動作をするようになっているようです。

個人的にはJavaはあまり使わないので、XSLTの編集などに使ったりする場合が多いです。

PyCharm Professional

PyCharm ProfessionalPythonのIDEです。。こちらもPyCharm Communityというオープンソース版の他、PyCharm Eduという教育目的に特化した特別版も存在します。

PhpStorm

PhpStormPHPのIDEです。あまり新規にPHPは少なくとも自分で書くことは少ないのですが、レガシーなコードはあるのでその保守に使用しています。

CLion

CLionはC/C++のIDEです。Linux上で時々C/C++を扱ったりするので、その場合に活用しているツールです。

RubyMine

RubyMineRubyのIDE。Rubyのコードは現在PHPよりも少ないのであまり出番はないですが……。

MPS

イマイチ使い方がよくわかっていないのが、このMPS。IDEというよりはメタ言語みたいなのですが……。

JetBrainsのAll Products Packは開発機材として個人的に買う場合は、そこまでは高くはないのですが(ビジネスとして買う場合はそれなりに高くなりますが……)それなりの額にはなりますが、今のところはその値打ちはあるように感じています。特に複数の言語を使う必要がある場合同じ使用感で複数の言語を扱えますので。

学校の先生にされたもっとも酷いことは?

Quoraで出ていた設問であなた、または他の人に対して先生がした最も酷い行為は?というものがあり、こちらに答えて見ることにしました。すごく変な年でした。

私の小学校の一年目はおかしな先生によって非常に酷い形になりました。(これは日本での出来事です。)細かいことでネチネチと注意を受け、例えば、鉛筆を一本だけでも忘れたとします。そのことを連絡帳経由で親に連絡されました。給食を食べるのが遅かったとします。そのことに関して連絡帳に書かれ、学校が終わり放課後になるまで給食もそのままで授業を受けることを強要されました。(この話、小学校一年生、6歳の頃であることに留意してください。)少しでもその先生の基準を逸脱するとそのことに関し、連絡帳に書かれ、それは当時最大1日4時間、毎週6日間続きました。(当時は土曜日は休みではありませんでした。)当時、学級の他の生徒は同じような被害をあっていなかったということで、今考えるとその先生によりいじめられていたことになります。

ストレスは蓄積し、やがて一ヶ月ほど宿題をするのを拒否したこともあり、それが発覚して叱られることがなければさらに続いていたかもしれません……もっともどちらにしても連絡帳で他のことについて書かれていたわけなので、あまり差はなかったわけですが。(どうやって一ヶ月も宿題をしていないことを隠し通せたのかはよく覚えていません。)

この先生による異常さは2年目に他の先生になった時に全く問題がなかったことを考えると際立っていたように思います……また3年目に同じ先生に当たり、また一年間、今度は更に長い時間の地獄に戻されたわけですが。(1年生は正午で校時が終わっていましたが、3年生はそれに加え1~2時間長くなっていて、そのため、毎日この先生と6時間顔を合わせることを強要されていたことになります。)その後、3年間は良い先生に当たったので幸い問題はありませんでした。

恐らく近年においては先生によるこのような行為は先生の資質に関して大きな疑問を投げかけることになるのでしょうが、恐らく当時先生はこのような問題を訴えたところで無視される程度の信頼があったのではないかと思います。(また、自分の若さゆえの無知によるものもあると思います、本当に若かったですので。)このため、当時の学校の思い出が最悪だったとは言いませんが、1年目と3年目は非常に辛かったのを覚えています。

結論ですが、先生は お願いですから生徒をいじめるのをやめてください。最悪なので。

実行時間が短いWindowsサービスの問題について

One-shotなサービスで持続時間が短いとWindowsのサービスはエラーが起きたものとして処理する場合があるらしい。

エレガントではない方法としてはThread.Sleep()で少し遅延させてやるようなのがいいかも知れない。(C#の場合。)