HNHacker News
TopNewBestAskShowJobs

mherrmann

4,742 karma · joined November 27, 2013

Software business founder and entrepreneur since 2012.

https://herrmann.io

d22729c1696c40a5a35923050561ac2c

submissionscomments
mherrmann··on File Pilot: A file explorer built for speed with a modern, robust interface
I put it down to desktop utility apps being a very tough market because 1. they are time-consuming to develop and 2. people hate paying for desktop software. You already have several comments in this very thread from people complaining about the price:

* https://news.ycombinator.com/item?id=43102477

* https://news.ycombinator.com/item?id=43099230

* https://news.ycombinator.com/item?id=43097749

Ah and yes, I'm still getting a handful of fman sales per month. But nowhere near enough to justify any time investment.

mherrmann··on A year of uv: pros, cons, and should you migrate
Cool point, thank you. I think his name is Armin.
mherrmann··on File Pilot: A file explorer built for speed with a modern, robust interface
I once devoted 2 years of my life to developing a file manager called fman [1]. In total, it generated probably 35,000$ in profits, so my income from the project is somewhere around 10 $/h. As software developers, our opportunity costs are high. I use my file manager to this day and love it. But I regret spending so much time on it.

Congratulations on your launch. I wish you more success than I've had. Failing that, I wish you that you will see earlier than I did when it is time to move on.

I once recorded a video about my experiences developing a file manager [2]. Maybe you'll also find some interesting bits and pieces on fman's blog [3]. Incidentally, an article there is what sparked my current venture, which is much more profitable: consulting services around automatic updates.

If you'd like to have a chat, feel free to reach out. My contact info is on my website. :-)

Good luck!

[1]: https://fman.io

[2]: https://m.youtube.com/watch?v=I1K3IkOlaVw

[3]: https://fman.io/blog/

mherrmann··on A year of uv: pros, cons, and should you migrate
> There are a lot of different ways to install Python, all with different default settings, and gotchas.

With uv, there is now one more.

https://xkcd.com/927/

mherrmann··on Grok3 Launch [video]
I do believe this is the next natural evolution. People don't like to pay for things and ads are a proven business model. I bet the big labs are looking into this
mherrmann··on Altman: OpenAI not for sale, especially to competitor who is not able to beat us
Could this be an attempt to prevent Altman from turning OpenAI into a for-profit too cheaply? If I understand correctly, then turning a non-profit into a for-profit requires selling the non-profit's assets at a fair price. If Altman says he buys it for 40bn and there is no other offer, then who's to say that this is not a fair price. On the other hand, with a 90bn offer on the table, it will be hard to argue that the assets are only worth 40.
mherrmann··on Asteroid Impact on Earth 2032 with Probability 1% and 8Mt Energy
God I love HN.
mherrmann··on Trump launches cryptocurrency with price rocketing
It's a money grab that unfortunately will come at the expense of already poor investors.
mherrmann··on My little sister's use of ChatGPT for homework is heartbreaking
Let's dig deeper.

Level 0: this is bad.

Level -1: The teaching methods need to change.

Level -2: It's a glimpse into all of our future, not just children.

Level -3: Who controls the AI controls the world.

mherrmann··on Argentina's economy exits recession in milestone for Javier Milei
Official inflation numbers are extremely low. How does that square with what you just said?
mherrmann··on Helium: Lighter Web Automation with Python
Pretty much, yes. And if there are multiple, then it uses the matching element closest to the last one it interacted with. Much like a human.
mherrmann··on Gemini 2.0: our new AI model for the agentic era
Their Mariner tool for controlling the browser sounds scary and exciting. At the moment, it's an extension, which means JavaScript. Some web sites block automation that happens this way, and developers resort to tools such as Selenium. These use the Chrome DevTools API to automate the browser. It's better, but can still be distinguished from normal use with very technical details. I wonder if Google, who still own Chrome, will give extensions better APIs for automation that can not be distinguished from normal use.
mherrmann··on Helium: Lighter Web Automation with Python
It's not disingenuous. The HN example was literally the first one I tried. It's what happens in the real world. The real world doesn't adhere to standards, much of the time.
mherrmann··on Helium: Lighter Web Automation with Python
I don't know. Please check if Selenium supports this and if yes, use Helium's set_driver(...) or options argument to start_chrome(...).
mherrmann··on Helium: Lighter Web Automation with Python
Yes, there is no such <label>. There is only such <td>. And Playwright isn't smart enough to understand that that is still the label for the <input> element. Helium is smart enough.

So if your script really did write that string into a what it thinks is 'username' then that's arguably one more thing to debug when its wizardry goes awry in some unknown way

I tested my script. It writes into the correct field. The logic is not hard: "Find an element to the right of the given label." If there are multiple, then Helium uses the one that's closest to the last element it interacted with. That's just how a human would do it. It works surprisingly well. In many years of using Helium, I barely recall this causing problems once.

Try it before judging. You will be surprised by how well it works.

mherrmann··on Helium: Lighter Web Automation with Python
You can freely mix Helium and Selenium API calls. You don't lose any of the power you are describing when you use Helium.
mherrmann··on Helium: Lighter Web Automation with Python
Thanks! Helium only automates browsers. If the 2FA is happening in the browser, then you can use Helium to automate the flow. If it's outside, then that part cannot be handled by Helium.
mherrmann··on Helium: Lighter Web Automation with Python
> I’m skeptical that hiding the low level nasty details actually makes them go away

It makes 90+% of them go away. That's a big win. Try it.

mherrmann··on Helium: Lighter Web Automation with Python
Its use can be lighter. That is, the wrapper can be easier to use.

Helium helps with maintaining automation tests as well. click("Compose") is infinitely more maintainable than document.getElementById("eIu7Db").click(). (I just took this example from Gmail's web interface.)

mherrmann··on Helium: Lighter Web Automation with Python
I have actually been wondering whether Helium's more high-level API lends itself well for use by AI.
mherrmann··on Helium: Lighter Web Automation with Python
Yes: start_chrome(headless=True)
mherrmann··on Helium: Lighter Web Automation with Python
Importing * is universally discouraged by most Python linters and best practice docs.

Yup, I would never do it in a .py file. But I do it all of the time in the interpreter, which is what the video shows.

This looks largely like common workarounds that most people will write using Python-based browser automation. Most of the time, we accept that those capabilities aren't there by default because they are not explicit enough and can result in bugs and undefined behavior even when the elements that we expect to be on the page are actually there.

It sounds like you haven't tried Helium yet. I think you should, and see for yourself whether the trade-off you talk about actually exists.

Given the adage "explicit is better than implicit", I worry that a layer like this might create more trouble than it's worth for the sake of readability.

You could make the same argument about using C / assembly instead of Python. I suggest you try Helium before making statements about the "trouble" it may create. I believe you will find that there is no trouble.

mherrmann··on Helium: Lighter Web Automation with Python
Doesn't work for logging into HN:

    from playwright.sync_api import sync_playwright
    playwright = sync_playwright().start()
    browser = playwright.chromium.launch()
    page = browser.new_page()
    page.goto('https://news.ycombinator.com/login?goto=news')
    page.get_by_label('username').fill('mherrmann')
    # playwright._impl._errors.TimeoutError: Locator.fill: Timeout 30000ms exceeded.
I suspect Playwright expects there to be a <label> for an <input> element.

It does work with Helium:

    from helium import *
    start_chrome('https://news.ycombinator.com/login?goto=news')
    write('mherrmann', into='username')
The two scripts are equivalent, except Helium's works and is half as long.
mherrmann··on Helium: Lighter Web Automation with Python
It's more high-level. Instead of saying "click element with ID xv9873", you can say "click Download".
mherrmann··on Comparing AWS S3 with Cloudflare R2: Price, Performance and User Experience
Reading around online, it seems egress is free until Cloudflare asks for big bucks or threatens to terminate your service. It's probably fine for hobbyists or small web sites. But as a business, I would never trust something that is "free". There has to be a catch somewhere.

A business contact of mine asked Cloudflare for a quote for setting up a CDN for 7B requests per month. They dragged him through five sales calls to eventually deliver an offer with request costs 30% above CloudFront's public pricing. He said the costs per GB were ok though.

The cheapest reliable CDN I've found is bunny.net. Unlike OP, who is selling a book about Cloudflare, I have no conflict of interest by recommending Bunny, other than being a customer. I serve around 100 TB per month through them, at $0.005/GB. You can put it in front of a bucket to have cheap (globally distributed) egress with all the benefits of your favorite object storage provider. In my case, the buckets lie on Linode/Akamai. Bunny uses CDN77's infrastructure, which I have also heard good things about.

mherrmann··on Show HN: Minimal, customizable new tab for Chrome/Firefox
The landing page looks awesome. Congratulations on the nice design.

I suspect you are being hammered with requests now. Because in both Brave and Chrome, there is about a .5 second delay until the new tab page appears. Until then, there is just a black screen.

mherrmann··on How I write code using Cursor
In my experience, Cursor writes average code. This makes sense, if you think about it. The AI was trained on all the code that is publicly available. This code is average by definition.

I'm below average in a lot of programming languages and tools. Cursor is extremely useful there because I don't have to spend tens of minutes looking up APIs or language syntax.

On the other hand, in areas I know more about, I feel that I can still write better code than Cursor. This applies to general programming as well. So even if Cursor knows exactly how to write the syntax and which function to invoke, I often find the higher-level code structure it creates sub-optimal.

Overall, Cursor is an extremely useful tool. It will be interesting to see whether it will be able to crawl out of the primordial soup of averages.

mherrmann··on Write code that is easy to delete, not easy to extend (2016)
Glaring mistake in the first paragraph:

> The problem with code re-use is that it gets in the way of changing your mind later on.

This is simply incorrect, especially in the generality in which it is stated. If you change your mind and the code was copy-pasted to ten places, then you have to change ten places. On the other hand, if the code is in a function, then you only need to change it once. And if you do find that one of the ten invocations should not be changed, then you can still copy-paste - or make the function more general.

Like crossing a street without looking, copy-pasting is almost always a bad idea.

mherrmann··on Running an open source app: Usage, costs and community donations
Re your question on saving costs: If you run it on a single Linux VPS, then I suspect you can get the costs down to 5-10$ per month.

One thing I find interesting is the growth chart: It's linear. But given that the app clearly has some traction, and is viral in nature, how come it isn't exponential?

mherrmann··on The richest people borrow against their stock (2021)
I think it does matter. Let's assume Musk paid $12B. How much have you paid? Isn't it then actually reasonable to say that he contributed more than you to the country, even if his tax percentage is lower than yours?
← PreviousPage 2 of 30Next →