41554 blogs · [ { "id": "01a08792-a084-71f8-8e69-b3cb2cbe596f", "title": "ElimKeys Elytra Keyboard Review", "url": "https://justinmklam.com/posts/2026/07/elytra-keyboard-review/", "published_at": "2026-07-15T17:09:33+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb2d5e6fad", "title": "Epomaker Keyboards Review", "url": "https://justinmklam.com/posts/2026/07/epomaker-keyboards-review/", "published_at": "2026-07-01T16:48:16+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb2e0ce05f", "title": "How I Sandbox my AI Agents", "url": "https://justinmklam.com/posts/2026/05/sandboxing-with-nono/", "published_at": "2026-05-17T18:59:22+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb2e6f49fc", "title": "A Beginner’s Guide to Split Keyboards", "url": "https://justinmklam.com/posts/2026/02/beginners-guide-split-keyboards/", "published_at": "2026-02-15T18:59:22+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb2f2479d4", "title": "Remapping a Standard Keyboard", "url": "https://justinmklam.com/posts/2025/11/remapping-standard-keyboard/", "published_at": "2025-12-01T06:18:06+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb2f6b9979", "title": "Replacing Disqus With Giscus and Github Discussions", "url": "https://justinmklam.com/posts/2025/08/replacing-disqus-with-giscus/", "published_at": "2025-08-27T04:08:26+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb2fed5684", "title": "Handwiring a 36-Key Split, Sculpted Keyboard", "url": "https://justinmklam.com/posts/2025/08/handwired-skeletyl/", "published_at": "2025-08-05T21:35:20+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb308ae4c4", "title": "Optimizing My Symbol Layer: A Data Driven Approach", "url": "https://justinmklam.com/posts/2025/07/optimizing-symbols-layer/", "published_at": "2025-07-28T17:37:03+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3133fe0a", "title": "Transitioning to a 36-Key Layout", "url": "https://justinmklam.com/posts/2025/07/36-key-layout/", "published_at": "2025-07-16T16:50:41+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb315037c0", "title": "Six Months with a Corne Keyboard", "url": "https://justinmklam.com/posts/2025/05/corne-keyboard/", "published_at": "2025-05-27T22:57:51+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb32224a2b", "title": "Hugo: Some Random Tips and Tricks", "url": "https://justinmklam.com/posts/2025/05/hugo-tips-and-tricks/", "published_at": "2025-05-23T15:47:00+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb32d97588", "title": "Using Google Cloud Pubsub for Batch Pipelines in Apache Beam", "url": "https://justinmklam.com/posts/2022/11/apache-beam-pubsub/", "published_at": "2022-11-23T20:31:53+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb33a876ba", "title": "Tips and Tricks with Terraform's null_resource", "url": "https://justinmklam.com/posts/2022/05/terraform-null-resource/", "published_at": "2022-05-18T04:21:37+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb33d531ec", "title": "Deploying Google Cloud Functions with Terraform", "url": "https://justinmklam.com/posts/2022/03/deploy-cloud-functions-terraform/", "published_at": "2022-03-08T19:47:29+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb34a5cf02", "title": "Precision Sourdough: A Smart Lid for Your Starter", "url": "https://justinmklam.com/posts/2021/02/levain-monitor/", "published_at": "2021-02-22T16:36:18+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3574e93d", "title": "Building a Backyard Chicken Coop in the City", "url": "https://justinmklam.com/posts/2021/06/chicken-coop/", "published_at": "2020-09-09T03:41:54+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3594134e", "title": "Nordic nRF52 Development with Visual Studio Code", "url": "https://justinmklam.com/posts/2019/04/vscode-nrf52/", "published_at": "2019-04-25T21:14:25+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb35ff3274", "title": "Monitoring the Fermentation of Sourdough Starter with Computer Vision", "url": "https://justinmklam.com/posts/2018/06/sourdough-starter-monitor/", "published_at": "2018-06-25T00:50:22+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb36a74de4", "title": "From Prototype to Cloud: A Python Recipe Converter", "url": "https://justinmklam.com/posts/2018/04/python-flask-heroku-tutorial/", "published_at": "2018-04-07T03:33:46+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb373d4d28", "title": "Synchronous vs Asynchronous Ping Sweep in C# Windows Form", "url": "https://justinmklam.com/posts/2018/02/ping-sweeper/", "published_at": "2018-02-10T01:02:25+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb375b26d3", "title": "Measuring the Spectral Characteristics of a Light Therapy Lamp", "url": "https://justinmklam.com/posts/2018/01/sad-lamp/", "published_at": "2018-01-12T17:42:57+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb381f4fb4", "title": "Debugger Setup with GDB + OpenOCD in Visual Studio Code", "url": "https://justinmklam.com/posts/2017/10/vscode-debugger-setup/", "published_at": "2017-10-29T21:24:52+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb38b92fde", "title": "Annealing 3D Printed Plastics: Sous Vide Style", "url": "https://justinmklam.com/posts/2017/06/sous-vide-pla/", "published_at": "2017-06-13T22:56:53+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb390ba7d0", "title": "Battery Power Protection and Regulation PCB", "url": "https://justinmklam.com/posts/2017/05/mistywest-mvs-pcb/", "published_at": "2017-05-09T18:30:56+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb392f63d0", "title": "Overhead Robotic Gantry for Tethered VR Headsets", "url": "https://justinmklam.com/posts/2017/04/vr-gantry/", "published_at": "2017-04-04T17:26:50+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb39fffe3d", "title": "Hakko-Style Solder Fume Extractor", "url": "https://justinmklam.com/posts/2017/03/solder-fume-extractor/", "published_at": "2017-03-26T04:14:29+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3a9ecf94", "title": "Resources for 3D Printing with the MP Select Mini", "url": "https://justinmklam.com/posts/2017/03/3d-printing/", "published_at": "2017-03-24T02:38:27+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3b3471fe", "title": "New Toy Tuesday: Monoprice Select Mini 3D Printer", "url": "https://justinmklam.com/posts/2017/03/mp-select-mini/", "published_at": "2017-03-07T22:56:53+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3bdbb081", "title": "ESP8266 Sous Vide Controller", "url": "https://justinmklam.com/posts/2017/05/sous-vide-controller/", "published_at": "2017-02-05T20:28:27+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3ccee759", "title": "Tired of Cables in VR? We Are Too.", "url": "https://justinmklam.com/posts/2016/tired-of-cables/", "published_at": "2016-11-16T06:02:43+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3dc44c68", "title": "Wooden Phone Stand", "url": "https://justinmklam.com/posts/2016/phone-stand/", "published_at": "2016-11-14T04:35:28+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3e6b1600", "title": "Making Do With a Bargain Bin Bandsaw", "url": "https://justinmklam.com/posts/2016/bandsaw/", "published_at": "2016-10-23T03:58:10+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3ea09ecf", "title": "Engineer's Diary", "url": "https://justinmklam.com/posts/2016/10/engineers-diary/", "published_at": "2016-10-01T18:34:47+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3ed021a9", "title": "MECH 458: Capstone 3D Optical Well Imager", "url": "https://justinmklam.com/posts/2016/06/mech-458-capstone/", "published_at": "2016-06-02T19:57:32+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3fb7ab7a", "title": "New Workshop + Plywood Bench Stool", "url": "https://justinmklam.com/posts/2016/new-workshop/", "published_at": "2016-06-01T22:39:56+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb3fe57e52", "title": "Adjustable Portable Power Supply", "url": "https://justinmklam.com/posts/2016/05/power-supply/", "published_at": "2016-05-26T00:29:58+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb408838b2", "title": "MECH 423: Mechatronics Product Design", "url": "https://justinmklam.com/posts/2016/04/perfeggct/", "published_at": "2016-04-23T05:38:31+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb40dc40da", "title": "Boo-Boo with the Bamboo Bike", "url": "https://justinmklam.com/posts/2015/bamboo-bike-boo-boo/", "published_at": "2015-12-19T03:50:37+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb4174905a", "title": "The Making of Project Haikuza: Part 2", "url": "https://justinmklam.com/posts/2015/making-haikuza-ii/", "published_at": "2015-08-07T06:49:59+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb419213e1", "title": "The Making of Project Haikuza: Part 1", "url": "https://justinmklam.com/posts/2015/making-haikuza-i/", "published_at": "2015-07-13T06:49:52+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb420c1a9f", "title": "Project Haikuza", "url": "https://justinmklam.com/posts/2015/07/haikuza/", "published_at": "2015-07-10T18:42:26+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb4277cead", "title": "Places To Be: Howe Sound Crest Trail", "url": "https://justinmklam.com/posts/2015/howe-sound-trail/", "published_at": "2015-07-09T06:14:15+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb4326cc78", "title": "Co-op: Air Quality Calibration Chamber", "url": "https://justinmklam.com/posts/2015/mistywest-coop/", "published_at": "2015-06-24T04:30:17+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb43f90706", "title": "External Ballistics Simulation", "url": "https://justinmklam.com/posts/2015/02/external-ballistics/", "published_at": "2015-02-19T18:38:35+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb446cc27c", "title": "MECH 328: TrailRider Design Project", "url": "https://justinmklam.com/posts/2014/11/mech-328-trailrider/", "published_at": "2014-11-24T19:37:55+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb448e365f", "title": "Co-op: Drill Cover User Study", "url": "https://justinmklam.com/posts/2014/coop-drill-cover/", "published_at": "2014-09-27T19:39:34+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb4549bcd6", "title": "Bowling With car2go", "url": "https://justinmklam.com/posts/2014/08/car2go/", "published_at": "2014-08-29T19:37:42+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb461f6dde", "title": "Award Winning Bamboo Bike", "url": "https://justinmklam.com/posts/2014/08/bamboo-bike/", "published_at": "2014-08-19T05:12:57+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb46b7755e", "title": "MATLAB Photo Editing Script", "url": "https://justinmklam.com/posts/2014/01/photo-editing/", "published_at": "2014-01-12T18:45:14+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb46cdd420", "title": "Co-op: The Age Effect on Bicycle Helmets", "url": "https://justinmklam.com/posts/2013/coop-mea/", "published_at": "2013-12-28T19:37:10+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb46e9855b", "title": "MECH 223: Hovercraft Competition", "url": "https://justinmklam.com/posts/2013/mech-223-hovercraft/", "published_at": "2013-04-20T19:22:15+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb47e801c3", "title": "Men in Massage: Research Paper", "url": "https://justinmklam.com/posts/2011/12/men-in-massage-therapy/", "published_at": "2011-12-02T00:51:38+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb4820a8b3", "title": "LEGO Headphones", "url": "https://justinmklam.com/posts/2010/07/lego-headphones/", "published_at": "2010-07-10T19:37:00+00:00" }, { "id": "01a08792-a084-71f8-8e69-b3cb4919585b", "title": "A Minty-Fresh Power Pack", "url": "https://justinmklam.com/posts/2009/altoids/", "published_at": "2009-04-17T05:52:25+00:00" } ] posts Claim your blog
Back to justinmklam | blog
Blog · corpus.blog/blogs/justinmklam.com/posts

justinmklam | blog

justinmklam.com

2026

2025

2022

2021

2020

2019

2018

2017

2016

2015

2014

2013

2011

2010

2009