Skip to content

Instantly share code, notes, and snippets.

View gakuzzzz's full-sized avatar

Manabu Nakamura gakuzzzz

View GitHub Profile
@gakuzzzz
gakuzzzz / repl.scala
Created February 14, 2014 02:34
アレ
scala> 5 & 6
res0: Int = 4
scala> 5 | 6
res1: Int = 7
scala> 10 & 13
res2: Int = 8
scala> 10 | 13
@gakuzzzz
gakuzzzz / repl.scala
Created February 21, 2014 12:41
PartialFunction
scala> val list: Seq[PartialFunction[Int, String]] = Seq({case 1 => "a"}, {case 2 => "b"}, {case 3 => "c"})
list: Seq[PartialFunction[Int,String]] = List(<function1>, <function1>, <function1>)
scala> list.reduceLeft(_ orElse _).apply(100)
scala.MatchError: 100 (of class java.lang.Integer)
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:248)
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:246)
at $anonfun$3.applyOrElse(<console>:7)
at $anonfun$3.applyOrElse(<console>:7)
at scala.runtime.AbstractPartialFunction$mcLI$sp.apply$mcLI$sp(AbstractPartialFunction.scala:33)
@gakuzzzz
gakuzzzz / gist:9737634
Last active August 29, 2015 13:57
Ninja Framework お悩み相談

Ninja Framework 困りごと

やりたい事

  1. Controller のメソッド引数に Optional<ID<User>> のような Generic な独自型を指定したい。
    • 独自型の変換時に Validation と連携したい。
  2. Java8 の javac option -parameters を使用して、 Controllerメソッドの引数名からRequest Parameter名やPathParameter名を解決したい。
    • こちらは Java8 専用機能になるし、また Ninja の思想から若干外れている気もするので Ninja 本体に手を入れるよりは plugin なりで提供できればよいと考えている。
@gakuzzzz
gakuzzzz / ParamType.scala
Created April 4, 2014 16:02
skinny #103
package skinny
import org.joda.time.{ DateTime => JDateTime, LocalDate => JLocalDate, LocalTime => JLocalTime, _ }
import skinny.util.DateTimeUtil
/**
* Strong parameter type definition.
*/
trait ParamType {
@gakuzzzz
gakuzzzz / 1_.scala
Last active August 29, 2015 13:59
Is Stream#addString correct?
scala> Iterator.iterate(0)(_ + 1).take(10).addString(new StringBuilder, ",")
res7: StringBuilder = 0,1,2,3,4,5,6,7,8,9
scala> Stream.iterate(0)(_ + 1).take(10).addString(new StringBuilder, ",")
res8: StringBuilder = 0,?
scala> Iterator.iterate(0)(_ + 1).take(10).toString
res9: String = non-empty iterator
scala> Stream.iterate(0)(_ + 1).take(10).toString
@gakuzzzz
gakuzzzz / FizzBuzz.java
Created May 26, 2014 08:01
ついかっとなってやった。反省はしていない
import static java.util.stream.Collectors.toList;
import java.util.stream.IntStream;
public class FizzBuzz {
public String chooseWord(final int i) {
if (i % 15 == 0) return "FizzBuzz";
if (i % 3 == 0) return "Fizz";
if (i % 5 == 0) return "Buzz";
return String.valueOf(i);
@gakuzzzz
gakuzzzz / console.scala
Created June 4, 2014 11:44
sbt publishSigined
[trace] Stack trace suppressed: run last root/*:publishSignedConfiguration for the full output.
[trace] Stack trace suppressed: run last sample/*:publishSignedConfiguration for the full output.
[error] (root/*:publishSignedConfiguration) Repository for publishing is not specified.
[error] (sample/*:publishSignedConfiguration) Repository for publishing is not specified.
[error] Total time: 13 s, completed 2014/06/04 20:34:58
> reload
@gakuzzzz
gakuzzzz / gist:7766a6823cd2b101936d
Last active August 29, 2015 14:04
ApplicativeStype

ApplicativeBuilder

      (a |@| b |@| c |@| d apply f1) 
  |@| (e |@| f |@| g |@| h apply f2)
  apply f3

Haskell like Applicative Style

@gakuzzzz
gakuzzzz / gist:0149504e99a371974539
Last active August 29, 2015 14:04
validation dsl

spec

  • 氏名は必須
  • メアドはオプショナル
    • だけど入力されていたら簡易な正規表現でチェック
  • 開始日と終了日は必須
    • 開始日 < 終了日 である必要がある
  • 全てのバリデーションが通ったら Subscription(name: String, mail: Option[String], interval: Interval) というオブジェクトにする
  • 氏名とメアドと開始日と終了日のvalidationはどれががこけても全て実施して全てのエラーを返す必要がある
@gakuzzzz
gakuzzzz / foo.scala
Last active August 29, 2015 14:04
ifExists
val (u, g) = (User.syntax("u"), Group.syntax("g"))
val groupId: Option[GroupId] = ...
// getOrElse
sql"""
SELECT
${u.result.*}
${groupId.map(v => sqls", ${g.result.name}") getOrElse sqls""}
FROM
${User as u}