Niiko thought at that time

"Niiko はその時思った..."

AWS の DVA に合格した話

AWS Certified Developer - Associate (DVA-02) に合格したので、ふりかえりと言うか、むきなおりしようと思います。 前提 試験勉強を始める前の私の AWS 力についてはこのような感じです。 CLF と SAA を保持 SAA を取得してもうすぐ一年たつ 日常的に AWS を使用してはいるものの、SAA で勉強したが使ってないサービスは全部忘れた。自分でもびっくりするくらいの忘れん坊だった。 むきなおり(YWT) 勉強したこと・やったこと 試験ガイド まずは AW…

Continue Reading →

リクエストが多すぎて困る?

利用者の多いサービスを展開しているとリクエストが跳ね上がることも多々ありますよね。うれしい悲鳴とでもいいましょうか有難い面もあればレスポンスが遅い状態が続くとユーザーの不満足にもなるので、そうはいってられないこともあります。リクエストが増加する要因はサービスの性質によりいろんなケースがあると思いますが、予期せぬリクエストの増加はスケールが追いつかない時もありなかなか悩ましいものです。 今回はいくつかある対応のうちサーバ負荷を上げずにリクエストを捌く方法について考察を行いたいと思います。 インフラからのアプ…

Continue Reading →

AWS の CLF と SAA に合格した話

AWS Certified Cloud Practitioner (CLF-C01) と AWS Certified Solutions Architect - Associate (SAA-C03) に合格したので、何をどのように勉強したのか残しておく。 前提 試験勉強を始める前の私の AWS 力についてはこのような感じだった。 アプリケーション開発者として AWS を 5 年くらい利用 必要な情報を都度調べてやってきた 体系だった勉強をしたことはない 細かいところはインフラエンジニアに助けて…

Continue Reading →

ヒープソートを理解する

「データ構造とプログラミング」で習ったヒープソートの実装の動きが理解できてないので、頑張って理解しようぜっていう取り組みです。まずは、C の実装を Go で書き直したやつです。 とりあえず、28行目の (n - 2) / 2 の計算が何を意図してるのかが分かってないです。あと、配列一つだけで処理してるので理解が追いついてない。というわけで、一旦愚直に実装して追っ付けで理解していこうと思います。 ※配列と言ってますが Go なのでスライスです。 その前にヒープソートのざっくりした挙動ですが、次のようになり…

Continue Reading →

再帰呼び出しの動きを追う

再帰関数は関数内で自分自身を呼び出し、そのたびに大きな問題が小さな問題になるように異なる引数を渡していく。ということだが感覚的に把握できてないので動きをできるだけ噛み砕いてみようと思う。 内容的には以下について言及する 階乗計算(factorial) フィボナッチ数の計算(fibonacci number) ユークリッドの互除法を使った最大公約数の計算(greatest common divisor) 末尾再帰(tail recursion) 階乗計算(factorial) まずは次の階乗計算を行うコ…

Continue Reading →

高校数学の数列の復習的なやつ

春から『計算の科学と手引き』という授業を取るので数学の復習しようと思い購入した『東大の先生! 文系の私に超わかりやすく高校の数学を教えてください!』という本が面白いので自分なりに消化しとこうと思ってノートを取ることにしました。 数列(Progression) 数列とは、規則的に並べられた数字のことで、数列の最初の数字のことを「初項」、最後の数字のことを「末項」と呼ぶ。 規則的な差で並べられた数列を「等差数列」、規則的な比で並べられた数列を「等比数列」といい、詳細は以下でまとめていきます。 等差数列(Ari…

Continue Reading →

Goによるデータ構造 連結リスト

年始にデータ構造の記事を書いてから、はや二ヶ月が過ぎたので続きを書く。 テキストによると連結リストを学ぶにあたっての目標とポイントは以下の通りです。 連結リストに対するデータの探索、挿入、削除について基本的な操作を学ぶ。 連結リストと配列との操作効率の違いについても学習する 配列の特徴をまとめるとこんな感じ 配列は添字を使ってデータを挿入・探索する。 探索においては添字でデータへアクセスできるので、最初のデータと途中のデータと最後のデータとで同じ時間でアクセスできる。 配列のサイズは生成時に定義する…

Continue Reading →

Goによるデータ構造 はじめの一歩

このエントリは放送大学の『データ構造とプログラミング』のプログラム部分を Go で書こうと思って始めました。完走しないかもしれないので徐々に追記するスタイルでやっていきます。 データ構造 配列 なにはともあれ配列の定義方法です var a [10]int a[0] = 1 ... a[9] = 9 逐一書くのは面倒なのでループで入れる const arraySize = 10 var a [arraySize]int for i := 0; i < arraySize; i++ { a[i…

Continue Reading →

Go の errors パッケージを使ってエラースタックを出力する

どうも Nii です。2020年もあいかわらず Web 屋をやってるので Go の errors パッケージを使ってエラーログをスタックしていく方法を記します。 Go でエラーのスタックトレースを取るときは github.com/pkg/errors か xerrors を使って、出力時のフォーマットで %+v を使うのが定石なんだなぁと思ってたんですが、『Go祭2020』の Go で作ろう! Web アプリのカスタムエラーの章で Go 1.13 からエラーのラッピングがサポートされてる事を知ったので早速…

Continue Reading →

UUID version4 が衝突しないのを実験する

UUID の衝突は気にしなくていいという記事を読んで、なるほどなーと思いつつも、数式分からぬ実際にコードで確かめてみたい。と思ったので実験です。 方法はプログラムで UUID ver4 を生成して UNIQUE 制約を設定したデータベースカラムに挿入し、UNIQUE 制約エラーが起きないかを確かめるというものです。 あとはバイナリを生成して、実行するマシンのコア数だけ実行するという方法にしました。 特に理由はないですが goroutine は敢えて使ってません。 DDL(MySQL) create tab…

Continue Reading →