2021年8月31日火曜日

JSONのフォルダ構造への変換

 node.jsにjsondirというのがあったので試した。

https://stackoverflow.com/questions/28256945/creating-a-folder-structure-from-definitions-on-a-json-file

var jsondir = require('jsondir');

jsondir.json2dir({
    "-path": 'dir',
    "myfile": {
        "-content": 'Hello world!'
    },
    "mydir": {
        "a": {
            "b": {
                "c": {
                    "-type": 'd'
                }
            }
        },
        "1": {
            "2": {
                "3": {}
            }
        }
    }
}, function(err) {
    if (err) throw err;
});


jsondirTest$ tree dir
dir
├── mydir
│   ├── 1
│   │   └── 2
│   │       └── 3
│   └── a
│       └── b
│           └── c
└── myfile

6 directories, 2 files

うん!

これ、全然使えないね?

例も酷いけど、結果も酷いんで、これは参考にしかならないとして諦めます。

それと、日本語入れたら動かなかったよ

まぢ使えない


まず、{}はフォルダにするべき

3がファイルになってるのはどういうポリシーだ?

dが消えてる

cフォルダの下にuuidフォルダ作って中に、"-type":"d"って書くべきだろ?


アルゴリズムにポリシーが無いので、バグってるようなもんだわ

誰にもメンテされずに消えるわけですね

発掘する価値も無かった




2021年8月30日月曜日

Golangのプラグインに関する考察

プラグインとして Go から外部スクリプトを実行するのが、

遅くて仕方ないのではないかと思えてきた。

https://github.com/d5/tengo

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

https://pkg.go.dev/syscall/js


それと定番のnet/http

https://pkg.go.dev/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

It was cause of wrong formatting procedure.

  1. Put out all cameras first
  2. shutdown system and eject power plug
  3. replace HDD
  4. plug power and boot up
  5. Format HDD
  6. reboot after succeeded for formatting HDD
That’s all

I was connecting camera while formatting.

I tried changing camera, check connection, changed power supply location, but I can’t figure out problems.

But reason is very simple.
Don’t connect camera while formatting.

ZOSI ZR08AN の再起動を繰り返す症状

ハードディスクのフォーマットの仕方が悪かったようだ。

  1. 最初にカメラを外す
  2. マウスだけ繋ぐ状態でシャットダウン
  3. ハードディスクを付け替える
  4. 起動する
  5. フォーマットする
  6. 成功したら再起動させる
以上だ
自分はカメラを繋ぎっぱなしでフォーマットしていた。
カメラが悪いのかと、何度もカメラを付け替えたり、一台ずつ試した、、配線も見直し、コンセントの給電も確かめたがダメだったのだ。

カメラを全く繋がない状態で動かしていたら再起動しなかったので、カメラが原因と思い込んでしまった。

2021年8月14日土曜日

昔結構大きめのタイトルのゲームを作っていた時の話

ゲームボーイだったんだが、ほぼ二か月でシミュレーションRPGを作ったことがある。

二か月家に帰れず、大量のデバッグシートが発行され、重複バグの山で、シートの整理でも時間がかかり、仮眠3時間しか取れず、近くのアパートの一室へ仮眠に行くのだが、二段ベッドが山の様に並んでて、各ベッドに目覚ましが付いてる。

コーディングしている最中はずっと、俺の真後ろで腕組みしてパイプ椅子に社長が座って、寝たり起きたりしながら俺の事を監視していた。

ある日久しぶりに家に帰ってテレビつけたら地下鉄サリン事件起こってて、俺巻き込まれるところだった。

俺、よく生き残ってこれたよ・・・

2021年8月11日水曜日

掲示板と言うか何というか

SF混じりに徒然と書くが、、、
先に書いておこう
オチは無い

で、ここから本題
マインドマップ式掲示板を大昔から考えていた

これは個人の思考の限界を打破するための案だった
それに、集合知の一つの完成系を目指したい気持ちもあった

集合知に行き着いたのは書物に対する限界を感じた事も一因だった

ある書物が技術書や図鑑などであったとして、書物の内容が間違っている事は多々ある

それなのに100年もそれが信じられ人類の発展に悪影響を与える事がある

そう言う過ちを集合知であれば、打開できる可能性がある。
人類をアップデートするには、本では足りない。

マインドマップ式掲示板の機能としてはブラウザ上に議論の中心を据え、その周囲に吹き出し状に発言が追加される
発言には別の発言を付け加えられる
人の発言には評価を付けられる
評価によっては、その発言はツリーの下に落ちて消える

ここまで考えて、「荒らし」や「思想の偏り」対策が思いつかなかったので、作るのをやめてしまっていた

対策として、高度な意味論を解釈できるAIに管理させるくらいしか思いつかないのだが、日本語は意味ベクトルを単語の連続性だけで判断できない
英語は単語の並びによって意味ベクトルを設定する事は可能だ。
確か、ある単語に続く単語の現れる可能性を列挙した研究があった。
論文だったかな、単語の連続率をタングラムと表現していた

日本語は単語の並びに副詞、各助詞、形容詞、否定などわりと自由に出てくるので、意味が分からなくなる。
日本語まぢ困ったもんである。

もしAIによる判定機能が実装できれば、発言同士の繋がりや、人間の発言に対する評価さえそのAIに任せることができる

Yahooのコメント見ると、思想の偏ったコメントの妙な連帯感を感じる。同じ思想を持つコメンテーター同士が馴れ合っていて、読んでいて違和感と不快感を感じる
その場にそぐわない意見は容赦なく攻撃される
もはや偏った思想集団による一種の攻撃に他ならない
マイノリティの意見は間違いなく抹殺される

ここにAIの判定という、公平な(?)判定が介入出来るなら、マインドマップの幅はだいぶ広がって行くとも考えた

しかし、AIの判定にも罠がある。
もはやそれは、人の思考ではなくなる可能性がある

AIが言うなら正しいという勘違いにもつながってしまう

AIではない超人なら、多くの意見がぶら下がるツリーを見て、評価の低いものも汲み取り、ツリー全体を上手いこと文章にすることもできるだろう。

だが、それをAIにやらせる事は今の技術レベルでは多分無理だ

これらを考えていたのは俺がゲーム業界時代

2chとかが流行り始めた時に考えていた事だ

当時に比べAIの分野で技術的な発展は見られるが、まだまだ全然足りない。
AIは犬や猫どころか、昆虫の行動にさえ追いついていない

あんな動きができるAI搭載ロボットはまだ存在しない

生物すげーよ
さっぱり仕組みがわからない
どうしたらまともなAIが作れるのやら、、、

2021年8月4日水曜日

Sedna XML Database用XQueryの外部関数(ひらがな→カタカナ変換)

 Sedna XML Databaseは XQueryの機能拡張をするために外部関数を作れるようになっている。今後このあたりも真似していきたいものだ。


ソースのコアな部分を乗せておく

コードはまだ少し危険な書き方をしているけど、まぁ動くし問題ないかな

unionなんて久しぶりに使った。

リトルエンディアンで並び順を迷った跡がうかがえて笑える。


食品成分表のデータで先頭の項目であるアマランサスを検索する際に、ひらがなで「あまらんさす」としているのだが、

今回作ったhirakata外部関数で、カタカナに変換され、検索文字列として使用される。




クエリは以下のような実装になっている。
declare function で今回作成したhirakata外部関数の呼び出し定義をしている。

declare function se:hirakata($a as xs:string*) as xs:string external;

<DATA TYPE='JSON' OUTPATH="//DATA/LIST" FORCEARRAY="//LIST/FOOD">
(: 複数のFOODを返す場合には、その上位にラッパーを作り、OUTPATHに指定をする :)
(: FORCEARRAYはのラッパーの下位のFOODが1件の場合でもJSON配列で返すために指定する :)
<LIST>
{
(:PARAMS:)
let $searchstr := se:hirakata($id)

for $food in doc('test2.db')//FOODS/FOOD
where contains($food/SEARCH_NAME,$searchstr) or contains($food/ADDITIONAL,$searchstr) or $food/@FOOD_ID=$searchstr
order by $food/@FOOD_ID
return
  <FOOD>
    {$food/JP_DISP_NAME}
    {$food/ENERC_KCAL}
    {$food/PROT-}
    {$food/FAT-}
    {$food/CHOCDF-}
    {$food/VITA_RAE}
    {$food/TOCPHA}
    {$food/NE}
    {$food/ADDITIONAL}
    {$food/SEARCH_NAME}
  </FOOD>
  }
</LIST>
</DATA>


2021年8月3日火曜日

Saraswatiの今後の開発

 golangで開発中のSaraswatiバックエンドフレームワークだが、今後の開発では、サーバーサイドに接続したプリンタ制御を考えている。

機能としては、フォルダにPDF出力して、別プログラムがプリントし、プリント終わったらアーカイブするだけの機構だ。


それと、XQueryに変わるXML DB制御言語の開発、そして、その言語で動くXML データベースの開発。

おそらくXMLデータベースは作れる。

アイデアでは、SQLiteのXML版みたいな位置付けの物だ。

問題は制御言語だか、golangの関数にしてしまえば良いだろうか?

それなら言語なんて仰々しいものを考えなくて良いし、そもそもわたしには言語を開発するセンスは無い

過去に俺様言語ならいくらでも作ってきたが、いつもその場でのやっつけで終わってきた。

7年前か?iPhone、iPadの開発でも俺様言語で開発して、SEGAに納品した

オリンパスで組み込み向けのターミナルで動く俺様言語も作った。

今回も似たノリでいいのかも知んない