2022/04,未分類,江端さんの技術メモ

  1. golang内でredis経由でJSONを飛す時
    // パブリッシュ側
    
    type GetLoc struct {
        ID    int     `json:"id"`
        Lat   float64 `json:"lat"`
        Lng   float64 `json:"lng"`
        TYPE  string  `json:"type"` // "PERSON","BUS","CONTROL
        POPUP int     `json:"popup"`
        //Address string  `json:"address"`
    }
    
    		gl.TYPE = "BUS"
    		gl.Lat = 35.654543 + (rand.Float64()-0.5)*0.00001*20
    		gl.Lng = 139.795534 + (rand.Float64()-0.5)*0.00002*20
    		gl.ID = rand.Int() % 5
    
    		json_gl, _ := json.Marshal(gl)
    		r, err := redis.Int(conn.Do("PUBLISH", "channel_1", json_gl))
    
    // サブスクライブ側
    
    	for {
    		switch v := psc.Receive().(type) {
    		case redis.Message:
    			fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
    
    			var gl GetLoc
    			_ = json.Unmarshal(v.Data, &gl)
    			fmt.Println(gl.ID)
  2. golangから直接JavaScriptへJSONを飛す時
    golangから (上記の続き)

    var gl GetLoc
    			_ = json.Unmarshal(v.Data, &gl)
    			fmt.Println(gl.ID)
    
    			//conn.WriteJSON(v.Data)
    			conn.WriteJSON(gl)

    JavaScriptで受けとる

    <script>
            function obj(id, lat, lng, type, popup){
                this.id = id;
                this.lat = lat;
                this.lng = lng;
                this.type = type;
                this.popup = popup;
            }
    
    
            //ws.onmessage = e => console.log(e.data)
            ws.onmessage = function(event) {  // 受信したメッセージはここに飛んでくる
                console.log("RESPONSE",event.data)
                var obj = JSON.parse(event.data);
                console.log("after parse:",obj.id)
            }

ポイントは、Marshal、Unmarshal、parseの使い方

未分類

結論から言うと、クラッシックモードが使えなくなるので、使えない。(というか、クラッシクモードを手放せない)

ただ、markdownをそのままビューに出してくれるので、編集をmarkdownかhtmlだけで行うという覚悟ができれば、このWP Githuber MD – WordPress Markdown Editor は"あり"かと思う。

以下、テストに使ったmarkdown表記のメモ

5. Intermission(休憩)

ちょっと、ここで、今回の、開発コード 1-9で使っている開発言語golangと開発環境Visual Studio Code について、こぼれ話にお付き合い頂きたいと思います。

5.1. Golangって、そんなにいいか?

Golangは、今回の開発の課題「数万以上のオブジェクトをスレッド(正確にはgoroutine)で動かしたい」というニーズに答えられる唯一の言語だったのです。

個人的にはC/C++と添い遂げて、あとはJavaScriptをちょろっと援用して、エンジニア人生を終える予定だったのですが、私の課題である「スケーラブルエージェントシミュレーション」を行うには、どうしても、この万のオーダのスレッド(goroutine)をサクっと作れる言語がGolang以外になかったのです。

ただなぁ ―― 変数の取扱い、特に配列の取扱いが、C言語やどの違うので、試行錯誤を続けなければならず、ストレスが溜ることこの上もなかったです。

ただ、この軽量なスレッド(goroutine)を使い倒すには、"チャネル(channel)"という、gorotine間でメッセージを飛し合う仕組みを使い倒さなければなりません。これ、悪意を持って言えば"スレッド間のGOTO"をやっている様にも見えます。

golangでのキャストのやりかた

オブジェクト指向の考え方も、敢えて踏み躙っているようにも見えます。クラスの考え方に成れた人間には、時代に逆行しているような気すらします。

「スケーラブルエージェントシミュレーション」では、エージェントの生成と消滅が果てしなく続き、エージェントは非同期に同時に動き続けるので、はっきり言ってデバッグが地獄です。

それでも、将来的には"億"のオーダのエージェントシミュレータを作りたい私には、現時点でgolang以外の選択肢がないのです。

Visual Studio Code (vscode)って、そんなにいいか?

gcc + gdb + emacsで、職人気質のようにやってきた私は、emacsのキーバインディングが、体に埋まれこまれています。将来、認知症になって、妻や子どもを思い出せなくなったとしても、emacsキーバインドは忘れないだろうという、確かな確信があります。

vscodeでも、emacsキーバイドはサポートされていますが、完璧ではありません。

加えて、開発環境用に必要となる、"launch.json"やら、"settings.json"とかの設定が、死ぬほど面倒くさい

GolangのVisual Code Studio(vscode)の開発環境の作り方 ("failed to launch: fork/exec"やら、"could not launch process" やら "not an executable file"がうっとうしい件)

もっとも、visual Studioは、米国赴任中にうんざりするほど使ってきたので、慣れれば使い易くなってくるのは分かるのですが、このような『開発環境縛り』が嫌で、"gcc + gdb + emacs"に逃げてきた私にとっては、正直辛いです。

ただ、「拡張機能」は凄いと思える。思いついた機能はほとんど手に入りますからね。

未分類

コロナ関係のコラム(第8弾)を執筆しているのですが、どうにも、分かりやすいデータが見つからなくて困っています。

私が知りたいのは、ざっくりとした「ワクチン非接種者:ワクチン接種者」の感染率と死亡率です。

これだけのことなのに、なんでグラフが出てこないんだ? と思いながら、捜していたのですが、

神奈川県の、新型コロナワクチンの有効性-ブレイクスルー感染調査から

が、比較的分かりやすいグラフを使っていましたので、ここを参照しています。

ふむ、感染者の97%以上が、ワクチン接種を選択しなかった人、ということですね。

このグラフを見る限り、死亡者の大半が、ワクチン接種を選択しなかった人、と読めます。

現在の日本では「ワクチン非接種者:ワクチン接種者 = 2:8」だから、それを勘案すると、ワクチン非接種者は、さらにリスクが高いと言えそうです。

以上

 

 

未分類

詳しくは、1-9/readme.md 参照のこと

未分類

=6371 * ACOS(COS(A2*PI()/180) * COS(A3*PI()/180) * COS(B3*PI()/180-B2*PI()/180) + SIN(A2*PI()/180) * SIN(A3*PI()/180) )

参考文献 緯度経度から2地点間の距離を計算する!Google方式とヒュベニ式・表計算ソフトで計算できる・GPSデータも使える

こちらがエクセル表のサンプル → Book1.xlsx

未分類

  bus_num := b.(Ch2_info).Bus_number  ← 多分、ここを直す必要がある

未分類

『ただ、ITメディアで彼(江端のこと)の連載追うの本当にみづらすぎて、もしかしたらITメディアとの契約上むずかしいのかもと思いつつも・・・』

という投稿(苦情)を読みました。

記事の最初のここ(↓)をクリックすると、私の記事のバックナンバー、または、その中の連載のバックナンバーが出てきます。

私の睡眠時間確保の為にも、各テーマのバックナンバーを一通り読んだ後で質問して頂けると ―― 「私」が助かります。

あ、それと、これ(江端さんへ電子メールを出す前に)もご一読下さい。