2023,江端さんの忘備録

先週中頃から腰が痛くなってきて、昨日は寝返りが打てない状況になってきました。

My back has been hurting since the middle of last week and yesterday I could not turn over.

いわゆる、「ギックリがないギックリ腰」の状態です。

This is the so-called "gimpy back with no shocked pain" condition.

原因は『激務』であることは分かっていますが、激務であろうがなかろうが、やることは山積みです。

I know the cause is 'hard work,' but hard work or not, there is a lot of work to be done.

それと、ギックリ腰は、「一日休んだら直る」というものではありません。

And, a gimpy back is not something that can be "fixed after a day's rest.

これは、毎日の負荷を減らし、痛みに耐えながら、日々を送るしか手がありません。

This can only be done by reducing the daily load and enduring the pain.

ギックリ腰は『休み続けるよりは、日常生活を続ける方が直りが早い』という報告もあるようです。

Some people report that "continuing with daily activities is quicker to heal a slipped back than continuing to rest".

-----

問題なのが、「湿布貼り」です。

The problem is the "poultice application".

これ、一人ではできないのです ―― 特に背中や腰については、絶望的です。

This, I can't do alone -- especially with my back and hips, it's hopeless.

最近は、ロキソニン入りの剥れにくい湿布があり、これが非常に効果的なのですが、この貼り方が凄く難しい。

Recently, there is a poultice containing Loxonin that does not peel off easily, which is very effective, but it is very difficult to apply this poultice.

個人で貼るのは無理であると断言できます。

I can assure you that it is impossible for an individual to put it up.

今は、嫁さんが貼ってくれますが、嫁さんが先に逝ってしまったら、私には頼る人がいません。

Right now, my wife is putting it up, but if she passes away before I do, I will have no one to rely on.

(ちなみに、『私が、嫁さんより長生きする』は、結婚時の契約事項です)

(Incidentally, "I will outlive my wife" is a contractual condition of marriage.)

-----

機械・電気・情報工学専攻の学生諸君。

Dear students of Mechanical, Electrical and Computer Engineering.

「ロキソニンSテープ」の自律貼り付け機能を実現する、センサ、アクチュエータ、ロボット、アルゴリズムを開発したら、

Once you develop sensors, actuators, robots, and algorithms that enable the autonomous application of the Loxonin S Tape, you will be able to develop a new product that can be used in a wide variety of applications.

―― お前ら、介護の現場、ナメてんのか

"Are you guys kidding me about the nursing field?"

と、私が叫ばずにすみ、それどころか、世界に対して胸を貼れる研究成果になることは、私が保証します。

I assure you that I will not have to shout it. On the contrary, the results of your research will be something you can be proud of to the world.

企業が、これらの研究に着手しないのは、企業がバカだからではなく(いや、バカかもしれませんが)、人体に対して直接手を触れる機械についての安全基準が高すぎて、開発投資コストがペイしないからです。

Companies do not embark on these studies not because they are stupid (well, maybe they are stupid), but because the safety standards for machines that directly touch the human body are too high to pay for the development research costs.

アカデミズムの価値は、そういう分野に縛られない ―― 自分が被験者となって試して、(プロトタイプであっても)発表できるチャンスがあることです。

The value of academism is that you are not bound to such a field -- you have the chance to be the test subject, try it out, and present it (even as a prototype).

-----

『「ロキソニンSテープ」の自律貼り付け機能』を有するロボットアームの開発は ―― それが、非常に稚拙なものであったとしても、意義のある研究開発になります。

The development of a robotic arm with "automatic application function of 'Loxonin S Tape'" -- even if it is a very poor one -- would be a significant research and development.

そのプロトタイプが完成すれば、企業が投資対効果を真面目に計算できる状況になります。

Once that prototype is completed, the company will be in a position to make a serious calculation of return on investment.

学生研究の意義は、"そこ"にあるのです。

That is the significance of student research.

多分、あなたは"名声"も得られると思います。

Maybe you will get "fame" too.

2023,江端さんの忘備録

近くのスーパー銭湯の近くのコンビニの駐車場で、宿題(交通量の計測)をやってきました。

I did my homework (measuring traffic) in the parking lot of a convenience store near a nearby super public bath.

時刻カウンター (タイムスタンプの記録ができるカウンター)をインストールしてみた

時間帯が悪かったようです。

It seems that the time of day was wrong.

昼のコンビニは、作業用のトラックが沢山やっていて視野が妨げられて、若干の計測ミスも発生したと思います。

I think the convenience store at noon had a lot of work trucks doing their thing, which obstructed the field of vision and caused some measurement errors.

それと、200台/1時間で良かったのですが、下の写真に示しますように、1000台近い車が走っていました。

Also, 200 cars per hour was enough, but as shown in the photo below, there were nearly 1,000 cars on the road.

このアプリがなければ計測できなかったと思います。

I would not have been able to measure without this app.

さて、今日は、ここから宿題のレポート作成です。

Well, today, I am now working on my homework report.

取得したデータはこちら →

The data I obtained is here →.

traffic_20230128

以上

2023,江端さんの忘備録

―― 連合(日本労働組合総連合会)って、もう解散してもいいんじゃないかな

"RENGO (Japanese Trade Union Confederation) should be dissolved by now."

と、思っていた時期が、私にもありました。

There was a time when I thought that I would be able to do the same.

しかし、20年の時を経て、未曾有のインフレがやってきて、今年は、その存在意義が問われることになっています。

However, after 20 years, unprecedented inflation has come and gone, and this year, its very existence is being questioned.

とは言え、日本のインフレ率は、海外と比べると『小雨程度』らしいです。

However, the inflation rate in Japan is said to be "about the same as a drizzle" compared to other countries.

『欲望の資本主義2023 逆転のトライアングルに賭ける時』を視聴して、ビックリしました。

I was surprised when I watched "Capitalism of Desire 2023: Betting on the Triangle of Reversal".

それはさておき。

That aside.

-----

「ストライキ」という言葉ですら、多くの人には理解できないかもしれません。

Even the word "strike" may be incomprehensible to many people.

いわんや「ロックアウト」(×ロックダウン)などは、全くダメでしょう。

A "lockout" (x lockdown), so to speak, would be no-no.

私と同じ世代ですら、知らないかもしれません。

Even people of my generation may not know about it.

私が、これらについて詳しいのは、ちょっと特殊な青春時代を過してきたからです。

I know a lot about these things because of my rather peculiar youth.

『先輩、こんな暴挙を許していいんですか! 武装して強制排除しましょう!!』

 

2023,江端さんの忘備録

NHKBSプレミアム ヒューマニエンス 「“ゲノム編集” 新人類を生む技術か」を視聴しました。

NHKBS Premium Humanience "Genome Editing": Is it a Technology to Create New Human Beings?

ヒューマニエンスは、MCの織田裕二さんが『その内容を理解している/感動している』という様子が伝わってきて、とても気持ちがいいのです(織田さんの映画は、ちょっと私には合わなかったですが)。

"Humanience" is very pleasant because you can see how the MC, Yuji Oda, 'understands/is moved by its content' (although Oda's film was not quite right for me).

比して、「サイエンスZERO」は、ゲストコメンテータが『その内容を理解できていない/感動していない』という様子が、手に取るように分かり、イライラして、視聴するのを止めました。

In contrast, I found the guest commentators on "Science ZERO" to be unimpressed and not understanding the content, which irritated me and made me stop watching the program.

それはさておき。

That aside.

-----

さて、今回の"ゲノム編集"では、やはり「デザイナーベイビー」の話が出てきました。

Now, in this issue of "Genome Editing," they are also talking about "Designer Babies.

私、ヒトのクローンとか、デザイナーベイビーについて、一般の人より抵抗感が低い方だと思います。

I think I am less resistant to human cloning and designer babies than most people.

私のヒトクローンに対する嫌悪感は、凄く小さい

とは言え、

However,

■自分と100%同一のDNAを持つ子ども(遺伝的には、100%自分自身)を養育する

- Foster a child with DNA 100% identical to your own (genetically, 100% your own)

■自分の望む才能を持つ子どもを、設計、出産、養育する

- Design, give birth to, and nurture a child with the talents you desire.

というのは、私ですら、(現時点においては)倫理的に大問題であることは分かります。

Even I can understand that these are major ethical issues (at this time).

実際に、これを強行した中国の研究者が、有罪判決を受けています。

In fact, the Chinese researcher who enforced this was convicted.

-----

このような「DNAの人為的な編集」による生命の誕生と、今や不妊治療では当たり前(主流)となった「試験管ベイビー」が、同列に論じられないことは、よく分かっています。

I understand that the birth of life through such "artificial editing of DNA" and the "test-tube baby" that has now become the norm (mainstream) in fertility treatment cannot be discussed in the same stage.

とは言え、今や、体外受精による出産は、今や16人に1人です。

Nevertheless, IVF births now account for 1 in 16 births.

学校の1クラスあたり2人は、試験管ベイビーで誕生してきたわです。

Two per school class have been born in test tube babies.

「試験管ベイビー」について、思考停止のタブーを続けていたら、2022年の新生児80万人のうち、5万人は誕生していなかったことになります。

If we had continued our thoughtless taboo about "test tube babies," 50,000 of the 800,000 newborns in 2022 would not have been born.

-----

現在、政府は「"異次元"の少子化対策」を唄っていますが、どうせ、"異次元"という言葉を使うのであれば、

Currently, the government is talking about "countermeasures against the declining birthrate in the "other dimension," but if you are going to use the word "other dimension," why not try the followings?

(1)人間への体細胞クローンの法律の緩和

(1) Relaxation of regulations on human somatic cell cloning

(2)人口子宮装置の研究開発費の大型投入

(2) Large R&D expenditures for artificial uterus equipment

(3)同性カップルの生殖研究開発費の大型導入

(3) Large-scale introduction of reproductive R&D funding for same-sex couples

くらいのことを、やればいいのに、と思っています。

もちろん、上記(2)、(3)については、国民の合意形成と、立法措置も併わせて行っていく必要があります。

Of course, it is necessary to build public consensus on (2) and (3) above, as well as to take legislative measures.

-----

私は、この日本国を、壮大な実証実験フィールドにすることに、あまり抵抗がありません。

I have little resistance to making this country of Japan a grand demonstration field.

我が国が、上記(1)~(3)のような技術を確立し法的な保護を与えれば、世界中から我が国への移民希望者が殺到し、労働人口問題など、たちまち解決すると思うのですが ――

If Japan could establish and provide legal protection for the technologies listed in (1) through (3) above, I believe that immigrants from all over the world would come to Japan in droves, and the labor population problem would be quickly solved.

まあ、夫婦別姓やマイナンバーカード程度のことで、ゴタゴタしている我が国では、当面(100年単位で)無理でしょうね。

Well, it will not be possible in the foreseeable future (in 100 years) in our country, which is in a mess over matters as minor as married couples' separate surnames and my number card.

―― 一体、裁判所も、立法(国会)も、『識別子の取扱い』ごときに、なんで、こんなにゴタゴタしていやがるんだ

 

2023,江端さんの忘備録

以前、町内会で広報係を担当していたことがありました。

I used to be in charge of "public relations" at a neighborhood association.

町内イベントの撮影を行う必要があったので、私は町内会費で「腕章」を購入しました。

I had to shoot town events, so I purchased "armbands" with my township dues.

こんなのです。

It is like this.

これを装着しているだけで、心理的に作業がしやすくなったのを覚えています。

I remember that just wearing this made it psychologically easier to work with.

「他人から自分がどう見えるか」という視点での安心感が大きかったです。

I felt a great deal of relief from the perspective of "how I was seen from others".

-----

逆にいえば、この腕章の「悪用」は簡単です。

Conversely, it is easy to "abuse" this armband.

盗撮等など、堂々とやられる可能性があります。

Voyeurism, etc., may be done with impunity.

という訳で、皆さんは、腕章をして撮影をしている人がいたら

So, if you find someone wearing an armband and taking pictures,

―― 身分証明書の提示を要求しましょう

"you may demand him/her to see their ID"

逆に「お前は誰か」と問われたら、堂々と『警察の関係者だ』と言いはりましょう。

On the other hand, if they ask, "Who are you?", you proudly claim, "I'm related to a police official".

日本国民は、公共サービスの被提供者ですから、全員『警察の関係者』です。

Japanese citizens are the recipients of public services, so we are all 'related to police personnel.

もし、そいつが逃げ出そうとしたら、取り抑えましょう。

If he/she tries to escape, restrain him/her.

知らない方も多いかと思いますが、私たち国民全員に、逮捕権があります。

Many of you may not know this, but all of us citizens have the right to arrest.

2023,江端さんの忘備録

私のブログを読んで頂いている方なら、私がC/C++の後継言語として(そして、人生最後の言語として)として、Go言語を使っていることはご存知かと思います。

If you have been reading my blog, you know that I am using Go language as a successor to C/C++ (and as the last language in my life).

個人的には、今でもC/C++の方が使いやすいですが、C/C++ではどうしても実現できない2つ

Personally, I still prefer to use C/C++, but there are two things that C/C++ just can't achieve.

- 軽量スレッド(Goroutine)

-Lightweight threads (Goroutine)

- チャネル(Channel)

- Channel

in Golang

ちなみに、当時の弊社では、メモリリークを起こす実装をしたエンジニアは、回りの人間から『バカ、アホ、死ね』と言われて、頭(こうべ)を垂れ続けなければなりませんでした。

-----

さて、本日、

Well, today. I found an article whose title was

「プログラミング言語「Go」が攻撃者に人気の理由」

"Why the programming language "Go" is so popular with attackers"

という記事を見つけました。

これは、『これからのエンジニアがGo言語に興味を持つきっかけになるかもしれない』と思い、期待して読んだのですが、「そうかなぁ」という"???"な内容でした。

I read this with high expectations, thinking that it 'might trigger future engineers' interest in the Go language,' but I wondered "Is that so?"

「今時、マルチプラットフォーム対応でないプログラム言語があったら知りたいくらいだ」と思いますし、

I'd like to know if there is a programming language that is not multi-platform compatible nowadays.

「攻撃プログラムがディスクにロードされずに、オンメモリで攻撃するなど普通だ」とも思いました。

I also thought, "It's normal, for example, for an attacking program to attack on-memory, without being loaded to disk."

つまるところ、最大の理由は、『Go言語のコードが(まだ)珍しい』『現時点で、Goがまだマイナーな言語である』というだけのことのように読めました。

After all, I thought the biggest reason is just that 'Go language code is (still) rare' and 'Go is still a minor language at this point'.

-----

私としては、

As for me,

『Goroutineを使った、1000万のサーバの同時攻撃』

"A simultaneous attack on 10 million servers using Goroutine",

とか

or

『懦弱なサーバの発見と同時に、集中攻撃を開始』

Launch a concentrated attack as soon as a vulnerable server is discovered.

などのような、これまでにない自律的な攻撃プログラムをGo言語で作れる ―― というような内容を期待していたので、正直ガッカリしています。

I was expecting to be able to create an unprecedented autonomous attack program in the Go language, so I am honestly disappointed.

-----

そういえば、「江端 = サイバー攻撃者」というイメージをもっている人がいるように思えます。

Come to think of it, apparently the public has an image of "Ebata = cyber attacker".

はっきり言いますが、誤解です。

To be clear, this is a misunderstanding.

むしろ、サイバー攻撃の被害者となる可能性の方が高いです。

Rather, they are more likely to be victims of cyber attacks.

先日も、『江端さんなら、公共カメラをハックして、家からモニタリングできるのではないですか?』というメールを頂きました。

The other day, I received an e-mail from someone who asked me, "Mr. Ebata, I think you could hack a public camera and monitor it from your home".

このような誤解は、私にとっては、結構な"賞賛"でもあるのですが ―― 残念ながら、私には、その「スキル」がないですし、なにより「時間」がないです。

This kind of misunderstanding is quite "admirable" to me -- unfortunately, I don't have the "skills" and most of all, I don't have the "time".

アニメやドラマの世界では、ハッカー(正確にはクラッカー)が、たちまち国家や企業のサーバに侵入したりしていますが、あれ、かなりの"幻想"です。

In the world of cartoons and dramas, hackers (crackers, to be precise) quickly break into national and corporate servers. However, that is quite an "illusion.

サイバー攻撃は、私に言わせると「どぶ掃除」のような作業だと思います ―― 面倒で、根気もいります。

Cyberattacks, in my opinion, are a "ditch-cleaning" process -- tedious and requires a lot of patience.

ただ、十分な時間をかけて、身元がバレないように、ゆっくりとトライアルを続ければ、多くのシステムは突破できると思います。

However, if you take enough time and continue the trial slowly enough so that your identity is not revealed, I believe that much of the security can be breached.

問題は、そのようなスキルと時間が、誰にでもあるわけではない、ということです。

The problem is that such skills and time are not available to everyone.

ですから、システムを突破される時間より短い時間で定期的にパスワードを変更するだけで、相当に高い確率でサイバー攻撃は阻止できるのですが ―― これをサボる人が、実に多いんですよね。

Therefore, simply changing passwords on a regular basis in less time than it takes to break through the system will stop a cyber attack with a fairly high probability -- but there are so many people who skip this.

2023,江端さんの技術メモ

宿題が出ました。

A Homework is coming .

交通量の少ない通り(200台/時程度)を信号のない場所から選ぶ。
1時間の間に車がある地点を通過する時刻を記録する。時刻は1秒か2秒の単位で 秒単位で記録する。
1. 時刻tまでに観測点を通過した車両の累積台数A(t)を描画する。図の横軸は時間 図の横軸は時間、縦軸はA(t)とする。
2. A(t)のうち、ほぼ線形(平均到着率が一定)の部分を選択する。この時間帯のカウント数から この時間帯のカウントから、1分間と5分間の連続したカウントのヒストグラムを作成する。そして、そのヒストグラムをポアソン分布と比較する。

Select a street with low traffic volume (about 200 cars/hour) from a location without a traffic light.
Record the time at which a car passes a certain point during a one-hour period. Record the time in seconds, in increments of 1 or 2 seconds.
Draw the cumulative number of vehicles A(t) that passed the observation point by time t. The horizontal axis of the figure is time, and the vertical axis is A(t). 2.
Select a portion of A(t) that is nearly linear (constant average arrival rate). From the counts during this time period. From the counts during this time period, create a histogram of consecutive counts for 1 minute and 5 minutes. The histogram is then compared to the Poisson distribution

Translated with www.DeepL.com/Translator (free version)

近日中に防寒着を着込んで、道路の近くで自動車の通過時刻をノートにメモすることになりそうです。
I will be putting on my winter clothes in the coming days and noting down in my notebook the time of passing cars near the road.

―― これをノートに記載するのは面倒くさいな
-- I can't be bothered to note this.

―― この手のアプリは絶対にあるはずだ
-- there should definitely be an app for this kind of thing.

と思ったのですが、iPad用のアプリが見つからず、しぶしぶ自分でJavaScriptを組み出しました。
But I could not find an app for the iPad, so I reluctantly put together my own JavaScript.

しかし、表示が上手くいかず、今度はiPadに限定せずに探し捲りました。
However, the display did not work, and this time I searched around without limiting myself to the iPad.

で、見つけたのがこれです。
This is what I found

時刻カウンター (タイムスタンプの記録ができるカウンター)
Time counters (counters that can record time stamps)

アイコン画像

Android端末専用でしたが、私の部屋にはSIMカードの入っていないスマホがゴロゴロしていますので、そのうちの一台にインストールしました。
It was for Android devices only, but I have a bunch of phones without SIM cards in my room, so I installed it on one of them.

2画面のイメージはこちらです(6画面までできるようです)
Here is an image of two screens (it seems to be possible to have up to 6 screens)

これで、左方向、右方向バラバラで台数計測できそうです。
This will allow me to measure the number of units in the left and right directions separately.

交通量を計測するので、計測時間は十分に短くないと困ります。
Since I am measuring traffic, the measurement time must be short enough.

ですので、[設定]→[再カウントまでの時間]を1000ms→10msに変更しました。
Therefore, I changed [Settings] -> [Time until recount] from 1000 ms to 10 ms.

[音をならす]、[振動させる]も解除しておきました。
I also deactivated [Make Sound] and [Vibrate].

で、計測結果をメールで自分のアドレスに送ってみました
And I emailed the measurement results to my address.

1,1,"カウンター1",2023-01-24 23:19:03,2023,1,24,23,19,3,0
2,2,"カウンター2",2023-01-24 23:19:06,2023,1,24,23,19,6,0
3,1,"カウンター1",2023-01-24 23:19:09,2023,1,24,23,19,9,0
4,1,"カウンター1",2023-01-24 23:19:12,2023,1,24,23,19,12,0
5,2,"カウンター2",2023-01-24 23:19:14,2023,1,24,23,19,14,0
6,1,"カウンター1",2023-01-24 23:19:19,2023,1,24,23,19,19,0
7,2,"カウンター2",2023-01-24 23:19:26,2023,1,24,23,19,26,0
8,2,"カウンター2",2023-01-24 23:19:28,2023,1,24,23,19,28,0
9,2,"カウンター2",2023-01-24 23:19:29,2023,1,24,23,19,29,0
10,1,"カウンター1",2023-01-24 23:19:31,2023,1,24,23,19,31,0

csv形式というのもいいです。加工しやすそうです。
I also like that it is in csv format. It seems to be easy to process.

これでフィールドワークはなんとかなりそうです。
So, I will able to do my homework.

 

2023,江端さんの技術メモ

出典を忘れてしまいましたが、どなたかが作られたコードを丸パクリさせて頂きました。→たぶん"これ"

ノード1 → "A", ノード2 → "B", ノード3 → "C", ノード4 → "D", ノード5 → "E" として取り扱います。

package main

import (
	"errors"
	"fmt"
)

// ノード
type Node struct {
	name  string  // ノード名
	edges []*Edge // 次に移動できるエッジ
	done  bool    // 処理済みかを表すフラグ
	cost  int     // このノードにたどり着くのに必要だったコスト
	prev  *Node   // このノードにたどりつくのに使われたノード
}

func NewNode(name string) *Node {
	node := &Node{name, []*Edge{}, false, -1, nil}
	return node
}

// ノードに次の接続先を示したエッジを追加する
func (self *Node) AddEdge(edge *Edge) {
	self.edges = append(self.edges, edge)
}

// エッジ
type Edge struct {
	next *Node // 次に移動できるノード
	cost int   // 移動にかかるコスト
}

func NewEdge(next *Node, cost int) *Edge {
	edge := &Edge{next, cost}
	return edge
}

// 有向グラフ
type DirectedGraph struct {
	nodes map[string]*Node
}

func NewDirectedGraph() *DirectedGraph {
	return &DirectedGraph{
		map[string]*Node{}}
}

// グラフの要素を追加する (接続元ノード名、接続先ノード名、移動にかかるコスト)
func (self *DirectedGraph) Add(src, dst string, cost int) {
	// ノードが既にある場合は追加しない
	srcNode, ok := self.nodes[src]
	if !ok {
		srcNode = NewNode(src)
		self.nodes[src] = srcNode
	}

	dstNode, ok := self.nodes[dst]
	if !ok {
		dstNode = NewNode(dst)
		self.nodes[dst] = dstNode
	}

	// ノードをエッジでつなぐ
	edge := NewEdge(dstNode, cost)
	srcNode.AddEdge(edge)
}

// スタートとゴールを指定して最短経路を求める
func (self *DirectedGraph) ShortestPath(start string, goal string) (ret []*Node, err error) {
	// 名前からスタート地点のノードを取得する
	startNode := self.nodes[start]

	// スタートのコストを 0 に設定することで処理対象にする
	startNode.cost = 0

	for {
		// 次の処理対象のノードを取得する
		node, err := self.nextNode()

		// 次に処理するノードが見つからなければ終了
		if err != nil {
			return nil, errors.New("Goal not found")
		}

		// ゴールまで到達した
		if node.name == goal {
			break
		}

		// 取得したノードを処理する
		self.calc(node)
	}

	// ゴールから逆順にスタートまでノードをたどっていく
	n := self.nodes[goal]
	for {
		ret = append(ret, n)
		if n.name == start {
			break
		}
		n = n.prev
	}

	return ret, nil
}

// つながっているノードのコストを計算する
func (self *DirectedGraph) calc(node *Node) {
	// ノードにつながっているエッジを取得する
	for _, edge := range node.edges {
		nextNode := edge.next

		// 既に処理済みのノードならスキップする
		if nextNode.done {
			continue
		}

		// このノードに到達するのに必要なコストを計算する
		cost := node.cost + edge.cost
		if nextNode.cost == -1 || cost < nextNode.cost {
			// 既に見つかっている経路よりもコストが小さければ処理中のノードを遷移元として記録する
			nextNode.cost = cost
			nextNode.prev = node
		}
	}

	// つながっているノードのコスト計算がおわったらこのノードは処理済みをマークする
	node.done = true
}

func (self *DirectedGraph) nextNode() (next *Node, err error) {
	// グラフに含まれるノードを線形探索する
	for _, node := range self.nodes {

		// 処理済みのノードは対象外
		if node.done {
			continue
		}

		// コストが初期値 (-1) になっているノードはまだそのノードまでの最短経路が判明していないので処理できない
		if node.cost == -1 {
			continue
		}

		// 最初に見つかったものは問答無用で次の処理対象の候補になる
		if next == nil {
			next = node
		}

		// 既に見つかったノードよりもコストの小さいものがあればそちらを先に処理しなければいけない
		if next.cost > node.cost {
			next = node
		}
	}

	// 次の処理対象となるノードが見つからなかったときはエラー
	if next == nil {
		return nil, errors.New("Untreated node not found")
	}

	return
}

func main() {
	// 有向グラフを作る
	g := NewDirectedGraph()

	// グラフを定義していく
	g.Add("A", "B", 2)
	g.Add("A", "C", 7)
	g.Add("A", "D", 5)

	g.Add("B", "D", 4)

	g.Add("C", "E", 2)

	g.Add("D", "C", 1)
	g.Add("D", "E", 4)

	g.Add("E", "C", 2)

	// "s" ノードから "z" ノードへの最短経路を得る
	path, err := g.ShortestPath("A", "E")

	// 経路が見つからなければ終了
	if err != nil {
		fmt.Println("Goal not found")
		return
	}

	// 見つかった経路からノードとコストを表示する
	for _, node := range path {
		fmt.Printf("ノード: %v, コスト: %v\n", node.name, node.cost)
	}
}

 

出力結果

C:\Users\ebata> go run .\dijkstra.go
ノード: E, コスト: 8
ノード: C, コスト: 6
ノード: D, コスト: 5
ノード: A, コスト: 0

ラベル修正法の練習(だけ)

2023,江端さんの技術メモ

「Golangでcsvファイルを読み出す」の記事は多いのですが、特定の行まで引っ張り出す情報があまりないので、メモを残しておきます。

/*
以下のcsvファイル(kai_20220522holyday18.csv)の中身を取り出す
id,age,type,departure_name,departure_number,departure_lat,departure_lng,arrival_name,arrival_number,arrival_lat,arrival_lng
0,43,resident,,,34.173408,131.470684,,,34.155862,131.501246
1,24,resident,,,34.179449,131.482543,,,34.164116,131.471791
2,42,resident,,,34.168739,131.470768,,,34.160989,131.491124
3,21,resident,,,34.169494,131.469934,,,34.173498,131.471351
4,58,resident,,,34.185295,131.47414,,,34.191481,131.49456
5,48,resident,,,34.150778,131.480747,,,34.16536,131.471872
6,56,resident,,,34.16536,131.471872,,,34.174066,131.479312
7,73,resident,,,34.155731,131.500845,,,34.16776,131.472831
8,47,resident,,,34.167237,131.471785,,,34.155775,131.476531
9,21,resident,,,34.154931,131.50468,,,34.156678,131.49581
10,37,resident,,,34.16727,131.472899,,,34.171253,131.471177
11,40,resident,,,34.147241,131.474921,,,34.150675,131.486268
12,67,resident,,,34.173683,131.476347,,,34.173643,131.471027
13,28,resident,,,34.183079,131.484303,,,34.174245,131.474592
14,46,resident,,,34.146154,131.472711,,,34.159611,131.491548
15,25,resident,,,34.162497,131.489283,,,34.147212,131.475984
*/

package main

import (
	"encoding/csv"
	"fmt"
	"log"
	"os"
	"strconv"
)

func main() {
	file, err := os.Open("kai_20220522holyday18.csv") // 先ほど入手した郵便番号データをos.Openで開く
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	r := csv.NewReader(file)
	rows, err := r.ReadAll() // csvを一度に全て読み込む
	if err != nil {
		log.Fatal(err)
	}

	// 行ごとに
	for i, row := range rows {
		if i == 0 {
			continue // CSVのヘッダー行を無視
		}

		age := row[1]

		departure_lat, err := strconv.ParseFloat(row[5], 64)
		if err != nil {
			log.Fatal(err)
		}
		departure_lng, err := strconv.ParseFloat(row[6], 64)
		if err != nil {
			log.Fatal(err)
		}

		arrival_lat, err := strconv.ParseFloat(row[9], 64)
		if err != nil {
			log.Fatal(err)
		}

		arrival_lng, err := strconv.ParseFloat(row[10], 64)
		if err != nil {
			log.Fatal(err)
		}

		fmt.Println(age, departure_lat, departure_lng, arrival_lat, arrival_lng)

	}
}

 

出力結果

C:\Users\ebata\yamaguchi\src_try1\others> go run main5.go
43 34.173408 131.470684 34.155862 131.501246
24 34.179449 131.482543 34.164116 131.471791
42 34.168739 131.470768 34.160989 131.491124
21 34.169494 131.469934 34.173498 131.471351
58 34.185295 131.47414 34.191481 131.49456
56 34.16536 131.471872 34.174066 131.479312
73 34.155731 131.500845 34.16776 131.472831
47 34.167237 131.471785 34.155775 131.476531
21 34.154931 131.50468 34.156678 131.49581
37 34.16727 131.472899 34.171253 131.471177
40 34.147241 131.474921 34.150675 131.486268
67 34.173683 131.476347 34.173643 131.471027
28 34.183079 131.484303 34.174245 131.474592
46 34.146154 131.472711 34.159611 131.491548
25 34.162497 131.489283 34.147212 131.475984

 

2023,江端さんの忘備録

■自分の魅力や能力を、過去の実績で語っても無駄

- Talking about one's attractiveness and abilities in terms of past achievements is useless.

■自分の魅力や能力をを主張したいのであれば、まさに"今"の、"現在進行形"の自分の仕事や学業で見(魅)せなければならない

- If you want to assert your attractiveness and abilities, you must show them through your work and studies in the "present" and "ongoing" state.

―― と。

以前、私の娘に、自分の過去の経歴をメールで送ってきたおっさん(定年後)のことを思い出していました。

I was reminded of an old man (retired) who once emailed my daughter about his past career.

仕事やら海外赴任や自分の職歴やらの情報が書かれていて ―― この私ですら、その内容に"ドン引き"しました。

It contained information about my job, overseas assignments, his work history, etc. - even I was "taken aback" by the contents.

本件、娘から相談されたので、私が穏便な対応策(個人情報保護に関する事項)を娘にアドバイスして、事なきに至ったようですが。

Since my daughter consulted me on this matter, I advised her on how to deal with the matter (matters related to the protection of personal information) in a calm manner. After that it seemed to be resolved.

シニアの『"昔の武勇伝"ハラスメント』を叩き壊すのに、十分な、脅威(恐怖)だっただろうと思います。

-----

―― 自分のシニアを放置し続けると、どんどん自分を見苦しくすることになる

"If you continue to neglect "your old", you will make yourself look worse and worse"

ということを、私に実感させてくれた事件でした。

This was an matter who made me realize that.

しかし、『シニアになると、ジュニアの頃のパフォーマンス』が発揮できなくなるのは、本当です。

However, it is true that 'as you become a senior, you cannot perform as well as you did as a junior.

ですから、『過去の自分の栄光にすがりつきたい』『他の人に、過去の自分のスゴさを理解して貰いたい』というシニアの気持ちは、よく分かるのです。

Therefore, I understand the senior's desire to 'hang on to his past glory' and 'have others understand how great he was in the past.

-----

その点、私は、コラムなどで『過去の自分の栄光』を語れるフィールドがあって、かなり幸せだなぁ、と思っています。

In that respect, I am quite happy to have a field where I can talk about my 'past glory' in my columns and so on.

故に、今、私は、最大の感謝と忖度(そんたく)を込めて叫びます。

Therefore, I now want to exclaim with the utmost gratitude and condescension.

『EE Times Japan 編集部 万歳 !』

"Long live the editors of EE Times Japan!"