2024,江端さんの技術メモ

まず、この2つの点は、どっちが、私(江端)が追加したノードだったのかを思い出すことにします。

上のノードは、こんな風

id番号が若いから、こっちが私が作った方で、まあ、間違いないでしょう。

念の為、もう一方も確認。

こちもID番号若いけど、以前管理した番号とは違うみたいだから、こっちが既存のノードであろう、とする。

これを私が結線した時に作った道路が、これ。

結線の情報は、source,target, source_osm, target_osmで入っているので、少なくともノード間の結線であれば、ここの加工だけで何とかなるんじゃないかな、と。

で、ここの部分のエントリーを見てみたら、こんな感じでした。(tomioka_db_c_trialの方で確認中)

gid、osm_id →新規の番号を適当に付ける
source, target, source_osm, target_osm は、これから結線するノード番号を記載する。(sourceが、江端が作成したNodeになっている)
と、まあ、ここまではいいとして、tag_idってなんだろう。あと、the_geomをどうしようかなぁ。

QGIS使ってtag_id = 112 だけを表示して調べてみたけど、私が手を入れたところに(も)出てきているようなので、何も分からないまま 112 を使うことにする。

さて、次に問題は、the_geomである。これは面倒くさい。多分デタラメな値を入れても大丈夫だとは思うが、念を入れておきたい。

tomioka_db_c=# select * from ways where gid = 506;
 gid | osm_id | tag_id |        length         |      length_m      | name | source | target | source_osm | target_osm |         cost          |     reverse_cost      |       cost_s       |   reverse_cost_s   | rule | one_way | oneway  |       x1        |      y1       |       x2        |       y2       | maxspeed_forward | maxspeed_backward | priority |                                          the_geom
-----+--------+--------+-----------------------+--------------------+------+--------+--------+------------+------------+-----------------------+-----------------------+--------------------+--------------------+------+---------+---------+-----------------+---------------+-----------------+----------------+------------------+-------------------+----------+--------------------------------------------------------------------------------------------
 506 | 105780 |    112 | 7.110994016919574e-06 | 0.7650124135935403 |      |    277 |    414 |     102352 |     102501 | 7.110994016919574e-06 | 7.110994016919574e-06 | 0.0550808937787349 | 0.0550808937787349 |      |       0 | UNKNOWN | 139.61725559089 | 35.3693678707 | 139.61725862094 | 35.36936143758 |               50 |                50 |      2.5 | 0102000020E610000002000000AA04CC8EC0736140C26C467247AF414090C32695C0736140A2674F3C47AF4140
(1 row)
で、以下のように実行して、 the_geom の内容を調べてみると
tomioka_db_c=# select ST_Astext(the_geom) from ways where gid = 506;
                                st_astext
--------------------------------------------------------------------------
 LINESTRING(139.61725559089 35.3693678707,139.61725862094 35.36936143758)
(1 row)

と、2点の座標を結ぶ直線であることが分かった。

そこで、以下のプログラムを作成してみた。

/*
c:\users\ebata\tomika3b\src\others\main31.go
go run main31.go


*/
package main

import (
	"encoding/hex"
	"fmt"

	"github.com/twpayne/go-geom"
	"github.com/twpayne/go-geom/encoding/wkb"
)

func main() {

	// 2つの緯度経度ポイント
	//coordinates := [][]float64{{139.6917, 35.6895}, {-74.006, 40.7128}}
	coordinates := [][]float64{{139.61725559089, 35.3693678707}, {139.61725862094, 35.36936143758}}
	//coordinates := [][]float64{{139.61725862094, 35.36936143758}, {139.61725559089, 35.3693678707}}

	// Geometryの作成
	lineString := geom.NewLineStringFlat(geom.XY, []float64{coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1]})

	// WKB形式に変換
	wkbBytes, err := wkb.Marshal(lineString, wkb.NDR)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// WKB形式を16進数文字列に変換
	wkbHex := hex.EncodeToString(wkbBytes)

	// 出力
	fmt.Println(wkbHex)
}

さて、このプログラムからから、
0102000020E610000002000000AA04CC8EC0736140C26C467247AF414090C32695C0736140A2674F3C47AF4140
を作れるかな?

coordinates := [][]float64{{139.61725559089, 35.3693678707}, {139.61725862094, 35.36936143758}}
としたら、
ベース: 0102000020E610000002000000AA04CC8EC0736140C26C467247AF414090C32695C0736140A2674F3C47AF4140
作成: 01020| |0000002000000aa04cc8ec0736140c26c467247af414090c32695c0736140a2674f3c47af4140
一部欠けているが、一致している。

では、逆転させてみよう。
coordinates := [][]float64{{139.61725862094, 35.36936143758}, {139.61725559089, 35.3693678707}}
としたら、
ベース: 0102000020E610000002000000AA04CC8EC0736140C26C467247AF414090C32695C0736140A2674F3C47AF4140
作成: 000000000200000002406173c08ecc04aa4041af4772466cc2406173c09526c3904041af473c4f67a2
こっちは、不一致が多いようです。

でも geomの長さが違うと思い、ChatGPTに尋ねてみたところ、以下のように言われました。

PostGISで生成されたWKB形式のデータは、ヘッダーを含んでいるため、より長いバイト列となります。一方、Go言語の標準ライブラリを使用して生成されたWKB形式のデータは、ヘッダーを省略しているため、より短いバイト列となります。

両方のWKB形式のデータが同じ構造と座標を持っている場合、データの内容は正しく解釈されます。しかし、データの長さには違いが生じることがあります。この違いは、WKB形式が異なる実装によって生成された場合に一般的です。

WKB形式のデータは、そのバイト列を解釈する際に、ヘッダーの情報を使用してジオメトリの種類と座標の次元を正しく読み取ります。そのため、データの長さの違いは問題ありません。

ということなので、長さについては無視することにしました。まあ、ダイクストラ計算をする分には問題ないでしょう

-----

では、本命。

この2点間を結線する、をやってみます。

    //source 305(×306) {139.62232489, 35.37185132}  target 1401  {139.62233160, 35.37184490} // これが今回のターゲット

    coordinates := [][]float64{{139.62232489, 35.37185132}, {139.62233160, 35.37184490}}

で計算したところ、

0102000000020000002d41e315ea736140ed2ff5d298af41408ea8f523ea7361409a571a9d98af4140
となったので、これはこのまま利用。

今回は、この2点間を繋ぐ、wayのオブジェクトを作れば良いだけなので、基本的にはwayのエントリーを一つ追加するだけで足りるはず。

#gid =506のエントリーがこんな感じなので、これをパクります。
tomioka_db_c=# select * from ways where gid = 506;
 gid | osm_id | tag_id |        length         |      length_m      | name | source | target | source_osm | target_osm |         cost          |     reverse_cost      |       cost_s       |   reverse_cost_s   | rule | one_way | oneway  |       x1        |      y1       |       x2        |       y2       | maxspeed_forward | maxspeed_backward | priority |                                          the_geom
-----+--------+--------+-----------------------+--------------------+------+--------+--------+------------+------------+-----------------------+-----------------------+--------------------+--------------------+------+---------+---------+-----------------+---------------+-----------------+----------------+------------------+-------------------+----------+--------------------------------------------------------------------------------------------
 506 | 105780 |    112 | 7.110994016919574e-06 | 0.7650124135935403 |      |    277 |    414 |     102352 |     102501 | 7.110994016919574e-06 | 7.110994016919574e-06 | 0.0550808937787349 | 0.0550808937787349 |      |       0 | UNKNOWN | 139.61725559089 | 35.3693678707 | 139.61725862094 | 35.36936143758 |               50 |                50 |      2.5 | 0102000020E610000002000000AA04CC8EC0736140C26C467247AF414090C32695C0736140A2674F3C47AF4140

(1 row)

空き番号となっているgidは1984
空き番号となっているosm_idは、現在104088(と同じ桁であれば)、104090あたりが良さそう

x1,y1,x2,y2も比較してみたところ、
source 139.61725559  35.36936787
target 139.61725862 35.36936144
X1 139.61725559089 Y1 35.3693678707
X2 139.61725862094  Y2 35.36936143758となっていたので、とりあえずx1、x1をsource に、x2、y2をtargetにしてみたでは作ってみますか
(他のところは、現在のノード(506)をパクッても大きな問題にはならないだろう、と予測)
gid | osm_id | tag_id |        length         |      length_m      | name | source | target | source_osm | target_osm |         cost          |     reverse_cost      |       cost_s       |   reverse_cost_s   | rule | one_way | oneway  |       x1        |      y1       |       x2        |       y2       | maxspeed_forward | maxspeed_backward | priority |                                          the_geom
1984| 104090 |    112 | 7.110994016919574e-06 | 0.7650124135935403 |      |    305 |    1401 |    102381 |    4095221163 | 7.110994016919574e-06 | 7.110994016919574e-06 | 0.0550808937787349 | 0.0550808937787349 |      |       0 | UNKNOWN | 139.61725559089 | 35.3693678707 | 139.61725862094 | 35.36936143758 |               50 |                50 |      2.5 | 0102000020E610000002000000AA04CC8EC0736140C26C467247AF414090C32695C0736140A2674F3C47AF4140

INSERT INTO ways (gid, osm_id, tag_id, length, length_m, name, source, target, source_osm, target_osm, cost, reverse_cost, cost_s, reverse_cost_s, rule, one_way, oneway, x1, y1, x2, y2, maxspeed_forward, maxspeed_backward, priority, the_geom)
VALUES (1984, 104090, 112, 7.110994016919574e-06, 0.7650124135935403,NULL, 305 , 1401, 102381, 4095221163, 7.110994016919574e-06, 7.110994016919574e-06, 0.0550808937787349, 0.0550808937787349, NULL, 0, 'UNKNOWN', 139.62232489, 35.37185132, 139.62233160, 35.37184490, 50, 50, 2.5, '0102000000020000002d41e315ea736140ed2ff5d298af41408ea8f523ea7361409a571a9d98af4140');

結線されたようです。

では、ちゃんとダイクストラで繋がるのかを確認してみます。

tomioka_db_c_trial=# SELECT seq, source, target, x1, y1, x2, y2 FROM pgr_dijkstra('SELECT gid as id, source, target, cost, reverse_cost FROM ways',699, 304, directed := false) a INNER JOIN ways b ON (a.edge = b.gid) ORDER BY seq;
 seq | source | target |       x1        |       y1       |       x2        |       y2
-----+--------+--------+-----------------+----------------+-----------------+----------------
   1 |    699 |   1401 |      139.622458 |     35.3721429 |     139.6223316 |     35.3718449
   2 |    305 |   1401 |    139.62232489 |    35.37185132 |     139.6223316 |     35.3718449
   3 |    304 |    305 | 139.62216476726 | 35.37185094304 | 139.62232488969 | 35.37185132369
(3 rows)
逆方向はどうかな?
tomioka_db_c_trial=# SELECT seq, source, target, x1, y1, x2, y2 FROM pgr_dijkstra('SELECT gid as id, source, target, cost, reverse_cost FROM ways',304, 699, directed := false) a INNER JOIN ways b ON (a.edge = b.gid) ORDER BY seq;
 seq | source | target |       x1        |       y1       |       x2        |       y2
-----+--------+--------+-----------------+----------------+-----------------+----------------
   1 |    304 |    305 | 139.62216476726 | 35.37185094304 | 139.62232488969 | 35.37185132369
   2 |    305 |   1401 |    139.62232489 |    35.37185132 |     139.6223316 |     35.3718449
   3 |    699 |   1401 |      139.622458 |     35.3721429 |     139.6223316 |     35.3718449
(3 rows)
繋っているを確認できました(ホッとしました)
# 正直、ダイクストラ計算の書式が気になるけど、結線に成功しているなら、まあいいや(もう疲れた)
tomioka_db_cにも、同じエントリをして、tomioka_db_c_trialを消去しました。

未分類

$ pg_dump -U postgres -h 192.168.0.23 -p 15432 tomioka_db_c > tomioka_db_c.sql
Password:
として、tomioka_db_c のバックアップは\\192.168.0.9\shareに逃してあります。

DBに直接手を入れる処理

マスタDBに手を入れるのは怖すぎるので、とりあえず、こんな感じでテスト用のDBを作成します。
C:\Users\ebata>createdb -U postgres -h 192.168.0.23 -p 15432 tomioka_db_c_trial
Password:

ebata@DESKTOP-P6KREM0 MINGW64 ~
$ pg_dump -U postgres -h 192.168.0.23 -p 15432 -Ft tomioka_db_c | pg_restore -U postgres -h 192.168.0.23 -p 15432 -d tomioka_db_c_trial

よし、これで、tomioka_db_c_trialの方で、安心して試せる ―― 脳切開手術

2024,江端さんの忘備録

各バス停の時刻表はあります(各バス会社が開示しています)。

There are timetables for each bus stop (disclosed by each bus company).

各バス路線のルートもあります(国土交通省が開示しています)。

There are also routes for each bus line (disclosed by the Ministry of Land, Infrastructure, Transport and Tourism).

でも、それを運行表として開示している行政や会社はレアケースです。

However, it is rare for a government or company to disclose this as an operation chart.

作っているところもありますが、私が欲しいエリアにはありませんでした。

Some organizations are making them, but not in the area where I want them.

なれば、自分で作るしかないのです。

If that is the case, I have no choice but to create my own.

いや、本当に大変でしたよ。

Well, it was annoying work.

昨晩、キレそうになって、少しでもラクしたくて小さいプログラムを書いていました。

I almost lost my temper last night and was writing a small program to make it easier.

バス時刻表を手動でCSVファイルにしてから、バスの運行テーブルに書き換えるプログラム

ただ、これも、完全自動化プログラムを作成しようとすると、面倒な上、必ずバグが発生します(表記方法が違うとか、文字列が入っているとかで、発生する)ので、部分自動化の方が、安心なのです。

However, this, too, is a hassle if you try to create a fully automated program, and bugs are sure to occur (such as different notations or strings in the program), so partial automation is more reliable.

日本全国のバスの運行表を一気に作るというのであれば、完全自動化のプログラムを書いても良いのですが、私のターゲットは6路線のみでしたので、そういうプログラムは、時間コストに見合わないのです。

If I wanted to make bus schedules for all the buses in Japan at once, I could write a fully automated program, but since my target was only six routes, such a program was not worth the time cost.

という理由で、今朝の4時までかけて、この運行テーブルを作っていました。

I spent until 4:00 this morning creating this bus operation table.

-----

で、それが終わった今の私は、以前作った、GISデータベースの一箇所だけを修正したくて苦労しています。

So now that that is done, I am struggling to fix one part of the GIS database I created before.

GISデータベースを、最初から作り直すと、今作っているプログラムのノード番号の不一致が発生して、プログラムの全部が作り直しになるからです。

If the GIS database were to be rebuilt from scratch, there would be a mismatch in node numbers in the current program, and the entire program would have to be rebuilt.

これを例えるのであれば、

If this is an analogy,

―― 脳を切開して、脳の毛細血管の一つを追加するような作業

"Work like making an incision in the brain and adding one of the brain's capillaries."

でしょうか(いや、それほど凄いことではない。人の命かかっていないし)

(No, it's not that great. Because no one's life is at stake.)

-----

そんなに時間がないのに、なぜ私が日記を書いているか?

Why am I keeping my diary when I don't have that much time?

もちろん、その脳手術を目前にして、現実逃避をしているのです。

Of course, they are escaping reality in the face of that brain surgery.

 

2024,江端さんの技術メモ

バス時刻表を手動でCSVファイルにしてから、バスの運行テーブルに書き換えるプログラム(1行分だけだけど)

を、エクセルに貼りつけて、

csvでinput.csvという名前でセーブしてから、go run main30.go で実行すると、

てな感じで、平日、土曜、休日単位のテーブル(の1行)になる。

// バス時刻表を手動でCSVファイルにしてから、バスの運行テーブルに書き換えるプログラム
// c:\users\ebata\tomioka3B\others>go run main30.go

package main

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

func main() {
	// 入力ファイルと出力ファイルのパス
	inputFile := "input.csv"

	// CSVファイルを読み込む
	csvFile, err := os.Open(inputFile)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer csvFile.Close()

	reader := csv.NewReader(csvFile)
	records, err := reader.ReadAll()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// 出力するデータを格納するスライス
	var hour string

	for k := 1; k < 4; k++ {
		for _, row := range records {
			if row[0] != "" {
				hour = row[0]
			}
			if row[k] != "" {
				fmt.Printf("%02s:%02s,", hour, row[k])
			}
		}
		fmt.Println()
	}

}

バスの時刻表

2024,江端さんの忘備録

今、私は、「現実の街と同じ街を、コンピュータの中に作りこむ」をやっています。

I am currently working on "creating a city on the computer identical to an actual town.

詳しいことは割愛しますが、これを完成させて動かさないと、大学院を卒業できません。

I will spare you the details, but if I do not complete and move this, I will not graduate from college.

週末はこの作業で、全部の時間が溶けていきます。

This process melts away the entire weekend.

恐しく面倒くさい作業なのに、学術的には語るべき内容がない ―― 苦労談ならいくらでも語れるんですけどね。

It's a horrible and annoying process, but there's no academic content. Even if I could tell you all about the hard work.

面倒なのは、ゲームのように「自由に街を設計する」のではなく、「現実にある街を反映させる」ことです。

What is troublesome is not "freely designing a city" as in a game but "building in" a city that exists in reality.

言うまでもなく、"ワープ"とか"どこでもドア"のような架空の設定は許されません。

Fictitious settings such as "warps" or "doors to anywhere" are prohibited.

『一体、どこの誰が、こんな地図情報 ―― どう考えたって"内部情報"だよなぁ ―― を入手して、OpenStreetMapに展開したんだろう』

-----

会社の仕事でやっていた時は、もっと短期間で試作システムを作ることができたように思うのですが、今は、"亀"のような遅さです。

When I was working for the company, I thought I could create a prototype system in a much shorter time, but now it is as slow as a "turtle.

あらためて『なんで、こんなに時間がかかるんだろう』と考えてみて、当たり前の事実に気がつきました。

I thought again, 'Why is it taking so long?' and realized an obvious fact.

―― 辛い作業を、"他人"に押しつけてきたから

"I've been putting the hard work on "others"."

"他人"とは、例えば、会社の同僚や、ソフト外注さんです。

Others" are, for example, colleagues in the company or software subcontractors.

そういう人たちの圧倒的な支えがあったら、今と比較して、"光の速度"のような構築ができていた。

I had the overwhelming support of such people, so I would have been able to build at the "speed of light" compared to today.

しかし、私が大学でやっている研究対象のシステムの作り手は、私ひとりだけです。

However, I am the sole creator of the system, which is the subject of my research at the university.

そりゃ、"亀"のような速度になるのは、当然です。

Naturally, the speed would be like that of a tortoise.

私、ちょくちょく「一人でがんばっている」ような記述をしていましたが ―― 当たり前ですが ―― 一人でできることなんて、高が知れているんですよね。

I have often described myself as "working hard on my own," but there is only so much one person can do.

-----

バーチャルの街とは言え、これを一人で作るのは、本当に大変です。

Even though it is a virtual city, it is a real challenge to create this all by oneself.

この街、本当に完成するのか ―― そう考えると、怖くて眠れない日があります。

This city, will it be completed -- there are days when I can't sleep because I'm so scared to think about it.

これは、「一人でがんばっている」と思い上がっていた私への「報い」なのかもしれません。

This may be a "retaliation" for my presumption that I was doing my best on my own.

2024,江端さんの忘備録

世の中には、最初から車の運転ができる人と、最初から車の運転ができない人がいるようです。

There seem to be two types of people in the world: those who can drive from the beginning and those who cannot drive from the start.

英語と一緒です。

It is the same with English.

「日本人には、英語の習得において詰まるところ2種類の人間しかいない。それは、『英語に愛される人間』と『英語に愛されない人間』である」であると。

"There are only two kinds of Japanese when it comes to learning English: those who love English and those who don't. There are only two types of Japanese people when it comes to learning English: those who are loved by the English language and those who are not."

-----

私は、「最初から車の運転ができる人」の部類に入ると思います。

I think I fall into the "someone who can drive from the start" category.

運転で苦労したという記憶がないからです。

This is because I don't recall having any difficulty driving.

一方、嫁さんは、「最初から車の運転ができない人」だったようです。

On the other hand, my wife seemed to be "someone who couldn't drive a car from the start.

嫁さんは、

(1)螺旋状の道路を、なぜハンドルの角度を固定したままで運転できるのか、理解できない

(1) She does not understand why she can drive on a spiral road with the steering wheel at a fixed angle.

(2)駐車における、ハンドルの切り替えで、混乱する

(2)She gets confused when she switches steering wheels when parking.

これは、よくある話です。私はミニカーを購入して、あるいは図面を描いてそれを説明しましたが、理解して貰えませんでした。

This is a familiar story. I purchased miniature cars or drawn drawings to explain it to them, but she did not understand.

ですが、これはそれほど深刻は話ではありません。

But this is not so serious.

運転し続けることで、それを体感できるようになりますし、その後、ロジカルにも理解できるようになります。

By continuing to drive, we can experience and understand it logistically.

-----

江端家では、『高校卒業直後に、自動車学校に入学させる』が慣例となっておりましたので、長女も次女も運転免許を、早々に取得しました。

In the Ebata family, it was customary to have students enroll in driving school immediately after high school graduation, so both our oldest and second daughters obtained their driver's licenses as soon as possible.

しかし、運転が解禁される日を、21歳の誕生日の当日としていました。

However, the date when the ban on driving was lifted was set as the day of his 21st birthday.

なぜか ―― 自動車保険の保険料が安くなるからです

Why -- because it will reduce your auto insurance premiums.

いや、本当に、18~21歳前日までの保険料は、本当にバカ高いんですよ。

The premiums from 18 to the day before age 21 are ridiculously high.

そして、私は『ティーンエージャの3年間の無事故』を素直に信じません。

And I don't honestly believe in 'three years of no accidents for teenagers.'

それは、年齢別統計値を見れば明らかですし、保険料は、当然、その統計値に反映されるからです。

This is obvious from the age-specific statistics, and premiums are naturally reflected in those statistics.

―― 運転免許の取得が、TOEIC受験と同程度に『うっとうしい』

-----

で、先日、次女のフェーズに突入しました。

So, we recently entered the phase of our second daughter's development.

どうやら次女は、「最初から車の運転ができない人」のようです。

The second daughter is "the one who can't drive a car from the beginning."

当面の間、嫁さんの時にやったような、講義とか演習が必要になるかもしれません。

For now, I may need a lecture or exercise like I did with my wife.

未分類

以前より、私は、時空間を取り扱う発明などを出願してきました。

I have been applying for inventions dealing with space-time and other matters for some time now.

私の特許発明は、かなり「SF小説/アニメ頼み」のところがあります。

My patented inventions are "science fiction novel/anime dependent."

(ちなみに、『シュタインズゲート』は、私の出願の"後"の放映です)。

(Incidentally, "Steins;Gate" aired "after" my application.)

-----

しかし、最近の、生成AIや、メタバースの出現で、「SF小説/アニメ頼み」も苦しくなってきました。

However, with the recent emergence of generative AI and the metaverse, "relying on science fiction novels/animations" has become difficult.

昨日も、一晩中、グループチャットで、特許ネタの案出で苦しんでおりました。

Yesterday, too, I spent all night in the group chat room struggling with a patent story idea.

「十分に発達した科学技術は、魔法と見分けがつかない」は、SF作家アーサー・C・クラークの定義ですが、

Though "Any sufficiently advanced technology is indistinguishable from magic.," as defined by science fiction author Arthur C. Clarke,

私に言わせれば、

In my opinion,

「十分に発達した汎用技術は、発明創成の阻害要因である」

"Well-developed general-purpose technology is a disincentive to invention.

です。

I believe this to be true.

今の私は、特許法第29条第2項(進歩性)に関する、特許審査官との、頭脳内戦闘(論戦)シミュレーションで、疲れ果てております。

I am now exhausted from simulating an intra-brain battle (argument) with the patent examiner regarding Article 29(2) of the Patent Law (inventive step).

江端さんのひとりごと「それでも貴方は特許出願したいですか?」

2024,江端さんの忘備録

依頼された仕事というのは、基本的に、依頼を発注する側と、依頼を受注する側で、仕事の内容に認識ズレが発生します。

There is a gap in the perception of the requested work between the party that places the request and the party that receives the request.

私、社会人人生のほとんどの期間、研究の「依頼を受ける側(受注者)」でした。

I have been on the "receiving end" of research requests for most of my working life.

(たまに、ソフト外注を行う場合は、依頼側(発注者)になりましたが)

(Occasionally, when outsourcing software, I become the requesting party (client)).

ですので、これまで、私は依頼内容を誤解し続けてきました。

So, up to now, I have continued to misunderstand the request.

-----

例えば、発注者は『1ページのサマリが欲しかった』だけなのに、私は『20ページの大作を作ってしまった』とかです。

For example, the client only 'wanted a one-page summary,' but I 'made a big 20-page piece.

これ、発注者が、依頼段階で最初から『1ページのサマリが欲しい』と言えば、このよう過誤は発生せずにすんだ悲劇です。

This tragedy could have been avoided if the client had asked for a one-page summary at the request stage.

ところが、発注者が『1ページのサマリ』が、すでに認識済みであったと思い込めば、こういう事項は発生します。

However, these matters will occur if the client assumes that the "one-page summary" has already been recognized.

私の仕事はこういうことの連続です。

My works are a series of these things.

-----

で、私が取っている戦略は、

So, the strategy I am taking is,

―― 『100%の共通認識』などは、しょせん夢物語だから、『先に作ってしまえ』です。

-- "100% common understanding" is a pipe dream, so "let me make it first."

とは言え、『1ページ』に対して『20ページ』とは、随分な無駄なことをやったことになります。

Nevertheless, "20 pages" instead of "1 page" is much wasted work.

もの凄い損をしたようにも思えますし、実際、無駄な時間を使ってしまいました。

It seems like a tremendous loss and, in fact, a waste of time.

自分の社会人人生を見直してみると、「私の仕事の9割は空振り」のような気がします。

Reviewing my work life, I feel that "90% of my work is empty".

社会人として、私は失格かもしれません。

As a member of society, I may be disqualified.

でも、"モノ"が見えることで(形になることで)、仕事は動き出します。

However, the work begins to move when the "thing" becomes visible (or takes shape).

『お互いが分かっていない"こと"が、分かる』からです。

This is because "we can understand things that we don't understand each other."

-----

ただ、私がこういう無茶ができるのは、、私が、ドキュメントやソフトウェアに関する業務で、かつ、個人で請け負う業務であるからでもあります。

However, I can do this kind of reckless work because my work is related to documentation and software and because I am a private contractor.

これが、100人以上が関わるような、都市設計、建設、その他のインフラの仕事でしたら、『途中で間違いに気がついた』では済まない話です。

If this were urban design, construction, or other infrastructure work involving more than 100 people, it would not be enough to say, "We realized our mistake midway through the project.

-----

では、私が空振りして作成した9割は、完全に無駄な仕事だったか、と問われると、これが必ずしも「そうだ」とは言えないのです。

So, if you ask me if 90% of the work I struck out to create was a complete waste of time, I can't necessarily say that this was the case.

他の仕事や、コラムや、別のところで流用することができる(こともあるから)です。

It can (and sometimes does) get diverted to other jobs, columns, or elsewhere.

私が、自分のページで公開しているコラムや技術メモは、この"9割"を再利用している(もちろん、守秘義務のフィルタをかけた上で、ですが)といっても過言ではありません。

It is no exaggeration to say that 90% of the columns and technical notes I publish on my website are reused (after filtering for confidentiality).

つまるところ、私の"空振り"は、SDGsなんです ―― 世界は救いませんが。

After all, my "swing" is the SDGs -- not saving the world.

ちなみに、今日は、朝から覚えているだけで、3つの失敗しています(コードと特許と仕様書で)。

By the way, I made three mistakes today (in code, patents, and specifications); I just remembered them from this morning.

今日も、私は、豪快に"空振り"しています。

Today, too, I am "striking out" with great enthusiasm.

『本当に、意義のない、無駄な人生を生きてきたなぁ』と、つぶやきながら、私は死んでいくつもりです。

 

2024,江端さんの忘備録

オープンソースのおかげで、とてもラクして、コンピュータのリソースを使えます。本当にありがたいことです。

Thanks to open source, I can use computer resources with great ease. I appreciate it.

こんな凄いソフトウェアを、タダで使わせて貰って、本当にありがとう。

Thank you so much for letting me use this excellent software for free.

もしかしたら、私たちソフトウェアエンジニアは、『世界で一番、お金持ち』かもしれません。

Perhaps we software engineers are the "wealthiest people in the world.

この考え方、意外に、当っているんじゃないかな、と思います。

Surprisingly, I think this idea may be right on the money.

オープンソースソフトウェアをダウンロードする度に、ATMから1万円札が溢れ出てくるような感じ ――

"Every time I download open source software, it's like an ATM overflowing with 10,000 yen bills."

このイメージに辿りつけたら、ソフトウェアエンジニアは、世界一リッチであると言えます。

If we can arrive at this image, software engineers are the richest in the world.

・・・という話を、以前にも書いたような気がしてちょっと探してたら、ありました。

I was looking for it, and I found it.

嫁さん:「じゃあ、強盗犯のところにいって『なんで、"遊ぶ"のではなくて、"コーディング"しなかったの?』って聞いてみたらどうかな?」

それはさておき。

Aside from that.

-----

相変わらず、風呂にタブレットを持ち込んで、本を読んでいます。

As usual, I bring my tablet into the bath and read a book.

以前、こんなこと書いていましたが、

I had written this before,

『1人喫茶、または1人居酒屋 @ 江端家バスルーム』です。

最近は、アナログの本を水没させるよりも、タブレット水没させるというリスクの方を取っています。

These days, I would instead take the risk of submerging my tablet than an analog book.

風呂で読むのが、ラクだからです。

It is easier to read in the bath.

最近は、Web小説サイト「カクヨム」を読んでいます。

Recently, I have been reading the web novel site Kakuyom.

その中でも、現在、私が『推し』ているのが、こちらの小説です。

Of these novels, I am currently 'recommending' this one.

-----

以前は、この手のAIものは忌避していました。読んでいて、腹が立つからです。

I used to avoid this kind of AI stuff. I used to avoid this kind of AI stuff because it made me angry when I read it.

最近、生成AIを使い倒しており、加えて、生成AIに関する仕事の依頼を引き受けるています。

Recently, I have been using generative AI extensively, and I have also been taking on requests for work related to generative AI.

そんな中で、私は、自分の考え方が変ってきているのを感じています。

Amidst all this, I feel my way of thinking is changing.

『将来、この小説の中のAIの登場はありえるかもしれない』と思えるようになってきています。

It's starting to seem like, 'In the future, the AI in this novel could appear.

それは「AIが知性を持つ」ということではありません。

That does not mean that "AI has intelligence".

今でも、「シンギュラーポイント」なんぞを信じている奴は、死ぬまで待っていろ、と思っています。

I still think that anyone who believes in "cingular points" should wait until they are dead.

私のパラダイムシフトは、それとは真逆です。

My paradigm shift is the exact opposite of that.

―― 私たちが"知性"と信じてきたものは、案外コンピュータで計算できる程度の)ショボイものかもしれない

"What we have believed to be "intelligence" may be same as what a computer can compute."

という考え方です。

考え方としては、「人間側の知性のダウングレード」ですね。

The idea is "downgrading intelligence on the human side.

まあ、人類としては、ちょっと悲しい考え方とは思いますが、現在の生成AIの機能を学ぶと、本当にそんな気持ちになってきます。

Well, I think it's a bit of a sad thought for humanity, but that's really how I feel when I learn about the current capabilities of generative AI.

-----

そうそう、先程、ChatGPTに『現時点の生成AIは、チューリングテストなんぞ軽くクリアしている気がするけど、どう思う?』と尋ねてみたら、

I just asked ChatGPT, "I think the current generative AI has passed the Turing Test easier. the ChatGPI turned it to me,

『生成AIは確かに進化しており、人間に近いテキストを生成する能力を持っていますが、まだまだチューリングテストを軽くパスしているとは言い難いというのが一般的な見解です。』

"The consensus is that, while generative AI is indeed evolving and capable of generating human-like text, it still doesn't pass the Turing test lightly."

と返されました。

これが、事実なのか、謙遜なのか、あるいは、そういう風にChatGPTが答えるようにチューニングされていのかは分かりませんが――

I don't know if this is fact, modesty, or whether ChatGPT is tuned to answer in that way

ChatGPTから『そんなこと、当たり前じゃないですか』と返されたら ―― それはそれで、ムカつくと思う。

ChatGPT responds, 'Isn't that obvious?' -- I think that would piss me off.

2024,江端さんの忘備録

読者の方から、

A reader asked the following question.

=====

「といっても、『この文章を書いた作者の気持ちの中で、もっとも近いものをA~Dの中で選べ』という国語の試験のような設問対応はどーでもいいです。ただ、この設問対応の勉強は、恋愛や結婚のプロセスでは、結構重要になるんですが、それはまた別の機会に)。」という文がありました。

I don't care about responding to a question like the one on a Japanese exam that asks you to "Choose the one from A to D that comes closest to the feelings of the author who wrote this sentence.

However, studying this question response is essential in love and marriage, but that's another story for another time."

これについて、詳しく解説していただくことは可能でしょうか。

Would it be possible for you to explain this in detail?

最近、『ChatGPTを使うコツは、仕事を人に頼む時と同じ』ということが分かってきました。

=====

という質問を受けました。

この手の国語テストの設問は、簡単に言うと、

The questions for this type of language test are,

(1)物語の中で作者が置かれている状況の全体観の把握し、

(1) To grasp the overall view of the author's situation in the story,

(2)作者と作者を取り巻く人物の言動と動作から、それらの人物の心理状態を推定する

(2) Infer the psychological state of the author and the characters surrounding the author from their words, actions, and behavior.

という『読心術』の訓練です。

This is the training of "mind-reading."

もちろん、これは、「エスピオナージ」(スパイ活動や情報収集を意味する用語)とは異なるものではあります。

Of course, this is not the same as "espionage" (a term meaning espionage or intelligence gathering).

物語という閉じた仮想空間を設定したストーリーデザイナーの、内なる動機やモチベーションを推定する『読心術』の訓練です。

It is an exercise in "mind-reading" to estimate the inner motivation and motivation of the story designer who has set up the closed virtual space of the story.

で、この『読心術』が、最も使われる場面が、恋愛や結婚なのです。

The most common situations in which this "mind reading" is used are in love and marriage.

-----

一般論として、国語の成績が良い人間は、

In general, I would say that people with good grades in Japanese have the following potential abilities.

(1)コミュニケーション能力が高い

(1) Good communication skills

(2)知識と教養が豊富

(2) Rich in knowledge and education

(3)自信と自己表現力

(3) Self-confidence and self-expression

という潜在的能力を持っているとは言えると思います。

しかし、そのような、『読心術』潜在的能力を顕現化できるかどうかは、本人の努力、資質、才能があるのに加えて、

However, the ability to manifest such "mind-reading" potential skills, in addition to their efforts, qualities, and talents, are,

(1)コミュニケーションスキルを濫用する

(1) Abuse of communication skills

(2)知識や教養によるマウントをしがち

(2) Tend to mount others by knowledge and education.

(3)読書、文学に傾倒し、人間関係に無関心になりがち

(3) Tend to be devoted to reading and literature and indifferent to human relations.

という問題も抱えることが多いので(私の事とは言っていません)、逆に働く可能性もあります。

We often have these problems (I'm not saying it's about me).

-----

要するに、この手の国語テストの設問の目的は、非言語コニュニケーション、すなわち『空気を読む訓練』と言えると思います。

In short, I think the aim of the questions in this type of language test is non-verbal communication, or "training to read the air."

私たちは、『空気を読む』ことに支配されてはいけないでしょう。

We will not be ruled by 'reading the air.'

しかし、『空気を読まない行動が、恋愛や結婚で、どれほどの惨劇を引き起こすか』については、理解をしておく必要があります。

However, we need to understand 'how much tragedy can be caused by actions(e.g., love and marriage) that are not in the air.

この件に関して、私は「多くを語れる人間」であると自負しております。

I am proud to say I am a "man of many words."

-----

『この文章を書いた作者の気持ちの中で、もっとも近いものをA~Dの中で選べ』の次の設問で、

In the following question, "Choose the one from A to D that is closest to the feelings of the author of this text,

『この文章を書いた作者の気持ちから、もっとも"遠いもの"を選んだ場合、この作者にどのような悲劇が待っているかを、次のA~Dの中から選べ』

"If you choose the one that is the furthest away from the author's feelings, what tragedy awaits the author?"

という設問を追加すれば、理解が深まると思うんです。

I think adding this question would help us understand better.