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

C 言語から GO 言語の関数を呼ぶ方法

を参考にさせて頂いて、実験中です。

大変申し訳ありませんが、ほぼ丸パクりさせて下さい。これから、頻繁に見る必要があり、万一ページがexpiredされたら青冷めますので。

hoge.goというファイル名のPrintHoge関数を C 言語から呼べるようにします。

  1. Cをインポートする
  2. C 言語から呼びたい関数に//export XXXXを書く (普通、//とするとコメントなんだけどなぁ)
  3. コンパイルする
package main

import (
    "C"
    "fmt"
)

//export PrintHoge
func PrintHoge() {
    fmt.Println("hoge")
}

func main() {}

main関数がないとエラーになるので、空で良いので書いておきます。

-buildmode=c-archiveオプションをつけてgo buildします。

$ go build -buildmode=c-archive hoge.go

すると、hoge.aアーカイブとhoge.hヘッダが生成されます。

生成されたヘッダをインクルードして、Go 言語の関数を呼びます。

#include <stdio.h>
#include "hoge.h"

int main() {
    PrintHoge();
    return 0;    
}

生成されたアーカイブと一緒にコンパイルします。

$ gcc -o hoge hoge.a main.c

ところが、

$ gcc -o hoge hoge.a main.c
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w6
4-mingw32/bin/ld.exe: C:\Users\ebata\AppData\Local\Temp\cc1F3Mbe.o:main.c:(.text
+0xe): undefined reference to `PrintHoge'
collect2.exe: error: ld returned 1 exit status

が出てきて、「変だなー」と思いつつ、色々調べてみたのですが、hoge.aを一番最後にしたら、動きました。

$ gcc -o hoge main.c hoge.a
$ ./hoge
hoge
以上

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

■外部から強制的に書き込もうとすると失敗します

ubuntu@ip-172-26-7-19:~/codes/xxxxxxx_ride_hailing_go$ docker ps

095fe60f02cc nginx:1.15-alpine "nginx -g 'daemon of…" 8 weeks ago Up 22 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp xxxxxxx_ride_hailing_go_nginx_1

でもって、

ubuntu@ip-172-26-7-19:~/codes/xxxxx_ride_hailing_go$ sudo docker cp fullchain.pem 095fe60f02cc://etc/nginx/conf.d/

Error response from daemon: Error processing tar file(exit status 1): unlinkat /etc/nginx/conf.d/fullchain.pem: device or resource busy (失敗します)

しかし、dockerの中に入って、

ubuntu@ip-172-26-7-19:~/codes/xxxxxx_ride_hailing_go$ docker exec -i -t xxxxx_ride_hailing_go_nginx_1 sh

で内側から、killすると、dockerごとダウンして、なんとも悩ましい、にわとりと卵の関係になってしまいます。

■解決方法

ubuntu@ip-172-26-7-19:~/codes/xxxxxxx_ride_hailing_go$ sudo docker cp fullchain.pem 095fe60f02cc://etc/nginx/conf.d/fullchain.pem.new

ubuntu@ip-172-26-7-19:~/codes/xxxxxxx_ride_hailing_go$ sudo docker cp privkey.pem 095fe60f02cc://etc/nginx/conf.d/privkey.pem.new

でもって、 (今後は、new2, new3, new4 とか、どんどん増やしていく)

ubuntu@ip-172-26-7-19:~/codes/xxxxxxx_ride_hailing_go$ vi nginx.conf

をして、

———————————————————

ssl_certificate /etc/nginx/conf.d/fullchain.pem.new;

ssl_certificate_key /etc/nginx/conf.d/privkey.pem.new;

———————————————————

と書き換える。

さらに、

docker-compose.yml の最後の行に、

volumes:

- "./nginx.conf:/etc/nginx/conf.d/default.conf"

- "./fullchain.pem:/etc/nginx/conf.d/fullchain.pem.new"

- "./privkey.pem:/etc/nginx/conf.d/privkey.pem.new"

も変える。

でもって、 docker-compose stop; docker-compose start をすれば、新しい鍵で動き出します。不細工ではありますが、プログラムは動くようになります。

■ところで今思いついたんだけど、いい方法がありました。

現在は、fullchain.pem.new と、privkey.pem.new で動いているのだから、fullchain.pem と、privkey.pemは、rm できるはず。

で、cp fullchain.pem.new fullchain.pem, cp privkey.pem.new privkey.pem として、さらに、nginx.confの設定を元に戻せば、fullchain.pem と、privkey.pem の名前を使えるはずです

(まあ、動いているので、今は、このままにしています)

■もっと、いい方法がありました。

docker-compose.yml の最後の行に、

volumes:

- "./nginx.conf:/etc/nginx/conf.d/default.conf"

- "./fullchain.pem:/etc/nginx/conf.d/fullchain.pem"

- "./privkey.pem:/etc/nginx/conf.d/privkey.pem"

の3行を加えれば、Dockerの外側に、最新の"fullchain.pem"と、"privkey.pem"を置いておけば、自動的にDockerコンテナの中に取り込まれます(今、そうなっている)

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

Go言語をVSCodeを使ってデバッグをしようとするとすると以下のメッセージが出てきて、困っていました。

"Failed to continue: Check the debug console for details."

が消えなくて、困っていたのですが、

// +build ignore
package main

の "// +build ignore"を消したら、消えました。

 

 

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

BS世界のドキュメンタリー「ヒトラーの子どもたち」を見ました。

I watched the BS World Documentary "Hitler's Children".

一言で言えば、「特定人種(アーリア民族)の子ども量産計画」です。

In a word, it is a "plan to mass-produce children of a specific race (Aryan race).

かの独裁者の理念『第三帝国の千年王国』に基づく(特定民族の絶滅計画と同時に実施された)計画の一つです。

This is one of the plans (implemented at the same time as the plan for the extermination of certain ethnic groups) based on the dictator's idea of the "Thousand Year Kingdom of the Third Reich.

-----

かなり前に、このようなイラストを描きましたが、その番組では、本当にこのイラストそっくりの映像が出てきて、軽い嘔吐感を覚えました。

A long time ago, I drew an illustration like this one, and in that program, I really saw an image that looked exactly like this illustration, which made me feel mildly nauseous.

もちろん、1940年の当時は、「試験管ベイビー」も「クローン」の技術もありませんでした。

Of course, back in 1940, there were no "test tube babies" or "cloning" technology.

ですので、、生身の男女を生殖させる場所「レーベンスボルン(生命の泉)」をドイツ国内、そしてフランスに設けて、子どもを「生産」していました。

Therefore, "Ravensborn" (fountain of life) were established in Germany and France to "produce" children, where reproduction took place between living men and women.

-----

日本でも、戦前・戦中の出産数は多いです。

In Japan, the number of births before and during the war is also high.

衛生、社会インフラ、医療技術で死亡リスクが高く、また、「富国強兵」の観点から、出産が「産めよ、殖やせよ」と国策的に奨励されていたことが要因です。

This was due to the high risk of mortality in terms of sanitation, social infrastructure, and medical technology, as well as the fact that childbirth was encouraged by national policy to "give birth and reproduce" from the perspective of a "wealthy nation with a strong military.

『平均5児以上をもうける』("平均"というところが凄い)

"Have an average of five or more children" (the "average" part is amazing)

という、現在では「夢物語か?」というようなことが政策として組込まれ、そして、律儀な日本国民は、これを達成していました。

"Is this a pipe dream?" of today, was incorporated as a policy, and the Japanese people, who were disciplined, had accomplished this.

そして、当時の政府は、多子家庭に対しての優遇策を、無子家庭や独身者には冷遇策を課していました。

And the government at that time imposed preferential treatment for families with many children, and cold treatment for families with no children and single people.

-----

正直、「レーベンスボルン(生命の泉)」も「産めよ、殖やせよ」も、私はゴメンです。

To be honest, I like neither "Ravensborn" (the fountain of life) nor "Give birth, breed.

「国家権力の圧力で、子どもを量産する社会」なんぞを目にするくらいなら ――

I don't want to see a society that mass-produces children under the pressure of state power.

「個人の自由意志で、少子高齢化で朽ちていく国家」に立合い続ける方が、私はいいです。

I would rather continue to watch the nation decay with declining birthrates and aging population at the free will of individuals.

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

今日は、長女の卒業式ですが、保護者は会場に入れませんでしたので、近くの公園で写真撮影をしました。

Today is my senior daughter's graduation ceremony, but parents were not allowed in the hall, so we took pictures at a nearby park.

次女が、袴で装った長女とその家族を写した枚数は、現時点で確認されているだけで、251枚です。

The junior daughter took 251 photos of the senior daughter dressed in hakama and her family dressed as of now.

-----

私が、30年前に、20日間、中国大陸を放浪した時の写真は、フイルム6巻、合計 96枚

When I wandered around mainland China for 20 days 30 years ago, I took 6 rolls of film with a total of 96 photos.

15日間、ネパールとインドを移動していた時の枚数も、ほぼ同数でした。

The number of picture during the 15 days I was traveling between Nepal and India was almost the same.

私の35日間分の写真枚数(約200枚)を、次女は、1時間弱で軽く越えました。

In less than an hour, my junior daughter took more photos than I did in 35 days (about 200).

-----

空港のセキュリティチェックでX線によってフィルムが感光するのを防ぐために、これらのフィルムは鉛入りの袋に入れて運びました。

In order to prevent the film from being sensitized by x-ray rays at airport security checks, these films were packed in leaded bags and transported.

当時の中国では、写真撮影をする場所(軍事施設の近くとか)にも、随分気を使ったものです(今も、かもしれませんが)

In China at that time, I was very careful about where I took photos (near military facilities, etc.) (although this may still be the case).

-----

今では、膨大な写真の中から、手元に残す「ベストショット」を選ぶ作業が大変そうです(特に、嫁さんが)

Nowadays, it seems to be a difficult task to choose the "best shot" to keep in hand from the huge number of photos (especially for my wife).

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

TVアニメ「ホリミヤ」は、次女が絶賛のアニメです。

The TV anime "Horimiya" is an anime that my second daughter is raving about.

私は、アニメだけでなく、エンディングの3DCG(Three Dimensional Computer Graphics)も気に入っています(注 Youtubeにリンクします)。

I like not only the animation but also the 3DCG (Three Dimensional Computer Graphics) of the ending.

-----

3D技術については、Unidyとか、WebGLとか、私もそこそこその技術については知っていますし使ってもいますが、

As for 3D technology, I know and use Unidy, WebGL, and other technologies.

―― "3DCG"を、サイドエフェクトではなくて、メインコンテンツとした作品

As "a work that uses 3DCG as the main content, not as a side effect"

として、「いいなー」と思っています。

I think it's good.

-----

私は、高校の文化祭や、大学の学祭で、この程度の楽曲と映像のメディアミックスの作品が、普通に展示される日を待っています。

I'm waiting for the day when this kind of media mix of music and video will be displayed at high school festivals and university festivals.

―― というか、そのくらい、やってくれよ、若人。

"Why not do that, younth!"

私は、現在の学生演劇が、30年も前と全く変らないワークフレームで演じられていることに、ショックを受けています。

I am shocked to find that student theater today is performed with a work frame that is exactly the same as it was 30 years ago.

今や、メディアミックスなんか、当たり前に取り入れていると思っていましたが、学生演劇が、驚くほど保守的(後進的)なことに驚いています。

I was surprised at how conservative (backward) the student theater scene is, although I thought media mixes were commonplace nowadays.

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

go run xxxx.go で起動すると、「このアプリの機能のいくつかがwindows defenderファイアウォールでブロックされています」が出てきます

素直に、go build xxxxx.go として、exeファイルを作って、実施すれば、出てこなくなります。

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

(昨日の続きです)

(Continuation from yesterday)

実際、コンピュータ教育は、想定されるリターンに対して、投資コストが安いです。

In fact, the investigate cost of computer education is cheaper than the estimated benefit.

インフラ(ハードウェア)のみに着目すれば、PCなんて3万円くらいですし、ラズパイ+ロボットでも1万円程度です。

About the only cost of infrastructure (Hardware), PC is about \30k and Raspberry pi and Modeled robot is about \10k.

ソフトウェア(開発環境)は、高品質で無料なものが、ネット上にゴロゴロ転がっています。

There are a lot of free and high-quality software(e.g. developing tools) on the net.

そして、会社という「箱」も不要です。100%リモートワーク可能です。

In addition, we don't need a box, called "company". 100% remote work is possible.

問題があるとすれば 「人材」と「人件費」ですね。

The remaining problems are "human-resources" and "personal-costs".

そもそも、我が国には、「コンピュータ教育を施す教育者」という発想がありません ―― もっとも、これは仕方がないとも言えます。

To begin with, we Japanese has no idea for develop teachers for computer education. I am afraid that it cannot be helped.

冒頭に記載した、

At the front of this thread I wrote

■異世界モノのストーリーで、異世界転生前の職業で突出しているのが「プログラマ」です。

- In stories about "another world", one of the most prominent occupation before being reincarnated into another world a programmer"

■大抵の場合、この名詞の前には「ブラック企業の」が付きます。

- Most of the time, the noun is proceeded by "black company's".

から分かるように、こんな業界に、子どもを入れたいという保護者がいるわけがありません、でした。

From the view point of the gradians, they don't used to send their children to the nightmare field.

しかし、今、本当に僅かで、ゆっくりではありますが、コンピュータ教育のパラダイムシフトが起きつつあります。

However, this speed is very timid an slow, the paradigm shift of computer education comes to change.

-----

そして、この「プライベートなSTEM教育」は、

And this "private STEM education" will make us

(1)富裕層との「格差を決定的に広げる」

(1)expand the disparity between the wealthy and others

か、あるいは、逆に

or conversely,

(2)低コストな投資によって「格差問題を根本的に解決する」

(2)resolve the problem of disparity by low-cost investments

か、どっちに転ぶのか、分からない状況です。

Now nobody would know which way we are going.

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

(昨日の続きです)

(Continuation from yesterday)

実は、文部科学省のプログラミング教育とは別に、

Actually, apart from the Ministry of Education, Culture, Sports, Science and Technology's programming education, tThis is the fact of

―― 富裕層の中でも、特に先見の明のある保護者によって、密かに(という訳でもないだろうが)、プライベートなプログラミング教育が始められている

"Private programming education has been secretly (or not so secretly) initiated by some particularly farsighted parents among the wealthy.

という事実です。

まず、現在は、地域の小学校などを起点とした小さなコミュニティとして、プラットフォームは ―― ここ大変重要ですが、

First of all, as a small community, starting with local elementary schools, they are currently using

"Windowsとか、Scratchという話ではなく、「Raspberry Pi(ラズパイ)とロボット」を教材として使っている"

"Raspberry Pi and robots" as teaching materials, rather than Windows or Scratch as platforms.

という点です。

私が、衝撃を受けたのはこの「ロボット」です(凄く簡易な、いわゆる「模型キットのロボット」ですが)

What shocked me was this "robot" (a very simple so-called "model kit robot").

従来のコンピュータ教育は、PCの中で「閉じた」ものでした。

Traditional computer education has been "closed" to the PC.

しかし、プライベートなプログラミング教育では、「ロボット」を使うことで、PCと現実世界とのリンクを教えている、という点にあります。

However, the point is that private programming education teaches the link between the PC and the real world by using "robots".

-----

ロボットは、プログラムを使って正しい指示を与えなければ、1mmも動き出すことはありません。

The robot will not start moving even a millimeter unless they give it the right instructions using a program.

ロボットに、「自分で考えて動け」と怒鳴ったところで、無駄なのです。

It is useless to yell at a robot to think and move on its own.

そして、ロボットが動かない場合、その原因は、100%そのプログラムの製作者が悪い ――

And "if the robot doesn't work, the cause is 100% the fault of the creator of the program"

この「STEM教育」の本質は、プログラミングだけでなく、「責任分岐点」の考え方をクリアにする、という点にあると思います。

I believe that the essence of this "STEM education" is not only programming, but also clearing up the idea of the "junction point of responsibility".

で、この「責任分岐点」の考え方は、(多分)マネージメントには不可欠な要素の一つなのだろう、と考えています。

And I'm thinking that this idea of "responsibility juncture" is (probably) one of the essential elements of management.

実際、現在の巨大ITプラットフォーであるGAFA(Google, Apple, Facebook, Amazon)の創立者は、全員、プログラマー出身者です。

In fact, the founders of GAFA (Google, Apple, Facebook, Amazon), the current giant IT platform, all came from a programmer background.

そして、「富裕層の中でも、特に先見の明のある保護者」は、気がついてきているのです ――

And the "wealthy, especially the farsighted parents" are starting to take notice.

コンピュータ教育には、「投資価値がある」と。

Computer education is "a worthwhile investment.

(続く)

(To be continued)

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

異世界モノのストーリーで、異世界転生前の職業で突出しているのが「プログラマ」です。

In stories about "another world", one of the most prominent occupations before being reincarnated into another world a "programmer".

大抵の場合、この名詞の前には「ブラック企業の」が付きます。

Most of the time, this noun is preceded by "black company's".

「プログラマ」が「ブラック企業」となるのは、理由があります。

There's a reason why "programmers" are linked to "black companies.

(1)プログラマの人口が圧倒的に少ないこと

(1) The population of programmers is overwhelmingly small.

(2)プログラマでない人間の多くが、プログラムの発注元(クライアント)であること

(2) Many people who are not programmers are the clients who order the programs.

(3)そのクライアントが、プログラムというものを本質的に(絶望的に)理解していないこと

(3) That the client essentially (hopelessly) doesn't understand what a program is.

この3つの要件が揃うからです。

This is because these three requirements are aligned.

-----

加えて、最近のプログラム言語は、「簡単」を謳いながら、どんどん「複雑」になっています。

In addition, recently, programming languages are becoming more and more "complex" while claiming to be "simple".

これは間違いありません。

There is no doubt about this.

プログラムの設計者は、既存プログラミング言語の不満を、新しい言語を作ることで「鬱憤(うっぷん)」を晴らしているように思えます。

It seems to me that program designers are relieving their frustration with existing programming languages by creating new ones.

それは、それで結構なのですが、プログラムのユーザ(開発者)にとっては、迷惑この上もありません。

That's fine, but it's annoying as hell for the users (developers) of the program.

-----

もちろん、本当に「簡単なプログラミング言語」を目指しているものもあります。

Of course, there are some that really aim to be "simple programming languages".

しかし、こちらは「簡単」になっている代わりに、実現できる機能も「簡単」になってしまい、加えてパフォーマンス(処理速度やリソースの利用率)も劣化することが多いようです。

However, instead of being "simple", the functions that can be achieved are also "simple", and in addition, the performance (processing speed and resource utilization) often deteriorates.

とは言え、私は、新しいプログラミング言語に文句が言いたい訳ではないのです。

However, I don't want to complain about a new programming language.

-----

私、文部科学省のプログラミング教育については、かなり批判をしてきましたが、最近、これにつては、別の考え方がある、ということが分かってきました。

I have been quite critical of the MEXT's programming education, but recently I have come to understand that there is another way to think about it.

以前、ちょっとお話しました

I told you a little bit about it before.

「STEM教育」

"STEM Education"

が、我が国の「格差を決定的に広げる」か、あるいは、逆に「格差問題を根本的に解決する」になるかもかもしれない、ということが分かってきたからです。

seems to be able to either "critically widen the gap" in our country or, conversely, "fundamentally solve the problem of inequality.

(続く)

(To be continued)