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
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, "",

Keybase proof

I hereby claim:

  • I am talyian on github.
  • I am talyian ( on keybase.
  • I have a public key ASDR2l3g4aL0kQBiQKSM6P7XXVJNmdC2lz5sYYqMog3DOwo

To claim this, I am signing this object:

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.
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 gist:bdc10c7a77f4488aeb988ddcf943459a
// The Computer Language Benchmarks Game
// contributed by Reed Adams
// *reset*
open System
type Node =
talyian / mandelbrot.html
Created Jun 13, 2017
Mandelbrot set in WebGL
View mandelbrot.html
<style>body { background: black; } #cv { display:block; margin:auto; }</style>
<canvas id='cv' width='800' height='800'></canvas>
<script id=frag type='x-shader/fragment'>
precision highp float;
varying vec2 _pos;
void main() {
vec2 c = _pos * 1.5 - vec2(0.7, 0), z;
for(int i = 0; i < 64; i++) {
z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c;
gl_FragColor = vec4(vec3((float(i) - log(log(length(z)))) / 64.0), 1);
View door_opener.ino
#include <ESP8266WiFi.h>
const int BUZZER_INPUT_IO = 5;
const int DOOR_OUTPUT_IO = 4;
const int LED_IO = 0;
void setup() {
talyian / getresolution.fsx
Created Sep 30, 2017
WinGDI Get All supported Monitor Resolutions
View getresolution.fsx
#nowarn "9"
open System
open System.Runtime.InteropServices
type DEVMODEInfo = struct
[<MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)>]
[<DefaultValue>] val mutable dmDeviceName : string
[<DefaultValue>] val mutable dmSpecVersion: int16;
[<DefaultValue>] val mutable dmDriverVersion: int16;
talyian / AdventOfCode2017
Last active Dec 11, 2017
Advent of Code 2017 Solutions.
View AdventOfCode2017
Advent of Code 2017 Solutions
talyian / mono.log
Last active Feb 23, 2018
Installing Mono on Debian Wheezy
View mono.log
jimmy@4f9659dd76f5:~$ sudo apt-key adv --keyserver hkp:// --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:// --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
gpg: requesting key D3D831EF from hkp server
gpg: /etc/apt//trustd
You can’t perform that action at this time.