Skip to content

Instantly share code, notes, and snippets.

View ajaychandran's full-sized avatar

Ajay Chandran ajaychandran

View GitHub Profile
@ajaychandran
ajaychandran / WebSocketTester.scala
Last active January 11, 2021 10:08
Example for Airstream websocket event sources (PR #60)
import com.raquo.laminar.api.L._
import org.scalajs.dom
import scala.scalajs.js
/** @see [[https://www.websocket.org/echo.html]] */
object WebSocketTester {
private val url = "wss://echo.websocket.org/"
private val transmit = Var("hello")
@ajaychandran
ajaychandran / streams.scala
Last active December 25, 2020 10:49
Airstream: Http Streams
// Perform HTTP requests lazily (onStart) as opposed to EventStream.fromFuture(dom.Ajax.*)
final class AjaxEventStream(
method: String,
url: String,
data: dom.ext.Ajax.InputData,
timeout: Int,
headers: Map[String, String],
withCredentials: Boolean,
responseType: String
) extends EventStream[dom.XMLHttpRequest] {
@ajaychandran
ajaychandran / streaming.scala
Last active June 5, 2020 08:00
Alternative encoding for ZIO stream abstractions
package zio
import java.io.{ InputStream, OutputStream }
import java.nio.charset.StandardCharsets
object streaming {
type Pull[-R, +E, +I] = ZIO[R, Option[E], I]
type Push[-R, +E, -I] = I => ZIO[R, E, Unit]
type Step[-R, +E, -I, +O] = I => ZIO[R, E, O]
@ajaychandran
ajaychandran / machine.js
Created February 12, 2020 09:39
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
@ajaychandran
ajaychandran / WindowTest.java
Created February 1, 2016 04:55
Test for com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window lifecycle
package gdx;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl3.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
final class FinalizerCancelable(finalizer: () => Unit) extends BooleanCancelable {
private val state = new AtomicReference(FinalizerCancelable.State())
def isCanceled: Boolean = state.get().canceled
def acquire(): BooleanCancelable = {
state.get() match {
case FinalizerCancelable.State(true, _) => BooleanCancelable.alreadyCanceled
case s => state.compareAndSet(s, s.copy(active = s.active + 1)) match {
case false => acquire()
@ajaychandran
ajaychandran / DelimitedCodec.scala
Last active December 23, 2016 01:41
scodec: DelimitedCodec
package scodec.codecs
import scala.language.higherKinds
import scodec._
import scodec.bits.BitVector
object DelimitedCodec {
/**
@ajaychandran
ajaychandran / ChecksumCodec.scala
Last active August 29, 2015 14:22
scodec: FilterCodec
package scodec.codecs
import scodec._
import scodec.bits.{ByteVector, BitVector}
/**
* ChecksumCodec
*/
object ChecksumCodec {