Skip to content

Instantly share code, notes, and snippets.

Last week we refactored some Python code that parses CSV files and loads records into a database. We ended up with two general groups of code.

One group (lines 24 - 43) is a series of small functions that extract various data types (booleans, timestamps, etc) from CSV fields. The other group is a large function (lines 46 - 92) that extracts individual fields and builds a model object. I expressed frustration that this latter function was so long.

def build_nessus_object(row, heading_map):
    """process a row of data and return a Nessus object"""
    # parameters which are processed as-is from the csv
    normal_params = {
        'plugin' : 'Plugin',
@derekmorr
derekmorr / ch17.hs
Last active February 10, 2017 01:25
ch17.hs
module Ch17 where
import Control.Applicative
import Data.List (elemIndex)
import Data.Monoid
-- 1
added :: Maybe Integer
added = (+3) <$> (lookup 3 $ zip [1, 2, 3] [4, 5, 6])
@derekmorr
derekmorr / main.rs
Created October 4, 2016 17:53
fold examples for Tom
use std::cmp;
fn sum(numbers: Vec<i32>) -> i32 {
numbers.iter().fold(0, |total, num| total + num)
}
fn biggest_word(words: Vec<&str>) -> usize {
words.iter().fold(0, |length, word| cmp::max(length, word.chars().count()))
}
import org.scalacheck.Gen.choose
import org.scalatest.prop.GeneratorDrivenPropertyChecks
import org.scalatest.{WordSpec, MustMatchers}
class TruncateTest extends WordSpec with MustMatchers with GeneratorDrivenPropertyChecks {
def truncate(str: String, length: Int): String = {
if (str.length < length)
str
else if (length < 3 || str.length < 3)
@derekmorr
derekmorr / Chapter11Tree.hs
Last active July 13, 2016 22:45
Haskebook Chapter 11 tree
module Chapter11Tree where
data OperatingSystem = Linux
| OpenBSD
| Mac
| Windows
deriving (Eq, Show)
data ProgrammingLanguage = Haskell
| Agda
@derekmorr
derekmorr / Chapter11Phone.hs
Created July 12, 2016 17:25
Solutions to Phone exercise from Chapter 11 of Haskellbook
module Chapter11Phone where
import Data.Char (isLetter, isNumber, isUpper, toLower)
import Data.List (group, sort)
data CharType = Letter Char
| Number Char
| Punctuation Char
deriving (Eq, Show)
@derekmorr
derekmorr / DSLFSM.hs
Created July 10, 2016 12:29
Haskell implementation of text processing DSL
module DSLFSM where
import Data.Char (toLower, toUpper)
-- a DSL for basic text processing
-- and a FSM for implementing that DSL.
-- adapted to Haskell from https://www.youtube.com/watch?v=7D9GE3-o54o
data MachineState = Normal | Comment | Upper | Lower
@derekmorr
derekmorr / gun.fs
Created October 29, 2015 01:12
EdX F# class - module 4 (pattern matching)
open System
type GunRecord =
{ xcoord : float
ycoord : float
speed : float
distance : float
name : String }
type GunResult =
open System
let GoldenTuples numbers =
let GoldenRatio = (1.0 + Math.Sqrt(5.0)) / 2.0
seq {
for n in numbers do
yield (n, (float n) * GoldenRatio)
}
let rec GetNumber numbers =
@derekmorr
derekmorr / week2.fs
Last active July 10, 2016 12:32
F# MOOC week 2 assignment
open System
let readConsoleValue prompt =
printf "%s: " prompt
Console.ReadLine()
let classifyAge name age =
if age >= 20 then
sprintf "%s is no longer a teenager" name
elif (age < 20 && age > 13) then