INTELとRealtecのNICを比べてみた 結果だけ書いておく

2017/04/24

勉強がてら、F#とXAMLで何か作ってみようということで、ネットワークの帯域を食いつぶすだけのベンチマークソフトをでっちあげてみた。



単に、TCPでつないで、全力でごみデータを送受信するだけ。よくあるベンチマークソフトで、今のところ何の独創性もない。

ところで、ここで1つ気になったことがある。とりあえず通信できるようになったところで、2台のマシンをつないでつながるか試したところ、なんか通信速度が安定しない。理屈の上では、上り下りともに1Gbps程度は出るはずなのだが、なんか、送信と受信のどちらか一方の帯域が低い。



上記だと、送信は概ね上限に達しているように見えるが、受信は79.4Mbpsで、理論値の10%にも達していない。また、常に送信は早くて受信が遅いということではなく、時々この力関係が入れ替わったりするから、よくわからない。

ロジック上は、TCPのクライアントとサーバとで、送受信ともに同じようなことをやっているわけで、とりわけ原因があるように見受けられない。まさかNICのチップが蟹さんだからなのか? と思って、いろいろやってみた。

まず構成は下記のようになっている。



PC1をクライアント側として使用する。こいつはオンボードのINTEL NICを使っておく。

PC2をサーバ側として、INTEL NICとRealtek NICを切り替えて使う。

そのうえで、HUBの間にかます場合とクロスで直結する場合を試してみる。

■パターン1 INTEL - Realtek HUBあり

PC1側



PC2側



理想的な性能が得られていない。


■パターン2 INTEL - INTEL HUBあり

PC1側



PC2側



なぜか予想以上に性能が出ない。速度的に、半二重として認識されているのか?

■パターン3 INTEL - Realtek 直結

PC1側



PC2側



さっきよりはいいが、やっぱり理論値には遠い。


■パターン4 INTEL - INTEL 直結

PC1側



PC2側



理論値に近い速度が出ている。

しかし、やっている間に気づいたが、何回か抜き差しすると、ちょっと性能が落ちたり上がったりする。Realtekでも、理論値程度の速度が出るのではないか? と思って何回かやってみたが、理想的な結果は得られなかった。

とりあえず、原因も対処法もまだ調べてない。何はともあれ、PlanexのHUBがかなりできない子だということだけはわかった。

フィードバックHUBのログアウトの方法

2017/04/15

下らないことに気が付いたから書いておく。

Windows 10でMicrosoftにゴルァを入れるのにフィードバックHUBというソフトを使うことができるのだが、これ、一度ログインするとログオフする術がない。

1.フィードバックHUBを起動すると、サインインとやらを求める画面が表示される。



2.サインインする方法を聞かれるので、とりあえずMicrosoftアカウントを選択して「続行」を押下する。



3.ユーザ名とパスワードを聞かれるので入力してやり、「サインイン」ボタンを押下する。



4.苦情を入力できる画面になる。





ここで問題になるのは、この画面をいくら探してもログオフする方法が見当たらないということである。なおかつ、フィードバックHUBを一度閉じて再起動すると、ログインの確認が行われずにいきなり、上記の画面が表示されてしまう。

気持ち悪いことこの上ない。

だから、ログオフする方法を探ってみた。

5.まず、フィードバックHUBの合同記号(「≡」←これ)を選択する。すると、左半分の文字が消える。(背景色と同じで区別がつかないが、おそらくメニューを表示する領域が広がるのだと思われる)



6.画面左下の、歯車の左側の領域を選択する。まさに衝撃的な設計だが、この何もない領域は選択可能なボタンとして機能するらしい。



7.サインアウトと書いてある文字を選択する。明らかに意図的なのだろうが、あえてわざわざ判読しづらい色で書かれているが、これは選択可能なオブジェクトである。右下に見えている「閉じる」ボタンに惑わされてはいけない。



8.無事にログオフできた。



フィードバックHUBを再起動しても、何も聞かれずいきなりログインするとかいうことがなくなる。

だが、上記の画面で「サインイン」ボタンを押下すると、下記のように、アカウントがモロ出しになってしまう。マワシの外れた力士がごとくだ。



しかも、この画面で「続行」ボタンを押下すると、パスワードを聞かれることもなくログインしてしまう。全く意味がない。

なので、アカウントの情報を削除する必要がある。

9.スタートメニューから「設定」を起動する。


10.「アカウント」を選択する。



11.左側のメニューから「メール&アプリのアカウント」を選択する



12.他のアプリで使われるアカウントというところに表示されている、さっき自分がログインするときに使ったアカウントを選択し「取り出す」ボタンを押下する。



「取り出す」ってなんだよ。

13.確認のメッセージが表示されるので「はい」を選択する。






14.さっきと同じく、フィードバックHUBを起動すると、サインインを求める画面が表示される。



15.上記で「続行」ボタンを押下しても、アカウントが表示されなくなる。




Creators Updateを入れてみた

2017/04/06

Windows 10のCreators Updateなるものが公開されたらしいので、失業者らしく暇つぶしにアップデートしてみた。

Creators Updateで気になるのは高DPIの対応が改善されたらしいということなので、まずはその観点で調べてみる。

俺が思う、高DPI対応がなってないソフトの筆頭がOpenOfficeなわけだが、実際起動してみると、こんなん悲しい表示になっている。



画面全体がぼやけて、眼鏡をはずして世界を見ているかのごとくだ。前向きにとらえればウインドウ全体にアンチエイリアシングがかかっているという……わけはない。

なので、Windows 10 アップグレードアシスタントという、いまだかつて役に立った事がないソフトを起動して、そこからアップデートを試みる。アップデートした後、もう一度OpenOfficeを起動する。



だが、何も変わっていないように見受けられる。これは、明示的に設定してやらなければ有効にならない機能らしい。
ということで、OpenOfficeのEXE本体を見つけ出してきて、プロパティの値を変えてみる。





そうすると、なんとなく表示がきれいになったように見える。



※というか、ここのblogにキャプチャした絵をアップロードすると、勝手にサイズを変更されて、ぼやけ具合の変化がわからなくなるから困る。こうしたらちょっとはわかりやすいだろうか?



だが、重大な問題がある。ウインドウを移動したり、ウインドウのサイズを変更しようとしたときに表示されるウインドウ枠が位置がむちゃくちゃである。



これは、ウインドウのタイトルバーをつかんで移動しようとしたときの絵だ。キャプチャに映っていないが、マウスカーソルは灰色のタイトルバーの上から少ししか動かしていない状態だ。そもそも、ウインドウの位置とサイズを同時に変えるすべはなく、通常の操作だけでこの画面を得ることは不可能であり、明らかに動きがおかしい。

まぁ、日本語で言ったところでアメリカ人相手に通じるとは思えず、なんの意味もないのだろうが、とりあえずフィードバック Hubというソフトから報告だけは上げておいてみた。


F#とXAMLでブツをナニすることを考える

2017/04/04

前回の投稿が5月29日なので、およそ10ヶ月ぶりの更新なのだが、この間いろいろあって、ついに仕事を辞めてしまった。これ以上はもう耐えられそうにない。生活には困るが、後悔はない。

というメモ書きと、もう1つ。いまさらながら、F#とXAMLでソフトを作る手順を調べたから、その結果だけ残しておく。

まず、F#でWPFとかXAMLで作る方法を検索すると、FsXamlという追加のパッケージみたいなやつを入れて作れ、といっているサイトがいくつかヒットする。

まぁ、個人でやっているだけだし、著作権て何ですか? おいしいんですか? という程度の認識しかないのだから、別にドコにナニをツッっこんでアッーなことをしてもいいのだが、やっぱり、得体の知れないものを無暗やたらに使うのは気分がよくない。

というか、最近?では、業務システムの開発でそれをやる奴が多くて困る。「このライブラリがないと動きません(キリッ ライセンス?サポート? 知りませんね。それは僕の仕事ではありません。気になるのなら、あなたが何とかすればいいんじゃないですかw?」とのたまい、GPL汚染がっつりなコードを製品に混入しようとする馬鹿が本気でいるから困る。もう、そういう尻拭いをするのに疲れた。

と、余談はいいとして、そもそも、Visual Studio 2017になってからなのかどうかは知らないが、なんか、プロジェクトの作成時にオンラインでテンプレートを検索してもFsXamlなるものが出てこないし、2015で登録してやってみても、なんかちゃんとコンパイルできないし。

ということで、すべて自前で対応する方法を模索してみた。

(1)まずは、新規にF#のプロジェクトを作成する。



コンソールアプリケーションを指定しているが、気にしない。後で変更する。

(2)参照設定を変更する
いきなりだが、必要なライブラリを追加する。少なくとも以下のものが必要。
・FSharp.Core
・mscorlib
・PresentationCore
・PresentationFramework
・System
・System.Core
・WindowsBase

このうち、PresentationCore・PresentationFramework・WindowsBaseの3つはデフォルトでは登録されていないから、明示的に指定してやる必要がある。





(3)アプリケーションのプロパティを変更する
出力の種類として「コンソール アプリケーション」という指定になっているものを、「Windows アプリケーション」に変更する。






ターゲット F# ランタイムとか、対象のフレームワークとか、気になる項目が多数あるが、たぶん、なんでもいい。

(4)XAMLのコードを追加する
ファイルは適当にプロジェクトに追加すればいい。

内容はこんな感じにしておく。



コードを示すとこんな感じ。

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="aaaa" Height="262" Width="500" >
<Canvas HorizontalAlignment="Left" Height="131" Margin="21,19,0,0" VerticalAlignment="Top" Width="237" >
<Button x:Name="button1" Content="Button1" Height="32" Canvas.Left="6" Canvas.Top="21" Width="97" />
<Button x:Name="button2" Content="Button2" Height="35" Canvas.Left="118" Canvas.Top="21" Width="119" />
<TextBox x:Name="TextBox1" Height="74" Canvas.Left="72" Canvas.Top="96" Width="103" />
</Canvas>
</Window>

あとここで、追加したXAMLのファイル(ここではMainWindow.xamlとする)のプロパティで、ビルドアクションという項目で「Resource」、出力ディレクトリにコピーという項目で「常にコピーする」を選択しておく。これを忘れると動かない。

(5)F#のコードを追加する。



コードを示すとこんな感じ

module MainApp
open System
open System.Windows
open System.Windows.Controls


//////////////////////////////////
// ウインドウ全体を示すクラス

type CMainWindow() =
   
    // XAMLのコードをリソースからロードする
    let m_Window =
        Application.LoadComponent(
            new System.Uri( "/FsTest3;component/mainwindow.xaml", UriKind.Relative )
        ) :?> Window    // System.Windows.Windowクラスに動的ダウンキャスト


    // コントールのオブジェクトを取得する
    let Button1 = m_Window.FindName( "button1" ) :?> Button
    let Button2 = m_Window.FindName( "button2" ) :?> Button
    let TextBox = m_Window.FindName( "TextBox1" ) :?> TextBox


    // main関数でRunしてやるために、Windowオブジェクトを公開している
    // このクラスのメンバでRunするようにすれば、公開する必要はない気がする

    member this.TheWindow with get() = m_Window


    // ウインドウ全体の初期化
    member this.Initialize =
        // ボタンのイベントハンドラを追加している
        // 単にCMainWindowのメンバを呼び出すようにしているだけ

        Button1.Click.AddHandler ( fun sender e -> this.OnButton1_Click sender e )
        Button2.Click.AddHandler ( fun sender e -> this.OnButton2_Click sender e )


    // ボタン1の押下時に呼び出される
    member this.OnButton1_Click sender e =
        TextBox.Text <- "OnButton1_Click"


    // ボタン2の押下時に呼び出される
    member this.OnButton2_Click sender e =
        TextBox.Text <- "OnButton2_Click"


//////////////////////////////////
// エントリポイント

[<STAThread>]
[<EntryPoint>]

let main(_) =
    // ウインドウのクラスを作って・・・
    let WinObj = new CMainWindow()

    // 初期化して・・・
    WinObj.Initialize

    // 実行してやる
    ( new Application() ).Run( WinObj.TheWindow )


ダサい。

コードとデザインの分離性とかなんとか考えると、Bindingとかいう方法を使った方がいいらしいのだが、それだとどうにもうまく実装することができなかった、というか、よくわからなくて面倒になった。

F#のコードとXAMLのデザインが分離されてないとか、いちいちイベントのハンドラを登録しないといけないとか、いろいろな面倒はあるが、それは結局、今までWin32APIやMFCでも泥臭くやってきたことだと思えば、まぁいいかという気がする。

1ミリも進歩がないけどな!


(6)実行する



こんなんでも、一応ボタンを押すとテキストボックスに文字列が設定されて、想定通りに動作していることが伺える。

あと、上のプログラムだと、CMainWindowの定義とmainの定義をひとまとめに書いてしまったが、俺の趣味からすればファイルを分けて作りたくなる。

つまり、XAML+C#の場合と同じように、XAMLのファイル1つに対してF#のソースが1本あって、かつ、その中にウインドウを管理するクラスが1つ定義されていれば、雰囲気だけでもMFCで作ってきたのと同じ枠組みで考えられるのではないかという気がする。

まぁ、1ミリも進歩がないけどな!



キーボードを掃除してみる

2016/05/29

キーボードはFILCOのMajestouch 2というものを使用している。最近だいぶ汚れてきたから、キートップ引き抜き工具とかいうやつを買ってきて掃除してみることにしてみた。



確かこんなやつ。

半分ぐらいキーを抜いた状態だが、こんなことになっていた。


きたねぇ。

ばっちいついでに、アップにしてみる。


不潔だ。

で、全部引き抜いて、逆さにして叩いて、掃除機かけて、雑巾拭いたのがこれ。



あまりきれいになった気がしない。

だが、できることはやったので、またキーを元通りにする。



こうしてみると、悪くないか?


話は変わるが、ついでにHDDの防振マウンタというやつも買ってきてみた。



5インチベイに2.5インチのHDDを付けているわけだが、どうしても騒音が気になる。ということで、ダメもとで買ってきてみた。

まず、もともとはこうなっていた。


普通のトレイ型のマウンタに2.5インチHDDが乗っている。



HDDに買ってきたやつを装着する。でもって、PC本体に押し込む。



まぁなんとなく音は小さくなったような? 気のせいかもしれないが、ままいいか。