<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: JohnDotAwesome</title><link>https://news.ycombinator.com/user?id=JohnDotAwesome</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 04:04:27 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=JohnDotAwesome" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by JohnDotAwesome in "5x5 Pixel font for tiny screens"]]></title><description><![CDATA[
<p>Amazing. I zoomed in with my phone on the generated image and was surprised to see I could just make out the text! <a href="https://storage.j0.hn/subpixelfont.png" rel="nofollow">https://storage.j0.hn/subpixelfont.png</a> - Also wow my screen is dirty af</p>
]]></description><pubDate>Wed, 22 Apr 2026 21:27:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47869510</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=47869510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47869510</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "TypeScript please give us reflection/runtime types"]]></title><description><![CDATA[
<p>Instead of pleading to the TypeScript gods, why not make a deal with the JavaScript deities? Let's get type-checking into JS!<p>If I want runtime types, I reach for type guards. If I need to do this a lot, then I reach for io-ts or zod and pretty much exclusively write types as validators/codecs/schemas or what-have-you.<p>I don't think TS - as a specification, type-checker, community, or otherwise - needs to concern itself with runtime validation UNLESS JS gets some agreed upon way to do it.</p>
]]></description><pubDate>Fri, 07 Jul 2023 20:22:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=36637802</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=36637802</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36637802</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Things I wish I’d known before fulltime RVing (2017)"]]></title><description><![CDATA[
<p>New number, whodis</p>
]]></description><pubDate>Tue, 20 Jun 2023 20:46:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=36410270</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=36410270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36410270</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Things I wish I’d known before fulltime RVing (2017)"]]></title><description><![CDATA[
<p>As an RV-driver, I try my best to use the pull outs when I can. There are a few complications, though.<p>First is the visibility of these pull-outs is often very poor. You'll be driving through long winding roads and then all of the sudden the pull-out appears. In an RV, you can't just slam on the breaks and swerve into the pullout, ESPECIALLY if you're going downhill.<p>Second, often times (in the USA at least), these pull-outs have rough terrain going in an and out of them. There will be a little bump or uneven ground that most vehicles wouldn't mind hitting every now and then, but in my rig, that causes the whole thing to sway back and forth (Class-C built on a Mercedes Sprinter). I REALLY need to upgrade the suspension.<p>Third is time. Since I'm slower than everyone else, people tend to pile up behind me pretty quickly. Pulling into the pull-out, coming to a complete stop, waiting for everyone to pass, then getting back up to speed takes a long time. If I did this every time there was a car behind me, it would take forever. So, I tend to wait until there's more than a few cars behind me before pulling off.<p>Fourth is my wife. She says I have "overly-considerate disorder" and I need to make our safety #1 and stop caring about other people so damn much.</p>
]]></description><pubDate>Tue, 20 Jun 2023 20:28:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=36410014</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=36410014</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36410014</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "A text adventure game on TypeScript's type system"]]></title><description><![CDATA[
<p>For those wanting a TS Playground link: <a href="https://tinyurl.com/mw6pbpht" rel="nofollow">https://tinyurl.com/mw6pbpht</a></p>
]]></description><pubDate>Wed, 21 Sep 2022 21:30:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=32931760</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=32931760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32931760</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Electronic Catan LCD Tiles"]]></title><description><![CDATA[
<p>I think it's less about the game mechanics and more about the viscerality. Board game players tend to prefer physical representations they can feel and fiddle with.</p>
]]></description><pubDate>Sun, 29 May 2022 17:37:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=31550998</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=31550998</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31550998</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Ask HN: Show me your half baked project"]]></title><description><![CDATA[
<p>I built an app around the HTML invoice template I had been using for years. <a href="https://www.cannonvoice.com/" rel="nofollow">https://www.cannonvoice.com/</a><p>I used this project as a training ground for a ton of different ideas and technologies. From server rendered react to typescript and design systems to how the hell kubernetes works. I went from dokku, to lando, to trying to figure out Consul and Hashicorp stuff to managed K8s on digital ocean. I decided to try to only write SQL and create my own typesafe patterns with TypeScript. It didn’t work out all that great but it wasn’t all that bad either.<p>This is half baked because I had so many more plans for a product no one asked for. Definitely one of the best learning experiences I had. I started with a monorepo of modules and realized that was a stupid idea for an app. I developed some strong opinions along the way. Oh I reimplemented email auth for the nth time but this time I used postgres’s built-in crypto functions. Man I like this implementation</p>
]]></description><pubDate>Sat, 09 Jan 2021 18:49:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=25703231</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=25703231</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25703231</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "The Web Began Dying in 2014 (2017)"]]></title><description><![CDATA[
<p>I’ve been using self-hosted Matomo for <a href="https://www.cannonvoice.com" rel="nofollow">https://www.cannonvoice.com</a> since I launched a couple of weeks ago. Man this is some neato software! On top of that it was super easy to deploy to the K8s cluster that runs the app. +1 would recommend.<p>To folks saying to “Just use server logs”, it’s simply too hard to connect the dots unless you really know what you’re doing. Digging through my nginx logs to find that the majority of my users are dropping off at the second step of sending an invoice would be nearly impossible. Oh I could connect those logs to my api’s database, now I need a place to aggregate that data together. Maybe I could send all of that data together to elasticsearch and query with kibana. Now I need to learn how To set those things up.<p>Or I could use Matomo for some analytics real quick</p>
]]></description><pubDate>Sun, 24 Nov 2019 18:06:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=21622128</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=21622128</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21622128</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Show HN: Launching my side project – Build and send invoices with ease"]]></title><description><![CDATA[
<p>> So you used an SPA framework like angular/ember or is it pure JS?<p>Just React and Mobx</p>
]]></description><pubDate>Wed, 13 Nov 2019 18:35:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=21527665</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=21527665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21527665</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Show HN: Launching my side project – Build and send invoices with ease"]]></title><description><![CDATA[
<p>> That's interesting, do you get enough volume (or foresee it in future) to justify Kubernetes?<p>Absolutely not. I chose kubernetes because I was interested in learning more about it</p>
]]></description><pubDate>Wed, 13 Nov 2019 18:34:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=21527651</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=21527651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21527651</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Show HN: Launching my side project – Build and send invoices with ease"]]></title><description><![CDATA[
<p>I've been building this product for a while. Even though there aren't any loading indicators, I think it's still good enough to get out there!<p>I've used this project as a test bed for learning new technologies. And what did I learn? That using Docker and Kubernetes effectively is harder than I thought it would be.<p>Some maybe interesting things about the technology used:<p><pre><code>  * It's almost 100% TypeScript
  * What's not TypeScript is plpgsql
  * Postgres
  * Nodejs
  * Docker
  * Deployed to a Kubernetes cluster
  * React on the frontend
  * React also renders HTML on the backend (for the PDF generation and emails too)</code></pre></p>
]]></description><pubDate>Wed, 13 Nov 2019 18:00:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=21527237</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=21527237</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21527237</guid></item><item><title><![CDATA[Show HN: Launching my side project – Build and send invoices with ease]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.cannonvoice.com/">https://www.cannonvoice.com/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=21527234">https://news.ycombinator.com/item?id=21527234</a></p>
<p>Points: 11</p>
<p># Comments: 5</p>
]]></description><pubDate>Wed, 13 Nov 2019 18:00:32 +0000</pubDate><link>https://www.cannonvoice.com/</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=21527234</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21527234</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Migrating 300k LOC from Flow to TypeScript"]]></title><description><![CDATA[
<p>As someone who has also been using TypeScript for over a year and JavaScript for over 10 years, I've had a different take on it.<p>Disclaimer, I freaking love JavaScript and TypeScript.<p>> TypeScript is a hack of epic proportions and every so often the reality rears its ugly head in the form of failed source mapping, version compatibility issues, unexpected types during runtime, poor architectural decisions aimed at pleasing the compiler instead of fulfilling project goals.<p>This just sounds like JavaScript to me. Maybe TypeScript has helped elucidate those problems for you. TypeScript adds some syntax to help formalize solutions to these problems that existed in JavaScript already.<p>> TypeScript is a very poor way to model real-world systems because it incorrectly assumes that real-world entities have a fixed type schema<p>This sounds to me like programmer error. TypeScript provides facilities for unknown structures, or structures that have multiple possible definitions. There is the union type for which we can tell the compiler that a value can be of type `A[ or B[ or C[ or... ]]]`. Perhaps even more powerful is optional types. In interface you'd describe an optional field with a question mark, like `{ foo?: string }`. Alternatively, you could use the union type described above, unioned with `undefined`. These structures help you create types that actually do model the uncertainty of data coming into your program. If you're not using these techniques, then you're missing out! Having the type-checker yell at me because I didn't check for the undefined case is a really really cool thing.<p>> Why not force the developers to account for as many cases and schemas as possible, it's our job!<p>I would argue that TypeScript provides the vocabulary for doing just that and that JavaScript provides no such niceties. Sure, you provide run-time checks on a piece of datas validity, but there's no system to check that run-time behavior before code gets merged to master.<p>If you're not running `"strict": true` and annotating your TS code with optional values when data is coming into your program, you might have a bad time.</p>
]]></description><pubDate>Thu, 20 Jun 2019 14:30:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=20233263</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=20233263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20233263</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "The TypeScript Tax"]]></title><description><![CDATA[
<p>The compiler can most definitely type-check that code. It's up to you whether or not you want to ignore certain types errors. Want to ignore monkey-patching related errors? Filter out all lines from tsc that include TS2339.</p>
]]></description><pubDate>Fri, 25 Jan 2019 22:14:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=19003086</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=19003086</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19003086</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Low.js – Node.js for embedded devices"]]></title><description><![CDATA[
<p>Super cool. I had never heard of Duktape before. Seems like there should be some work making Electron compatible with Duktape to reduce the memory overhead of some of our favorite Electron apps <i>cough</i> VScode <i>cough</i> Slack.<p>(This is probably a naive comment. I have no idea if this would work the way I assume it would).</p>
]]></description><pubDate>Sat, 15 Sep 2018 21:52:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=17996202</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=17996202</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17996202</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Launch HN: Toybox (YC S18) – Communicate changes to sites without writing code"]]></title><description><![CDATA[
<p>Wow this is really neato! Often times, I find myself not only changing CSS, but editing the HTML. Does that work in Toybox?</p>
]]></description><pubDate>Mon, 30 Jul 2018 19:46:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=17647377</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=17647377</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17647377</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "XARs: An efficient system for self-contained executables"]]></title><description><![CDATA[
<p>I really wish I did have more than one middle name, both of which starting with `R` (indeed, my middle name does start with R). Maybe then as a J.R.R. Fawcett I could write fantasy novels.</p>
]]></description><pubDate>Fri, 13 Jul 2018 18:28:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=17525473</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=17525473</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17525473</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "XARs: An efficient system for self-contained executables"]]></title><description><![CDATA[
<p>Names are hard. My name is John. Programmers get really confused when I tell them that. "Did you know there's another programmer named John? You probably should have researched names before you decided to go with that one"</p>
]]></description><pubDate>Fri, 13 Jul 2018 18:14:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=17525324</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=17525324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17525324</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "XARs: An efficient system for self-contained executables"]]></title><description><![CDATA[
<p>Seems like Habitat (which looks awesome by the way) relies on Docker. Which, if you consider performance heuristics in the article (size, cold/hot start time), may be a non-starter for what they're trying to do.</p>
]]></description><pubDate>Fri, 13 Jul 2018 18:11:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=17525302</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=17525302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17525302</guid></item><item><title><![CDATA[New comment by JohnDotAwesome in "Show HN: TaskBotJS – TypeScript and JavaScript background job processing"]]></title><description><![CDATA[
<p>Very nice job! I'll definitely be trying this out in a personal project.<p>How's your experience been with TypeScript and oao? I've got a very large monorepo (using yarn workspaces) of TypeScript modules and it's been sort of a PITA. For instance, a typical yarn install will unnecessarily duplicate some dependencies across packages causing tsc to complain about duplicate identifiers. Running yarn --check-files fixes this, but it's still annoying. Also, following symbols with yarn workspaces is sometimes annoying since linked packages will use "main" and "types" fields in the package.json, thus following a symbol takes you to the generated type definition. I have a generated tsconfig.json that sets paths to their appropriate package paths to fix that. Again annoying.</p>
]]></description><pubDate>Fri, 06 Jul 2018 15:50:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=17472394</link><dc:creator>JohnDotAwesome</dc:creator><comments>https://news.ycombinator.com/item?id=17472394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17472394</guid></item></channel></rss>