Skip to content

Instantly share code, notes, and snippets.

@lyricallogical
lyricallogical / gist:2470715
Created April 23, 2012 12:49
play2.0 の anorm の問題点をまとめてみる。間違いがあったらコメントしてもらえると助かります。問題がなければ本家に対してまとまった形で報告するつもりです。最終的な目標は anorm の改善です。

play2.0 の anorm の問題点まとめ

実装の詳細が公開されている

Useful 等の公開すべきでないものが公開されている。 型が書かれていない public なメンバも多く、API に対する意識が低い。

不要なものが公開されている

Pk, Id, NoAssigned 等は Magic のために導入された型だが、

@lyricallogical
lyricallogical / sbt.txt
Created September 21, 2016 04:38
The sbt is a most common dish in japanese.
イベント開催サイトみたいなの使うまでもないのでこれを fork する感じで感じで。
sbt について語りながら sbt を食べる会です。四人くらい集まったら fork で予定日出し合いましょう。
moc aka @lyrical_logical
new Runnable() {
@Override
public void run() {
// some processes...
}
};
@lyricallogical
lyricallogical / patmat_bug_extractor_with_skolem.scala
Created February 6, 2016 16:13
extractor pattern で skolem 型変数の扱いが意味わからんという話。
import scala.language.higherKinds
sealed trait Base[F[_]] { // all compilation is succeeded if F' kind is *
def a: String
}
case class Ctor[F[_]](a: String) extends Base[F]
abstract class Etor[F[_]] extends Base[F] {
def f(q: Base[F]): String = q match {
case Ctor(fa) => fa // NP
case Etor(fa) => fa // error! why???
walk :: Var -> Subst -> Var
walk var subst = go var subst
where go :: Var -> List Var -> Maybe Var -> Var
go (Unbound k) stack acc =
case (subst k, acc) of
(Nothing, Nothing) -> Unbound k
(Nothing, Just u) -> Cons u v
(Just v, _) -> go v stack acc
go (Cons h t) stack acc = go h (t :: stack) acc
go v [] Nothing = v
@lyricallogical
lyricallogical / exhaustive.diff
Created January 9, 2016 19:45
scalac -Ypatmat-debug exhaustive0.scala と scalac -Ypatmat-debug exhaustive1.scala の diff
138c138
< enum class E sealed, subclasses: List(class Cons, trait L, object SNil)
---
> enum class E sealed, subclasses: List(class Cons, object SNil)
140d139
< checkableType(E.L): E.L
142,143c141
@lyricallogical
lyricallogical / twitter-autocompletion-disabler.user.js
Created January 24, 2014 12:42
userscript to disable autocompletion on twitter
// ==UserScript==
// @name twitter-autocompletion-disabler
// @namespace lyrical.logical
// @description disable autocompletion on twitter
// @match https://twitter.com/
// ==/UserScript==
(function() {
var form = document.getElementsByClassName("tweet-form")[0];
var menu = form.getElementsByClassName("dropdown-menu typeahead")[0];
import scala.annotation.tailrec
import scala.language.higherKinds
sealed trait Freer[F[_], A] {
def map[B](f: A => B): Freer[F, B] = flatMap(a => Pure(f(a)))
def flatMap[B](f: A => Freer[F, B]): Freer[F, B] =
this match {
case Pure(a) => f(a)
case Impure(fa, g) => Impure(fa, g :+ f)
}
import scala.language.higherKinds
import scala.language.existentials
sealed trait Freer[F[_], A] {
def map[B](f: A => B): Freer[F, B] = flatMap(a => Pure(f(a)))
def flatMap[B](f: A => Freer[F, B]): Freer[F, B] =
this match {
case Pure(a) => f(a)
case Impure(fa, g) => Impure(fa, g :+ f)
}
@lyricallogical
lyricallogical / DirectByteBuffer_performance_problem.md
Last active December 15, 2015 18:48
java で巨大なバッファを取得しようとした際にブロック(Thread.sleep)するために生じる性能上の問題に関する考察 がちゃぴんさん(@kosaki55tea) が RT された以下のツイートに触発されて調査、考察しました https://twitter.com/frsyuki/status/319546145082863616 https://twitter.com/frsyuki/status/319546516316499969 https://twitter.com/frsyuki/status/319547103296774145 適当に突っ込んでみたエスパーツイート https://twitter.com/lyrical_logical/status/3195553…

以下の考察は openjdk のコードを元にしているため、oracle だとまた違うかもしれない。

map0 でめでたく native からヒープをがさっと取ってこれた場合、色々あった末に DirectBuffer を implements した DirectByteBuffer とやらが具象クラスとなる。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/nio/DirectByteBuffer.java DirectBuffer は自身の確保したリソースを開放する役割を持つオブジェクト Cleaner を返すメソッドを持っており、clean の処理は Unmapper に委譲される。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/nio/ch/FileChannelImpl.java#FileChannelImpl.Unmapper Cleaner は「オブジェクトが phantom reachable になった際に後処理を行いたい場合に利用するクラス」であり、ぶっちゃけ普通は出番ない。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/misc/Cleaner.java

ここから推測。