2021/09,江端さんの忘備録

With hearing the following,

ネットワークスペシャリストだの、

Network specialist.

データベーススペシャリストだの、

Database specialists.

組み込み系エンジニアだの、

Embedded systems engineer.

クラウドエンジニアだの、

Cloud engineer.

AIエンジニアだの、

AI engineer.

IoTエンジニアだの、

IoT engineer.

AWSエンジニアだの、

AWS engineer.

仮想化エンジニアだの、

Virtualization engineers.

―― うるせい!

"Shut up!"

と思っています。

I think.

「やらなければならない」ことなら、「やらなければならない」のが、エンジニアです。

"If it has to be done, it has to be done". It is an engineer.

どんな技術だって、どこからでも、膨大な資料を(自費で)購入して、Webを読み倒して、誰にでも(嫌なヤツにでも)頭を下げて、そんでもって、何度だってゼロから始める ―― それがエンジニアという職業です。

No matter what the technology, start from anywhere, buy tons of materials (at my own expense), read the Web, bow down to everyone (even the jerks), and then start from scratch again and again -- that's what being an engineer is all about.

それは、時代と社会と技術とからなる多次元の空間の中を、可能な限りつき進み続け、『ここが終わり』というものが『ない』世界です。

It is a world in which there is no 'end', in which I keep moving forward as far as possible in a multi-dimensional space consisting of time, society, and technology.

今まで、そうしてきましたし、これからも、そうしていくのだろうと思っています。

I have done so until now, and I believe I will continue to do so in the future.

-----

ちなみに、今、私の会社では、『デジタル人材認定制度』なる制度登録が始まっているようです。

Incidentally, my company is now starting the system called the "Digital Human Resources Certification System".

じっくり観察させて頂くつもりです。

I'm going to observe my co-workers carefully.

2021/09,江端さんの技術メモ

pandocを使ってMarkdownをepubにする方法と場所

の続きです。

ちなみに、pandocとは、こういうことができるツールです(興味のある人は、ググってインストールして下さい)。

PandocでMarkdownをHTML形式やらWord形式に変換する

それはさておき。

githubの最初のページに出てくるREADME.mdのフォーマットって、かっこいいですよね。

その上、Markdown言語で書くので、とっても簡単です。

今まで、Latexとか、htmlの記述で苦労してきたのがバカみたいです(まあ、技術系の記述だから、という理由もあると思いますが)

だから、このgithubのイメージをそのままにして、書籍化(epub形式)できないかな、と思っていたら、スタイルシートを変えるだけで行けました

"github.css"で検索したら、色々出てくるようですが、私は以下のファイルを、"github.css"という名前で保存して使わせて貰いました。

body {
  font-family: Helvetica, arial, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: white;
  padding: 30px; }

body > *:first-child {
  margin-top: 0 !important; }
body > *:last-child {
  margin-bottom: 0 !important; }

a {
  color: #4183C4; }
a.absent {
  color: #cc0000; }
a.anchor {
  display: block;
  padding-left: 30px;
  margin-left: -30px;
  cursor: pointer;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0; }

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
  cursor: text;
  position: relative; }

h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
  background: url("../../images/modules/styleguide/para.png") no-repeat 10px center;
  text-decoration: none; }

h1 tt, h1 code {
  font-size: inherit; }

h2 tt, h2 code {
  font-size: inherit; }

h3 tt, h3 code {
  font-size: inherit; }

h4 tt, h4 code {
  font-size: inherit; }

h5 tt, h5 code {
  font-size: inherit; }

h6 tt, h6 code {
  font-size: inherit; }

h1 {
  font-size: 28px;
  color: black; }

h2 {
  font-size: 24px;
  border-bottom: 1px solid #cccccc;
  color: black; }

h3 {
  font-size: 18px; }

h4 {
  font-size: 16px; }

h5 {
  font-size: 14px; }

h6 {
  color: #777777;
  font-size: 14px; }

p, blockquote, ul, ol, dl, li, table, pre {
  margin: 15px 0; }

hr {
  background: transparent url("../../images/modules/pulls/dirty-shade.png") repeat-x 0 0;
  border: 0 none;
  color: #cccccc;
  height: 4px;
  padding: 0; }

body > h2:first-child {
  margin-top: 0;
  padding-top: 0; }
body > h1:first-child {
  margin-top: 0;
  padding-top: 0; }
  body > h1:first-child + h2 {
    margin-top: 0;
    padding-top: 0; }
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
  margin-top: 0;
  padding-top: 0; }

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0; }

h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
  margin-top: 0; }

li p.first {
  display: inline-block; }

ul, ol {
  padding-left: 30px; }

ul :first-child, ol :first-child {
  margin-top: 0; }

ul :last-child, ol :last-child {
  margin-bottom: 0; }

dl {
  padding: 0; }
  dl dt {
    font-size: 14px;
    font-weight: bold;
    font-style: italic;
    padding: 0;
    margin: 15px 0 5px; }
    dl dt:first-child {
      padding: 0; }
    dl dt > :first-child {
      margin-top: 0; }
    dl dt > :last-child {
      margin-bottom: 0; }
  dl dd {
    margin: 0 0 15px;
    padding: 0 15px; }
    dl dd > :first-child {
      margin-top: 0; }
    dl dd > :last-child {
      margin-bottom: 0; }

blockquote {
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

table {
  padding: 0; }
  table tr {
    border-top: 1px solid #cccccc;
    background-color: white;
    margin: 0;
    padding: 0; }
    table tr:nth-child(2n) {
      background-color: #f8f8f8; }
    table tr th {
      font-weight: bold;
      border: 1px solid #cccccc;
      text-align: left;
      margin: 0;
      padding: 6px 13px; }
    table tr td {
      border: 1px solid #cccccc;
      text-align: left;
      margin: 0;
      padding: 6px 13px; }
    table tr th :first-child, table tr td :first-child {
      margin-top: 0; }
    table tr th :last-child, table tr td :last-child {
      margin-bottom: 0; }

img {
  max-width: 100%; }

span.frame {
  display: block;
  overflow: hidden; }
  span.frame > span {
    border: 1px solid #dddddd;
    display: block;
    float: left;
    overflow: hidden;
    margin: 13px 0 0;
    padding: 7px;
    width: auto; }
  span.frame span img {
    display: block;
    float: left; }
  span.frame span span {
    clear: both;
    color: #333333;
    display: block;
    padding: 5px 0 0; }
span.align-center {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-center > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: center; }
  span.align-center span img {
    margin: 0 auto;
    text-align: center; }
span.align-right {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-right > span {
    display: block;
    overflow: hidden;
    margin: 13px 0 0;
    text-align: right; }
  span.align-right span img {
    margin: 0;
    text-align: right; }
span.float-left {
  display: block;
  margin-right: 13px;
  overflow: hidden;
  float: left; }
  span.float-left span {
    margin: 13px 0 0; }
span.float-right {
  display: block;
  margin-left: 13px;
  overflow: hidden;
  float: right; }
  span.float-right > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: right; }

code, tt {
  margin: 0 2px;
  padding: 0 5px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px; }

pre code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent; }

.highlight pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }

pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }
  pre code, pre tt {
    background-color: transparent;
    border: none; }

因みに、元のmdファイルは、自分のgithubから持ってきた、このファイルを、"README_1.md"という名前で保存しました。

 

# PruneMobileとは

複数の人間や自動車等の移動体のリアルタイムの位置情報を、地図上に表示する、
PruneCluster https://github.com/SINTEF-9012/PruneCluster
のアプリケーションです。

PruneMobileに対して、任意のタイミングで位置情報(JSON形式)を送り込むだけで、地図上にマーカーが表示されます。

## 使用環境

- golang(Go言語)のインストールされていれば良いです。私(江端智一)の環境では以下のようになっています。
```
$ PruneMobile\server>go version
$ go version go1.14 windows/amd64
```

- 実際に動かせば、コンパイラから、あれこれ言われますので、それに対応して下さい。基本的には、
```
$ go get github.com/gorilla/websocket
```
は必要になると思います。

## サンプルプログラムの環境

- Webブラウザで表示される地図は、東京都江東区の豊洲駅を中心にして作ってあります。
  - PruneMobile\server\serverX.go (Xは数字) の中にある、
```
var map = L.map("map", {
   attributionControl: false,
   zoomControl: false
}).setView(new L.LatLng(35.654543, 139.795534), 18);
```
の"35.654543, 139.795534"の座標を変更すれば、地図の中心位置が変わります。

- クライアントプログラムでは、豊洲駅を中心にランダムウォークさせています
  - PruneMobile\server\clientX.go (Xは数字)を起動すると、10秒間程、マーカーが移動して、その後消滅します。

- クライアントプログラム(clientX.go)は複数同時に起動させることができます。

## 現時点で確認している問題点で、いずれ直すもの

- ~~マーカーの消滅のタイミングが、同時になってしまう~~

- ~~Webブラウザの表示が、最初の1つめしか、正常に動作しない~~

- ローカルのjs(javascript)のローディングに失敗した為、江端のプライベートサーバ(kobore.net)からローディングしている。PruneMobile\server\serverX.goの以下を参照
```
	<script src="http://kobore.net/PruneCluster.js"></script>
	<link rel="stylesheet" href="http://kobore.net/examples.css"/>
```

# サンプルプログラムの動作方法

## Step 1 サーバの起動

適当なシェルを立ち上げて
```
$ cd PruneMobile\server
$ go run serverX.go (Xは数字)
```
とすると、「Windowsセキュリティの重要な警告(windows10の場合)」が出てくるので、「アクセスを許可する」ボタンを押下して下さい。

## Step 2 地図画面(マーカ表示画面)の起動
Chromoブラウザ(他のブラウザのことは知らん)から、
```
http://localhost:8080/
```
と入力して下さい。豊洲地区の地図が表示されます。

## Step 3 移動オブジェクト(マーカの対象)の起動
適当なシェルを立ち上げて
```
$ cd PruneMobile\client
$ go run clientX.go (Xは数字)
```
とすると、マーカが0.5秒単位でランダムに動きます。

## 動作の様子
![](./PruneMobile_demo.png)





# クライアントプログラムで使うI/F(データ形式)

## 前提

- サーバとwebsocketのコネクションを確立して下さい。方法は問いません。golangでの記述方法はclient/clientX.goを参考にして下さい。

- データ形式はJSONを用います。golangでの記載サンプルは以下の通りです。

```

// GetLoc GetLoc
type GetLoc struct {
	ID  int     `json:"id"`
	Lat float64 `json:"lat"`
	Lng float64 `json:"lng"`
	//Address string  `json:"address"`
}
```

## Step.1 マーカーの登録

IDを"0"にして、最初のマーカーの座標を入力したJSONを、サーバに送付して下さい。golangでの送信方法はは以下の通りです。
```
	gl := GetLoc{
		ID:  0,
		Lat: 35.653976,
		Lng: 139.796821,
	}

	err = c.WriteJSON(gl)
	if err != nil {
		log.Println("write:", err)
	}
```

返り値に入ってきたIDが、これからそのマーカで使うID番号となります。golangでの受信方法はは以下の通りです。

```
	gl2 := new(GetLoc)
	err = c.ReadJSON(gl2)
	log.Printf("after ID:%d", gl2.ID)
	log.Printf("after Lat:%f", gl2.Lat)
	log.Printf("after Lng:%f", gl2.Lng)
```

以後、このID番号(整数)を使用して下さい。この番号と異なる番号を使用した場合、動作は保証されません。

## Step.2 マーカーの移動

指定されたIDを使って、移動後の座標を送付して下さい。
```
	gl := GetLoc{
		ID:  5,         // IDが"5"の場合
		Lat: 35.653923,
		Lng: 139.796852,
	}

	err = c.WriteJSON(gl)
	if err != nil {
		log.Println("write:", err)
	}
```
返り値は、入力と同じJSONが戻ってきますが、必ず受信して下さい。
```
	gl2 := new(GetLoc)
	err = c.ReadJSON(gl2)
	log.Printf("after ID:%d", gl2.ID)
	log.Printf("after Lat:%f", gl2.Lat)
	log.Printf("after Lng:%f", gl2.Lng)
```

## Step.3 マーカーの抹消

指定されたIDを使って、地球上の緯度経度の数値で現わせない座標を入力して下さい。具体的に、latに90.0より大きな値、またはlngに180より大きな値を入力することで、マーカが消去されます。
```
	gl := GetLoc{
		ID:  5,         // IDが"5"の場合
		Lat: 999.9,
		Lng: 999.9,
	}

	err = c.WriteJSON(gl)
	if err != nil {
		log.Println("write:", err)
	}
```
返り値は、入力と同じJSONが戻ってきますが、必ず受信して下さい。
```
	gl2 := new(GetLoc)
	err = c.ReadJSON(gl2)
	log.Printf("after ID:%d", gl2.ID)
	log.Printf("after Lat:%f", gl2.Lat)
	log.Printf("after Lng:%f", gl2.Lng)
```

# Amazon Lightsail を使った、スマホの現在位置の表示方法

PruneMobileは、シミュレータ等で計算した位置情報を、ブラウザで表示することを目的としたものですが、これを、現実のスマホの位置の検知にも使えるようにしました(要するに「ココセコム」としても使える、ということです)

これを実現する為には、インターネット上に(クラウド)サーバを置かなければなりません。AWSのVPS(仮想専用サーバー)が思いつきますが、AWSのEC2は6運用が面倒な上に使用料が高価です。そこで「月額 500 円で使えるAWSクラウドのVPS」を使う方法について記載しておきます。

- Amazon Lightsail の立ち上げ方法については、https://wp.kobore.net/江端さんの技術メモ/post-1513/ を参考にして下さい。

- ここでは、"sea-anemone.tech"という架空のドメインを例として使っていますが、外部(例えば「お名前.com」)でドメインを得た場合は、その名前に置き換えて読んで下さい。


- 公開鍵の取得方法については、https://wp.kobore.net/江端さんの技術メモ/post-1550/ を参考にして下さい(ここに記載されている、"go_template/server_test"は、"PruneMobile\vps_server"と読み換えて下さい)


## Step 1 サーバの起動

Amazon Lightsailのシェルから適当なシェルを立ち上げて
```
$ cd PruneMobile\vps_server
$ go run serverXX.go (Xは数字)
```

と起動して下さい。

## Step 2 地図画面(マーカ表示画面)の起動
Chromoブラウザ(他のブラウザのことは知らん)から、
```
https://sea-anemone:8080/
```
と入力して下さい。現在は、東京のある地域が表示されますが、serverXX.go の中に記載れている、位置情報、35.60000, 139.60000 を片っぱしから、任意の位置(自宅の位置等)に変更することで、自宅付近での実証実験ができます。
自宅の情報は、GoogleMAPから取得できます。

## Step 3 移動オブジェクト(マーカの対象)の起動
スマホのブラウザから、
```
https://sea-anemone:8080/smartphone
```
として、[open]ボタンを押して下さい。スマホで位置測位が開始されます(この際、位置情報を提供して良いか、と聞きあれることがありますので、"OK"として下さい)。
[close]ボタンを押下すると地図画面からマーカが消えます。

## 現時点で確認している問題点で、いずれ直すもの

- ローカルのjs(javascript)のローディングに失敗した為、江端のプライベートサーバ(kobore.net)からローディングしている。PruneMobile\vps_server\serverXX.goの以下を参照
```
	<script src="http://kobore.net/PruneCluster.js"></script>
	<link rel="stylesheet" href="http://kobore.net/examples.css"/>
```
- 動作中にwebsocketが切断してしまった時(スマホの閉じる、別のブラウザ画面を立ち上げた時)、オブジェクトが放置されて、システム全体が動かなくなる

PruneMobile_demo.png は、同じディレクトリに放り込んでおきました。

でもって、

ebata@DESKTOP-P6KREM0 MINGW64 ~/eBook_sample_with_markdown_and_pandoc
$ pandoc -f markdown -t epub3 README_1.md title.txt -o book.epub --css github.css --toc --toc-depth=2 --epub-cover-image=cover.jpg

を実行して、chromoの拡張機能としてアドインしておいた、epubリーダを使って"book.epub"を表示したら、

こんな感じで表示されるようになりました。

これで、一応「mdファイルを作成して、epubファイルにするまでの方法」を、(とりあえず)確立できました。

それと、 md(Markdown)ファイルを編集するなら、Visual Studio Codeが便利そうです。

編集とビューが連動しているので、いちいちビューアーで確認する必要がありません。

以上

 

2021/09,江端さんの技術メモ

PDFを黒塗りしてから、保存できるサイト(↓をクリック)

2021/09,江端さんの技術メモ

pandocを使ってMarkdown(README_1.md)をepub(book.epub)にする方法と場所

ebata@DESKTOP-P6KREM0 MINGW64 ~/eBook_sample_with_markdown_and_pandoc
$ pandoc -f markdown -t epub3 README_1.md title.txt -o book.epub --css styleshee
t.css --toc --toc-depth=2 --epub-cover-image=cover.jpg

2021/09,江端さんの忘備録

私の家族は、私を除いて、全員「虫」に立ち向うことができません。

All of my family members, except for me, can't fight the "insect".

部屋の中に虫が入ってきただけで、大騒ぎになって、私を呼びつけます(酷い時には、会社に帰宅命令が来ます)

When a insect comes into the room, they will make a big fuss and call me (in the worst case, I will be ordered to go home to work).

ゴキブリなど出た日には、本当にその日はエラいことになります。

In case of cockroaches, the day will be a disaster.

-----

私は、これまで、虫の駆除(逃し他、殺し方)については、様々な方法を試してきました。

I have tried many different methods to get rid of (miss and otherwise kill) insects.

まあ、タイやインドの安宿では、イモリやヤモリや、てのひらサイズの蜘蛛が壁に張りついていましたが、夜には、普通に寝ていました。

Well, in cheap hotels in Thailand and India, newts, geckos, and palm-sized spiders were sticking to the walls, but at night, I slept normally.

危険であるとか、うっとうしいと思わない限りは、基本的には、無用な殺生は避けたいと思っています。本当です。

Basically, I want to avoid unnecessary killing anything unless I think it is dangerous or annoying. It is true.

しかし、嫁さんや娘たちは、私に『なんとかして』とだけ言います ―― 『殺害して』とは言いません。

But my wife and daughters only say to me, "Do something" -- not "Kill it".

-----

政府所属の暗殺チームも、多分、上司から『なんとかして』と、だけ、言われているんだろうなー、と、思っています。

The assassination team belonging to Japan government is probably just being told by their superiors to 'do something', I think.

命じられている仕事の困難度も、心理的負担も、ずいぶん違うことは分かっていますが ――

I know that the degree of difficulty and psychological burden of the work I am assigned to do is very different, but...

一方的に「同志」と思っています。

I unilaterally consider them to be "comrades".

2021/09,江端さんの忘備録

学生のころ、自治を謳う学生寮(学寮)に住んでいました。

When I was a student, I lived in a student dormitory (Gakuryo) that claimed to be self-governing.

先輩の一人が、部屋の中に、ホッケーのスティックを常備しているような学寮でした。

The dormitory was such that one of the seniors had a field hockey stick in his room at all times.

『部屋に踏み込まれた時に、武器が必要だから』と、普通に「内ゲバ」を警戒するような会話が、あまり奇異に感じられない ――

Conversations like, "I will need weapons in case someone steps into the room," and the usual warnings about "internal strife," don't seem too strange--

70年代の安保闘争の残滓を、しつこく残していた学寮でした。

It was a dormitory that persistently retained the residue of the security struggle of the 1970s.

『暴力』が、暴力装置(警察、自衛隊)の専権事項ではない、と考える時代があったんですよ(遠い目)。

There was a time when someone thought "violence" was not the exclusive domain of violent devices (police, self-defense forces) (with having a distant look).

まあ、こういうところでは、合理的思考(例:エンジニアリングアプローチ)を持つ者が排除されるのは、当然と言えます。

Well, it's not surprising that rational thinkers (e.g., engineering approach) are excluded in such places.

-----

先日、夜中の12時前に、自宅の呼び鈴が鳴りました。

The other day, just before midnight, the doorbell rang at my house.

こんな時間に我が家を訪問する人物に、私は、心当りはありません。

I have no idea who would be visiting my house at this hour.

私は、部屋にあった「肩叩き用の棒」を構えて、階下におりたところ、チェーンキーで自宅に入れなかった長女が、嫁さんに門扉を開けもらって、入ってきたところでした。

I went downstairs to my room with my SHOULDER TAPPING ROD at the ready. There, my senior daughter, who was unable to enter my house because of the chain key, had just come in after my wife opened the gate for her.

私は、『自室に、武器も装備していない自分の平和ボケ』に、一瞬、愕然としてしまいました。

I was momentarily taken aback by the fact that I was not equipped with a weapon in my room.

-----

江端:「自分の部屋に、武器を配備しなければ」

Ebata: "I have to deploy the weapons in my room."

嫁さん:「玄関の傘立に、じーじ(嫁さんの父親(没))のゴルフクラブを入れてあるよ」

Wife: "I put my father's golf clubs in the umbrella stand at the entrance."

江端:「それでは、自宅に踏み込まれた後では、侵入者を制圧できない」

Ebata: "Then we won't be able to subdue the intruders after they raid our home."

と、現在、木刀の購入を検討中です。

So, I'm currently considering purchasing a wooden sword.

また、武器として使用した場合、侵入者を殺害しかねないので、なかなかに、悩ましいですが ――

Also, if used as a weapon, it could kill the intruder, which is quite annoying.

実際に70年代では、過激派が内ゲバで使った、こういうもの(バール)の方が安いです。

In fact, in the 70's, these things (crowbars) were cheaper, used by militants in internal fights.

これなら、本来の用途でも使用できそうです。

It seems that this device can be used for its intended purpose.

2021/09,江端さんの忘備録

芝村裕吏さんの「マージナル・オペレーション」が面白いです。

"Marginal Operation" by Yuri Shibamura is interesting.

(興味のあるかたは、ググって下さい)

(If you are interested, please Google it.)

内容(設定や状況や登場人物)が面白いから、面白い、でいいと思います ―― 現実とファンタジーとちょっとだけ未来のテクノロジーがバランスよく登場してくるところも良いです。

I think it's interesting because the content (setting, situation, characters) is interesting -- the balance of reality, fantasy, and a bit of future technology is also good.

-----

『インフォメーションイルミネーター(情報統合端末)』というのは実現可能とは思うけど、敵軍の状態まで『見える化』するのは、無理があるよな、とか

I think the "Information Illuminator" is feasible, but I don't think it's feasible to visualize the status of the enemy forces.

1000人以上のオブジェクトを同時追跡するのは、現状の無線方式からして難しいし、タイムラグも無視できなうだろうなぁ、とか

Simultaneous tracking of more than 1000 objects would be difficult with the current wireless system, and the time lag would be negligible.

―― などと、「子どもの見守りシステム」を色々考えてきた研究員としては、近未来デバイスを考えることができる点も「楽しい」です。

As a researcher who has been thinking about various "child watchdog systems" in this way, I also "enjoy" the fact that I can think about near-future devices.

ちなみに、こちらには、『まずは、この日本を、年間平均で300人の子どもが犯罪で殺害されるような社会にすることが優先事項ですね』というギャクで、滑って、上司をどん引きさせた、という話があります。

Incidentally, there is a story here about a reseacher who slipped up and shocked his boss with a joke: "First of all, the priority is to make Japan a society where an average of 300 children a year are killed in crimes".

それはさておき。

That aside.

-----

モノを書いて読んで貰っている人間の一人としては、文章のスタイルが、とても勉強になります。

As a column writer, the style of writing in this book is very informative.

―― とにかく、読み易い

"Anyway, it's easy to read."

私、ラノベ(ライトノベル)というのが、どのようなものか良く分かっていないのですが ―― 次女とかにも、その定義を聞いてみたのですが、ピンときていません。

I don't really know what a "light novel" is -- I've asked my junior daughter and others to define it, but they don't have a clue -- but

ライトノベルが「読み易い本」と定義できるのであれば、『究極にして至高の本』と言って良いと思います。

If a light novel can be defined as "an easy-to-read book," then I think it's no problem to say that it's "ultimate book".

比して、私のコラムは、全体の7割が形容句と、業界用語(と、グラフと表)で埋まっているなぁと実感します。

In comparison, I feel that 70% of my column is filled with adjectives, industry terms (and graphs and tables).

-----

以下の比較は妥当ではない、と思いますが、

I don't think the following comparison is valid, however

高村薫さんのファンでもある私としては、「マージナル・オペレーション」は、「マークスの山」の20倍以上の速さで読めています。

As a fan of Kaoru Takamura's work, "Marginal Operations" is reading more than 20 times faster than "Marks' Mountain".

うん、本当に妥当ではない、と思う。

Yeah, it's not really appropriate, I guess.

ただ、「マージナル・オペレーション」を読むのは楽しいので、この本を読むのは、ウォーキングの時だけ、と決めています。

But, well, I enjoy reading Marginal Operations, so I've decided that I'll only read this book when I'm walking.

こうすることで、「ウォーキングが面倒だなあ」という気持ちを、「早くウォーキングにでかけたい」という気持ちに転換して、日常生活のルーティンに組み込んでいます。

In this way, I can change the feeling of "walking is too much trouble" to "I want to go out for a walk as soon as possible" and incorporate it into my daily routine.

2021/09,江端さんの忘備録

先程、本屋「江端さんの本屋さん」を開設しました。

I have just opened my bookstore, "Ebata-san's Bookstore".

こちらで、頂いた執筆のご依頼が、えらい方向転換して、思わぬところに着地してしまいました。

The writing request I received here took a very different direction and landed in an unexpected place.

まあ、これはこれで良かったと思っております。

Well, I think I got lucky with this one.

このような機会がなければ、「電子出版のやり方」を調べる機会も、試みる機会もなかったと思いますので。

If I hadn't had this opportunity, I wouldn't have had the chance to research and try "how to e-publish".

-----

正直言うと、私は、まだ「電子出版のやり方」を分かっているとは到底言えない段階です。

To be honest, I can hardly say that I know how to "do e-publishing" yet.

今回、私が、今回の電子書籍ダウンロードサイトを選んだ理由は、私が、過去に、そのサイトから購入した本(技術系の電子書籍)が多かったからです。

The reason why I chose this e-book download site is because I have purchased many books (technical e-books) from that site in the past.

しかも、ページ数や付録などのルールに縛られることなく、PDFをアップロードするだけという手軽さも気に入っています。

What's more, I liked the ease with which I could just upload the PDF without being bound by rules about page numbers and appendices, which I have no interest in.

そもそも、私、装丁とかにも、全く興味ありません ―― 本を買って読み込んでいる最中に、表紙を外して、無くしてしまうくらいですから。

To begin with, I am not interested in bookbinding at all. I even take off the cover and lose it while reading a book.

しかし、今回選んだ電子書籍ダウンロードサイトは、「表紙」の作成を指示してきました。ですので、過去に自作したイラストを流用して適当に作りました。

However, the e-book download site I chose this time instructed me to create a "cover". So, I appropriated an illustration I had made myself in the past and made it appropriately.

本当は、自分のホームページから電子出版できると良いのですが、以前、『決済系システムの使用料』を見て、ゲンナリしたので、こちらには手を出さないつもりです。

It would be nice to be able to publish electronically from my own website, but I was disappointed when I saw the "payment system fees" before, so I'm not going to bother with this.

また、私は、蔵書量を増やすことにも興味ありません ―― 家が狭くなるだけですから。

Also. I'm not interested in increasing the amount of books in my collection either -- it would only make my house smaller.

それでも、紙の本は、

Nevertheless, paper books are still superior to e-books in the following two ways.

(1)本棚を見るだけで、一瞬で、目的の書籍を見つけ出せる

(1) You can find the book you want in an instant, just by looking at the bookshelf.

(2)風呂場に水没させても、翌日には読書を再開させられる

(2) You can resume reading the next day even if you submerge it in the bathtub.

という2点だけは、相変わらず、電子書籍より優れているのです。

-----

この「江端さんの本屋さん」が、他の「本屋」と決定的に違うところは、

What makes Ebata's Bookstore different from other bookstores is that

―― 取り扱っている本が、私の、私による、私のための本

"Books by me, for me, by me"

という点です。

つまり、『どの組織(出版会社等)にも、忖度なしに好きなことを書ける』ということです。

In other words, 'I can write what I want without concern for any organization (publishing company, etc.).

未分類

江端 アイコン twitter pixiv

2021/09,江端さんの技術メモ

(↑をクリックすると店舗に移動します)

私(江端智一)は、一生懸命取り組んできたこと(プログラム開発、ツールの使い方、シミュレーション結果、データ解析)を、1ヶ月も経たない内に、キレイさっぱり忘れてしまいます。
忘れても困らないように、頻繁にメモを残していますが、「そのメモの内容」でも、以前の状況を再現できないことが多いです ―― そのメモを残した時の環境や設定条件を忘れてしまうからです。
『「これは、私以外の人が読んでも分かる内容のメモ」にまで丁寧に記載しなければならない』と思い、さらに詳細なメモを残すように心掛けてきたのですが、ある時、ふと気がつきました。
―― 『これって、他の人にも役に立つんじゃないの?』
-----
という訳で、『江端さんの本屋さん』では、「私(江端智一)の、私による、私のための本」を、お讓りしております。
あなたの、エンジニアの日々に、少しでも「手が抜けて」「ラクできる」ような情報がご提供できれば、嬉しいです。