Y: Latitude: Lat :経度:南北 35.3715607
X: Longitude:Lng,Log:経度:東西 139.6268272,
X: Longitude:Lng,Log:経度:東西 139.6268272, Y: Latitude: Lat:経度:南北 35.3715607
江端さんのひとりごと 「Let me say "Thank you"」
https://www.kobore.net/thanks.txt.html
江端さんのひとりごと
「Let me say "Thank you"」
2000/10/21
膨大な英文ドキュメント、英語による技術者との議論、開発途上で不完全なライブラリ群に、私が血の涙を流しながら取り組んできた製品、PolicyXpert(PX) Version 2.0の製品リリースの期日が決まりました。
思い返せば、今年の3月、何が何だか分からないうちに米国赴任が決り、いきなり、日立とヒューレットパッカードの技術者たちの日英・英日翻訳ゲートウェイをやらされのたのを最初に、数多のシステムダウンを目の当りにしながら、胃を痛めた日々が、走馬燈のように・・・って、まだ、プロジェクト終っていないんだけど、とにかくリリースまで漕ぎつけたことに、想い浸ること多であります。
ところで、この製品(PX V2)は、インターネットプロバイダや、電話会社のネットワーク管理などを想定していますが、やろうと思えば、自宅のホームLANのネットワークのQoS(*1)管理もできます。
ご興味のあるかたは、是非御購入をご検討下さい。
(*1)Quality of Service ネットワークの通信品質のこと。電話の声がとぎれたりするネットワークは、「QoS管理されていない」などの言い方をする。
-----
先日、日立側のチームメンバであるIさんと、次のバージョンのPXの実装方式に関して議論をしていました。
ネットワーク技術の分野は、非常に進歩が速く、製品の市場投入のタイミングを逃すと、莫大なコストをかけた挙句、まったく役に立たない製品を開発してしまうことになるので、どのような機能を、何時までに完成させるか、ということが大きなポイントになるのです。
その上、標準化の問題(*2)やら、ビックベンダの動向、なにより、我々の技術力が問われます。
(*2)江端さんのひとりごと「IETF惨敗記」シリーズなど
Iさんのパーティションのホワイトボードの前で、我々が話をしているところに、開発チームを統括するジェネラルマネージャのヘンリーさんがやってきました。
ヘンリーさんは、笑顔で私達に語りかけてきました。
「昨日、PX V2のコードのバグが減少方向に転じたと言う報告を受けたよ」
勿論、私達はその報告を、チームミーティングで報されていました。
製品を開発する以上、可能な限りバグを潰し、安定度を高めなければならないのは、システムエンジニアの宿命です。
ヘンリーさんは、「遂に、終りの始まり(start of the end)だね」と言った後で、「君達の多大な努力に、心から感謝している。もう一度、ありがとうと言わせて貰えるかな」と言いながら、私達に握手を求めて来ました。
おどおどと差しだした私の手を、ヘンリーさんの大きな暖かい手が包んでくれたのを、漠然と覚えています。
パーティッションを立ち去るヘンリーさんの後姿を見ながら、私は両手の拳を口のところに持って行って、すんでのところで『ステキ!』と叫んでしまうところでした。
勿論、私だって、ヘンリーさんの言葉が「リップサービス」ということは分かっています。
でも、開発の最前線でコードに埋もれながら、バグと格闘している技術者には、このような、ほんのちょっとしたフォローが、心に染みたりするものなのです。
-----
さて、日本で働いている皆さんに質問です。
最近、大きな仕事を終えた後、「君達の多大な努力に、心から感謝している」と言われながら、部長から握手を求められた人。
いますか ?
(本文章は、全文を掲載し内容を一切変更せず著者を明記する限りにおいて、転載して頂いて構いません。)
OvenMediaEngine構築作業中
python --version、 python3 --version のいずれも、"Python"とだけリターンが戻ってきて終了します。
コントロールパネルを開きます。
プログラムまたはプログラムと機能を選択します。
プログラムの一覧からPythonを探し、選択します。
アンインストールをクリックします。多くの場合、Pythonの各バージョンが個別にリストアップされているので、削除したいものをすべてアンインストールする必要があります。
指示に従ってアンインストールプロセスを完了します。
ステップ 1: Pythonのダウンロード
Pythonの公式ウェブサイトにアクセスします。
「Download Python 3.x.x」(xは最新バージョン番号を示します)をクリックして、インストーラーをダウンロードします。
ステップ 2: インストーラーの実行
ダウンロードしたインストーラー(例:python-3.x.x.exe)を実行します。
インストールの初期画面で「Add Python 3.x to PATH」のチェックボックスを選択します(これにより、コマンドラインからPythonを実行できるようになります)。
「Install Now」をクリックして、インストールを開始します。
注: より詳細な設定を行いたい場合は、「Customize installation」を選択して、インストールオプションをカスタマイズできます。
ステップ 3: インストールの確認
インストーラーが完了すると、Pythonが正常にインストールされたことを確認するために、以下の手順でバージョン情報をチェックすることができます:
スタートメニューを開き、「cmd」とタイプしてコマンドプロンプトを開きます。
コマンドプロンプトで以下のコマンドを入力して、インストールされたPythonのバージョンを確認します。
css
Copy code
python --version
または
css
Copy code
python3 --version
ステップ 4: pipの確認
pipはPythonでパッケージを管理するためのツールで、Pythonと一緒にインストールされるはずです。以下のコマンドでpipがインストールされているかを確認できます:
css
Copy code
pip --version
もしpipがない場合や問題がある場合は、pipを手動でインストールする必要がありますが、Pythonのインストーラーを使って正常にインストールが行われた場合は、自動的にpipもインストールされるはずです。
これらのステップを完了すると、Windows 11にPythonがインストールされ、使用を開始することができます。
ーーーーー
ところが状況が改善されない!
Microsoftのページに飛んで、そこのボタンを押して入れた(なんだか良くわからんが、まあ、そのまま放置した)
$ python3 --version
Python 3.11.6
と出てきているが、まあ、なんでもいいや。
ーーーーー
tomoi@DESKTOP-NHQLQU4 MSYS ~
$ pwd
/c/Users/tomoi
tomoi@DESKTOP-NHQLQU4 MSYS ~
$ mkdir -p ome_config
tomoi@DESKTOP-NHQLQU4 MSYS ~
$ cd ome_config/
OvenMediaEngineのDockerの起動
docker run -d -p 1935:1935 -p 3333:3333 -p 8080:8080 -p 9000:9000 -p 9998:9998/udp -p 9999:9999/udp -p 10000:10000/udp -p 10001:10001/udp -v /c/Users/tomoi/one_config:/opt/ovenmediaengine/bin/origin_conf --name ovenmediaengine airensoft/ovenmediaengine:latest
Run OvenPlayerのDockerの起動
$ docker run -d -p 8090:80 airensoft/ovenplayerdemo:latest
とりあえず、少なくとも、http://localhost:8090/で、以下は出てくる
やっとこさ、パースに成功(酷く時間がかかった)。忘れそうなのでメモっておく
まだ問題山積だけど、golangのCSVパースが通った。
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"strings"
)
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() {
// 提供されたCSVデータ
csvData := `50,7,53.04935656638487,"[{""lat"": 34.6653, ""lng"": 135.2241}, {""lat"": 34.6653, ""lng"": 135.2241}, {""lat"": 34.6652, ""lng"": 135.2241}, {""lat"": 34.6652, ""lng"": 135.224}, {""lat"": 34.6651, ""lng"": 135.224}, {""lat"": 34.665, ""lng"": 135.224}, {""lat"": 34.6649, ""lng"": 135.2239}]","[0.0, 0.0001, 0.0002, 0.0002, 0.0004, 0.0004, 0.0004]",1,2023-03-03 07:40:00,2023-03-03 07:43:00`
// CSVデータを読み込む
r := csv.NewReader(strings.NewReader(csvData))
record, err := r.Read()
if err != nil {
fmt.Println("CSVデータを読み込めません:", err)
return
}
// CSVデータをパース
id := record[0]
userID := record[1]
distance := record[2]
placeJSON := record[3]
speedJSON := record[4]
prediction := record[5]
startAt := record[6]
endAt := record[7]
// JSONデータをパース
var place []Location
if err := json.Unmarshal([]byte(placeJSON), &place); err != nil {
fmt.Println("Placeデータをパースできません:", err)
return
}
var speed []float64
if err := json.Unmarshal([]byte(speedJSON), &speed); err != nil {
fmt.Println("Speedデータをパースできません:", err)
return
}
// パースしたデータを表示
fmt.Println("ID:", id)
fmt.Println("User ID:", userID)
fmt.Println("Distance:", distance)
fmt.Println("Place:", place)
// Placeを要素単位で表示
fmt.Println("Place:")
for _, loc := range place {
fmt.Printf("Lat: %.4f, Lng: %.4f\n", loc.Lat, loc.Lng)
}
fmt.Println("Speed:", speed)
// Speedを要素単位で表示
fmt.Println("\nSpeed:")
for i, s := range speed {
fmt.Printf("Index %d: %.4f\n", i, s)
}
fmt.Println("Prediction Type:", prediction)
fmt.Println("Start At:", startAt)
fmt.Println("End At:", endAt)
}
出力結果
ID: 50
User ID: 7
Distance: 53.04935656638487
Place: [{34.6653 135.2241} {34.6653 135.2241} {34.6652 135.2241} {34.6652 135.224} {34.6651 135.224} {34.665 135.224} {34.6649 135.2239}]
Place:
Lat: 34.6653, Lng: 135.2241
Lat: 34.6653, Lng: 135.2241
Lat: 34.6652, Lng: 135.2241
Lat: 34.6652, Lng: 135.2240
Lat: 34.6651, Lng: 135.2240
Lat: 34.6650, Lng: 135.2240
Lat: 34.6649, Lng: 135.2239
Speed: [0 0.0001 0.0002 0.0002 0.0004 0.0004 0.0004]Speed:
Index 0: 0.0000
Index 1: 0.0001
Index 2: 0.0002
Index 3: 0.0002
Index 4: 0.0004
Index 5: 0.0004
Index 6: 0.0004
Prediction Type: 1
Start At: 2023-03-03 07:40:00
End At: 2023-03-03 07:43:00
ミリ秒を表示する時計について
GNOMEデスクトップ環境でミリ秒を含むデジタル時計を表示するには、カスタムの拡張機能やウィジェットを使用することができます。以下は、GNOME拡張機能を使用してデジタル時計にミリ秒を追加する手順です。
GNOME拡張機能をインストール:
ミリ秒を含むデジタル時計を表示するために、GNOME Shellに拡張機能を追加する必要があります。このためには、GNOME拡張機能をインストールする必要があります。以下の手順でインストールできます。
a. GNOME Extensionsウェブサイトにアクセスします:https://extensions.gnome.org/
b. ウェブサイトで"GNOME Shellに追加"というボタンをクリックして、ブラウザ拡張機能をインストールします。
拡張機能の検索:
拡張機能を検索してインストールする前に、ミリ秒を含むデジタル時計を提供する拡張機能を見つける必要があります。GNOME拡張機能ウェブサイトで「clock」や「time」などのキーワードで検索し、適切な拡張機能を見つけます。例えば、"Digital Clock with Date" などの拡張機能がミリ秒を含むデジタル時計を提供していることがあります。
拡張機能のインストール:
選択した拡張機能を見つけたら、「GNOME Shellに追加」ボタンをクリックしてインストールします。
拡張機能の設定:
GNOME拡張機能アプリを開いて、インストールした拡張機能を有効にします。一般的に、GNOMEメニューの「拡張機能」または「Extensions」セクションから設定できます。
ミリ秒を含むデジタル時計の表示:
インストールした拡張機能を有効にしたら、GNOMEデスクトップ上にミリ秒を含むデジタル時計が表示されるはずです。
これで、GNOMEデスクトップ環境でミリ秒を含むデジタル時計を表示できるようになります。ただし、GNOME拡張機能はGNOMEバージョンに依存することがあるため、バージョンによっては異なる拡張機能が必要かもしれません。お使いのGNOMEバージョンに合った拡張機能を探し、設定してください。
とりあえずメモ(宿題)
CREATE TABLE trips_test (
id serial PRIMARY KEY,
user_id integer,
distance double precision,
place point[],
speed double precision[],
prediction_type integer,
start_at timestamp,
end_at timestamp
);
INSERT INTO trips_test (user_id, distance, place) VALUES (1, 24.66249845798845, ARRAY[point '(34.7241, 135.1294)', point '(34.7241, 135.1294)', point '(34.7241, 135.1294)']);
moove=# INSERT INTO trips_test (user_id, distance, place)
moove-# VALUES (1, 24.66249845798845, ARRAY[point '(34.7241, 135.1294)', point '(34.7241, 135.1294)', point '(34.7241, 135.1294)']);
INSERT 0 1
moove=# select * from trips_test;
id | user_id | distance | place | speed | prediction_type | start_at | end_at
----+---------+-------------------+------------------------------------------------------------------+-------+-----------------+----------+--------
1 | 1 | 24.66249845798845 | {"(34.7241,135.1294)","(34.7241,135.1294)","(34.7241,135.1294)"} | | | |
(1 row)
上記のテーブルから、座標情報を一つ一つ取り出すにはどうしたら良いですか
SELECT id, user_id, unnest(place) AS single_point
FROM trips_test;
moove=# SELECT id, user_id, unnest(place) AS single_point
moove-# FROM trips_test;
id | user_id | single_point
----+---------+--------------------
1 | 1 | (34.7241,135.1294)
1 | 1 | (34.7241,135.1294)
1 | 1 | (34.7241,135.1294)
Ubuntu 22.04、ラズパイ4にdockerをインストールする
Ubuntu 22.04にdockerをインストールする
を参考にして頂きつつ、インストール実施中。
私は、根拠なく、
$ sudo apt-get install docker-ce=5:24.0.4-1~ubuntu.22.04~jammy
を選びました。
ラズパイ4、Ubuntu22.04、で"docker compose"も動いているようです ーー "docker-compose"は動きません。