<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: jake_morrison</title><link>https://news.ycombinator.com/user?id=jake_morrison</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 09 Apr 2026 12:17:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jake_morrison" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jake_morrison in "Photo calorie app Cal AI was built by two teenagers"]]></title><description><![CDATA[
<p>I thought about doing this years ago, but without AI, the only way was to have people do the analysis. I thought this was bad karma, as I would end up paying people in Bangladesh to look at the stuff that Americans eat.</p>
]]></description><pubDate>Fri, 04 Apr 2025 15:08:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=43583544</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=43583544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43583544</guid></item><item><title><![CDATA[New comment by jake_morrison in "It is not a compiler error (2017)"]]></title><description><![CDATA[
<p>Embedded systems often have crappy compilers. And you sometimes have to pay crazy money to be abused, as well.<p>Years ago, we were building an embedded vehicle tracker for commercial vehicles. The hardware used an ARM7 CPU, GPS, and GPRS modem, running uClinux.<p>We ran into a tricky bug in the initial application startup process. The program that read from the GPS and sent location updates to the network was failing. When it did, the console stopped working, so we could not see what was happening. Writing to a log file gave the same results.<p>For regular programmers, if your machine won't boot up, you are having a bad day. For embedded developers, that's just a typical Tuesday, and your only debugging option may be staring at the code and thinking hard.<p>This board had no Ethernet and only two serial ports, one for the console and one hard-wired for the GPS. The ROM was almost full (it had a whopping 2 MB of flash, 1 MB for the Linux kernel, 750 KB for apps, and 250 KB for storage). The lack of MMU meant no shared libraries, so every binary was statically linked and huge. We couldn't install much else to help us.<p>A colleague came up with the idea of running gdb (the text mode debugger) over the cellular network. It took multiple tries due to packet loss and high latency, but suddenly, we got a stack backtrace. It turned out `printf()` was failing when it tried to print the latitude and longitude from the GPS, a floating point number.<p>A few hours of debugging and scouring five-year-old mailing list posts turned up a patch to GCC (never applied), which fixed a bug on the ARM7 that affected uclibc.<p>This made me think of how the folks who make the space probes debug their problems. If you can't be an astronaut, at least you can be a programmer, right? :-)</p>
]]></description><pubDate>Mon, 24 Feb 2025 03:28:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43155554</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=43155554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43155554</guid></item><item><title><![CDATA[New comment by jake_morrison in "Creating an up-to-date Distroless Python Image (2022)"]]></title><description><![CDATA[
<p>I am optimistic about Ubuntu Chilselled, which automates this process: <a href="https://canonical.com/blog/chiselled-ubuntu-ga" rel="nofollow">https://canonical.com/blog/chiselled-ubuntu-ga</a><p>Here is a full example:
<a href="https://github.com/cogini/phoenix_container_example/blob/main/deploy/chiseled.Dockerfile">https://github.com/cogini/phoenix_container_example/blob/mai...</a></p>
]]></description><pubDate>Tue, 03 Sep 2024 04:20:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=41431228</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=41431228</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41431228</guid></item><item><title><![CDATA[New comment by jake_morrison in "Apple to wind down electric car effort after decadelong odyssey"]]></title><description><![CDATA[
<p>Apple making cars was an interesting play when they had a bunch of cash overseas and good relationships with Chinese manufacturers. Tax law changes made bringing money back to the US less punishing, and manufacturing in China is becoming problematic.</p>
]]></description><pubDate>Wed, 28 Feb 2024 05:03:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=39534200</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39534200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39534200</guid></item><item><title><![CDATA[New comment by jake_morrison in "Testcontainers"]]></title><description><![CDATA[
<p>You can do something similar with docker compose, driving the system from the outside. Create dockerized versions of dependencies like the database, build and run tests, and then run tests against the production app container.
It's particularly useful for testing a set of microservices.<p>See <a href="https://github.com/cogini/phoenix_container_example">https://github.com/cogini/phoenix_container_example</a> for a full example.
This blog post describes it in detail: <a href="https://www.cogini.com/blog/breaking-up-the-monolith-building-testing-and-deploying-microservices/" rel="nofollow">https://www.cogini.com/blog/breaking-up-the-monolith-buildin...</a></p>
]]></description><pubDate>Wed, 28 Feb 2024 04:59:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=39534178</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39534178</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39534178</guid></item><item><title><![CDATA[New comment by jake_morrison in "MMU-less systems and FDPIC"]]></title><description><![CDATA[
<p>Yeah, I actually used OpenEmbedded, the predecessor to Yocto. The project was in 2011.</p>
]]></description><pubDate>Fri, 23 Feb 2024 01:36:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=39475813</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39475813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39475813</guid></item><item><title><![CDATA[New comment by jake_morrison in "MMU-less systems and FDPIC"]]></title><description><![CDATA[
<p>A few years ago I did an embedded Linux project on an ARM7 CPU without an MMU, a vehicle tracker for trucks with GPS, cellular modem, ODB2 interface, and other I/O.<p>Lack of MMU caused some unexpected issues:<p>* Because there is no MMU, there are no shared libraries. All the binaries have to be statically linked. We had a total of 2MB of ROM, of which about 1M was the Linux kernel. So we ran out of space for the programs we needed for the application about 3/4 of the way through the project. The solution was to use Lua, which was a 200k binary, and it could run scripts to do some things.<p>* Lack of MMU means no memory protection between programs. One program can step on another program's memory. Just like the good old days of DOS. Ouch!<p>* We started with the ucLinux distribution, which is pretty lame. A lot of programs in the tree didn't build. We ended up rebuilding with Yocto, and making patches to things where necessary.<p>* We found other entertaining bugs: <a href="https://www.cogini.com/blog/debugging-your-space-probe/" rel="nofollow">https://www.cogini.com/blog/debugging-your-space-probe/</a></p>
]]></description><pubDate>Thu, 22 Feb 2024 23:54:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=39475041</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39475041</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39475041</guid></item><item><title><![CDATA[New comment by jake_morrison in "Ask HN: Is the job market is bad as everyone claims it is?"]]></title><description><![CDATA[
<p>It's a bad market, probably the worst since 2000. 
Some of this is overhiring and zero interest rate behavior coming to an end.
Companies are shifting from prioritizing growth to profitability.
There is also a lot of asshole behavior. They are laying people off to please Wall Street, not because they need to for financial reasons. And they are doing layoffs in extremely callous ways, e.g., right before Christmas.<p>My daughter's data engineering team in finance was reduced from five to two, and they are not giving raises that match inflation. She is almost singlehandedly responsible for servicing million-dollar accounts. It's not like there isn't money.<p>There is also a lot of hiring of remote people outside the US. The companies figured out how to do remote work during Covid, and they are using it to reduce costs.<p>Things will probably improve in the next year, but it will be rough for a while.</p>
]]></description><pubDate>Wed, 31 Jan 2024 23:32:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=39210997</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39210997</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39210997</guid></item><item><title><![CDATA[New comment by jake_morrison in "We switched to Java 21 virtual threads and got a deadlock in TPC-C for Postgres"]]></title><description><![CDATA[
<p>Sure, you can make deadlocks in any language, but it's uncommon in Erlang.
Shared state is the exception, and message passing means that things that manage state, such as gen_servers, only process one message at a time from their inbox.<p>Contrast this with languages like Java where every object is a potential concurrency problem. Or the 10+ years of trying to make Python async (see Twisted).</p>
]]></description><pubDate>Tue, 16 Jan 2024 03:08:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=39008958</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39008958</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39008958</guid></item><item><title><![CDATA[New comment by jake_morrison in "Ask HN: Do companies hire principal and staff level engineers from job postings?"]]></title><description><![CDATA[
<p>In some companies, staff positions can only be effectively done by someone who has been there for 10 years. They know the specific tech stack that the company uses, know the application, know where the bodies are buried, and everyone in the company trusts them. It's basically impossible for someone to parachute in and do the job.</p>
]]></description><pubDate>Tue, 16 Jan 2024 02:11:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=39008578</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39008578</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39008578</guid></item><item><title><![CDATA[New comment by jake_morrison in "We switched to Java 21 virtual threads and got a deadlock in TPC-C for Postgres"]]></title><description><![CDATA[
<p>Erlang is based on virtual threads (confusingly called processes).
The Erlang virtual machine schedules them on OS threads.
Erlang processes communicate using message passing, preventing deadlocks.
You can use millions of Erlang processes without problems, e.g., to handle millions of Elixir LiveView sessions.</p>
]]></description><pubDate>Tue, 16 Jan 2024 02:01:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=39008502</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=39008502</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39008502</guid></item><item><title><![CDATA[New comment by jake_morrison in "Dive: A tool for exploring a Docker image, layer contents and more"]]></title><description><![CDATA[
<p>Like ogres</p>
]]></description><pubDate>Mon, 08 Jan 2024 17:57:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=38915615</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=38915615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38915615</guid></item><item><title><![CDATA[New comment by jake_morrison in "I never got a response after Google assured me that they'd do a full retro"]]></title><description><![CDATA[
<p>I had a client who spent $1M+ per year on Google Ads, and Google would fly them to California each year to meet with their account manager.<p>I don't know what the equivalent GCP spend would be to get similar treatment. Presumably higher. So that's a data point, at least.</p>
]]></description><pubDate>Fri, 01 Dec 2023 20:21:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=38491788</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=38491788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38491788</guid></item><item><title><![CDATA[New comment by jake_morrison in "Is Delaware the cheapest place to incorporate?"]]></title><description><![CDATA[
<p>I am an American who has worked with startups in Taiwan for 30 years. I am happy to talk.</p>
]]></description><pubDate>Fri, 17 Nov 2023 01:54:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=38298279</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=38298279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38298279</guid></item><item><title><![CDATA[New comment by jake_morrison in "Is Delaware the cheapest place to incorporate?"]]></title><description><![CDATA[
<p>If you need a company in Taiwan, it's generally best to have your main company outside and have a branch in Taiwan. It has significant tax benefits, particularly for foreigners.<p>A branch can repatriate profits to the parent company, after paying Taiwan tax. If you have a standalone Taiwan company, then you have to pay dividends, then pay personal tax on it. If you are not resident in Taiwan, then you would pay 20% tax on those dividends. There is also a 5% tax on retained earnings.<p>Another benefit is that if your company pays someone overseas for services, then Taiwan considers that "Taiwan source income", and they owe 20% tax on it. Other countries like Hong Kong would not tax that money.<p>As foreigner, if you leave, then you would find it difficult to run your company remotely. So you might as well set up somewhere else.</p>
]]></description><pubDate>Fri, 17 Nov 2023 01:49:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=38298229</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=38298229</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38298229</guid></item><item><title><![CDATA[New comment by jake_morrison in "Connecting two dial-up modems using a VoIP ATA"]]></title><description><![CDATA[
<p>I built a mobile app to read data from blood glucose meters.<p>It used a magic cable that talked to the meters using RS-232 and converted the data into audio, plugging into the audio jack on the phone.<p>So, basically, it was a modem. The cable just had a little bump on it that did everything you used to do with a huge device.</p>
]]></description><pubDate>Mon, 11 Sep 2023 15:49:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=37469055</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=37469055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37469055</guid></item><item><title><![CDATA[New comment by jake_morrison in "ARM wrestles assembly language guru's domains away, citing trademark issues"]]></title><description><![CDATA[
<p>The fundamental problem is that domain name trademark enforcement is handled by the legal department when it should be handled by marketing, business development, and/or DevRel.<p>While companies can enforce their trademarks, it's generally better to allow people who are using domains in a reasonable way to continue. Taking the domain away and then doing nothing with it doesn't benefit anyone.<p>Even in parasitical scenarios, allowing squatters to get affiliate revenue by redirecting traffic to the company is better than fooling around with the legal process.</p>
]]></description><pubDate>Fri, 01 Sep 2023 18:33:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=37354565</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=37354565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37354565</guid></item><item><title><![CDATA[New comment by jake_morrison in "Scrum is a cancer"]]></title><description><![CDATA[
<p>I think Scrum is a transitional phase. It is a solution to the problem of having a dev team shared between multiple business functions.<p>The dev team keeps getting yanked around and interrupted. So every two weeks you get all the business people in a room and you have them make a list of things that the dev team will work on this cycle. Then the dev team can execute in peace. The Scrum Master's job is to protect the dev team. The Product Owner's job is to get the business people to converge on the prioritized list of work.<p>In a healthy organization, Scrum is much less useful. Scrum combines three different cycles: defining work, executing work, and reviewing work. In a flow-based process like Kanban, you can split them up.<p>The product manager builds a prioritized backlog of work, and the dev team estimates tasks to help do business ROI calculations. It's a collaboration between product and development.<p>The dev team implements tasks from the backlog one by one. You can batch up work to make a release, deliver incrementally, or use tools like feature flags. You evaluate whether features are effective working based on metrics.</p>
]]></description><pubDate>Wed, 30 Aug 2023 18:26:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=37326657</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=37326657</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37326657</guid></item><item><title><![CDATA[New comment by jake_morrison in "Musl 1.2.4 adds TCP DNS fallback"]]></title><description><![CDATA[
<p>I use distroless images based on Debian or Ubuntu, e.g., <a href="https://github.com/cogini/phoenix_container_example">https://github.com/cogini/phoenix_container_example</a><p>The result is images the same size as Alpine, or smaller, without the incompatibilities. I think Alpine is a dead end.</p>
]]></description><pubDate>Sun, 30 Jul 2023 19:10:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=36934812</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=36934812</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36934812</guid></item><item><title><![CDATA[New comment by jake_morrison in "Walmart didn’t kill the small town, it is the small town"]]></title><description><![CDATA[
<p>When I was a kid I ran a lawn service, and I got all my engines out of the trash.<p>When the mowers are cheap, it's rational. They get the lawnmower out of the shed the first time in spring and it won't start, it would cost a significant amount to get it fixed, and they have to waste your time and wrestle a dirty lawnmower in and out of your car. So they buy a cheap new one and throw the old one away.<p>Paying someone is still more expensive than doing it yourself.</p>
]]></description><pubDate>Fri, 28 Jul 2023 15:28:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=36908315</link><dc:creator>jake_morrison</dc:creator><comments>https://news.ycombinator.com/item?id=36908315</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36908315</guid></item></channel></rss>