Top all-time · #4315
Philipp Hauer
Personal blog · phauer.comprogrammingcareer
Philipp Hauer's personal blog at phauer.com covers programming and career. Since 2019, 17 different Hacker News readers have linked it 27 times, most often “Don't Put Fat Jars in Docker Images”. The last post was in 2023, but the archive is still widely read.
Too few sampled comments (16) to say how often HN recommends it.?
Why HN links it
HN readers link Philipp Hauer's posts on container builds and Jib-style Docker image layering, plus his code review guidelines and essays against checked exceptions. Commenters praise the container build posts most.
Summarised by Claude from a sample of 16 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Engineering Management, Java Ecosystem, Kotlin, Sociology of Software Development
Most-linked posts?
- Don't Put Fat Jars in Docker Images3 people · 9 mentions · first linked 2019-11-05
- Code Review Guidelines for Humans3 people · 3 mentions · first linked 2020-04-10
- /2015/checked-exceptions-are-evil/3 people · 3 mentions · first linked 2020-02-03
- Best Practices for Testing in Java (2019)2 people · 3 mentions · first linked 2019-09-11
- I Moved Back from Gradle to Maven (2022)2 people · 2 mentions · first linked 2019-04-04
What Hacker News says?
The same concept should be applied to container based build pipelines too. Instead of pulling dependencies from a CDN or a pull through cache, build them into a container and use that until you're ready to upgrade dependencies. It's harder, but creates a clear boundary for updating dependencies. It also makes builds faster and makes old builds more reproducible since building an old version of your code becomes as s…
Comment linking /2019/no-fat-jar-in-docker-image/
on “Polyfill supply chain attack hits 100K+ sites”Submitted Best Practices for Testing in Java (2019) as a story · 103 points
HN discussion> This is by design, according to docker. I have a vague memory of reading something to that effect on their bug tracker, but I always thought the reasoning was ok. IIRC it was something to the effect that the goal was to keep things simple for first time users. I think that's disservice to users, because you end up with many refusing to learn how things actually work, but I get the sentiment. > I’ve also never seen…
Comment linking /2019/no-fat-jar-in-docker-image/
on “Docker limits unauthenticated pulls to 10/HR/IP from Docker Hub, from March 1”Submitted I Moved Back from Gradle to Maven (2022) as a story · 2 points
HN discussionI keep a running list of articles I found useful over the years. There are many great articles about Code Reviews out there. Consider this a more general answer to your question: Feedback Ladders: How We Encode Code Reviews at Net-lify https://www.netlify.com/blog/2020/03/05/feedback-ladders-how... How to Make Good Code Reviews Better https://stackoverflow.blog/2019/09/30/how-to-make-good-code-... Best Practices for…
Comment linking /2018/code-review-guidelines/
on “Ask HN: What tone to use in code review suggestions?”Submitted Modern Best Practices for Testing in Java (2022) as a story · 2 points
HN discussionMy favorite guide on this is https://phauer.com/2018/code-review-guidelines/ There are also some great things in the book, Debugging Teams, like the Humility-Respect-Trust (HRT) concept.
Comment linking /2018/code-review-guidelines/
on “Ask HN: What tone to use in code review suggestions?”Submitted Leveling Up in the Management Skill Tree as a story · 2 points
HN discussionContinuation Token is a better term than cursor at it avoids confusion with DB cursors. https://phauer.com/2018/web-api-pagination-timestamp-id-cont...
Comment linking /2018/web-api-pagination-timestamp-id-continuation-token/
on “Paginating Requests in APIs (2020)”Submitted Code Review Guidelines for Humans as a story · 2 points
HN discussionYeah, if the commit record acts like an audit log I think there’s a lot of value. I wonder how hard it is to get the exact environment used to build an artifact. I’m a big fan of this style [1] of building base containers and think that keeping the container where you’ve stacked 4 layers (up to resources) makes sense. Call it a build container and keep it forever. 1. https://phauer.com/2019/no-fat-jar-in-docker-imag…
Comment linking /2019/no-fat-jar-in-docker-image/
on “PyPI now supports digital attestations”Submitted Best Practices for Testing in Java (2019) as a story · 2 points
HN discussionChecked exceptions deserve all the hate they get. It's not a good solution. Here's a random rant online that ends up pitching the more common solution of unchecked exceptions + exception rewrapping: https://phauer.com/2015/checked-exceptions-are-evil/ . And of course, in Rust, the rewrapping is basically forced upon you making for a really nice error-handling ecosystem.
Comment linking /2015/checked-exceptions-are-evil/
on “You’re better off using Exceptions”Submitted Kotlin Best Practices as a story · 2 points
HN discussionThis is what I think is the most practical approach. Pinning down ALL your dependencies to the exact version is much harder than it sounds. What you’re describing sound like the way Jib [1] does it. The pictures in this [2] blog post help visualize it. The reason I like the approach you describe is because it keeps things simpler at the start of a project and consistent across most projects. I also think it makes se…
Comment linking /2019/no-fat-jar-in-docker-image/
on “VSCode, Dev Containers and Docker”Submitted Leveling Up in Job Interviews for Software Engineers (2022) as a story · 1 points
HN discussionIt’s worth looking at an overview of how Jib works because the general strategy is very good IMO. https://phauer.com/2019/no-fat-jar-in-docker-image/
Comment linking /2019/no-fat-jar-in-docker-image/
on “Reducing Docker Image Size”Submitted Lessons Learned from the Book “Effective Remote Work” (2022) as a story · 1 points
HN discussionHere's a related blog post that does a nice job of showing how dependencies and resources should be put in different layers. https://phauer.com/2019/no-fat-jar-in-docker-image/
Comment linking /2019/no-fat-jar-in-docker-image/
on “Building Containers Without Docker”Submitted Don't Put Fat Jars in Docker Images as a story · 1 points
HN discussionGradle considered harmful. https://phauer.com/2018/moving-back-from-gradle-to-maven/#tl...
Comment linking /2018/moving-back-from-gradle-to-maven/
on “Gradle 7.0”Submitted I Moved Back from Gradle to Maven as a story · 1 points
HN discussionAnd this is the best explanation of Jib [1], but it’s hard to find via Google. It’s how all builds for every ecosystem should work IMO. 1. https://phauer.com/2019/no-fat-jar-in-docker-image/
Comment linking /2019/no-fat-jar-in-docker-image/
on “Three Pillars of Reproducible Builds”I looked at this about a week ago and think it has potential. One thing I dislike, and it's an industry wide problem, is the eagerness to continuously (re)build containers on demand [1]. Everyone does it, but I think that's a mistake. What I want is something where I can build and publish a dev container to my local Docker registry and then use that container to develop until I decide I need to build an updated vers…
Comment linking /2019/no-fat-jar-in-docker-image/
on “Codespaces but open-source, client-only, and unopinionated”I didn't look at it thoroughly, but it looks really cool and I'll probably give it a proper try at some point. Judging by your comment only... > watches your repository for new commits and continuously builds the environment That feels wrong to me. For example, what happens if I want to check out a 1 year old commit and edit it? Will the dev environment that was used at the time be available or will it be rebuilt? I…
Comment linking /2019/no-fat-jar-in-docker-image/
on “Show HN: Hocus – self-hosted alternative to GitHub Codespaces using Firecracker”i do...if i ever get an IOException all i have to do is end the app, no need to deal with it in any way different than an unchecked exception https://phauer.com/2015/checked-exceptions-are-evil/
Comment linking /2015/checked-exceptions-are-evil/
on “Unchecked Java: Say Goodbye to Checked Exceptions Forever”Here's some hyperbole to help understand the issue: https://phauer.com/2015/checked-exceptions-are-evil/
Comment linking /2015/checked-exceptions-are-evil/
on “Does any other language than Java has the throws keyword to declare exceptions?”