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. 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.4k 75

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

    JavaScript 17.6k 2.5k

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

    JavaScript 4.9k 938

  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.5k 694

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

    JavaScript 1.7k 440

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

    Jupyter Notebook 3.1k 183

561 contributions in the last year

We're celebrating 100 million developers!
1 contribution on January 23, 2022 No contributions on January 24, 2022 8 contributions on January 25, 2022 6 contributions on January 26, 2022 No contributions on January 27, 2022 5 contributions on January 28, 2022 No contributions on January 29, 2022 1 contribution on January 30, 2022 No contributions on January 31, 2022 2 contributions on February 1, 2022 2 contributions on February 2, 2022 5 contributions on February 3, 2022 No contributions on February 4, 2022 2 contributions on February 5, 2022 No contributions on February 6, 2022 5 contributions on February 7, 2022 5 contributions on February 8, 2022 No contributions on February 9, 2022 6 contributions on February 10, 2022 5 contributions on February 11, 2022 1 contribution on February 12, 2022 No contributions on February 13, 2022 No contributions on February 14, 2022 No contributions on February 15, 2022 2 contributions on February 16, 2022 1 contribution on February 17, 2022 No contributions on February 18, 2022 No contributions on February 19, 2022 No contributions on February 20, 2022 No contributions on February 21, 2022 4 contributions on February 22, 2022 No contributions on February 23, 2022 8 contributions on February 24, 2022 2 contributions on February 25, 2022 No contributions on February 26, 2022 No contributions on February 27, 2022 3 contributions on February 28, 2022 6 contributions on March 1, 2022 4 contributions on March 2, 2022 1 contribution on March 3, 2022 2 contributions on March 4, 2022 1 contribution on March 5, 2022 No contributions on March 6, 2022 No contributions on March 7, 2022 No contributions on March 8, 2022 6 contributions on March 9, 2022 1 contribution on March 10, 2022 4 contributions on March 11, 2022 No contributions on March 12, 2022 No contributions on March 13, 2022 No contributions on March 14, 2022 No contributions on March 15, 2022 1 contribution on March 16, 2022 No contributions on March 17, 2022 No contributions on March 18, 2022 2 contributions on March 19, 2022 No contributions on March 20, 2022 5 contributions on March 21, 2022 No contributions on March 22, 2022 1 contribution on March 23, 2022 1 contribution on March 24, 2022 1 contribution on March 25, 2022 No contributions on March 26, 2022 1 contribution on March 27, 2022 2 contributions on March 28, 2022 No contributions on March 29, 2022 No contributions on March 30, 2022 No contributions on March 31, 2022 2 contributions on April 1, 2022 No contributions on April 2, 2022 No contributions on April 3, 2022 No contributions on April 4, 2022 No contributions on April 5, 2022 No contributions on April 6, 2022 No contributions on April 7, 2022 No contributions on April 8, 2022 1 contribution on April 9, 2022 No contributions on April 10, 2022 No contributions on April 11, 2022 2 contributions on April 12, 2022 No contributions on April 13, 2022 2 contributions on April 14, 2022 2 contributions on April 15, 2022 No contributions on April 16, 2022 No contributions on April 17, 2022 No contributions on April 18, 2022 No contributions on April 19, 2022 1 contribution on April 20, 2022 No contributions on April 21, 2022 No contributions on April 22, 2022 No contributions on April 23, 2022 1 contribution on April 24, 2022 1 contribution on April 25, 2022 No contributions on April 26, 2022 4 contributions on April 27, 2022 1 contribution on April 28, 2022 1 contribution on April 29, 2022 No contributions on April 30, 2022 No contributions on May 1, 2022 No contributions on May 2, 2022 No contributions on May 3, 2022 No contributions on May 4, 2022 4 contributions on May 5, 2022 No contributions on May 6, 2022 No contributions on May 7, 2022 2 contributions on May 8, 2022 No contributions on May 9, 2022 No contributions on May 10, 2022 1 contribution on May 11, 2022 4 contributions on May 12, 2022 8 contributions on May 13, 2022 No contributions on May 14, 2022 No contributions on May 15, 2022 4 contributions on May 16, 2022 No contributions on May 17, 2022 3 contributions on May 18, 2022 4 contributions on May 19, 2022 No contributions on May 20, 2022 No contributions on May 21, 2022 No contributions on May 22, 2022 No contributions on May 23, 2022 4 contributions on May 24, 2022 4 contributions on May 25, 2022 1 contribution on May 26, 2022 No contributions on May 27, 2022 No contributions on May 28, 2022 No contributions on May 29, 2022 6 contributions on May 30, 2022 6 contributions on May 31, 2022 3 contributions on June 1, 2022 5 contributions on June 2, 2022 6 contributions on June 3, 2022 No contributions on June 4, 2022 4 contributions on June 5, 2022 No contributions on June 6, 2022 2 contributions on June 7, 2022 1 contribution on June 8, 2022 3 contributions on June 9, 2022 4 contributions on June 10, 2022 No contributions on June 11, 2022 1 contribution on June 12, 2022 No contributions on June 13, 2022 No contributions on June 14, 2022 No contributions on June 15, 2022 No contributions on June 16, 2022 No contributions on June 17, 2022 No contributions on June 18, 2022 No contributions on June 19, 2022 No contributions on June 20, 2022 No contributions on June 21, 2022 1 contribution on June 22, 2022 No contributions on June 23, 2022 No contributions on June 24, 2022 No contributions on June 25, 2022 1 contribution on June 26, 2022 No contributions on June 27, 2022 1 contribution on June 28, 2022 No contributions on June 29, 2022 No contributions on June 30, 2022 No contributions on July 1, 2022 No contributions on July 2, 2022 No contributions on July 3, 2022 No contributions on July 4, 2022 1 contribution on July 5, 2022 3 contributions on July 6, 2022 No contributions on July 7, 2022 6 contributions on July 8, 2022 No contributions on July 9, 2022 5 contributions on July 10, 2022 3 contributions on July 11, 2022 1 contribution on July 12, 2022 No contributions on July 13, 2022 1 contribution on July 14, 2022 1 contribution on July 15, 2022 No contributions on July 16, 2022 No contributions on July 17, 2022 3 contributions on July 18, 2022 5 contributions on July 19, 2022 No contributions on July 20, 2022 3 contributions on July 21, 2022 2 contributions on July 22, 2022 3 contributions on July 23, 2022 3 contributions on July 24, 2022 1 contribution on July 25, 2022 1 contribution on July 26, 2022 2 contributions on July 27, 2022 1 contribution on July 28, 2022 6 contributions on July 29, 2022 No contributions on July 30, 2022 No contributions on July 31, 2022 1 contribution on August 1, 2022 5 contributions on August 2, 2022 No contributions on August 3, 2022 2 contributions on August 4, 2022 1 contribution on August 5, 2022 No contributions on August 6, 2022 3 contributions on August 7, 2022 1 contribution on August 8, 2022 14 contributions on August 9, 2022 No contributions on August 10, 2022 No contributions on August 11, 2022 No contributions on August 12, 2022 No contributions on August 13, 2022 No contributions on August 14, 2022 No contributions on August 15, 2022 No contributions on August 16, 2022 2 contributions on August 17, 2022 No contributions on August 18, 2022 1 contribution on August 19, 2022 No contributions on August 20, 2022 No contributions on August 21, 2022 No contributions on August 22, 2022 No contributions on August 23, 2022 No contributions on August 24, 2022 No contributions on August 25, 2022 No contributions on August 26, 2022 3 contributions on August 27, 2022 No contributions on August 28, 2022 2 contributions on August 29, 2022 No contributions on August 30, 2022 2 contributions on August 31, 2022 1 contribution on September 1, 2022 No contributions on September 2, 2022 No contributions on September 3, 2022 No contributions on September 4, 2022 No contributions on September 5, 2022 No contributions on September 6, 2022 No contributions on September 7, 2022 No contributions on September 8, 2022 No contributions on September 9, 2022 No contributions on September 10, 2022 No contributions on September 11, 2022 No contributions on September 12, 2022 No contributions on September 13, 2022 No contributions on September 14, 2022 No contributions on September 15, 2022 No contributions on September 16, 2022 2 contributions on September 17, 2022 10 contributions on September 18, 2022 5 contributions on September 19, 2022 1 contribution on September 20, 2022 9 contributions on September 21, 2022 1 contribution on September 22, 2022 2 contributions on September 23, 2022 No contributions on September 24, 2022 No contributions on September 25, 2022 4 contributions on September 26, 2022 No contributions on September 27, 2022 1 contribution on September 28, 2022 9 contributions on September 29, 2022 4 contributions on September 30, 2022 No contributions on October 1, 2022 No contributions on October 2, 2022 No contributions on October 3, 2022 No contributions on October 4, 2022 1 contribution on October 5, 2022 2 contributions on October 6, 2022 1 contribution on October 7, 2022 No contributions on October 8, 2022 No contributions on October 9, 2022 1 contribution on October 10, 2022 No contributions on October 11, 2022 2 contributions on October 12, 2022 1 contribution on October 13, 2022 3 contributions on October 14, 2022 No contributions on October 15, 2022 No contributions on October 16, 2022 3 contributions on October 17, 2022 No contributions on October 18, 2022 1 contribution on October 19, 2022 1 contribution on October 20, 2022 5 contributions on October 21, 2022 No contributions on October 22, 2022 No contributions on October 23, 2022 No contributions on October 24, 2022 1 contribution on October 25, 2022 6 contributions on October 26, 2022 1 contribution on October 27, 2022 2 contributions on October 28, 2022 2 contributions on October 29, 2022 No contributions on October 30, 2022 No contributions on October 31, 2022 5 contributions on November 1, 2022 2 contributions on November 2, 2022 1 contribution on November 3, 2022 8 contributions on November 4, 2022 8 contributions on November 5, 2022 2 contributions on November 6, 2022 2 contributions on November 7, 2022 1 contribution on November 8, 2022 No contributions on November 9, 2022 No contributions on November 10, 2022 3 contributions on November 11, 2022 2 contributions on November 12, 2022 No contributions on November 13, 2022 No contributions on November 14, 2022 No contributions on November 15, 2022 1 contribution on November 16, 2022 2 contributions on November 17, 2022 4 contributions on November 18, 2022 3 contributions on November 19, 2022 9 contributions on November 20, 2022 No contributions on November 21, 2022 2 contributions on November 22, 2022 No contributions on November 23, 2022 3 contributions on November 24, 2022 No contributions on November 25, 2022 No contributions on November 26, 2022 1 contribution on November 27, 2022 No contributions on November 28, 2022 1 contribution on November 29, 2022 No contributions on November 30, 2022 1 contribution on December 1, 2022 No contributions on December 2, 2022 1 contribution on December 3, 2022 No contributions on December 4, 2022 No contributions on December 5, 2022 3 contributions on December 6, 2022 No contributions on December 7, 2022 2 contributions on December 8, 2022 3 contributions on December 9, 2022 No contributions on December 10, 2022 No contributions on December 11, 2022 1 contribution on December 12, 2022 1 contribution on December 13, 2022 2 contributions on December 14, 2022 1 contribution on December 15, 2022 No contributions on December 16, 2022 5 contributions on December 17, 2022 No contributions on December 18, 2022 No contributions on December 19, 2022 No contributions on December 20, 2022 8 contributions on December 21, 2022 No contributions on December 22, 2022 No contributions on December 23, 2022 2 contributions on December 24, 2022 No contributions on December 25, 2022 No contributions on December 26, 2022 No contributions on December 27, 2022 No contributions on December 28, 2022 No contributions on December 29, 2022 1 contribution on December 30, 2022 1 contribution on December 31, 2022 1 contribution on January 1, 2023 1 contribution on January 2, 2023 1 contribution on January 3, 2023 1 contribution on January 4, 2023 3 contributions on January 5, 2023 No contributions on January 6, 2023 2 contributions on January 7, 2023 23 contributions on January 8, 2023 11 contributions on January 9, 2023 4 contributions on January 10, 2023 7 contributions on January 11, 2023 5 contributions on January 12, 2023 4 contributions on January 13, 2023 1 contribution on January 14, 2023 No contributions on January 15, 2023 No contributions on January 16, 2023 3 contributions on January 17, 2023 1 contribution on January 18, 2023 1 contribution on January 19, 2023 1 contribution on January 20, 2023 3 contributions on January 21, 2023 No contributions on January 22, 2023 1 contribution on January 23, 2023 4 contributions on January 24, 2023 5 contributions on January 25, 2023 2 contributions on January 26, 2023 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Mon Wed Fri
Activity overview
Contributed to DataDog/dd-trace-go, felixge/traceutils, felixge/dotfiles and 44 other repositories

Contribution activity

January 2023

Created 3 repositories

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

profiler: enable fastdelta by default

This should significantly reduce the profiler overhead when memory profiling is enabled. If needed, the previous implementation is still available …

+6 −8 11 comments
Opened 6 other pull requests in 2 repositories

Created an issue in dominikh/gotraceui that received 13 comments

Allow sampling-based timeline view without CPU samples

Right now the "Toggle displaying sampling-based timelines" (Shortcut s) feature only works if the trace contains CPU samples. Would you consider al…

13 comments
Opened 2 other issues in 2 repositories
7 contributions in private repositories Jan 3 – Jan 24

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