Skip to content

Instantly share code, notes, and snippets.

View kubukoz's full-sized avatar
😱
I might take a week to respond. Or a month.

Jakub Kozłowski kubukoz

😱
I might take a week to respond. Or a month.
View GitHub Profile
@kubukoz
kubukoz / ws.scala
Created September 21, 2024 18:09
WebSocket server in http4s that forwards messages from each client to the others
//> using dep org.http4s::http4s-ember-server::0.23.28
import cats.effect.IO
import cats.effect.IOApp
import cats.effect.std.UUIDGen
import cats.syntax.all.*
import fs2.concurrent.Topic
import org.http4s.HttpApp
import org.http4s.ember.server.EmberServerBuilder
import org.http4s.websocket.WebSocketFrame
@kubukoz
kubukoz / .scalafmt.conf
Last active October 6, 2024 15:40
How to disable significant indentation in Scala
runner.dialect = scala3
runner.dialectOverride.allowSignificantIndentation = false
# allows `if x then y`
runner.dialectOverride.allowQuietSyntax = true
//> using option -Ykind-projector
trait Demo {
type LA
type LB
type RA
type RB
def x(using
laEqLb: LA =:= LB,
raEqRb: RA =:= RB
@kubukoz
kubukoz / SagemakerMock.scala
Created July 26, 2024 13:43
Sagemaker invocation mock with http4s and records4s
//> using dep org.http4s::http4s-ember-server:0.23.27
//> using dep org.http4s::http4s-dsl:0.23.27
//> using dep org.http4s::http4s-circe:0.23.27
//> using dep com.github.tarao::record4s-circe:0.13.0
//> using option -Wunused:all
import cats.effect.IO
import cats.effect.IOApp
import com.comcast.ip4s.*
import com.github.tarao.record4s.%
import com.github.tarao.record4s.select
@kubukoz
kubukoz / compile.sh
Created January 13, 2024 00:46
Primitive Playdate game built with clang
#!/bin/bash
set -euo pipefail
# You'll have to change this, also see note about caveat below
SDK_PATH=/Users/kubukoz/Developer/PlaydateSDK/C_API
rm -rf HelloWorld.pdx || true
rm Source/pdex.elf || true
@kubukoz
kubukoz / slides.md
Last active July 6, 2024 15:26
Let's build an IDE!

Jakub Kozłowski | Scala in the city | 26 X 2023

Code | Recording


Why build an IDE?

  1. For fun
  2. For your proprietary DSL
@kubukoz
kubukoz / scala3tailrec-inline.sc
Created October 15, 2023 21:40
Scala 3 inlines before tailrec analysis
// compiles
//> using scala "3.3.1"
import scala.annotation.tailrec
case class Opt[A](value: A | Null) {
inline def flatMap[B](inline f: A => Opt[B]): Opt[B] =
if (value == null)
Opt(null)
else
@kubukoz
kubukoz / ngrams.scala
Created May 4, 2023 18:24
My solution to the "top n-grams" problem for my mock interview on Marcin Krykowski's channel
//> using scala "3.2.2"
//> using lib "co.fs2::fs2-io:3.6.1"
//> using lib "io.circe::circe-core:0.14.5"
//> using lib "io.circe::circe-parser:0.14.5"
import cats.data.NonEmptyList
import cats.effect.IO
import cats.effect.IOApp
import cats.implicits.*
import cats.kernel.Order
import fs2.io.file.Files
@kubukoz
kubukoz / Demo.scala
Created April 19, 2023 13:50
Using `getAndDiscreteUpdates` and `mapN` and it still works
//> using lib "co.fs2::fs2-core:3.7.0-RC4"
import cats.effect.IOApp
import cats.effect.IO
import scala.concurrent.duration._
import cats.effect.std.UUIDGen
import cats.implicits._
import scala.util.Random
import fs2.concurrent.Signal
object Demo extends IOApp.Simple {
@kubukoz
kubukoz / fs2zip.scala
Created January 22, 2023 04:03
Example of using fs2 + ZipInputStream to open a zipfile in Scala. Probably buggy and maybe leaky.
//> using scala "2.13.10"
//> using lib "co.fs2::fs2-io:3.5.0"
//> using option "-Wunused:imports"
import cats.effect.IO
import cats.effect.IOApp
import cats.effect.kernel.Resource
import cats.implicits._
import fs2.io.file.Files
import fs2.io.file.Path