Skip to content

Instantly share code, notes, and snippets.

View Shinpeim's full-sized avatar

Shinpei Maruyama Shinpeim

View GitHub Profile
const P = require("P");
class A extends P {
}
use strict;
use warnings;
use Data::Dumper;
my @vals = (
[1, 2],
[3, 4]
);
my @mapped = map {join("-", @$_)} @vals;

FAQ

外部APIの呼び出しとかってどうすんの?

  • インターフェースをドメインサービスとして作る
  • インフラストラクチャ層で実装する
import scala.util.Try
import scala.language.reflectiveCalls
trait Validator[T] {
def apply[O <: T](obj: O): Try[O]
}
type Username = String
object UsernameSpecification {
sealed trait T
class A extends T {
def f:String = "A"
}
class B extends T {
def g:String = "B"
}
val a = new A
val b = new B

「カーディナリティが高いカラム両方がwhereとorder byに入る場合は、どのようなインデックスを張るべきなんだろうか。」に対する答え。MySQLの場合。

まず、前提として、インデックスの仕組み。インデックスは B+Tree になってて、各ノードにindexに使われてるキーの値、リーフには(indexに使われてるキー,プライマリーキー)の値が書き込まれている。プライマリーキーは例外的に、リーフにその行のすべてのデータが書き込まれているクラスタインデックスになっている。

というわけで、例えば SELECT * FROM t WHERE indexed_column > x; みたいなクエリを実行すると、

  • インデックスツリーからxより大きい値を探して(B+Tree なのでO(log n))
  • 探してきた分だけ以下の操作を繰り返す
    • リーフに書き込まれてるプライマリーキーの値を読んで
  • プライマリキーインデックスを辿って(おなじくO(log n))、リーフに書き込まれているデータを返す
module SerializeForSomeMiddleware
module Nyan
def serialize_for_middleware
# Nyanは aの情報だけでよし
{a: @a}
end
end
module Wan
def serialize_for_middleware
# Wanは b も必要
module SerializeForSomeMiddleware
module Nyan
def serialize_for_middleware
# Nyanは aの情報だけでよし
{a: @a}
end
end
module Wan
def serialize_for_middleware
# Wanは b も必要
module SerializeForSomeMiddleware
module Nyan
def serialize_for_middleware
# Nyanは aの情報だけでよし
{a: @a}
end
end
module Wan
def serialize_for_middleware
# Wanは b も必要
module UserValidator
module AdministratorContext
def validate!
raise "name required" if @name.nil?
end
end
module UserContext
def validate!
end