Falconの思うままに

PASCAL好きが、気ままにマニアックなネタを

TMS Webcoreはリアクティブか?

さて、みんな大好きTMS Webcoreの話です(笑)

 

Svelteがリアクティブだという話で勉強していますが、

ではTMS Webcoreは? と考えるとリアクティブではないかと

思っていますが、みなさんどうですか?

 

画面の更新は意識せずにできてしまうので、Web開発で、説明される

リアクティブにする方法や構文がさっぱり頭に入ってきません(汗)

親コンポから子コンポへ渡す構文とかもないです...

 

Svelteはコンパイラだということですが、TMS Webcoreコンパイラ

ですよね? TypeScriptでバニラJavaScriptにするのと同じで

文法がPascalですがバニラJavaScriptになります。

う~んもしかしてTMS Webcoreってすごいことしているのでは

と思うのですが...

 

そもそもPas2Jsというトランスパイラがそのコアになっているのですが、

FreePascalで使われていて、ウイジット周りが充実しなかったので

主流にならなかったという記事をみました。

ちなみにウイジットはCTを入れると入っているのでFreePascalな人は

CTを見てみてください。

 

私みたいなローカル環境でしか使わない人はTMS Webcoreこれで十分ですね。

コンポーネントベースでプログラムが組めますしJavaScriptライブラリも

使えます。

たぶんメーカーもそういう感じではないでしょうか。

 

結論は比較するのが間違い。土俵が違うになりましたが、

PHPフレームワークを出しますが、Pradoはご存じでしょうか?

車の名前じゃないですよ(笑)

TApplicationとか定義があってDelphiと同じっぽい名前がたくさんあるんです。

Delphi for PHPの遠い親戚みたいな感じだったのですが、オリジナルの開発者

は限界を悟り別のYiiというフレームワークへ移りました。

Node.js->Denoみたい感じですかね。

取り残された感じですが、いまだ開発は続いているようです。

マイナー扱いで英語記事も本家くらいしかないです。

使ってみたいんですけどね。マイナーだからではないですよ(笑)

 

ではでは。

TMS Webcore WebSocket

TMS WebcoreのWebSocketの扱いのTIPSです。

WebSocketの接続をフロントからかける場合、

接続命令 WS.connect; を行って非同期でOnConnect

イベント待ちになります。

ごく普通の話ですが、接続異常の場合リトライをしないと

フロントは話が終わってしまいます。

 

ということでTimerでリトライしますが、ここではまりました。

OnConnect待ちを無視して、Connectをリトライで発行すると

いつまでもつながらない状態になります。

 

なので、Connectからタイムアウトを取って、それから

再度Connectするプログラムにします。

 

これであれば、サーバー側が再起動しようが、接続してくれました。

状態管理が必要ですが、非同期は面倒ですね。

私はスレッドにしてBlocking I/Oで組むやり方のほうが好きです。

 

普段Delphiで組んでいると気にしていない部分だったのですが、

JavaScriptにトランスパイルされるので、頭の切替が必要だったという

話でした。

 

ちなみにTMS Webcoreを使ったからといってThreadでプログラムが

かけるわけではないです。

Timerで非常に遅いスキャンのシーケンス制御として書きます。

私の守備範囲はサイクリックな処理が必要な部類です。

私はステートマシン的な組み方は嫌いですね。

制御系でラダーをこれで組んでくる人がいますが、

インターロックがかみ合わないことが多いです。

 

ではでは。

 

Chromeのアプリモードがいい感じ

さて、ChromeLinuxでもWindowsでも使える便利なブラウザです。

キオスクモード(Kiosk)はご存じでしょうか?

ウインドウ枠やアドレスバーなどブラウザ部分をなくして中身だけ

を表示するモードです。

いわばサービスエリアの道路交通情報のような画面を出したい場合に

使うといい感じのモードです。

 

上記の他にアプリモードというのがあります。

ウインドウバーはでるけどもアドレスバーなどを消して

通常アプリのようにふるまってくれるモードです。

VSCODE状態なのですが、あくまでWeb画面がでているだけです。

どちらかというとタブを作らないSPA画面のものに向いています。

Chrome内のショートカットを作成から作られます。

デスクトップにショートカットを作ってくれてFabiconで

アイコンまで作るので、とても便利です。

 

もしかしてPWSアプリで作らないと駄目なのかなあ。

PWSだとアイコンを解像度別に3個登録するので、それ用

なのかもしれないですけどね。

 

FireFoxにもkioskモードはあるみたいですが、

Chromeを参考に作っているようで、Chromeがブラウザの機能を

リードしている気がします。(あくまで私の意見)

 

まあ、kioskとか狭い世界でしか必要ないですな。

アプリモードはどうでしょうか?

知っていると便利ですよ~

 

組み込み派の方はChromeはインストール状態だと自動Updateや情報送信などが

入っているので、組み込みで使う場合はノウハウがないとメモリオーバー

になるので注意してください。

CドライブをROM化するとはまります。

中でもタスクスケジューラで自動Updateを仕込まれるので、

気づきにくいので注意です。Edgeもですが.....

 

ではでは。

 

RESTサーバーを立てる

TMS Webcoreの話です。

さて、REST APIサーバーが必要になりました。

そうJavaScriptだとDBへアクセスできないので、

RESTでの通信となります。

TMS WebCoreではノーコードでのデータ取得を行えるような

しくみを用意してくれています。

さすが商用ですね。

ただTMS XDataというのがサーバー側テクノロジーなのですが

基本Windows Onlyになります。

(LinuxもEnterpriseでコンパイラもっていればOKみたい)

ということで持ってないのでLinuxですとFree Pascal

コンパイルになるんでSQLDBRestBridge

というのが対応しています。

FreePascalのFCL-Webの中にあるようです。

TMSが対応するということは品質は一定以上あると踏んでいます。

 

サーバーで上記コンポーネントベースのサーバーを立てられれば

TMS Webcore側はDBコンポーネントが使えます。

これでノーコードに近い開発ができそうです。

REST定義してコード組んで、JSONで渡してクライアントで

パースして画面に描画までの面倒を一気に処理してくれそうです。

 

DBのデータバインドはDelphiの伝統ですね。

なので、ちょっと調査してみます。

サーバー側をNodeRedでやってもいいのですが、RESTサーバー

経てるのがしんどそうなのでこういう話になっています。

ExpressかPythonでFastAPIなんかもいい感じに見えます。

 

TMS Webcoreでデータベース連携されている方どうしていますか?

情報ください。

 

ではでは。

 

Docomoを解約

さて、親のDocomo契約はなんかいらないオプションてんこ盛りで

契約しているっぽいが、もう携帯納めということで、

解約したいのだが、ドコモショップへいかないといけない。

今は予約いらないということを、電話で知ったのですが、

以前は予約制で解約するにも予定を組まないといけないのと

一緒につれていかないといけないので、解約のハードルが高かったのです。

 

ということでドコモショップへ行かず解約する方法ですが、

MNPすればいいということです。自動解約です。

 

MNPの予約番号は電話で取得することができます。

本人確認と、解約する携帯で通話できることが条件らしい。

通話できないとドコモショップ行き確定です。

15日間有効とのこと。

それがあれば、任意の会社へMNPできますが、イオンモバイルが

お勧めです。

イオンにいけばいいので、とても気軽です。

店頭で店員が対応してくれるのと、店員自体のスキルが高いので、

何の問題もなく処理してくれます。

 

縛りもなく、オンラインで手続きもできるので、店員対応と

Web対応もできて理想の体制です。

イオンモバイルはデータはシェアで、今は同一名義で8回線?

までいけるらしいので、家族全員加入でも月1万いかない生活が

できています。

 

ということで、回しものではないですが、たまには携帯の話題もということです。

 

ではでは。

HomeAssistantのインストール[専用OS]

前の記事でHome AssistantをDockerで起動する記事を書きました。

うまく起動して設定できたものの、なんとBlueToothスピーカーの

再生が使い物にならなくなるという、まさかの影響がでました。

Dockerを停止したら、回復するので間違いないです。

 

なんででしょうか?(汗)

ということでDockerでの運用はあきらめて、空いているラズパイ3を

活用することにして専用OSで入れることにしました。

raspberyPi Imagerにそのほかのインストールイメージとして

HomeAssistant が入っています。

ここから専用OSとしていれます。

16GBのSDカードでやってみました。

書込みは軽いですね。

それで電源をいれてBootが始まるのですが....

Home Assistant CLI not starting jump into emergency console

 

とでてSingle user mode (init 1)相当の画面で止まってしまいました。

何度書き込んでも駄目

はまったと思っていて検索すると

login

と打ち込めばいいよと書いてある記事をみつけました。(英語)

打ち込むとCLIが起動してWeb画面を開くように指示がでました。

本当にこれだけ... 初見殺しじゃないですか~~~~

1回目は必ず駄目になるのですかね。よくわからないが

このパターンはマイナーコースらしいのでそういうものということで、

広く知らせる目的で書いています。

 

セットアップに20分かかるのでじっとがまんです。

じつはSwitchbotのHUB2がDocker Verで失敗していて、

専用OSでならいいかと思ってトライアルをかねています。

 

どうもHomeAssistantはIP v6が必要な記事があって、家のラズパイは

v6殺しているんじゃないからかなと思っています。

 

ではでは。

 

Svelteを試してみた....トホホ

さて、Svelteを試してみようと思って解説書を買ってしまいました。

 

さあということでおひとり様サーバーで環境構築といきました。

初心者なので、言われたとおりにしたのですが、

node.jsは入っていました。

npmでおまじないを打ち込んでファイル生成します。

npm run dev

しました。

エラー発生。原因はSyntax Error....

なんですと~~~ 初心者なんでまったく原因不明です。

いきなり出鼻をくじかれました。

そう、これで初心者はめげるよなあ~~~と思いました。

 

どうしよかと、一呼吸おいて、う~んよくわからんが、node.jsが古いからじゃないか

ということで、nodeのパッケージ管理の話を思い出しました。

nodeはapt installで入れたやつです。

でも動かないので、removeしてnvmを入れることにします。

これ、なんか任意のnode.jsを入れれるやつですよね。

ということで

nvmをいれて、nvm install --lts

をつけてlts版をいれました。

再度npmのおまじないを唱えると、

npm run dev

できました。(汗)

Node.js のVersion古いと駄目なのね。 書いてないし......(常識?)

ということで、DelphiのことはわかってもNodeのことはわからない人が

やるとこんなものです。

 

Hello Worldがやっと終わりました。

この後苦難が続きそうですな....

 

 

ではでは。