2021年6月28日月曜日

WMIでファイルとフォルダの作成・改名を検知して名前に更新日時を入れる

WMIでファイルやフォルダの作成・改名イベントを検出して、対象アイテムの名前に応じて処理を切り替えるサンプルを作成しました。

2021年6月27日日曜日

denoをどうにかしてデスクトップアプリとして使いたい

この投稿は雑談的な内容です。
最後まで読んでも、特に役に立つ内容は(多分)ありません。
タイトルの通り考えて試行錯誤した経緯を書いておけば、後々何かの役に立つ機会もありそうな気がしたという感じです。

2021年6月26日土曜日

deno bundleコマンドで単一のJavaScriptファイルを作成する

すべての依存関係を含むJavaScriptファイルをコマンド一つでサクッと作れます。

2021年6月25日金曜日

deno infoを使用して依存ファイルをダウンロード

deno infoサブコマンドを使うと依存ファイルのURLが取得できます。
そのURLに対応するファイルをまとめてローカルフォルダに保存するサンプルを作成しました。

2021年6月24日木曜日

denoから全角文字を含むps1ファイルを作成して実行する

WindowsPowerShellがサポートする文字コードは限られています。
denoから出力できるファイル形式も、現状あまり選択肢はありません。
全角文字を含むps1を出力してPowerShellで実行するためのサンプルを作成しました。

2021年6月23日水曜日

denoでUTF-8(BOM付き)のテキストファイルを作成する

UTF-8(BOM付き)しか読み込めないプログラムがあり、どうしても そのプログラムと連携したかったため、必要な機能を作成しました。

2021年6月22日火曜日

denoからPowerShellを使ってファイルの更新日時を揃える

TypeScriptからJavaScriptファイルに変換するプログラムを昨日投稿しましたが、変換前後のファイルの更新日が揃っている方が好ましいので、更新日時を揃えるだけのサンプルを作成しました。

2021年6月21日月曜日

denoが作成するcacheファイルを使ってTypeScriptをJavaScriptに変換する

denoはTypeScriptをJavaScriptに変換してから実行します。
その変換後のキャッシュファイルが必要になったので、抽出するプログラムを作成しました。

2021年6月20日日曜日

deno compileで作成したバイナリファイルの終端側から切り出したファイルは同じバージョンのdenoに結合しないと動作しない

先日作成したサンプルでcompile後のバイナリファイルを、サイズを小さくした状態で保管できるようになりました。
しかし実行する際はcompileした時と同じバージョンのdeno.exeに結合しなければいけないようです。

2021年6月19日土曜日

deno infoをconsole.logで表示した場合とテキストファイルに出力した場合の違い

出力内容に対してRegExpを使用したら謎の結果になって、タイトルの件について確認したら違いがあることが分かりました。

2021年6月18日金曜日

TypeScriptでRegExpを使う方法

JavaScriptと同様に「'abc'.match(/b/)[0]」みたいな書き方をするとTypeScriptではコンパイルエラーになってしまいます。
回避する方法が以下。

2021年6月17日木曜日

(new Date)['get' + 'Month']()みたいな方法はTypeScriptではできないっぽい

JavaScriptではできましたが、TypeScriptでは駄目なようです。
ブラウザによって違うのかもしれませんが、少なくともDenoは受け入れてくれませんでした。

2021年6月16日水曜日

webSocket通信が必要になる度に接続するサンプル

webSocketの同時接続数には制限があるらしいです。
1つの接続を各機能で共有してやりくりする方法を昨日投稿しましたが、各機能が必要としたタイミングで接続して用が済み次第 切断する、というバージョンも作成してみました。

2021年6月15日火曜日

ブラウザからwebSocket経由でdeno.readTextFileを実行

先日作成したものと見かけは同じですが、中身が少し違います。
sendで渡したオブジェクトが持つプロパティによって異なる機能を呼び出せる仕組み(ただし今回はreadTextFileのみ)になっています。

2021年6月14日月曜日

deno compileで作った実行ファイルからdeno本体を除去したり戻したりするスクリプト

denoをインターネット接続環境が無いPCで使用する方法を先日投稿しました。
しかし、上記投稿の方法では、はっきり言って面倒臭いです。
もっと簡単かつシンプルな方法がありました。

2021年6月13日日曜日

webアプリを(若干)デスクトップアプリっぽく表示する

作成したプログラムがブラウザ上で動作する、またはインターフェースとしてブラウザを使用する場合、プログラムを起動すると基本的にはブラウザ内のタブの一つになる感じになりますが、それだと他のタブを閉じる時などに誤って一緒に閉じてしまう場合があります。
そういう問題の解決策の一つとして、chromeの機能が良さげでした。

2021年6月12日土曜日

実行したコマンドを中断したい場合は「Ctrl + C」

今はdenoでプログラムを作成・実行しているので中断したくなった瞬間にブラインドタッチでキー入力できますが、コマンドラインの操作をしばらく止めると また忘れてしまいそうです。
忘れっぽい自分の未来のためにメモ。

2021年6月10日木曜日

denoでwebSocketが自動切断されるまでの時間を調べる

webSocket接続は自動的に切れてしまう場合があるらしいです。
通信していない状況が一定時間継続すると切れてしまう場合は、その時間に達する前に通信するように仕組めば良いと思います。
まずは手元の環境で、どのぐらいの時間で切れるのかを確認するためのサンプルを作成しました。

2021年6月9日水曜日

denoで一時的なテキストファイルを作成する

テキストファイルを経由して何らかのデータの受け渡しをしたりする時に使用する。
path文字列は渡せるけどJSONみたいな各種記号なども含む長い文字列は無理な場合など。

2021年6月8日火曜日

denoでアクセス元に応じて処理を切り替える

deno上で動作するデスクトップアプリを作成してブラウザからファイルの読み書きや各種プログラムの起動などを行えるようにする一方で、ネットワーク接続された他の機器から「http://IPアドレス:ポート番号」で起動中のアプリの画面を開いて操作されるのは防がないと色々危険なので、アクセス元に応じて処理を切り替えるサンプルが以下。

2021年6月7日月曜日

denoでテキストファイルを作成する

任意のPathに新しいファイルを作成するサンプル。
全角文字のようなマルチバイトの文字でも問題なく書き込みできた。

2021年6月6日日曜日

Deno.runはダブルクォーテーションを渡す際に¥マークが入ってしまう

例えば「dir "C:¥ab c"」のようなコマンドを実行したい場合、「Deno.run({cmd:['cmd', '/C dir "C:¥ab c"']})」とすれば良い…かと思いきや、それを実行するとコマンドラインに渡る文字列は「cmd /C dir ¥"C:¥ab c¥"」となってしまいます。
これがどうにか回避できないと非常に困るので色々試した結果が以下。

2021年6月5日土曜日

denoでhttp接続用portを自動選択する(修正版)

deno上で動作するデスクトップアプリを数種類作成して、必要に応じて起動させたり終了させたりしたい関係で、TCP接続に使えるポート番号を探すサンプルを先日作成しましたが、意図した通りの動作になっていませんでした。
具体的には、使用中のポート番号でのサーバ起動をトライしたタイミングでエラーが発生してしまうという状態でした。
上記の問題を解消したバージョンのサンプルが以下。

2021年6月4日金曜日

denoでローカルエリアにあるテキストファイルのPathをブラウザから指定して中身を読み込むサンプル

ブラウザに表示されたinputボックスにテキストファイルのPathを入力してボタンを押すと、内容がテキストエリアエレメントに表示される、というサンプルが以下。

2021年6月3日木曜日

denoで自作モジュールを使用する

モジュールのimport/exportについてはdenoはECMA Script6に倣っているようなのでdenoに限らないのかもしれませんが。
一つのファイルに色々詰め込むと見通しが悪くなるので、分割できるようにするサンプルが以下。
実行結果




importしたいファイルを相対Pathで指定する場合は「./」が必須のようで、「import { test1 } from "sub.ts"」とした場合は以下のようになりました。

2021年6月2日水曜日

JSON.parse(), stringify()

モダンなJavaScriptとかいう物に慣れてる人には常識かもしれませんが、私は長らくHTAとWSHで戦ってきたのでJSONの入出力もテストしないと不安だったのでテストしました。

2021年6月1日火曜日

カレントディレクトリを指定した状態でcmdを起動する方法

最終的にユーザがアプリを日常的に利用する状況ではバッチファイルから起動できるようにしておくのが良いと思いますが、プログラムの開発中は、バッチファイルではなくコマンドラインから起動する方が手軽だったので、やり方をメモしておきます。