MySQLのストレージエンジンを自作してみる

MySQL のストレージエンジン(SE)を自作してみたときのメモ。バージョンは 8.0.13。 アーキテクチャをざっくりと掴むことが目的なので、ストレージエンジンの自作といっても非常に単純な操作しかできないものです。 RDB らしさとも言えるインデックスや行レ…

【MySQL】データベースのパーティショニングとはなんぞやという話

パーティショニングについての覚書。 一応 MySQL が前提。先に具体的な実体を書いたあと、それがパフォーマンス向上にどう寄与するのかを書きます。 パーティショニング is 何 簡単に言えば、データベースのテーブルを物理的に分割することです。テーブルの…

MySQLのIndex Condition Pushdown とはなんぞやという話

MySQL のバージョン5.6から追加された機能に、Index Condition Pushdown(ICP) というものがあります。ICP は「マルチカラムインデックスの順番を意識しなくてもよくなる仕組み」的な説明がされることがあり、それはそれで間違いではないのかもしれません。が…

MySQL(InnoDB)のネクストキーロックの仕組みと範囲を図解する

MySQL(InnoDB) のロックにはレコードロックとかギャップロックとかネクストキーロックとかありますが、結構ややこしくて、クエリで条件文が与えられた時にそれがどのようなロックになるのかをイメージし辛い問題が自分の中でありました。ので、実験してみた(…

MySQL8で削除されたシステム変数たち

MySQL8 にしてから、分離レベルを確認するために以下の文を実行したらエラーが発生するようになりました。 SELECT @@GLOBAL.tx_isolation, @@tx_isolation; ERROR 1193 (HY000): Unknown system variable 'tx_isolation' どうやら原因は 8.0.3 から tx_isola…

Sequel ProはそもそもMySQL8に対応していなかった件

昨日以下の記事を書きました。 norikone.hatenablog.com MySQL8 からデフォルトの認証方式が変わったせいで Sequel Pro からログインできないという話で、認証方式を変えればログインできるようになります。が、ログインできてもその後のテーブル操作等が一…

MySQL8から認証方式が変わったせいでSequelProからログインできなかった件

※追記 どうやら Sequel Pro は MySQL8 にまだ対応しておらず、ログインできないだけではなくて DB を選択するとクラッシュします。詳しくは以下に書きました。 norikone.hatenablog.com MySQL を 8 にアップグレードしたところ、Sequel Pro からログインでき…

Clean Architecture を読んだ感想

Clean Architecture を読んだ感想というかまとめというか、備忘も兼ねて書きたいことをテキトーにメモします。 Clean Architecture 達人に学ぶソフトウェアの構造と設計作者: Robert C.Martin,角征典,高木正弘出版社/メーカー: KADOKAWA発売日: 2018/07/27メ…

DNS初心者が独自ドメインの設定する時に知っておきたいこと、ざっくりとした設定方法

ホスティングサービスで借りたサーバを独自ドメインで運用したいケースが結構あるのですが、設定するたびに DNS の仕組みを忘れてしまいます。仕組みを忘れるというよりは、自分が今何を設定しているのか、何を設定しなければいけないのかが分からなくなる感…

指定した期間内の特定の曜日をカウントする方法【JavaScript例】

標題の通り.考え方と実装例をメモしておきます. 「5月10日〜7月20日の間の水曜日の数」というような感じで値を得る方法です. 実装 擬似コード 切り捨て((期間の日数+(6+開始曜日-指定曜日)%7)/7); 例えば JavaScript では以下のような感じ. const numOfD…

JavaScript で Date をディープコピーする

Date オブジェクトをコピーしたかったときのメモ. どうやら標準ではオブジェクトのディープコピー用のメソッドは用意されていない模様.JavaScript でディープコピーする方法として JSON.stringify を使うものや jQuery.extend を使うものが紹介されている…

Web認証におけるToken(JWT)とCookie(セッション)の違い

HTTP の世界はステートレスです.すなわち基本的なプロトコル上では状態が管理されません.なので,ユーザの認証状態などを管理するために,これまでは主に Cookie & セッション ID が使われてきました.一方で,最近ではトークンを使った認証状態の管理もよ…

OAuth2やOpenID Connectとは何か、なんとなくわかった気になるための概要メモ

今更ですが備忘のため,OAuth とか OpenID とかその辺の概要についてまとめたメモ.具体的な仕様については書かないけど RFC や公式サイトに載っています.便宜上,厳密性を疎かにしている点あり. OAuthについて 背景 現在,Twitter や Yahoo など様々なサ…

【クラスローダ】JVMが読み込むクラスを見つける仕組み【パッケージ】

NoClassDefFoundError や ClassNotFoundException に遭遇した時など,Java で書くならある程度クラスローディングについて知っておいたほうがいいかなあと思い調べたときのメモ.なんとなくの概要. クラスローダ 基本的な仕組み Java アプリケーションは基…

Javaでtail -fならcommons-ioが楽

Java で tail -f のようなファイルの監視・追跡をしたい時に0から実装するのもなかなか面倒くさいです.Apache commons-io というライブラリにそれを簡単に実現できる機能があったのでメモしておきます. Commons IO IO 系をよしなに扱うためのオープンソー…

JavaでShell的に使えるコマンドラインツールを作る

Java でコマンドラインツールを作ったときのメモ.あえて Java でやる必要性があるかどうはか微妙ですが,まあなんとなく Java で書きたいこともあるでしょうということで. コマンドラインパーサを使ってコマンドライン引数の管理する 基本的にコマンドはオ…

PHPコードのコンパイルの流れメモ

PHP

久しぶりに PHP を触り処理系の動きがどんな感じだったのか忘れたのでおさらいメモ.ざっくりと大枠. PHP では実行時にソースコードがコンパイルされます.で,最終的にオペコードと呼ばれる中間コードに変換され,実行マシンによって逐次的に実行されます…

Javaにおける検査例外の有効性と非検査例外との使い分けについて考えたこと

Java での検査例外と非検査例外の使い分けについて少し考えたときのメモ.どうやら検査例外を使う使わないについては賛否両論あるらしく,ネットで検索してみても,ブログ等でいくらか議論されていることがわかります.それらの記事を眺めながら,検査例外に…

【Java6から】古いJavaのサンプルコードを用意してモダン化してみる【Java10まで】

勉強用にやってみた時のメモ。アップデートと共に書き方が変わるのは Java に限った話ではありませんが、Java は特に昔と今で書き方を大きく変えられる言語な印象があります。Java の勉強中にネット記事を眺めていても、バージョンの異なる色々な書き方が混…

なぜJavaの文字列(String)はイミュータブルなのか

Java における String は不変(イミュータブル)であるというのはよく知られていることだと思います.が,なぜそうなっているのかということについては考えたことがありませんでしたので,今回はその理由について調べた時のメモ. 理由① String Pool のため …

値渡し、アドレス渡し、参照渡しの違いをメモリマップ的な視点で考える

結論 値渡し 仮引数が確保したメモリの値に、引数として渡す変数の値部分をコピーする方法 アドレス渡し 仮引数が確保したメモリの値に、引数として渡す変数のアドレス部分をコピーする方法 参照渡し 仮引数に引数と同じメモリ領域を指させる方法 背景 値渡…

JetBrains IDE でカーソルの位置にある単語を削除するショートカットを作る

IDE

普段 IntelliJ や RubyMine などの JetBrains IDE を使っているのですが,環境設定の Keymap を見ても,カーソルが置いてある場所にある単語を単語ごと削除するショートカットが見当たりませんでした. 今回は Macro を使ってこのショートカットを作る方法を…

Mansory で表示した時に要素が重なる件

Webページを作っていて,画像などの大きさの異なる要素を繰り返しで表示する場合にはタイル状(レンガ状?)に敷き詰めて配置できると綺麗ですね.Masonry という JavaScript ライブラリを使うとこれを非常に簡単にやってくれるので便利.なのですが,配置し…

ブロックチェーンとは何なのか、ややこしいところを中心に概要をざっくりと

ここ数年でブロックチェーンという単語をよく耳にするようになりました。が、イマイチ理解できていなかったので、自分なりにまとめ。備忘メモ。 具体的な動作や理論については書きません、概要をざっくりと書きます。 ブロックチェーン is 何 思想などは後回…

gulpとかGruntとかの概要をまとめる

gulp を知った時のメモ。 Rails で開発していた時に初めて scss(sass) に触れて、こいつは便利だなーと思ってました。で、最近静的な Web サイトを作る機会があり、そこでも scss で書いてみようと思ったのですが、いちいち手動でコンパイルや圧縮、ベンダー…

【Rails】関連(アソシエーション)をもったモデルを構造化してElasticsearchに格納する

RailsでElasticsearchを使ってみたときのメモ. Articles <-> Authorships <-> Authors という関連を持ったモデル群があるときに,例えば記事(Article)を全文検索したら著者名も検索対象に入れたい. gem 'elasticsearch-rails' gem 'elasticsearch-model' …

RubyでHashをfreezeして定数にしたけど要素にアクセスできなかった

Hashを定数として扱おうと思ったときのメモ. Rubyの定数はミュータブルなので,freezeメソッドを使って明示的にイミュータブルにしておく必要があります.それから,ArrayやHashなどのコレクションを定数にするときには要素もfreezeします.これをしないと…

AmazonLinux(EC2) + Selenium + Ruby で動的なサイトのスクレイピング

Seleniumを使ってAmazonLinux上でスクレイピングをやってみたときのメモ. nokogiri単体とかだとJavascriptで動的にHTMLが書き換わるようなサイトのスクレイピングはできませんが,SeleniumというWebブラウザ操作の自動化ツールを使えばそのようなスクレイピ…

RubyでHTTPクライアント→HTTPプロキシ→サーバの流れを実装してみる

● HTTPクライアント (httpclient) ● HTTPプロキシ (webrick) ● サーバ (CGI) を書いて、HTTP クライアントからプロキシ経由でリクエストを投げてサーバで受け取る、という一連の流れを実装してみようと思った時のメモ。 受け取り側のサーバだけ CGI を…

【Twitter4J】特定のキーワードを呟いた人をフォローする的なやつ【Bot】

※ 追記 こんな記事を書いておいてアレですが、どうやら Twitter では自動フォローは規約で禁止されているみたいです。ここに書いてあるようなことを実行してバレると、アカウントを凍結されます。注意。 support.twitter.com ===============…