Skip to content

Instantly share code, notes, and snippets.

View davidgrenier's full-sized avatar

David Grenier davidgrenier

View GitHub Profile
let filelist = pasvRead src_site resp
let sitelist = deserialize "sites"
sitelist |> Seq.filter (fun x -> x <> src_site)
|> Seq.iter (fun x -> distribute src_site rls filelist x)
@davidgrenier
davidgrenier / szer.fs
Created April 25, 2012 00:35
Serialize/Deserialize
let szer = System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
let inline serialize obj f =
use str = System.IO.File.Create f
szer.Serialize(str, obj)
let inline deserialize f =
use rdr = System.IO.File.OpenRead f
szer.Deserialize rdr |> unbox
type P<'t> = Parser<'t, unit>
type Json =
| JString of string
| JNumber of float
| JBool of bool
| JNull
| JList of Json list
| JObject of Map<string, Json>
@davidgrenier
davidgrenier / behavior.fs
Created April 18, 2012 19:25
Extract behavior
// bad way
let formatOrder blah bleh clientName =
let order = getOrder blah
let message = getMessage bleh
let reseult =
if clientName = "boeing" then
sprintf "<Order orderId=\"%d\"/>" order
else
sprintf "Order.orderId:%d" order
result
@davidgrenier
davidgrenier / BejeweledFill.fs
Created April 8, 2012 18:39
Bejeweled Initial Fill
let init settings =
let getJewel a b =
let rnd m = rand() * (float (settings.JewelTypes - m)) |> floor |> int
let shift j jewl = if jewl >= j then jewl + 1 else jewl
match a, b with
| None, None -> rnd 0
| None, Some i
| Some i, None -> rnd 1 |> shift i
| Some i, Some j when i = j -> rnd 1 |> shift j
| Some i, Some j -> rnd 2 |> shift (min i j) |> shift (max i j)
@davidgrenier
davidgrenier / canvas.fs
Created March 17, 2012 16:07
Canvas attempt
[<JavaScript>]
let lineTo (context : Cvs) x1 y1 x2 y2 =
context.MoveTo (x1, y1)
context.LineTo (x2, y2)
[<JavaScript>]
let horiz context y x1 x2 = lineTo context x1 y x2 y
[<JavaScript>]
let vert context x y1 y2 = lineTo context x y1 x y2
@davidgrenier
davidgrenier / time.fs
Created February 12, 2012 21:09
Timing functions
let time f =
let sw = System.Diagnostics.Stopwatch.StartNew()
f () |> ignore
printfn "Took %fs" sw.Elapsed.TotalMilliseconds
time (fun () -> System.Threading.Thread.Sleep 1000)
@davidgrenier
davidgrenier / PostAndAsyncReply.fs
Created February 8, 2012 02:00
PostAndAsyncReply
type MessageWithResponse =
| GetNextNumber of AsyncReplyChannel<int> * int
let inbox =
MailboxProcessor.Start <| fun inbox ->
async {
while true do
let! (GetNextNumber(channel, num)) = inbox.Receive()
channel.Reply (num + 1)
};;
@davidgrenier
davidgrenier / form.fs
Created January 5, 2012 18:53
Quick form
#r "System.Windows.Forms"
open System.Windows.Forms
let form = new Form (Visible = true, TopMost = true)
let button = new Button()
form.Controls.Add button
button.Click.Add <| (fun _ -> MessageBox.Show "Hello" |> ignore)
@davidgrenier
davidgrenier / PatternVsIf.fs
Created December 2, 2011 16:14
Pattern > If example
type Status = Active | Standby | Inactive
let status = Active
let isOnline = true
if not isOnline then
printfn "Status is offline or inactive"
else
match status with
| Active -> "Status is active"