[{"data":1,"prerenderedAt":239},["ShallowReactive",2],{"content-doc:\u002Fblogging-like-a-hacker":3,"blog-post-list":115},{"id":4,"title":5,"body":6,"date":106,"description":12,"extension":107,"meta":108,"navigation":109,"path":110,"seo":111,"stem":112,"type":113,"__hash__":114},"content\u002Fblogging-like-a-hacker.md","Blogging like a hacker",{"type":7,"value":8,"toc":102},"minimark",[9,13,16,29,40,54,63,72,93],[10,11,12],"p",{},"I've been using WordPress since its early days in 2005, and it's been serving me well. However, I experienced increasing friction in several key areas, which led me to replace WordPress with a pre-rendered stack.",[10,14,15],{},"The customizability of WordPress is amazing, but the more I learned about its internals and running it, the more I realized the tradeoffs involved:",[17,18,19,23,26],"ul",{},[20,21,22],"li",{},"Every page view exercises the engine, resulting in high memory consumption and delayed TTFB. WordPress is very inefficient and wasteful for static blog content. Even though caching is possible via plugins and CDNs, it's tedious to implement, isn't rock solid, and will never be as fast as a CDN-deployed site.",[20,24,25],{},"Plugins are often bloated, poorly written, pose security risks, and any plugin update can take down the site, which has happened.",[20,27,28],{},"The authoring experience is frustrating and fragmented. I just want to use Markdown with a front matter per post, but WordPress made me use its classic WYSIWYG editor, which was replaced by the Gutenberg editor, which pushed my authoring workflow even further from a plaintext editing experience.",[10,30,31,32,39],{},"I considered ",[33,34,38],"a",{"href":35,"rel":36},"https:\u002F\u002Fjekyllrb.com\u002F",[37],"nofollow","Jekyll"," for a moment, since it kicked off the static blogging revolution, but it's relatively poorly maintained compared with the tools I considered next, and I don't prefer Ruby.",[10,41,42,47,48,53],{},[33,43,46],{"href":44,"rel":45},"https:\u002F\u002Fgithub.com\u002Fashishb\u002Fwp2hugo",[37],"wp2hugo"," transformed my site to a bunch of sweet Markdown files; I inlined the extracted comments to the posts, and I had a working ",[33,49,52],{"href":50,"rel":51},"https:\u002F\u002Fgohugo.io\u002F",[37],"Hugo"," site. However, I'm unfamiliar with Go and Hugo's templating system, and I knew that future modifications would be painful.",[10,55,56,57,62],{},"Being a JavaScript guy, I looked into ",[33,58,61],{"href":59,"rel":60},"https:\u002F\u002Fwww.11ty.dev\u002F",[37],"Eleventy"," (recently rebranded as Build Awesome), but from a customization standpoint, I still didn't feel at home. Even though it's JavaScript, customization felt rigid and opinionated through its plugin system.",[10,64,65,66,71],{},"As a Vue enthusiast, I took a step further and switched to ",[33,67,70],{"href":68,"rel":69},"https:\u002F\u002Fvitepress.dev\u002F",[37],"VitePress",". I could use my Markdown files as-is, and it supports Vue components, but as I was tweaking the styles and my CSS grew past 300 lines, I concluded that documentation generators are too opinionated, and I wanted something more flexible.",[10,73,74,75,80,81,86,87,92],{},"I wanted to learn ",[33,76,79],{"href":77,"rel":78},"https:\u002F\u002Fnuxt.com\u002F",[37],"Nuxt"," for future projects anyway, so I migrated to it and used its ",[33,82,85],{"href":83,"rel":84},"https:\u002F\u002Fcontent.nuxt.com\u002F",[37],"Nuxt Content"," and ",[33,88,91],{"href":89,"rel":90},"https:\u002F\u002Fui.nuxt.com\u002F",[37],"Nuxt UI"," modules, providing maximum flexibility and the best developer experience.",[10,94,95,96,101],{},"I integrated ",[33,97,100],{"href":98,"rel":99},"https:\u002F\u002Futteranc.es\u002F",[37],"Utterances"," for commenting, set up GitHub Actions to make Cloudflare generate and push static assets to Pages, and I couldn't be happier with the result; everything is stored in Git, and there are no moving parts.",{"title":103,"searchDepth":104,"depth":104,"links":105},"",2,[],"2026-04-02","md",{},true,"\u002Fblogging-like-a-hacker",{"title":5,"description":12},"blogging-like-a-hacker","post","k0m6OVKZn3BUkSToR6HGfHo7fyG57Nal7uQAN-5HAI0",[116,119,124,129,134,139,144,149,154,159,164,169,174,179,184,189,194,199,204,209,214,219,224,229,234],{"path":117,"title":5,"date":106,"excerpt":118},"\u002Fblogging-like-a-hacker\u002F","I've been using WordPress since its early days in 2005, and it's been serving me well. However, I experienced increasing friction in several key areas, which led me to replace WordPress with a…",{"path":120,"title":121,"date":122,"excerpt":123},"\u002Fpicksoeasy-pse-20-usb-2m-the-best-manual-pick-and-place\u002F","PickSoEasy PSE-20-USB-2M, the best manual pick and place","2024-12-21","I faced a new challenge when assembling the first functional prototype of the UHK 80, our new split mechanical keyboard, about a year and a half ago. After years of hand-soldering PCBs, I needed a…",{"path":125,"title":126,"date":127,"excerpt":128},"\u002Femerchantpay-review-our-worst-nightmare\u002F","emerchantpay review: Our Worst Nightmare","2024-11-16","Summary: emerchantpay failed to capture almost all of our customers' payments, resulting in thousands of dollars in losses and countless work hours spent contacting customers individually to…",{"path":130,"title":131,"date":132,"excerpt":133},"\u002Fditching-github-copilot-and-openai\u002F","Ditching GitHub Copilot and OpenAI","2024-09-21","I see concerning actions by OpenAI that have made me cease supporting them.",{"path":135,"title":136,"date":137,"excerpt":138},"\u002Falom-jatszoter-igy-vertek-at\u002F","Álom Játszótér: Így vertek át","2024-09-18","Dióhéjban: Rendeltünk az Álom Játszótértől egy játszóteret, amelyet hiányosan teljesítettek. Konkrétan háromkiállású hinta helyett kétkiállású hintát kaptunk, homokozótetőt pedig nem kaptunk. A…",{"path":140,"title":141,"date":142,"excerpt":143},"\u002Fworking-around-jabras-power-saving\u002F","Working around Jabra's power-saving","2024-08-23","I use a Jabra Evolve2 85 headset, and after 10 seconds of no audio activity, its power-saving feature kicks in.",{"path":145,"title":146,"date":147,"excerpt":148},"\u002Fblock-international-calls-on-android\u002F","Block international calls on Android","2024-07-22","Occasionally, I get foreign calls from our business partners, and I never pick them up because I don't want them to interrupt my workflow. If they want to contact me, I expect them to email me.",{"path":150,"title":151,"date":152,"excerpt":153},"\u002Fchatgpt-were-breaking-up\u002F","ChatGPT, we're breaking up","2024-07-06","I've witnessed the recent AI revolution with great awe and have been a ChatGPT Plus subscriber since the early days.",{"path":155,"title":156,"date":157,"excerpt":158},"\u002Flogitech-is-a-mess\u002F","Logitech is a mess","2024-06-18","I wanted to adjust the speed of my Logitech G502 Hero mouse. Since Logitech doesn't support Linux, I had to fire up my rarely used Windows laptop.",{"path":160,"title":161,"date":162,"excerpt":163},"\u002Flipo-battery-finder\u002F","LiPo battery finder","2023-03-25","There are thousands of LiPo batteries, but I couldn't find the ones that best fit my project, so I've created the LiPo battery finder, which allows you to filter batteries based on x, y, and z sizes.",{"path":165,"title":166,"date":167,"excerpt":168},"\u002Feasy-kicad-pcb-panelization-with-kicad-util\u002F","Easy KiCad PCB panelization with kicad-util","2022-07-19","There are multiple panelizers available for KiCad, but only one is suitable for easily placing multiple oddly-shaped PCBs onto a panel: the kicad-util panelizer.",{"path":170,"title":171,"date":172,"excerpt":173},"\u002Fintroducing-the-ultimate-hacking-keyboard\u002F","Introducing the Ultimate Hacking Keyboard","2014-05-25","I want to take this opportunity to reveal the trailer video for the Ultimate Hacking Keyboard, a high-end mechanical keyboard of which I'm the founder and lead developer. Our keyboard will be…",{"path":175,"title":176,"date":177,"excerpt":178},"\u002Fdxf-to-svg-to-kicad_pcb-converter\u002F","DXF to SVG to KICAD_PCB converter","2013-08-07","Recently, I've written dxf2svg2kicad, a user-friendly online DXF to SVG to KICAD\\PCB converter, which converts:",{"path":180,"title":181,"date":182,"excerpt":183},"\u002Fhow-to-rule-remote-shell-sessions-with-tmux-and-mosh\u002F","How to rule remote shell sessions with tmux and mosh","2013-01-26","If you're like most SSH users, when your connection breaks, it's bad news. Not only do you have to reconnect, but your session gets destroyed, and you have to make all the moves to restore the…",{"path":185,"title":186,"date":187,"excerpt":188},"\u002Fethernet-cable-labelling\u002F","Ethernet cable labelling","2011-04-21","Ever felt you have too many cables in your home and don't know which leads where? Welcome to my world! Here's my solution.",{"path":190,"title":191,"date":192,"excerpt":193},"\u002Fcoder-keymaps-closed\u002F","Coder Keymaps closed","2009-11-09","I started Coder Keymaps a while back to create my ideal keymap. The original idea is to map Hungarian characters via the Windows key more sensibly than the standard Hungarian keymap. To do this, take…",{"path":195,"title":196,"date":197,"excerpt":198},"\u002Fmatias-keyboards\u002F","Matias keyboards","2009-05-21","There's an interesting company named Matias. They create various products, but some of their keyboards are especially interesting because of the special layouts they're using.",{"path":200,"title":201,"date":202,"excerpt":203},"\u002Fdas-keyboard-disassembly-and-analysis\u002F","Das Keyboard: Disassembly and Analysis","2009-05-11","I wanted to disassemble Das Keyboard to see what makes it tick.",{"path":205,"title":206,"date":207,"excerpt":208},"\u002Fkickass-black-midnight-commander-color-scheme\u002F","Kickass black Midnight Commander color scheme","2009-05-10","Most people use Midnight Commander with the default blue color scheme, but I've always preferred it with black colors.",{"path":210,"title":211,"date":212,"excerpt":213},"\u002Ftranslater\u002F","Translate Rapid Team - Csengesd ki a zsét, fordí­ts nekünk, aztán hátat fordí­tunk neked","2008-12-01","Gondoltál már arra, hogy kamatoztasd a nyelvtudásodat azzal, hogy egyéni szövegeket fordí­ts le anyagi juttatásért cserébe? Ha igen, akkor talán te is találkoztál már a Translate Rapid Team nevével,…",{"path":215,"title":216,"date":217,"excerpt":218},"\u002Fsearching-for-the-ultimate-keyboard\u002F","Searching for the Ultimate Keyboard","2008-08-22","About a year ago, when I worked for one of my earlier employers, I refactored much of their messy, legacy code. Thousands of lines of spaghetti code in PHP... It was a tough job.",{"path":220,"title":221,"date":222,"excerpt":223},"\u002Fuc-windows-port\u002F","Ultimate Commander Windows Port","2006-03-13","I made a demo for Vilmos Bilicki, my university mentor, regarding the Ultimate Commander, my master's thesis project. He was enthusiastic and told me he'd use UC if it ran on Windows. I had been…",{"path":225,"title":226,"date":227,"excerpt":228},"\u002Fultimate-commander-frame-handling-implemented\u002F","Ultimate Commander: Frame Handling Implemented","2006-01-21","I've just committed basic frame-handling functionality. Frame handling in UC is part of an advanced interaction design that eliminates the need for more windows.",{"path":230,"title":231,"date":232,"excerpt":233},"\u002Fedge-detector-dude-released\u002F","Edge Detector Dude Released","2005-11-14","I've written yet another PyGTK application recently for the university's Digital Image Segmentation course.",{"path":235,"title":236,"date":237,"excerpt":238},"\u002Foperational-research-demo\u002F","Operational research demo","2005-05-14","I've written a GUI application for the university's operational research course. It features an incremental UI, which the user can incrementally fill out as he\u002Fshe gives more information during the…",1775139117131]