Skip to content

Instantly share code, notes, and snippets.

@5outh
5outh / write
Created July 1, 2019 12:44
Journal setup
#! /bin/bash
DATE=`date +%Y-%m-%d`
FILE="./entries/$DATE.md"
if [ ! -f $FILE ]; then
printf "# $DATE\n" >> $FILE
fi
nvim $FILE
git add entries -A
newtype Face = Face { getFace :: Polygon }
newtype Box = Box { getBox :: [Face] }
drawFace face = do
brightness <- getRandomR (0.4,0.6)
cairo $ do
draw (getFace face)
setSourceHsv (HSV 0 0 brightness) *> fillPreserve
setSourceHsv (HSV 0 0 0) *> stroke
@5outh
5outh / Bots.hs
Last active August 17, 2018 12:49
Bots2 Clone
import Pipes
import qualified Pipes.Prelude as P
import qualified System.Random as R
import Lens.Family2
import Lens.Family2.Stock
import Lens.Family2.State.Lazy
import Control.Monad.Trans.State
import Control.Monad
import Control.Concurrent(threadDelay)
@5outh
5outh / Auth.hs
Last active July 3, 2018 19:35
Authorized
orNotFound :: MaybeT Handler a -> Handler a
orNotFound mHandler = do
act <- runMaybeT mHandler
maybe notFound act
withStudentToken :: (StudentId -> CourseId -> Handler a) -> MaybeT Handler a
withStudentToken action = do
mStudentToken <- MaybeT optionalStudentToken
case mStudentToken of
Nothing -> mempty
data Graph = Graph
{ pointsLeft :: Set.Set (V2 Double)
-- ^ All the points in the whole graph left to be connected
, branches :: Set.Set LineSegment
-- ^ All branches we have found, connecting two points
, currentPoints :: [V2 Double]
-- ^ Points that are currently being processed
, maxDist :: Double
-- ^ Maximum distance a thing can be away from a thing
}
renderSketch :: Generate ()
renderSketch = do
fillScreenHsv linen
cairo $ setLineJoin LineJoinRound
cairo $ setLineCap LineCapRound
cairo $ setLineWidth 0.1
xScale <- sampleRVar (D.uniform 0 3)
yScale <- sampleRVar (D.uniform 0 3)
type SpringMesh = Space2d Mover
updateSpringMesh :: Rect -> SpringMesh -> SpringMesh
updateSpringMesh rect springMesh = Space2d.mapWithKey springify springMesh
where
springify index mover =
let movers = Space2d.neighbors index springMesh
in update
. bounceRect rect
. applyFriction 0.05
module Sketch where
import Data.Space2d
-- (Other imports omitted)
-- | Generate a unit vector space given a size
randomSpace2d :: Rational -> Generate (Space2d (V2 Double))
randomSpace2d size = do
(w, h) <- getSize
let
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Control.Monad.Random.Class
import Control.Monad.Reader
import Data.Foldable (for_)
import Graphics.Rendering.Cairo hiding (x, y)
import qualified Numeric.Noise.Perlin as P
import System.Random
newtype JSONB a = JSONB { unJSONB :: a }
deriving
( Generic
, Eq
, Foldable
, Functor
, Ord
, Read
, Show
, Traversable