MultiByteToWideChar、WideCharToMultiByteとBOMの関係

意外と記載がないのでメモ。

Windows API文字コード変換をする定番のAPIとしてMultiByteToWideCharWideCharToMultiByteがあります(「ANSI」とUTF-16の変換だけならATL/MFCCW2ACA2Wが手軽ですが)。

しかし、これらのAPIは、公式ドキュメントにもBOMの扱いが書いてありません。

msdn.microsoft.com

msdn.microsoft.com

どうなるか分からないと扱えないので、試してみました。

環境はWindows 10(64bit)上のVisual Studio 2017のC++、コンソールアプリケーションです。

結論としては、変換元にBOMがある場合は、変換後もBOMつきとなります。変換元にBOMがなければ、変換後にもつきません。BOMはUTF-16UTF-8で正しく変換されます。

続きを読む

npm-check-updatesからupdatesに移行しました。

npmのコマンドを打っていると、「おまえが使ってるパッケージに脆弱性あり。npm auditで調べろ」という警告が出ていました。で、調べてみると、全部がnpm-check-updatesの関連でした。アップデートの目的の1つは脆弱性の解消なのに、そのチェッカーが脆弱っていうのは笑えない話です(npm-check-updatesはめったに使わないし、攻撃経路は限られているような気はしますが、だからと言って脆弱性を放置したくはないのです)。

見てみたら、npm-check-updates自体、既に更新がほとんどされなくなってました。これじゃあ仕方ないですね。

そして、issueも立ってました。

続きを読む

WindowsからLinuxへの移行を試してみた

前提

  • 2018年12月の試行の結果です。
  • Ubuntu Mate 18.04 LTSに、Windows 10の環境を可能な限り移行してみます。
  • PCは両OSのデュアルブートです。
  • 個人的な都合で、Microsoft Officeの文書を受け取り、オフラインでも扱いたいので、完全な移行は考えていません。
  • 「~があります(あるらしいです)」ではなく、実際に試した結果だけ書いています。
続きを読む

Electronアプリケーションの翻訳(l10n)

Electronアプリケーションはクロスプラットフォームなのですから、可能なら世界各地で使えるようにしたいものです。そこで必要となるのが国際化(internationalization, i18n)と各言語対応(localization, l10n)。

文言からはじまってRTL(アラビア語など右から左へ書く言語への対応)、数字や日時の表記など色々とありますが、とりあえずここではアプリケーション上のメッセージの翻訳についてだけ考えます。

続きを読む

HTMLのカスタムデータ属性(data-*)へのアクセス

小ネタです。

HTML5でカスタムデータ属性(いわゆる「data-*」属性)が導入されましたが、JavaScript(やTypeScript)からのアクセスの際のキー命名規則については、MDNの記述がやや微妙です(ここでは原典として英語版を参照しています)。

続きを読む

TypeScript+ElectronでUDPポートで受信待ち受け

タイトルのまんまです。ただし、サンプルコードではなく実際的な話です。

Electronでsocketを使う時は、mainプロセスでNode.jsの機能を使うことになります。私の場合、UDPを扱いたかったので、 dgram を使います。

私が必要だった機能は、次のようなものです。

  • 特定のIPアドレスNIC)とポートの組み合わせに対して、受信待ち受けを開始・終了できること
  • IPアドレスとポートの組み合わせが既に使われている可能性があるため、その場合は利用者にエラーを通知できること
  • 複数のポートが一括で開けること(※実際には、今は使っていません。つまり1ポートだけ)

この場合、受信待ち受けを開始するには、1つの組み合わせに対する受信待ち受けをPromiseにして、それを束ねてPromise.allで実行し、then/catchで結果に基づく処理を行えばよさそうです。

続きを読む