kakts-log

programming について調べたことを整理していきます

Goコンパイラによるコンパイル処理について整理

概要 Goのコンパイラにおいて、コンパイル時にいくつかのフェーズに分かれており、各フェーズについてざっと概要を整理します。 github.com Goコンパイラによるコンパイルでは、主に下記のようなフェーズをたどります。 - 字句解析 - 構文解析 - 型チェック …

SystemV メッセージキューの作成とipcsを用いたメッセージキューの確認方法

概要 System V メッセージキューは、Linuxにおけるプロセス間通信方法の一種で、メッセージ形式のデータをプロセス間でやり取りするのに使われます。 主に下記3つがあり、今回はメッセージキューについて扱います。 メッセージキュー セマフォ 共有メモリ 今…

開発におけるドキュメント運用の理想状態と課題

概要 開発におけるドキュメントの運用方法について、自分なりの理想状態についてまとめます。 簡単にまとめると以下の3つとなります。 ドキュメントが容易に見つかる ドキュメントの正確性 ドキュメントの抜け漏れがないこと 上から順に実行難易度が下がり、…

google/wireでDIする際のgenerics対応について

Go

概要 この記事はQiita Advent Calendar 2023 Go言語の第十七日の記事です。 qiita.com google/wire で genericsに対応させる方法をまとめる google/wireについて github.com google/wireとは、GoでのDependency Injection用のコード生成ツールとなります。 w…

C: Pthreadによるスレッド作成とデタッチ

概要 CにおいてPthread(POSIX Thread library)ライブラリを使い、pthread_create()によりスレッドの作成をした後、別のスレッドからpthread_join()を実行し、作成したスレッドの終了を待ち、終了状態を得ることが可能です。 場合によっては、作成したスレッ…

stdioバッファの方式について

c

概要 fork()による子プロセスを作成するプログラムにおいて、printfなどのstdioライブラリの関数を実行した場合、標準出力が端末とファイルの場合で出力結果が異なる場合があります。 この挙動について整理します。 (参考: LINUXプログラミングインタフェー…

C: シグナルハンドラ内で非リエントラントな関数を扱った際の挙動

c

概要 Cにおいて、シグナルハンドラ関数内で非リエントラントな関数を実行した際に意図しない挙動が生じる問題についてかんたんに整理します。 リエントラント: Reentrant 再入可能 - マルチスレッド安全なもの 非リエントラント: Non-Reentrant 再入不可 - …

inotify_add_watch()によるファイル・ディレクトリ変更検知イベントを受信した際の挙動について

概要 linuxシステムコールでのinotify_add_watch(),によるファイル、ディレクトリの変更検知を行った際の挙動を整理する。 監視対象として特定のディレクトリを指定した場合、変更イベントの内容を保持するinotify_event構造体のname とlenにそれぞれ変更が…

Golangでファイル監視を行う

Go

概要 Goでファイル監視の方法についての記事です。 Goの標準パッケージではファイル監視の機能は提供されていないが、 github.com/fsnotify/fsnotify を使ったファイル監視のやり方をまとめます。 fsnotifyについて github.com/fsnotify/fsnotify 各プラット…

os.Exit()とdeferされた関数について

概要 os.Exit()を実行した際、プログラムが即座に終了するため、defer された関数が呼ばれない。 これについて整理します。 os.Exit() ドキュメントを確認すると、defer された関数が呼ばれないことも明記されている Exit causes the current program to exi…

JavaScript Primer改訂第2版の内容レビューに参加しました。

先月出版された「JavaScript Primer 改訂2版 迷わないための入門書」の内容レビューに関わらせていただきました。 先日出版社の方から、完成した書籍をご恵贈いただきました。ありがとうございます。 www.kadokawa.co.jp JavaScript Primer 改訂2版 迷わない…

RPMのgpgkeyの確認方法

概要 yumでのpackage installでPublic keyに関するエラーが出た際に、RPMのgpgkeyの確認方法が気になったのでまとめてみた gpgkeyの確認方法 インスタンス内でインストールされているyum package用のgpgkeyの確認は下記方法でできる rpm -q gpg-pubkey --qf …

64ビットアーキテクチャにおいてインラインアセンブラでシステムコールを呼び出す

概要 独習アセンブラ8.4.1において、Cでインラインアセンブラによってシステムコールwriteを呼び出し、標準出力に文字列を出力するコードを実行させる際に、64bit環境では下記のエラーが出て実行できませんでした。 64bit環境で動作させるための方法を調べて…

Cでインラインアセンブラコードをgccでコンパイルする際に "relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object;" というエラーが出た時の対処法

gcc

概要 GCCのインラインアセンブラを利用して Cで書かれたコード内でアセンブリ言語のプログラムを埋め込み、コンパイルした場合に下記のエラーがでました gcc実行時に、内部でldコマンドが実行された時のエラーのようです。 $ gcc -fno-pic -fomit-frame-poin…

【独習アセンブラ 4.5デバッガによるトレース】apple silicon macのローカルでgdbの代わりにlldbを使ったトレースの実行方法

概要 「独習アセンブラ」を読んでアセンブラを学んでいて、apple silicon(arm)のmacのローカル環境でコード書いてデバッグしています。 独習アセンブラ 新版作者:大崎 博之翔泳社Amazon 4.5「デバッガによるトレース」 で、gdbを使ってcのソースコードをコン…

シンボリックリンク一覧の中から、指定したファイルを参照しているものを探す

概要 下記のように、a.txtのファイルを実体とし、それを参照したシンボリックリンクが2つ(b.txt, t/c.txt)あるとする。 この場合、a.txtを参照したシンボリックリンクを見つけたい場合、findコマンドを使うことで実現できます。 - b.txt - t/c.txt $tree . ├…

wordle用にmacのターミナルでwordle用の辞書ヘルパーをワンライナーで

やりたいこと wordle 用に、指定した文字を含んだ5文字の単語の一覧を表示させて、wordleを解きやすくしたい 前提 MacOS 12.3 英単語をどうやって取得するか 今回はMacOSで用意されている英単語辞書を利用する MacOS内での英単語辞書について /usr/share/dic…

systemd systemctlでデーモン起動しない場合のログ確認方法

systemd により、os上でsystemctl start hoge のようにデーモンプロセスを起動する際、 プロセスが立ち上がらず、原因がわからなくて困ることがある $ systemctl start hoge.service # うまく起動せず、ステータス確認 $ systemctl status hoge -l ● hoge.se…

Apple Silicon macで公式のDocker MySQLイメージを利用する

MySQL公式が Apple Silicon用のMySQLイメージをサポート Apple Silicon (ARM 64) Macが出てから、DockerではARM64用の公式MySQLイメージが用意されておらず、 --platform linux/amd64 を指定してIntel用イメージをエミュレーションするか、代わりにmariadb …

vscode: Goのコードで定義元にジャンプさせる

Go

概要 vscodeでGoのコードを書く際に、関数などの定義元にジャンプさせたい時の設定。 手順 Go公式のvscode拡張機能を有効にする まず、Go公式のvscode拡張機能が有効になっているか確認します。 github.com Goの公式の拡張機能が有効になっているか確認する …

C: ディレクトリストリームによるディレクトリエントリ情報の取得

UNIX/linuxベースのOSにおいて、C標準ライブラリを使って、ファイルシステムにおける指定したディレクトリの情報を取得する方法をまとめます。 環境 m1 mac OS(11.6) ファイルシステムにおけるディレクトリについて ディレクトリはデータ領域にディレクトリ…

v8によって生成されるbytecodeを確認してみる

Qiita Node.js アドベントカレンダー2021の20日目の記事です qiita.com v8のbytecodeについて、自分で書いたコードでどうやって確認するか気になったので調べてみました。 v8によるバイトコード生成 v8がどうやってバイトコード、機械語を生成するかざっくり…

m1 macでpip使用時にModuleNotFoundError: No module named '_ctypes' エラーが出る

前提 - python 3.7.12 - m1 mac - mac OS Big Sur 11.6 m1 macでpython3系を利用し、pip installを実行すると下記のエラーがでた。 ModuleNotFoundError: No module named '_ctypes' 対処法 自分はpythonのバージョンを3.8.12にあげたら対応ができた。 いろ…

macOSで manコマンドを使った際にNo manual entry for ... となる場合

macOSで manコマンドを使った際にmacOSで指定したシステムコール・Cライブラリなどのマニュアルをmanコマンドで調べる場合、 下記のように No manual entry for ... という文言がでてマニュアルが表示されない場合があります。 man fcntl No manual entry fo…

コミット済みのディレクトリをgitの管理対象から外したい場合

コミット済みのディレクトリをgitの管理対象から外したい場合 あとから.gitignoreで修正しても、その対象のディレクトリ・ファイルに変更があった場合はgitのステージ対象に入ってしまいます。 こうしたディレクトリ・ファイルをコミット後にgitの管理対象か…

man で指定したキーワードに関連した項目を検索する方法

概要 指定した man コマンドで指定したキーワードに関連したコマンド、システムコールなどの項目を確認したい場合、 -kオプションを使えば可能となる。 manコマンド自体のマニュアルより参照 $ man man .... -K Search for the specified string in *all* ma…

KEDAによるイベントドリブンオートスケール

概要 本記事は Qiita Kubernetes Advent Calendar 2020 その2 の第7日目の記事となります。 qiita.com CNCFのSandbox Projectsの1つであるKEDA(Kubernetes-based Event Driven Autoscaling) というオートスケーラーについて、公式ページの内容を整理して紹介…

kubernetes: Deploymentリソースを作成してレプリカPodが稼働するまでの流れを整理する

Kubernetes3 Advent Calendar 2019の17日目の記事となります。 qiita.com 今回はDeploymentリソースが作成されてから、実際にNode上でPodのコンテナが起動されるまでの流れをざっくり整理したいと思います。 自分の理解を深めるため、kubernetes自体のソース…

Node.js のWASIモジュールについて

この記事は Node.js Advent Calendar 2019の16日目の記事となります。 qiita.com 今回は Node.js 13.3.0から導入されたWebAssembly System Interface (WASI)モジュールに関して紹介します。 WASIについて wasi.dev github.com WASI APIはWebAssembly System …

worker_threadsを使ったNode.js マルチスレッドプログラミング

qiita.com この記事は Qiita Node.js Advent Calendar 2018 14日目の記事となります。 今回は Node.js のWorker Threadsに関してまとめます。 本記事では、前提としてNode.js v10.14.1 における内容をまとめています。 worker_threadはexperimentalな機能な…