OPC UA の ライブラリが githubに公開されていたので使ってみた

github.com

OPC UA Foundation が OPC UA のライブラリをgithubに公開していました。

OPC UA というのは、IoTのような組み込み系の分野でデータをやり取りすることを主な目的としたプロトコルです。WebSocketなんかが近いのかもしれませんが、もうちょっと分野に特化したプロトコルになっています。私も勉強中なので、詳しくはおいおいって感じです。

 

ここの回答にもあるように、SDKのドキュメントはさほど充実していません。サンプルプログラムや参照実装がいくつかあるので、それを元に手探りで作成していくのが基本スタイルのようです。

github.com

 

基本的にはgithubからクローンしてきて、Visual Studio でビルドすればサンプルは動きます。ただ、自分で作成したプログラムに組み込むとなると、どう動いているのかが理解できないと使えません。一番シンプルそうなサンプルがNetCoreConsoleClientそうだったので、これを動かしてみましょう。とはいえ、単純にREADMEに記載されている内容を動かすだけですが。

 

github.com

 

クライアントを動かすためには、サーバーが必要です。サーバーは適当なサンプルを動かしておきましょう。SampleApplications\Workshop\Reference\Server にあるサンプルプロジェクトが適当でいいと思います。ビルドして、動かしておきましょう。

 

サーバーが起動できたら、コンソールから dotnet run <サーバーのURL> を入力し、実行。サーバーの時刻がサブスクライブされて定期的に表示されます。

 

 

vimをwindows上で自前でビルド

色々調べてみたけど、結局はvimリポジトリの説明が一番充実してるし最新かな?と思う。

 

github.com

 

大体のことは https://github.com/vim/vim/blob/master/src/INSTALLpc.txt に記載されてるので、それ見ればいいと思う。

 

TERMINALオプション付きでビルド

13項にTERMINALについての記載がある。MSVCだとうまくビルドできなかった。mingw32 を使ってビルドするとうまくいく。例で挙げられているのはgvim.exe 版なので、vim版を作りたいときは、2項のMinGWのセクションを見ながら、やるといい、例にも記載があるが、`mingw32-make -f Make-ming.mak GUI=no vim.exe` で作れる。これにターミナルを追加したければ、`TERMINAL=yes` をオプションに追加するだけだ。

 

ターミナルを追加し、できたexeを起動して、おもむろに `:terminal` としてもターミナルは起動しない。なぜなら、Windows では winpty.dll を内部で使っており、これがないと起動できないからだ。なので、http://vim-jp.org/vimdoc-ja/terminal.html#E946 の MS-WIndows の項目にもあるように、winptyを公式リポジトリから取得してきて、所定のパスに入れなければならない。今回はmigw32で作成しているので、msvc2015のzipの中にあるia32のwinpty.dllを使わせていただく。所定のファイルをビルドしたvim.exe と同じフォルダに置き、wintpy32.dll と名前を変える。これでターミナルが起動できる。

LUA オプション付きでビルド

基本的には、9項 Building with Lua support に記載の通りでいける。

ちょっとはまったのは、前のobjファイルや、vim.exe を削除してなくて、ビルドでこけてた。objファイルはobji686フォルダ以下にできたりしてるので、自分の環境ごとに削除しておくこと。

LUAオプションに指定するディレクトリ名はmingwの場合、'/'を使うか、'\'をエスケープする必要があるようだ。'\'をエスケープせずに指定すると、その文字をエスケープだと認識して、正確にパス指定ができなくなり、ビルド中にヘッダーファイルが見つけられずにこけてしまう。

PERL オプション付きでビルド

`LUA オプション付きでビルド` に記載した内容に気を付けていれば詰まることなくビルドできる。ちなみに、私はActivePerl 5.24 をインストールした。

Perlのインストール先に perlxyy.dll (xはメインバージョン、yyはサブバージョン) があるので、そのファイルをvim.exe のあるディレクトリにコピーしておくこと。

RUBY オプション付きでビルド

これも 気を付けるべきところは `LUA オプション付きでビルド付きでビルド` と同じ。

後は、64bit版RubyInstaller を使っているとちゃんとビルドできないので、32bit版をインストールしておくこと。使用したバージョンは2.3.3

msvcrt-ruby230.dll が無いと使えないので、vim.exe と同じディレクトリにコピーしておこう。

PYTHON3 オプション付きでビルド

ビルドオプションでつまるところはない。ダウンロードモジュールは本家から32bit用のインストーラーを取得すること。

www.python.org

上記サイトの Download Windows x86 executable installer を選択

 

ビルドコマンド

私の環境では以下のコマンドでビルドできた (PYTHON3のオプションのパスはPYTHON3のインストールパスに置き換えること。ビルドコマンドそのままだと動かないので注意)

$ mingw32-make -f Make_ming.mak GUI=yes TERMINAL=yes IME=yes MBYTE=yes ICONV=yes CSCOPE=yes NETBEANS=yes STATIC_STDCPLUS=yes DEBUG=no LUA=d:\\src\\lua53 DYNAMIC_LUA=yes LUA_VER=53 PERL=C:\\Perl DYNAMIC_PERL=yes PERL_VER=524 RUBY=C:/Ruby23 DYNAMIC_RUBY=yes RUBY_VER=23 RUBY_API_VER_LONG=2.3.0 PYTHON3=$LOCALAPPDATA/Programs/Python/Python36-32 DYNAMIC_PYTHON3=yes PYTHON3_VER=36 PYTHON=c:/msys64/mingw32 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON_HOME=c:/msys64/mingw32 PYTHONINC=-Ic:/msys64/mingw32/include/python2.7 DYNAMIC_PYTHON_DLL=libpython2.7.dll gvim.exe

 

追記:

最近ではここも詳しく載ってますね。ありがたい。

vim-jp.org

loginsrv 試したみた

注:これは私的メモに近いものです。

 

loginsrv は JWTログイン認証をマイクロサービスとして提供できるようにするサーバー。ログイン認証の無いサービスにログイン認証を追加したり、SPAとかで重宝するのかもしれない。

github.com

 

以下の記事を参考にloginsrvを試してみた。私が以下に記述していることはここに全部書いてます。

mattn.kaoriya.net

 

わからなかったこと。

  • goreman の起動の仕方
  • gorem の使い方
  • github認証でのログイン
  • htpasswdでのログイン

goreman の起動の仕方

上記記事中にもある通り、goremanはforemanのクローン。複数のアプリを一括で起動できる(?)

 

github.com

なので、foremanと同じく、Procfileをカレントディレクトリに作成して、`goreman start`で起動するだけ。

ちょっとはまったのは、記事中の `web1: ./app` の部分。Windows だと `web1: app.exe` としないと起動できなかった。(go build の仕方によって回避できる問題なのかもしれない)

あと、Port を自動で環境変数PORTに設定してくれる。今回使っているサービスは使っていないようなので問題ないんだけど、環境変数を引数指定よりも優先して設定するようなアプリの場合は注意が必要かも?

gorem の使い方

上記記事中にもある通り、gorem は リバースプロキシサーバー。

github.com

config.json をカレントディレクトリにおいて、gorem で起動すればいいだけだった。簡単。

 

github認証でのログイン

自分のgithubページに行き、フェイスアイコンからSettingsを選択。Developer settings から OAuth applications を選択し、アプリを登録する。

私の場合は以下の情報を登録した

登録すると、Client ID と Client Secret が表示されるのでそれを loginsrv の引数として設定してあげる。

loginsrv -github client_id=xxx,client_secret=yyy

簡単。

htpasswd認証でのログイン

htpasswd には {user}:{MD5等でハッシュ化されたパスワード} という文字列が記述されたアカウントリストファイル(?)

以下のページでその情報を疑似的に作成。.htpasswd としてカレントディレクトリに保存。

tool-taro.com

そのファイル名をloginsrv の引数として渡してやると完成。

loginsrv -htpasswd file=.htpasswd

簡単。

まとめ

ログインを外部サービスに任さることができるのはだいぶうれしい。loginsrv が拡張されてtwitter やら facebook とかのアカウントでもログインできるようになったら面白いかもしれない。

 

goreman や gorem を使用すると、簡単に別々のウェブサービスが連結できて便利。今まではDocker-compose とかでやってたことが、数ファイルでカジュアルに実行できるので、そんなにでかいサービスを動かす必要がないのであれば使っていきたいなと思った。

 

以下に試した結果を上げておきます。

github.com

この4ヶ月で10年分の読書をした

だいぶ釣り染みたタイトルですが、この4ヶ月で技術書を5冊読みました。去年までの10年間で4冊しか読んでなかったことを考えるととんでもないスピードな気がしたので記録に残しておこうかなと。書評とかはないです。そういうのは苦手なのと、良い書評書かれてる方がいっぱいいらっしゃるので、その方たちにおまかせしようかなと。

今年読んだ本

こうやってみるとジャンルがバラバラですねw

何故4ヶ月で5冊読めたのか

ぶっちゃけプライベートにおけるプライオリティ付けを変更したってところが大きいと思います。というのは、今までは「読書<プログラミング」というプライオリティだったものを、「プログラミング<読書」に変えただけです。とはいえ、去年までの10年間ずっとプログラミングをハイプライオリティでやってきてたのか?って言われると返す言葉もないんですけどねw

でも、少なくとも、ここ数年はプログミラングを軸にプライベートを回してたってのは事実なので、そのプライオリティを変更したっていうのは読書を進める上での重要なファクターだったかなぁとは思います。

二番目に大事な点は、読みたい本、気になる技術の本を読むっていうことだと思います。やっぱりモチベーションは大事です。

後は、できるだけ毎日続ける。1ページでもいいから読書をするっていうのも大事だと思います。継続は力なりってやつですね。ですけど、気分が乗らないときは読まない。読書をするのが辛いという気持ちに自分の中でしないってのも大事ですね。強迫観念で読書をしても辛いだけですし、身にもならないと思います。

効果はあったのか?

それはまだわかりません。ですけど、この4ヶ月の間に知らなかった、もしくはうろ覚えだった知識が本を通して知れた、再認識できたってのは感じていて、今後の仕事なりOSSの活動にも影響してくるのは明確かなと思っています。VImは日々使う道具の一つなので、実践VImを読んでる途中でも。「お、これやってみよう」と思えるものがいくつかありました。また、最近goでアプリを作成することがあるんですが、みんなのGo言語にでてくる内容が参考になったりするので、コードを書いているときに、「そういえば、みんGoでこういうこと書いてたな」とか「こういう問題に対するやり方がみんGoに書いてたような気がいする」といった感じで、再読することがあります。そういう意味でも、読書は結構役に立ってるのかなと思います。

今後読みたい本

次は以下の本を読もうかなぁと思っています。

プロフェッショナルSSL/TLS(紙書籍+電子書籍)www.lambdanote.com

それが終わったら、以下の本が積読されてるので、順次消化していきたいなぁと思います。 あと、Amazonのほしいものリストにもまだまだ読みたい本があるので、そちらも消化していけたらいいなぁ。

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

 
ソフトウェアテスト技法

ソフトウェアテスト技法