yuralog

ひびのめもだよ!

Postgresでtimestampのformatを"current date+特定時間"にする

PostgreSQLでtimestamp型のクエリを作る際に、CURRENT_TIMESTAMPを利用したいが、timeだけ特定の時間に指定したい場合以下のように書く

CURRENT_DATE + TIME '15:00:00'

履歴データを時間指定で無効化したいクエリを手作業で挿入したときのメモ

INSERT INTO person (
    vid
    , name
    , age
    , enabled
    , start
)
SELECT 
    vid
    , name
    , age
    , FALSE
    , CURRENT_DATE + TIME '15:00:00'
FROM
    person
WHERE
    vid = 10
;

stackoverflow.com

www.postgresql.org

浮動小数点の比較(Go)

f := 0.1
f += 0.2
fmt.Println("f: ", f) // 0.30000000000000004
 
fmt.Println(f == 0.3) // false

丸め誤差の対策として、2つの浮動小数点は直接比較するのではなく、2つの数の差の絶対値を求めて十分に小さいことを確認する

fmt.Println(math.Abs(f - 0.3) < 0.0001) // true

Playground

https://play.golang.org/p/yMvcnY-dRGz

go-playground/validator(validator.v9) で struct の tag情報を取得する

go-playground/validator を使ったときにバリデーション対象のstruct tag(下のコードだとjson) の名前を取得したいときは RegisterTagNameFunc を使う。

下コードのLine 22の name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]jsonを変更して別のタグのフィールド名に変更する。 Field()で取得する。

バージョン

gopkg.in/go-playground/validator.v9 v9.27.0

サンプルコード

go-playground/validator(validator.v9) で struct の ...

使い捨てLinux環境でvimの最新版が使うためにソースからコンパイルしてインストールする

コンパイル&インストール後に /usr/bin/ にコピーしてしまうのが楽ちんだね(無心

git clone https://github.com/vim/vim.git /usr/local/src/
cd /usr/local/src/vim
# make distclean
make -j8
make install
cp src/vim /usr/bin

環境

CentOS Linux release 7.4.1708 (Core)

参考URL

https://gist.github.com/yevrah/21cdccc1dc65efd2a4712781815159fb#gistcomment-2695800

./aws/configの名前付きプロファイルの設定をミスった

./aws/config に複数のプロファイルを手書きする必要がある場面があって、↓のような記述ミスで --profile hogeしたときにエラーを発生させてしまった。

エラーの内容

NoRegionError: You must specify a region.

原因

./aws/config の名前付きプロファイルの設定に「profile」プレフィックスを付けるのを失念していた

  • NG
[default]
region = ap-northeast-1
output = json

[hoge]
region = ap-northeast-1
output = json
  • OK
[default]
region = ap-northeast-1
output = json

[profile hoge]
region = ap-northeast-1
output = json

参考

docs.aws.amazon.com

『Clean Code アジャイルソフトウェア達人の技』を読んだ

アスキードワンゴにより再出版された日本語訳 Clean Code を拝読した。

Clean Code アジャイルソフトウェア達人の技 (アスキードワンゴ)

Clean Code アジャイルソフトウェア達人の技 (アスキードワンゴ)

アーキテクチャの設計やドメインモデリングではなく、コードの細部についての本。

印象に残ったのは6章 オブジェクトとデータ構造#データ/オブジェクトの非対称性 の以下の文章。

手続き型(データ構造を使用するコード)は、新たな関数を既存のデータ構造に影響を与えずに追加することができます。オブジェクト指向の場合、既存の関数を変えることなく、新たな関数を追加することが可能です。

逆もまた成立します。

手続き型だと、新たなデータ構造を追加するには、既存のすべての関数を変えなければならないので、難しくなります。オブジェクト指向の場合、すべてのクラスを変えなければならないので、新たな関数を追加することは難しくなります。

複雑なシステムでは、新たな関数を追加することよりも、新たなデータ型を追加することのほうが多いでしょう。この場合には、オブジェクト指向がうまく適用するでしょう。逆にデータ型を追加するよりも、関数を追加することのほうが多い場合もあるでしょう。その場合には手続き型とデータ構造のほうがよく適合します。
熟練したプログラマなら、オブジェクト指向が常に優れているという考えが神話であることを理解しています。単純なデータ構造とそれらを操作する手続きのほうが必要とされる場合もあります。

手続き型で書いたほうが良さそうと感じるときのもやもやが言語化されて良き。

第11章 システム についてはサンプルコードが少ないせいか理解が充分でないので他書籍とかで補強しないと。

builderscon2018の以下の発表で本書で扱っていたような内容を話されていたのでタイムリー感があった。 builderscon.io

vim の外部コマンド実行で sort や cut を実行する

  1. visual-line-mode [V] に移行してコマンド実行したい部分を行選択
  2. commandline[:]に移行して!sort!cut -d" " -f3 などを追記する

f:id:yurakawa:20180624135142g:plain

参考