Hacker Newsnew | past | comments | ask | show | jobs | submit | barrkel's commentslogin

Labyrinth is synonymous with maze in English.

The labyrinth symbol, as a decoration or motif in ancient Greek artifacts, isn't generally a maze, but the labyrinth of myth is. Theseus had to use thread, given to him by Ariadne, to find his way back out.


Your point seems to be that if you use a slow standard library and complain, it's not a problem with the slow standard library because you can just reimplement the slow parts independently.

The problem with your argument is that it's a universal argument against performance. And if an argument is universal, then it doesn't have any information value.


Your point seems to be that if you use a slow standard library and complain, it's not a problem with the slow standard library because you can just reimplement the slow parts independently.

No, this is something that nuanced. The title is wrong because musl isn't going to prevent you from writing fast software.

Whatever benefit there is to a different libc, is absolutely miniscule compared to do actual optimizations like avoiding allocations.

I'll give you real numbers: if you put allocations of short vectors of a dozen floats in a hot loop, when you lift the allocations out your program is going to instantly get about 10x faster. The allocation is no longer going to be the bottleneck, it will be marginal and then a faster allocator isn't going to matter at all.

If someone gets an easy speedup from using a different libc that's great, but the vast majority of time it isn't going to matter and isn't going to be where any real speedups come from. The difference is a small percentage speedup vs orders of magnitude.

The amounts to the title being wrong, using musl or a small standard library just doesn't prevent a program from running fast. It is a tiny difference and even that tiny difference can be changed from things like better allocators which you would do anyway with a standard libc.


For some reason PayPal is still quite big in Germany; about 28% of online revenue in 2025.

Also Austria, perhaps Italy, but I have less direct experience there.


In Germany, it’s not uncommon for people to not have a credit card. For online purchases, it’s therefore easier to use PayPal at checkout because a direct IBAN transfer or debit card might not be accepted by the merchant. Also for splitting smaller amounts among friends and family (less of a moat because this could be done in principal by a SEPA transfer).

In other countries Revolut is popular for the friends and family bill splitting, in places like Sweden they have a PayPal-like solution offered by local banks. There’s an upcoming initiative by Brussels to bring all these national initiatives under one umbrella, which would definitely hurt PayPal’s German revenue in future.


But you have a Visa/Mastercard, surely? A thing with 16 digits that you can plug into the Stripe checkout screen?

I have, but never use, a 'credit card'. The thing I use every day is a 'debit card', where the money comes straight from my account. But it still has 16 digits and Visa written on the front.


In 2019, only 20% of Germans had a Visa/Mastercard. The vast majority of Germans used the German GiroCard network, as many vendors refused Visa/Mastercard due to the higher fees (2-3% vs GiroCard's 0.125%), and there was no real need for it. Even 2019 you had to pay 30-50€/year fee just for a debit MasterCard/Visa, as Germans rarely used them and rarely went into overdraft, so there was little profit to be made.

Since then MasterCard has tried to force banks into dropping GiroCard, by refusing to work with smaller banks that still support GiroCard, and by offering better conditions to larger banks that drop GiroCard.

This has increased the number of Germans with Visa/MasterCard, but it's still below 50%.


Mind blown. Thanks. I'm British and I've had a debit card since I was 16 which is a loooooong time ago now, let me tell you.

In the UK, purchases made with a credit card are much more protected than a debit card.

If the supplier goes out of business / fails to deliver, the bank/credit card company is equally liable. A Section 75 claim is allowed for purchases between £100 and £30,000.

https://www.financial-ombudsman.org.uk/consumers/complaints-...


The equivalent in Britain would be a Switch card in the 1990s, the UK's native debit card system.

https://en.wikipedia.org/wiki/Switch_(debit_card)


AFAIK, it's actually the "not-really-banks" that don't have Girocard: N26, Revolut, bunq, Vivid, Trade Republic, Wise, Tomorrow, Openbank.

All the traditional large ones seem to have AFAIK.

Off topic but I really hate N26 and its ilk. They don't really follow the German laws that say that German residents can have bank accounts, so they refuse people that are still on work visas, which is a pain in the fucking ass when you have a startup and the young employees are telling the immigrants "get N26" or something else, but the immigrants can't have it and only learn after submitting lots of docs to N26.


How did you get N26 to check your visa? I’ve never seen that situation. They only ask for an address in Germany. I know so many people with n26 on work visa

Careful: Work Visa is not the same as Residence Permit.

They check during the KYC process via mobile phone camera, and will reject people without a residence permit (Aufenthaltserlaubnis, Blue Card, etc), and they claim several things, from "we don't accept work visas" to "I never saw this document in my life".

Legally, a work visa is an Aufenthaltserlaubnis according to § 4 AufenthG, so N26 is classifying it wrongly here.

But it gets worse because they're breaking § 31 ZKG, which says they're obligated to provide an account for everyone here legally. We have formally complained to BAFIN about it.

Just copied the above law paragraphs from an HR discussion, btw, this is a recurring issue...

And I know this from helping several others, since I'm the startup ecosystem. I'm European, but not German.


Germany: Younger people yes, older people no. They wouldn't know the difference between credit and debit card and everything that looks like a credit card is an invention from hell and instant debt-spiral to them.

I do have a credit card for emergencies but I haven't used in years. It's in the drawer, I didn't even integrate it with Apple Pay.

My Girocard has Maestro integration, so I can use it overseas, but no number. Apparently this is gonna go away.

The Girocard naturally has ApplePay, which is what I use daily.


What are you talking about - merchants not accepting debit cards? It's best option for them.

People used to use Paypal because they have only debit cards. But with better card security and alternatives like SEPA and Wero there is way less need.


Wero is just starting on B2C, many business accounts still don't offer it. Not yet comparable to PayPal when talking purchases.

> For some reason PayPal is still quite big in Germany; about 28% of online revenue in 2025.

Many Germans don't have credit cards (I don't), so PayPal is pretty convenient as it can withdraw directly from a SEPA account and enables online shopping.

Google Pay cannot do SEPA, but allows adding PayPal as a payment method, so PayPal also gets you into the Google purchase ecosystem.

Revolut with its virtual CCs has been making some inroads lately, though.


PayPal is the only real company to offer any meaningful support to customers targeted by fraud or in a real dispute with a company. Banks screw customers and for cards you are at the mercy of mastercard/visa and a long wait period for the dispute.

Paypal is somewhat common in Italy for lunch-money amounts, a few local alternatives are available (sumUp and Satispay mainly) but for anything more than 100€ everybody uses SEPA transfers.

It makes every commit small, so they can be reviewed quickly and easily.

Small commits can often be tested faster, since irrelevant tests don't need to run.

Small commits are less risky. The smaller the delta of change, the lower the probability that something breaks.

Small commits get merged sooner; big commits take time to build up. Merging early front-loads your integration risk; merging later puts integration risk just before delivery.

Breaking a big feature into small commits means using feature flags to control whether a feature is enabled or not (since control paths will generally be incomplete). This means you separate the delivery of the code from the delivery of the feature, and has the added benefit that you can turn off a feature that has a problematic rollout without needing to redeploy code.


jj support doesn't force an org-wide change. jj is compatible with git. It's just that the mental model is more aligned to Gerrit and stacked PRs.

Jujutsu has a mental model that aligns far more closely to Gerrit than GitHub etc.

It uses a persistent changeid to model a change mutating over time, like Gerrit uses Change-Id in the description footer, and unlike git.

Jujutsu can be colocated with git and use .git as its backing store; every jj change revision is a git commit.

When you use jujutsu, you tend not to use branches any more, and think in terms of changes and chains of changes (i.e. stacked PRs, what Gerrit calls Relation Chains).

Jujutsu makes it very easy to work with a chain of changes (stacked PRs), letting you update commits in the middle and automatically rebasing the rest of the chain, without forcing you to interrupt work and resolve conflicts if there happen to be any (so, unlike git rebase -i with 'edit' on the commit you want to update).

IMO if you like the Gerrit workflow and the way it handles chained commits, if you switch to jj for two days of work, you'll never want to use git again.


I should probably post my guide on how to use gerrit and JJ together nicely.

I wrote it internally after struggling a lot with getting the relevant knowledge from the relevant authorities (Klabnik has the best resources but his writing seems to depend on you understanding abstract concepts before you grasp the practicality, which works for programming languages but less so for tools - which you want to "get out of the way").

in fact.. screw it... here: https://blog.dijit.sh/gerrit_with_jj/


I agree. Mutable commits are making a comeback recently and I love it. A hill I'll also die on is that branches shouldn't exist lol. Disclaimer - I'm the founder - but if you want a review tool that caters to jj users you might like revset.dev. It shows you the jj commits that make up a PR, and you can see the various revisions the jj commits and PR have gone through

Does it let you manually keep track of the parts you've actually seen? Instead of using the granularity provided by the PR author?

It does. This is definitely something that's being actively iterated on though. Let's say as a reviewer you leave some comments on Revision 3, then the user pushes 2 more PR revisions and asks you to re-review. The default diff when you open the PR again will be from Revision 3 -> Current code. It lets reviewers easily see what's changed since their last review.

There are also the "Mark as reviewed" checkboxes per file that can help you track what's been looked at.


You'd expect a tool-enabled model to leverage crop and zoom tools to inspect and validate what it thinks it's seeing, though.


If you run DNS at home (even just dnsmasq) and you bridge your home 192.whatever to tailscale, you can make the same domain name resolve both at home and via tailscale.


Export and Save As should be the same menu item with an option in the dialog.

There are many many more but start with the app having the overbearing assumption that it thinks you want save to its file format rather than make an ad hoc edit.


That “overbearing assumption” is made by practically every other X-media editing app, for good reason — you can save your work and continue/revert stuff later. If all you’ve ever used is MS paint then I guess it’s an unexpected thing, but any other image/video editing app, digital audio workstation, 3D modeling software, etc… work exactly the same way. It would be unexpected to me if “save as” exported a flat file.


Gimp doesn't save undo history in the XCF.


I guess the idea is you can do edits via non-destructive layer effects and compositing a stack of layers, where somewhere amongst the stack is your original unmolested data. Though that has not been my experience with Gimp - it's far more likely to want to to commit to a rasterizing decision far earlier than Photoshop would.


I don't care. 99% of my uses of an image editor are for ad hoc edits. I never want to clutter my disk with project files on the off-chance I want to preserve layers or whatnot. I have zfs snapshots and cloud backups should I want to revert but the odds I want to revert an ad hoc image edit are approximately nil - I can never recall needing to do so.

I don't use Gimp as a 3D modeling software or a digital audio workstation. I use it to add text to a family photo. The primary storage medium is jpeg. I don't want or need anything else.

The real issues with Gimp start when you try to work with selections, transforms, cuts, crops and so on. Photoshop muscle memory doesn't transfer and it is so incredibly clunky.


Then Gimp is the wrong tool for you. You’re using a excavator to pull out weeds. Use Pinta or KolourPaint instead.


How do you do drop shadow layer mask effects with Pinta and KolourPaint?


> I use it to add text to a family photo. The primary storage medium is jpeg. I don't want or need anything else.

So you open your photo, add your text, press Ctrl+E, choose a filename or press Enter to overwrite your old version, and press Enter to accept the default jpeg settings.

I guess it could save a couple of keypresses by auto-overwriting your original file without asking, or not asking about jpeg settings. But it doesn't seem like an outrageous workflow, considering that other people will want those options.

I do feel the same way as you about Photoshop muscle memory, having got quite good at it in the '90s and never really having caught up in Gimp.


I can empathize. I don't really care about the save vs export thing, as I have adapted to that and just go directly to export in the menu.

But, as a long time but infrequent user, I really dislike the changes towards "non-destructive" UX that just seems to spawn endless layers and other forms of pixel buffer limbo that confuse me. Lately, it feels like I'm being slow walked by a passive-aggressive tool that wants to waste my time and mental energy.

I wish there was a "novice" or "casual" user setting option to go back to a much simpler UX, where I am operating immediately on the selected layer. Where a pasted object can be dragged but anchors as soon as I touch something else, etc. Where filters preview but then "apply" immediately. Where undo can revert some recent changes but otherwise the effects accumulate destructively into the current layer.

A naive user may never have to learn about layers, but they are still there when desired. I don't want a layer spawning on their own. I'll make the new layer before I start changing things, and I'll think deliberately how I want that layer filled. Then, I'll resume actions that immediately mutate it.


Hi! There are actually options for most of those.

1) When you apply a filter, there's a "Merge filter" checkbox. If you check it, filters will be merged down immediately like in 2.10. The setting is remembered, though currently the unique Color filters are remembered separately from the generic ones.

2) If you go to Edit -> Keyboard Shortcuts and search for "Paste as Floating Selection", you can bind Ctrl + V to it so that you get the 2.10 floating selection behavior.


I still think the original behavior where it just saves as whatever extension was entered as the name was one of the more enlightened ways to operate.

I sort of get their point. The "Only one of these formats(the one you have never heard of) will save all aspects of your work, every other one will lose things, pick wisely." school of interface design is a massive footgun. But I like interfaces that get out of your way and just let you do things.

And I just had a bright idea, "forget the save dialog, just use the export dialog for everything" but it turns out the export dialog will not let you save to .xcf My disappointment is immeasurable. Why not gimp team? You dashed my last hope for a single unified interface. Somebody had to go out of their way to take that out.


The difference between exporting and saving is extremely important, and is something the user must understand in order to prevent data loss.


And Gimp users are not more likely to know that? It adds up to extra clicks for 90% of the images I load.


how does the save/export distinction result in extra clicks? they are in the same menu right below each other. pick the right one. if you don't know you may pick the wrong one the first time, but after that you know. i find it faster than having to choose the format i want from a "save as" dialog


You just reminded me of a great feature that I think I first noticed in The Gimp: you don't have to search through the list of file types when exporting (I almost typed "saving"!), just type the extension in the file name and it'll save in that format! Love that part.


It's when I want to close the image or the application - the extra click to confirm that, yes, I am aware this image was not "saved" and that I could be losing data. I admit I have not looked into whether I can disable that extra notification.


ok, fair point. i agree, that's a bit annoying. and ideally it should also tell whether changes are made after exporting.


I have a chunky bit of functionality in my hobby app using babylon.js to render 3D worlds using things like portals and LoD rendering to manage the visual load. I built it out with a combo of Fable and Opus 5.

I too got fed up with the prose of Opus in particular, and tried going back. Unfortunately, the previous models were less able to hack it. The prose was better but progress was worse.

It wasn't just conversation and comments. Some of the function names were wild. Like it instead of something like "isSolidWall(x)" it would write something like "weightyNotEphemeral(x)" or something - that's not quite it, but it really did embed overwrought antithesis into the identifier instead of a straightforward positive predicate.


> "isSolidWall(x)" it would write something like "weightyNotEphemeral(x)"

Is this a literal example? That is wild.


It is not the literal example because I told it to rename the function, but the function had the form thisNotThat for a boolean predicate that had a far more conventional name.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: