Skip to content

Instantly share code, notes, and snippets.

@lamg
lamg / database_txn.fsx
Last active January 25, 2025 15:09
Computation Expression for handling transaction logic in SQLite
#r "nuget: Microsoft.Data.Sqlite"
#r "nuget: Oxpecker"
#r "nuget: FSharp.Control.TaskSeq"
open Microsoft.Data.Sqlite
open FSharp.Control
open System.Threading.Tasks
type User = { id: int64; name: string }
@lamg
lamg / decent_bfs_graphs.fsx
Created December 31, 2024 09:24
decent_bfs_graphs.fsx
// vertices are implicit in the set of values of type 'a
type Graph<'a when 'a: comparison> = { edges: Set<'a * 'a> }
let adjacent (g: Graph<'a>) (x: 'a) =
g.edges |> Set.filter (fun (y, _) -> x = y) |> Set.map snd
let graphLevels (startVertex: 'a) (g: Graph<'a>) =
let rec subLevels (level: Set<'a>, visited: Set<'a>) =
match level with
| _ when level.IsEmpty -> []
@lamg
lamg / decent_bfs.fsx
Created December 30, 2024 16:57
decent_bfs.fsx
type Tree<'a> = { value: 'a; children: Tree<'a> list }
let rec levels (ts: Tree<'a> list) =
match ts with
| [] -> []
| _ ->
let xs, chls = ts |> List.map (fun t -> t.value, t.children) |> List.unzip
let subs = chls |> List.concat |> levels
xs :: subs
@lamg
lamg / compare_side_by_side.fsx
Created November 22, 2024 17:27
Compare objects .Net
#r "nuget: ObjectDumper.NET, 4.3.4-pre"
let greenFragment x =
let ansiGreen = "\x1b[32m"
let ansiReset = "\x1b[0m"
$"%s{ansiGreen}%s{x}%s{ansiReset}"
let redFragment x =
let ansiRed = "\x1b[31m"
let ansiReset = "\x1b[0m"
@lamg
lamg / print_tree.fsx
Last active January 2, 2025 23:40
Print a tree
type Branch<'a, 'b> =
{ value: 'a
children: Tree<'a, 'b> seq }
and Tree<'a, 'b> =
| Branch of Branch<'a, 'b>
| Leaf of 'b
type PrinterContext<'a, 'b> =
abstract member branchToString: 'a -> string
@lamg
lamg / gtk4.fsx
Created June 4, 2024 06:41
F# 🤝 GTK4
#r "nuget: GirCore.Gtk-4.0,0.5.0"
open System
open Gtk
let label () =
let label = new Label()
label.SetText "hello"
label
@lamg
lamg / permutations_test.rs
Last active January 12, 2022 21:08
check if two vectiors are a permutation of the same set
use std::cmp::PartialEq;
fn is_perm<T: PartialEq>(xs: &Vec<T>, ys: &Vec<T>) -> bool {
let mut ok = xs.len() == ys.len();
let mut ws: Vec<&T> = xs.iter().collect();
let mut zs: Vec<&T> = ys.iter().collect();
while ok && ws.len() != 0 {
let (ok0, i) = exists(&zs, &ws[0]);
ok = ok0;
if ok0 {
@lamg
lamg / permutations_test.go
Last active January 11, 2022 15:55
Check if two string slices are equal by checking if they are a permutation of the other
package main
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestIsPerm(t *testing.T) {
ts := []struct {
xs, ys []string
@lamg
lamg / golang_request_ip_from_context.go
Last active October 25, 2017 14:43
How to get the IP address in the dialer's context, using https://github.com/elazarl/goproxy
package main
import (
"context"
"flag"
"fmt"
gp "github.com/elazarl/goproxy"
"log"
"net"
"net/http"

Keybase proof

I hereby claim:

  • I am lamg on github.
  • I am lamg (https://keybase.io/lamg) on keybase.
  • I have a public key whose fingerprint is A1C2 E5BE EA42 B2B9 1A8A 0D80 3941 99B7 9F03 6583

To claim this, I am signing this object: