HN user

brokegrammer

353 karma

I'm a senior full-stack developer who specializes in taking complex business logic, often stuck in manual processes, and building robust, production-ready applications. I handle the entire lifecycle, from a Python backend on AWS to a modern React front-end, so your core team can stay focused on their own roadmap.

Visit my website for contact details: https://joshkaramuth.com

Posts1
Comments155
View on HN

Two great things about Tailwind:

- AI already have data about its classes in their training data - No conflicting styles

This means that AI doesn't need to reference any existing stylesheets when generating new styles, which is great for context management.

With custom CSS, you'll have AI read existing stylesheets because otherwise its going to write conflicting styles or rewrite stuff you already have. This can be a problem if you have large stylesheets that take too much space in AI memory.

I've been working on version 2 of ClaroHQ (https://clarohq.com), which is a time blocking app for freelancers. Instead of playing with Start/Stop timers, you log your work with 1-click time chips, generate a perfect PDF, and draft an email in 30 seconds.

I built it because I was sick of paying for complex invoicing tools that charged monthly fees for features I never used.

Let me know if you want to try it out. I'll be happy to set you up with an account.

You don't need to manage spam if you're willing to moderate comments yourself. But a plugin to integrate with Akismet can be installed in a single click. To get the same thing with an SSG, you'll have to either build your own comment system and integrate with an API, or use a third party commenting service.

Social accounts aren't necessary either. Users can simply not login, or use their email address. If you still want social accounts, it's a one click plugin install. With SSGs, you have to bake it yourself or buy a comment system that includes social auth.

SEO is a big deal, and Wordpress doesn't allow it by default. However, you can install a minimalistic SEO plugin like "The SEO Framework". If you want more advanced SEO, you can install a plugin like Yoast. With an SSG, you have to build your own theme that will allow SEO using frontmatter from your HTML pages, or use an existing theme that has that functionality.

Adding plugins introduce additional attack surfaces, but if you're building a full-fledged SSG to rival wordpress, you're connecting to various APIs, and writing your own code that could easily introduce security bugs. Wordpress plugins can auto update, but SSGs require you to fix bugs on your own time.

Wordpress version changes can break your site, but you can easily backup and restore your content for easier migrations these days. SSGs can also break your site if you want to keep the generator up to date. For example, if you use Jekyll 2, you'll have to spend some time refactoring your project when upgrading to version 4. Now, if you have integrations that you built yourself, this could take considerable effort.

I don't personally see how an SSG can compare to Wordpress. Sure, if you enjoy writing Markdown files in Vim then go ahead, but for people who mainly want to write content and provide a service that visitors can interact with, Wordpress wins all the time.

Wordpress is better because it's easy to setup these days, can be fast if you enable caching, and has a comment system, which is a big deal if you want people to interact with your content. Other things like contact forms can easily be added. The CMS is also amazing.

With SSGs, you have a few options for comments, like Disqus, but the ad-free version costs money, it's slower because it needs to load JS, and your comments are owned by a third party company. Contacts forms can be built by integrating an external API. And anything else that requires storing data will require an integration with a third party service of some sort.

SSGs are a great concept but they're mostly for nerds who get boners by seeing over-engineered systems. They're also great for companies like Cloudflare because they can sell you services that come for free with Wordpress (CMS, image uploads, databases, workers, etc). For serious blogging, I'd opt for Wordpress.

Because human singers will usually sing about what they like. They will use their own life experience and imagination to write and sing songs. Other people may or may not like them.

AI will only sing songs that other people like, so AI singers will naturally attract more listeners.

Another great resource is this video: https://www.youtube.com/watch?v=jIS2eB-rGv0

It talks about how:

- It's much more expensive to shoot down a Shahed drone than to build one. - Iran could decide to attack water filtration plants in the Gulf countries. - It's almost impossible to win a ground invasion without spending a ton of money because of the mountains.

Basically, even if the US wins this war, the entire world economy will suffer tremendously.

Demian by Hermann Hesse. I wanted to scream "Stop overthinking!" to the protagonist. Something I can relate to.

Siddharta by Hermann Hesse. Helped me understand that a perfect life is a collection of ups and downs and that one must accept it all.

Amerika by Franz Kafka. Could relate to the protagonist because people take advantage of his naivety.

Factfulness by Hans Rosling. Made me see the world in a less pessimistic way.

The role of CEOs is to receive praise for every achievement, but also blame when things go wrong. It's a high risk, high reward position that most people can't handle.

Since it's not possible to blame AI, no ChatGPT can't be used to replace the CEO of Microsoft.

TO be fair there are lots of other things that require a response from an API before responding to the request and therefore async reduces resource usage over threads or multi-process.

Agreed. However, these are rare and many people have been abusing asynchronous views instead of delegating the task to a background worker when multiple external requests are required. Showing a spinner while polling a synchronous view is dead simple to implement and more resilient against unexpected outages.

A lot of people moved from Flask to FastAPI because the latter is built for async workloads by default. So, people expected massive performance improvements because the word async was associated with performance.

In reality, people ended up having to deal with weird bugs because asynchronous Python isn't the most ergonomic, while having negligible to zero performance improvements. Proof that most people are terrible at choosing tech stacks.

Then, AI came into the scene and people were building APIs that were essentilly front-ends to third party LLM APIs. For example, people could build an API that will contact OpenAI before returning a response. That's where FastAPI truly shined because of native asynchronous views which provides better performance over Flask's async implementation. Then people realized that can can simply access OpenAI's API instead of calling another front-end API first. But now they're already invested in FastAPI, so changing to another framework isn't going to happen.

Either way, I like FastAPI and I think Sebatian Ramirez is a great dude who knows what he wants. I have respect for a person who know how to say no. But it's unfortunate that people believe that Flask is irrelevant just because FastAPI exists.

True, it does seem like Rails introduced configuration-free token based CSRF protection, which "solved" CSRF for traditional server rendered apps.

I believe the new technique is easier to use for SPA architectures because you no longer need to extract the token from a cookie before adding it to request headers.

Have we finally reached the point where CSRF attacks can be prevented without relying on a token-based check (like double-submit cookies)?

Rails uses a token-based check, and this article demonstrates token-less approach.

Rails didn't solve CSRF btw, the technique was invented long before Rails came to life.

I agree with this post, but how do we convince decision makers to use simpler solutions? Here's what happened to me not long ago:

A person contacted me to build a tool that will have a single user. After some questioning, the person said they would likely have up to 3 users for this tool at some point, and no more.

So I suggested we use Python and a SQlite database. When I reached out after not having heard from them for 2 weeks, they said that they went with a more experienced programmer because the latter suggested MongoDB, a separate ReactJS front-end, and micro services with Golang. All deployed to AWS, of course.

In the end, I lost the gig because I wanted to save the client time and money.

The guy speaking at 3:35 reminds me of a recent blog post by a certain tech celebrity, where he was recalling his recent visit to London and was unhappy to find less white people that he remembered from his previous visit.

History repeats itself.

I used to love the Django ORM when I didn't know any SQL. Then I had to learn SQL so that I could model data properly, and optimize access patterns.

These days I hate working with the ORM because it uses weird abstractions that make your life harder as you try to do more complicated stuff with your data. I had a small bug lately where a queryset would aggregate twice because I filtered an aggregated queryset, and this caused it to aggregate again on top of the previous result. I wouldn't have this bug if I was writing my own SQL, or if I used a query builder instead of an ORM. This is just a small example, I have many more annoying things that will cause me to use SQL directly instead of an ORM for my next project.

I don't understand the examples in this post. For example, how does:

<span hx-target="#rebuild-bundle-status-button" hx-select="#rebuild-bundle-status-button" hx-swap="outerHTML" hx-trigger="click" hx-get="/rebuild/status-button"></span>

Turn into:

<span data-on-click="@get('/rebuild/status-button')"></span>

The other examples are even more confusing. In the end, I don't understand why the author switched from HTMX to Datastar.

I mostly agree with this. TS works great in large enterprises where developers don't trust each other. But if you're working on your own, or in a small team where you can easily agree with each other, TS just becomes unnecessary overhead.

At least, that's my experience and I don't like it when people say that everyone must absolutely use TS when they don't know anything about your situation.

I used to have massive FOMO when it comes to learning a variety topics. I would learn different programming languages, human languages, maths, philosophy, and other intellectual topics. Then I would forget about them because I don't actually use them in daily life. Not to mention how it ends up ruining my life because of the constant performance anxiety.

These days, I only learn topics that I know I will need in my work or life.

Any diet book can help you lose weight, but keeping the weight off is the real challenge. Most people gain back more weight than they lose after ending a diet.

As someone who went from 100kg to 85kg, I know how challenging it is to maintain a lower body weight because there isn't a day that my body doesn't fight me to try and get back to being overweight again.

The important thing is to build good eating habits, setup your environment properly, and ensure adequate physical activity. Some people might need drugs like Ozempic to make any progress, but it's a lifelong commitment.

followed 30,000 Swedish women for 20 years. It likewise found that, even after correcting for things like age, wealth and health, sun-seeking behaviour was associated with a lower chance of death from all causes.

Is it because they got exposed to sun or is it because of the "sun-seeking behavior", which probably means more physical activity?

Either way, it's too soon to be throwing away our sunscreen.