Note

3年後の自分のために書いています

証明書まわり学習メモ

自分でも理解が超曖昧なのでまとめる。随時更新していく。 公開鍵証明書 デジタル証明書や単に証明書とも呼ばれる 公開鍵証明書 - Wikipedia CSR(証明書署名要求) 証明書署名要求 - Wikipedia 秘密鍵 公開鍵基盤(PKI) 公開鍵基盤 - Wikipedia OpenSSL Op…

Redis での Rate limit 実装

〇〇 req/sec という rate limit を実装する例。 どちらも Fixed window counters を前提に説明する。 結論 Rate limit 機能はカウンター(INCR)の要不要によって、最適な実装が変わる カウンターが必要な場合は timestamp 入り key を window に、不要な場…

diesel_cli のインストールで失敗する場合の対処法

$ cargo install diesel_cli --no-default-features --features postgres した時に以下のようなエラーが出る場合の対処方法を記す。 $ cargo install diesel_cli --no-default-features --features postgres ... Compiling diesel_cli v1.4.1 error: linking…

型システム入門 プログラミング言語と型の理論(TAPL)読書メモ

See. 型システム入門 プログラミング言語と型の理論 | Amazon メモ まずは5, 9, 11章読んでマスターするのがオススメ、と以下動画で訳者の方が言ってる :youtube: 住井英二郎(監訳者)&翻訳チーム 「いまこそ学ぶ! 型システム ~ TAPL日本語出版までの道…

iOS アプリ開発のメモ

Xcode 2021/08 現在 App Store からインストールできる安定版の最新は v12.5.1、Apple のサイトからならベータ版の Xcode 13 もインストール可能 Xcode 13の概要 - Apple Developer Xcode 13 から vim mode が使える フォーマッタがない、一応インデントの揃…

無料にこだわる個人開発アプリ・システム構成

[2024/02/26 Update] Vercel もDB 提供するようになったし、Planetscale や Supabase も出てきてます。この記事の内容は古いので鵜呑みにしないでください。 [2022/08/26 Update] Heroku 有料になりましたね、、無念。 チラシの裏的な記事です。やっぱりなる…

API や DB のスキーマからコードを自動生成する系のツールを触ってみた

API のスキーマからコード生成する系 OpenAPI Generator チュートリアルなかったので拾ってきた OpenAPI の定義ファイルから typescript-fetch なるジェネレータでコード吐くところまでやった。 メモ OpenAPI のスキーマ定義から API クライアントのコードを…

ISUCON 過去問やってみた話

社内勉強会のコピペ。 結論 ISUCON の過去問やって自分の無力さを思い知った話です :@daido1976: @daido1976 2018/04〜 :feed: Feedforce Inc. パフォーマンスチューニングできるようになりたい ISUCON とは Iikanjini Speed Up Contest See. https://www.go…

Rails の API モードで CSRF 対策機能を実装する

半年前に会社の技術ブログの下書きに雑に書いてて公開しどきを忘れたやつ、もったいないのでこちらで公開。 Rails の API モードはデフォルトでは CSRF 対策機能が有効になってないので、クッキーによるセッション機能を使うと脆弱性を生む可能性がある。 Ra…

sinatraとrailsとrfcとmdnと徳丸本から学ぶセッションとクッキーと認証とCSRFとXSS

半年前の下書き、めっちゃ途中だけど埋もれるのも嫌なので公開。(あとから追記していく) 元々 csrf についての記事を書こうと思っていたが、csrf について調べるうちセッションとクッキーのことが気になり、rails のセッションとクッキーの実装方法が気に…

vagrant ssh したときに裏側で何が起こっているか

結論 以下と同義。 $ ssh vagrant@127.0.0.1 -p 2222 -i ~/vagrant/ubuntu-xx/.vagrant/machines/default/virtualbox/private_key $ vagrant ssh --debug すると最後の方に INFO ssh: Invoking SSH: ... から続くログが出るのでそれを確認すれば分かる。 補…

Go + VSCode でサブディレクトリに go.mod を置くと `could not import ... (no package for import ...)` になる

以下のようなやつ。 環境 Go 1.15.2 VSCode 1.49.0 原因 gopls("go.useLanguageServer": true で有効)を使いながら、go.mod をサブディレクトリに置いて、プロジェクトのルートディレクトリから VSCode を開いてたのが原因だった。 解決策 gopls を使いた…

rails stats コマンドで app 以下のディレクリを全て計測できるようにする

$ rails stats コマンドはデフォルトでは以下のディレクトリしか計測しないため、サービスクラスを app/services 以下に置いているような場合、その分は計測されない。 app/controllers app/helpers app/jobs app/models app/mailers app/mailboxes app/chan…

Hello, Computer Science 〜前編(ハードウェア編)〜

社内勉強会で発表した内容のコピペ。 今日のアジェンダ 前置き(5分) コンピュータの動く仕組みについて〜ハードウェア編〜(各5分ずつ) ブール論理 ブール算術 順序回路 機械語 コンピュータアーキテクチャ 終わりに(3分) 今年の目標 「骨太なプログラ…

Docker で Windows 系 OS のイメージを使えるか?

急に気になったので調べた。 結論 ref. DockerのWindows対応についての整理#2-windowsベースイメージのコンテナを使うことができるか 元々のDockerはLinuxカーネルに依存したものでしたが、Docker Windows Containersの登場により可能になりました。 結論使…

GitHub Apps を作る

Conclusion Probot 使えばけっこう簡単にできる。 Motivation project-bot という Issue/PR 作成時などに GitHub Projects にカード追加してくれる GitHub Apps があるが、ラベル追加時の挙動が微妙(すでにあるカードを移動してくれるのみ)で 機能追加の I…

XMLHttpRequest と fetch の違い

構文的な違いではなく挙動的に違いがあるのか知りたい。 特に、XMLHttpRequest にできて、fetch にできないことがあるのかが気になっている。 以下、XMLHttpRequest は XHR と略す。 結論 XHR にできて、fetch にできないことはほとんどないと言って良さそう…

Fetch API の仕様と各ブラウザの実装

なんだか急に気になったのでメモ。 仕様 https://fetch.spec.whatwg.org/ IETF (RFC) とも W3C とも別の WHATWG なるコミュニティによるもの。 実装 多分ここだろう、という箇所たち。 それぞれレンダリングエンジンの中に実装があるっぽい。 HTML レンダリ…

Rails の API モードで静的ファイルをホスティングする

環境 ruby 2.7.1 rails 5.1.2, 6.0.3 の両方 結論 以下、二つの方法がある。 config.public_file_server.enabled を true にして public ディレクトリ以下に置く 静的な HTML ファイルを表示させたいだけなら config.public_file_server.enabled を true に…

Rails の API モードでセッションを有効にする

巷には config/application.rb 内で Rails.app_class.config.api_only = false にすればできる、的な記事が溢れているが、不要な middleware まで読み込みたくない。 環境 ruby 2.7.1 rails 6.0.3 差分 デフォルトの CookieStore を使う場合 diff --git a/co…

WebRTC + Firebase のチュートリアルやってみた

See. https://webrtc.org/getting-started/firebase-rtc-codelab ほぼ写経しただけ、 のチュートリアルの通りに書いても動かなかったので、サンプルリポジトリ の方を参考にした。 成果物 ブラウザで動くシンプルな 1 対 1 のビデオ通話アプリケーション。 …

gem 'her' コードリーディング

と言いつつ途中から依存してる 'faraday' のコードリーディングがメインになった。 her 側で faraday_options 引数として渡した Hash を faraday 側では url という名前で扱っており、混乱したので記事にしておく。 バージョン her (1.1.0) faraday (0.17.3)…

gem 'pg' コードリーディング

なぜだか急に pg gem の実装が気になった。 # コネクション張って SELECT するだけのコード require 'pg' conn = PG.connect(dbname: 'hoge') conn.exec('SELECT * FROM fuga') do |result| result.each do |row| puts row end end のコードを実行した時に…

Docker 学習ログ

Docker 分からなさすぎるのでコツコツと学ぶ。 間違ってるところは随時直していく。 利用するメリット 開発環境やテスト環境が構築・配布しやすくなる Docker を実行できる環境さえあれば OS の違いも吸収する VM(仮想化 OS)よりも起動が速い VM(仮想化 O…

非効率なコードレビューをなくしたいというポエムを書くためのメモ

前提 現在 Web 業界で主流(?)な 100 % PR を完成させてから(マージできる状態にしてから)In Review にするやり方は非効率 PR はざっくりできた 〜 In Review までがけっこう作業ある(commit 粒度の確認、YARD などのコメント、GitHub の 0 コメ、動作確認…

【コードメモ】JS で Object を forEach する方法

$ node > let obj = { hoge: "hogehoge", fuga: "fugafuga" } > Object.keys(obj).forEach(key => console.log(key, obj[key])) hoge hogehoge fuga fugafuga 参考 How to loop through a plain JavaScript object with the objects as members? - Stack Ove…

【コードメモ】FizzBuzz 別バージョン

1から100までの数字を標準出力に改行つきで出力するプログラムを作ってください。 3の倍数と3がつく数字の時だけ、数字のあとに!をつけてください。 出力例: 1 2 3! 4 5 6! 7 8 9! 10 11 12! 13! 14 ...以下100まで続く コンソールで実行しやすいようにワン…

ActiveRecord で create_xx, build_xx 系のメソッドが作られるのは has_one した時だけ

表題の通りですが、 has_many した時も create_xxs 的なメソッドが自動生成されると勘違いしていたのでメモ。 ActiveRecord::Associations::ClassMethods class Project < ActiveRecord::Base has_one :project_manager has_many :milestones end Project#cr…

高階関数とカリー化をそろそろ理解したい with JavaScript

あとでサンプルコード追加するかも。 早く Haskell やれやって話なんですけどね。 この記事のシリーズがだいぶ分かりやすかった。 tech.recruit-mp.co.jp 高階関数 関数を『引数』もしくは『返り値』として扱う関数のこと。 カリー化 期待される数より少ない…

JavaScript のスプレッド構文とレスト構文がややこしいので Ruby の配列展開と splat パラメータで理解する

細かい仕様の違いはあるかもしれないが、大体以下の感じで理解している。 スプレッド構文 Array に関しては Ruby でいう配列の展開(*)とほぼ同じかな。 スプレッド構文を使うと、関数呼び出しでは 0 個以上の引数として、Array リテラルでは 0 個以上の要…