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

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

2021-02-01から1ヶ月間の記事一覧

【Go】ネストされた構造体の値を書き変える

Go

stackoverflow.com ここの内容は大体上で言ってることとなってます。 type P1 struct { list *[]P2 } type P2 struct { node int } P1がP2のスライスへのポインタを持っている場合にP1のレシーバでP2が持つ値を書き換える方法。割とハマったのでメモ。 packa…

【Python】URLだけを抽出する関数

引数で渡ってきたファイルを読み込んでテキストからURLを抽出する関数。 www.ipentec.com URLって正規表現で取れるんだって思った。htmlなりmarkdownなりtextなりをfindでpythonに渡しつつ実行すれば中のURLだけを抽出して出力することが可能なプログラムが…

【Go】GolangCI-LintをGHAに組み込む

Go

GolangCI-Lintとは GolangCI-Lint とは、 Golang の Linter を一元管理するためのツールです。Goはliter一つとってもたくさんあってそれを組み合わせることでCIの信頼度を上げるという珍しい形を推奨しています。そのためこのような一元管理ツールが便利にな…

【Elasticsearch】集計関数でカウントを取る

GET /bank/_search { "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state.keyword" } } } } SQLでは、上記の集約は次の考え方と類似しています。 SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC

【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 フ…

【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は、…

【Linux】ImageMagickのビルド

コンパイル bzip2 cd bzip2-1.0.6 Makefile中の CC=gccを CC=gcc -fPIC に変更します。あとはmake(なぜかconfigureはないです) make; make install cd ../ libpng cd libpng-1.6.16 ./configure make make install cd ../ libjpeg cd jpeg-9a ./configure ma…

【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)でブロックする。ローカルの検証だがコネクションはこんな感…

【Linux】ImageMagickリサイズTIPS

ImageMagickでリサイズの組み合わせ 縦横比を維持せず、指定されたサイズに伸縮 convert -scale WxH! inputfile outputfile 縦横比を維持して、両側をクロップ convert -resize WxH^ -gravity center -crop WxH+0+0 [+repage] inputfile outputfile 縦横比を…

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

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

【Go】文字列操作Tips

Go

文字列の結合 s := "ABCDEFG" s = s + "hijklmn" fmt.Println(s) // -> "ABCDEFhijklmn" 文字列の 大文字、小文字変換 s = "ABCDEFGhijklmn" fmt.Println(strings.ToUpper(s)) // -> "ABCDEFHIJKLMN" fmt.Println(strings.ToLower(s)) // -> "abcdefhijklmn"…

【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へ出力するみたいな設定を行いたいケース。 そのまま書くと以下のようになるかなと思って書いて実行するも上手…

【Go】Golangで型情報を調べる

Go

Golangで型情報を調べる package main import ( "fmt" "reflect" ) func main() { fmt.Println(reflect.TypeOf(1)) // int fmt.Println(reflect.TypeOf("")) // string fmt.Println(reflect.TypeOf([]string{})) // []string fmt.Println(reflect.TypeOf(tru…

【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…

【Ansible】ansible-docコマンド

使い方 helpを見るとこんな感じになっています。 *バージョンは2.4.3 bash-3.2$ ansible-doc -h Usage: ansible-doc [-l|-s] [options] [-t

【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…

【Ansible】そこそこ使うコマンド

バージョン確認 # ansible --version インベントリに記述されているホスト群を参照 # ansible node1 --list-hosts モジュールを確認 # ansible-doc -l #すべてのモジュールを確認 # ansible-doc -l | grep #モジュールを探す # ansible-doc [モジュール名] #…