2020/05,江端さんの技術メモ

下記のプログラムをコンパイルする

/*
		go build -gcflags "-N -l" main.go
*/
package main

import (
    "fmt"
    "database/sql"
    _ "github.com/lib/pq"
    "os"
)

// ----------------------------------------------------------------
func main() {
    fmt.Fprintln (os.Stderr,"*** 開始 ***")
    db, err := sql.Open("postgres", "user=scott dbname=city password=tiger123 sslmode=disable")
    defer db.Close()

    sql_str := "select id,name,population,date_mod from cities order by id"

    rows, err := db.Query(sql_str)
    if err != nil {
        fmt.Println(err)
        }
    defer rows.Close()

    for rows.Next() {
        var id string
        var name string 
        var population int
        var date_mod string 
        if err := rows.Scan(&id,&name,&population,&date_mod); err != nil {
            fmt.Println(err)
        }
        fmt.Printf ("%s\t%s\t%d\t%s\n",id, name,population,date_mod)
    }

    if err := rows.Err(); err != nil {
        fmt.Println(err)
        }

    fmt.Fprintln (os.Stderr,"*** 終了 ***")
}

で “github.com/lib/pq" がない、とエラーが出てくる。

C:\Users\ebata>go get github.com/lib/pq

で、すんなりインストール成功。で、コンパイルをしたら通ったので、とりあえずメモしておく。これからdockerでDBつくって動作を試す。

2020/05,江端さんの技術メモ

package main

import (
	"fmt"
	"strings"
)

func main() {
	c0 := make(chan string)  // makeってなんだ? →"配列"でも"共有メモリ"でもいいが、
	c1 := make(chan string)  // 江端理解では「トンネル」とか「パイプ」とか「Amazonのダンボール箱」 

	go sourceGopher(c0)      // "c0"とラベルの付いたダンボール箱を使うぜ
	go filterGopher(c0, c1)  // "c0","c1"とラベルの付いたダンボール箱を使うぜ 
	printGopher(c1)          // "c1"とラベルの付いたダンボール箱を使うぜ
}

func sourceGopher(downstream chan string) {
	for _, v := range []string{"hello world", "a bad apple", "goodbye all"} {
		downstream <- v   // "c0"のダンボール箱に、(1)"hello world",(2)"a bad apple", (3)"goodbye all"を投げ入れる
	}
	downstream <- ""   // "c0"のダンボール箱の底にクッション(プチプチ)を入れる
}

func filterGopher(upstream, downstream chan string) {
	for {
		item := <-upstream     // "c0"のダンボール箱からクッションを取り出す
		if item == "" {        // クッションだったら
			downstream <- ""   // "c1"のダンボール箱にクッションを入れる
			return             // ダンボール箱の蓋を閉める
		}
		if !strings.Contains(item, "bad") {   // "bad"という文字列が入っていない荷物だったら
			downstream <- item // "c1"のダンボール箱に荷物を入れる
		}
	}
}
func printGopher(upstream chan string) {
	for {
		v := <-upstream // "c1"のダンボール箱から荷物を出す
		if v == "" {    // "c1"の荷物がクッションだったら
			 return     // ダンボール箱を閉める
		}
		fmt.Println(v)  // 荷物を読み上げる
	}
}

2020/05,江端さんの技術メモ

良く忘れるので書いておく。

(1)Goは一度も使われない変数があると、全部エラーにしてしまう → 「せっかく買ったのに、どうして使わないの?」と言い続ける、うっとうしい母親みたいなもの

(2)返り値のある変数があるけど、別に返り値が必要でないときがある。
例えば、2つの返り値がある関数で、「2つもはいらんわ」という時に、こうなる

f := func(num1 int, num2 int)(int, int){
	return num1 + num2, num1 - num2
}
ret1, ret2 := f(8, 7)  // "a"が不使用のためエラー:a declared and not used
fmt.Println(ret2)

(3)でも、こうすれば、エラーにならない

ret1 はいらん → これを"_"と書く

_, ret2 := f(8, 7)  // エラーがでてこなくなる
fmt.Println(ret2)

2020/05,江端さんの技術メモ

// go build -gcflags "-N -l" main.go ← これで、golangのプログラムをgdbで動かすことができたぞ(マグレかもしれないけど)

package main

import (
    "fmt"
    "time"
)

func counting(c chan<- int) {
    for i := 0; i < 10; i++ {
        time.Sleep(2 * time.Second)
        c <- i
    }
    close(c)
}

func main() {
    msg := "Starting main"
    fmt.Println(msg)
    bus := make(chan int)
    msg = "starting a gofunc"
    go counting(bus)

    for count := range bus {
        fmt.Println("count:", count)
    }
}

2020/05,江端さんの技術メモ

PostgresSQLは使い慣れてくると手放せなくなります。もう、テーブルをプログラムの中に作るな面倒くさくてやっていられません。どんなに小さいテーブルでも、PostgreSQLにつくって、そのまま放置しておきます。CSVすら面倒くさい。

しかし、PostgreSQLは頻繁にバージョンアップするので、結構面倒くさい思いをします。

そこで、Dockerで作って、そのまま放置するという戦略を取ることにしました。理屈は分からないけど、取り敢えず、ネットの情報を使ってここまでやってみたところ、動いているっぽいです。

C:\Users\ebata> docker run –rm -d -p 15432:5432 -v postgres-tmp:/var/lib/postgresql/data -e POSTGRES_HOST_AUTH_METHOD=trust postgres:12-alpine

C:\Users\ebata>docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e373f69553b8 postgres:12-alpine “docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:15432->5432/tcp frosty_golick

C:\Users\ebata>docker container exec -it frosty_golick bash

bash-5.0# psql -U postgres
psql (12.3)
Type “help" for help.

postgres=#

2020/05,江端さんの忘備録

今回の、新型コロナ災禍によって、エラいことが起きている ―― と、ゾッとしました。

I feel that a great deal of trouble is happening because of this new type of coronal catastrophe.

芸人である、中田敦彦さんと、小島よしおさんが、YouTubeで提供されている教育コンテンツです。

Comedians, Atsuhiko Nakata and Yoshio Kojima, provide educational content on YouTube.

私、学生の頃、浪人していまして、予備校に1年通っていたのですが、その時、分かったことは、

When I was a student, I was a “ronin" and went to a prep school for a year. And what I knew then was,

―― 私の成績が悪いのは、「私の責任」ではなくて、「教師の教え方」が悪い

“The reason for my poor grades is not “my fault", but “teaching method"

という事実、というか、真実です。

That’s a fact, or rather, a truth.

—–

私、1セッション、90分間笑いっぱなしの「日本史」とか、90分間衝撃を受け続けた「物理」など、なんというか、

I had one session of “Japanese History" that kept me laughing for 90 minutes, “Physics" that kept me shocked for 90 minutes, and so on.

『頭の中に勝手に入り込んでくる知識』

“The knowledge that comes into your head on its own"

という、信じられないものを知って、唖然としました。

I was stunned to find out what I couldn’t believe.

この時、私は「眠くなる授業」は、「生徒(の頭)が悪い」のではく「教師(の教え方)が悪い」を確認しました。

At this time, I confirmed that the “sleepy class" is not “the student (head) is bad" but “the teacher (teaching method) is bad".

予備校では、3ヶ月に一回にマークシートによる、予備校生全員による講師のアンケートが実施され、「眠くなる授業」を提供する講師は、あっと言う間に消えていきました。

At the prep school, every three months, all prep students were asked to complete a mark-sheet survey of their instructors, and the instructors who offered “sleepy classes" disappeared in the blink of an eye.

—–

もちろん、教師側は、以下のようなことが言えると思います。

Of course, on the teacher side, I think it can be said that

(1)予備校生と現役生では、勉強に対する気合い(完璧な予習)が違う

(1) The enthusiasm for studying (perfect preparation) is different between prep school students and current students.

(2)予備校の講師は、受講生の成績だけに注力すれば足りるが、教師は、生徒の生活習慣、授業態度、PTA、学校イベント、モンスターペアレントに至るまで、「成績」以外の雑事で、激務である

(2) Teachers at prep schools only need to focus on the grades of their students, but teachers at schools are hard at work on miscellaneous matters other than “grades", such as students’ lifestyle, classroom attitude, PTA, school events, and monster parents.

(3)何より、学業への取り組みが真摯ではなく素行不良の子どもであっても、面倒を見つ続けなければならない。

(3) Above all, we must continue to take care of children who are not sincere in their study efforts and are misbehaving.

(4)上記(1)~(3)の観点から、予備校講師と学校教師を同列に論じるのは、暴論である。

(4) From the perspective of (1) to (3) above, it is an outrageous argument to equate prep school teachers with school teachers.

—–

もちろん、これらについては、同情の余地はあるとは思います。

Of course, there is room for compassion about these things.

しかし、このような状況は、どの職務でも同じことが言えます。

However, such environments are the same for any job, more or less.

例えば、ある企業の研究員は、仕事の大半が「雑務」と呼ばれるもので、一日が終わってしまうことも普通にあります。

For example, a researcher at one company may find that the majority of his work is “drudgery" and the day is over.

加えて、私が今一つ、教師側に同情できない理由は、『だから、私(江端)は教職を選ばなかった』です。

In addition, the reason why I can’t sympathize with the teacher’s side right now is: “That’s why I (Ebata) didn’t choose to teach.

私は、人に何かを教える「技術」が好きなのであって、「人間」が好きな訳ではないのです。

I like the “skill" of teaching people something, not the “people".

学業への取り組みが真摯ではなく、素行不良の子どもなんぞ、「3秒で切り捨てる」―― 私は、そういうハートレス(×ハートフル)な人間です。

I can “cut off in three seconds" a child who is not sincere in his or her academic efforts and who is misbehaving. So I’m such a heartless (x heartfull) person.

—–

いずれにしても、中田敦彦さん、小島よしおさんがYouTubeで提供されている教育コンテンツは、

In any case, the educational content provided by Atsuhiko Nakata and Yoshio Kojima on YouTube is that many children (and adults) besides me have been informed

――「眠くなる授業」は、「生徒(の頭)が悪い」のではく「教師(の教え方)が悪い」

“sleepy class" is not “the student (head) is bad" but “the teacher (teaching method) is bad".

を、私以外の多くの子どもたち(大人たちも)に、知らせてしまった、ということです。

少なくとも子どもたちは、上記の教師の過酷で残酷な労働環境なんぞ、一切、忖度してくれないでしょう。

At least, the children will not accept the harsh and cruel working environment of the above teachers at all.

—–

「真の教育崩壊は、これから始まる」 ―― と、私は、ゾッとしたのです。

“The real collapse of education is about to begin" — I got the chills.

未分類

長女の落書きを貰いました。

2020/05,江端さんの忘備録

最近、ようやく、マイナンバーカードの恩恵を感じるようになっております。

Recently, I’ve finally started to feel the benefits of My Number Card.

私の場合、ここ5年間ほど、確定申告やコンビニでの書類取り寄せなど、何度も使ってきましたので、結構スムーズになりましたが、そうでない人も多いでしょう。

In my case, I’ve been using it many times over the last five years to file my tax return and collect documents at convenience stores, so it’s gone pretty smoothly, but there are probably many people who don’t.

私も、そうでない人の1人でした ―― これまで何度、発狂しそうになったことか。

I was one of those who didn’t — how many times have I almost gone mad?

それに、マイナンバーカード用に自宅のPCにカードリーダーをUSB接続している人は、相当に少ないと思います。

Also, I don’t think many people have a card reader connected to their PC at home for their My Number Card.

—–

「役所にいって、面倒くさい書類を書いて、列にならんで、長時間待たされる」ということを考えると、パソコンのカードリーダを使った書類手続は、本当にパラダイスです。

If I think about “go to the government office, write tedious documents, stand in a line, and wait for a long time," the paperwork using a computer card reader is really a paradise.

しかし、パラダイスに至る為には、数年間におよぶダンジョンでの魔物との闘いを経験しなければならないのも、事実です。

However, it is also true that in order to reach paradise, you have to go through several years of dungeon battles with demons.

結局のところ、マイナンバーカードの恩恵(電子署名の発行、リモート申請)と、アナログ手続による申請は、トレードオフの関係にあります。

Ultimately, there is a trade-off between the benefits of the My Number Card (issuing electronic signatures, remote application) and the application through analog procedures.

どっちが良いとは一概には言えません。

I can’t categorically say which one is better.