Skip to content

Instantly share code, notes, and snippets.

View bristermitten's full-sized avatar

Alexander Wood bristermitten

View GitHub Profile
@bristermitten
bristermitten / Socket.hs
Created January 16, 2023 21:05
polysemy stuff
{-# LANGUAGE TemplateHaskell #-}
module Polysemy.Socket where
import Control.Exception (bracketOnError)
import Data.ByteString qualified as BS
import Network.Socket (AddrInfo (addrAddress), SockAddr, Socket, SocketOption (ReuseAddr), accept, bind, gracefulClose, listen, openSocket, setCloseOnExecIfNeeded, setSocketOption, withFdSocket)
import Network.Socket qualified as S
import Network.Socket.ByteString
import Polysemy (Member, Members, Sem, interpret, makeSem, pureT, reinterpretH)
@bristermitten
bristermitten / core.clj
Created March 6, 2022 15:59
enterprise clojure
(ns enterprise.core
(:require [clojure.string :as str])
(:gen-class))
(def names ["event" "parameter" "factory" "service" "builder" "executor" "implementation" "impl" "predicate" "delegate" "resolver" "exporter" "abstract" "boostrap" "bean" "visitor" "method" "interpreter" "template" "advisor" "adapter" "object" "candiate" "context" "pattern" "exception" "component"
"utils" "mapper" "adapter" "pool" "response" "listener"])
(def prefixes ["I" "Abstract" "Stub" "Mock" "Delegating" ""])
(defn rand-prefix [] (rand-nth prefixes))
@bristermitten
bristermitten / RecordTypeAdapterFactory.java
Created July 24, 2021 15:47
Gson support for java 16 records
package me.bristermitten.warzone.config.loading;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
@bristermitten
bristermitten / jithub.hs
Created April 12, 2021 21:42
Function composition
.
@bristermitten
bristermitten / TimePrettify.java
Created February 29, 2020 15:24
Converts a time in seconds to a pretty string
/**
* Convert a second time to a "pretty" string
* Credit: https://stackoverflow.com/a/7663966 (modified for correct English if there's only 1 unit)
* @param seconds the time
* @return a pretty string
*/
public static String getDurationBreakdown(long seconds) {
if (seconds < 0) {
throw new IllegalArgumentException("Duration must be greater than zero!");
}
@bristermitten
bristermitten / BreakerEnchant.java
Last active April 19, 2020 14:34
A simple Spigot Custom Enchant template
package me.bristermitten.enchant;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentTarget;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
@bristermitten
bristermitten / ObjectBuffer.kt
Last active December 1, 2019 15:29
A simple Object Buffer implementation in Kotlin that uses BlockingQueue. Objects cannot be reused so new values are always created, unless any are cached.
package me.bristermitten.teamed.util
import java.util.concurrent.BlockingQueue
import java.util.concurrent.LinkedBlockingQueue
/**
* A buffer of objects with a fixed size.
* These objects cannot be reused so the given [compute] function is continuously run asynchronously
* to ensure that the buffer is always populated.
* If the objects are polled faster than [compute] can create new objects,
@bristermitten
bristermitten / Downloader.java
Last active April 7, 2019 14:18
KnightzAPI Downloader
public class Downloader {
public static void downloadKnightzAPI(Plugin yourPlugin) {
try {
URL gitHubURL = new URL("https://api.github.com/repos/knightzmc/knightzapi/releases/latest");
HttpURLConnection connection = (HttpURLConnection) gitHubURL.openConnection();
connection.setRequestMethod("GET");
if (connection.getResponseCode() == 200) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String content = in.lines().collect(Collectors.joining());
import java.util.Arrays;
import java.util.Scanner;
class CoderbyteLongString {
private static final String REGEX = "[^0-9+a-z+A-Z ]*";
public static String LongestWord(String sen) {
String[] words =
sen.replaceAll(REGEX, "") //filter out any characters that aren't a normal letter or number - remove punctuation