2021年9月16日木曜日
GAS使ってみた
2021年9月8日水曜日
golangで画像処理してDXF作った
ある会社さんから画像からDXFを作って欲しいという案件がきたので、
golangで試しに作ってみた。
ちなみに環境は相変わらず、RaspberryPi4 にVSCでリモート接続して開発している。
元画像から輪郭を抽出するところは、https://github.com/hybridgroup/gocv を使わせていただいた。
元画像
使わせていただいたものばかりだけど、
それを知っても出来ない人には一生できないだろう。
それがプログラムというものだ。
2021年9月7日火曜日
JSONから展開したフォルダを検索して目的のデータを得る方法考察
とりあえず出来上がったファイル構造でgrep検索してみた。
データが少ないからかもしれないけど、画像も混ざったDATA.txtがある中、結構な速度で結果が得られるもんだなぁと感心した。
さすがgrepさん
vscodeでも検索したけど、まぁ早いよね、どうなってんだろうね?
実際のSELECTでは例えば、jsonRoot.recipe.materials[]のデータを検索対象としたい。
この場合、recipeにはDATA.txtがあって、そこにUUIDのフォルダ名が並んでる。
そのフォルダの下にはmaterials[]フォルダがあって、そこにもDATA.txtがあり、そのファイル自体も検索対象なんだけど、UUIDが記録されていたらその下も検索対象となる。
grepが探すよりは断然少ないファイルを検索して求める値があるかどうかで、ルートノードを決定する。
そんで、SELECTしたい値をルートから持ってくるのも同じやり方ってことになるが、SELECTしたい値の指定方法はまだ悩んでる
SELECT_NODEだったら、そのノード以下全部
SELECT_ITEMSだったらノードの中から指定したITEMだけ
って感じだろうか?
例えば、TITLEとMAINIMAGEだけ取得したい時はSELECT_ITEMSだよな
RECIPE全体のデータが欲しいときはSELECT_NODEって感じだろうか
SELECT_NODEの場合はノードのUUIDも返してあげた方が便利だろう
2021年9月6日月曜日
JSON2FolderStructure(JSONからフォルダ構造への変換)
色々あったが、JSON DBライクなものを作ろうと決意した。
とはいっても、一度フォルダ構造へ展開し、
その後、フォルダに対するアクセスを行うことで、JSONのアクセスを行う仕組みを考えている。
だって、フォルダのがファイル仮想システムより早いでしょ?
それにファイルが壊れても、壊れた責任はOSに取らせられる。
つまり、ファイルの復元なども、OS側の機能にまかせられるはず。
そして、フォルダ展開しておけば、バックアップはフォルダ事コピーで済む。
この決意をしたのは、Sedna XML DB がラズパイでコンパイルできなかったからだ。
それに今どき、Golangでお気楽に逝きたい。
C++とか、もうないわーと思うし!
JSONを食わせると、1バイトずつ判定しつつ、JSONのキーやバリュー配列なんかを考慮し、フォルダに展開する。
展開結果は図の通り
3枚の画像が入り合計1M程度のJSONだが、WSLで動かして700mSecから2秒程度でインサートできる感じ
WSLが遅すぎるんじゃなかろうか・・・
さっきWindowsUpdateする前は、700mSecだったのに、今アップデート後にもう一度やってみたら、めちゃ遅いんですけど、倍から3倍くらいかかるようになったんですけど?
どういこっちゃ・・・
あとで、ラズパイで環境作ってやって見ようと思う
んで、やってみた。
golang 1.17をRaspberryPi4に入れてやってみたんだが・・・
5秒から7秒弱かかる。
こりゃやばいなぁ・・・なんでこんなに遅いんだろう?
SDカードだから?
HDD付けてそっちに書いてみるか?
いや、でも、SDカードは読み書き100MB/Sくらいはあるはずだ。
たかだが、数百キロのファイルを書き込むのにこんなにかかるわけがない。
もしかして、ファイルアクセスは遅いのか?
なので、データベースは仮想ファイルシステムを使っているのか?
よくわからんす・・・
そこら調べてみるっす
ベンチ調べたらファイルのReadで時間がかかってた。
一度os.ReadFileしてから、bytes.NewReaderでio.Readerにしたら0.226sで終わった。
なんじゃこりゃ・・・
ファイルから1バイトずつ読むと遅いのか・・・
まぁ一度に書き込んだ方が早いわなそりゃ
昔そんなコピーツールがあったっけ・・・
いずれにしろ、テストコード側の問題だったので、ネットワークから渡ってくる文字は全部読んでから処理する方針だし(早くRead終わりたいからね)本体側プログラムいには問題が無いと思われる。
2021年9月1日水曜日
Zesty Nimble V3(Flex)
2021年8月31日火曜日
JSONのフォルダ構造への変換
node.jsにjsondirというのがあったので試した。
うん!
これ、全然使えないね?
例も酷いけど、結果も酷いんで、これは参考にしかならないとして諦めます。
それと、日本語入れたら動かなかったよ
まぢ使えない
まず、{}はフォルダにするべき
3がファイルになってるのはどういうポリシーだ?
dが消えてる
cフォルダの下にuuidフォルダ作って中に、"-type":"d"って書くべきだろ?
アルゴリズムにポリシーが無いので、バグってるようなもんだわ
誰にもメンテされずに消えるわけですね
発掘する価値も無かった
2021年8月30日月曜日
Golangのプラグインに関する考察
プラグインとして Go から外部スクリプトを実行するのが、
遅くて仕方ないのではないかと思えてきた。
Go Nativeは、やはり早い
Pythonはまぁ遅いほうだわな(PerlやRubyよりは早いと思うが)
Ottoがめちゃくちゃ遅い
で、tengoが早いかと言うと、Go Nativeよりは比較にならないくらい遅い
ということで、SOファイル作って呼び出す形にした方が良さげだ
Linux系しか動かない作りになるが、まぁ別に問題ないだろ
気になったのでフィボナッチでベンチマークを探してみた。
https://ma-tech.centurysys.jp/doku.php?id=mae3xx_tips:test_fib_benchmark:start
Nimはえーな、まぢかよこれ
フィボナッチのベンチマークをもっと探してみた
https://github.com/drujensen/fib
おや?Nim遅くなってんぞ?
Pascal早いな
え、Haskellどうなってんのこれ?
ASMより早いんだけど?
え、Golang遅いな
まぁ、大体こんなもんだろうな・・・
アセンブラをガリガリ書いて、
ゲームのVSyncやHSync割り込みで動くようなものを作っていた身としては、
外部スクリプトなんか使いたくねぇなって気分になってきた。
2021年8月29日日曜日
GolangとJavaScript
GolangからJavaScriptを呼んで、JavaScriptからGolangの関数を呼ぶってことが出来るらしい
Ottoというパッケージがあって、EcmaScript5までらしいんだけど、
JSONをJavaScriptで扱ったり、Golang側に返したりするのもできる。
↓JavaScriptからGolang関数の呼び出し部はやってないけど一応の例
https://play.golang.org/p/KY8d9OsaA-q
2021年8月26日木曜日
golang BuntDB まぢすげーわ
これすげーよ
JSONとか入れられるし、インデックス作れるし、キーで取得できるし、mongoDBよりいいんじゃねぇ?
俺が作ろうとした機能が全部ある
というかなんでみんなこれ使わないの?
https://pkg.go.dev/github.com/tidwall/buntdb
これとGoで作られてるJavaScript
それと定番のnet/http
これらを組み合わせたらバックエンドサーバ立てて、
受け取ったJSONをJSのJavaScriptに投げ、
JavaScriptからクエリを処理するGolang関数を呼び出し、
結果をJavaScript側で受け取って、Golangサーバに戻し、
Golangサーバからフロントに戻すプログラムが作れるよね
つまり、MEAN的なものが、上記組み合わせでつくれるわけっすよね?
まぁ俺、AngularJS嫌いなんで、
フロントは普通にJQueryでいいんじゃね?と思うけどね?
てか、V8が早いって言ってもgolangのJSのが早いよ
それとNode.jsごときでサーバ作るくらいならGolangのサーバのが早い
桁違うほど早いと思うよ
2021年8月17日火曜日
MyDNSさんのletsencrypt用ツールで助かった・・・
letsencryptを使いやすくするためのcertbotというものがあるんだけど
apt installしたものとsnapしたもので競合してたので、
apt purgeしたらcertファイルも綺麗に消えてしまった。
焦ってsnap版certbotを入れて、
.well-known/acme-challengeを80でアクセスできるようにして、
その時は/usr/share/nginx/htmlをrootにしたんだけど、
どうしても--webrootも--nginxも動かない・・・
あれこれ試して、manual の dns TXTレコードを使った方法へ移行した。
独自ドメインを取って、MyDNSで設定してるんだけど、
MyDNSさんは、gitにツールを置いててそれを使わせてもらった。
https://github.com/disco-v8/DirectEdit
ここから頂いてきてReadmeの通りやってみたら、
fullchain.pemとprivkey.pemが出来上がってくれた。
TXTレコードを扱えないとだめなので、
DDNSNowさんだとこの手も使えない。
いやーHTTPSに対応させるのすっげー大変だわ
なんでこんなにやり方が変わるんだろう?
まぁ、無駄に3つも認証キー作ってたから、
今回yachiyo.techと*.yachiyo.techを作って、
キーを統一できたのは良かったかもしれない。
問題はこれが certbot renewで素直に更新できるかどうかなんだよなぁ
2021年8月15日日曜日
ZOSI ZR08AN rebooting randomly
- Put out all cameras first
- shutdown system and eject power plug
- replace HDD
- plug power and boot up
- Format HDD
- reboot after succeeded for formatting HDD
-
どうも書かなくてはならないネタが出来てしまった。 マルチスレッドには欠かせないSleep(0)についてだ。 自分はSleep(0)を多用していた。 MSDNの記述 によると 「中断時間として 0ms を指定してこの関数を呼び出すと、現在のスレッドは自らに割り当てられている...
-
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-bindi...
























