🤖

🤖

:gijutsu_burogu:

2020-01-01から1年間の記事一覧

情報検索に興味が沸いたのでGoで検索エンジンを自作している

この記事はRecruit Engineers Advent Calendar 2020の11日目の記事です。 TL;DR 対象読者は転置インデックスを少し知ってるくらいの検索初心者です 検索エンジンに興味が湧き、仕組みを知るためにGoで自作しています 自作検索エンジンのAnalyzerとIndexerとS…

Goでビットベクトルを利用してSetを実装する

はじめに プログラミング言語Goを読んでいて、ビットベクトルを利用してSetを実装するところがありました。 シンプルかつ思いつきもしない方法だったので紹介します。 プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)作者:Alan A.A. D…

Goでトライ木を実装して共通接頭辞を可視化する

作ったもの トライ木をGraphvizで可視化するものを作りました。 github.com $ brew install graphviz $ go get github.com/kotaroooo0/mute $ vi data.txt $ mute -s data.txt | dot -T png -o sample.png # data.txt keynote keycase king kingdom macbook …

テックブログ書いたメモ

engineer.recruit-lifestyle.co.jp

GoからDocker上のElasticsearchに接続する際にネットワークのSniffingでハマった

問題 Docker で Elasticsearch を起動します。 services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0 environment: - discovery.type=single-node ports: - 9200:9200 - 9300:9300 以下の Elasticsearch クライアントライ…

Goを体系的に学んでいるメモ その1

Go

はじめに プログラミング言語 Go の研修を受講しているので学びをメモしていきます。 プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)作者:Alan A.A. Donovan,Brian W. Kernighan発売日: 2016/06/20メディア: 単行本(ソフトカバー) …

ISUCON10予選敗退しました、次は決勝行くぞ

はじめに 社の同期 3 人の「スタンプラリー」チームで ISUCON10 予選に出場しました。 最終スコアは 1727 点で予選敗退しました。 50位くらいでした。 本戦出場ボーダーが2158点なので、あと1,2手というところでした。 やったこと(チームで) 予選前 ISUCON9 …

3ヶ月のブログメンタリングを通して学んだこと考えたこと

ブログメンタリングについて 6, 7, 8 月と @kakakakakkuさんのブログメンタリングを受けました。 週 2 で記事を投稿するルールを定めて、もし達成できない時は次の週に足りない分を追加で書きます。 例えば、食中毒になり 1 記事も書けなかった週がありまし…

Goのお作法を学んでセルフコードレビューしてみた

Go

はじめに 業務以外で Go でツールを作ったり、Twitter Bot を作ったりしています。 しかし、コードレビューを受ける機会がなく良い Go の書き方が身につかないのではと不安になりました。 そこで、さまざまな記事を参考にしてコードの書き方を学んでみました…

ISUCON: DBのデータをメモリに載せて高速化する

はじめに やり方 どのデータをオンメモリに載せるか どう実装するか 1. グローバルで変数を宣言します。 2. 初期化処理/initializeでメモリに載せます。 3. SQL を叩いて取得している部分をメモリに載せた Map から取得するように変えます。 おわりに 参考 …

CI上でのマルチステージビルドにおけるキャッシュ活用の銀の弾丸を見つけたかもしれない(Buildx, BuildKit)

銀の弾丸 以下でキャッシュ活用、ビルド、Push をよしなに行ってくれます。 $ docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS # Docker Hub や ECR にログイン $ export DOCKER_CLI_EXPERIMENTAL=enabled # Buildxを有効にする $ docker buildx create…

Dockerfileを書かずにBuildpacksで圧倒的に軽量なDockerイメージを作成する(539MB->245MB)

はじめに 2018 年 10 月に Cloud Native Buildpacks は Cloud Native Computing Foundation (CNCF)に Sandbox として受け入れられました。 CNCF には Kubernetes, Prometheus, Envoy, Fluentd など有名プロジェクトも多く受け入れられています。 Buildpacks …

VagrantでISUCONを練習しようとしてハマったことと計測の準備

はじめに これを利用して、ISUCON の練習をします。 github.com 以下でベンチマーカーを動かすところまでできます。 $ git clone https://github.com/matsuu/vagrant-isucon.git $ cd isucon9-qualifier-standalone $ vagrant up $ vagrant ssh # VM上で以下…

Docker で立てた CI で Docker Build する -Docker in Docker と /var/run/docker.sock

はじめに CI では毎回まっさらな環境でテストやビルドができます。 これには、多くは Docker が用いられています。 さらには、Docker で実現されたまっさらな環境でも Docker ビルドなど Docker を利用できます。 前提知識: Docker クライアントと dockerd d…

キャッシュのためにDockerビルドで中間イメージをタグ付けしレジストリにPushする

WHY: なぜ中間イメージをタグ付けするのか 今では Docker イメージの軽量化のためにマルチステージビルドは欠かせません。 ローカルでの実行では問題ありませんが、CI 環境などの dockerd が毎度変わる Docker In Docker(dind)では問題が起こります。 最終イ…

Twitter Account Activity API を使ってリプライ自動返信する(Go)

Go

概要 Twitter Account Activity API を使うことでリプライの自動返信をできます。 しかし、手順が複雑であり公式ドキュメントも分かりにくいと感じたため記事にまとめます。 リプライの自動返信には以下の二段階が必要です。 認証を行いアプリケーションを W…

Dockerイメージ分析ツール「dive」を利用してDockerイメージを軽量化する

はじめに Docker イメージサイズは小さければ小さいほど、Push と Pull の高速化につながり嬉しいです。 docker historyによってイメージレイヤーごとのサイズは分かりますが、どのレイヤーのどのファイルのサイズが大きいかは分かりません。 $ docker histo…

GitHub Actionsを例にCI環境でのマルチステージビルドのキャッシュの活用について🐳

はじめに 以前、CI 環境での Docker ビルドのキャッシュについて記事を書きました。 kotaroooo0-dev.hatenablog.com 前回の記事のようにマルチステージビルドでない場合は、1 Dockerfile 1 Cache で問題ありませんでした。 しかし、今では Docker イメージの…

docker-composeでdepends_onしても起動順を制御するだけで稼働順は制御されない問題

本記事での言葉の定義 起動: 動き始めること(例: PC の電源ボタンを押すこと) 稼働: 働きはじめること(例: PC が利用可能になること) はじめに 以下の Redis と MySQL を利用するアプリケーションの docker-compose を考えます。 version: "3" services: app…

俺のコンテナ - libcontainerでコンテナを作ってみた

はじめに 仮想化は使いたいアプリケーションだけでなく OS も含めてまるごと動かす仕組みです。 これでは、ゲスト OS とホスト OS が同じ Linux であればカーネルなどを重複してロードすることになり無駄にメモリを消費してしまいます。 OS のカーネルはホス…

システムコールとGo

Go

この記事の内容 システムコールとは Go ではどうシステムコールを呼び出しているか システムコールとは システムコールとは、特権モードで OS の機能を呼ぶことです。 アプリケーションでは通常、ユーザーモードであり CPU の利用が制限されています。 その…

読み込み、書き込みされるまで処理をブロックするチャネル(Go)

はじめに Go ならわかるシステムプログラミングを読みました。 Goならわかるシステムプログラミング作者:渋川 よしき発売日: 2017/10/23メディア: 単行本(ソフトカバー) 僕は本で読みましたが、元々は Web で連載していたみたいで無料で読むことができます…

GitHub ActionsでのDockerビルドをキャッシュで高速化する

はじめに GitHub Actions 上での Docker イメージのビルド高速化について情報が少なかったので自分なりに調査してみました。 Jenkins のように自分でホストするのではなく、GitHub Actions や CircleCI ではステートレスにジョブが行われます。 そのため、ロ…

Goでのストリームの使い方と使うべき理由

Go

はじめに Go ならわかるシステムプログラミングを読みました。 Goならわかるシステムプログラミング作者:渋川 よしき発売日: 2017/10/23メディア: 単行本(ソフトカバー) 僕は本で読みましたが、元々は Web で連載していたみたいで無料で読むことができます…

問題を解いて学ぶio.Writerとio.Reader(Go)

Go

はじめに Go ならわかるシステムプログラミングを読みました。 Goならわかるシステムプログラミング作者:渋川 よしき発売日: 2017/10/23メディア: 単行本(ソフトカバー) 僕は本で読みましたが、元々は Web で連載していたみたいで無料で読むことができます…

似ている文字列を検索したい(編集距離、レーベンシュタイン距離)

課題 入力に対して、文字列集合の中から最も似ている文字列を返したい。 例 ["gmail", "googlemap", "googledrive", "dockerhub", "github"]という集合がある。 "mail" と入力されると "gmail" が返ってきて、"docker" と入力されると "dockerhub" が返って…

Dockerfileを正しく書けるように指摘してくれる静的解析ツール「hadolint」

サイボウズ社の Docker 研修資料を見ていると Dockerfile の静的解析ツールが紹介されており、どれくらい解析するのか興味が湧いたので試してみました。 hadolint エラーを事前に検知してくれたり、よりよい Dockerfile の書き方を指摘してくれます。 Haskel…

Goの自前テストモックでメソッド呼び出し回数を数える

はじめに Go では、インターフェースを使い DI することで実装を置き換えることができます。 例えば、テストで外部 API を使う場合に実際のリクエストを飛ばさないようにテスト用に実装を置き換えたりします。 Go では特別なライブラリを使うことなく、標準…

Dockerイメージのビルドで使うキャッシュの種類 - レイヤーキャッシュ、BuildKitの--mount=type=cache

はじめに Docker イメージをビルドしていく上で、イメージサイズ軽量化や並列実行はどこの環境でビルドするか気にしないで行うことができました。 しかし、キャッシュの仕組みは環境によっても異なるなど複雑です。 本記事では、キャッシュの種類について紹…

DockerイメージのビルドをBuildKitで並列実行し高速化する

なぜ、ビルドを早くする デプロイ時間の短縮 AutoScaling 等でのインスタンスの追加時間の短縮 CI のビルド時間が短縮 どう、ビルドを早くする 並列性を上げる ビルドキャッシュを効かせる 並列性 本記事では、並列性のみに触れる。 BuildKit を使用する Doc…