about summary refs log tree commit diff
path: root/users/fcuny
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2022-10-27 19:24:57 -0700
committerFranck Cuny <franck@fcuny.net>2022-10-27 19:24:57 -0700
commita5679641aa0eb9e872605b70c263c3e950132647 (patch)
tree7f4a9670365f8f13152d1070e5d5803f3618aa91 /users/fcuny
parentfeat(ops/github): archive notes.fcuny.net (diff)
downloadworld-a5679641aa0eb9e872605b70c263c3e950132647.tar.gz
ref(users/fcuny): and just like that ...
Diffstat (limited to 'users/fcuny')
-rw-r--r--users/fcuny/default.nix5
-rw-r--r--users/fcuny/exp/buckit/.github/workflows/go.yml35
-rw-r--r--users/fcuny/exp/buckit/.gitignore1
-rw-r--r--users/fcuny/exp/buckit/LICENSE.txt20
-rw-r--r--users/fcuny/exp/buckit/README.org57
-rw-r--r--users/fcuny/exp/buckit/add.go16
-rw-r--r--users/fcuny/exp/buckit/delete.go27
-rw-r--r--users/fcuny/exp/buckit/fetch.go16
-rw-r--r--users/fcuny/exp/buckit/go.mod5
-rw-r--r--users/fcuny/exp/buckit/go.sum13
-rw-r--r--users/fcuny/exp/buckit/info.go16
-rw-r--r--users/fcuny/exp/buckit/list.go15
-rw-r--r--users/fcuny/exp/buckit/main.go21
-rw-r--r--users/fcuny/exp/monkey/Makefile4
-rw-r--r--users/fcuny/exp/monkey/README.org3
-rw-r--r--users/fcuny/exp/monkey/cmd/repl/main.go12
-rw-r--r--users/fcuny/exp/monkey/go.mod3
-rw-r--r--users/fcuny/exp/monkey/pkg/lexer/lexer.go152
-rw-r--r--users/fcuny/exp/monkey/pkg/lexer/lexer_test.go125
-rw-r--r--users/fcuny/exp/monkey/pkg/repl/repl.go30
-rw-r--r--users/fcuny/exp/monkey/pkg/token/token.go71
-rw-r--r--users/fcuny/resume/default.nix32
-rw-r--r--users/fcuny/resume/readme.org6
-rw-r--r--users/fcuny/resume/resume.org40
-rw-r--r--users/fcuny/resume/styles/resume.css72
25 files changed, 0 insertions, 797 deletions
diff --git a/users/fcuny/default.nix b/users/fcuny/default.nix
deleted file mode 100644
index 05d1444..0000000
--- a/users/fcuny/default.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ pkgs }:
-
-pkgs.lib.makeScope pkgs.newScope (pkgs: {
-  resume = pkgs.callPackage ./resume { };
-})
diff --git a/users/fcuny/exp/buckit/.github/workflows/go.yml b/users/fcuny/exp/buckit/.github/workflows/go.yml
deleted file mode 100644
index cda28c1..0000000
--- a/users/fcuny/exp/buckit/.github/workflows/go.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: go
-
-on:
-  push:
-    branches:
-      - main
-  pull_request:
-    branches:
-      - main
-
-jobs:
-  build:
-    name: Build
-    runs-on: ubuntu-latest
-    steps:
-    - name: Set up Go 1.x
-      uses: actions/setup-go@v2
-      with:
-        go-version: ^1.16
-      id: go
-
-    - name: Check out code into the Go module directory
-      uses: actions/checkout@v2
-
-    - name: Go fmt
-      run: go fmt ./...
-
-    - name: Go vet
-      run: go vet ./...
-
-    - name: Test
-      run: go test -race -v ./...
-
-    - name: Build
-      run: go build -v ./...
diff --git a/users/fcuny/exp/buckit/.gitignore b/users/fcuny/exp/buckit/.gitignore
deleted file mode 100644
index 9b8d4cd..0000000
--- a/users/fcuny/exp/buckit/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/buckit
diff --git a/users/fcuny/exp/buckit/LICENSE.txt b/users/fcuny/exp/buckit/LICENSE.txt
deleted file mode 100644
index e614d87..0000000
--- a/users/fcuny/exp/buckit/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2021 Franck Cuny
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/users/fcuny/exp/buckit/README.org b/users/fcuny/exp/buckit/README.org
deleted file mode 100644
index 5b8caa1..0000000
--- a/users/fcuny/exp/buckit/README.org
+++ /dev/null
@@ -1,57 +0,0 @@
-#+TITLE: buckit
-
-~buckit~ is a tool to add files to a GCS bucket.
-
-* Store
-=buckit= is a CLI to upload files to a GCS bucket. A *package* belongs to a *bucket*. A bucket can have multiple *packages*. Each package can have multiple *versions*.
-
-When a version of a file is added to a bucket, a record is created in the index.
-
-A record is composed of the following information:
-- the version of the file
-- the name of the file
-- the checksum of the version
-- the path in the GCS bucket
-- the user who uploaded the version
-- the timestamp of when the uploaded happened
-- the state of the file
-
-GCS' ACLs are used to change the visibility of the object in the bucket.
-
-The index is a single JSON file stored at the root of the bucket. The keys in the index are the packages. Packages contain a list of versions, in order (the most recent version is the last entry in the list).
-
-A lock is used for both read and write of the file.
-** Life cycle of files
-*** Deletion
-By default, when a file is uploaded, we mark the state has *present*.
-
-Versions can be deleted. This is a soft-delete:
-- the state is changed to *tombstone*
-- the expiration date for blob is set 30 days in the future
-
-When a file is marked for deletion, it can not be fetched anymore. The state can be changed to be mark as present. In which case the expiration date is removed on the blob.
-* CLI
-** add
-#+begin_src sh
-buckit add <package> <file path>
-#+end_src
-** list
-#+begin_src sh
-buckit list
-#+end_src
-** fetch
-#+begin_src sh
-buckit fetch <package> <version>
-#+end_src
-** info
-#+begin_src sh
-buckit info <package> <version>
-#+end_src
-** delete
-#+begin_src sh
-buckit delete <package> <version>
-#+end_src
-** undelete
-#+begin_src sh
-bucket undelete <package> <version>
-#+end_src
diff --git a/users/fcuny/exp/buckit/add.go b/users/fcuny/exp/buckit/add.go
deleted file mode 100644
index c29476e..0000000
--- a/users/fcuny/exp/buckit/add.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package main
-
-import (
-	"github.com/urfave/cli/v2"
-)
-
-var addCmd = &cli.Command{
-	Name:      "add",
-	Usage:     "Add a package",
-	Action:    addAction,
-	ArgsUsage: "<package> <filepath>",
-}
-
-func addAction(ctx *cli.Context) error {
-	return nil
-}
diff --git a/users/fcuny/exp/buckit/delete.go b/users/fcuny/exp/buckit/delete.go
deleted file mode 100644
index 7bd2ab2..0000000
--- a/users/fcuny/exp/buckit/delete.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package main
-
-import (
-	"github.com/urfave/cli/v2"
-)
-
-var deleteCmd = &cli.Command{
-	Name:      "delete",
-	Usage:     "Delete a version of a package",
-	Action:    deleteAction,
-	ArgsUsage: "<package> <version>",
-}
-
-var undeleteCmd = &cli.Command{
-	Name:      "undelete",
-	Usage:     "Un-delete a version of a package",
-	Action:    undeleteAction,
-	ArgsUsage: "<package> <version>",
-}
-
-func deleteAction(ctx *cli.Context) error {
-	return nil
-}
-
-func undeleteAction(ctx *cli.Context) error {
-	return nil
-}
diff --git a/users/fcuny/exp/buckit/fetch.go b/users/fcuny/exp/buckit/fetch.go
deleted file mode 100644
index e4204ae..0000000
--- a/users/fcuny/exp/buckit/fetch.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package main
-
-import (
-	"github.com/urfave/cli/v2"
-)
-
-var fetchCmd = &cli.Command{
-	Name:      "fetch",
-	Usage:     "Fetch a version of a package",
-	Action:    fetchAction,
-	ArgsUsage: "<package> <version>",
-}
-
-func fetchAction(ctx *cli.Context) error {
-	return nil
-}
diff --git a/users/fcuny/exp/buckit/go.mod b/users/fcuny/exp/buckit/go.mod
deleted file mode 100644
index d0b3c3e..0000000
--- a/users/fcuny/exp/buckit/go.mod
+++ /dev/null
@@ -1,5 +0,0 @@
-module github.com/fcuny/buckit
-
-go 1.16
-
-require github.com/urfave/cli/v2 v2.3.0
diff --git a/users/fcuny/exp/buckit/go.sum b/users/fcuny/exp/buckit/go.sum
deleted file mode 100644
index f8207d7..0000000
--- a/users/fcuny/exp/buckit/go.sum
+++ /dev/null
@@ -1,13 +0,0 @@
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
-github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/users/fcuny/exp/buckit/info.go b/users/fcuny/exp/buckit/info.go
deleted file mode 100644
index f8ad448..0000000
--- a/users/fcuny/exp/buckit/info.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package main
-
-import (
-	"github.com/urfave/cli/v2"
-)
-
-var infoCmd = &cli.Command{
-	Name:      "info",
-	Usage:     "Get information about a version of a package",
-	Action:    infoAction,
-	ArgsUsage: "<package> <version>",
-}
-
-func infoAction(ctx *cli.Context) error {
-	return nil
-}
diff --git a/users/fcuny/exp/buckit/list.go b/users/fcuny/exp/buckit/list.go
deleted file mode 100644
index 1c080ab..0000000
--- a/users/fcuny/exp/buckit/list.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package main
-
-import (
-	"github.com/urfave/cli/v2"
-)
-
-var listCmd = &cli.Command{
-	Name:   "list",
-	Usage:  "List packages",
-	Action: listAction,
-}
-
-func listAction(ctx *cli.Context) error {
-	return nil
-}
diff --git a/users/fcuny/exp/buckit/main.go b/users/fcuny/exp/buckit/main.go
deleted file mode 100644
index 2350264..0000000
--- a/users/fcuny/exp/buckit/main.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package main
-
-import (
-	"os"
-
-	"github.com/urfave/cli/v2"
-)
-
-func main() {
-	app := cli.NewApp()
-	app.Name = "buckit"
-	app.Commands = []*cli.Command{
-		addCmd,
-		listCmd,
-		fetchCmd,
-		infoCmd,
-		deleteCmd,
-		undeleteCmd,
-	}
-	app.Run(os.Args)
-}
diff --git a/users/fcuny/exp/monkey/Makefile b/users/fcuny/exp/monkey/Makefile
deleted file mode 100644
index 61168f3..0000000
--- a/users/fcuny/exp/monkey/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-test:
-	go test -v ./...
-
-.phony: test
diff --git a/users/fcuny/exp/monkey/README.org b/users/fcuny/exp/monkey/README.org
deleted file mode 100644
index d968f4c..0000000
--- a/users/fcuny/exp/monkey/README.org
+++ /dev/null
@@ -1,3 +0,0 @@
-#+TITLE: monkey
-
-Implementation of https://interpreterbook.com/
diff --git a/users/fcuny/exp/monkey/cmd/repl/main.go b/users/fcuny/exp/monkey/cmd/repl/main.go
deleted file mode 100644
index 46b865c..0000000
--- a/users/fcuny/exp/monkey/cmd/repl/main.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"monkey/pkg/repl"
-	"os"
-)
-
-func main() {
-	fmt.Printf("Welcome to monkey's REPL.")
-	repl.Start(os.Stdin, os.Stdout)
-}
diff --git a/users/fcuny/exp/monkey/go.mod b/users/fcuny/exp/monkey/go.mod
deleted file mode 100644
index 34c713d..0000000
--- a/users/fcuny/exp/monkey/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module monkey
-
-go 1.12
diff --git a/users/fcuny/exp/monkey/pkg/lexer/lexer.go b/users/fcuny/exp/monkey/pkg/lexer/lexer.go
deleted file mode 100644
index 3e98cf0..0000000
--- a/users/fcuny/exp/monkey/pkg/lexer/lexer.go
+++ /dev/null
@@ -1,152 +0,0 @@
-// Package lexer provides a lexer to the monkey language.
-package lexer
-
-import "monkey/pkg/token"
-
-// Lexer represents the lexer
-type Lexer struct {
-	input string
-	// current position in input
-	position int
-	// current reading position in input (after a char)
-	readPosition int
-	// current character under examination
-	ch byte
-}
-
-// New returns a new lexer
-func New(input string) *Lexer {
-	l := &Lexer{input: input}
-	l.readChar()
-	return l
-}
-
-// Read the current character and advances our position in the input string.
-func (l *Lexer) readChar() {
-	// if we've reached the end of the input, we set the current character to 0,
-	// which is the ASCII code for NUL.
-	if l.readPosition >= len(l.input) {
-		l.ch = 0
-	} else {
-		l.ch = l.input[l.readPosition]
-	}
-	l.position = l.readPosition
-	l.readPosition++
-}
-
-func (l *Lexer) readIdentifier() string {
-	position := l.position
-	for isLetter(l.ch) {
-		l.readChar()
-	}
-	return l.input[position:l.position]
-}
-
-func (l *Lexer) readNumber() string {
-	position := l.position
-	for isDigit(l.ch) {
-		l.readChar()
-	}
-	return l.input[position:l.position]
-}
-
-// we don't care about white space characters, we skip them when we find them.
-func (l *Lexer) skipWhitespace() {
-	for l.ch == ' ' || l.ch == '\t' || l.ch == '\n' || l.ch == '\r' {
-		l.readChar()
-	}
-}
-
-// peekChar returns the character at position (which is the next charatecter),
-// but does not increment `readPosition` and `position`.
-// This is needed to read tokens that are composed of two characters (e.g. `==`).
-func (l *Lexer) peekChar() byte {
-	if l.readPosition >= len(l.input) {
-		return 0
-	}
-	return l.input[l.readPosition]
-}
-
-// NextToken reads the next token from the lexer and returns the current token.
-func (l *Lexer) NextToken() token.Token {
-	var tok token.Token
-
-	l.skipWhitespace()
-
-	switch l.ch {
-	case '=':
-		if l.peekChar() == '=' {
-			ch := l.ch
-			l.readChar()
-			literal := string(ch) + string(l.ch)
-			tok = token.Token{Type: token.EQ, Literal: literal}
-		} else {
-			tok = newToken(token.ASSIGN, l.ch)
-		}
-	case '+':
-		tok = newToken(token.PLUS, l.ch)
-	case '-':
-		tok = newToken(token.MINUS, l.ch)
-	case '!':
-		if l.peekChar() == '=' {
-			ch := l.ch
-			l.readChar()
-			literal := string(ch) + string(l.ch)
-			tok = token.Token{Type: token.NOT_EQ, Literal: literal}
-		} else {
-			tok = newToken(token.BANG, l.ch)
-		}
-	case '*':
-		tok = newToken(token.ASTERISK, l.ch)
-	case '/':
-		tok = newToken(token.SLASH, l.ch)
-	case '<':
-		tok = newToken(token.LT, l.ch)
-	case '>':
-		tok = newToken(token.GT, l.ch)
-
-	case ';':
-		tok = newToken(token.SEMICOLON, l.ch)
-	case ',':
-		tok = newToken(token.COMMA, l.ch)
-	case '(':
-		tok = newToken(token.LPAREN, l.ch)
-	case ')':
-		tok = newToken(token.RPAREN, l.ch)
-	case '{':
-		tok = newToken(token.LBRACE, l.ch)
-	case '}':
-		tok = newToken(token.RBRACE, l.ch)
-	case 0:
-		tok.Literal = ""
-		tok.Type = token.EOF
-	default:
-		if isLetter(l.ch) {
-			tok.Literal = l.readIdentifier()
-			tok.Type = token.LookupIdent(tok.Literal)
-			return tok
-		} else if isDigit(l.ch) {
-			tok.Type = token.INT
-			tok.Literal = l.readNumber()
-			return tok
-		} else {
-			tok = newToken(token.ILLEGAL, l.ch)
-		}
-
-	}
-
-	l.readChar()
-	return tok
-}
-
-func newToken(tokenType token.TokenType, ch byte) token.Token {
-	return token.Token{Type: tokenType, Literal: string(ch)}
-}
-
-func isLetter(ch byte) bool {
-	return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_'
-}
-
-func isDigit(ch byte) bool {
-	return '0' <= ch && ch <= '9'
-}
diff --git a/users/fcuny/exp/monkey/pkg/lexer/lexer_test.go b/users/fcuny/exp/monkey/pkg/lexer/lexer_test.go
deleted file mode 100644
index fdea1d3..0000000
--- a/users/fcuny/exp/monkey/pkg/lexer/lexer_test.go
+++ /dev/null
@@ -1,125 +0,0 @@
-package lexer
-
-import (
-	"monkey/pkg/token"
-	"testing"
-)
-
-func TestNextToken(t *testing.T) {
-	input := `let five = 5;
-let ten = 10;
-
-let add = fn(x, y) {
-  x + y
-};
-
-let result = add(five, ten);
-!-/*5;
-10 > 5;
-
-if (5 < 10) {
-  return true;
-} else {
-  return false;
-}
-
-10 == 10;
-10 != 9;
-`
-
-	tests := []struct {
-		expectedType    token.TokenType
-		expectedLiteral string
-	}{
-		{token.LET, "let"},
-		{token.IDENT, "five"},
-		{token.ASSIGN, "="},
-		{token.INT, "5"},
-		{token.SEMICOLON, ";"},
-
-		{token.LET, "let"},
-		{token.IDENT, "ten"},
-		{token.ASSIGN, "="},
-		{token.INT, "10"},
-		{token.SEMICOLON, ";"},
-
-		{token.LET, "let"},
-		{token.IDENT, "add"},
-		{token.ASSIGN, "="},
-		{token.FUNCTION, "fn"},
-		{token.LPAREN, "("},
-		{token.IDENT, "x"},
-		{token.COMMA, ","},
-		{token.IDENT, "y"},
-		{token.RPAREN, ")"},
-		{token.LBRACE, "{"},
-		{token.IDENT, "x"},
-		{token.PLUS, "+"},
-		{token.IDENT, "y"},
-		{token.RBRACE, "}"},
-		{token.SEMICOLON, ";"},
-
-		{token.LET, "let"},
-		{token.IDENT, "result"},
-		{token.ASSIGN, "="},
-		{token.IDENT, "add"},
-		{token.LPAREN, "("},
-		{token.IDENT, "five"},
-		{token.COMMA, ","},
-		{token.IDENT, "ten"},
-		{token.RPAREN, ")"},
-		{token.SEMICOLON, ";"},
-
-		{token.BANG, "!"},
-		{token.MINUS, "-"},
-		{token.SLASH, "/"},
-		{token.ASTERISK, "*"},
-		{token.INT, "5"},
-		{token.SEMICOLON, ";"},
-
-		{token.INT, "10"},
-		{token.GT, ">"},
-		{token.INT, "5"},
-		{token.SEMICOLON, ";"},
-
-		{token.IF, "if"},
-		{token.LPAREN, "("},
-		{token.INT, "5"},
-		{token.LT, "<"},
-		{token.INT, "10"},
-		{token.RPAREN, ")"},
-		{token.LBRACE, "{"},
-		{token.RETURN, "return"},
-		{token.TRUE, "true"},
-		{token.SEMICOLON, ";"},
-		{token.RBRACE, "}"},
-		{token.ELSE, "else"},
-		{token.LBRACE, "{"},
-		{token.RETURN, "return"},
-		{token.FALSE, "false"},
-		{token.SEMICOLON, ";"},
-		{token.RBRACE, "}"},
-
-		{token.INT, "10"},
-		{token.EQ, "=="},
-		{token.INT, "10"},
-		{token.SEMICOLON, ";"},
-
-		{token.INT, "10"},
-		{token.NOT_EQ, "!="},
-		{token.INT, "9"},
-		{token.SEMICOLON, ";"},
-	}
-
-	l := New(input)
-	for i, tt := range tests {
-		tok := l.NextToken()
-		if tok.Type != tt.expectedType {
-			t.Fatalf("tests[%d] - tokentype wrong. expected=%q, got=%q", i, tt.expectedType, tok.Type)
-		}
-
-		if tok.Literal != tt.expectedLiteral {
-			t.Fatalf("tests[%d] - tokenliteral wrong. expected=%q, got=%q", i, tt.expectedLiteral, tok.Literal)
-		}
-	}
-}
diff --git a/users/fcuny/exp/monkey/pkg/repl/repl.go b/users/fcuny/exp/monkey/pkg/repl/repl.go
deleted file mode 100644
index 5e7b1d1..0000000
--- a/users/fcuny/exp/monkey/pkg/repl/repl.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Package repl provides a REPL to the monkey language.
-package repl
-
-import (
-	"bufio"
-	"fmt"
-	"io"
-	lexer "monkey/pkg/lexer"
-	token "monkey/pkg/token"
-)
-
-const PROMPT = ">> "
-
-func Start(in io.Reader, out io.Writer) {
-	scanner := bufio.NewScanner(in)
-	for {
-		fmt.Print(PROMPT)
-		scanned := scanner.Scan()
-
-		if !scanned {
-			return
-		}
-
-		line := scanner.Text()
-		l := lexer.New(line)
-		for tok := l.NextToken(); tok.Type != token.EOF; tok = l.NextToken() {
-			fmt.Printf("%+v\n", tok)
-		}
-	}
-}
diff --git a/users/fcuny/exp/monkey/pkg/token/token.go b/users/fcuny/exp/monkey/pkg/token/token.go
deleted file mode 100644
index 5eadc5e..0000000
--- a/users/fcuny/exp/monkey/pkg/token/token.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Package token provides a tokenizer for the monkey language.
-package token
-
-// TokenType represents the type of the token
-type TokenType string
-
-// Token represents a token, with the type and the literal value of the token
-type Token struct {
-	Type    TokenType
-	Literal string
-}
-
-const (
-	ILLEGAL = "ILLEGAL"
-	EOF     = "EOF"
-
-	IDENT = "IDENT"
-	INT   = "INT"
-
-	COMMA     = ","
-	SEMICOLON = ";"
-
-	LPAREN = "("
-	RPAREN = ")"
-	LBRACE = "{"
-	RBRACE = "}"
-
-	// The following tokens are keywords
-	FUNCTION = "FUNCTION"
-	LET      = "LET"
-	TRUE     = "TRUE"
-	FALSE    = "FALSE"
-	IF       = "IF"
-	ELSE     = "ELSE"
-	RETURN   = "RETURN"
-
-	// The following tokens are for operators
-	ASSIGN   = "="
-	PLUS     = "+"
-	MINUS    = "-"
-	BANG     = "!"
-	ASTERISK = "*"
-	SLASH    = "/"
-	LT       = "<"
-	GT       = ">"
-
-	EQ     = "=="
-	NOT_EQ = "!="
-)
-
-// List of our keywords for the language
-var keywords = map[string]TokenType{
-	"fn":     FUNCTION,
-	"let":    LET,
-	"true":   TRUE,
-	"false":  FALSE,
-	"if":     IF,
-	"else":   ELSE,
-	"return": RETURN,
-}
-
-// LookupIdent returns the token type for a given identifier.
-// First we check if the identifier is a keyword. If it is, we return they
-// keyword TokenType constant. If it isn't, we return the token.IDENT which is
-// the TokenType for all user-defined identifiers.
-func LookupIdent(ident string) TokenType {
-	if tok, ok := keywords[ident]; ok {
-		return tok
-	}
-	return IDENT
-}
diff --git a/users/fcuny/resume/default.nix b/users/fcuny/resume/default.nix
deleted file mode 100644
index 86fbcf0..0000000
--- a/users/fcuny/resume/default.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ pkgs, ... }:
-
-pkgs.stdenv.mkDerivation rec {
-  name = "resume";
-
-  src = ./.;
-
-  nativeBuildInputs = [ pkgs.pandoc pkgs.git ];
-
-  installPhase = ''
-    mkdir -p $out
-    pandoc --self-contained --css styles/resume.css --from org --to html --output $out/resume.html resume.org
-  '';
-
-  publish = pkgs.writers.writeBashBin "publish" ''
-    set -ueo pipefail
-    export PATH=${pkgs.lib.makeBinPath [ pkgs.pandoc pkgs.git ]}
-
-    cd $(git rev-parse --show-toplevel)/users/fcuny/resume
-
-    out=$(git rev-parse --show-toplevel)/users/fcuny/blog/static/resume.html
-    pandoc --self-contained --css styles/resume.css --from org --to html --output $out resume.org
-  '';
-
-  meta = with pkgs.lib; {
-    description = "franck cuny's resume";
-    homepage = "https://fcuny.net/resume.html";
-    license = licenses.mit;
-    platforms = platforms.linux;
-    maintainers = [ ];
-  };
-}
diff --git a/users/fcuny/resume/readme.org b/users/fcuny/resume/readme.org
deleted file mode 100644
index 169536e..0000000
--- a/users/fcuny/resume/readme.org
+++ /dev/null
@@ -1,6 +0,0 @@
-#+TITLE: Resume
-
-* Build
-Run =nix build .#users.fcuny.resume -o users/fcuny/resume/result= to generate the resume.
-* Publish
-Running =nix run .#users.fcuny.resume.publish= will update the file [[file:~/workspace/world/users/fcuny/blog/static/resume.html][resume.html]] in the blog directory. After that you can commit and deploy the blog.
diff --git a/users/fcuny/resume/resume.org b/users/fcuny/resume/resume.org
deleted file mode 100644
index d83db69..0000000
--- a/users/fcuny/resume/resume.org
+++ /dev/null
@@ -1,40 +0,0 @@
-#+TITLE: Franck Cuny
-#+AUTHOR: [[mailto:franck@fcuny.net][franck@fcuny.net]]
-#+OPTIONS: toc:nil num:nil title:nil timestamp:nil prop:nil
-
-I'm a seasoned Site Reliability Engineer with experience in large scale distributed systems. I'm invested in mentoring junior and senior engineers to help them increase their impact. I'm always looking to learn from those around me.
-
-*Specializations*: distributed systems, containerization, debugging, software development, reliability.
-
-* Experience
-** Roblox, San Mateo
-| Site Reliability Engineer | Principal (IC6) | SRE Group | Feb 2022 - to date |
-I'm the Team Lead for the Site Reliability group that was started at the end of 2021.
-
-I'm defining the road-map and identify areas where SREs can partner with different team to improve overall reliability of our services.
-** Twitter, San Francisco
-*** Compute
-| Software Engineer         | Senior Staff | Compute Info | Aug 2021 - Jan 2022 |
-| Site Reliability Engineer | Senior Staff | Compute SREs | Jan 2018 - Aug 2021 |
-Initially the Tech Lead of a team of 6 SREs supporting the Compute infrastructure. In August 2021 I changed to be a Software Engineer and was leading one of the effort to adopt Kubernetes for our on-premise infrastructure. As a Tech Lead I helped define number of internal processes for the team, from on-call rotations to postmortem processes.
-
-Twitter's Compute is one of the largest Mesos cluster in the world (XXX thousands of nodes across multiple data centers). The team defined KPIs, improved automation to mange the large fleet of bare metal machines, defined APIs for maintenance with partner teams.
-
-In addition to supporting Aurora/Mesos, I also lead a number of effort related to Kubernetes, both on-premise and in the cloud.
-
-Finally, I've helped Twitter save XX of millions of dollar in hardware by designing and implementing strategies to significantly improve the hardware utilization of our bare metal infrastructure.
-*** Storage
-| Site Reliability Engineer | Staff | Storage SREs | Aug 2014 - Jan 2018 |
-For 4 years I supported the Messaging and Manhattan teams. I moved all the pub-sub systems from bare-metal deployment to Aurora/Mesos, being the first storage team to adopt the Compute orchestration platform. This helped reducing operations, time to deploy, and improve overall reliability. I pushed for adopting 10Gb+ networking in our data center to help our team to scale. I was the SRE Tech Lead for the Manhattan team, helping with performance, operation and automation.
-** Senior Software Engineer - Say Media, San Francisco
-| Software Engineer | Senior SWE | Infrastructure | Aug 2011 - Aug 2014 |
-During my time at Say Media, I worked on two different teams. I started as a software engineer in the platform team building the various APIs; I then transitioned to the operation team, to develop tooling to increase the effectiveness of the engineering organization.
-** Senior Software Engineer - Linkfluence, Paris
-| Software Engineer | Senior SWE | Infrastructure | July 2007 - July 2011 |
-I was one of the early engineers joining Linkfluence in 2007. I led the development of the company's crawler (web, feeds). I was responsible for defining the early architecture of the company, and designed the internal platforms (Service Oriented Architecture).
-I helped the company to contribute to open source projects; contributed to open source projects on behalf of the company; represented the company at numerous open sources conferences in Europe.
-* Technical Skills
-- *Languages*  Python, Go, Ruby, Perl
-- *Frameworks* Kubernetes, Aurora, Mesos
-- *Databases*  RDBMS, NOSql
-- *Dev tools*  Git
diff --git a/users/fcuny/resume/styles/resume.css b/users/fcuny/resume/styles/resume.css
deleted file mode 100644
index 13ed9b3..0000000
--- a/users/fcuny/resume/styles/resume.css
+++ /dev/null
@@ -1,72 +0,0 @@
-body {
-  font-family: sans-serif;
-  font-size: 1em;
-  line-height: 1.8em;
-  color: #0e0e0b;
-  margin: 1em auto;
-  padding: 0 0.55em;
-  max-width: 50rem;
-}
-
-h1 {
-  color: #0e0e0b;
-  font-size: 1.3rem;
-}
-
-h2, h3 {
-  border-bottom: 1px solid #eee;
-  font-style: italic;
-}
-h2 {
-  margin-top: 1.25em;
-  margin-bottom: 0.41em;
-  font-size: 1.2rem;
-}
-h3 {
-  margin-top: 1.5em;
-  margin-bottom: 0.5em;
-  font-size: 1rem;
-}
-
-hr{
-  color:#000111;
-  background-color:#000111;
-  border:none;
-  height:1px
-}
-
-a {
-  color:#047bc2;
-  transition:color .1s ease-in-out;
-}
-
-table {
-  width: 100%;
-  border-spacing: 0px;
-  outline: none;
-}
-td{
-  padding-right: 0.7em;
-}
-td:last-child {
-  text-align: right;
-}
-table, th, td {
-  font-family: monospace;
-  color: #000;
-}
-
-#title-block-header {
-  padding-right: 10px;
-  font-size: 1.4em;
-  display: flex;
-  font-family: monospace;
-  justify-content: space-between;
-  align-items: center;
-  padding-top: 0.5rem;
-  border-bottom: 1px;
-}
-
-#experience {
-  padding-top: 20px;
-}