Skip to content

Instantly share code, notes, and snippets.

Jimmy Tang talyian

Block or report user

Report or block talyian

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@talyian
talyian / regex_to_dfa.fsx
Created Sep 29, 2018
Convert a Regex to NFA to DFA
View regex_to_dfa.fsx
// An exercise in converting a regex to an NFA to a DFA
type RegexNode =
| Or of RegexNode list
| Seq of RegexNode List
| Star of RegexNode
| T of string
| Eta (* todo: does this value really belong here? *)
let regex_pattern = "x(x|y)*|z"
@talyian
talyian / A_Blitz_FSharp
Last active Sep 28, 2018
POC for New Breve Idea
View A_Blitz_FSharp
Breve was designed as a backwards-compatible Blitz replacement that does safe context-aware sanitization.
The current architecture uses Blitz's parser frontend + Latte as a context-aware backend to achieve this goal. This was because I figured writing a context-aware HTML+macro parser was harder than re-implementing Blitz's logic flows (blocks, variable lookups, partial templates, etc.) in Latte.
As it turns out, reimplementing logic is a difficult problem. An alternate solution would be to write our own Blitz-compatible frontend that just adds context-aware output and delegates to Blitz for the logic implementation. This is a Proof of concept that shows it isn't that bad in a language that makes writing parsers easy.
View A_PokerAsync_Readme
POC of applying some Async primitives to a Poker game for a discussion on async from gamedev.stackexchange.com
@talyian
talyian / fibonacci_nim.asm
Created Sep 28, 2018
Disassembly of nim fibonacci solutoin
View fibonacci_nim.asm
0000000000001640 <fib_SpYa5EuiU0areDDc1bSasA(unsigned long long)>:
1640: 48 83 ff 01 cmp $0x1,%rdi
1644: b8 01 00 00 00 mov $0x1,%eax
1649: 77 05 ja 1650 <fib_SpYa5EuiU0areDDc1bSasA(unsigned long long)+0x10>
164b: f3 c3 repz retq
164d: 0f 1f 00 nopl (%rax)
1650: 41 57 push %r15
1652: 41 56 push %r14
1654: 4c 8d 77 fe lea -0x2(%rdi),%r14
1658: 41 55 push %r13
@talyian
talyian / mono.log
Last active Feb 23, 2018
Installing Mono on Debian Wheezy
View mono.log
jimmy@4f9659dd76f5:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /tmp/tmp.I6Cq8DlByE --trustdb-name /etc/apt//trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-jessie-automatic.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-jessie-security-automatic.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-jessie-stable.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-squeeze-automatic.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-squeeze-stable.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-wheezy-automatic.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-wheezy-stable.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
gpg: requesting key D3D831EF from hkp server keyserver.ubuntu.com
gpg: /etc/apt//trustd
@talyian
talyian / AdventOfCode2017
Last active Dec 11, 2017
Advent of Code 2017 Solutions.
View AdventOfCode2017
Advent of Code 2017 Solutions
@talyian
talyian / getresolution.fsx
Created Sep 30, 2017
WinGDI Get All supported Monitor Resolutions
View getresolution.fsx
#nowarn "9"
open System
open System.Runtime.InteropServices
[<StructLayout(LayoutKind.Sequential)>]
type DEVMODEInfo = struct
[<MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)>]
[<DefaultValue>] val mutable dmDeviceName : string
[<DefaultValue>] val mutable dmSpecVersion: int16;
[<DefaultValue>] val mutable dmDriverVersion: int16;
View OpenTK Texturing example
#r "System.Drawing"
#r "OpenTK"
open OpenTK
open OpenTK.Graphics
open OpenTK.Graphics.OpenGL4
let window = new GameWindow (400,400,
GraphicsMode.Default, "",
GameWindowFlags.Default,
DisplayDevice.Default,
@talyian
talyian / arithmetic
Last active Jun 30, 2017
Not a good interview problem
View arithmetic
EVAL=(lambda F,B,V,P,T:lambda e:F(T(e),F,P,B(B,V))[0])(
lambda t,f,p,b: [p(p,t,(lambda x:b(('+','-'),b(('*','/'),x))))],
lambda b,e: lambda ops,t,i=0: t if i >= len(t) else b(b,e)(ops,(t.__setslice__(i-1,i+2,[e(t[i],t[i-1],t[i+1])]) or t),i) if t[i] in ops else b(b,e)(ops,t,i+1),
lambda o,x,y: {'+':lambda a,b:a+b, '-':lambda a,b:a-b, '*':lambda a,b:a*b, '/':lambda a,b:a/b}[o](float(x), float(y)),
lambda p, t, f: f((lambda s,e:t.__setslice__(s,e+1,[p(p,t[s+1:e], f)]) or t)(t.index('('),len(t)-1-t[::-1].index(')')) if '(' in t else t)[0],
lambda e: [x for x in __import__('re').split('(\\d+|.)', e.replace(' ', '')) if x],
)
print EVAL("3 - 5 - 4 - 3");
print EVAL("3 * 5 + 4 / 3");
print EVAL("3 * (5 + 4) / 2");
View door_opener.ino
#include <ESP8266WiFi.h>
const int BUZZER_INPUT_IO = 5;
const int DOOR_OUTPUT_IO = 4;
const int LED_IO = 0;
enum { STARTING, READY, NOTIFYING, OPENING };
void setup() {
Serial.begin(115200);
You can’t perform that action at this time.