openmymind.net
Programming blog exploring Zig, Elixir, Go, Testing, Design and Performance
- Posts
- 357 from 23 Jun 2010 to 4 Aug 2026
- Posting
- now and then (3 in the last year)
- Kind
- personal blog
- Feed
- https://www.openmymind.net/atom.xml
2026 3
2025 18
- Is Zig's New Writer Unsafe?
- Everything is a []u8
- I'm too dumb for Zig's new IO interface
- Zig's new Writer
- Zig's new LinkedList API (it's time to learn @fieldParentPtr)
- Allocator.resize
- ArenaAllocator.free and Nested Arenas
- Zig's dot star syntax (value.*)
- GetOrPut With String Keys
- Comparing Strings as Integers with @bitCast
- Switching on Strings in Zig
- Using Generics to Inject Stubs when Testing
- In Zig, What's a Writer?
- Using SIMD to Tell if the High Bit is Set
- Peeking Behind Zig Interfaces by Creating a Dummy std.Random Implementation
- Comptime as Configuration
- Zig's @bitCast
- Basic Awareness in Addition to Deep UnderstandingDec 26 2024
2024 37
- Sorting Strings in ZigDec 19 2024
- Gluing JSONDec 09 2024
- Zig Removes Anonymous StructNov 28 2024
- One method declaration; two Zig annoyancesNov 20 2024
- Zig's new declaration literalsNov 14 2024
- Zig's (.{}){} syntaxNov 05 2024
- TCP Server in Zig - Part 8 - Epoll & KqueueOct 30 2024
- TCP Server in Zig - Part 7 - KqueueOct 27 2024
- TCP Server in Zig - Part 6 - EpollOct 23 2024
- TCP Server in Zig - Part 5b - Poll Oct 17 2024
- TCP Server in Zig - Part 5a - Poll Oct 15 2024
- TCP Server in Zig - Part 4 - MultithreadingOct 11 2024
- TCP Server in Zig - Part 3 - Minimizing Writes & ReadsOct 08 2024
- TCP Server in Zig - Part 2 - Message BoundariesOct 05 2024
- TCP Server in Zig - Part 1 - Single ThreadedOct 02 2024
- Creating enums at comptimeSep 19 2024
- Closures in ZigSep 10 2024
- Zig's @memcpy, copyForwards and copyBackwardsSep 03 2024
- Zig's BoundedArrayAug 27 2024
- Custom String Formatting and JSON [De]Serializing in ZigAug 23 2024
- Basic MetaProgramming in ZigAug 14 2024
- Zig's HashMap - Part 3Aug 07 2024
- Zig's Temporary Variable are ConstJul 23 2024
- Using a custom test runner in ZigJul 15 2024
- Zig's @constCastJul 06 2024
- Be Careful When Assigning ArenaAllocatorsJun 26 2024
- Zig's std.json.parseFormSlice and std.json.Parsed(T)Jun 18 2024
- Leveraging Zig's AllocatorsJun 05 2024
- Zig: Freeing resources referenced in multiple threadsMay 21 2024
- Writing a task scheduler in ZigMay 09 2024
- Zig: Use The Heap to Know A Value's AddressMar 15 2024
- Being Mindful of Memory AllocationsFeb 20 2024
- Compile-Time Configuration For Zig LibrariesFeb 05 2024
- Why is Simple Code So Often Bad?Jan 30 2024
- Zig's HashMap - Part 2Jan 22 2024
- Zig's HashMap - Part 1Jan 16 2024
- Your Website Search Hurts My FeelingsDec 26 2023
2023 28
- Zig's MemoryPool AllocatorDec 22 2023
- Zig: Tiptoeing Around @ptrCastDec 11 2023
- Performance of reading a file line by line in ZigNov 27 2023
- Zig's std.json.Parsed(T)Nov 17 2023
- Fast Path to Burnout - Delaying DeploysOct 27 2023
- Zig InterfacesOct 08 2023
- Learning Zig - ConclusionSep 08 2023
- Learning Zig - Coding in ZigSep 08 2023
- Learning Zig - GenericsSep 08 2023
- Learning Zig - Heap Memory & AllocatorsSep 08 2023
- Learning Zig - Stack MemorySep 08 2023
- Learning Zig - PointersSep 08 2023
- Learning Zig - Style GuideSep 08 2023
- Learning Zig - Language Overview - Part 2Sep 08 2023
- Learning Zig - Language Overview - Part 1Sep 08 2023
- Learning ZigSep 08 2023
- Zig dangling pointers and segfaultsJun 10 2023
- SIMD with ZigMay 02 2023
- Regular Expressions in ZigApr 23 2023
- ValidationApr 21 2023
- Zig QuirksMar 27 2023
- Writing JSON to a custom output in ZigMar 17 2023
- Reading a JSON config in ZigMar 06 2023
- Writing a Custom SQLite Function (in C) - Part 2Feb 14 2023
- Writing a Custom SQLite Function (in C) - Part 1Feb 02 2023
- ASCII String to Lowercase in GoJan 19 2023
- String to Integer (atoi) in GoJan 11 2023
- Building a Cache in ElixirJul 11 2022
2022 8
- WebSocket Framing: Masking, Fragmentation and MoreMay 29 2022
- Exhausting Exhaustive TestingMar 18 2022
- Basic observations of Generics in GoMar 03 2022
- Server Hardening Tools (As An Amateur)Feb 16 2022
- Elixir Without Ecto - Dynamic QueriesFeb 11 2022
- Elixir Without EctoFeb 05 2022
- Using Process Dictionaries in ElixirJan 07 2022
- Queue Despair: Ordering and Poison MessagesDec 08 2021
2021 15
- Rust StringsNov 27 2021
- Rust Ownership, Move and Borrow - Part 3Nov 22 2021
- Rust Ownership, Move and Borrow - Part 2Nov 13 2021
- Rust Ownership, Move and Borrow - Part 1Nov 06 2021
- Elixir, A Little Beyond The Basics - Part 9: erlangOct 25 2021
- Elixir, A Little Beyond The Basics - Part 8: genserversOct 23 2021
- Elixir, A Little Beyond The Basics - Part 7: supervisorsOct 22 2021
- Elixir, A Little Beyond The Basics - Part 6: processesOct 20 2021
- Elixir, A Little Beyond The Basics - Part 5: tuples and recordsOct 14 2021
- Elixir, A Little Beyond The Basics - Part 4: structuresOct 09 2021
- Elixir, A Little Beyond The Basics - Part 3: mapsOct 06 2021
- Elixir, A Little Beyond The Basics - Part 2: iolistOct 04 2021
- Elixir, A Little Beyond The BasicsOct 02 2021
- Elixir, A Little Beyond The Basics - Part 1: listsOct 01 2021
- Elegant TCP with Elixir - Part 2 - Message BoundariesApr 13 2020
2020 7
- Elegant TCP with Elixir - Part 1 - TCP as MessagesApr 08 2020
- An Awful Introduction to MakeFeb 23 2020
- Action-Specific Plug Pipelines for PhoenixFeb 13 2020
- Migrating to CockroachDBFeb 05 2020
- Using Messages In Elixir To Avoid PollingJan 30 2020
- Consistent Database and Message Queue WritesJan 22 2020
- Basic Brain Dump On Dealing With ErrorsOct 13 2018
2018 4
2017 11
- Elixir Tips and TricksOct 27 2017
- Testing Asynchronous Code in ElixirSep 25 2017
- Learning Elixir's SupervisorsSep 16 2017
- Elixir's Binary Matching PerformanceAug 15 2017
- Learning Elixir's ETS - Part 2Jul 22 2017
- Learning Elixir's ETS - Part 1May 28 2017
- Learning Elixir's AgentMar 28 2017
- Learning Elixir's GenServer - Part 2Mar 23 2017
- Learning Elixir's GenServer - Part 1Mar 22 2017
- Dependency Injection in Elixir is a Beautiful ThingJan 06 2017
- Tests Are About DesignDec 11 2016
2016 7
2015 21
- An Introduction To OpenResty (nginx + lua) - Part 1Dec 19 2015
- RESTful routing in GoMay 05 2015
- Go actions responsesMay 02 2015
- Go's error handling: good and badApr 23 2015
- Project OrganisationApr 16 2015
- Prematurely Blocking Producers in GoApr 04 2015
- Basic Micro-Optimizations Part 3Mar 24 2015
- Writing And Using C Code From GoMar 20 2015
- An efficient integer setMar 19 2015
- Building A Queue - Part 4Mar 18 2015
- Leaking GoroutinesMar 16 2015
- Building A Queue - Part 3Mar 12 2015
- Building A Queue - Part 2Mar 11 2015
- Building A Queue - Part 1Mar 10 2015
- Using Javascript GeneratorsFeb 24 2015
- I'm Not Sold On High AvailabilityFeb 12 2015
- Unordered QueuesFeb 04 2015
- A decade of unit testingJan 30 2015
- Nearest Neighbour Over Small AreasJan 13 2015
- Framework Agnostic Zero Downtime Deployment with NGINXJan 06 2015
- Introduction to PostgreSQL ArraysDec 08 2014
2014 21
- Basic Micro-Optimizations Part 2Nov 28 2014
- Basic Micro-OptimizationsNov 27 2014
- Condition VariablesNov 03 2014
- Buying Concurrency with MemoryOct 29 2014
- Using Small Arrays Instead Of Small DictionariesOct 22 2014
- The Little Go BookOct 21 2014
- Practical SOA / microservices - Hydration - Part 2Oct 18 2014
- How unreliable is UDP?Oct 16 2014
- Practical SOA / microservices - Typed RequestsOct 10 2014
- Practical SOA / microservices - Hydration - Part 1Oct 01 2014
- Controlling Array Growth in GolangAug 26 2014
- Cancelling Long Promise ChainsJul 02 2014
- Pools: So You Think You're Smarter Than Your GCJun 12 2014
- Space Efficient Percentile CalculationsJun 07 2014
- Understanding PoolsApr 28 2014
- Understanding Javascript PromisesApr 26 2014
- Grow Up. Use Queues.Mar 05 2014
- Client-Side vs. Server-Side Rendering Redux (Sorta)Feb 22 2014
- The Deceptive Nature Of AveragesFeb 10 2014
- Why Premature Optimizations Are Rarely A Waste Of TimeJan 13 2014
- Fast Large Offsets With An Indexed SkiplistDec 09 2013
2013 54
- Building A SkiplistDec 06 2013
- The Minimum You Need To Know About Arrays and Slices in GolangNov 25 2013
- Concurrent Reads with Serialized WritesNov 20 2013
- Filtering My Blog Posts By TagsNov 12 2013
- Building Technology Agnostic Globally Distributed SystemsNov 05 2013
- Back To Basics: Hashtables Part 2 (And A Peek Inside Redis)Nov 02 2013
- Back To Basics: HashtablesOct 31 2013
- High Concurrency LRU CachingOct 19 2013
- Growth PlanningOct 03 2013
- "Dependency Injection" in GolangSep 18 2013
- Scaling? Focus On Raw SpeedSep 11 2013
- Own A System Beyond Its Childhood, Or Stay A Bad ProgrammerSep 04 2013
- SOA Lessons LearnedAug 27 2013
- On Sharing InfrastructureAug 22 2013
- Caching: Your Worst Best FriendJul 25 2013
- Reading too much into String.SplitJul 17 2013
- Golang Slices And The Case Of The Missing MemoryJul 10 2013
- Your Buffer Is LeakingJul 08 2013
- Shard Your Hash Table To Reduce Write LocksJul 03 2013
- Golang hot configuration reloadJul 01 2013
- How Meaningful Do You Find Github's Punchcard?Jun 21 2013
- Concurrent-Friendly Logging with GolangJun 20 2013
- Background Driven DevelopmentJun 12 2013
- Why I Dislike EC2Jun 04 2013
- How Good Is Amazon's Route 53 Latency Based Routing?May 29 2013
- Do More In-Process CachingMay 23 2013
- Building SearchMay 13 2013
- Redis' slowlog and DEL's surprisingly bad performanceMay 10 2013
- Lua's JSON turns empty arrays into empty hashesMay 07 2013
- Achieving 5ms Response TimeMay 03 2013
- Writing an LRU CacheMay 02 2013
- Appendix C - Our Simple AutoCompleteApr 30 2013
- Appendix B - I Love Premature OptimizationsApr 30 2013
- Appendix A - Why Node?Apr 30 2013
- Chapter 7 - ConclusionApr 30 2013
- Chapter 6 - Writes, Bloat and QueuesApr 30 2013
- Chapter 5 - Surprisingly ReusableApr 30 2013
- Chapter 4 - TweaksApr 30 2013
- Chapter 3 - HoldbacksApr 30 2013
- Chapter 2 - The CoreApr 30 2013
- Chapter 1 - IntroductionApr 30 2013
- Scaling VikiApr 30 2013
- Introduction To Golang: Buffered ChannelsApr 27 2013
- An Interview Question Too Many Developers Get WrongApr 24 2013
- Things I Wish Someone Had Told Me About GolangMar 11 2013
- Testing In GolangMar 10 2013
- Getting an Images Type and Size in Golang (or any other language)Feb 10 2013
- You can't rollback Redis transactionsFeb 05 2013
- Introduction To Golang: Channels (Again)Jan 20 2013
- Introduction To Golang: ChannelsJan 17 2013
- Introduction To Golang: Arrays, Maps, Slices And MakeJan 14 2013
- Introduction To Golang: InterfacesJan 10 2013
- Introduction To Golang: Structures, Data and InstancesJan 07 2013
- Custom Redis Command: Performance of C vs LuaDec 24 2012
2012 42
- Writing a Custom Redis Command In C - Part 2Dec 23 2012
- Writing a Custom Redis Command In C - Part 1Dec 20 2012
- No Shit StylesheetsJul 12 2012
- Data Modeling In RedisJun 28 2012
- Three Must-Have Redis Configuration Options For ProductionJun 27 2012
- Node.js, Module.Exports and Organizing Express.js RoutesJun 26 2012
- Paging & Ranking With Large Offsets: MongoDB vs Redis vs PostgreSQLJun 25 2012
- Why Are You Linking To 404s?Jun 18 2012
- What I Learned Building MogadeJun 13 2012
- Redis Is The Most Important Tool In My ToolbeltJun 12 2012
- Azure's Website Lacks Organization and DetailsJun 11 2012
- The Little Introduction To ProgrammingJun 08 2012
- I Blog To LearnJun 07 2012
- Redis' Watch Command: Making Sure A Process Doesn't Run When Already RunningJun 05 2012
- Minimalist MarkupJun 01 2012
- Can You Make My Home Page Smaller?May 31 2012
- Client-Side vs. Server-Side RenderingMay 30 2012
- Ten Features I Like About CoffeeScriptMay 16 2012
- Mock Expectations in .NET vs RubyMay 14 2012
- Let's Increment i, Logic Gate StyleMay 07 2012
- Let's Increment i, Assembly StyleMay 03 2012
- Measuring Time Spent Between Steps In A FunnelMay 01 2012
- How I'd Change Riak's DocumentationApr 28 2012
- I Rather Have Silly Tests Than Silly CodeApr 24 2012
- Using MapReduce to Measure FunnelsApr 20 2012
- Arrays and Memory, Part 2Apr 19 2012
- Learning Is More Important Than KnowingApr 18 2012
- I'm a bad chef, but I still cook a lotApr 18 2012
- Piping BasicsApr 13 2012
- Let's Talk About LoggingApr 11 2012
- You Really Should Log Client-Side ErrorsApr 04 2012
- Malloc and FreeMar 31 2012
- Why Arrays Normally Start At ZeroMar 30 2012
- Recommending Distant ItemsMar 27 2012
- Let's Build Something Using Amazon's DynamoDBFeb 06 2012
- Node.js, Require and ExportsFeb 03 2012
- The Little Redis BookJan 23 2012
- Refactoring Common API Functionality Into A Node.js ProxyJan 17 2012
- Understanding CoffeeScript ComprehensionsJan 15 2012
- Reading from TCP streamsJan 12 2012
- Does My Replica Set Need An ArbiterJan 07 2012
- I Just Don't Like Object MappersNov 18 2011
2011 50
- Redis: Zero to Master in 30 minutes - Part 2Nov 08 2011
- Redis: Zero to Master in 30 minutes - Part 1Nov 08 2011
- Rethink Your DataNov 07 2011
- CouchDB And MongoDB PerformanceOct 28 2011
- A MongoDB Guy Learns CouchDBOct 27 2011
- Demystifying Write DurabilityOct 16 2011
- ObjectIds Are PredictableOct 15 2011
- Speeding Up Queries: Re-Imagining Your DataOct 14 2011
- Speeding Up Queries: Understanding Query PlansOct 12 2011
- What's A Padding Factor?Oct 10 2011
- Multiple Collections vs Embedded DocumentsOct 10 2011
- The MongoDB CollectionOct 09 2011
- MongoSpy, MongoWatch and Compressed BlobsSep 23 2011
- The Little Things Add UpSep 17 2011
- How You Should Go About Learning NoSQLAug 15 2011
- Someone is selling my Foundations of Programming ebook on Amazon.com (and it isn't me)Aug 12 2011
- Yesterday I Quit My JobAug 03 2011
- RoR Testing - One Thing To Do (I think) And One Thing Not To Do (I'm Sure)Jul 19 2011
- Learning Golang By Benchmarking Set ImplementationsJul 15 2011
- Error Handling In Asynchronous Code With Callbacks and Return CodesJul 14 2011
- The Only Thing I Think I Know About Proper CSS UsageJul 06 2011
- Rethink your Data ModelJul 05 2011
- MongoDB, OpenStreetMap and a Little DemoJun 20 2011
- Factories Make Testing EasierMay 17 2011
- Making our MongoDB Code Run FasterMay 09 2011
- Practical NoSQL - Solving a Real Problem with MongoDB and RedisMay 08 2011
- Fighting the FrameworkMay 04 2011
- Dealing with Now and why I'm almost done with C# and JavaMay 03 2011
- Automatically Processing EmailsApr 29 2011
- The Little MongoDB Book epubApr 20 2011
- Algorithm TutorialsApr 15 2011
- Video is a poor medium for learning to programApr 12 2011
- Markdown and MeApr 05 2011
- Why I'd Never Charge For A Tech BookMar 31 2011
- tracking hits with load.io, a sunday projectMar 29 2011
- The Little MongoDB BookMar 28 2011
- Stop Using MocksMar 23 2011
- Foundations of Programming 2 - Appendix B - Advanced jQueryMar 21 2011
- Foundations of Programming 2 - Appendix A - jQuery BasicsMar 16 2011
- Side Projects - MonglyMar 14 2011
- Foundations of Programming 2 - Chapter 5 - Effective TestingFeb 23 2011
- Regular Expressions: Positive/Negative Look-Ahead/BehindFeb 16 2011
- Validation: Hong Kong Doesn't Have Zip/Postal CodesFeb 15 2011
- Do Relational Database Vendors Care About Developers?Feb 10 2011
- Foundations of Programming 2 - Chapter 4 - Unit TestingJan 31 2011
- jQuery DateRange PickerJan 25 2011
- Understanding Map ReduceJan 20 2011
- Foundations of Programming: Why Markdown? (And why not Word?)Jan 10 2011
- Foundations of Programming 2 - Chapter 3 - IoC 180Jan 06 2011
- Foundations of Programming 2 - Chapter 2 - Yet Another IoC IntroductionDec 29 2010
2010 31
- Visual Studio's Most Unusable FeaturesDec 28 2010
- Foundations of Programming 2 - Chapter 1 - Quality and EfficiencyDec 20 2010
- Paypal's logo designed to look like a recommendation?Dec 15 2010
- Foundations of Programming 2 Will Need Your HelpDec 13 2010
- Does Anyone Know What Silverlight Is?Dec 03 2010
- How Optimized Are High Traffic Websites?Nov 16 2010
- How to Test Against an External HTTP DependencyNov 12 2010
- mogade: a free platform for casual game developersNov 09 2010
- An Introduction To HostingOct 26 2010
- My Slow Transition Away From Mocks/Oct 20 2010
- Weekend .NET Pains - Why I Prefer RubyOct 18 2010
- Programmer Passion: An Enterprises Most Useful Yet Repressed AdvantageOct 07 2010
- My Programming Sins - 2. Manually Managing ReferencesOct 07 2010
- Introducing jstubSep 27 2010
- Javascript Mocking - Damn, That's Easy.Sep 21 2010
- My Programming Sins - 1. [Not] Testing JavascriptSep 20 2010
- A different (for me) way to pageSep 06 2010
- How I would fix ASP.NETAug 30 2010
- My .NET ICacheAug 24 2010
- HttpHandlerWrapperAug 19 2010
- Design Through Testability - An ExampleAug 19 2010
- Write testable code even if you don't write testsAug 17 2010
- Website Performance : Crossing the T's and dotting the I'sJul 22 2010
- Using PostMark To Send MailJul 21 2010
- noobgaming : my rails and gaming passions combinedJul 20 2010
- Installing Nginx with Passenger on Linux (from source)Jul 01 2010
- Learning Ruby : Class methods != Static MethodsJun 26 2010
- Learning Ruby : class << selfJun 25 2010
- Rails does Mail Right. ASP.NET, not so much.Jun 24 2010
- My Rails Journey - The Expected Speed BumpsJun 23 2010
- Its time to start againJun 13 2010