地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Go】Go言語のcontextの理解メモ

Go

contextの主な用途は2つ Goroutineの適切なキャンセル リクエスト情報の伝搬 1つめはコンテキスト使わなくても実装可能だが2つめがちょっと難しい。そもそもコンテキスト型とは以下のように定義されている。 type Context interface { // Deadlineが設定され…

【Go】for selectパターンメモ

Go

チャネルからの受信を待つパターンでの実装。書き込めるチャネルをselectして実行みたいなのも可能。 package main import ( "fmt" "strconv" "time" ) type Result struct { Error error Response int } func doSomething(done <-chan interface{}, printSt…

【Go】listで依存パッケージを調べる

budougumi0617.github.io goのlistサブコマンドで依存してる外部パッケージのバージョンやらタグやらを調べることができる go list -m all go-notify github.com/fsnotify/fsnotify v1.4.9 github.com/go-fsnotify/fsnotify v0.0.0-20180321022601-755488143…

【Go】fsnotifyを使ってみる

Go

github.com fsnotifyを使って特定ディレクトリ配下のファイルを監視して起きたイベントをコンソールに出力するCLIツールを作ってみた。 仕組みとしては linuxjm.osdn.jp アプリケーションで inotify ファイルディスクリプターを read(2) してそのイベントをO…

【vim】Jedi error: Traceback (most recent call last)

github.com 久々にpython書こうとしたらjediでエラーが発生。coc絡みだろうとissueを見に行ったら発見。coc-pythonとjediのバージョンアップで起こるらしい。 : CocInstall coc-python でことなきをえた。

【Linux】ファイルマスクのメモ

整形ツールの無い環境でパーミッションマスクが見辛かったのでメモ。そのうちpythonあたりでパーサ書こう。 S_ISUID 0004000 set-user-ID bit S_ISGID 0002000 set-group-ID bit (下記参照) S_ISVTX 0001000 スティッキービット (下記参照) S_IRWXU 00700 フ…

【Linux】IOバウンドの処理はどの程度まで並列数を上げればよいかの考察

概要 IOバウンドについて考える機会があったのでその辺の話についてまとめてみた。ちなみにブロッキングIOしか出てきません。以下の本が大体の参考になってます。 www.amazon.co.jp 忙しい人向け 結論としてはIOバウンド(ネットワーク起因)な処理はコア数関…

【Redis】コードリーディングメモ イベント駆動エンジンまで

イベント駆動エンジンまでのエントリポイントのメモ。メモしようと思ったきっかけは以下のQAをみた時。 Q: Redisはソケット I/O を処理するためにそのようなオープンソースのイベント ライブラリを使いますか? A: いいえ。様々な理由から、Redis は独自のイ…

【Linux】カーネル関数「account_user_time()」は何をしているのか

概要 ユーザーCPU時間って何だっけってなって寝落ちしたままなのでこの辺から追ってく。https://t.co/bfJdMKR5rb— Ryuichi@k8s再入門中 (@ryuichi_1208) 2021年2月13日 謎にCPUのユーザ時間ってなんだって疑問が出てきたので調べた。 CPU使用率とは CPUは、…

【Redis】計算量がO(N)以上のやつ

Redisの計算量でO(N)以上の値のやつを抜粋。データ量が多いみたいなケースでこれらの操作がある場合はレビュー観点として見ていく必要がある。 O(N) BITCOUNT BITOP BITPOS CLIENT KILL CLIENT LIST CLUSTER ADDSLOTS CLUSTER COUNT-FAILURE-REPORTS CLUSTER…

【Redis】Blockコマンドの中身

mogile.web.fc2.com BRPOPとかBLPOPとかその辺の中身がどんなことやってるのか気になったので見てみたメモ。 ちなみにクライアント側は空のリストへBRPOPなりを実行するとstraceの結果よりread(2)でブロックする。ローカルの検証だがコネクションはこんな感…

【C】close済のソケットへの書き込み

qiita.com コネクションが切れたソケットに書き込み(send(2)とかwrite(2)とか、同じものだけど)を行うと、SIGPIPEシグナルが発生してプロセスが強制終了する。 shutdownを相手側が使用してて書き込みしないような呼び出しの場合はSIGPIEPは発生しないらしい…

【Bash】プロンプトをカスタマイズ

export PS1='\[\e[1;36m\][\D{%Y/%m/%d} \t] \[\e[1;32m\]\u@\h\[\e[00m\]:\[\e[1;34m\]\w\[\e[1;31m\]$(__git_ps1)\[\e[m\]\n\$ ' 最近やたらめったらサーバを立てまくってたら何がなんだか分からなくなってきたのでせっかくなので綺麗に統一するように書い…

【Fluentd】rewrite_tag_filterで無限ループする設定

docs.fluentd.org var/log配下のtest.logをtailしてtagをtest.aとする。rewrite_tag_filterでtest.**が来たらtest.bへ書き換える。test.bをstdoutへ出力するみたいな設定を行いたいケース。 そのまま書くと以下のようになるかなと思って書いて実行するも上手…

【Elasticsearch】クエリチートシート

全件表示 { "query": { "match_all": {} } } 重複排除 www.elastic.co { "collapse": { "field": "product_name" }, "query": { "match_all": {} } } IN句 INを実現するにはtermsを使う。termsはmatchと違って完全一致で検索を行う。 www.elastic.co { "quer…

【Fluentd】ログの配信先を複数に振り分ける

docs.fluentd.org output_copyは1つのログソースを複数のサービスへ送りたいみたいなケースで使えるプラグイン。matchで@type copyを指定したら処理をそれぞれ書くことで複数の送信先を指定することが可能となる。 <source> @type tail tag qiita.a path /var/log/ho</source>…

【Linux】LinuxでプロセスごとのIOを取得する

IO量の確認 $ find /proc -name io | xargs egrep "write|read" | sort -n -k 2 プロセスのファイルディスクリプタ確認 $ strace -p プロセスID -f -e pwrite,pread 適当なところで Ctrl + C ファイルディスクリプタからファイルの確認 readlink /proc/3847/…

【C】マクロ

C

拝啓 カーネルソース読んでるとよく出てくる「do {} while (0);」 これが何なのか気になったので調べてみました。 torvalds/linux 以下swap関数のようなイメージ 至るところでdo {} while(0)が存在 /** * swap - swap values of @a and @b * @a: first value…

【Go】defer

Go

Goには、deferステートメントというものがあり、deferへ渡した関数実行を、その呼び出し元の関数の終了時(return)まで遅延させることができます。 package main import "fmt" func main() { // main関数の最後に実行される defer fmt.Println("world.") fmt.…

【vim】Git Commit Problem: "error: There was a problem with the editor 'vi'"

よくわからんけど表示されていたのでググったら解決したエラーメッセージ。 github.com git config --global core.editor /usr/bin/vim

【Apache】apacheのビルドオプションを調べる

どんなビルドオプションで入れたかを調べるためのコマンド apachectl -V github.com Server version: Apache/2.2.9 (Unix) Server built: Oct 13 2008 21:48:41 Server's Module Magic Number: 20051115:15 Server loaded: APR 1.2.7, APR-Util 1.2.7 Compil…

【mac】CrystalDiskMarkがあったので使ってみたメモ

久々にCrystalDiskMarkを調べてたらmac版があったのでメモ的に貼っておく。数年後に見る用。 macbook pro 2018の13インチでストレージは256GB SSD。PCI Express x4だと圧巻の数値になりますね。。

【Linux】メモリに関するメモ

メインメモリ:物理メモリとも。一般に DRAM で提供される 仮想メモリ:メインメモリの抽象。実メモリではない。 常駐メモリ:現在メインメモリにあるメモリ。 無名メモリ:ファイルシステム位置やパス名を持たないメモリ。ヒープ(プロセスのアドレス空間内…

【k8s】セキュリティを高めるCAPABILITIES

k8s

linuxjm.osdn.jp capabilities - Linux のケーパビリティ (capability) の概要 ケーパビリティを使うとroot か root じゃないか、という究極の選択 的な権限の与え方ではなく、もっと細かい単位で権限をプロセスなりバイナリなりに付与してセキュリティを柔…

【Docker】20.10リリースノートが日本語版が出来てた

大分前に英語版はあったけど日本語のも来てたので更新。気になったのを何個かピックアップ。日本語ページ配下にあったってだけでまだ翻訳は全て行われたわけではなさそう。 matsuand.github.io ダイジェスト値によるプルをサポートしていない非準拠 レジスト…

【Bash】小数点演算する

引数で渡された分だけファイル内の数値に0.1ずつインクリメントするスクリプト。マイナーバージョンとかのタグを自動インクリメントしたいみたいなケースで使えたりする。 #!/bin/bash [[ ! -f "version" ]] && touch version [[ ! $# -gt 0 ]] && exit 1 fo…

【Linux】詳解 システムパフォーマンスの読書メモ

1.イントロダクション 視点 ・ワークロード分析:トップダウン ソフトウェアスタックのアプリ側から分析 リソース分析:ボトムアップ ソフトウェアスタックのデバイス、カーネル側から分析 動的トレーシング 本番環境のソフトウェアからあらゆる箇所の経過時…

【k8s】VPAの概要に触れる

HPAの親戚的な機能のVPA。HPAが水平スケールならVPAは垂直にPODをさせます。 ccvanishing.hateblo.jp HPAとVPAの違い 動的スケーリング種別 増減対象 主な用途 HPA 水平 Pod数 Webサーバ VPA 垂直 CPU/メモリ DBサーバ 冒頭でも述べたとおりHPAとVPAではそれ…

【C】IPC メッセージキューのサンプル実装

C

メッセージはプロセス間でデータをストリーム的にやりとりすることが可能で、FIFOやパイプに似ていますが、メモリ上で行なわれるのでより高速です。サンプルを実装してみたのでメモ

【Perl】配列の重複要素を削除する

CIで特定条件のファイルを抽出してテストを行うみたいな実装をしたかった際に配列にファイルパスを突っ込んでたら重複した要素を持つ配列になってしまった。 my @array = ( 'perl', 'php', 'java', 'java', 'php' ); my %count; @array = grep { !$count{$_}…