RTX1300入荷

RTX1300が入荷したので電源を入れてみました。

10GのサポートはSFP+ポートのみで、10GBase-Tのポートは1つもありませんでした。実売が14~15万円ぐらいということで、思ったよりも安い理由はこのあたりにあるんでしょうか。

LAN1の8ポートはすべて1000Base-Tのポートです。2つのSFP+ポートはLAN2とLAN3の排他利用ということを考慮すると、やはりLAN1に10GBase-Tを1つぐらいは欲しかったですね~。このあたりは残念。次のモデルでは2.5Gbps, 5Gbpsにも対応したマルチギガ対応10GBase-TポートをLAN1に1ポートぐらいは作って欲しいです。

SFP+は手持ちでFS.COMのモジュールがあったので挿してみました。NETGEARのAXM765互換品モジュール(30m用) です。ネット直販で1万5千円ぐらいだったかな。

LAN2に挿してみた。

そんでもって、早速、TELNETで確認。リビジョンは以下の通り。

LAN2のステータス確認してみたら、10GBASE-Rとの表示。見た目は問題はなさそうです。ポート番号はPORT9の表示ですね。

10GBase-Tのインターフェイスを持つファイルサーバーと10Gbpsで問題なく通信できました。今回はSFP+モジュールがNETGEARの互換品しか手持ちになかったのですが、汎用タイプのものを使った方が安心かも。

このRTX1300はマルチギガに対応しているらしいですが、マルチ(10Gbps, 5Gbps, 2.5Gbps, 1Gbps)に対応するSFP+モジュールって非常に少ないです。テストで使った10GBase-TのSFP+モジュールもCat5eケーブルで接続すると5Gbpsではなく1GBpsで接続されてしまいます。

マルチギガに対応するSFP+モジュールをヤマハさんはリリースする気はないんですかねぇ? SFP+モジュールがオプションで発売されていないようですし、SFP+モジュールのコンパチリストが欲しいですね。

マルチギガ対応ルーターといいつつも実質は10Gインターフェイスを持つスイッチと10Gbpsで通信させ、スイッチ側でマルチギガに対応するモデルを選択することになるのでしょう。

あと、光回線も10Gタイプに契約を切り替えないとこのルーターを買う意味はあまりないのですが、弊社はまだNTTもAuも10G回線のエリア対象外なんですよね・・・。

C#でIEYASU APIを使う

クラウド勤怠管理のHARMOS勤怠(旧称:IEYASU)にはRESTのAPIが用意されています。

今回、顧客案件でこの IEYASU API をC#から扱う機会があったので、そのメモです。

HttpClientを使ってもできると思いますが、今回はRestSharpを使いました。

開発環境は Visual Studio 2019です。

準備

まずは、API KEYを管理用WEB画面で取得しておきます。

尚、API KEYの有効期限は3か月です。更新忘れがないように注意が必要です。

次にVisual Studioに移動し、NuGetを使ってRestSharpをインストールします。

あと、Jsonを扱うのでシリアライズを使うとスマートです。以下のようにコード内でusingディレクティブを追加しておきます。

using RestSharp;
using System.Text.Json;

GET

ユーザー一覧や打刻データの POST や GETにはTokenが必要になりますので、ここでは認証用Tokenの取得をやってみます。AddHeaderメソッドを使い、さきほど発行しておいた API KEY をHeaderに埋め込めばOKです。

string url = "https://ieyasu.co/api/<company_code>/v1";            
RestClient client = new RestClient(url);

string api = "/authentication/token";            
RestRequest request = new RestRequest(api);            
request.AddHeader("Authorization", "Basic <api key>");  //APIキーでBasic認証
request.Method = Method.Get;
RestResponse response = await client.GetAsync(request);
MessageBox.Show(response.Content);

これでTokenが含まれたJsonを取得できます。

尚、<company_code>の部分はハーモス勤怠の契約時にもらった会社コードに置き換えます。

POST

ここではPOSTの簡単な例として打刻登録を扱います。

打刻の仕様は https://ieyasu.co/docs/api.html#/paths/~1stamp_logs/post に記載されていますが、

user_id と stamp_type が必須項目です。 stamp_type は 出勤の場合が1で、退勤が2です。

ここではuserをつかさどるUserDataクラスを作ります。

    class UserData
    {
        [JsonPropertyName("user_id")] public int UserID { get; set; }
        [JsonPropertyName("stamp_type")] public int StampType { get; set; }
    }

user_id も stamp_type も ingeger型です。

UserDataのインスタンスを作成するときは以下のようになります。

このコードで jsonStr には {“user_id”:5,”stamp_type”:1} が入ります。

UserData user = new UserData();
user.UserID = 5;  //user_id
user.StampType = 1;  //出勤
string jsonStr = JsonSerializer.Serialize(user);

あとはRestSharpを使ってPOSTを実行します。TokenはAddHeaderメソッドを使い、Headerとして追加しておきます。

string url = "https://ieyasu.co/api/<company_code>/v1";            
RestClient client = new RestClient(url);

string api = "/stamp_logs";
RestRequest req = new RestRequest(api);
req.AddHeader("Authorization", "Token <token>");   //<token>はBasic認証で取得しておく
req.AddJsonBody(jsonStr);    //Jsonの文字列はAddJsonBodyに放り込む
req.Method = Method.Post;
RestResponse response = await client.PostAsync(req);

これでスマホで出勤ボタンをタッチしたのと同じ効果が得られます。

以上です。

10G対応VPNルーター RTX1300

2022年の秋にYAMAHAから10GbE対応のVPNルーターが発売されるらしい。

10G対応のVPNルーターの選択肢が増えることはいいことですね。YAMAHAでは初の10G対応VPNルーターです。詳細は不明ですが、LAN3の1個だけ10Gというのはやめてほしいですね。できればLAN1も4ポートぐらいを、しかもマルチギガ対応で作ってほしい。マルチじゃないと2.5Gのポートと接続すると2.5Gではなく1Gでリンクされてしまうので。欲を言えばPoE給電ポートも1、2個ぐらいは欲しい。

しかし、Auひかり10Gとかコミュファ10GのようにWAN環境も10Gのサービスが出てきているので、中小企業向けのVPNルーターとしては大きな選択肢になるのではないでしょうか。

あと、型番の名前が少し気になります。

大昔(2004年)にRTX1500という機種が初代のRTX1000の次ぐらいにリリースされています。このままRTX1300、RTX1400と型番が上がっていったら、そのあとの型番はどうなるのでしょう? RTX1600になるのかな? 余計なお世話か。

RTX1500はショートパケットの処理が当時としては秀逸でした。FTP転送などで威力を発揮して、重宝したものです。Dynamic Traffic Controlが登場したのもこの機種ぐらいからだったでしょうか。実売価格も15万円前後だったと記憶しています。企業の支店用としてはちょっと高価なルーターでしたね。

RTX1500の定価が198,000円だったのですが、RTX1300は価格はいくらで発売されるのでしょうか? 構成次第でしょうけど、20万円を切ってくれると支店用としても提案しやすいですね。

SMARTalkサービスの新規受付終了

自社オフィスではPanasonicのおたっくす(KX-PZ910DL)を使っているのですが、この機種には「外で通話」というIP電話へ転送する機能があります。楽天モバイルのSMARTalkサービスというIP電話サービスと連携し、スマホのIP電話アプリで受信する分にはIP電話機同士と同じ扱いになって転送料金が無料になるというものです。

このSMARTalkですが、新規受付はすでに2年前から停止していました。しかし、おたっくす向けにPanasonic経由であればまだ新規受付が可能でしたが、このPanasonic経由もいつの間にか新規受付が終了していました。(2021/12/15終了)

楽天モバイルはSIMの0円プランもなくなりましたし、SMARTalkもサービスそのものがなくなるのは時間の問題かもしれません。050で始まるIP電話番号が無料でもらえて便利だったのですが・・・。

海外ロケーションと日付フォーマット dd/MM/yyyy

先日、ヨーロッパからの案件でXamarin Androidの開発をしていたときのこと。SQLServerへの日付型のデータで更新エラーが発生するという連絡をクライアントから受けたのですが、こちらでは何度やっても正常に動く。開発環境はすべてEnglish(UK)のOSでそろえているので言語環境も違いはないはず。違うのはロケーション、つまりタイムゾーンだけ。

詳細に調査したところ、System.Data.SqlClientを使ってSQLServerから日付データを取得するとき、AndroidOSが自動判別したタイムゾーンに応じて日付フォーマットが変化することが分かりました。どおりで日本だとエラーにならないわけです。

SQLServerで日付型のデータを保存するとき、既定では、

English(UK) : dd/MM/yyyy  -- 保存NG
English(US) : MM/dd/yyyy  -- 保存OK
Japanese    : yyyy/MM/dd  -- 保存OK

となっています。なので、以下のようなDateTime型カラムを更新するSQLはエラーになります。

--エラーになる
INSERT INTO T_TEST (InputDate) VALUES ('30/06/2022') 

「out-of-range value」というエラーを吐き出して、30月6日なんて日付はだめだよと怒られます。グローバルなアプリを開発する際は文化の違いを意識して作らなければいけませんね。対策は、DMYオプションを宣言して、

--エラーにならない
SET DATEFORMAT DMY
INSERT INTO T_TEST (InputDate) VALUES ('30/06/2022')

としてSQLServer側に欧州フォーマットでの処理をお願いするか、プログラム側で常にyyyy/MM/ddにフォーマット変換してからSQLServerに渡すことを習慣づけるかのどちらかですね。

面倒でも後者の方がバグは発生しにくいかもしれません。

Action PackのAzure特典

弊社はソフトウェア開発会社なのでMicrosoft Partner NetworkのAction Packに加入してお得にMSDNとOffice365を利用しています。その他の特典にAzureの特典があり、月間11,500円分が無料で使えることは知っていましたが手をつけていませんでした。

今回はAzure特典をアクティベートしてみます。

(1) パートナーセンターのポータルで特典の中からMicrosoft Azureを選択し、Office365の管理者ユーザーを割り当てます。

このあと、支払に使うクレジットの入力を済ませるとすぐに利用できます。手続き自体は割と簡単です。

(2) Azureのポータルに誘導され、しばらくするとサブスクリプションに「Microsoft Partner Network」が追加されており、「クレジットが¥11,500 残っています」という表示が出ました。これがAction Packの特典として毎月適用されます。

期限のある無料試用版と比べると大きな特典です。

無線LANアクセスポイントが品薄

小規模店舗向けの無線LANアクセスポイントの注文があったのですが、なんか法人用アクセスポイントが品薄の状態が続いているみたいですね。高値で仕入れてしまいました。

Meraki GoもAruba Instant onも在庫が少ないみたい。

コロナと半導体不足の影響なのかな?

Google Playも

続々とローバル企業がロシアでの経済活動を停止していますが、GoogleはロシアでのGoogle Playの課金ができなくなったとのことです。

大手クレジットカードやGooglePay などがロシアで使えないようになったという報道がありましたが、Google Playも使えなくなったということですね。決済手段の穴がどんどん塞がれていきますね。