Preserving LVM Cache

While there are a lot of examples that describe how to set up a LVM cache on an SSD for a HDD backed storage, they mostly fail to describe an additional step needed to preserve the cache across a reboot on a Ubuntu system. The culprit is that the drivers needed to enable the LVM cache are not built into the kernel, nor available in the initrd. Therefore, these drivers need to be added to the initrd. Additionally, some cache Read more

Week 18: Finding Clarity in the Complexity

This week was a little different. I took a few days off to travel to Indonesia for a university programme, so I wasn’t around my laptop as much as usual. But once I got back, I tried my best to quickly get back into the flow and pick up where I left off. Surprisingly, the short break helped me reset my mind, and I came back seeing a few things more clearly. Understanding Sorting From the User’s Perspective Before touching Read more

Week 17: Making Sorting Work (and Tests Too)

This week felt like a steady mix of learning, fixing, and just trying to understand things properly. I’m still getting used to how everything connects in the system, but each small improvement made the bigger picture a little clearer. Making Sorting Actually Work I spent the first part of the week implementing server-side sorting for React Admin lists using a non-partitioned CouchDB setup. I’m still new to CouchDB’s indexing rules, so I had to go through a lot of trial Read more

Week 16: The Week Partition Logic Took Over My Life

If last week felt like a wake-up call, then this week felt like learning how to walk all over again. I spent most of it digging into things I thought I already understood — only to discover that the more I explored, the more questions I had. It was challenging, uncomfortable at times, but also strangely motivating. Looking Closer Than Before I started by revisiting the whole getList flow: filters, sorting, indexes, and how find() and query() actually behaves. I Read more

Week 15: Debugging Myself (Not Just the Code)

This week was a humbling one. Since most of my Flutter front-end tasks were wrapping up, my supervisor decided it was time for me to try something new, the React Admin project, which uses CouchDB as its backend. It sounded exciting at first, but once I actually sat down to work on it, I realized how different (and honestly, how challenging) it was compared to what I was used to. At this point, I’ve come to understand that the language Read more

Week 14: When Fixes Finally Start Making Sense

This week was a mix of debugging déjà vu, small victories, and quiet “aha” moments, the kind where you realize maybe, just maybe, you’re starting to understand how things actually work. I spent most of it cleaning up old code, fixing a few persistent bugs, and thinking about what I really want to learn next. The End of the “Hacky Rebuild” Era It started with some feedback from my supervisor about my little “force rebuild” workaround after a long-press. He Read more

Week 13: Still Figuring Things Out, One Line at a Time

Another busy week — Week 13 was all about addressing long-standing bugs, improving stability, and preparing for yet another live event. This time, I tackled issues ranging from JWT key retrieval to stubborn gesture conflicts that made certain UI elements unresponsive after long-presses, all while going through yet another live event and wondering why Flutter widgets seem to have a personal vendetta against me. Simple Fixes That Actually Worked The week started with a small task from my supervisor on Read more

Week 12: Polishing, Testing, and Experimenting

Time really flies, and I’m already at Week 12. This round, I focused on refining the QR scanner fixes implemented during the event, improving test coverage across modules, and experimenting with how the Gemini API responds to different error scenarios. Polishing the QR Scanner Fix Last week’s live event fix for the QR scanner worked perfectly, but before pushing it upstream, I spent some time cleaning up the code for better readability and maintainability. I reorganized the decoding logic in Read more

Week 11: Cracking the QR Code Mystery

This week was all about two things: expanding test coverage across different roles and finally figuring out what’s been going wrong with the QR scanner. Both turned out to be pretty eye-opening in their own ways. Expanding Test Coverage I kicked off the week by writing more tests, this time for several user roles in the system. I’ll be adding even a few more soon, but even this round already taught me a lot. Writing tests forces you to really Read more

Week 10: From Smooth UI Updates to Rough QR Scans

This week brought two major milestones: evolving our reactive UI system from basic polling to real-time change notifications, and tackling a tricky QR code authentication issue during a live event that taught me valuable lessons about debugging and secret key handling. Moving Beyond Polling When I first added reactive UI updates, I went with the simplest option: polling CouchDB every few seconds. The app would check its update_seq, and if something had changed, it would refetch the data. It worked, Read more

Week 9: Building Reactive UI with Smart Polling

This week I turned our app from a “refresh-to-see-updates” experience into something that feels truly live. After a few days of research and experimenting, I finally shipped a feature that makes the biggest difference for users during live events, especially for the emcee and judges: automatic UI updates. Smart Polling in Action Polling sounds simple, but real usage makes it tricky. Different roles may need different levels of responsiveness. For now, the most obvious cases are the Judge and Emcee, Read more