江端智一のホームページ
会社から、セキュリティ対策の指示がでると心底うんざりします。
I am genuinely sick and tired of receiving instructions from the company about security measures.
(1)まず、資料の内容が分からない。一体何を目的に何がしたいのかがさっぱり分かりません。
(1) First of all, I don't understand what the material is about. I have no idea what they want to do for what purpose.
(2)一発で、マニュアル通りに上手く設定できた試しがない。
(2) According to the manual, I have never been able to set it up successfully in one shot.
(3)設定後に、パソコンを再起動を試みると、かなり高い確率で失敗し、最悪の場合、システムが全部壊れることもある。元の状態に戻すことすらできない。
(3) After setting up, attempts to restart the computer fail pretty, and in the worst case, the entire system can be destroyed. It is not even possible to restore the system to its original state.
ちなみに、これは『ITエンジニア』である私の話です。
By the way, this is my story as an 'IT engineer.'
そうでない人にとっては、このような指示は『悪夢』そのものでしょう。
Such instructions would be a 'nightmare' for those who do not.
-----
このような複雑な設定作業を、エンドユーザに押し付ける ―― これは、『エンジニア集団の会社』だからでしょうか?
Is it because this is a "company of engineers" that forces the end user to go through such a complicated setup process?
それなら諦めるしかないと思いますが ―― それでも、私は本当に怖いです。
Then I guess I'll have to give up, but I'm still really scared.
というか、セキュリティ対策のオペレーションに失敗した場合、その日の仕事は止まりますし、下手すると数日から一週間くらい、何もできなくなる可能性があります。
Or rather, if a security operation fails, work stops for the day, and if it is not good, you may not be able to do anything for a few days or a week.
サイバー攻撃より、酷い。
It is worse than a cyber attack.
実際、私、何度か、そういう目に遭遇しています。
Several times, I have encountered that kind of thing.
-----
今後、さらに、サイバー攻撃は巧妙かつ高度になります。そして、多分、私達はそれについて行けなくなります。
In the future, cyber attacks will become even more sophisticated and advanced. And maybe we will not be able to keep up.
攻撃者は、攻撃だけに集中できますが、私たちは、防御だけに一日を費すことは許されません。
An attacker can focus only on the attack, but we cannot allow our day to be spent only on defense.
通常業務に加えて防御もやる、というのは、相当に過酷な労働環境です。
It is a very demanding work environment, doing defense and regular work.
-----
今後、この状態を続き、セキュリティ対策がさらに難しくなり、私たちがそれについていけなくなれば、
If this continues and security measures become even more difficult for us to keep up with in the future,
―― ハッカー(クラッカー)側の一人勝ちとなる世界が到来する
-- A world in which hackers (crackers) will be the sole winners.
ような気がします。
I feel so.
-----
で、対策なんですが、
So, the countermeasure is,
■パソコン、スマホ、インターネットを全て放棄する
- Abandon all computers, smartphones, and the Internet.
というのは無理としても、
Even if it is impossible to say,
■ダイヤルアップ接続の時代まで、時間を遡る
- Tracing back time to the days of dial-up connections
ところまで退行するのは、どうかなぁ、と、かなり真面目に考えています。
I am seriously thinking that we should regress to this point.
Y: Latitude: Lat :経度:南北 35.3715607
X: Longitude:Lng,Log:経度:東西 139.6268272,
https://www.kobore.net/thanks.txt.html
「Let me say "Thank you"」
膨大な英文ドキュメント、英語による技術者との議論、開発途上で不完全なライブラリ群に、私が血の涙を流しながら取り組んできた製品、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)だね」と言った後で、「君達の多大な努力に、心から感謝している。もう一度、ありがとうと言わせて貰えるかな」と言いながら、私達に握手を求めて来ました。
おどおどと差しだした私の手を、ヘンリーさんの大きな暖かい手が包んでくれたのを、漠然と覚えています。
パーティッションを立ち去るヘンリーさんの後姿を見ながら、私は両手の拳を口のところに持って行って、すんでのところで『ステキ!』と叫んでしまうところでした。
勿論、私だって、ヘンリーさんの言葉が「リップサービス」ということは分かっています。
でも、開発の最前線でコードに埋もれながら、バグと格闘している技術者には、このような、ほんのちょっとしたフォローが、心に染みたりするものなのです。
-----
さて、日本で働いている皆さんに質問です。
最近、大きな仕事を終えた後、「君達の多大な努力に、心から感謝している」と言われながら、部長から握手を求められた人。
いますか ?
(本文章は、全文を掲載し内容を一切変更せず著者を明記する限りにおいて、転載して頂いて構いません。)
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バージョンに合った拡張機能を探し、設定してください。