Skip to content

Instantly share code, notes, and snippets.

@sortega
sortega / Snippet.scala
Created June 25, 2017 17:04
Some snippet for an explanation
package futures
import scala.concurrent.Future
object Snippet {
type A = String
type B = Int
def first(x: String): Future[Option[A]] = ???
@sortega
sortega / output.sh
Created March 23, 2017 10:05
Static methods and modules
> ruby statics.rb
4
statics.rb:12:in `<main>': undefined method `non_static' for Foo:Module (NoMethodError)
@sortega
sortega / daughters.scala
Last active February 22, 2017 15:05
Solve the 3 daughters problem in a few Scala lines
val options = (for {
a <- 1 to 36
b <- 1 to 36
c <- 1 to 36
if a*b*c == 36
} yield Vector(a, b, c).sorted).distinct
val groups = options.groupBy(_.sum)
val ambiguousOptions = groups.values.find(_.size > 1).get
@sortega
sortega / spell_tutor.rb
Created November 6, 2016 19:49
A spelling tutor script for OSX (you need to have a working `say` command)
#!/usr/bin/env ruby
require 'optparse'
SPELLINGS = Hash.new { |hash, key| key }
SPELLINGS['n'] = 'an'
SPELLINGS['z'] = 'zet'
command = :none
parser = OptionParser.new do |opts|
opts.banner = "Usage: spell_tutor.rb [--spelling|--dictation]"
@sortega
sortega / package.scala
Created November 4, 2016 16:37
FS2 part 2
import scala.concurrent.ExecutionContext
import scala.concurrent.duration._
import scala.util.Random
import fs2._
package object demo {
implicit val strategy = Strategy.fromExecutionContext(ExecutionContext.global)
implicit val scheduler = Scheduler.fromFixedDaemonPool(2)
@sortega
sortega / fs2_intro.sc
Created October 29, 2016 13:10
FS2 intro worksheet
import java.nio.file.Paths
import scala.concurrent.Future
import scala.util.control.NoStackTrace
import fs2._
import scalaz._
import Scalaz._
import com.jobandtalent.commons.streams.{FileStreams, StreamCombinators}
org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:702)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:557)
at cakesolutions.kafka.KafkaConsumer$.apply(KafkaConsumer.scala:128)
at com.jobandtalent.kafka.client.KafkaTopic.com$jobandtalent$kafka$client$KafkaTopic$$buildConsumer$1(KafkaTopic.scala:38)
at com.jobandtalent.kafka.client.KafkaTopic$$anonfun$initialize$1$1.apply(KafkaTopic.scala:31)
at com.jobandtalent.kafka.client.KafkaTopic$$anonfun$initialize$1$1.apply(KafkaTopic.scala:30)
at fs2.Task$$anonfun$delay$1.apply(Task.scala:187)
at fs2.Task$$anonfun$delay$1.apply(Task.scala:187)
at fs2.Task$$anonfun$suspend$1$$anonfun$2.apply(Task.scala:195)
@sortega
sortega / ForFree.scala
Created October 3, 2016 16:19
I informally demoed the concept of Free monad to a colleague and he asked for the code. I've added a couple comments to make it standalone.
package experiments
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.{Await, Future}
import scalaz._
import Scalaz._
import scala.concurrent.duration.Duration
import natural.TypeSafeMap
{-# LANGUAGE FlexibleInstances, OverlappingInstances #-}
import Data.List
toJson1 :: [String] -> String
toJson1 elems = toArray $ map quote elems
where quote elem = '"' : elem ++ "\""
toArray elems = '[' : concat (intersperse ", " elems) ++ "]"
sample1 = toJson1 ["a", "b", "c"]
@sortega
sortega / README.md
Created May 24, 2016 16:23
Further reading after the "Human Learning" talk