コピペコードで快適生活

明日使えるソースを自分のために

シェルでヒアドキュメントを使う

そういればやり方知らなかったのでメモ。 # これで標準出力できる。 cat << EOS hoge fuga piyo EOS # ヒアドキュメント内で変数展開できる。 # 標準出力になるので変数に代入したいときはバッククォート使う。 params=`cat << EOS { "login_id": "${LOGIN_I…

Javascriptのオブジェクト指向について

Javascript書くときに雰囲気でオブジェクト指向してたので復習。 function構文使う // 関数オブジェクトはnew演算子でインスタンスを作ることができる。 // インスタンスは、this.xxxで定義したプロパティにアクセスできる。 const Human = function(name){ …

db:migrateで巨大なテーブルへadd_column+default値設定をする

Rails + PostgreSQL環境での話。 数千万行あるような巨大なテーブルに対して、add_column+default設定をまとめて設定すると、サービスを止めてしまうほどに長時間テーブルロックかかってしまう。AccessExclusiveLockなのでSELECTも通らない。 原因は、ALTER_…

Grape+Rspec環境でAPIをテストする

既存RailsアプリにRspecを入れる - コピペコードで快適生活 の続き。まず、JSONのテストを簡単にするgemを入れる。 gem 'json_expressions' テストコードはこんな感じで書ける。 require 'rails_helper' require 'json_expressions/rspec' describe "GET api…

capistranoでデプロイされているブランチのコミットハッシュを確認する

cat ${PATH}/repo/refs/heads/${BRANCH}

Nodejsでのバイナリの取り扱い

よくわかっていなかったので整理した。 Bufferオブジェクト Node.jsではバイナリデータはBufferオブジェクトで扱う。 ArrayBuffer 実際のメモリに格納されたバイナリデータを配列で表現したもの。読み込み専用。 Uint8Array バイナリデータを8bitごとに区切…

AWS NLBとコネクションプールについて

AWS

NLBの後ろに1台足してもそっちに全然クエリが流れてこなかった。 間違っているかもしれないけど、多分こういうことじゃないかな。 コネクションプールについて 接続確立は負荷を伴うので、一度確立した接続を維持して、その中でクエリ発行することで負荷を軽…

シェルスクリプトで対話的に選択肢を選ばせる

よく忘れるのでメモしておく。 # # 入力値チェック/セット # echo 'CloudFrontログを抽出します。' echo '対象ドメインを番号で指定してください' echo ' 1) a.example.com 2) b.example.com 3) c.example.com ' read num case ${num} in 1) DOMAIN='a.examp…

PostgreSQLでプロセスとロック状況を確認する

## 実行中のSQLを確認する。 SELECT * FROM pg_stat_activity; ## 実行中のSQLを確認する ## スロークエリとか主に見る分だけ SELECT pid, query_start, substr(query, 0, 80) AS query FROM pg_stat_activity WHERE state='active' ORDER BY query_start; #…

Imagemagickコマンドメモ

## 黒塗り / 中央寄せ / リサイズせず正方形に整える convert -background black -gravity center -extent 960x960 tamanegi.png _tamanegi.png ## 白色を透過に変える(transparent) / 白から5%くらいずれていても透過させる(fuzz) convert input.png -fuzz …

sidekiqをGracefulShutdownする

# >= 5.0.0 kill -TSTP [worker_pid] # < 5.0.0 kill -USR1 [worker_pid] # すると、 # 該当のworkerにキューが入らなくなる。 # psコマンドでみたときに stopping がつく。 sidekiq 4.2.10 app_name [0 of 8 busy] stopping # busyが0になったら、-TERM送っ…

goenv環境でdepを使うメモ

Go

QuickStart まずはこれでgoenvをインストールする。 http://kinosuke.hatenablog.jp/entry/2019/04/11/104837 # depのインストール # ※GOPATH以下にインストールされる go get -u github.com/golang/dep/cmd/dep # goenv環境でやるとdepコマンドのパスが通ら…

RspecでSQLやRailsのログを出力したい

こんな感じで # spec/rails_helper.rb # 略 Rails.logger = Logger.new(STDOUT) # Rails.loggerを出す ActiveRecord::Base.logger = Logger.new(STDOUT) # SQLログ出す RSpec.configure do |config| # 略 end ※STDOUTは組み込み変数 STDOUT.puts "hogehoge" …

GoModulesを使ってパッケージ管理する

Go

QuickStartメモ # プロジェクトディレクトリを掘る mkdir -p github.com/kinosuke01/gin-tutorial cd github.com/kinosuke01/gin-tutorial/ # 初期化する → go.modというパッケージリストを保持するファイルができる go mod init github.com/kinosuke01/gin-…

aws-cliで複数のプロファイル設定を持つ

AWS

複数のAWSアカウントを扱うことになったので、aws-cliのプロファイルの使い方をメモしておく。 # 設定やプロファイル一覧を見る cat ~/.aws/config cat ~/.aws/credentials # デフォルトの設定をする aws configure AWS Access Key ID [None]: xxx AWS Secre…

Goことはじめ(並列処理)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0005?page=1 より学んだことメモ。 package main import ( "fmt" "log" "net/http" "sync" ) func main() { wait := new(sync.WaitGroup) urls := []string{ "https://www.example.com", "https://www.example…

Goことはじめ(net/httpパッケージ)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0004?page=3 より学んだことメモ。 hello worldを返すだけのhttpサーバ package main import ( "fmt" "net/http" ) // // http.ResponseWriterがレスポンスデータ // *http.Requestはリクエストデータ // func…

SELECT文の評価順序メモ

たまに「どうだったっけ?」と忘れてしまう時があるので。 https://qiita.com/suzukito/items/edcd00e680186f2930a8 よりメモ FROM ON JOIN WHERE GROUP BY HAVING SELECT DISTINCT ORDER BY TOP(LIMIT)

xmllintメモ

# 妥当性検証 xmllint --schema feed.xsd --noout feed.xml # 整形 xmllint --format feed.xml # インデントスペース4文字で整形 XMLLINT_INDENT=" " xmllint --format feed.xml

Goことはじめ(ファイルのRead/Write)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0004?page=2 より学んだことメモ package main import ( "fmt" "log" "os" ) // // ファイルの書き込み // func FileWriteFunc() { fmt.Println("ファイルの書き込み --------- ") // ファイルを生成 file, er…

Goことはじめ(JSONの取り扱い)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0004 より学んだことメモ package main import ( "fmt" "log" "encoding/json" ) // // 構造体にタグをつけることでJSON変換時の // ルールを定義することができる // 何も指定しない場合はpublicなフィールド…

goenvインストールメモ

Go

# インストール $ git clone https://github.com/syndbg/goenv.git ~/.goenv # ~/.bash_profile に追記 export GOENV_ROOT="$HOME/.goenv" export PATH="$GOENV_ROOT/bin:$PATH" eval "$(goenv init -)" # 反映 source ~/.bash_profile # 使えるバージョン確…

Goことはじめ3

Go

第3章 型システム―型を用いた安全なプログラミング:はじめてのGo―シンプルな言語仕様,型システム,並行処理|gihyo.jp … 技術評論社 より学んだことメモ。 package main import ( "fmt" ) // // 型の拡張 // 同じ型でも違う意味を持つもの(同じintでもIDを…

geminaboxにgem登録する手順メモ

# 準備 gem install geminabox --no-ri --no-doc # Gemを作る gem build -V ***.gemspec mv ***-0.1.0.gem pkg/. # アップロードする gem inabox ./pkg/***-0.1.0.gem --host http://example.com

Goことはじめ2

Go

第2章 基本文法―覚えやすいコンパクトな言語仕様:はじめてのGo―シンプルな言語仕様,型システム,並行処理|gihyo.jp … 技術評論社 より学んだことメモ。 基本的な文法について package main import ( "fmt" "os" "errors" "log" // f "fmt" -> と記述する…

シェルのtestコマンド

シェルのtestコマンドの理解が怪しかったので、使い方をメモしておく。 #!bin/sh # $?==0 で正常終了 # 数値の比較 ## 1 == 1 test 1 -eq 1; echo $? ## 1 != 2 test 1 -ne 2; echo $? ## 1 < 2 test 1 -lt 2; echo $? ## 2 > 1 test 2 -gt 1; echo $? ## 1 …

Goことはじめ

Go

http://gihyo.jp/dev/feature/01/go_4beginners で学んだことをメモしていく。 はじめに # インストール brew install go # ./bash_profileの設定 export GOROOT=/usr/local/opt/go/libexec export GOPATH=$HOME export PATH=$PATH:$GOROOT/bin:$GOPATH/bin …

ActiveRecord::Base.transactionで並列で同じレコードを扱ったときの動きメモ

排他制御まわりがちゃんとわかっていなかったので整理。 Article.find(1).value # => 1 def inc row = Article.find(1) row.value = row.value + 1 row.save end # 同時並行処理する Thread.new { inc } Thread.new { inc } Article.find(1).value # => 2に…

シェルでクロス集計するメモ

クロス集計をBash(とawk)だけで実装した話 より学んだことメモ 処理の流れ 1.必要なカラムの抽出 2.クロス集計の行と列の要素を取り出す。 # クロス集計表の行になる部分を抽出してユニーク化&ソート cat table.csv | cut -f 1 -d , | sort -u > rownam…

初めの方のシェル芸勉強会メモ

初めの方の問題見たらとてもピュアだった。2012年10月27日 Hbstudy#38 ファイルの一括変換 # カレントディレクトリの中からUtilの文字をHogeに変えてDesktopに保存する。 # ※basenameはディレクトリ名を除外したファイル名を返すコマンド grep -r "Util" ./.…