今川館

都内勤務の地味OLです

俺的embulkでMySQLにデータを入れるときの注意点

最近、embulkをいじる機会があって、色々と思うところがあったので書いておく。 今回わたしが使ったケースではembulkのINPUTはバッチが作ったJSONL形式のファイルで、OUTPUTがMySQLのDBである。 OUTPUT先のDBのデータはAPIから専ら参照用に作られ、APIがその…

Goはnilをレシーバーにメソッドを呼んでもnil pointerで落ちない

Go

Goはヌルポしないという事実に驚愕してしまった もう言いたいことはタイトルがすべてなのだが、Goはnilからメソッドを呼んでもnil ponterでパニックになったりしない。以下のGoのプログラムでmain()関数のローカル変数fはnilだが、f.IsNull()などのメソッド…

コードフォーマッター「black」を使ってPythonのコードの整形で悩むのをやめる

Pythonにもblackというgofmtみたいなコードフォーマッターがあった Goを書いていると、gofmtコマンドを叩くとインデントやTrailing whitespaceなどを勝手に直してファイルを書き換えてくれる。 わたしがPythonを使ってきてGoを覚え始めたときにこれは便利だ…

mapの競合状態のはなし

Go

目次 mapの競合状態とは何か? どうしたらいいのか? sync.RWMutexを使う 共有ロックと排他ロック sync.Mapを使う atomic.Valueを使う ロックとCompare and swap さいごに 感想 mapの競合状態とは何か? GoのmapはあるgoroutineでReadしているときに別のgoro…

NULLを許可する列をScanするときの注意点

Go

NULLを許可する列をScanするときは要注意 database/sqlでMySQLのデータを取得するとき、NULLを許可する列の扱いがちょっと要注意だった。まず、こういうNULLを許すテーブルにデータを入れる。 CREATE TABLE `students` ( id INT PRIMARY KEY, active TINYINT…

コードレビューのはなし

エンジニアをやっているとコードレビューをしたり受けたりすることが日常的ですが、レビューは人間関係に絡むのでお悩みの職場も多いのではないでしょうか。そんな中、ぼやっと思ったことをここに書いておきます。 人間関係が浅いうちはレビューコメントにタ…

Goのnilのmapやスライスで許されない操作

Goのmapやスライスを操作するコードを書いていて、やたらとレビュー指摘をもらったのでここにダメな操作と大丈夫な操作をメモしておく。例えば、こういうコードは余計なことをしているので直しなさいという指摘をもらった。 package main import "fmt" func …

docker-composeで tty: true にしてデーモンがいないコンテナを動かし続ける

docker-compose.ymlを適当に書いてPythonを動かすDockerコンテナを作りたいなと思い、docker-compose.ymlとDockerfileを揃えたが docker-compose up してもプロセスが終わってしまう。 $ docker-compose build ... Successfully built 95a7c527a5d9 Successf…

poetryのバージョンを指定する記号 "^" ハット/サーカムフレックス/キャレット

Caret requirements (キャレット要件) poetryのpyproject.tomlでPythonパッケージのバージョンを指定する記号の意味がよくわからなくて調べた。特に頻出して意味がわからなかったのが [tool.poetry.dev-dependencies] coverage = "^4.5" flake8 = "^3.5"この…

AWS RDS Aurora MySQL で膨大な件数をSUMしてSELECT INSERTするときのプラクティス

データコンバートは楽しい この度データコンバートの仕事が来たので、そのときに行ったチューニングのことをここにメモしておく。 データコンバートの仕事は何度か経験があるが、チューニングに結構頭を使う仕事なので好きな方だ。 さて、前置きはほどほどに…

気をつけよう!あなたが老害化しているかどうか確かめる基準

こんばんは。皆さんは老害が嫌いですか? 今日は老害になりたくない人のために、わたしが見つけた老害化しているかどうか確かめる基準をご紹介します。 相手に言葉合わせをさせる それは、「相手に言葉合わせをさせていたら危ない」という基準です。 誤解し…

現代アート 『KATUHIKO DESUYO』

見切れててよくわかりません 真っ白な徳利の口がカツヒコの鼻にかかっている様が富士の日の出に匹敵する景観です ほおをつまんで難しい顔をしている 遠藤周作でないことは脇にある徳利から明らかだ 小指を立ててビールを飲む それがまちやスタイル

あなたは今週何をしましたか?わたしは不確実性と闘ってました

一年前は、自分が必要だった 一年前に転職してきたときは、自分が必要とされている実感があった。 あの頃は積み上がったPython3とGoのコードベースをハンマーで叩き割り、火炎放射を放ち、焼畑に種を蒔き、苗を育てる段階だった。 ジョブキューに詰まるバッ…

テストで誤差を許容するアサーション assert.InEpsilon と assert.InDelta

Go

Goのassertを使って「だいたい結果は100」みたいなテストしたいときはassert.InEpsilon。

Goのimageモジュールを使って絵を描く

Goにはimageという画像を処理するライブラリがあるので(やり方を知っていれば)簡単に絵が描ける。 わたしは知見が無く丸一日かかってしまた・・

はじめてのwebアプリ⑤ ユニットテストを追加

この記事のソースコードはこちら ユニットテストを追加する頃合いに 文字列とファイルに対応した文字数カウント機能を作ったところで、これらのユニットテストを作る頃合いになってきた。 また、リクエストを受け取ってレスポンスに書き込むハンドラ関数のテ…

はじめてのwebアプリ④ アップロードファイルの扱い方

ファイルを読み込んで文字数を数える機能を追加する。 bufio.Reader.ReadRune()を使って対処。

はじめてのwebアプリ③ JSONで結果を出力する

はじめてのwebアプリのバグを直したところで、今度はJSONで結果を返す機能も追加してみる。 json.Marshalは構造体の公開フィールドしか出力してくれないので注意。

はじめてのwebアプリ② unicode/utf8で文字数を数える

文字数カウントのwebアプリは、以下のバグがあるので直す。

はじめてのwebアプリ① net/httpのHandleFunc

Goも基本的な構文をだいたい覚えたので簡単なwebアプリを作ってみる。

Pythonでサロゲートペア -- ほっけの逆襲

Pythonで「ほっけ」という漢字をprintに渡すとどうなるか試した。 「ほっけ」はサロゲートペアの文字である。 Python2は寛容に処理してくれるが、Python3は原則としてサロゲートペアを許さないので、エラーオプションに許可するよう指定する。

サロゲートペアの入った文字列を処理する場合の注意点

Goは文字をUnicodeコードポイントで扱い、runeというデータ型を用意している。 unicode/utf8モジュールを使うとサロゲートペアが含まれる文字列でも安全に処理できる。

go installを使え -- QCon London 2016

「2016年版Goのベストプラクティス」という記事を読んでいてgo installを使うことが推奨されていることを知った。

ラベル付きbreak, continue, goto

Goのプログラムを見ていて、何年ぶりか分からないくらい久しぶりにラベル付きbreakを見かけたので、せっかくなので試した。

runtime.MemStatsでメモリ使用量を調べる&pprofモジュール

Goで実行環境のメモリ使用量を調べるときはruntime.MemStatsが使える。 また、pprofモジュールを使うとより視覚的なビューを利用できる。

ポインタが分からない③

ポインタのことがやっと分かってきた感ある

ポインタが分からない②

ポインタのことがどうしても分からないのでまた考えてみたが、単純に「ポインタを使うと同じものを指す」とだけ覚えておけば良いんじゃないかと思うようになった。

ポインタがわからない①

ポインタがわからない。代入と関数を使った場合で色々試して(ちょっとは)理解を深めた。

Goのflagパッケージを使ってサブコマンドを作る

GoでPythonのargparseみたいなサブコマンドを処理したい場合はflag.NewFlagSetというやつを使えば良いらしい。 Goでのやり方はこのページでドン!なんだけど。忘れないようにメモ。 [http://blog.ralch.com/tutorial/golang-subcommands/:title]

ANSIエスケープコードを使ってコンソールアニメーション

『プログラミング言語Go』のスピナー 予約語「go」を使うとメインgoroutineと別のgoroutineで動かせる 『プログラミング言語Go』の「ゴルーチンとチャネル」という章を読んでいて、メインルーチンの処理中にスピナーを回すサンプルコードが出てきたので自分…