2023,江端さんの技術メモ

Webサーバに繋っているブラウザが、全部いなくなったことを確認する為に、ブラウザのJavaScriptからハートビートを飛ばして、ハートビートがこなくなったことを確認する簡易プログラムを作成しました。

■ブラウザの生存監視サーバ

$ pip install Flask

をしてから、以下のプログラムをhearbeat.pyという名前でサーバを立ち上げるフォルダ(例 c:\users\ebata)に放り込んでおく。

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/heartbeat', methods=['POST'])
def receive_heartbeat():
    data = request.get_json()
    print(f"Received heartbeat: {data}")
    return jsonify({"status": "OK"})

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=3000)

■index.htmlの内容
これも、サーバを立ち上げるフォルダ(例 c:\users\ebata)に放り込んでおく。

<!DOCTYPE html>
<html>
<head>
    <title>Heartbeat Example</title>
</head>
<body>
    <h1>Heartbeat Sender</h1>
    <script>
        function sendHeartbeat() {
            fetch('http://localhost:3000/heartbeat', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ timestamp: new Date() })
            })
            .then(response => response.json())
            .then(data => console.log('Heartbeat sent:', data))
            .catch(error => console.error('Error sending heartbeat:', error));
        }

        // 10秒ごとにハートビートを送信
        setInterval(sendHeartbeat, 10000);
    </script>
</body>
</html>

■起動方法
(Step 1)サーバを立ち上げるフォルダ(例 c:\users\ebata)で、

C:\Users\ebata>python heartbeat.py

で、「ブラウザの生存監視するサーバ」を起動
(Step 2)次に、以下のコマンドで、1行Webサーバを起動

C:\Users\ebata>python -m http.server 8000

(Step 3) ブラウザに、

http://localhost:8000/

を投入。複数のブラウザを立ち上げて、ブラウザの生存監視サーバから、

の表示が出てくれば成功 → ウソです。
ブラウザを全部落せば、動かなくなるはずです。→ これは本当ですが、def receive_heartbeat()の処理は全くされていません


Choromeの開発者の表示は、こんなのが出ていました。

Access to fetch at 'http://localhost:3000/heartbeat' from origin 'http://localhost:8000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. (index):19 Error sending heartbeat: TypeError: Failed to fetch at sendHeartbeat ((index):10:13)

で、
このエラーメッセージは、CORS(Cross-Origin Resource Sharing)ポリシーに違反していることを示していて、これは、異なるオリジン(localhost:8000とlocalhost:3000)間でのリクエストがブラウザによってブロックされていることを意味します。

この問題を解決するために、FlaskアプリケーションでCORSポリシーを設定する必要があり、Flask-CORSという拡張機能を使用してこれを行うことができます。

pip install flask-cors

で、

from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app) # すべてのリクエストに対してCORSを有効にする

を処理すれば、receive_heartbeat():が実施されます。

で、修正後のコードは以下の通りです。

from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # すべてのリクエストに対してCORSを有効にする

@app.route('/heartbeat', methods=['POST'])
def receive_heartbeat():
    data = request.get_json()
    print(f"Received heartbeat: {data}")
    return jsonify({"status": "OK"})

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=3000)

出力結果

ちょっとまだ疑問はあるけど、とりあえず、メソッドの中には入ったようです。

 

 

2023,江端さんの技術メモ

SELECT * FROM records WHERE start_at = '2023-03-20 05:03:00'; を"2023-03-20"が含まれているものだけを条件にするには、どのようなSQL文になりますか

SELECT * FROM records WHERE start_at::date = '2023-03-20';

プログラムはこちら

// f:\しゅらばしゅう\有吉先生データ\Moove\2023-07/test5.go

package main

import (
    "database/sql"
    "fmt"
    "log"

	_ "github.com/lib/pq"
)

type Location struct {
	Lat float64 `json:"lat"`
	Lng float64 `json:"lng"`
}

type Record struct {
	ID         int        `json:"id"`
	UserID     int        `json:"user_id"`
	Distance   float64    `json:"distance"`
	Place      []Location `json:"place"`
	Speed      []float64  `json:"speed"`
	Prediction int        `json:"prediction_type"`
	StartAt    string     `json:"start_at"`
	EndAt      string     `json:"end_at"`
}

func main() {
	// PostgreSQL データベースへの接続情報
	const (
		host     = "192.168.0.23"
		port     = 15432
		user     = "postgres"
		password = "password"
		dbname   = "moove"
	)

	// PostgreSQL データベースへの接続
	dbinfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)
	db, err := sql.Open("postgres", dbinfo)
	if err != nil {
		panic(err)
	}
	defer db.Close()

    fmt.Println("Successfully connected!")

    // 検索したい日付
    var targetDate string = "2023-03-03"

    // 特定の日付を含むレコードを取得するクエリ
    query := fmt.Sprintf("SELECT id, user_id FROM records WHERE start_at::date = '%s'", targetDate)

	fmt.Println("pass1")

    rows, err := db.Query(query)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

	fmt.Println("pass2")

    // 各行を繰り返し処理
    for rows.Next() {
        // ここには、取得したいカラムに応じた変数を定義します
        var column1, column2 int // これは、idとuser_idのことです
        // 必要に応じて他のカラムも追加
        err := rows.Scan(&column1,&column2) 
        if err != nil {
            log.Fatal(err)
        }

        fmt.Println(column1, column2) // 取得したデータを出力
        // 他のカラムも出力する場合は、ここに追加
    }

    // 繰り返し処理後のエラーをチェック
    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
}

2023,江端さんの技術メモ

UDP12345をポートフォワードするだけで、SRTストリームが通るか?、を自宅のルータで試してみました。

2023,江端さんの技術メモ

先日、1年分の研究成果がぎっしり詰ったPCが、立ち上がらなくなるというシャレにならない状況に直面し、昨日、2TBのNASを購入しました(以下の話と関係があります)。

NASは、できるだけ風通しのよい温度の低い環境の設置が望ましいので、液晶テレビの外付けHDDが置いている場所に併設しようと思いましたが、テレビ用のネットワークを別セグメントにしていたため、NASのIPが届かないことが判明しました。

ルータをブリッジモードにすれば良いのですが、そうすると既存の設定にも影響が出てきそうなの(というか、間違いなく問題が発生するだろう)で、できるだけルータの構成をかえずに対応したいと思いました。

で、ChatGPTに、以下の質問して、回答を貰いました。

私は、SMBだけ通れば良いので、ルータに以下の設定(ポート転送)をしました。

(めずらしく)さくっと、NASが通りました。

これで、研究成果が吹き飛ぶという恐怖が、幾分軽減しました。

2023,江端さんの技術メモ

私、DockerでDBの大量生産をやっているのですが、このDockerを起動させるPCが不具合のような兆候を見せて、今年最大の「真っ青」な状態になりました。

2T程度のHDDを購入して、Dockerコンテナのバックアップしておかなければ、ここ1年の研究が吹き飛ぶと実感しました。

とりあえず、逃し方のメモを取っておきます。

Step 1 Docker Desktopを立ち上げて、"kitaya"をアクティベートにする

Step 2 "docker ps" で起動状態を確認する

Step 3 "$ docker commit kitaya-db-1 kitaya_db_backup"をする
ちなみに実施するディレクトリはどこでもいい。kitaya_db_backupはファイルではないので。

Step.4 "$ docker images"をして、作成を確認する

イメージができているのを確認する。

Step.5 C:\の直下に、DockerBackupsという名前のディレクトリを掘っておく。

Step.6 "$ docker save -o C:\DockerBackups\kitaya_db_backup.tar kitaya_db_backup" を実施する

というファイルができる。

Step.7 "docker rmi kitaya-db-1_backup" でイメージを消去する(しなくてもいいが)。無駄なリソースを削除するためである。

ちなみに、kitaya_db_backup.tarも、サイズがバカでかいので、外部HDDなどに逃しておく方が良いと思う。

 


ちなみに、(試していないが)リストアはこんな感じになる(らしい)

docker load -i C:\DockerBackups\kitaya_backup.tar


ところで、Amazonで購入した2TのHDDが、まるで使えんので、返品することになりました。

この"評価1"て何だ?

私は、これを注文したハズなんだが? (だれが評価1、評価者2の商品なんぞ買うか)

なんか、やられたのかなぁ。腹立つなぁ。返品できるだけマシだが。

2023,江端さんの技術メモ

現在の対応方法(11/23)
(1)chromeのキャッシュをクリアにする
現在の対応方法(11/9)
(1)PCを立ち上げて、最初にchromeを立ち上げる(これ以外何もしてはならない)。一番最初に、Grammaryを全部OFFにして、ChatGPTを起動する。それでも応答しない場合は、ログインしなおす。
(2)なお、ChatGPT専用のブラウザとして、他のタブでは使わないようにする。
(3)有償版にしてから、(1)(2)の対応で、セッションが自動的にダウンすることはなくなった(ように思える)
現在の対応方法(10月??日)
(1)c.aXXXX.2XX9@gmail.comのアカウントを作って、そっちのブラウザを使う(こっちには、chromeにアドインプログラムが入っていないから
(2)一度セッションが繋がったら、これが切れないように定期的(まずは1時間単位)で、入力するようにする
→ 現時点では、chatgptをログアウトして、ブラウザのキャッシュをリフレッシュして、再度別のブラウザを立ち上げるて、再度ログインすると、接続する可能性が高いみたい
-----
chatgptに質問を入力しても、全く回答がされない場合があります。本当に困っています。対応方法をおしえてください。
ChatGPT

ChatGPTが回答しない場合、いくつかの原因が考えられます。以下の対処方法をお試しください:

  1. 入力の確認:
    • 入力した質問が明確かどうかを確認してください。不明瞭または曖昧な質問は回答を受けにくい場合があります。
  2. 接続の確認:
    • インターネット接続に問題がないか確認してください。接続が不安定だと、質問がChatGPTに届かないことがあります。
  3. ページの再読み込み:
    • ブラウザのページを再読み込みするか、アプリを再起動してみてください。
  4. ブラウザの確認:
    • 異なるブラウザで試すか、ブラウザのキャッシュをクリアしてみてください。
  5. サポートへの連絡:
    • 上記の方法で解決しない場合は、サービス提供元のサポートチームに連絡してみてください。

対処方法を試しても解決しない場合は、さらに詳細な状況を教えていただけると、より具体的なアドバイスを提供できるかもしれません。どうぞお知らせください。

 

User
サービス提供元のサポートチームの電話番号、メールアドレス、その他の連絡手段を教えて下さい。
ChatGPT

OpenAIのサポートに直接連絡を取る方法は、公式のサポートチケットシステムを通じて行います。電話によるサポートは提供されていないようですが、以下の手順でサポートリクエストを送信することができます。

  1. OpenAIのヘルプセンター(help.openai.com)にアクセスします。
  2. 右下にある「Submit a request」または「リクエストを送信」をクリックします。
  3. 必要な情報を入力し、問題の詳細を提供します。
  4. リクエストを送信します。

これにより、OpenAIのサポートチームに問題が直接報告され、メールで対応を受けることができます。返信を待つ間、ヘルプセンターで関連するFAQを確認するのも役立つかもしれません。

 

User
このような問題が発生するのを回避するには、一度立ち上げたchatgptの画面を表示し続ける方が良いでしょうか
ChatGPT

ChatGPTとのセッションは、しばらくの間アクティビティがないとタイムアウトすることがあります。以下のような方法で、問題発生のリスクを低減できるかもしれません:

  1. 定期的な使用:
    • ChatGPTを定期的に使用して、セッションがアクティブであることを確認してください。長時間放置すると、セッションがタイムアウトし、再度ログインする必要があるかもしれません。
  2. セッションのリフレッシュ:
    • 長時間同じページを開いている場合は、定期的にページを更新してください。これにより、接続がリセットされ、セッションがアクティブな状態を維持できます。
  3. 安定したインターネット接続:
    • 安定したインターネット接続を確保してください。不安定な接続は、ChatGPTとのコミュニケーションに影響を与える可能性があります。
  4. サインイン状態の維持:
    • もし可能であれば、アカウントにサインインした状態を維持しておくことで、次回の使用時にスムーズにアクセスできる可能性が高まります。
  5. ブラウザの設定:
    • ブラウザの設定で、タブやウィンドウを閉じてもセッション情報が保持されるように設定しておくと便利です。

これらの方法を試しても問題が解決しない場合は、前述のサポートチームへの連絡をお試しください。

セッションをリフレッシュすると、動かなくなった。

User
この場合の長時間とは、どの程度でしょうか
ChatGPT

具体的な「長時間」の定義はサービス提供者によって異なり、またセッションタイムアウトの正確な時間は公開されていないことが多いです。しかし、一般的には、数十分から数時間の無活動状態が続くとセッションがタイムアウトすることが多いです。

ChatGPTを使用する際は、1時間ごとにアクティビティを行うなど、定期的に何らかの操作をすることをお勧めします。これにより、セッションがアクティブな状態を保ち、突然のタイムアウトを防ぐことができます。また、作業中に何らかの理由で長時間離れる必要がある場合は、戻ってきたときにセッションが切れている可能性があることを覚えておいてください。

 

User
わかりました。
ChatGPT

ご理解いただきありがとうございます。他にもご不明な点やお困りのことがあれば、いつでもお知らせください。お手伝いできることがあれば喜んで対応させていただきます。

 

User
chatgptのセッションタイムアウトを発生させない為のプログラムなどの手段を教えて下さい
ChatGPT

ChatGPTのセッションタイムアウトを防ぐために自動化ツールやスクリプトを使用することは、OpenAIの利用規約に反する可能性があります。自動化された手段を使用してサービスにアクセスすることは、サービスの過負荷や他のユーザーの体験を損なう原因となるため、推奨されません。

もし、長時間のセッションを保持する必要がある場合は、以下のような対策を検討してください:

  1. 定期的な手動入力: 手動で定期的にChatGPTに何かを入力することで、セッションをアクティブに保つことができます。
  2. セッション情報の保存: 作業を中断する前に、行った会話や重要な情報をテキストファイルなどに保存しておきます。これにより、セッションがタイムアウトしても、続きから作業を再開することができます。
  3. ブラウザのタブ管理: ブラウザの拡張機能を使用して、一定時間ごとにタブを自動リフレッシュする設定をすることで、セッションをアクティブに保つことができるかもしれません。ただし、これもサービスの利用規約に反する可能性があるため、使用する前には利用規約を確認してください。

サービスの規約に違反することなく、より効率的にChatGPTを使用する方法については、公式のヘルプセンターやサポートチームに相談するのが最善です。

 

User
chromoブラウザで、上記の「ブラウザの拡張機能を使用して、一定時間ごとにタブを自動リフレッシュする設定」を教えて下さい。
ChatGPT

Chromeブラウザでタブを自動的にリフレッシュするには、タブリフレッシュ機能を提供する拡張機能を使用できます。しかし、これをChatGPTのようなサービスに対して使用する前に、必ず利用規約を確認し、規約違反にならないよう注意してください。

以下は、Chromeのタブを自動リフレッシュするための一般的な手順です:

  1. Chrome Web Storeにアクセス: Chromeブラウザで「Chrome Web Store」にアクセスし、「Tab auto refresh」、「Auto refresh tab」などと検索します。
  2. 拡張機能を選択: リフレッシュ機能を提供する拡張機能の中から、評価やレビューを参考に選択します。
  3. 拡張機能をインストール: 選んだ拡張機能のページで「Chromeに追加」ボタンをクリックしてインストールします。
  4. 設定を行う: インストール後、拡張機能のアイコンをクリックして、自動リフレッシュの間隔を設定します。例えば、5分、10分、30分など、任意の間隔を設定できます。
  5. リフレッシュを開始: 設定が完了したら、「Start」や「Enable」ボタンをクリックして、タブの自動リフレッシュを開始します。

注意点として、自動リフレッシュ機能は、ページの読み込みやサービスへのアクセスを繰り返すことで、サーバーへの負荷を高める可能性があります。また、これを利用してサービスのセッションタイムアウトを回避することは、サービスの利用規約に反する可能性があるため、注意が必要です。


User

chatgptが表示されない時の対処方法は
ChatGPT

「ChatGPTが表示されない」という問題は、様々な原因によって起こる可能性があります。ここでは、一般的なトラブルシューティングのステップをご紹介します。

  1. ブラウザをリフレッシュする
    • まず、ブラウザのリフレッシュ(再読み込み)を試みてください。これは多くの一時的な問題を解決するのに役立ちます。
  2. ブラウザの互換性を確認する
    • 使用しているブラウザがChatGPTをサポートしているかどうかを確認してください。時には特定のブラウザでのみ正しく動作することがあります。
  3. キャッシュとクッキーをクリアする
    • ブラウザのキャッシュやクッキーが原因で表示が妨げられることがあります。ブラウザの設定からキャッシュとクッキーをクリアしてみてください。
  4. 異なるブラウザやデバイスを試す
    • 現在使用しているブラウザやデバイスに問題がある可能性があります。異なるブラウザや別のデバイスを試してみてください。
  5. インターネット接続を確認する
    • インターネット接続に問題がないかを確認してください。接続が不安定だったり速度が遅い場合、ページが正しく読み込まれないことがあります。
  6. ブラウザの拡張機能を無効にする
    • インストールされているブラウザの拡張機能が原因で問題が発生している可能性があります。拡張機能を一時的に無効にして、それが原因でないかを確認してください。
  7. ファイアウォールやVPNの設定を確認する
    • ファイアウォールやVPNがChatGPTへのアクセスを妨げている可能性があります。設定を見直して、必要であれば変更してください。
  8. システムまたはブラウザの更新
    • 古いシステムやブラウザでは正しく表示されないことがあります。最新のアップデートがある場合は、システムやブラウザを更新してください。
  9. サーバー側の問題
    • ChatGPTのサーバー側に問題が発生している場合、ユーザー側では対処できません。公式の通知やサポートフォーラムをチェックして、情報を得ることが重要です。

これらのステップを試しても問題が解決しない場合は、ChatGPTのサポートチームに連絡して、さらなる支援を求めることをお勧めします。

2023,江端さんの技術メモ

【QGIS】緯度・経度をもつCSVデータを読み込み、地図に表示する

(1)CSVファイル
Lat, Lng
35.3663 , 139.6225
35.3669 , 139.6245
35.3673 , 139.6259
35.3672 , 139.6268
35.3673 , 139.6296
35.3668 , 139.6296
35.367 , 139.6296
35.3671 , 139.6297
35.3672 , 139.6298
35.368 , 139.622

(以下、省略)

(2)CSVファイルの読み込み

(3)結果

以上

2023,江端さんの忘備録

多くの飲食店で、テーブルに備えつけられたタブレットからメニューをオーダーするシステムが、導入されています。

Many restaurants have installed systems allowing customers to order tablet menu items at each table.

今や、そういうシステムがない店舗の方が珍しいくらいです。

Nowadays, finding a restaurant without such a system is so rare.

最低賃金が上がり、人不足が深刻な中、これは当然の流れと言えます。

This is a natural trend, with minimum wages rising and a severe labor shortage.

ただ、言うまでもないのですが、これらのタブレットのインターフェースは、『絶望的なまでに使いにくい』。

But needless to say, the interface of these tablets is 'hopelessly difficult to use.

『このタブレットのインターフェースを設計しているヤツは、バカなのか』と思います ―― かなり本気で。

I think, 'Are the people designing this tablet interface stupid?' -- quite seriously.

しかし、面倒なので、このインターフェースについての批判は割愛します。

However, since it is tedious, I will omit the criticism of this interface.

-----

万人に共通に使いやすい注文システムの究極は ―― 『タブレットを使わない、口頭でのオーダー』、つまり従来通りです。

The ultimate ordering system that is easy for everyone is -- "no tablets, verbal orders," in other words, the same as before.

ですので、現在のタブレット注文システムが、「音声入力」と「生成AI」からなる、音声による自動オーダシステムになっていくことは、ほぼ確実です。

Therefore, it is almost certain that the current tablet ordering system will be replaced by an automated voice-based ordering system consisting of "voice input" and "generated AI.

近い未来、『音声入力生成AIと客が、オーダーの違いで、口論になる』という場面を見られるようになるでしょう。

We will soon see voice input generation AI and customers arguing over different orders.

そして、100%完全録音された会話によって、多くの場合、『客の過失(オーダーのミス)が、簡単に確認される』ということになるでしょう。

And, in many cases, a 100% fully recorded conversation will 'easily confirm the customer's negligence (mistake in ordering).

-----

気になるのは、その開始時期です。

What is of interest is the timing of its service-in.

私は、年内に登場、来年はトライアル期間、再来年あたりには飲食業界では普通になる、という気がしています。

They will appear by the end of the year; next year will be a trial period, and around the year after that, they will become the norm in the food and beverage industry.

『お客様は神様です』の旧態依然の価値観で生きているジジイたちに告ぐ。

2023,江端さんの技術メモ

Linux でミリ秒まで表示するワンライナー時計

私の場合、コンマ秒までを表示したいので、

while true ; do printf "\r%.10s" `date +%T.%N`; sleep 0.01 ; done

となります。

Ubuntuの端末で文字を大きくするには、以下の方法があります。

端末フォントサイズの変更:
通常、端末のフォントサイズを変更することで文字を大きくできます。以下の手順を実行します:

端末を開きます(通常、Ctrl+Alt+Tで起動します)。
メニューバーから「編集」をクリックし、「プロファイルの設定」を選択します。
「テキスト」タブを選択し、フォントサイズを変更します。

で、まあ、こんな風に簡単に作りました。

ubuntuのGUIでxclockでアナログ時計を表示し、表示し続ける方法