Skip to content

Instantly share code, notes, and snippets.

View gakuzzzz's full-sized avatar

Manabu Nakamura gakuzzzz

View GitHub Profile
@RayStarkMC
RayStarkMC / PhantomBuilderSample.java
Created November 6, 2020 12:00
幽霊型を用いた不変オブジェクトの型安全な不変ビルダのサンプルコード
public class PhantomBuilderSample {
public static class Data {
private final int field1;
private final int field2;
private final int field3;
private final int optField1;
private final int optField2;
private Data(Builder<OK, OK, OK> builder) {
@qnighy
qnighy / rust-patterns.md
Last active March 20, 2024 03:33
Rustのパターンっぽいやつメモ

パターンとはその言語が抽象化できなかった敗北の歴史である。 しかしどんなに優れた言語であってもあらゆる繰り返しに勝てるわけではない。 人は必ずメタ繰り返しを欲するからだ。 そしてそれはRustも例外ではない。

ここでは、OOPでも知られているパターンよりも、Rustに特有のパターンを思いつく限りまとめてみた。名前は適当。

  • crate splitting
    • でかいcrateを分割して、見通しを良くする・再コンパイルの分量を削減する・並列コンパイルを可能にする
  • 親玉crate(全てにdependする)と殿crate(全てにdependされる)があることが多いので、だいたい束みたいな形になる。
@azu
azu / Incremental DOM.md
Last active July 13, 2022 16:07
Incremental DOM ざっと見たやつ。追記: 初期バージョンのコードなので最新では異なる場合があります。

Incremental DOM

Introducing Incremental DOM — Google Developers — Medium

Reactやvirtual-dom、Glimmer(Ember)などVirtual DOMの実装は色々あるが、これらのVirtual DOM実装には2つの問題がある

  • 既存のテンプレート言語を利用していない(しにくい)
  • モバイルでのパフォーマンス、特にメモリに関しては大きすぎる

これらを解決するためにIncremental DOMと言うものを作っている(WIP)

@sile
sile / pfds-7.md
Last active June 30, 2019 20:34
Purely Functional Data Structures: 第7章

第7章 償却を除去する

memo: スケジューリングの役割

  • イメージ的には銀行員の手法での__支払い__を実装に反映した感じ
  • 後ろに重いサスペンションが控えている場合の挙動の違い:
    • 6章(償却):「軽い操作で__仮想的に__その内のN個のデビットを払ったことにしておこう」
    • 7章(最悪):「軽い操作で__実際に__その内のN個の(小さな)サスペンションを事前に評価しておこう」
  • 支払い(or 評価)が終わっていないオブジェクト(サスペンション)に対するアクセスは許可されない
@xuwei-k
xuwei-k / scalaz-stream.md
Last active June 24, 2021 01:09
Scalaz-Streamの基本的なクラスや概念まとめ

Scalaz-Streamの基本的なクラスや概念まとめ

  • versionは0.7a

scalaz-streamが依存してるライブラリ内のclass

  • scalaz-streamではなくscalaz-concurrentにあるクラス
  • scalaz-streamは、これと Task にかなり依存してるので、まずはこれらを理解することが重要
@imjasonh
imjasonh / markdown.css
Last active November 6, 2024 14:26
Render Markdown as unrendered Markdown (see http://jsbin.com/huwosomawo)
* {
font-size: 12pt;
font-family: monospace;
font-weight: normal;
font-style: normal;
text-decoration: none;
color: black;
cursor: default;
}
trait HApply[F[_[_]]] extends HFunctor[F] {
def apply2[A1[_], A2[_], Z[_]](a1: F[A1], a2: F[A2])(f: ({type l[a] = (A1[a], A2[a])})#l ~> Z): F[Z]
def apply3[A1[_], A2[_], A3[_], Z[_]](a1: F[A1], a2: F[A2], a3: F[A3])(f: ({type l[a] = (A1[a], A2[a], A3[a])})#l ~> Z): F[Z] =
apply2[({type l[a] = (A1[a], A2[a])})#l, A3, Z](tuple2(a1, a2), a3)(
new (({type l[a] = ((A1[a], A2[a]), A3[a])})#l ~> Z){
def apply[a](fa: ((A1[a], A2[a]), A3[a])) =
f((fa._1._1, fa._1._2, fa._2))
}
)
@xuwei-k
xuwei-k / Ideal.scala
Last active August 29, 2015 14:15
stack safe Ideal Monad in Scala
import scala.annotation.tailrec
import scalaz._
import scalaz.Leibniz.===
object Ideal {
private final case class Pure[F[_], A](a: A) extends Ideal[F, A]
private final case class Suspend[F[_], A](fa: F[A]) extends Ideal[F, A]
private sealed abstract case class Gosub[F[_], B]() extends Ideal[F, B] {
type C
val a: () => Ideal[F, C]
@asufana
asufana / Play1.xのJava8対応.markdown
Last active July 24, 2018 08:33
PlayFramework 1.2.x Java8対応

PlayFramework 1.2.x Java8対応

Java8対応の1.3がリリースされそうな様子がないため、1.2.xブランチにJava8対応コミットを適用して利用する。

PlayFramework1リポジトリをforkする

  • GitHubサイト上で PlayFramework1リポジトリ をforkする

  • タグ 1.2.5.4 をチェックアウトして新しいブランチ 1.2.5.4-java8 を生成する

import httpz._, native._
object Main {
final case class Repo(owner: String, name: String)
val repositories = (
Repo("slick", "slick") ::
Repo("mauricio", "postgresql-async") ::
Repo("squeryl", "squeryl") ::