Skip to content

Instantly share code, notes, and snippets.

View danbst's full-sized avatar

Danylo Hlynskyi danbst

  • Ivano-Frankivsk, Ukraine
View GitHub Profile
@danbst
danbst / netwire-flying-word.hs
Last active December 11, 2015 23:28
Example of time and keyboard usage in netwire. Displays bouncing text and quit when 'q' pressed
{-# LANGUAGE Arrows #-}
import Control.Wire
import Prelude hiding ((.), id)
import System.Console.ANSI
import Data.Maybe
import Control.Arrow
import Control.Monad.Trans.State
import Control.Monad.Trans
import Data.Time.Clock
{-#LANGUAGE GADTs, DataKinds, KindSignatures #-}
import Data.Word
import Data.Int
import Numeric
import Data.Bits
import Data.Binary.Put (putWord32le, putWord16le, runPut)
import Data.ByteString.Lazy (unpack)
import qualified Data.ByteString as B
@danbst
danbst / gist:6044816
Last active December 20, 2015 00:49
download file with http-streams and io-streams (with progressbar)
{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-}
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as C8
import qualified System.IO.Streams.Combinators as SC
import Network.Socket (withSocketsDo)
import System.IO.Streams (InputStream, OutputStream, ReadTooShortException)
import Network.Http.Client
import qualified System.IO.Streams as S
import Data.Maybe
import Control.Exception (bracket)
@danbst
danbst / gist:6129341
Created August 1, 2013 07:58
List USB devices' configurations in human readable format (similar to ls-usb)
{-# LANGUAGE ScopedTypeVariables #-}
import System.USB
import Control.Monad (forM_, when)
import Data.Vector (toList, Vector)
import Control.Exception
import Text.PrettyPrint
import Control.Arrow hiding ((<+>))
import qualified Data.ByteString as BS
import Numeric
@danbst
danbst / gist:6404568
Created September 1, 2013 13:46
configuration.nix
# the system. Help is available in the configuration.nix(5) man page
# or the NixOS manual available on virtual console 8 (Alt+F8).
{ config, pkgs, ... }:
{
require =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
@danbst
danbst / byteStringStream.hs
Created October 14, 2013 23:15
Based upon http://www.reddit.com/r/haskell/comments/1o4m98/feedback_wanted_trying_to_write_a_good_receive/ Task is: read one line from a stream of ByteString chars. Done with explicit recursion and pipes (and with their ByteString.Builder versions). Included Criterion benchmarks.
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
@danbst
danbst / sustain-vim.hs
Created October 24, 2013 21:38
Generate keypresses with my Synth's sustain pedal. Requires `xdotool` in %PATH%
import System.USB
( InterfaceDesc(interfaceEndpoints, interfaceNumber),
EndpointDesc(endpointAddress),
DeviceDesc(deviceProductId, deviceVendorId),
Device,
Ctx,
ConfigDesc(configInterfaces),
withDeviceHandle,
withDetachedKernelDriver,
withClaimedInterface,
module Images where
import Data.ByteString ( ByteString(..) )
import qualified Data.ByteString as BS
import qualified Data.ByteString.Unsafe as BSU
import Graphics.UI.GLUT
import qualified Graphics.Rendering.OpenGL.GL as GL
import qualified Codec.BMP as BMP
import Foreign.ForeignPtr
import Foreign.Ptr
@danbst
danbst / entropy.hs
Created February 8, 2016 13:08
Entropy of a list
import Data.Char
import Data.Map (Map)
import qualified Data.Map as Map
entropy :: (Ord a) => [a] -> Float
entropy dta =
let freqmap = Map.fromListWith (+) $ zip dta (repeat 1)
modifier = 1.0 / fromIntegral (length dta)
freqs = Map.map (\v -> fromIntegral v * modifier) freqmap
@danbst
danbst / 4ct-proof.nix
Created August 1, 2016 06:11
WIP reproduce the Four Color Theorem proof by Gonthier
#! /usr/bin/env nix-build
{ pkgs ? import (builtins.fetchTarball https://github.com/NixOS/nixpkgs/archive/2fa9bd50597c3089cc00abb3f20d7510fcc8ad6a.tar.gz) { }
}:
let
inherit (pkgs) stdenv lib;
theoremDistrib = pkgs.fetchurl {
url = https://download.microsoft.com/download/D/1/D/D1D6FCF9-4D04-49FE-9952-0D295B180CF4/4ct.msi;
sha256 = null;
};
theoremSrc = stdenv.mkDerivation {