【Go 1.21】ループ変数が共有される問題への対策(プレビュー)が公開されました

Go

TL;DR Goのfor文で宣言されるループ変数は、ループ(イテレーション)毎に同じアドレスに値が格納される仕様になっている この仕様のよってループ内で並行処理を実行するなど特定のケースで、どのループでも毎回同じ値が取得されてしまうといった意図しないバ…

【Go 1.21】愚直なループ処理から脱却できるslices/mapsパッケージ

Go

TL;DR slices・mapsパッケージによって、これまでfor文で実装するしかなかったsliceやmapなどに対する汎用処理が簡単に実装できるようになった これまでGoには継承などの共通の振る舞いを実装する仕組みが存在しなかったが、Go 1.18で導入されたジェネリクス…

複数セッションからINSERT ... ON DUPLICATE KEY UPDATEを実行した際にデッドロックが発生する問題(MySQL)

TL;DR MySQLにおいて、複数セッションから同時にINSERT ... ON DUPLICATE KEY UPDATEで複数行の挿入を実行するとデッドロックが発生する場合がある この現象はMySQLの5.7.26(8系なら8.0.16)でのバグ修正に起因すると考えられる MySQL自体のバグでは無いた…

Go1.20で追加された「unsafe.StringData、unsafe.String、unsafe.SliceData」による[]byteとstringの変換処理

Go

TL;DR Go1.20からメモリ効率を重視した[]byteとstringの変換処理として以下が提供されている string -> []byte:unsafe.Slice(unsafe.StringData(s), len(s)) []byte → string:unsafe.String(&b[0], len(b)) 目次 TL;DR 目次 従来の変換方法 新しい変換方法…

Google Chromeなどの一部ツールは、サブドメイン付きのlocalhostのアドレス(subdomain.localhost)を自動的に127.0.0.1で名前解決してくれます

TL;DR ※2023年6月時点 Google Chromeなどのツールでは、サブドメイン付きのlocalhostのURL(例:http://hoge.localhost:3000)を、自動で127.0.0.1に名前解決してリクエストを行います 一方でSafariなどの一部ツールでは非対応なので、それらでも同様に名前…

Echo(Golang web framework)のディレクトリ構成の参考情報 - OSS「echo-sample」のコードリーディング

Go

TL;DR echo-sampleは、こんな構成だった TL;DR きっかけ echo-sampleの概要 ディレクトリ構成 個々の構成毎の役割 main.go 役割 詳細 route 役割 詳細 middleware 役割 詳細 handler 役割 詳細 db 役割 詳細 conf 役割 詳細 api 役割 詳細 model 役割 詳細 /…

AtCoder Beginner Contest 144「D - Water Bottle」(Ruby)

図を描いて三角関数を使えば、実装は比較的簡単 (図をキレイに書くスキルが欲しい・・・) 問題 考えたこと コード 問題 問題文 高橋君は、底面が 1 辺 a c m の正方形であり、高さが b c m であるような直方体型の水筒を持っています。(水筒の厚みは無視で…

AtCoder Beginner Contest 144「C - Walk on Multiplication Table」(Ruby)

平方根の活用がポイント 問題 考えたこと コード 問題 問題文 高橋君は無限に広い掛け算表の上にいます。 掛け算表のマス ( i , j ) には整数 i × j が書かれており、高橋君は最初 ( 1 , 1 ) にいます。 高橋君は 1 回の移動で ( i , j ) から ( i + 1 , j )…

モデルのバリデーションでBoolean型の入力チェックを行う方法(Rails)

結論 Boolean型の入力チェックはpresence: trueだと出来ない inclusion:{in: [true, false]}であれば、チェック可能 基本的な入力必須のバリデーション Railsのモデルのバリデーションにおいて、入力必須のチェックを行う場合、presence: trueが良く用いられ…

AtCoder Beginner Contest 142「D - Disjoint Set of Common Divisors」(Ruby)

Rubyって標準添付ライブラリで素因数分解できるんですね 問題 考えたこと 提出コード 補足 問題 D - Disjoint Set of Common Divisors 実行時間制限: 2 sec / メモリ制限: 1024 MB 配点 : 400 点 問題文 正整数 A , B が与えられます。 A と B の正の公約数…

AtCoder Grand Contest 038「A - 01 Matrix」(Ruby)

取っ掛かりさえ見つけられれば、非常に簡単な問題でした 問題 解き方 コード 問題 atcoder.jp 実行時間制限: 2 sec / メモリ制限: 1024 MB 配点 : 300 点 問題文 H 行 W 列からなるマス目があります。 すぬけくんは、各マスに 0 または 1 を書き込みたいです…

DHH流ルーティングについて(Rails)

【結論】 ・DHH(David Heinemeier Hansson)は、Ruby on Railsの生みの親 ・DHH流ルーティングとは、DHHが推奨しているRailsのルーティング手法 ・具体的には、コントローラはデフォルトのCRUDアクション(index、show、new、edit、create、update、destroy…

【AtCoder:19回目】AtCoder Beginner Contest 141の振り返り(Ruby)

【目次】 振り返り A - Weather Prediction B - Tap Dance C - Attack Survival D - Powerful Discount Tickets 【本題】 振り返り 今回は 9/15(日)に開催されたAtCoder Beginner Contest 141の振り返りを行います。 AtCoder Beginner Contest 141 - AtCoder…

環境構築不要かつ無料で機械学習が試せる「Colaboratory」について

【結論】 ・Colaboratoryとは、Googleが提供しているクラウド上で機械学習のプログラムを実行できるサービス ・環境構築不要かつ無料で利用できるので、気軽にプログラムを試すことができる ・しかし一定時間が経過すると、仮想マシンが停止してデータが初期…

Callbackメソッドの「only」「except」の使い分け(Rails)

【結論】 ・Controllerのコールバックメソッドは、onlyとexceptで実行するアクションを指定できるが、適切に使い分けないと、バグ発生の要因となり得る ・基本的にonlyを使用する。指定するアクションが増えて、追加するアクションが無くなったらexceptに置…

「let・let!・before」の違いと実行順序(RSpec)

【結論】 ・let/let!はインスタンス変数を定義する際、beforeより分かりやすく記述できる ・beforeはインスタンス変数の定義以外(メソッドの実行など)でも利用することができる ・letは変数が初めて使用された時に評価(遅延評価)され、let!とbeforeはブ…

Strategyパターンについて(デザインパターン)

【結論】 ・Strategyパターンとは、デザインパターンの一つで、状況に応じてアルゴリズムを切り替える処理を記述する時に有効な実装手法 ・ConcreteStrategy役に個々の具体的なアルゴリズムが記述されており、どれを使用するかはStrategy役が規定する ・アル…

「describe・context・it(example)」の使い分け(RSpec)

【結論】 ・describeには、テストの対象(グループの範囲)を記述する ・contextには、テストの条件(状態)を記述する ・it(example)には、テストの内容(処理と期待)を記述する 【目次】 「describe・context・it(example)」の使い分け describeにつ…

【AtCoder:18回目】AtCoder Beginner Contest 140の振り返り(Ruby)

【目次】 振り返り A - Password B - Buffet C - Maximal Value D - Face Produces Unhappiness 【本題】 振り返り 今回は 9/7(土)に開催されたAtCoder Beginner Contest 140の振り返りを行います。 AtCoder Beginner Contest 140 - AtCoder 今回は3問回答出…

Rubyの「nil?・empty?」とRailsの「blank?・present?」について

【結論】 ・nil?メソッドは、レシーバーがnilのときtrueを返し、nilではない場合falseを返す ・empty?メソッドは、オブジェクトが空(空文字列("")・空配列([])・空ハッシュ({}))のときtrueを返し、1つ以上の要素があればfalseを返す。文字列・配列・…

MySQLでNOT NULL制約を設定してもNULLでエラーにならない問題(無効データの制約)

【結論】 ・MySQLは無効または不適切なデータ値を許容しており、これらを有効な値に強制的に変更して、データの整合性を取っている ・例えば、NOT NULL制約を設定している文字列タイプのカラムにNULLを保存しようとした場合、エラーにならず、空文字("")が…

「Mysql2::Error: Data too long for column」の原因(Rails)

【結論】 ・Mysql2::Error: Data too long for columnとは、DB側の文字数制限を超えたデータを保存しようとした際に発生するエラー ・DB側の制限なので、モデルなどにバリデーションを設定していないとしても、このエラーは発生する ・対応策は、DB側の制限…

【AtCoder:17回目】AtCoder Beginner Contest 139の振り返り(Ruby)

【目次】 振り返り A - Tenki B - Power Socket C - Lower D - ModSum 【本題】 振り返り 今回は 9/2(日)に開催されたAtCoder Beginner Contest 139の振り返りを行います。 AtCoder Beginner Contest 139 - AtCoder 今回は4問回答出来ました レーティング微…

「change_table」で「bulk: true」を使用したマイグレーションの高速化(Rails)

【結論】 ・Rails のマイグレーションで使用されるchange_tableメソッドには、bulk: trueのオプションを設定できる ・このオプションにより、ALTER TABLEクエリにまとめてくれる ・このオプションは MySQLとPostgreSQLのみサポートされていている 【目次】 c…

マイグレーション作成時にchangeメソッドではなくup/downメソッドを使う場面(Rails)

【結論】 ・マイグレーションを作成する場合、up/downメソッドを利用する方法と、changeメソッドを利用する方法が存在する ・up/downメソッドはマイグレーション時とロールバック時の両方の処理内容を定義する必要があるのに対して、changeメソッドはマイグ…

現在日時をズラしたテストが実行できる「TimeHelpers(travel・travel_back・travel_to)」(Rails)

【結論】 ・ActiveSupportのTimeHelpersでは、時間経過によって動作が変化する機能のテストを行う為のヘルパーメソッドが提供される ・travelメソッドは、現在の日時を指定された日時の分だけ未来または過去の日時に変更する ・travel_toメソッドは、直接指…

URLエンコードによってパラメータの空白スペースが+に書き換わる問題(Rails)

【結論】 ・URLパラメータ(クエリ文字列)とは、URLの末尾に?を付け続けて&キー=値と記述することで、サーバーに情報を送るためにURLに付け加える変数 ・application/x-www-form-urlencodedのURLエンコードとは、URLにおいて使用できない文字を使う際に…

カラムのNOT NULL制約(null: false)を途中で設定or削除する方法(Rails)

【結論】 ・カラムのNOT NULL制約を途中で設定or削除するには、change_column_nullメソッドを利用してマイグレーションを行う ・change_column_null(table_name, column_name, null, default = nil) ・第3引数のnullフラグに、trueを指定すればNOT NULL制約…

【AtCoder:16回目】第一回日本最強プログラマー学生選手権-予選-の振り返り(Ruby)

【目次】 振り返り A - Takahashi Calendar 10 B - Kleene Inversion 【本題】 振り返り 今回は 8/24(土)に開催された第一回日本最強プログラマー学生選手権-予選-の振り返りを行います。 Japanese Student Championship 2019 Qualification - AtCoder 今回…

テスト環境でcsrf_token(csrf_meta_tags)が出力されない問題への対処法(RSpec)

【結論】 ・RailsにはCSRF保護の仕組みがデフォルトで備わっている ・しかし、CSRF保護はテスト環境ではオフになっており、csrf_tokenがHTMLに埋め込まれない為、それが原因でテストが通らない場合がある ・その場合は、CSRF保護をテスト環境でも有効にする…