Skip to content

Instantly share code, notes, and snippets.


Daniel Buckmaster crabmusket

View GitHub Profile
crabmusket / MJML.php
Last active Mar 5, 2020
MJML emails in Laravel
View MJML.php
namespace App\Mail;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Exception\RuntimeException;
use Illuminate\Contracts\View\Factory as ViewFactory;
use Illuminate\Support\HtmlString;

JSON-RPC pipeline batches

Typical RPC implementation

Say we want to implement an RPC service for basic maths operations. For example, let's calculate the value of ln(e^2). This calculation has several steps in our maths API:

  1. Get the value of e
  2. Square e
crabmusket /
Created May 18, 2017
Keybase verification

Keybase proof

I hereby claim:

  • I am crabmusket on github.
  • I am crabmusket ( on keybase.
  • I have a public key ASC8gXuUziw0CsDZ1i5l0XQoHZmIdciVmtULjMDwc5qeowo

To claim this, I am signing this object:

crabmusket / mercuryTree.js
Last active Aug 29, 2015
Rendering a recursive tree of items with mercury
View mercuryTree.js
'use strict';
// Mercury is a 'truly modular frontend framework'. This helpful import gets
// us a lot of top-level symbols from submodules it re-exports.
var hg = require('mercury');
// Like this one - h is a short constructor for HTML elements.
var h = require('mercury').h;
// And since we'll be running this in a browser using beefy, we need a reference
// to the document.
var document = require('global/document');
crabmusket / Cheryl.hs
Last active Aug 29, 2015
A translation of Norvig's solution to the Cheryl's Birthday problem from Python to Haskell. Original:
View Cheryl.hs
-- A list of possible dates Cheryl's birthday might be on.
possibilities = [(May, 15), (May, 16), (May, 19),
(June, 17), (June, 18),
(July, 14), (July, 16),
(August, 14), (August, 15), (August, 17)]
-- We say we know the actual date when the list of possibilities is singular.
know ps = length ps == 1
-- Telling someone the month or day will reduce the possibilities.
crabmusket / negLogDet.hs
Last active Jan 1, 2016
Inspecting the -logdet function for convexity along lines.
View negLogDet.hs
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 / ConstantArithmetic.hs
Last active Dec 27, 2015
Convenient constant arithmetic for Haskell's Dimensional package.
View ConstantArithmetic.hs
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)
View byteStringStream.hs
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 / recvLn.hs
Last active Dec 24, 2015
Working on a function to receive a line of serial data in Haskell.
View recvLn.hs
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
crabmusket / SerialThreepenny.hs
Last active Dec 24, 2015
Monitoring a serial connection with a Threepenny UI frontend.
View SerialThreepenny.hs
-- 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)
You can’t perform that action at this time.