quadruple

ソフトウェア開発のために

2/22

    if err := tu.tr.UpdateTask(&task); err != nil {

これ省略しすぎで何が何だかわからない。
 
確かに、Go言語に慣れていないと「呪文かな?」ってなりますよね
とチャッピーも言っている。
 
TaskUsecaseにあるTaskRepositoryのメソッドであるUpdateTaskの返り値をerrに格納してエラー判定している
 
type taskController struct {
    tu usecase.ITaskUsecase
}
これもなんだか難しい。
コントローラーのメソッドをimplementしていこうってのになんで
usecase.ITaskUsecaseをフィールドに定義するのか。
なるほど、controllerでusecaseのメソッドの情報を渡すことで使えるようにしているわけね。
 
    return c.JSON(http.StatusOK, taskRes)
型はerror型でキャッチできるようにする。
 
 
 
 
 
lsof -ti:8081 | xargs -r kill -9 2>/dev/null; sleep 1; GO_ENV=dev go run main.go
こんなコマンドをaiが吐いたよ。どんな意味?
 
"List all Open Files using Internet port 8081, output in Terse mode.
Pass these IDs to eXtended ARGumentS and Kill them with Signal 9.
Sleep for 1 second. Set Environment variable to Development and Run the Go language Main file."
 
Launch = 起動
 
 

2/15

delete/api/admin/information/:id

webサーバー(api)に特定のデータを削除するための受付窓口を新規作成

1. DELETE

2./api/admin/information

3./:id パスパラメーター

 

```pgsql

constraint:OnUpdate:CASCADE,OnDelete:SET NULL;

```

 

constraintは制約を設定する

OnUpdate: CASCADEは親テーブルの主キーが更新されたら子テーブル側も自動で更新する。

OnDelete:SET NULLは親レコードが削除されたら子テーブルの外部キーをNULLにする

 

```sql

FOREIGN KEY (user_id)

REFERENCES users(id)

ON UPDATE CASCADE

ON DELETE SET NULL;

```

 

こういった設計の前提になっているのは、子テーブルの外部キーが親テーブルの主キーを参照しているということ

 

DB接続をしたい場合はinit関数を定義する。

設定情報からDSNを構築し、PostgresSQLへの接続を確立

DB変数にグローバルな*sql.DBインスタンスを保持する。

close()関数 : DB接続のクローズ処理

 

func inti(cfg *config.Config)

cfgはパラメーター名にすぎない。

*config.Config型とはこの場合はconfig dirにあるConfig構造体へのポインタ

 

データベース接続に必要な設定情報が格納されたConfig構造体へのポインタを渡す。

initにcfgを渡して、DBに接続をする。

この世界のあらゆる設計の中でDB接続の設計は必ずすでに初期化されたdatabase.DBをそのまま使ってクエリを実行している。

main.goでdatabase.init(cfg)を実行してDB接続を完了する。

adminsでもinit関数を使っているみたいだけどなんでかな。

host / port / user / password / dbname
(+ sslmode などのオプション)

Data Source Name 

DB接続先をまとめて表す文字列のこと

host=localhost port=5432 user=postgres password=secret dbname=app_db

DSNは、fmt.sprintでdsn変数に入れるのはいい。

dev/prodなどの環境変数モードは、ログレベルやDBなどの設定を分岐させるために使用する。

開発向けは便利さで、本番向けは顧客用に見せたり、実際に運用するときに切り替えるということ。

envファイルが読み込めなかった時には、panicかfatallどっちが適切かな

エラーメッセージを返すときは、fmt.errorfで返すのはかなりいいね。

logfatalをコード中には使わないようにしたい。

main関数でload関数を呼び出してenvファイルを読み込んで引数を渡しているね。

load関数に書いたほうがいいけど、まあ誤差かな。

main関数には極力コードが少ないほうがいいからね。

 

DB,err = sql.Opne("postgres",dsn)

sql.Open 

これはデータベースを開く準備をしてくれという意味です。

 

 

2/14 docker-commnad

superuser do user modify — append to supplementary group docker — username

sudo usermod -aG docker username

superuser do change owner to root:docker for /var/run/docker.sock

sudo chown root:docker /var/run/docker.sock

superuser do change mode 660 for /var/run/docker.sock

sudo chmod 660 /var/run/docker.sock

docker compose up -detach

docker compose up -d

 

2/13

パッケージ管理snap

stable は「安定版チャネル」の意味。

  • 十分にテスト済み

  • 本番利用向け

  • バグ修正中心で大きな変更は少ない

beta / edge より信頼性が高いリリース。

安定版チャネル即ち自動更新があっても常に安心安全なパッケージにのみ移行するという仕組みです。後方互換性がしっかりしているということですね。

1.25/stable を追っていれば、1.25.x の新しい修正版に自動更新されます。

 

FIPSとは?

Federal Information Prpcessing Standards(米国政府の情報処理標準)

stable/candidate/edgeなどと違ってトラックと呼ばれるものにfipsが付く。

例:1.25fips

 

go mod initでgo module作っていきます。

go mod edit -module module名でmodule名変更できたりします。使うことはあるのかね

go mod edit -require github.com/gin-gonic/gin@v1.9.0

tidyしてくれ

 

 

ymlふぁいるにはversionを昔は記載する必要があって使える機能が変わったんだけど、

今は事実上廃止されcompose specに統合されているみたい

 

dockercomposeのcomposeの意味は、組み立てるという意味。

コンテナをまとめて起動する・組み立てるという意味

 

servicesは起動するコンテナ名のこと

サービス名は任意に設定できる。

imageは使用するdockerイメージ

pstgres15-alphineと指定すると軽量なalphine linuxをベースにしたpostgersを指定できるけど、まあいいかな。

   ports:
      - "5432:5432"
コンテナのポート番号とそれに対応するローカルのポート番号の設定
 

network とは

コンテナ同士を通信させるための仮想ネットワークです。

http://postgres:5432のようにサービス名で通信できるようになる。

 

healthcheckは、コンテナが正常に動作するか定期的に確認する仕組み

 

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-postgres}"]

Postgresが接続を受け付ける準備ができているか確認するために必要です。

パーツごとの意味としては、CMD-SHELL (/bin/sh)を使ってコマンドを実行せよという意味です。

pg_isreadyはPostgresSQLに最初から入っている生存確認用の専用ツールです。DBの応答確認します。

-U ${OSTGRES_USER: -postgres}:

どのユーザーとして確認するか。

 

 

困った

唯一の相談相手にして、仕事相手なのにかなり忙しそう

善悪抜きにして人に軽視される特才がある。

人に軽んじられるのは生まれ持ったものなので、ある程度諦めるしかない。

だが、人に好かれないと仕事は回ってこない。

そして、嫌われれば人は孤立する。

 

だから仕事がないことも仕方ない。

それで毎日お金がもらえるならば何の不満もない。

俺の仕事は人に好かれることだな。

上長からするとおれが暇かどうかなんて心底どうでもいいことで

単に仕事が進めば機嫌がよくなるし、悪ければ関係が悪くなる。

 

 

基本情報技術者試験

基本情報午後の疑似コードの問題はクセが強い。

添え字がなぜか1から始まるからだ。

 

整数型の配列 makeNewArray(整数型の配列in)

このコードはJSだと

function makeNewArray(arr)
 
Javaだと
public static java.util.List<Integer> makeNewArray(int[] in)
 

JSのほうが疑似コードにしやすい。

JSの場合はarrでJavaの場合はarrayListを想定しているようだ。

 

問題文が長くても回答を導出する場合にほとんどが関係ない話だったりする。