2021年10月16日土曜日

denoは本体の機能をライブラリとしてエクスポートしていく方針?

importするライブラリのバージョンを指定するのを忘れていて悲しい目に遭い、ライブラリとの付き合い方を考えた結果、基本的には使わないというスタンスで行こうと思っていましたが、そういうわけにもいかないかも…という情報を見つけました。

2021年10月15日金曜日

deno chat

久しぶりにdenoを利用したプログラムを作成しようと思い、過去のソースをコピペして動作確認してみたらエラーが出るようになっていて、非常に悲しい思いをしました。
Denoマニュアルで推奨されているように、importするライブラリのバージョンを指定するべきだったのですが、していなかったのが原因と思われます…。
この際、ライブラリに頼り切るのをやめる事にしました。

2021年10月11日月曜日

自身のIPアドレスを取得する

ipconfigコマンドの出力から「IPv4 Address … : 192.168.250.100」のような文字列を抽出するプログラムを作成しました。

2021年8月30日月曜日

hta+ ver0.01

まだまだ機能の追加が必要な状態ですが、そろそろプロジェクト名のタイトルで公開しても良さそうな気がする程度の完成度になってきました。

2021年7月29日木曜日

WPFにWebView2を配置してmshta.exeの代替にするサンプル その2

前回のサンプルではファイルの入出力やコマンドの実行などはサーバ(deno)に頼る形になっていました。
今回のサンプルでは、WPFでファイルの入出力やコマンド実行ができるため、サーバが不要になりました。

2021年7月8日木曜日

WPFにWebView2を配置してmshta.exeの代替にするサンプル

WPFを使うのもVisualStudioを使うのも初めてで、ドキュメントも読まずに作ったので正しくない箇所は恐らく無数にある感じだとは思いますが、最低限やりたい事が出来るのは動作確認しました。

2021年7月3日土曜日

PWAを実行可能アプリケーションとしてLAN接続された複数のPCで使いまわしたい

※この投稿では具体的な解決策は示していません。
※願望を綴っているだけです。

使用するPCを変えるたびにインストールしなければいけないのは面倒そうな気がするので…。
こんな方法で出来るかも?とイメージだけ描いてまだ試していません。

2021年7月2日金曜日

denoでPWAを使ってGUIアプリを作成する

PWAはhttp://localhost/からも作成できることが確認できましたので、昨日のサンプルよりも、より実用的なサンプルを作成しました。

2021年7月1日木曜日

denoでPWAをサポートする、最もシンプルなサンプル

PWAを利用するためにはhttpsが必須だと思っていましたが、localhostの場合はhttpでもokでした。
denoを使ってPWAを使うための最もシンプルなサンプルを作成しました。

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を起動する方法

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

2021年5月31日月曜日

denoのプロセスをブラウザ側からwebSocket通信で終了させるサンプル

denoを使ってローカルマシン上で動作するクライアントアプリを作ろうとしている。
ユーザの視界に入るのはインターフェースであるブラウザだけにして、裏で動作するdenoが見えないように運用するイメージで検討中。
denoのプロセスを終了させるためのボタンをブラウザ上に配置するサンプルが以下。

2021年5月30日日曜日

denoとブラウザの間をwebSocketで接続するだけ

ブラウザからローカルファイルを読み書きしたり各種コマンドを実行できるようにするためにブラウザとdenoの間で通信できるようにしたいです。
まずは接続するだけのソースが以下。

2021年5月29日土曜日

denoでブラウザを起動してindex.htmlとcss.cssをロードするだけのwebServer

ファイルの種類に応じてcontent-typeの中身を変えないとcssファイルが有効にならなかった。

2021年5月28日金曜日

denoでファイルの有無を確認する

webサーバを立ち上げてchromeにアドレスを入れると「favicon」を要求されるけどローカルファイルが存在しなくてエラー発生し、サーバが落ちる、という感じになってしまう。
だから、ローカルファイルの有無を確認するためのソースが以下。

2021年5月27日木曜日

denoでscript自身のpathを取得

scriptファイルのpathから相対Pathでindex.htmlとかcssファイルにアクセスできるようにしたい。
そのためにscript自身のpathを取得する最低限のソースが以下。

2021年5月26日水曜日

denoでブラウザを起動する

htaの代用にしたい。だからdenoを起動するのと同時にブラウザを起動したい。
ブラウザを起動するのに必要最低限なソースが以下。

2021年5月25日火曜日

「deno compile」を使わない理由

denoをキャッシュから起動する方法を先日投稿しました。
denoには「compile」というサブコマンドがあり、「deno compile sample.ts」のようにすれば単一の実行可能ファイルが作成されるのに、なぜ手間をかけて他の手段を選択するのか…という理由は以下。

2021年5月22日土曜日

denoでhttp接続用portを自動選択する

この投稿の修正版があります。→修正版

空いてるポートが何番なのか分からず、調べるのも面倒なので片っ端から試してサーバ起動に成功したらポート番号を表示する、というサンプルが以下。

2021年5月21日金曜日

denoをインターネット接続環境が無いPCで使用する方法

「import { serve } from "https://deno.land/std@0.86.0/http/server.ts";」で標準ライブラリを手軽にインポートできるのは良いのですが、インターネット接続環境が無いPCで使いたい場合には困ります。
「"https://deno.land/std@0.86.0/http/server.ts"」をブラウザで開くとソースコードが表示されるので、それをダウンロードして上記の一文を「import { serve } from "server.ts";」にすれば良い…かと思いきや、"server.ts"の中にも「import ~~」という文が複数行 含まれていて、そのファイルにも「import ~~」が複数行含まれていて……という調子で、結局server.tsに関連する全てのファイルは13個ありました。
これを一つ一つダウンロードしていくのは非常に手間ですし、色々と間違えたりするリスクもあります。
そのような手間とリスクを回避して、インターネット接続環境が無いPCでdenoを使えるようにする方法が以下。

2021年5月20日木曜日

denoからGUIアプリケーションを起動したい場合、Deno.runではウィンドウが表示されない

Deno.run()でコマンドラインなどの機能を利用できますが、Deno.runから呼び出されたアプリケーションはバックグラウンドでしか動作できないっぽいです。
Deno.runからエクスプローラやExcelなどを起動したい場合のサンプルが以下。

2021年5月19日水曜日

deno v1.10.1のTextEncoderはShift-JISに対応していない

Deno.runでコマンドを実行し、その標準出力を得ることなどができるようになっているが、Shift-JISの文字列をconsole.logに渡すとエラーになってしまうので、下記の方法で対処する。

2021年5月16日日曜日

暗号通貨について思うこと

とっくの昔に他の誰かが思いついて提案しているか既に実現しているのかもしれないけれど、マイニングしている人同士で計算速度をひたすら競争し合って無益な暗号計算のために電力を浪費するのは勿体ないと思うので。

以下のような特徴を持つ有益な通貨が誕生すればいいのにと思った。


2021年5月15日土曜日

インストールしていないdenoを起動するバッチファイル

・node.jsとかdenoとか使ってみたい。
・しかしインストールとかは出来ればしたくない。(圧縮ファイルを展開するだけで利用環境が整うのが理想)
…という希望をバッチファイルで叶える方法が以下。

2021年5月5日水曜日

denoでテキストファイルを読み込む

Deno.readAllで得られる値の型はUint8Arrayなので、文字列として扱うためにはTextDecoderを併用する必要がある。
読み込んでconsoleに表示するだけのサンプルが以下。