Blog Archives
2023
- Practical Bazel: Downloading Private Release Assets from GitHub
- Practical Bazel: Use multirun for parallel execution
- Practical Bazel: Using Clang 12 C++ Toolchain on Ubuntu 20.04
- Practical Bazel: Testing Rulesets with Docker Compose-Based Buildfarm
- Practical Bazel: Supporting Trinary Stamp Attributes
- Practical Bazel: Custom Bazel Make Variables
- Practical Bazel: Retrieving Secrets from Netrc in Custom Rules
- Practical Bazel: local_archive() Workspace Rule
- Practical Bazel: Comparing Collections for Equivalence in sh_test()
- Practical Bazel: Using Bazel's Bash Runfiles Library
- Practical Bazel: Using Bazel's Bash Unittest Framework
2022
- Practical Bazel: Start with Official Rules Template
- Practical Bazel: Using Rulesets from Non-Public GitHub Repositories
- Practical Bazel: Building Multiple Workspaces in CI
- Practical Bazel: Use a Single .bazelrc With Multiple Configurations
- Practical Bazel: Implementing compilation_mode in Rules
- Practical Bazel: Isolating Ruleset's Public Interface
2021
2020
- Practical Bazel: Use Awesome Bazel to find rules
- Practical Bazel: A Simpler Way to Wrap Run Targets
- Practical Bazel: Wrapping Run Targets to Provide Additional Context
- Practical Bazel: Writing a Rule That Supports Both Build and Run
- Practical Bazel: Use ctx.actions.args() to Form Arguments Lists
- Practical Bazel: Changing Behavior on Windows
- Practical Bazel: Prefix All Generated Files
- Practical Bazel: Enable Bash Strict Mode
- Practical Bazel: Force Line Endings to LF
- Practical Bazel: Excluding Part of Tree
- Practical Bazel: Use a Specific Version of Bazel
- Practical Bazel: path or short_path?
- Practical Bazel: Start with Genrules
- Practical Bazel: Introduction
- COVID-19's Effect on Alcohol Sales
- Dialect Quiz Results
- Implication of Copyrightable APIs
2018
- Calculating Percentiles on Streaming Data Part 8: Parameterizing Algorithms on Measurement Type
- Moved Link Aggregation to Bitly
- Unit Testing Emscripten Library in Browser Using CMake and Nightwatch.JS
- Creating UMD Module from Emscripten using CMake
- Board Games for Family Night
- Calculating Percentiles on Streaming Data Part 7: Cormode-Korn-Muthukrishnan-Srivastava
- Calculating Percentiles on Streaming Data Part 6: Building a C++ and JavaScript Library from a Single Codebase
- Calculating Percentiles on Streaming Data Part 5: C++ Library
- Calculating Percentiles on Streaming Data Part 4: JavaScript Library
- Calculating Percentiles on Streaming Data Part 3: Visualizing Greenwald-Khanna
- Calculating Percentiles on Streaming Data Part 2: Notes on Implementing Greenwald-Khanna
- Calculating Percentiles on Streaming Data Part 1: Introduction
- Visualizing Latency Part 4: Official D3 Latency Heatmap Page
2017
- Visualizing Latency Part 3: Rendering Event Data
- Visualizing Latency Part 2: What is Binning?
- Visualizing Latency Part 1: Introduction
- Data-Driven Code Generation of Unit Tests Part 5: Closing Thoughts
- Data-Driven Code Generation of Unit Tests Part 4: C#, MSBuild, T4, MS Unit Test
- Data-Driven Code Generation of Unit Tests Part 3: Java, Maven, StringTemplate, JUnit
- Data-Driven Code Generation of Unit Tests Part 2: C++, CMake, Jinja2, Boost
- Data-Driven Code Generation of Unit Tests Part 1: Background
2015
- Future (circa 2010) Parallel Programming Models
- Threading is a Poor Concurrency Programming Model
- Exploring the .NET CoreFX Part 17: Videotaped API Review
- Exploring the .NET CoreFX Part 16: Platform-Specific Builds Using Compile-Time Polymorphism
- Exploring the .NET CoreFX Part 15: Using Non-Generic Factory Classes to Enable Type Inference
- Exploring the .NET CoreFX Part 14: Inside Immutable Collections
- Exploring the .NET CoreFX Part 13: ImmutableList is an AVL Tree
- Exploring the .NET CoreFX Part 12: Aggressive Inlining
2014
- Exploring the .NET CoreFX Part 11: Code Contracts
- Exploring the .NET CoreFX Part 10: Performance Tuning Enumeration
- Exploring the .NET CoreFX Part 9: Immutable Collections and the Builder Pattern
- Exploring the .NET CoreFX Part 8: NullReferenceException Performance Tricks
- Exploring the .NET CoreFX Part 7: Reference Versus Structural Equality
- Exploring the .NET CoreFX Part 6: Use IEquatable for Higher-Performance Equals()
- Exploring the .NET CoreFX Part 5: Keep Indexers Trivial to Allow JIT Optimization
- Exploring the .NET CoreFX Part 4: The Requires Convenience Class
- Exploring the .NET CoreFX Part 3: Making Methods Debugger-Friendly
- Exploring the .NET CoreFX Part 2: Cache ThreadLocal Variables in Locals
- Exploring the .NET CoreFX Part 1: Annotate Pure Methods With PureAttribute
- The Power of Central Banks
- Put all Maven dependency versions in properties
- Publishing a Java Servlet to Azure Website Using Maven
- Supporting mvn jetty:run in Maven applications
- Work Email Statistics Through 2013-12-31
- Using Handbrake to Encode Blu-Rays for the Roku
2013
- Using Handbrake to Encode DVDs for the Roku
- Instrumenting a Java Web Application with JMX
- Clean Code is Not Threadsafe Code?
- Ffmpeg encoding for the Roku
- Creating a Virtual Java RPM
- Pronounciation of GIF
- Booting an Acer Aspire easyStore H340 from External USB
- Varnish and Graphite
- Effects of Windows 2008R2
- Passive Indexing Wins Again
- Scaling Varnish
- Technology Koans
- Unix File Extension
- MySQL is (Reportedly) Still Terrible
- Python Multiprocessing Module and Closures
- Work Email Statistics
2012
2008
2007
- Custom-Drawn Win32 Tooltips
- Converting C++ Member Functions into Function Objects
- Win32: Getting LOGFONT from HFONT
- Microsoft’s XmlLite
- Generating and Parsing Localized Numbers In Windows
- XmlTextWriter Can Produce Invalid XML
- Vista Does Not Virtualize Creation Of Shell Links
- Debugging Crashes in Windows Applications: The Null Pointer Dereference
- Delta Compression Application Programming Interface
- Win32 Shell Lightweight Utility API (shlwapi.dll)
- STL Map Use
- STL Vector Use
- Managed Wrappers and Hidden Interdependencies
2006
2005
- Implementing IXmlWriter Part 13: Putting IXmlWriter Behind A Pimpl Firewall
- Implementing IXmlWriter Part 12: Supporting Pretty-Printing
- Implementing IXmlWriter Part 11: Supporting Namespaces
- Implementing IXmlWriter Part 10: Supporting WriteComment()
- Implementing IXmlWriter Part 9: Supporting WriteStartDocument() and WriteEndDocument()
- Implementing IXmlWriter Part 8: Supporting WriteStartAttribute() and WriteEndAttribute()
- Implementing IXmlWriter Part 7: Cleaning Up
- Implementing IXmlWriter Part 6: Escaping Attribute Content
- Implementing IXmlWriter Part 5: Supporting WriteAttributeString()
- Implementing IXmlWriter Part 4: Collapsing Empty Elements
- Implementing IXmlWriter Part 3: Supporting WriteElementString()
- Implementing IXmlWriter Part 2: Escaping Element Content
- Implementing IXmlWriter Part 1: The Basics
- Don't Form XML Using String Concatenation
- Avoid Atoi() And Similar Functions
- Be Careful With Doubles And C++ Streams
- Use RAII
- Beware File Open/Save Dialogs: They May Change The Current Directory
- Be Careful With Bitfields
- Use Constant References For Input-Only Parameters, Pointers Otherwise
- Write Functions Which Take Iterators, Not Collections
- Prefer Iteration To Indexing
- Revisiting Excel Interop
- Deterministic Finalization and IDisposable Part 5: Useful IDisposable Class 3: AutoReleaseComObject
- Deterministic Finalization and IDisposable Part 4: Useful IDisposable Class 2: AutoDeleteFile
- Deterministic Finalization and IDisposable Part 3: Useful IDisposable Class 1: TimedLock
- Deterministic Finalization and IDisposable Part 2: Rules For Implementing IDisposable
- Deterministic Finalization and IDisposable Part 1: The Basics