Skip to content

Instantly share code, notes, and snippets.

View rnons's full-sized avatar

Ping Chen rnons

View GitHub Profile
@rnons
rnons / yespandoc_aform.hs
Created June 1, 2012 01:01
using Yesod to build a simple web interface to Pandoc
-- Using Yesod (AForm) to build a simple web interface to Pandoc
-- THIS is simply a demonstration, much can be done to improve it.
{-# LANGUAGE QuasiQuotes, TemplateHaskell, MultiParamTypeClasses,
OverloadedStrings, TypeFamilies #-}
import Yesod
import Data.Text (Text, unpack, pack)
import Text.Pandoc
import Control.Applicative ((<$>), (<*>))
data Yespandoc = Yespandoc
@rnons
rnons / dourex.hs
Created November 2, 2012 14:34
douban.fm CLI client in Haskell
{-# LANGUAGE DeriveDataTypeable #-}
import Network.HTTP
import Text.JSON
import Text.JSON.Generic
import System.Cmd
import GHC.IO.Exception
-- there are two types of json response: song & ad.
-- the 'company', 'rating_avg', 'public_time', 'ssid' fields are missing in ad_json
@rnons
rnons / warp.hs
Created December 23, 2012 07:28
Warp: with static subdomain
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Trans.Resource (ResourceT)
import Filesystem.Path.CurrentOS (decodeString)
import Network.HTTP.Types (status200)
import Network.Wai (responseLBS, rawPathInfo, Request, Response)
import Network.Wai.Handler.Warp (run)
import Network.Wai.Application.Static (staticApp, defaultFileServerSettings)
import Network.Wai.Middleware.Vhost (vhost)
import qualified Data.ByteString as S
@rnons
rnons / gitobjectstore.hs
Created February 5, 2013 15:07
Git Object Storage example
-- Section "9.2.3 Object Storage" in <<Pro Git>>
-- The original example was written in ruby.
import Codec.Zlib
import qualified Crypto.Hash.SHA1 as SHA1
import qualified Data.ByteString.Char8 as C
import qualified Data.ByteString as B
import Data.Char
import System.Directory
@rnons
rnons / mplayer.hs
Created March 4, 2013 14:08
a simple wrapper to mplayer
import System.IO
import System.IO.Unsafe (unsafePerformIO)
import System.Process
import Control.Concurrent
mhin = unsafePerformIO newEmptyMVar
mhout = unsafePerformIO newEmptyMVar
ended = unsafePerformIO newEmptyMVar
main = do
@rnons
rnons / mpdclient-frp.hs
Last active December 20, 2015 14:19
A barebone mpd client built with threepenny.
{-# LANGUAGE ScopedTypeVariables #-}
import Codec.Binary.UTF8.String (decodeString)
import Control.Concurrent
import Control.Monad
import qualified Data.ByteString.Char8 as C8
import qualified Data.Map as Map
import Data.Maybe (fromJust)
import qualified Graphics.UI.Threepenny as UI
import Graphics.UI.Threepenny.Core
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import qualified Data.ByteString.Char8 as C
import Data.Default
import Network.TLS
import Network.TLS.Extra (ciphersuite_medium)
import Network.Xmpp
@rnons
rnons / cipher.c
Created June 5, 2014 02:55
HsOpenSSL cipher result different from OpenSSL?
/*
* Run with
* gcc -o cipher cipher.c -lcrypto
* ./cipher
*/
#include <string.h>
#include <openssl/evp.h>
int main()
@rnons
rnons / ctrl_3
Last active August 29, 2015 14:02
-- http://apple.stackexchange.com/questions/36943/how-do-i-automate-a-key-press-in-applescript
tell application "System Events"
key down control
key code 124
key code 124
key up control
end tell
import Control.Error (runEitherT, left)
import Control.Monad (foldM)
import Control.Monad.Identity (runIdentity)
import qualified Data.Map.Strict as Map
type NFSM = Map.Map (Int, Char) [Int]
edges :: NFSM
edges = Map.fromList
[ ((1, 'a'), [2, 3])