Skip to content

Instantly share code, notes, and snippets.

@joelreymont
Last active August 29, 2015 14:15
Show Gist options
  • Save joelreymont/f884c984d46bb8bb43f6 to your computer and use it in GitHub Desktop.
Save joelreymont/f884c984d46bb8bb43f6 to your computer and use it in GitHub Desktop.

http://wagerlabs.com/about

Summary

I develop backends in Erlang and Go. I also write Mac device drivers and firmware for various microcontrollers.

I wrote OpenPoker, a scalable Erlang poker server, and sold it to Electronic Arts for use in EA World Series of Poker (WSOP).

I thrive on solving difficult problems.

Feel free to browse my open source code [1], email me or see my LinkedIn profile and recommendations [66].

[1] http://github.com/wagerlabs [55] mailto:[email protected] [66] http://linkedin.com/in/joelreymont

Biggest achievements

  • CoreAudio (HAL) driver to present a rack of Bruel&Kjaer LAN-XI [2] devices as a multi-channel sound card on Mac OSX.

I used C++11, Boost [3] and cpp-netlib [4] initially, then switched to plain Objective-C since it was easier to debug and did not affect performance.

I then added recording and streaming capabilities to the driver, a System Preferences pane for configuration, and a test application.

[2] http://www.bksv.com/products/frontends/lanxi [3] http://www.boost.org/ [4] http://cpp-netlib.org/

  • LabView interface for the Agilent 82357B USB/GPIB Interface High-Speed USB 2.0 [5].

I reverse-engineered a major chunk of LabView for Mac OSX using the IDA Pro disassembler, wrote a Mac USB device driver and the NI VISA Passport [6] interface to sit on top of it.

I then spent close to a month on the iPhone production line in Shenzhen to troubleshoot various issues.

[5] http://www.home.agilent.com/en/pd-851808-pn-82357B/usb-gpib-interface-high-speed-usb-20?&cc=ES&lc=eng [6] http://www.ni.com/visa/

  • OpenPoker, a scalable and fault-tolerant poker server [7] written in Erlang [8].

I started writing it back in 2004 and improved it over the years. I sold it to Electronic Arts (EA) to power EA World Series of Poker (WSOP) [9]. I then contracted for EA for several months to integrate and extend OpenPoker, as well as teach Erlang to the team.

[7] http://pylab.blogspot.com.es/2007/03/openpoker-how-it-works.html [8] http://www.erlang.org [9] http://www.ea.com/world-series-of-poker-ios

Other projects

  • Scalable Go(lang) [10] XMPP messaging server, part of Thomson Reuters Eikon [11].

I designed and implemented most of it over the course of 9 months. I actually prefer using Go [10] to Erlang these days for most server applications.

[10] http://www.golang.org [11] https://thomsonreuterseikon.com/

  • Lots of Erlang enhancements for the Issuu [12] backend over the years.

[12] http://issuu.com/

  • OCaml [13] implementation of the Issuu ad network.

[13] http://ocaml.org/

  • Work on speeding up Firefox startup on the Mac for Mozilla.

I wrote plenty of DTrace [14] scripts over the course of my contract to identify bottlenecks and implement performance enhancements. It appears that C++ static initialization significantly affects startup performance!

[14] http://en.wikipedia.org/wiki/DTrace

  • First Mac device driver for iTwin [15].

Mac kernel drivers are written in a subset of C++.

[15] http://www.itwin.com

  • iOS app and push notification work for Voalte [16] and Issuu.

[16] http://www.voalte.com/

  • CouchDB [17] optimization on the Mac for CouchOne.

Implemented a NIF [18] backend for writing and tested performance using DTrace.

[17] http://couchdb.apache.org/ [18] http://www.erlang.org/doc/tutorial/nif.html

  • Core Erlang enhancements.

I ported the High-performance Erlang Compiler (HiPE) to the Mac.

I also extended the Erlang built-in database (Mnesia) to allow arbitrary storage strategies.

  • Live-blogging server in Erlang.

I designed and implemented a high-performance scalable broadcast server in Erlang. I then scaled the server to hundreds of thousands of users on Amazon EC2 while keeping latency to a bare minimum.

  • Compiler from a SQL-like language to Erlang.

I wrote the compiler in OCaml to generate Erlang code [19] that targets my DynamoDB wrapper for Erlang [20].

The benefit is automatically enforcing referential integrity, documenting the database schema and eliminating tons of boilerplate.

[19] https://github.com/wagerlabs/mix [20] https://github.com/wagerlabs/ddb

  • Runtime Erlang code generation to speed up rule matching.

  • Port of a commercial Forth from Linux to Mac OSX.

  • Mac USB driver for a 24-core Forth CPU on a thumb stick by now defunct Intellasys.

Technologies

Go(lang), device drivers, Mac OSX kernel, USB, C++, OCaml, Lisp, Erlang, Forth, CoreAudio, IOKit, Mac OSX driver development, Core Audio.

Worth mentioning

  • I'm good with disassembling &reverse-engineering, particularly with the IDA Pro debugger.

  • I have a closet full of microcontrollers, e.g. STM32, TI MSP430, PIC, dsPIC and Arduino, as well as the Altera Cyclone III FPGA devkit and a Xilinx Spartan board.

  • I own a logic analyzer, USB hardware bus analyzer, JTAG widgets, the Agilent U3606A digital source/multimeter combo and a hot air rework station.

  • I know Forth (ported SwiftForth to Mac OSX) and can use it in anger!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment