サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
qiita.com/gold-kou
「Goのtime.Formatによるミリ秒切り捨て」と「MySQLのINSERTによるミリ秒四捨五入」で1秒の誤差が生まれた話GoMySQL 背景 2022年春頃にZOZOTOWNでログイン通知機能とログイン履歴機能をリリースしました。QAのフェーズにおいて、「ログイン通知で表示されるログイン時刻」と「ログイン履歴で表示されるログイン時刻」で最大1秒の誤差が生まれるケースがあることが判明しました。どちらの時刻もミリ秒までは表示しない仕様です。1秒とはいえ、これらの値が不一致なのは問題なので原因調査と対策をしました。 原因 ログイン通知で表示されるログイン時刻 ログイン通知で表示されるログイン時刻は、サーバがログインリクエストを受け付けた時の日時です。つまり、Goのアプリケーション上でのみ処理するデータです。アプリケーションでは、その日時を下のようにFormatし、ミリ秒を切り捨てます。 p
はじめに この記事ではgoroutineおよび関連性の高いsyncパッケージの基本知識や使い方をまとめます。 Goの基本的な文法はざっと触れたが、「goroutine」、「WaitGroup」、「channel」、「Mutex」などの言葉を聞いて全く心配ないとは言い切れない人向けの記事です。 残念ながら、メモリやCPU、プロセスなどのOSに近いところまでは踏み入れません。 goroutineは簡単だとよく聞きますが、そもそも並行処理そのものが難しいので1つずつ理解してきましょう! 本記事での動作確認環境は以下です。 Goでの並行処理 ネットワーク通信などで待ち時間の大きい処理を非同期に行いたい、直列で動作させる必要がない処理群を高速に終わらせたいなどを理由に並行処理を使うことが多いと思います。 Goではgoroutineと呼ばれる軽量スレッドを簡単に動かせます。 なぜ「軽量」か メモリ消費
はじめに 今更ながらDockerに入門したのでまとめます。 全てのコマンドの細かいオプションとかまではやりません。 Dockerコマンド体系はv1.13以降の新系です。 ここではクラスタ管理(KubernetesやSwarm)については対象外です。別記事でそのうちまとめます。 ※本記事は投稿された2018年08月08日時点の情報が主になります。 勉強背景 この記事から強い危機感を覚えました。 Dockerは世の中では当たり前の技術。せめて、少し触ってみて基本的な知識くらいは身につけなければ。。。。 TL;DR(5行) Dockerは既存のLinuxカーネル機能から成り立っている イメージを共有していろんな人がいろんなところで簡単にイメージからコンテナを起動できる Dockerコマンドでコンテナを1つ1つ命令する Dockerコマンドめちゃ叩くのはだるいからDockerfileで楽しちゃおう
はじめに GoのGC(Garbage Collection)を調べる中で学んだことをなるべく分かりやすく簡潔にまとめたものです。 GCのアルゴリズムやメモリ割り当てについてまとめています。 記事内で使われている「オブジェクト」という用語はGoにおいては適切でないかもしれませんが、説明のしやすさから使用しています。 概要を把握しやすいように単純化しているため細部は正確でない部分があります。 GC基本 用語集 前提となる用語です。 ルート ルートとは、オブジェクトが到達可能か(生存しているか)を判定するための始点です。 プログラミング言語にもよりますが、基本的にメモリのスタック領域がルートになります。 フラグメンテーション フラグメンテーションとは、使用可能なメモリが断片化し途切れ途切れになっている状態です。 フラグメンテーションになってしまうと、総量的にはメモリが空いていてもアプリケーション
はじめに gRPCという言葉自体はよく聞いていたのですが、「RESTと同じような立ち位置なんだよね?何が違うの?」という状況だったので調べてまとめてみました。 モダンな技術を採用している企業では、既にサービスで当たり前のように活用されている技術ですので、gRPCの基本レベルで自信無い方は目を通してみてください。 gRPCとは gRPCはGoogle謹製のHTTP/2を利用したRPCフレームワークです。 Protocol Buffersを利用し、データをシリアライズして高速なRPCを実現します。 (Protocol Buffers以外も利用可能ですが、デファクトスタンダードとなっているため、本記事ではProtocol Buffersを前提に説明します。) protoファイルと呼ばれるIDL(Interface Definition Language)にAPI仕様を記述します。 また、IDLか
はじめに GORMは公式ドキュメントがすごく良いのですが、途中から分かりづらかったり日本語訳が途切れたりしていたので、自分の理解向上のついでに構成を分かりやすくし全て日本語でまとめました。 よって、本記事は公式ドキュメントの焼き回しになります。 前提知識 ORMとは何かくらいは知っている SQLの基本知識 Goの基本知識 インストール
はじめに Goの標準パッケージのlogはシンプルで使いやすいのですが、機能が貧弱としばしば言われます。例えば、他言語では当たり前なログレベルなどの機能はあえて組み込まれていません。 本記事では、乱立するlogの外部パッケージの中で最も有名なパッケージの1つであるlogrusの使い方をまとめます。 インストール
はじめに Go言語のDBモックライブラリ(sqlmock)が体系的にまとまっている日本語ドキュメントが見つからなかったため、まとめました。 便利ですが、若干使い方に癖が強い部分(特に正規表現のところ)がありますので解説していきます。 ちなみにですが、私はGORMを使用しており、GORMに依存する部分も一部あるかもしれません。 sqlmockとは sqlmockは本物のDBの代わりにSQLドライバのような振る舞いをしてくれるモックのライブラリです。 テスト時に本物のDBを使う必要がなくなるため、「DBに入っているデータをバックアップ→テストに必要な前提データを挿入→テスト終わったらバックアップしたデータを元に戻す」みたいなことが必要なくなります。そのため、DBを使った関数のUT(IT)を手軽に高速にテストできます。 実際にデータが挿入されたり検索されたりするわけではなく、SQLドライバの返り
【Go×WAF】うほうほ!!gorillaを分かりやすくまとめてみた【mux/context/schema】Gogorilla はじめに Goの有名な軽量WEBツールキットであるgorillaをまとめます。 ツール毎にリポジトリが切られているため、そもそも使用しない機能はインストール自体不要ですしイメージも軽くなります。 本記事ではgorilla/muxとgorilla/contextとgorilla/schemaみを対象にします。 gorilla/mux gorilla/muxはルーティング機能を提供します。 インストール
はじめに 今までなぁなぁにしてきたRedisをいまさらながらに勉強してまとめました。 Redisって聞いたことあるけど中身はよく知らないとか、プロジェクトでなんとなく使っているけど実はよく分かっていないなどの人向けのページです。 NoSQL Redisの前にまずはNoSQLから。 背景 ビッグデータの登場により、従来のRDBだけでは充分な処理ができなくなってきたことがNoSQL登場の背景にある。 ビッグデータの定義は色々ありますが、ここでは3V(Volume/Velocity/Variety)を満たすものをビッグデータと呼びます。 VolumeとVelocityの問題を解決するためにNoSQLが必要 Volume(大量データ)とVelocity(秒単位で大量データ)に関する問題を対処する場合、スケールアップ(メモリ増加、コア数増加、SSD化)とスケールアウトの2通りの方法がある。 しかしな
はじめに 今度入社する会社では、JenkinsでなくCircleCIを使っているということなので、1から勉強した内容を初心者向けにまとめました。 また、最新バージョン2.1(2018/12時点)の新機能も本記事では触れています。 ※2019/8/8追記 Slack連携に関する記事も書きました。 SlackでCircleCIからカバレッジレポート通知を受け取る設定手順 ※2020/4/2追記 https://twitter.com/CircleCIJapan/status/1245253320551399424 CircleCIさんより、本記事を紹介いただきました! なお、本記事は初回投稿時(2018/12)の情報がメインのため、ご留意いただきますようお願いします。 前提知識 CI/CDに関する入門レベルの知識 ymlファイルに関する入門レベルの知識 コンテナに関する入門レベルの知識 未学習
はじめに Gitをそこそこ使いこなすにあたって必要な基礎知識やコマンドをまとめました。 Gitは少しかじったけど挫折したくらいの人が対象レベルになるかと思います。 当方、Subversionをまともに触ったことないゆとり世代なので集中管理型との違いとかはよく分かりません。 一部諸事情のため、XXXXXで情報を隠蔽しています。 この記事長いです。。。 Gitとは 分散型バージョン管理システム。 今時ソースコードなどをバージョン管理するってなったらGitを使うことになるでしょう。 GitHub(Enterprise含む)とかGitLabとかGitBucketとかBitBucketとかGitのサービスは複数ありますが、どれを使うかはチーム事情や会社事情などから決まる。 ローカルにリモートリポジトリの複製を作成するため、複数人が各々のローカルで変更履歴を利用して自由にファイルの編集やローカルコミッ
はじめに PythonのWebアプリケーションフレームワークでDjangoと2トップの人気を誇るFlaskについてまとめます。 両者の比較とかはしません。というより私自身がDjango書いたことないので分かりません。。。 2018年4月よりバージョン1系が遂にリリースされました。今から始めるのにちょうどいい感じです。 前提知識としてPython文法の基礎知識が必要です。不安な方は自分の記事ですが、こちらの記事などをご確認ください。 私はこれまでFlaskを使ってAIを使って自分の顔がジャニーズ系かどうかを判定するWebサービスを作ってみたなどのアプリケーションを作ったことがあります。 Flask特徴 メリット 覚えることが少ない ドキュメントが豊富(英語) デメリット 大規模開発には向かない(マイクロフレームワークだから) 日本語ドキュメントが不足(特にバージョン1系) MVTモデル Fl
追記 (8/8 22時追記) Gigazine様に特集していただき、たくさんのアクセスを受け、サイトが一時停止してしまったことをお詫び申し上げます。急遽、スペックをt2.large(コア2個、メモリ8GB)に引き上げました。 (8/19 11時追記) さすがにリクエストが落ち着いてきたので、インスタンスタイプをt2.smallへ変更しました。 (12/2 14時追記) コンスタントに利用いただいておりましたが、月々5000円弱サーバー維持にお金がかかるの個人では苦しいため、申し訳ありませんが、サービス停止とさせていただきました。 いままで、ありがとうございました。 はじめに 学生時代に研究をしていた以来3年ほど遠ざかっていたAIの分野で何か自作アプリを作って公開してみたいと思い、約三ヶ月かけて遂にリリースしました。そもそも自作アプリのサービス公開が初めてで、たくさん勉強になったことがあった
はじめに 最近、自分のWindowsでのPython開発環境をリニューアルしたのでそのときの手順をメモしておく。 Pythonのインストールからプロジェクトを作るまでをまとめました。 OSはWindows10です。多分7や8でも問題ないはず。 ※(2018/4/15追記) MacOS10.13.3でもほぼ同じような感じで環境構築できました。 ※(2018/7/5追記) ここでの「初心者にとってベスト」とは、pyenvとかコンテナとかでバージョン管理すのは考えないということを意味します。つまり、単にPythonの文法や面白さを学ぶにあたってそこらへんで躓いたり苦手意識が付くのが勿体無い気がするので、そこは飛ばしていますということになります。 Anacondaインストール Anacondaとは、Python自体の他にSciPyやNumPyなどのデータサイエンス系の必要パッケージもまとめられたパ
はじめに Pythonの対象バージョンは3系です。(2系でも通じるものは多いはず) 対象読者レベルは他言語を軽くでも触ったことある人です。「あー、Pythonだとこれはこう書くのねー」が網羅的に分かるようにまとめたつもりです。 ここではWEBアプリケーションフレームワーク(DjangoとかFlaskとか)に関してはほぼ触れません。 @shiracamus 多くの有益なコメントと編集リクエストありがとうございます。 Python開発環境構築 下記(私の記事ですが)はWindowsでの構築となっていますが、Macでもほぼ同じ通りにできます。 今からWindowsでベストなPython開発環境を構築する手順 Pythonについて 今最も勢いに乗っているプログラミング言語。 オブジェクト指向。Pythonでは全てがオブジェクト。 動的言語(スクリプト言語)のため、変数宣言時に型を明示的に定義しない
【OpenStack入門】OpenStackを0から理解するためのページ!主要な新旧コマンドもまとめました。【兼OPCEL対策】openstackOPCEL はじめに クラウドで有名なOpenStackはまだまだ枯れてきたとまでは言えませんが、主要機能に関してはだいぶ成熟してきました。 今から始めても全然遅くない、むしろ今から始めても旬(?)な技術なので、まだな方はこのページで概要を理解していただければなと思います。 当方、バージョンはKiloからOcataまで触っております。 ところどころイメージを掴みやすくするために雑な絵がありますがご容赦下さい。 コマンドのオプションは必須オプションとよく使う(使いそう)なものだけ書きました。 バージョンによって無効なコマンドもありますのでご注意下さい。旧コマンドはmitakaバージョン、新コマンドはpikeバージョンのリファレンスを参照してまとめま
はじめに 機械学習ライブラリのデファクトスタンダード的存在であるscikit-learnの"教師なし学習"とその定量的評価手法をまとめる。 数学レベルでの理解は途中で挫折したため、まずはライブラリから概要を理解しようと思いまとめました。 教師あり学習編はこちら 前処理編はこちら 教師なし学習とは 教師なし学習とは、入力データのみが与えられ正解ラベルがない状態で学習を行う手法である。 教師なし学習を使う場面は以下。 正解ラベルを用意できないケース 教師あり学習や他の教師なし学習の前処理をするケース データを可視化するケース データをなんとなく理解したいケース 教師なし学習は、次元削減とクラスタリングの2つの大きなタスクに活用される。 次元削減 次元削減とは、データを表現する特徴量の数(次元数)が多すぎる場合に、その特徴量の数を減らすことである。 本記事では、アルゴリズムとして以下をまとめる。
はじめに 機械学習ライブラリのデファクトスタンダード的存在であるscikit-learnの"精度を高めるための前処理"をまとめる。 数学レベルでの理解は途中で挫折したため、まずはライブラリから概要を理解しようと思いまとめました。 教師あり学習編はこちら 教師なし学習編はこちら 前処理とは 本記事で対象とする"前処理"は、scikit-learnに入力データを食わせるためにデータをNumPy配列(多次元配列)に変換する方法ではなく、NumPy配列データに対して精度を向上させるための処理のことを指す(一部one-hot-encodingは除く)。したがって、本記事でまとめる前処理を実施しなくてもひとまずは機械学習アルゴリズムを動かせる。しかし、実際の業務や研究では精度を求めることは必須なので、そのステージにあれば本記事は役立つかと思います。 前処理は、データの全ての特徴量に実施するのではなく一
はじめに いきなり質問ですいません。 「アジャイルの反対」ってなんでしょう? ・・・ ・・・ ・・・ もし、「ゆっくり」とか「ウォーターフォール」みたいな単語が頭に浮かんだ方はこの記事で学べることが多くあるかもしれません。 質問の答えは最後に記載しています。 参考文献 アジャイルソフトウェア開発宣言 アジャイル宣言の背後にある原則 スクラムガイド スクラム入門 Scrum Boot Camp 認定スクラムマスター研修 アジャイル スクラムの前にアジャイルに触れておく。 アジャイルとは アジャイルとは、より良い解決方法を探している状態である。 "状態"なので、よくある「アジャイル開発をやろう!」というのはおかしくて、振り返ってみて「あれはアジャイルだったなー」ってなるものだ。"Don't just do agile, be agile."という名言があるくらい。だから、極端な事を言うと、より
このページを最初にブックマークしてみませんか?
『@gold-kouのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く