typename jon_traits<< T >>::blog In templates we trust

About

Jon maintains a strong passion for writing low level software with a focus on performance, expressiveness, and reliability. Modern software engineering is a collaborative effort, so supporting teams with ergonomic embedded tooling and libraries is top priority. He is just as eager to learn from incredible engineers as he is to share ideas, mentor, and collaborate. Lately, he has been enjoying refining his C++ abilities by catching up on major conferences, podcasts, and blogs. He then utilizes this knowledge to try and equip his coworkers with customizable, non-allocating equivalents of various standard library facilities, as well as the tools and knowledge to use them effectively.

Thanks for taking the time to visit! I try my best to share the useful and interesting programming and tooling techniques I’ve gathered in my travels in easily digestible, bite-sized pieces. It’s my goal to make ergonomic tooling for C++ accessible to the masses, so hopefully something here will be useful. That being said, most of this blog will be informal, since it largely serves as reference for friends and coworkers.

Q&A

How did you get started programming?

My first “language” was TI BASIC. In high school, one of my classmates put a quadratic solver program on my calculator that would always print “Made by Bob” upon completion. After learning how to remove that text, I wrote a temperature converter and used that as grounds to enroll in the second year CS course, which was in C++. Computer science and physics were the only classes I took in school that I felt required understanding more than memorization, so I tried to combine these in college by studying computer engineering.

Is that why you use C++?

The ability to control the way my code behaves is priority #1 for me. Because the C++ community is extremely performance sensitive, they seem less willing to insist on a one size fits all approach. This respect combined with the incredible power of templates and explicit management of memory (shall I use SBO? An Allocator policy? pmr? COW? inplace storage? view?) keep me coming back.

Is CMake worth stomaching?

Yes–meson and build2 look nice, but for now, cmake is the closest thing we’ve had to a standard build system. Besides, the basics are pretty easy. Just please, please make an effort to avoid assumptions based on IDE, generator, configuration/build type, compiler, environment, host OS, target, etc. And if I can add_subdirectory your module, you’ve already done me a huge favor.

What are some of your favorite technical resources or discussions?

In roughly alphabetical order: Articles/Blogs

Books

  • Clean Code
  • Deep C Secrets
  • Effective C++
  • Effective Modern C++
  • Game Programming Patterns
  • Making Embedded Systems: Design Patterns for Great Software
  • Modern C++ Design
  • Working Effectively With Legacy Code

Conference Talks

Podcasts

Repos/Libraries

What software do you use?

When it comes to development, I have a few staples:

  • QtCreator - Excellent vim bindings, nearly everything can be bound to a hotkey, clang based completion, cross platform, and fast.
  • zsh - Everything a terminal should be, really.
  • vim - I was reluctant to learn, but once liberal use of Home and End didn’t cut it anymore, I never looked back. Still a bit reluctant to dive into neovim though.
  • vscode - I’ve only liked vscode more and more as time goes on–best extension ecosystem hands down. It’s gone so far as to replace pycharm for me. The fact it can chug would almost always be a dealbreaker, but this is the only program that’s good enough for me to tolerate it.
  • godbolt compiler explorer - Awesome assembly translation tool.
  • sublime text - A blindingly fast, simple editor for pasting quick notes or logs.
  • vmware - Snapshots have saved me so many times, it’s earned a spot on this list.
  • Ninja - Are you using CMake? Great. Stop using make now.
  • Ccache - A couple lines of CMake and your clean rebuilds are magically faster. It doesn’t get better than that.
  • KCachegrind - Makes the already incredible cachegrind gorgeous.
  • Massif Visualizer - Heap allocation tracker GUI.

Some underappreciated gems:

  • cutecom - Build from the gitlab sources and treat yourself to the best serial terminal out there. Customizable macro buttons, recent commands list, and all the TX/RX, logging, and formatting options you’d expect.
  • JLink OZone Debugger - If you have a JLink PRO and an elf file, you’ve got a very powerful embedded focused debugger at your fingertips. Nice memory map view and trace utilities make it an unsung hero for those that can actually use it.
  • OpenCppCoverage - If you have an MSVC binary, you can get coverage results pretty hassle free. I guess visual studio probably has built in support for this sort of thing, but if you want a build server friendly solution, give it a chance!
  • SourceTrail - Very interesting source navigation and visualization tool. Definitely worth a look.
  • Chocolatey - Feels like it sort of fell by the wayside, but I want to believe a comeback is coming!

What about fun?

  • Redshift/Flux - Required for staying up too late trying to get your cross compiler working.
  • OBS Studio - Excellent recording software. Used for any videos I make.
  • Audacity - Great for editing audio tracks, and make sure you don’t cause anyone ear damage.
  • KDenLive - Nice video editor, and I’m a sucker for Qt and KDE.
  • Synergy - Proprietary (I think you can build from source?), but extremely handy for doing simultaneous laptop/desktop work.
  • Foxit Reader - PDF reader of choice. Multiple tabs, pdf editing, etc.
  • ScreenToGif - Windows application for making gifs, painlessly.
  • Paint.NET - Best simple paint application, hands down. Windows only.
  • Godot - Promising MIT licensed game engine that actually gives 2D a first-class spot at the table.
  • LMMS - Open source digital music synthesizer with tons of preset samples. I use it to make (terrible?) music.
  • Krita - Digital art application I occasionally use to paint (terrible?) art.
  • Tiled - Fun tile mapper program–decent for DnD mapping.
  • Aseprite - Simply awesome sprite editing program. Proprietary, but you can build from source (though not redistribute binaries)!

What do you do other than programming?

Though I’m not particularly good at my other hobbies, I do enjoy

  • Cooking
  • Singing
  • Playing the next MegaMan or Zelda game, whenever someone decide to make one.
  • Fitness training and dieting
  • Learning guitar

How about some random ice breakers?

  • Favorite Animal? - Fox
  • Favorite Karaoke? Song - Don’t Stop Me Now by Queen
  • Favorite Desert? - Anything with Oreos
  • Favorite Food? - Deep dish pizza, or macaroni and cheese
  • Favorite Sport? - Soccer
  • How do you take your steak? - Rare with coarse salt
  • How do you take your coffee? - Black, medium roasts preferred
  • Would you rather fight 100 duck sized horses or 1 horse sized duck? - Obviously 100 duck sized horses