<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>blog.mengw.io</title><description>WMXPY&apos;s automated bug factory</description><link>https://blog.mengw.io/</link><language>en-US</language><item><title>Hello, world (again)</title><link>https://blog.mengw.io/en-US/posts/hello-world/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/hello-world/</guid><description>Re-launching this blog on Astro. Same person, fewer adjectives.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>meta</category></item><item><title>Rethinking How We Write Documentation</title><link>https://blog.mengw.io/en-US/posts/rethink-document-writing/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/rethink-document-writing/</guid><description>What an open-source project&apos;s docs need to provide beyond what a generator can output.</description><pubDate>Tue, 27 Oct 2020 00:00:00 GMT</pubDate><category>documentation</category><category>writing</category><category>open-source</category></item><item><title>Angular and .NET Notes</title><link>https://blog.mengw.io/en-US/posts/angular-dotnet-notes/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/angular-dotnet-notes/</guid><description>C# threading, JS vs C# GC, TypeScript type tricks, and the Angular lifecycle and DI.</description><pubDate>Wed, 10 Apr 2019 00:00:00 GMT</pubDate><category>csharp</category><category>angular</category><category>typescript</category><category>notes</category></item><item><title>Generators and Coroutines: From spawn to async/await</title><link>https://blog.mengw.io/en-US/posts/generators-and-coroutines/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/generators-and-coroutines/</guid><description>The stackless coroutine that powers JS generators, and how async/await desugars to a generator + executor.</description><pubDate>Tue, 09 Apr 2019 00:00:00 GMT</pubDate><category>javascript</category><category>generators</category><category>async</category></item><item><title>Redis: Single-Threaded but Still Fast</title><link>https://blog.mengw.io/en-US/posts/redis-single-thread/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/redis-single-thread/</guid><description>Why Redis is single-threaded and still hits six-figure QPS.</description><pubDate>Mon, 01 Apr 2019 00:00:00 GMT</pubDate><category>redis</category><category>performance</category></item><item><title>How HTTP Ends</title><link>https://blog.mengw.io/en-US/posts/http-end-of-story/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/http-end-of-story/</guid><description>HTTP&apos;s blank-line terminator, the chunked transfer-encoding shape, and how both relate to a filesystem&apos;s EOF.</description><pubDate>Sun, 31 Mar 2019 00:00:00 GMT</pubDate><category>http</category><category>networking</category></item><item><title>Extracting Function Argument Types in TypeScript</title><link>https://blog.mengw.io/en-US/posts/typescript-function-argument-types/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/typescript-function-argument-types/</guid><description>Pulling parameters and return types out of a function with `infer`, and where it stops working on unions.</description><pubDate>Tue, 26 Mar 2019 00:00:00 GMT</pubDate><category>typescript</category><category>type-system</category></item><item><title>Idempotence and Side Effects</title><link>https://blog.mengw.io/en-US/posts/idempotence-and-side-effects/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/idempotence-and-side-effects/</guid><description>What happens when a user pounds the submit button — designing for idempotent APIs.</description><pubDate>Fri, 22 Mar 2019 00:00:00 GMT</pubDate><category>api-design</category><category>http</category><category>rest</category></item><item><title>Python / ML / CV Notes</title><link>https://blog.mengw.io/en-US/posts/python-ml-cv-notes/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/python-ml-cv-notes/</guid><description>Common interview-style questions across Python, ML, and CV.</description><pubDate>Thu, 21 Mar 2019 00:00:00 GMT</pubDate><category>python</category><category>machine-learning</category><category>computer-vision</category><category>notes</category></item><item><title>Binary Search Tree</title><link>https://blog.mengw.io/en-US/posts/binary-search-tree/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/binary-search-tree/</guid><description>BST properties, operation costs, and the worst-case degeneration into a linked list.</description><pubDate>Tue, 19 Mar 2019 00:00:00 GMT</pubDate><category>data-structures</category><category>trees</category></item><item><title>How HashMap Handles Collisions</title><link>https://blog.mengw.io/en-US/posts/hashmap-collisions/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/hashmap-collisions/</guid><description>The linked-list shape Java&apos;s HashMap uses for hash collisions.</description><pubDate>Mon, 18 Mar 2019 00:00:00 GMT</pubDate><category>data-structures</category><category>java</category></item><item><title>HTTP Protocol Versions, Recapped</title><link>https://blog.mengw.io/en-US/posts/http-versions/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/http-versions/</guid><description>What changed across HTTP 1.0/1.1, SPDY, and HTTP 2 — multiplexing, header compression, server push, and how multiplexing differs from keep-alive.</description><pubDate>Sat, 16 Mar 2019 00:00:00 GMT</pubDate><category>http</category><category>networking</category></item><item><title>Flattening Arrays: From Recursion to Generators</title><link>https://blog.mengw.io/en-US/posts/array-flatten-recursion-to-generators/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/array-flatten-recursion-to-generators/</guid><description>Three takes on the array flattening problem: recursion, hand-rolled iterators, generators (yield*).</description><pubDate>Thu, 14 Mar 2019 00:00:00 GMT</pubDate><category>javascript</category><category>generators</category><category>iterators</category></item><item><title>A Decent Cloud Web Architecture</title><link>https://blog.mengw.io/en-US/posts/aws-web-architecture/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/aws-web-architecture/</guid><description>GCP vs AWS load-balancer comparison, plus a deployment shape for a typical web app.</description><pubDate>Tue, 12 Mar 2019 00:00:00 GMT</pubDate><category>cloud</category><category>architecture</category><category>aws</category><category>gcp</category></item><item><title>Wiring a JS/TS Project into Sonarqube</title><link>https://blog.mengw.io/en-US/posts/sonarqube-javascript/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/sonarqube-javascript/</guid><description>Sonarqube&apos;s Java docs are deep. JS/TS, less so — here&apos;s a working setup.</description><pubDate>Thu, 07 Mar 2019 00:00:00 GMT</pubDate><category>javascript</category><category>tooling</category><category>qa</category></item><item><title>Quick Sort</title><link>https://blog.mengw.io/en-US/posts/quick-sort/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/quick-sort/</guid><description>An in-place quicksort in TypeScript, with a note on why a left-side pivot forces right-to-left scanning.</description><pubDate>Tue, 05 Mar 2019 00:00:00 GMT</pubDate><category>algorithms</category><category>sorting</category></item><item><title>Dynamic Programming</title><link>https://blog.mengw.io/en-US/posts/dynamic-programming/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/dynamic-programming/</guid><description>What DP is, and what kinds of problems it&apos;s actually useful for.</description><pubDate>Mon, 04 Mar 2019 00:00:00 GMT</pubDate><category>algorithms</category><category>dynamic-programming</category></item><item><title>A Few Nginx Tuning Knobs</title><link>https://blog.mengw.io/en-US/posts/nginx-tuning/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/nginx-tuning/</guid><description>A handful of Nginx config knobs worth knowing: workers, file descriptors, TCP options.</description><pubDate>Fri, 15 Feb 2019 00:00:00 GMT</pubDate><category>linux</category><category>nginx</category></item><item><title>Checking &apos;Is This an Array?&apos; in JS</title><link>https://blog.mengw.io/en-US/posts/is-array/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/is-array/</guid><description>Array.isArray, instanceof, and Object.prototype.toString.call, and where each one breaks.</description><pubDate>Sun, 09 Sep 2018 00:00:00 GMT</pubDate><category>javascript</category><category>types</category></item><item><title>Webpack Config Notes</title><link>https://blog.mengw.io/en-US/posts/webpack-config-notes/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/webpack-config-notes/</guid><description>A few webpack pitfalls hit while wiring up ghoti-cli&apos;s fully-static React template.</description><pubDate>Wed, 28 Mar 2018 00:00:00 GMT</pubDate><category>javascript</category><category>webpack</category></item><item><title>Reverse-Proxying a Node Service with Nginx</title><link>https://blog.mengw.io/en-US/posts/nginx-node-service/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/nginx-node-service/</guid><description>Routing traffic through Nginx to a Node app listening on a non-standard port.</description><pubDate>Sat, 24 Mar 2018 00:00:00 GMT</pubDate><category>linux</category><category>nginx</category><category>node</category></item><item><title>Securing a New Linux Server</title><link>https://blog.mengw.io/en-US/posts/securing-new-linux-server/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/securing-new-linux-server/</guid><description>First-pass hardening on a fresh DigitalOcean Droplet: non-root user, SSH port, key-only login.</description><pubDate>Wed, 14 Mar 2018 00:00:00 GMT</pubDate><category>linux</category><category>security</category><category>ssh</category></item><item><title>Multi-Process Node with cluster</title><link>https://blog.mengw.io/en-US/posts/multi-process-node/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/multi-process-node/</guid><description>Using Node&apos;s cluster module to spread work across cores.</description><pubDate>Thu, 07 Dec 2017 00:00:00 GMT</pubDate><category>node</category><category>concurrency</category></item><item><title>React Native Environment Setup</title><link>https://blog.mengw.io/en-US/posts/react-native-install/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/react-native-install/</guid><description>Setting up React Native on Windows / Ubuntu / CentOS.</description><pubDate>Tue, 28 Nov 2017 00:00:00 GMT</pubDate><category>mobile</category><category>react-native</category><category>android</category></item><item><title>CentOS Install Cheatsheet</title><link>https://blog.mengw.io/en-US/posts/centos-install-guide/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/centos-install-guide/</guid><description>A handful of common install commands on CentOS.</description><pubDate>Tue, 17 Oct 2017 00:00:00 GMT</pubDate><category>linux</category><category>centos</category></item><item><title>Shrinking JS: the Ternary</title><link>https://blog.mengw.io/en-US/posts/minify-ternary/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/minify-ternary/</guid><description>When the wire format is text, code size is cost — reach for the ternary.</description><pubDate>Thu, 10 Aug 2017 00:00:00 GMT</pubDate><category>javascript</category><category>minification</category></item><item><title>Reaching the Outer Object from a Nested Method</title><link>https://blog.mengw.io/en-US/posts/this-chained/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/this-chained/</guid><description>An old caperjs refactor and the `this` chain that wasn&apos;t.</description><pubDate>Wed, 09 Aug 2017 00:00:00 GMT</pubDate><category>javascript</category><category>scope</category></item><item><title>Installing native-dep npm packages on Windows</title><link>https://blog.mengw.io/en-US/posts/native-deps-npm-on-windows/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/native-deps-npm-on-windows/</guid><description>A few npm packages ship C++ or Python code that needs node-gyp. On Windows that means windows-build-tools.</description><pubDate>Thu, 29 Jun 2017 00:00:00 GMT</pubDate><category>javascript</category><category>node</category><category>windows</category></item><item><title>Swift / WKWebView Photo Upload Workaround</title><link>https://blog.mengw.io/en-US/posts/swift-wkwebview-photo-upload/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/swift-wkwebview-photo-upload/</guid><description>Fixing the iPhone bug where WKWebView&apos;s photo picker also dismisses the parent NavigationController.</description><pubDate>Mon, 26 Jun 2017 00:00:00 GMT</pubDate><category>swift</category><category>ios</category><category>webview</category></item><item><title>Hybrid App Gotchas</title><link>https://blog.mengw.io/en-US/posts/hybrid-app-notes/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/hybrid-app-notes/</guid><description>Notes from a stretch of hybrid-app work — WebView interop, layout, packaging.</description><pubDate>Fri, 23 Jun 2017 00:00:00 GMT</pubDate><category>mobile</category><category>hybrid</category><category>webview</category></item><item><title>PHPUnit Basics</title><link>https://blog.mengw.io/en-US/posts/phpunit-basic/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/phpunit-basic/</guid><description>Common PHPUnit assertions and a simple test example.</description><pubDate>Fri, 02 Jun 2017 00:00:00 GMT</pubDate><category>php</category><category>testing</category></item><item><title>Electron / Node / TS / Vue Gotchas</title><link>https://blog.mengw.io/en-US/posts/electron-pit/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/electron-pit/</guid><description>A handful of things I tripped on while building UpgradeE.</description><pubDate>Thu, 20 Apr 2017 00:00:00 GMT</pubDate><category>javascript</category><category>electron</category><category>node</category></item><item><title>Closures and Private Variables in JavaScript</title><link>https://blog.mengw.io/en-US/posts/closure-and-private/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/closure-and-private/</guid><description>Using closures to implement private in JavaScript.</description><pubDate>Thu, 13 Apr 2017 00:00:00 GMT</pubDate><category>javascript</category><category>closures</category></item><item><title>Guessing Gender from a Chinese Name with Bayes</title><link>https://blog.mengw.io/en-US/posts/gender-by-name/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/gender-by-name/</guid><description>A small idea for guessing gender from a Chinese name using Bayes.</description><pubDate>Wed, 12 Apr 2017 00:00:00 GMT</pubDate><category>javascript</category><category>experiments</category></item><item><title>DN-02: Frontend Notes</title><link>https://blog.mengw.io/en-US/posts/dn-02/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/dn-02/</guid><description>Drive-by frontend notes, part two.</description><pubDate>Mon, 03 Apr 2017 00:00:00 GMT</pubDate><category>javascript</category><category>frontend</category><category>notes</category></item><item><title>DN-01: Frontend Notes</title><link>https://blog.mengw.io/en-US/posts/dn-01/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/dn-01/</guid><description>Drive-by frontend notes, part one.</description><pubDate>Fri, 17 Mar 2017 00:00:00 GMT</pubDate><category>javascript</category><category>frontend</category><category>notes</category></item><item><title>Review.md Project Notes</title><link>https://blog.mengw.io/en-US/posts/reviewmd-stuff/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/reviewmd-stuff/</guid><description>Loose observations from working on Review.md.</description><pubDate>Thu, 16 Mar 2017 00:00:00 GMT</pubDate><category>javascript</category><category>notes</category></item><item><title>Ubuntu Install Cheatsheet</title><link>https://blog.mengw.io/en-US/posts/ubuntu-install-guide/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/ubuntu-install-guide/</guid><description>Common install and cleanup commands for Ubuntu, kept around for copy-paste.</description><pubDate>Mon, 13 Mar 2017 00:00:00 GMT</pubDate><category>linux</category><category>ubuntu</category></item><item><title>ES6 Notes: let and const</title><link>https://blog.mengw.io/en-US/posts/es6-let-and-const/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/es6-let-and-const/</guid><description>Notes adapted from Ruan Yifeng&apos;s ES6 introduction. This part covers let and const.</description><pubDate>Wed, 16 Nov 2016 00:00:00 GMT</pubDate><category>javascript</category><category>es6</category></item><item><title>Vue Notes</title><link>https://blog.mengw.io/en-US/posts/vue-guide/</link><guid isPermaLink="true">https://blog.mengw.io/en-US/posts/vue-guide/</guid><description>Notes from learning Vue 1.x.</description><pubDate>Sat, 14 May 2016 00:00:00 GMT</pubDate><category>javascript</category><category>vue</category></item></channel></rss>