Skip to content

Instantly share code, notes, and snippets.

View crabmusket's full-sized avatar

Daniel Buckmaster crabmusket

View GitHub Profile
@crabmusket
crabmusket / 7-segment.hs
Last active December 18, 2015 08:29
A 7-segment display controller for the LaunchPad written in Atom.
-- http://hackage.haskell.org/package/atom
-- http://hackage.haskell.org/package/atom-msp430
module Main where
import Data.Word
import Data.Bits
import Language.Atom.MSP430
main = mspCompile "g2231" $ mspProgram {
@crabmusket
crabmusket / Serial.hs
Created October 1, 2013 08:27
Infinite serial listener in Haskell.
import Control.Monad (forever)
import Control.Concurrent (forkIO, killThread)
import qualified Data.ByteString.Char8 as B
import System.Hardware.Serialport
(openSerial, recv, closeSerial, defaultSerialSettings)
port = "COM1" -- Windows
--port = "/dev/ttyUSB0" -- Unix
main = do
@crabmusket
crabmusket / SerialThreepenny.hs
Last active December 24, 2015 09:39
Monitoring a serial connection with a Threepenny UI frontend.
-- Imports for serial port
import qualified Data.ByteString.Char8 as B
import System.Hardware.Serialport
(openSerial, recv, closeSerial, defaultSerialSettings)
-- Imports for threading and stuff
import Control.Monad (void, forever, mapM_)
import Control.Concurrent (forkIO, killThread)
import Control.Concurrent.Chan
(Chan, newChan, dupChan, writeChan, getChanContents)
@crabmusket
crabmusket / recvLn.hs
Last active December 24, 2015 23:49
Working on a function to receive a line of serial data in Haskell.
import qualified Data.ByteString.Char8 as B
import System.Hardware.Serialport (SerialPort, recv)
recvLn :: SerialPort -> IO B.ByteString
recvLn s = do
-- Receive one byte at a time.
first <- recv s 1
rest <- if first == B.singleton '\n'
then return $ B.empty
else recvLn s
import qualified Data.ByteString.Char8 as B
import Criterion.Main
import Data.IORef
import Data.Vector
import Data.ByteString.Char8 (ByteString)
import Control.Monad (forever)
import Pipes
import qualified Pipes.Prelude as P
import Data.Char (intToDigit)
import qualified Data.ByteString.Builder as Builder
@crabmusket
crabmusket / ConstantArithmetic.hs
Last active December 27, 2015 01:29
Convenient constant arithmetic for Haskell's Dimensional package.
module Numeric.Units.Dimensional.ConstantArithmetic where
import qualified Prelude
import qualified Numeric.Units.Dimensional
import Numeric.Units.Dimensional.Prelude
a *. b = a * (b *~ one)
a .* b = (a *~ one) * b
a .*. b = (a *~ one) * (b *~ one)
@crabmusket
crabmusket / negLogDet.hs
Last active January 1, 2016 00:39
Inspecting the -logdet function for convexity along lines.
import Numeric.LinearAlgebra
import Control.Monad (replicateM)
import System.Random (randomIO)
import Graphics.Gnuplot.Simple (plotFunc)
-- Test 100 random lines for convexity.
main = replicateM 100 $ do
-- Two 5x5 symmetric positive definite matrices that determine the line.
a <- randomSnPD 5
v <- randomSnPD 5
@crabmusket
crabmusket / keybase.md
Created May 18, 2017 11:45
Keybase verification

Keybase proof

I hereby claim:

  • I am crabmusket on github.
  • I am crabmusket (https://keybase.io/crabmusket) on keybase.
  • I have a public key ASC8gXuUziw0CsDZ1i5l0XQoHZmIdciVmtULjMDwc5qeowo

To claim this, I am signing this object:

@crabmusket
crabmusket / material_design_colors_2014.scss
Last active January 12, 2019 09:21
Google's 2014 material design colour palette as SCSS variables. Because sometimes you just need a bunch of variables. Colours taken from https://github.com/minusfive/sass-material-colors/blob/master/sass/_sass-material-colors-map.scss
$md-col-red-50: #ffebee;
$md-col-red-100: #ffcdd2;
$md-col-red-200: #ef9a9a;
$md-col-red-300: #e57373;
$md-col-red-400: #ef5350;
$md-col-red-500: #f44336;
$md-col-red-600: #e53935;
$md-col-red-700: #d32f2f;
$md-col-red-800: #c62828;
$md-col-red-900: #b71c1c;
@crabmusket
crabmusket / index.html
Created March 19, 2019 04:00 — forked from arrayjam/index.html
Australia Postcode Decoder
<!DOCTYPE html>
<meta charset="utf-8">
<style>
text, label {
font-family: sans-serif;
}
label {
position: absolute;
text-align: center;