Skip to content

Instantly share code, notes, and snippets.

View duanebester's full-sized avatar

Duane Bester duanebester

View GitHub Profile
@duanebester
duanebester / buffer-socket-utils.clj
Last active September 26, 2021 21:07
Getting and Closing a Buffer Socket
(defn connected? [^SocketChannel client]
(or (.isConnected client) (.isOpen client)))
(defn get-buffer-socket
[^Integer port ^String address]
(let [client (SocketChannel/open)
address (InetSocketAddress. address port)]
(.configureBlocking client true)
(.connect client address)
(init-buffer-socket client)))
@duanebester
duanebester / init-buffer-socket.clj
Last active September 26, 2021 21:06
Building a Byte Buffer SocketChannel
(defn- init-buffer-socket [client]
(let [in-ch (async/chan)
out-ch (async/chan)
header-buf (ByteBuffer/allocate 5)
buff-sock (map->ByteBufferSocket {:client client
:in in-ch
:out out-ch})]
;; Read Backend Messages from Postgres
(async/go-loop []
(when (connected? client)
@duanebester
duanebester / buffer-socket-1.clj
Last active September 26, 2021 20:41
Buffer Socket Imports and Def
(ns com.clunk.buffer-socket
(:require [clojure.core.async :as async])
(:import
(java.nio ByteBuffer)
(java.nio.channels SocketChannel)
(java.net InetSocketAddress)))
(defrecord ByteBufferSocket [^SocketChannel client in-ch out-ch])
@duanebester
duanebester / GoogleDriveDownloader.scala
Created August 3, 2021 19:28
Download files from Google Drive with Scala
/**
val scala3Version = "3.0.1"
libraryDependencies += "com.google.api-client" % "google-api-client" % "1.32.1",
libraryDependencies += "com.google.oauth-client" % "google-oauth-client-jetty" % "1.31.5",
libraryDependencies += "com.google.apis" % "google-api-services-drive" % "v3-rev197-1.25.0",
*/
import com.google.api.services.drive._
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
@duanebester
duanebester / ImageTransformer.scala
Created July 18, 2021 00:09
Image Processing with Cats and Scrimage - Scala 3
/**
libraryDependencies += "commons-io" % "commons-io" % "2.10.0",
libraryDependencies += "com.sksamuel.scrimage" % "scrimage-core" % "4.0.20",
libraryDependencies += ("com.sksamuel.scrimage" %% "scrimage-scala" % "4.0.20").cross(CrossVersion.for3Use2_13),
*/
import cats.effect.{ExitCode, IO, IOApp}
import com.sksamuel.scrimage.ImmutableImage
import com.sksamuel.scrimage.nio.PngWriter
import java.io.File
@duanebester
duanebester / voyager.html
Created May 11, 2021 12:04
Voyager GraphQL With API Key Prompt
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/react@@16/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@@16/umd/react-dom.production.min.js"></script>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/graphql-voyager/dist/voyager.css"
/>
<script src="https://cdn.jsdelivr.net/npm/graphql-voyager/dist/voyager.min.js"></script>
@duanebester
duanebester / frontend_interview_questions.md
Last active January 14, 2021 21:07
JS Interview Questions

Q1 (easy)

What will the code below output? Explain your answer.

console.log(0.1 + 0.2);
console.log(0.1 + 0.2 == 0.3);
Answer
@duanebester
duanebester / threads-scratch.u
Last active November 19, 2020 01:52
Threads Scratch for Unison
use .base
use .base.Text
use .base.Nat
counter.doc = [:
@counter takes an `id` parameter and number `n` parameter to be incremented.
Prints id and number: "Counter <id>: <n>".
Recursively calls itself every 3 seconds with an incremented number.
@[signature] counter
@duanebester
duanebester / threads-test.u
Created November 19, 2020 01:39
Playing with threads in Unison
use .base
use .base.Text
use .base.Nat
counter.doc = [:
@counter takes an `id` parameter and number `n` parameter to be incremented.
Prints id and number: "Counter <id>: <n>".
Recursively calls itself every 3 seconds with an incremented number.
@[signature] counter
@duanebester
duanebester / reduce_steps.py
Created October 22, 2020 02:34
Python Reduce Steps Challenge
def calc_steps(num):
count = 0
while num > 1:
if num % 2 == 0: # bitmask: *0
num = num // 2
elif num == 3 or num % 4 == 1: # bitmask: 01
num -= 1
else: # bitmask: 11
num += 1
count += 1