C++/CX の小ネタ

.Net framework を C++ から扱うために、自分は C++/CLI を書いたりすることもあるのですが、今回 C++/CX にも少し手を出し始めたのでそのときの記録メモです。
慣れている人から見ればしょうも無いことを記録しているのかもしれませんが、あたたかく見守ってくれればと思います。

C++/CXとは

今流行の(?) UWP アプリを C++ で記述するときに使用する言語です。
CLI では .Net framework を扱ってきたように、 CX では WinRT を扱います。

各種方法まとめ

C++/CX ではどう記述するのかを場合に分けて記録しておきます。 C++/CLI ではおなじみの点については記載なしです。

オブジェクトの生成

gcnew から ref new に変わりました。
削除には delete を呼び出してもよいみたいです。

as 演算子

C# での as 演算子に相当するものとして dynamic_cast が使えるようです。

文字列について

このように記述することが可能。 こう書くのであれば、Lプレフィックスもつけなくてよいみたいです。
Cの char 配列も String コンストラクタに渡せます。

std::string, std::stringstream を使っている場合にはちょっと面倒が増えました。一度UTF8経由して wchar_t 文字列へと変換が必要でした。
変換が終わった後は String( oss.str().c_str() ) などで C++/CX の String に出来ました。

SHA1 ハッシュを計算

std::string の文字列から Cryptography API を使って、 SHA1 ハッシュを計算するには以下のようにします。
配列データのプロキシを作って、 CryptographicBuffer に入れて計算オブジェクトに渡します。

素直に配列を渡せないという点で、一手間増えてますね。

Task.Run

C#で非同期処理をやるのに便利だった Task です。
create_task 関数を使って同じようにできるようです。

タスクの実行スレッドを制御するには、この関数の第2引数で設定します。これにより現在のスレッドで実行したり他のバックグランドスレッドにやらせたりとできます。

UIスレッドで実行させたい場合には、 CoreDispatcher.RunAsync メソッドという方法もあるようです。
処理させたい内容をそのままラムダで渡せず、 DispatchedHandler でくるんで上げる必要があるようです。

まとめ

流行ってないからなのか日本語で C++/CX の情報ってまだまだ少ないですね。
C++/CX を触ってみて、C++/CLI のものとはまたちょっと違った風のコードになるという感触でした。
1つ気になったのは、コンパイル速度がやや遅めであるという点です。ヘタしたら C++ のコードよりもコンパイル遅いかも。


OpenGL 4.6 発表!

2017年の SIGGRAPH で OpenGL バージョン 4.6 が公開となりました。
Vulkan が登場して、 OpenGL もバージョンアップを続けるとといわれても不安なところでしたが、ちゃんと出ました。
今回の目玉と個人的に思っているのは、 SPIR-V 関連が標準サポートに入ってことですね。これで事前コンパイル済みシェーダーを OpenGL でも使うことが出来るようになります。

SPIR-V を OpenGL で使用してみることは 4.5 のころの拡張で入っていました。このときの実験の結果は以前の記事に書いてあります。興味のある方はそちらも参照ください。
続きを読む



仮想マシンへD&Dが効かないときにチェックすること

近年の仮想マシンには VMwareTools をインストールするのではなく open-vm-tools をインストールするというのが定番になってきました。しかしながら、これで少しだけ手間取りがあったので記録として残しておきます。

同じように悩んだ人がいたら、その解決に役立てるのではないかと思います。

症状

VMware Player なり Workstation なりに、 Ubuntu 17.04 をインストールしました。
そして open-vm-tools もインストール済みの状態でした。

しかしながら、クリップボードでの文字列コピーやファイルのコピーが機能しませんでした。
仕方なく VMwareTools をインストールしようとしても、open-vm-tools のほうを推奨される&そもそもファイルパス情報が色々と変わっていてインストールにも手こずる始末でした。

解決策

実は open-vm-tools のインストールだけでは、目的のものは含まれていないようです。
本当に必要としていたのは、”open-vm-tools-desktop” でした。

そのため、以下のようにコマンドをたたいてインストールして、再起動を行えば無事に各種機能が使えるようになりました。

open-vm-tools という名前が有名になっていて、仮想マシンのデスクトップ環境では、このパッケージだけでは足りないとか、ちょっとした罠だったなと思います。
以前にも同じように有効にならないことで不思議に思っていましたが、これが原因だったのかなと今になって思いました。


curl で Cookie 認証突破

様々な Web サービスがありますが利用する際に、ユーザーはまずログインして使用するといったものがあります。
有名どころはアプリケーション用のAPIキーを発行して使用させてくれたりしますが、そうでないところもまだ残っているんじゃ無いかと思います。
それと、 API キーを発行するまでじゃないんだよなぁといったときに、ログインしてちょっとだけ処理させたいといった需要でなんとか出来ないかトライした記録です。

はじめに

通常の Basic 認証なら、 curl のオプションに設定して終わりだったりします。ここでは専用のログインフォームがあって、そこに入力するといったものを想定しています。

ここで対象にあげたサービスらはちゃんと REST API を備えているので、今回紹介するような話は全く不要のものとなります。無駄な努力は避けるようにしましょう・・・。

続きを読む


Cloud9 IDE をサーバーにインストール

クラウド開発環境サービスの Cloud9 の IDE については、オープンソースとして公開されているため、 Linux 環境に入れて使うことができます。
これを利用して、開発サーバーに Cloud9 IDE をインストールして、ブラウザで開発ということにトライした記録です。

インストール

Ubuntu 17.04 にインストールしてみました。
Cloud9 Core (https://github.com/c9/core.git)として環境が公開されています。
一般ユーザーの環境にインストールすることが前提なのでその点にご注意ください。
続きを読む


話題の IGZO 7.9 インチパネルを買った

つい先日、発売になっていた秋月電子通商の IGZO 液晶パネルセットを購入しました。
小さめ液晶ディスプレイ欲しい派の自分としては、今回3種類もバリエーションがあるため、どれにしようかかなり悩みました。
5.5インチで Full HD (1920×1080) か、 6.0 インチで 2560×1440、 7.9 インチで 2048×1536 どれもこれも魅力です。

続きを読む


GitHub API ツールビルディング

GitHub で公開されている API を使って、色々なことができるのかと期待している今日この頃ですが、以下のような書籍を見つけました。
これの紹介文の一部に、「GitHub API と使った ツール作りのアイデアが満載」という帯もあって購入してしまいました。また、サブタイトルにも「GitHub API を活用した拡張とワークフローのカスタマイズ」とあって、この部分に興味引かれてつい買ってしまいました。

続きを読む


GPUを支える技術

近いうちに発売になるらしいですが、タイトルを見て興味があったのでご紹介です。

以前にCPU側のほうでは、以下の書籍が既に発売されており、これは個人的には評価高めだったのでGPU編も期待しているところです。

既に基礎技術として、技術者の中でも教養として知っている必要のある部分だったりしますが、
このように書籍としてまとめられているところに価値があると思っています。

最近は色々な書籍の発刊ペースが落ちてきているので、良さそうな本が出てくると嬉しいですね


VyOS で IPv6 の設定メモ

VyOS ルーターで、 IPv6 の Router Advertise を流す設定を行います
このあたりを見ると設定の詳細があるようです。 https://wiki.vyos.net/wiki/Network_address_setup

IPv6 アドレスとして 修正EUI64 のアドレスを生成・セットさせる手順