Skip to content

Instantly share code, notes, and snippets.

View qtamaki's full-sized avatar

Tatsunori TAMAKI qtamaki

View GitHub Profile
@gakuzzzz
gakuzzzz / 0_README.md
Created July 11, 2016 08:09
Java8 Stream API の Collector を合成する

Java8 の Stream API は Stream#collect メソッドを使って様々な集約を行う事ができます。

java.util.stream.Collectors で様々な Collector が提供されていますが、Collectors.collectingAndThen のような合成が中心で同時に二つの集約を行うといった事が簡単にできません。

そのため、ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API の「7. streamの外に結果を残す(禁止度:A)」で書かれている様な思わず禁止したくなっちゃう様なコードを書かざるを得ません。

// 引用: ラムダ禁止について本気出して考えてみた
//       7. streamの外に結果を残す(禁止度:A)
void averageAndSum1(List list) {
@xuwei-k
xuwei-k / gist:81d966bdff21a94a725794f1bf3e2041
Created June 2, 2016 02:25
Foldable の foldLeft が型推論のためにああいうシグネチャになってる理由(引数の順番とシグネチャ)
scala> trait Foldable1[F[_]] { def foldLeft[A, B](fa: F[A], z: B)(f: (B, A) => B): B }
warning: there was one feature warning; re-run with -feature for details
defined trait Foldable1
scala> val list = new Foldable1[List] { def foldLeft[A, B](fa: List[A], z: B)(f: (B, A) => B) = fa.foldLeft(z)(f) }
list: Foldable1[List] = $anon$1@5884a914
scala> list.foldLeft(List(1,2,3), "")((x, y) => x + y.toString)
res0: String = 123
#!/bin/bash
JAVA_HOME=${1-text}
[ $# -eq 0 ] && { echo "Usage: sudo $0 \$(/usr/libexec/java_home -v '1.8*')" ; exit 1; }
KEYSTORE=$JAVA_HOME/jre/lib/security/cacerts
wget https://letsencrypt.org/certs/isrgrootx1.pem
wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.der
wget https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.der
レンズは余状態余モナドの余代数だった
===================================
余余余〜!別名`関数的参照`とも呼ばれる[レンズ](https://hackage.haskell.org/package/lens)はJavaのGetter, Setterと同等と[言われる](https://twitter.com/plt_borat/status/228009057670291456)関数型プログラミングのデザインパターンの一つです。
レンズは余状態余モナドの余代数だと[聞いて](https://twitter.com/hiratara/status/317602743219003392)そうなのかーと思ってたのですが、ふと自分で実装してみたくなったので **余状態余モナドの余代数** として実装してみることにしました。
ちなみにこの文章は`literate Haskell`という形式で書かれているのでダウンロードしてghciでロードすればすぐにでも自分で試すことができます。
まず最初におまじない
> {-# LANGUAGE RankNTypes #-}
@tkawachi
tkawachi / Code.class.base64
Last active August 29, 2015 14:16
Hello World! golf
yv66vgADAC0AEwwAEAASAQAWKFtMamF2YS9sYW5nL1N0cmluZzspVgEADEhlbGxvIFdvcmxkIQcACwgAAwcADgEABENvZGUBAARtYWluCQAGAAEMAAwAEQEAE2phdmEvaW8vUHJpbnRTdHJlYW0BAAdwcmludGxuBwAHAQAQamF2YS9sYW5nL1N5c3RlbQoABAAKAQADb3V0AQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAVTGphdmEvaW8vUHJpbnRTdHJlYW07ACEADQAEAAAAAAABAAkACAACAAEABwAAABUAAgABAAAACbIACRIFtgAPsQAAAAAAAA==
package x;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import lombok.val;
import lombok.extern.slf4j.Slf4j;
package x;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import lombok.val;
import lombok.extern.slf4j.Slf4j;
@gakuzzzz
gakuzzzz / essential.scala
Created September 30, 2012 07:07
ThreadSafe jetty server
package com.yuroyoro.websocket
import javax.servlet.http._
import org.eclipse.jetty.websocket._
import org.eclipse.jetty.websocket.WebSocket.Outbound
import java.util.concurrent.atomic._
class ChatServlet extends WebSocketServlet {
val clients = new AtomicReference[Set[ChatWebSocket]](Set())
@lyricallogical
lyricallogical / rpscala69
Created February 15, 2012 10:23
rpscala69
!SLIDE
sclaz7 の scalaz.Iteratee の紹介
================================
!SLIDE
発端
----
> @halcat0x15a: @lyrical_logical 7のiterateeが別物になってて読めないです・・・・ 11:38 PM - 14 Feb 12