rails 6.0.3 で api mode にした時の diff

主な違い frontend 関連のファイルがごっそり消えている sass や cabipara など、rails での view 出力に関わるライブラリが消えている view に関わるファイルも消えている config/application.rb での設定が変わっている api サーバーに必要な gem のみ inc…

rack-cors から CORS を理解する

web の仕様を理解するにはドキュメントを読み、その仕様の実装を見てみるのが良い方法だと思う。 ruby の CORS の制御を実装している rack-cors から CORS を理解する。 CORS について rack-cors https://github.com/cyu/rack-cors CORS について Cross Orig…

Ruby によるデザインパターン

この本は絶版になっており非常に高い。 中古を高いお金を出して買わずに https://github.com/davidgf/design-patterns-in-ruby や日本語でのまとめを探して読むので十分だと思う。 このまとめはコードは載せていないが、コードを載せているまとめも多くある…

プロジェクトマネジメントのトリセツを読んだ

図解 これ以上やさしく書けない プロジェクトマネジメントのトリセツ モチベーション エンジニアの仕事はコードを書くだけではない。 事前調査したり、他チームの人と協力したり、作業見積もりを出したりと色んなことをやる必要がある。 この色んなことには…

JavaScript Primer を読んだ

jsprimer 最近 js をちょくちょく書くようになったけど、js についてちゃんと勉強したことなかった。 そこで https://jsprimer.net/ を読んだ。とても分かりやすかった。 非同期処理は分かった気がしているだけなので、自分で書いてみて Promise 本 も読みた…

Ruby の throw と catch の実例

Ruby では大体のケースでは例外を begin-raise-rescue で実行箇所を移しているのでは。 なので throw と catch を使う機会はあんまりないように思う。 そんな中、実際に使われているところを見つけたので紹介。 throw と catch を上手く利用しているライブラ…

Rails で 有効なエンドポイントを出したい

Rails で有効なエンドポイントを列挙したい 叩かれなくなっているエンドポイントを見つけたい。 そのためにアクセスログとアプリケーションの有効なエンドポイントとを突き合わせるとよさそう。 そこで有効なエンドポイントの列挙方法を調べた。 実行するコ…

rack を理解する

https://github.com/rack/rack rack は Ruby web application 開発のためにいい感じのインターフェースを提供してくれる。 HTTP Request/Response をラップしてくれることで、web server や web framework、その間にある middleware の API を 1 つのメソッ…

ruby のメソッド呼び出しと method_missing

Ruby で特定のクラスのインスタンスに対してメソッドを呼び出した時、まずはクラスに存在しているインスタンスメソッドから探す。 そのクラスに該当のインスタンスメソッドがなければ、継承チェーンを上ってインスタンスメソッドを探す。 例えば下記のような…

pipelining でコマンド実行を速くしよう with Ruby

redis redis は client/server モデルを採用している TCP サーバーなので複数のコマンドを実行したい時に、 コマンドを送る・結果を受け取る・次のコマンドを送る...とやっていたら全てのコマンドが完了するのに、単純化して RTT(Round Trip Time) * リクエ…

devise gem で生成されるもの・できること

devise gem は色々勝手にできるらしいと聞いたしチュートリアルを見ると実際にそうらしいので自分でもやってみる devise の導入手順とそれぞれの概要は以下 目次 devise を rails に導入する 認証に利用する model を生成するための generator を生成する 2 …

redis の SETNX, SETEX, PSETEX はもういらないらしい

redis の SET のオプションで全て済むという話。 今まで redis で string を SET する時下記のように使い分けていた SETNX key が存在しなければ SET、存在しているなら何もしない EXISTS + SET を1つのコマンドで SETEX key を ttl つきで設定する SET + ex…

素数判定

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_C&lang=jp 試し割り法 2 以上の自然数 N (2<=N) が素数であるとは、1 と N 以外に約数が存在しないということ。 素朴に計算した場合、 2<=i<=N-1 を満たす i が N を割り切れないことで判…

Redux してみる

Redux公式ドキュメントを読んだりしたまとめ Redux Reduxは、アプリケーションの状態に関することを行う Reactと同じような文脈だと思っていたが、ReactとReduxは別物 Reduxは状態やその変化を扱い、ReactはReduxによって管理された状態に応じてUIの描画を行…

「わかる!ドメイン駆動設計〜もちこちゃんの大冒険〜」を読んだ

わかる!ドメイン駆動設計〜もちこちゃんの大冒険〜を読む。 社内のアーキテクチャや設計はDDD的な要素が入っているので知らないままではいられない。 DDD Domain Driven Development(ドメイン駆動設計) DDDでやること 開発者とドメインエキスパートがドメイ…

プログラミングの基礎を読んだ

プログラミングの基礎を読んだのでまとめ はじめに 関数型言語を仕事でも個人でも使ったことがなかったので何かしら触ってみたいと思っていたところ知人に進められたのがきっかけで読み始めた。 情報系出身ではなくコンピュータサイエンスの基礎にあやふやな…

protocol buffers, gRPC周りの整理

protocol buffers, gRPC周りの整理 この記事に書くこと 書くこと gRPCの簡単な説明 protocol buffersの簡単な説明 上記のサンプルコード(公式ドキュメントとほとんど同じ) 最初にざっくりと protocol buffersは読み書きしやすいIDL(XMLみたいなもの) gRPCは…

rails開発3週間で学んだことなど

rails開発を始めて早いものでもう3週間も経った。 最初の開発も一段落しつつあるので何かメモを残しておこうかなと。 rails以外でも学んだことは多いのでそれも含めてのメモ。 コードリーディング編 使っているライブラリやモジュールを全てgrepで調べること…

プロを目指す人のためのRuby入門を読んだ

10月から転職してRubyも書く人になったので、プロを目指す人のためのRuby入門を読んでみた。 この流れで勉強すればよかったな、っていう振り返りも最後に合わせて記載。 この本をやる前の状態 Ruby未経験からRubyとGoの会社に転職(一部Rust、C++、Pythonも動…

python3でプロコンのためのデータ構造とアルゴリズム

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造の基礎編までを終えた。 アリ本が有名だが、こちらの方が評判がよくまとまっていると感じた。 新しい言語でやりたかったというのもあって、python3で書いている。 githubにコードと簡単なコメ…

ハノイの塔を実装する

ハノイの塔についてこちら 前提 3つの杭を3つの配列(orig, tmp, to)で表現する 各配列をスタックとみなし行える操作はpushとpopのみ 円盤1つを配列内のintとして表現。大きな円盤は大きな数字で 例えば、3段のハノイの塔は[3,2,1]といった形で表現する 目標 …

goのチャネルの簡単なまとめ

Goならわかるシステムプログラミングを読んで。 概要 キュー構造である ただしランダムアクセスはできず、投入と取り出しのみ行うことができる 並列処理されても正しくデータを受け渡す同期機構である goroutine間での情報共有としての利用が推奨されている …

ブラウザアクセスでファイルをダウンロードさせる方法

やり方 HTTPレスポンスヘッダーにContent-Disposition: attachmentをセットする。 デフォルトでは、Content-Disposition: inlineとなっており、Webページとして表示される。 ちなみにdispositionの意味は、何かの置き方や配置の仕方、という意味。 The way i…

depを触ってみたよ

the "official experiment" dependency management tool for the Go languageというdepを触ってみた。 これがgoのライブラリ管理ツールでは公式になっていく模様。 公式ドキュメントを見ながらやってみる。 installation macの場合、crewで入る。 $ brew ins…

CentOS6にscreen-4.6.2をインストールする

ソースを取ってくる このサイトから、screen-4.6.2.tar.gzのリンク先をコピーして/usr/local/src/下にダウンロードする。 $ cd /usr/local/src/ $ sudo wget https://ftp.gnu.org/gnu/screen/screen-4.6.2.tar.gz インストール まずは解凍 $ sudo tar -zxvf …

実践ハイパフォーマンスMySQLメモ

はじめに 実践ハイパフォーマンスMySQLを読む中で、知らなかった単語や気になったことのメモ この書籍では5.5について書かれているが、最新は5.7なので異なる点がいくつかあるのだろうと懸念はある。 とはいえ、根本的な仕組みはそうそう変わるものではない…

DockerとかCI試す用のアプリ作ったよ

Dockerで何かアウトプットをしておきたかったのと、 CircleCIを使ってみたかったので簡単な、本当に簡単なアプリケーションを作った。 githubに置いておいた。 使い方はリンク内のINSTALLATION AND LAUNCHを参照のこと。 このアプリケーションでCIを試す CI…

Athenaで元データのカラム数とテーブル定義が一致しない時どのような挙動になるか

概要 ある日のデータからカラムが追加されることになった。 その時、Athenaではどのようなデータが表示されることになるのだろうか テスト準備 csvファイルを2つ作成(Athenaに対応しているファイル形式なら何でもよい) まずは下記カラムのファイルをここで作…

AWS 認定ソリューションアーキテクトに合格するまで

AWS認定ソリューションアーキテクト – アソシエイト (2018 年 2 月リリース)を取った。 どんなことやったかとかを書いておく。 前提レベル エンジニア歴1年半 普段ちょこちょこAWSサービスに触るものの自分で環境構築することはほぼない 使ってたりちょこっ…

MySQLのEXPAINの見方

EXPLAINとは クエリオプティマイザがクエリをどのように実行するのかを解明する手段 どのインデックス使ってるのかなーとか確認する 実際に実行するとこんな感じになる mysql> EXPLAIN SELECT * FROM covering_test WHERE key1 = 1; +----+-------------+---…