Skip to content
Avatar

Organizations

@DataDog @nodecopter
Block or Report

Block or report felixge

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Add an optional note:
Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
felixge/README.md

Hi there 👋. You're probably interested in my open source work, so here is a quick summary. I've also added a bit of work history.

📫 Please open a GitHub issue if you want to discuss something related to an open source project of mine.

Otherwise you can reach me at gh@felixge.de.

Last Update: 2022-09-19

Open Source

Go (2012-now)

  • traceutils: Code for decoding and encoding runtime/trace files as well as useful functionality implemented on top.
  • fgtrace: An experimental profiler/tracer that is capturing wallclock timelines for each goroutine. It's very similar to the Chrome profiler.
  • cl: Quickly clone git repositories into a nested folders like GOPATH.
  • pprofutils: Swiss army knife for pprof files. Implemented as a command line utility as well as free web service.
  • gostackparse: A library that can parse Go stack traces at 300 MiB/s.
  • sprof: A Go profiler based on static analysis. Note the release date.
  • dd-trace-go/profiler: Working on this as part of my job for Datadog right now.
  • go-profiler-notes: In-depth research and writing on the various Go profilers.
  • sqlbench: A Go tool that measures and compares the execution time of one or more PostgreSQL queries
  • fgprof: Experimental wall-clock profiler for Go.
  • httpsnoop: Properly wraps the http.ResponseWriter interface in Go for monitoring.
  • go-xxd: High performance Go implementation of the xxd utility. I got nerd sniped into this.
  • godrone: Firmware for the Parrot AR Drone 2.0 written in Go, i.e. an experiment to physically visualize a garbage collector 😉
  • tcpkeepalive: Exposes TCP keepalive knobs & dials. There are probably better alternatives now.

PostgreSQL (2017-2020)

  • flame-explain: An online PostgreSQL EXPLAIN visualizer written in React/TypeScript. I was very excited about this and scheduled to speak about it at various conferences. Then this pandemic thing happened and I burned out on the project : (.
  • state-machines: A blog post showing how to implement state machines in PostgreSQL using user-defined aggregate functions.

Node.js (mostly 2009-2011)

Contributed 100+ patches to the core involving promises, exception handling, fs, module system, UTF-8 (including a patch for v8). Mea culpa for process.on("uncaughtException") 🙈.

Additionally I wrote a lot of NPM modules, most notably:

  • mysql: Pure JS implementation of the binary MySQL protocol.
  • formidable: A multipart/form-data parser that's pretty fast.
  • node-ar-drone: Implementation of the networking protocols used by the Parrot AR Drone 2.0. This one got a bit out of control.
  • node-style-guide: Not a module, but maybe it helped some people write better modules?

Misc

  • tus: A protocol for resumable file uploads on the web that I wrote the initial version for. It's seen wide industry adoption since.

CakePHP (2007-2009)

Contributed ~150 patches to the core and made some good friends.

Public Speaking

Here is a list of recent talks:

You can find an incomplete list of previous talks on my website.

Going forward I'm actively looking for opportunities to present on Go profiling related topics.

Blogging

I have an infrequently updated blog where I give questionable advise that ocassionally compromises servers around the world.

Work

My CV is available on request, but I'm not looking for a job right now.

  • 2021-Now: Datadog, working on Continious Go Profiling.
  • 2014-2020: Apple, working on secret manufacturing stuff using PostgreSQL and Go.
  • 2013-2014: Thomson Reuters, contracted to work on Eikon Messanger XMPP server in Go.
  • 2009-2013: Transloadit, co-founded the business and wrote lots of Node.js code until it was profitable.
  • 2006-2008: Freelancer, working for international clients while finishing high school.

Pinned

  1. fgprof Public

    🚀 fgprof is a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together.

    Go 2.5k 82

  2. A pure node.js JavaScript Client implementing the MySQL protocol.

    JavaScript 17.8k 2.5k

  3. A guide for styling your node.js / JavaScript code. Fork & adjust to your taste.

    JavaScript 4.9k 943

  4. The most used, flexible, fast and streaming parser for multipart form data. Supports uploading to serverless environments, AWS S3, Azure, GCP or the filesystem. Used in production.

    JavaScript 6.7k 700

  5. A node.js client for controlling Parrot AR Drone 2.0 quad-copters.

    JavaScript 1.7k 437

  6. felixge's notes on the various go profiling methods that are available.

    Jupyter Notebook 3.3k 198

626 contributions in the last year

No contributions on Sunday, June 19, 2022 No contributions on Monday, June 20, 2022 No contributions on Tuesday, June 21, 2022 1 contribution on Wednesday, June 22, 2022 No contributions on Thursday, June 23, 2022 No contributions on Friday, June 24, 2022 No contributions on Saturday, June 25, 2022 1 contribution on Sunday, June 26, 2022 No contributions on Monday, June 27, 2022 1 contribution on Tuesday, June 28, 2022 No contributions on Wednesday, June 29, 2022 No contributions on Thursday, June 30, 2022 No contributions on Friday, July 1, 2022 No contributions on Saturday, July 2, 2022 No contributions on Sunday, July 3, 2022 No contributions on Monday, July 4, 2022 1 contribution on Tuesday, July 5, 2022 3 contributions on Wednesday, July 6, 2022 No contributions on Thursday, July 7, 2022 6 contributions on Friday, July 8, 2022 No contributions on Saturday, July 9, 2022 5 contributions on Sunday, July 10, 2022 3 contributions on Monday, July 11, 2022 1 contribution on Tuesday, July 12, 2022 No contributions on Wednesday, July 13, 2022 1 contribution on Thursday, July 14, 2022 1 contribution on Friday, July 15, 2022 No contributions on Saturday, July 16, 2022 No contributions on Sunday, July 17, 2022 3 contributions on Monday, July 18, 2022 5 contributions on Tuesday, July 19, 2022 No contributions on Wednesday, July 20, 2022 3 contributions on Thursday, July 21, 2022 2 contributions on Friday, July 22, 2022 3 contributions on Saturday, July 23, 2022 3 contributions on Sunday, July 24, 2022 1 contribution on Monday, July 25, 2022 1 contribution on Tuesday, July 26, 2022 2 contributions on Wednesday, July 27, 2022 1 contribution on Thursday, July 28, 2022 6 contributions on Friday, July 29, 2022 No contributions on Saturday, July 30, 2022 No contributions on Sunday, July 31, 2022 1 contribution on Monday, August 1, 2022 5 contributions on Tuesday, August 2, 2022 No contributions on Wednesday, August 3, 2022 2 contributions on Thursday, August 4, 2022 1 contribution on Friday, August 5, 2022 No contributions on Saturday, August 6, 2022 3 contributions on Sunday, August 7, 2022 1 contribution on Monday, August 8, 2022 14 contributions on Tuesday, August 9, 2022 No contributions on Wednesday, August 10, 2022 No contributions on Thursday, August 11, 2022 No contributions on Friday, August 12, 2022 No contributions on Saturday, August 13, 2022 No contributions on Sunday, August 14, 2022 No contributions on Monday, August 15, 2022 No contributions on Tuesday, August 16, 2022 2 contributions on Wednesday, August 17, 2022 No contributions on Thursday, August 18, 2022 1 contribution on Friday, August 19, 2022 No contributions on Saturday, August 20, 2022 No contributions on Sunday, August 21, 2022 No contributions on Monday, August 22, 2022 No contributions on Tuesday, August 23, 2022 No contributions on Wednesday, August 24, 2022 No contributions on Thursday, August 25, 2022 No contributions on Friday, August 26, 2022 3 contributions on Saturday, August 27, 2022 No contributions on Sunday, August 28, 2022 2 contributions on Monday, August 29, 2022 No contributions on Tuesday, August 30, 2022 2 contributions on Wednesday, August 31, 2022 1 contribution on Thursday, September 1, 2022 No contributions on Friday, September 2, 2022 No contributions on Saturday, September 3, 2022 No contributions on Sunday, September 4, 2022 No contributions on Monday, September 5, 2022 No contributions on Tuesday, September 6, 2022 No contributions on Wednesday, September 7, 2022 No contributions on Thursday, September 8, 2022 No contributions on Friday, September 9, 2022 No contributions on Saturday, September 10, 2022 No contributions on Sunday, September 11, 2022 No contributions on Monday, September 12, 2022 No contributions on Tuesday, September 13, 2022 No contributions on Wednesday, September 14, 2022 No contributions on Thursday, September 15, 2022 No contributions on Friday, September 16, 2022 2 contributions on Saturday, September 17, 2022 10 contributions on Sunday, September 18, 2022 5 contributions on Monday, September 19, 2022 1 contribution on Tuesday, September 20, 2022 9 contributions on Wednesday, September 21, 2022 1 contribution on Thursday, September 22, 2022 2 contributions on Friday, September 23, 2022 No contributions on Saturday, September 24, 2022 No contributions on Sunday, September 25, 2022 4 contributions on Monday, September 26, 2022 No contributions on Tuesday, September 27, 2022 1 contribution on Wednesday, September 28, 2022 9 contributions on Thursday, September 29, 2022 4 contributions on Friday, September 30, 2022 No contributions on Saturday, October 1, 2022 No contributions on Sunday, October 2, 2022 No contributions on Monday, October 3, 2022 No contributions on Tuesday, October 4, 2022 1 contribution on Wednesday, October 5, 2022 2 contributions on Thursday, October 6, 2022 1 contribution on Friday, October 7, 2022 No contributions on Saturday, October 8, 2022 No contributions on Sunday, October 9, 2022 1 contribution on Monday, October 10, 2022 No contributions on Tuesday, October 11, 2022 2 contributions on Wednesday, October 12, 2022 1 contribution on Thursday, October 13, 2022 3 contributions on Friday, October 14, 2022 No contributions on Saturday, October 15, 2022 No contributions on Sunday, October 16, 2022 3 contributions on Monday, October 17, 2022 No contributions on Tuesday, October 18, 2022 1 contribution on Wednesday, October 19, 2022 1 contribution on Thursday, October 20, 2022 5 contributions on Friday, October 21, 2022 No contributions on Saturday, October 22, 2022 No contributions on Sunday, October 23, 2022 No contributions on Monday, October 24, 2022 1 contribution on Tuesday, October 25, 2022 6 contributions on Wednesday, October 26, 2022 1 contribution on Thursday, October 27, 2022 2 contributions on Friday, October 28, 2022 2 contributions on Saturday, October 29, 2022 No contributions on Sunday, October 30, 2022 No contributions on Monday, October 31, 2022 5 contributions on Tuesday, November 1, 2022 2 contributions on Wednesday, November 2, 2022 1 contribution on Thursday, November 3, 2022 8 contributions on Friday, November 4, 2022 8 contributions on Saturday, November 5, 2022 2 contributions on Sunday, November 6, 2022 2 contributions on Monday, November 7, 2022 1 contribution on Tuesday, November 8, 2022 No contributions on Wednesday, November 9, 2022 No contributions on Thursday, November 10, 2022 3 contributions on Friday, November 11, 2022 2 contributions on Saturday, November 12, 2022 No contributions on Sunday, November 13, 2022 No contributions on Monday, November 14, 2022 No contributions on Tuesday, November 15, 2022 1 contribution on Wednesday, November 16, 2022 2 contributions on Thursday, November 17, 2022 4 contributions on Friday, November 18, 2022 3 contributions on Saturday, November 19, 2022 9 contributions on Sunday, November 20, 2022 1 contribution on Monday, November 21, 2022 2 contributions on Tuesday, November 22, 2022 No contributions on Wednesday, November 23, 2022 3 contributions on Thursday, November 24, 2022 No contributions on Friday, November 25, 2022 No contributions on Saturday, November 26, 2022 1 contribution on Sunday, November 27, 2022 No contributions on Monday, November 28, 2022 1 contribution on Tuesday, November 29, 2022 No contributions on Wednesday, November 30, 2022 1 contribution on Thursday, December 1, 2022 No contributions on Friday, December 2, 2022 1 contribution on Saturday, December 3, 2022 No contributions on Sunday, December 4, 2022 No contributions on Monday, December 5, 2022 3 contributions on Tuesday, December 6, 2022 No contributions on Wednesday, December 7, 2022 2 contributions on Thursday, December 8, 2022 3 contributions on Friday, December 9, 2022 No contributions on Saturday, December 10, 2022 No contributions on Sunday, December 11, 2022 1 contribution on Monday, December 12, 2022 1 contribution on Tuesday, December 13, 2022 2 contributions on Wednesday, December 14, 2022 1 contribution on Thursday, December 15, 2022 No contributions on Friday, December 16, 2022 5 contributions on Saturday, December 17, 2022 No contributions on Sunday, December 18, 2022 No contributions on Monday, December 19, 2022 No contributions on Tuesday, December 20, 2022 8 contributions on Wednesday, December 21, 2022 No contributions on Thursday, December 22, 2022 No contributions on Friday, December 23, 2022 2 contributions on Saturday, December 24, 2022 No contributions on Sunday, December 25, 2022 No contributions on Monday, December 26, 2022 No contributions on Tuesday, December 27, 2022 No contributions on Wednesday, December 28, 2022 No contributions on Thursday, December 29, 2022 1 contribution on Friday, December 30, 2022 1 contribution on Saturday, December 31, 2022 1 contribution on Sunday, January 1, 2023 1 contribution on Monday, January 2, 2023 1 contribution on Tuesday, January 3, 2023 1 contribution on Wednesday, January 4, 2023 3 contributions on Thursday, January 5, 2023 No contributions on Friday, January 6, 2023 2 contributions on Saturday, January 7, 2023 23 contributions on Sunday, January 8, 2023 11 contributions on Monday, January 9, 2023 4 contributions on Tuesday, January 10, 2023 6 contributions on Wednesday, January 11, 2023 5 contributions on Thursday, January 12, 2023 4 contributions on Friday, January 13, 2023 1 contribution on Saturday, January 14, 2023 No contributions on Sunday, January 15, 2023 No contributions on Monday, January 16, 2023 3 contributions on Tuesday, January 17, 2023 1 contribution on Wednesday, January 18, 2023 1 contribution on Thursday, January 19, 2023 1 contribution on Friday, January 20, 2023 3 contributions on Saturday, January 21, 2023 No contributions on Sunday, January 22, 2023 1 contribution on Monday, January 23, 2023 5 contributions on Tuesday, January 24, 2023 5 contributions on Wednesday, January 25, 2023 2 contributions on Thursday, January 26, 2023 2 contributions on Friday, January 27, 2023 No contributions on Saturday, January 28, 2023 No contributions on Sunday, January 29, 2023 No contributions on Monday, January 30, 2023 3 contributions on Tuesday, January 31, 2023 4 contributions on Wednesday, February 1, 2023 4 contributions on Thursday, February 2, 2023 No contributions on Friday, February 3, 2023 No contributions on Saturday, February 4, 2023 No contributions on Sunday, February 5, 2023 1 contribution on Monday, February 6, 2023 1 contribution on Tuesday, February 7, 2023 No contributions on Wednesday, February 8, 2023 8 contributions on Thursday, February 9, 2023 No contributions on Friday, February 10, 2023 No contributions on Saturday, February 11, 2023 No contributions on Sunday, February 12, 2023 2 contributions on Monday, February 13, 2023 No contributions on Tuesday, February 14, 2023 No contributions on Wednesday, February 15, 2023 4 contributions on Thursday, February 16, 2023 No contributions on Friday, February 17, 2023 No contributions on Saturday, February 18, 2023 No contributions on Sunday, February 19, 2023 1 contribution on Monday, February 20, 2023 1 contribution on Tuesday, February 21, 2023 No contributions on Wednesday, February 22, 2023 No contributions on Thursday, February 23, 2023 1 contribution on Friday, February 24, 2023 No contributions on Saturday, February 25, 2023 3 contributions on Sunday, February 26, 2023 1 contribution on Monday, February 27, 2023 3 contributions on Tuesday, February 28, 2023 No contributions on Wednesday, March 1, 2023 1 contribution on Thursday, March 2, 2023 2 contributions on Friday, March 3, 2023 No contributions on Saturday, March 4, 2023 3 contributions on Sunday, March 5, 2023 No contributions on Monday, March 6, 2023 No contributions on Tuesday, March 7, 2023 No contributions on Wednesday, March 8, 2023 1 contribution on Thursday, March 9, 2023 No contributions on Friday, March 10, 2023 No contributions on Saturday, March 11, 2023 1 contribution on Sunday, March 12, 2023 2 contributions on Monday, March 13, 2023 1 contribution on Tuesday, March 14, 2023 3 contributions on Wednesday, March 15, 2023 No contributions on Thursday, March 16, 2023 2 contributions on Friday, March 17, 2023 1 contribution on Saturday, March 18, 2023 No contributions on Sunday, March 19, 2023 No contributions on Monday, March 20, 2023 No contributions on Tuesday, March 21, 2023 No contributions on Wednesday, March 22, 2023 No contributions on Thursday, March 23, 2023 2 contributions on Friday, March 24, 2023 No contributions on Saturday, March 25, 2023 No contributions on Sunday, March 26, 2023 No contributions on Monday, March 27, 2023 No contributions on Tuesday, March 28, 2023 No contributions on Wednesday, March 29, 2023 No contributions on Thursday, March 30, 2023 No contributions on Friday, March 31, 2023 2 contributions on Saturday, April 1, 2023 No contributions on Sunday, April 2, 2023 No contributions on Monday, April 3, 2023 2 contributions on Tuesday, April 4, 2023 3 contributions on Wednesday, April 5, 2023 6 contributions on Thursday, April 6, 2023 1 contribution on Friday, April 7, 2023 No contributions on Saturday, April 8, 2023 No contributions on Sunday, April 9, 2023 No contributions on Monday, April 10, 2023 No contributions on Tuesday, April 11, 2023 No contributions on Wednesday, April 12, 2023 No contributions on Thursday, April 13, 2023 No contributions on Friday, April 14, 2023 No contributions on Saturday, April 15, 2023 No contributions on Sunday, April 16, 2023 2 contributions on Monday, April 17, 2023 3 contributions on Tuesday, April 18, 2023 No contributions on Wednesday, April 19, 2023 No contributions on Thursday, April 20, 2023 No contributions on Friday, April 21, 2023 1 contribution on Saturday, April 22, 2023 No contributions on Sunday, April 23, 2023 No contributions on Monday, April 24, 2023 3 contributions on Tuesday, April 25, 2023 3 contributions on Wednesday, April 26, 2023 No contributions on Thursday, April 27, 2023 No contributions on Friday, April 28, 2023 No contributions on Saturday, April 29, 2023 No contributions on Sunday, April 30, 2023 1 contribution on Monday, May 1, 2023 No contributions on Tuesday, May 2, 2023 3 contributions on Wednesday, May 3, 2023 26 contributions on Thursday, May 4, 2023 22 contributions on Friday, May 5, 2023 1 contribution on Saturday, May 6, 2023 No contributions on Sunday, May 7, 2023 7 contributions on Monday, May 8, 2023 1 contribution on Tuesday, May 9, 2023 1 contribution on Wednesday, May 10, 2023 4 contributions on Thursday, May 11, 2023 9 contributions on Friday, May 12, 2023 1 contribution on Saturday, May 13, 2023 No contributions on Sunday, May 14, 2023 4 contributions on Monday, May 15, 2023 No contributions on Tuesday, May 16, 2023 6 contributions on Wednesday, May 17, 2023 No contributions on Thursday, May 18, 2023 No contributions on Friday, May 19, 2023 No contributions on Saturday, May 20, 2023 No contributions on Sunday, May 21, 2023 3 contributions on Monday, May 22, 2023 7 contributions on Tuesday, May 23, 2023 2 contributions on Wednesday, May 24, 2023 1 contribution on Thursday, May 25, 2023 6 contributions on Friday, May 26, 2023 No contributions on Saturday, May 27, 2023 No contributions on Sunday, May 28, 2023 No contributions on Monday, May 29, 2023 No contributions on Tuesday, May 30, 2023 No contributions on Wednesday, May 31, 2023 3 contributions on Thursday, June 1, 2023 No contributions on Friday, June 2, 2023 16 contributions on Saturday, June 3, 2023 7 contributions on Sunday, June 4, 2023 6 contributions on Monday, June 5, 2023 6 contributions on Tuesday, June 6, 2023 1 contribution on Wednesday, June 7, 2023 6 contributions on Thursday, June 8, 2023 9 contributions on Friday, June 9, 2023 No contributions on Saturday, June 10, 2023 No contributions on Sunday, June 11, 2023 7 contributions on Monday, June 12, 2023 3 contributions on Tuesday, June 13, 2023 6 contributions on Wednesday, June 14, 2023 10 contributions on Thursday, June 15, 2023 No contributions on Friday, June 16, 2023 No contributions on Saturday, June 17, 2023 2 contributions on Sunday, June 18, 2023 4 contributions on Monday, June 19, 2023 No contributions on Tuesday, June 20, 2023 Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Mon Wed Fri

Contribution activity

June 2023

Created 2 repositories

Created a pull request in DataDog/dd-trace-go that received 2 comments

profiler: log cpuProfileRate when starting a trace

What does this PR do? profiler: log cpuProfileRate when starting a trace Motivation This will improve our ability to analyze OS scheduling latency. S…

+35 −0 2 comments
Opened 13 other pull requests in 3 repositories
felixge/gh-stack 4 open 1 merged 5 closed
debuggable/gh-stack-test 2 open
DataDog/documentation 1 merged
Reviewed 2 pull requests in 1 repository

Created an issue in golang/go that received 5 comments

runtime/trace: Add traceEvCPUProfileRate Event

Use Case 1: Extract CPU Profile If an execution trace contains CPU sample events, it would be useful to extract a cpu/nanoseconds CPU profile simil…

5 comments
65 contributions in private repositories Jun 1 – Jun 19

Seeing something unexpected? Take a look at the GitHub profile guide.