以前書いた記事の内容が古くなっていたため、今のやり方をメモしておこうと思い、記事にしました。
前提
WindowsでNuxtによるWebアプリ開発をする。NodeはローカルにインストールしたくないのでDockerを使う。エディタとしてVSCodeを使い、コード整形や構文チェックもしたい。
続きを読む →お仕事で使うHTMLベースのアプリを趣味で(?)Nuxtで作ってたんですけど。私はChromeで動けばええやろという感じでいたんですが、Edge(レガシー)で動かんぞみたいな報告を度々されるんですね。しかし開発環境はすでに新Edgeになってしまっていて、動作確認できない。
というわけでMicrosoftのサイトにある動作確認用の仮想マシンを使うことに。今回はHyper-V版をダウンロード。
さて、仮想マシンを起動して、EdgeのアドレスバーにIPアドレス:ポートを入力してもなぜか繋がらない。これで1時間ほど嵌ってました。結局原因は、デフォルトではnuxtがローカルホストからの接続しか受け付けないようになっているからで、ちゃんとドキュメントに書いてあるんですね。ちゃんとドキュメント読もう。それかExpressとか他のサーバを立ち上げて接続確認していればもっと早く気付けたかもしれない……。しょうもないことで時間を浪費してしまったので反省の意味を込めて文章書いてます。
Hyper-Vの仮想ネットワークについてよくわかっていなかったこともあり、内部用の仮想スイッチやNICを追加したりしてたんですけど全部無駄で、標準の設定で大丈夫でした。
忘れないうちに殴り書きしておこうと思います。
続きを読む →※2021.8.3追記:本ページの内容は若干古くなってしまったので、別の記事に書き直しました。
とりあえずできたのでメモメモ。Remote Development (VSCode Remote – Containers) を使います。
続きを読む →先ほど公開した bmscorelogview ですが、これまで小物ツールを作るときに長らく使ってきた WinForms はやめて WPF でやってみよう、と決めて製作し、とりあえず公開できるところまでたどり着くことができました。そこで、今回 WPF を学習した過程や、役立った記事などを記録に残しておきたいと思います。
久しぶりの更新です。
Selene のサイトが消滅してしまってから結構経ちましたね。最近は、Siv3D というゲーム・メディアアート向けの C++ 用ライブラリを使って遊んでいます。最新の C++ に準拠した形で作られており、各機能がクラスに分けられていてとても使いやすいです。Siv3D Game Jam という不定期イベントにもちょくちょく参加したりして、LASERREIMU の時のように同人ゲームをがっつり作る感じではないですが、プログラムを書く機会をちょっとずつ増やしてみています。
Siv3D Game Jam へ投稿したプログラムは GitHub で公開しています。
https://github.com/voidproc
それから普段プログラムを書いている中で便利だなと思ったちょっとしたプログラムは、GitHub Gist で公開するようにしてみました。その中でも Siv3D に関連するものに関しては、Siv3D ミニサンプル集 として別サイトにまとめていますので興味のある方はご覧になってみてください。
.
例えばC++で次のように列挙体を定義して、そのままの名前でLuaスクリプト側でも使いたいわけです。
enum Enum1 { E1 = 0x200, E2, E3, E4, };
↓↓↓こう書きたい↓↓↓
if foo == E2 then bar() end
でもそれをやるには、定義した列挙体を全部Luaのグローバル変数として登録しなければなりません。
luabind::object g = luabind::globals(L); g["E1"] = E1; g["E2"] = E2; g["E3"] = E2; …
enum定義した後で、Luaの方にも登録しなければなりません。
列挙体を1個増やすと、ソースを2箇所直さないといけない…。
これをいちいちやるのは、列挙体がたくさんあるととても面倒なので、なんとかならないものかと思っていたのですが、Boost.Preprocessorを使って楽になりそうだったので試してみました。
C++へLuaを組み込んでいる場合にMetaluaを使用するやりかたがわかったのでメモしておきます。LuaはLua for Windowsの5.1.4を使っています。
ちなみにMetaluaというのは、Luaにマクロ等の拡張機能を追加できるものです。Lua for Windowsに最初から入っているのですぐ使用できます。
まずはMetaluaの文法に則ってスクリプトを書きます(とりあえず script.mlua とします)。このままでは実行出来ませんのでMetaluaでコンパイルします。コマンドプロンプトにて以下を実行します。
metalua script.mlua -o script.luac -v --no-runtime
※–no-runtimeパラメータは状況により付けたり付けなかったり
この”metalua”というのはLuaのインストール先にあるバッチファイルです。見つからないというエラーが出る場合はパスを通してください(Win7ならC:\Program Files (x86)\Lua とかですね)
パラメータ -o でコンパイル後のファイル名を決めています。-v は進捗状況を細かく見たいという指定です。
最後の –no-runtime ですが、これはコンパイル後のスクリプトが自動でMetaluaライブラリをロードしないようにするオプションです。これを付けないと、コンパイル後のスクリプトに require “metalua.runtime” が付加されます。その場合、今回はC++からLuaスクリプトを呼び出すという前提なので、C++側の実行ファイルと同じフォルダにMetaluaライブラリが一式揃っていないとエラーになってしまうので注意してください。もちろん、–no-runtimeを付けた場合は他の方法でMetaluaライブラリをロードしておく必要があります。自分はprecompiler.luaを使ってruntime.luaがロードしている3つのファイル(base.lua, string2.lua, table2.lua)をコンパイルしておきC++に組み込む形にしました。具体的にはLuaインストール先のluaフォルダで以下を実行します。
lua precompiler.lua -o metalua -l metalua/?.lua metalua/base.lua metalua/string2.lua metalua/table2.lua
するとmetalua.cとmetalua.hが生成されるのでC++プロジェクトに追加し、そのファイル内に定義されている関数をlua_open()の後くらいに実行することでライブラリをロードできます。
そしてmetaluaコマンドにより生成されたファイルを読み込み、luaL_loadbuffer(), lua_pcall()して無事実行できました。
いちいちダイアログ開いて項目探して、って毎回やるのが面倒だったので。
Google日本語入力プロパティダイアログの「プライバシー」タブにある2つのチェックボックスをクリックして終了します。チェック状態を取得してなにか判定したりはしてません。というかAutoIt3でチェックボックスのクラス名とか取得できなかったので諦めました。
#NoEnv #WinActivateForce SetKeyDelay,100 SendMode, Event ; コントロールパネル「地域と言語のオプション」を実行 Run, intl.cpl WinWait, 地域と言語のオプション, , 5 WinActivate Sleep,100 ; 最初のタブじゃないと操作できない ControlGet, tabid, Tab, , SysTabControl321 if (tabid != 1) { MsgBox, 最初のタブじゃない(1) return } ; 「テキスト サービスと入力言語」ダイアログを開く Send, ^{TAB}d WinWait, テキスト サービスと入力言語,,5 ; 最初のタブじゃないと操作できない ControlGet, tabid2, Tab, , SysTabControl321 if (tabid2 != 1) { MsgBox, 最初のタブじゃない(2) return } ; Google日本語入力が選択されてないといけない ControlGetText, combotext, ComboBox1 if (combotext != "日本語 - Google 日本語入力") { MsgBox, Google日本語入力を使っていない return } ; プロパティを開く Send, !p WinWait, Google 日本語入力 プロパティ, , 5 ; 目的のタブページで設定切替 Send, ^{TAB}^{TAB}^{TAB}^{TAB}{TAB}{SPACE}{TAB}{SPACE} ; 確認して終了 Sleep, 1500 ControlSend, , {ENTER}, A ControlSend, , {ESC}, A ControlSend, , {ESC}, A
Visual Studio 2008でC++プログラムのデバッグをしようと思ったのですが、ブレークポイントを設定しても「!」マークになってしまい「ソースコードが元のバージョンと異なります」という表示が出てブレークできなくなりました。
リビルド、VS再起動を試すも解消せず。
で、結局ソースコードのコメントを少し変えるなどして保存しビルドし直したところ、なぜかまた無事ブレークするように…。
ファイルの文字コードを変更して保存したら解消したという例もあるみたいですがVSのバグなんでしょうか。
http://social.msdn.microsoft.com/Forums/ja/vcgeneralja/thread/eb1744d6-4304-45a2-a69c-502f826b1f40
VS2010は以前インストールしてみたんですがIDEの反応のもたつきが気になって使うのをやめてしまったので、まだ移行する気にはならず。。