Skip to content

Instantly share code, notes, and snippets.

@carlohamalainen
carlohamalainen / applicativeForm.hs
Created July 24, 2013 00:05
applicative recaptcha
-- Before:
commentForm :: EntryId -> Form Comment
commentForm entryId = renderDivs $ Comment
<$> pure entryId
<*> aformM (liftIO getCurrentTime)
<*> aformM requireAuthId
<*> areq textField (fieldSettingsLabel MsgCommentName) Nothing
<*> areq textareaField (fieldSettingsLabel MsgCommentText) Nothing
-- Adding the ReCAPTCHA form, we just append "<* recaptchaAForm":
@carlohamalainen
carlohamalainen / nondeterminism_active.py
Last active December 17, 2015 12:29
nondeterministic behaviour of inspect().active() in celery
######### blah.py #########
from time import sleep
from celery import Celery
from celery.task import Task
import logging
import traceback
import time
-- Easiest way to run this with ghci:
--
-- ghci -XDataKinds -XGADTs -XEmptyDataDecls -XKindSignatures -XScopedTypeVariables -XTemplateHaskell
-- Natural numbers, e.g.
-- 0 == Z
-- 1 == S Z
-- 2 == S (S Z)
-- 3 == S (S (S Z))
-- etc
@carlohamalainen
carlohamalainen / joomla_password.py
Created May 6, 2013 03:40
Create a Joomla password hash/salt entry using Python
import getpass
import hashlib
import random
import string
password = getpass.getpass('password (not echoed): ')
salt = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(32))
password_hash = hashlib.md5(password + salt).hexdigest()
print "update CHANGEME_users set password='" + password_hash + ':' + salt + "' where id = ...;"
@carlohamalainen
carlohamalainen / plot_shapefile_on_map.py
Created April 17, 2013 00:50
Plot polygons for a bunch of shapes using basemap.
"""
Carlo Hamalainen <carlo.hamalainen@gmail.com>
Given a directory of shapefiles, e.g.
$ ls /path/to/shapefiles/
Project_Name.dbf
Project_Name.prj
Project_Name.sbn
Project_Name.sbx
@carlohamalainen
carlohamalainen / cvl.sh
Created March 15, 2013 03:31
Install basic packages for a CVL system.
#!/bin/bash
# Author: Carlo Hamalainen <carlo.hamalainen@gmail.com>
# Use at your own risk :)
set -e
set -x
sudo yum -y install vim
@carlohamalainen
carlohamalainen / ioaction.py
Created March 6, 2013 02:36
Pretend IO actions in Python
# IO actions on integers:
#
# data IOAction = Return Int
# | Put Int (IOAction Int)
# | Get (Int -> IOAction Int)
#
# Implement using nested lists, e.g.
#
# [Return, 3] == Return 3
#
@carlohamalainen
carlohamalainen / Simple.hs
Last active December 14, 2015 12:38
Response to Immanuel Normann on haskell-cafe thread "simple parsec question"
{-# LANGUAGE FlexibleContexts #-}
import Text.Parsec
import Control.Applicative hiding ((<|>),many)
-- Example input:
{-
top 1:
@carlohamalainen
carlohamalainen / ReadNovaList.hs
Created February 19, 2013 03:10
Uses Parsec to read the results of "nova list".
import Control.Applicative hiding ((<|>),many)
import Control.Monad
import Control.Monad.State
import Text.Parsec
import Text.Parsec.String
import Data.Functor.Identity
import Safe (headMay)
data Network = Network { networkCell :: String
, networkIP :: String
(defn create-session [hostname username password]
(doto (. (new JSch) getSession username hostname 22)
(.setPassword password)
(.setConfig "StrictHostKeyChecking" "no")
(.connect)
(.setServerAliveInterval 1000)
(.setServerAliveCountMax 30)))
(defn sleep [seconds]
(. Thread (sleep (* 1000 seconds))))