Skip to content

Instantly share code, notes, and snippets.

View loicknuchel's full-sized avatar
👨‍💻
Explore your database => https://azimutt.app

Loïc Knuchel loicknuchel

👨‍💻
Explore your database => https://azimutt.app
View GitHub Profile
@loicknuchel
loicknuchel / gist:a2907a6ef04d2da1800f4aadaf23759d
Created November 10, 2016 09:58
Types vs React.propTypes

Why (some) frontend devs don't like TypeScript because of types but writes React.propTypes ????

Dropdown.propTypes = {
    text: React.PropTypes.object.isRequired,
    children: React.PropTypes.oneOfType([
        React.PropTypes.object,
        React.PropTypes.array
    ]).isRequired,
 autoClose: React.PropTypes.bool
@loicknuchel
loicknuchel / bio.md
Last active November 9, 2017 11:29
Profil formateur Human Coders

avatar

Après être passé par la SSII, le freelance et la création de startup, Loïc Knuchel est maintenant développeur Scala chez Criteo. En parallèle, il s'investit activement dans la communauté tech parisienne en participant à de nombreux meetup et conférences, aussi bien comme participant que speaker. Aller à la rencontre des autres développeurs, apprendre d'eux et partager ses expériences est crucial. C'est pourquoi il organise les HumanTalks Paris depuis plusieurs années. Côté technologies, il a commencé avec Java mais est rapidement passé à Scala en 2013 en découvrant Play Framework. Aujourd'hui, il est fan de programmation fonctionnelle et de typage fort; et cherche toujours comment écrire du code qui soit utile (à l'utilisateur) et reste le plus simple et maintenable possible, notamment via le mouvement du software craftsmanship, le DDD, l'UX, l'event storming, l'event sourcing et autres gros mots du genre ;)

@loicknuchel
loicknuchel / problem.md
Created May 23, 2017 16:37
Decoding json

I've got a JSON with a list of events :

[
  {"id":"1","kind":"start"},
  {"id":"2","kind":"start"},
  {"id":"1","kind":"stop"},
  {"id":"4","kind":"start"},
  {"id":"4","kind":"stop"}
]
@loicknuchel
loicknuchel / Lazy.scala
Last active August 24, 2017 14:25
Lazy monad
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.{FunSpec, Matchers}
import scala.concurrent.{ExecutionContext, Future}
import scala.util.{Success, Try}
class Lazy[A](block: => A) {
private var evaluated = false
private lazy val underlying: A = {
evaluated = true
import scala.util.{Failure, Success, Try}
object ValidationMonad {
sealed abstract class Validation[+A] {
def isValid: Boolean
def get: A
def getOrElse[B >: A](default: => B): B
def map[B](f: A => B): Validation[B]
def flatMap[B](f: A => Validation[B]): Validation[B]
}
@loicknuchel
loicknuchel / ImplicitClassResolutionFail.scala
Last active October 16, 2017 12:51
How implicit class resolution works ?
import org.scalatest.{FunSpec, Matchers}
object Implicits {
implicit class SeqEitherExtension[E, A](val elt: Seq[Either[E, A]]) extends AnyVal {
def partition: (Seq[E], Seq[A]) = {
val (left, right) = elt.partition(_.isLeft)
(left.collect { case Left(e) => e }, right.collect { case Right(a) => a })
}
}
@loicknuchel
loicknuchel / Result.txt
Last active September 18, 2018 14:05
Error with scalacheck on shrinking classes with assert
Testing started at 15:02 ...
Id.apply(7982e330-7daf-4cbd-a299-67af73ad24de)
Generated: Test(Id(7982e330-7daf-4cbd-a299-67af73ad24de),,464053996)
Id.apply(7982e330-7daf-4cbd)
TestFailedException was thrown during property evaluation.
Message: TestSpec.this.Id.isValid(Id.this.value) was false Invalid Id: 7982e330-7daf-4cbd
Location: (TestSpec.scala:16)
Occurred when passed generated values (
@loicknuchel
loicknuchel / CaseClassBoilerplate.scala
Created October 1, 2018 08:03
Try to remove boilerplate code created by many similar case classes
import java.sql.Timestamp
import java.time.Instant
import slick.basic.DatabaseConfig
import slick.jdbc.JdbcProfile
import slick.lifted.ProvenShape
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success, Try}
@loicknuchel
loicknuchel / Migrator.scala
Created November 8, 2018 12:43
Case class migration
trait Migrator[A, B] {
def migrate(a: A): B
}
object Migrator {
def apply[A, B](implicit m: Migrator[A, B]): Migrator[A, B] = m
implicit def product[A, B, AR <: HList, BR <: HList, Common <: HList, Added <: HList, Unaligned <: HList]
(implicit
@loicknuchel
loicknuchel / logs_compiler_stackoverflow
Last active April 2, 2019 06:58
compiler stack overflow
When building: https://github.com/loicknuchel/gospeak
If I do `sbt clean`, `sbt compile`, `sbt test` it works
But when I do `sbt clean test` it does not :(
Any idea how to troubleshoot ?
➜ gospeak git:(master) sbt clean test
[info] Loading global plugins from /home/lkn/.sbt/1.0/plugins
[info] Loading settings for project gospeak-build from plugins.sbt ...
[info] Loading project definition from /home/lkn/workspace/perso/gospeak/project
[info] Loading settings for project global from build.sbt ...