Skip to content

Instantly share code, notes, and snippets.

@el-hult
el-hult / while.hs
Created July 1, 2021 09:13
A simple While-loop in Haskell using the State Monad
-- Inspired by https://stackoverflow.com/questions/17719620/while-loop-in-haskell-with-a-condition
import Control.Monad.State
type IsZero = Bool
{-
This is in State monad. I.e. it is a function, that when given an initial state (Int,IsZero) will produce a tuple of ((Int,IsZero),())
We can see this as an action on our state space with no output value.
-}
@el-hult
el-hult / rpg.hs
Created July 6, 2021 12:25
A simple haskell program that is the base minimum for a text based dungeon crawler.
module RPG where
import Text.Read (readMaybe)
type UIState = String
data Domain = Domain (UIState,World) deriving Show
data World = World {loc:: Int} deriving Show
data Dir = L | R deriving (Read, Show)
{- | By using the "deriving (Read)" we get a low-code input mechanism, but you should probalbly write
your own input parser
-}
@el-hult
el-hult / yuv4mpeg2_sample.py
Created August 20, 2021 12:20
This code generates a very short video in the format of Yuv4mpeg2. It should be easily exendible to accept a series om bitmap images and create a video out of them.
WIDTH = 100
HEIGHT = 100
DURATION = 1 # seconds
FRAMES = 25*DURATION
def rgb2ycrcb(r,g,b):
""" ITU-R BT.601 (formerly CCIR 601) transformation
input in range 0-255
output in range 16-235 (headroom/footroom) for Y'
output in range 16-240 (headroom/footroom) for Cr/Cb
@el-hult
el-hult / monoids.hs
Created August 25, 2021 12:08
A Float wrapper that implements Monoid, but not the monoid laws
-- first monoid over Floats
data MaxNum = MaxNum Float deriving (Show)
instance Semigroup MaxNum where
(MaxNum a) <> (MaxNum b) = MaxNum $ max a b
instance Monoid MaxNum where
mempty = MaxNum 0 -- N.B. this does not fulfil the monoid laws fully. consider negative values!
aOne = MaxNum 4
aTwo = MaxNum 1
aThree = aOne <> aTwo
@el-hult
el-hult / quadplay.py
Created February 26, 2022 15:27
A code sample on how to create a interactive visualization in matplotlib with the matplotlib widgets. In this case, it shows how a quadratic with unknown location can be upper bounded.
# %% set up the plot
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider
LOC_MAX = 2
# The parametrized function to be plotted
def f1(t, amplitude, location):
@el-hult
el-hult / LazyRandom.hs
Created March 10, 2022 15:24
Example on how to generate a lazy stream of random numbers in haskell using System.IO.Unsafe
import System.IO.Unsafe ( unsafeInterleaveIO )
import System.Random ( randomRIO )
import Text.Printf ( printf )
-- | An infinite list of random die rolls, lazily generated
--
-- This is dangerous since calling this function steps the global random generator
-- not when running the action, but when accessing its result.
diceRolls :: IO [Int]
diceRolls = do
@el-hult
el-hult / empbern.py
Last active April 5, 2022 08:17
Comparison between Empirical Bernstein, Hoeffding and CLT
"""
Comparison of empirical bernstein measures
See https://el-hult.github.io/2022/03/18/empirical-bernstein-bounds.html
"""
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sps
import pandas as pd
@el-hult
el-hult / classical_ols.py
Last active March 21, 2022 11:06
Run a linear regression under the classical OLS assumptions: well specification, homoscedacity and normal errors. Then draw a confidence box and a confidence ellipse.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse, Rectangle
from matplotlib.transforms import Affine2D
from scipy.stats import t, f
from scipy.linalg import sqrtm
import statsmodels.api as sm
@el-hult
el-hult / Pointers.hs
Created March 23, 2022 08:58
A Hasekll module that can store vectors from hmatrix as double arrays, suitable for passing into Fortran and other FFI
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Pointers where
import Data.Proxy (Proxy (..))
import Foreign.Marshal.Array (newArray, peekArray)
import Foreign.Ptr (Ptr)
import GHC.TypeNats (KnownNat, Nat, natVal)
# nice library that gives us access to the microphone
import pyaudio
# python standard libraries that come built-in
import threading
import queue
import wave
# optional libraries
import numpy as np