Skip to content

Instantly share code, notes, and snippets.

$ scala rpnparser.scala
1 1 + = 2
3 1 - = -2
3 2 * = 6
8 2 / = 0
2 (2 2 +) + = 6
2 2 2 + + = 6
(2 2 +) 2 + = 6
(2 2 +) (4 2 +) * = 24
((2 2 +) (4 2 +) *) 2 / = 0
@lyricallogical
lyricallogical / rpscala92
Created November 20, 2012 15:53
rpscala92
!SLIDE
implicit parameter 入門
----------------
!SLIDE
implicit parameter って?
----------------
* 「Type Classes がどうのこうの」
* 「Context Bounds がどうのこうの」
@lyricallogical
lyricallogical / pf.scala.md
Last active December 10, 2015 22:38
partialfunction

Partial Function 便利だなーと思うとき

  • 単純に domain でかい

    • まあ普通
  • 内部実装と外部に見せたいシグネチャで domain が異なる場合

    • json みたいな自己参照ふくむ値コンストラクタ必要なデータに対する処理でよくやる
    • Partial Function ないとコードの重複が生じちゃう
      • open recursion 使えば部分関数実現できるので、頑張れば重複なくせると思うけどここまでシンプルにかけない
@lyricallogical
lyricallogical / addlinktojira.user.js
Created January 17, 2013 21:52
github の scala リポジトリのコミットタイトルやメッセージ内の JIRA の Issue 番号にリンクをつけるだけの chrome 向け user script firefox でも動くかもしれない
// ==UserScript==
// @name add link to jira
// @description replace SI-NNNN with link to correspond issue page.
// @version 0.1
// @match https://github.com/scala/scala/commit/*
// @match https://github.com/scala/scala/commits/*
// ==/UserScript==
(function() {
var each = Array.prototype.forEach
var url = 'https://issues.scala-lang.org/browse/';
@lyricallogical
lyricallogical / rpscala96.md
Last active December 11, 2015 22:48
rpscala96

!SLIDE あけましておめでとうございます

今年もよろしくお願いします

追記:95 回で発表するつもりでした…一月終わるよ!

!SLIDE いい機会なので

@lyricallogical
lyricallogical / todate.scala
Created January 31, 2013 09:29
method-dependent-types なくても普通に返値型は変えられますよの話
def toDate[Result](magnet: DateMagnet[Result]): Result = magnet.convert
trait DateMagnet[Result] {
def convert(): Result
}
object DateMagnet {
implicit def fromInt(tuple:(Int, Int, Int)) = new DateMagnet[java.util.Calendar] {
def convert() = {
val (year, month, date) = tuple
@lyricallogical
lyricallogical / rpscala97.md
Last active December 13, 2015 16:49
rpscala97

!SLIDE PartialFunction ってなあに?

部分関数のことだよ

!SLIDE 部分関数ってなあに?

そもそも関数ってなあに?

@lyricallogical
lyricallogical / Macros.scala
Last active December 13, 2015 23:39 — forked from xuwei-k/Macros.scala
試してないけどこれでいいのでは
import scala.reflect.macros.Context
import scala.util.matching.Regex
import java.util.regex.PatternSyntaxException
object Macros{
implicit class RegexContext(val c: StringContext) {
def r(): Regex = macro regexImpl
}
package com.qtamaki.typeclass
trait Hoge[A] {
def age(a: A): A
def sage(a: A): A
def hoge(a: A): A
}
object Hoge {
implicit def IntHoge: Hoge[Int] =
@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

ここから推測。