HNHacker News
TopNewBestAskShowJobs

oleganza

2,795 karma · joined March 20, 2008

Building Safely & Flame. Previously: Tonkeeper, Slingshot ZkVM, BTCRuby, CoreBitcoin (obj-c toolkit), Gitbox app.

Web: http://oleganza.com

Twitter: @oleganza

Email: oleganza@gmail.com

[ my public key: https://keybase.io/oleganza; my proof: https://keybase.io/oleganza/sigs/AJQSAr3c4OGeX1kGNlkC7CA4GCHrwFxd_d0NRObC-P0 ]

submissionscomments
oleganza··on Cryptocurrency doesn't address the hard parts of financial inclusion (2022)
BTC saved the value over the years for all its holders, including even those who bought during the height of mania and have suffered temporary setback for a few months.

For an asset where no one promised anything but uncertainty, that's the only asset that you can rely on as your insurance against asset seizures, inflation, pumps-and-dumps (compare BTC with any other token with marketing - BTC marches on, while all these tokens get pumped/dumped and then stay forever at zero).

oleganza··on Take the pedals off the bike
We did it with our kids 7-8 years ago and it worked perfectly. They were riding bikes with pedals within a week or so.

The article does not mention the important difference in the steering wheel behavior: when you ride with trainer wheels (or a tricycle) you learn to steer by turning the front wheel; but when you balance on a bicycle you steer by rotating your body and turn the wheel only afterwards to "catch" the bike. These two modes of riding are almost opposite and if you learn the first one, you'd have to unlearn it the hard way.

oleganza··on US airlines transported passengers over two light-years since the last crash
Because your life is measured in hours, not miles.

Also for the most flights the alternative is not driving or riding a train, but not travelling at all over that distance.

Examples: 1) unnecessary business trips ("that meeting could've been an email"); 2) long-range vacations ("let's travel somewhere local 1-2 hr by car instead of 3-6 hr by plane")

oleganza··on The Static Site Paradox
I came here to write this exact comment. The article is wrong in assuming that WP is wasteful. It gives huge optionality to the users: engineers probably can afford going with a static page and then changing the entire architecture of their webpage once they need some interactivity, but non-engineers want to go with a scalable solution: where they start with a contact info and slowly end up with a personal shop or whatnot without reinventing the setup at each phase transition.

Speaking of optionality and opportunity costs: many engineers are trained to see the unseen opportunity costs in technology ("YAGNI" and "tech debt" are often used terms), but often fail to see the economic opportunity costs: those that would waste time and cognitive effort of human beings, not the machines. Example: many engineers like to fantasize about micropayments architectures "because efficiency", but people cannot calculate those. They are better off with a nice round monthly subscription just to minimize number of microdecisions they have to go through daily.

oleganza··on CSS @property and the new style
This demo reminded me of 2001-2002 when I was hanging out on forums about Macromedia Flash: people were making crazy demos with a mix of hand-drawn shapes, animations and ActionScript.

What you can do in modern HTML+CSS+JS is incredible. Too bad people bury it down under millions of layers of frameworks and code transformers.

oleganza··on Stop Killing Games – European Citizens' Initiative
I disagree. Netflix is successful because you get a never ending stream of entertainment for a predictable cost. No need to make consumer decisions on each and every piece of fun.

It takes extra effort to avoid this trap. I and my wife had to make a conscious decision to abstain from watching any TV shows because of their addictive structure - same goes for the algorithm feed of reels. If we need to watch a movie in the evening, it must be a complete thing in itself, not a beginning of a 5-season saga.

oleganza··on Stop Killing Games – European Citizens' Initiative
People want to be hooked up on subscription because schools and parents do not preach long-term values (well, maybe only orthodox religious minorities do).

We are in this situation because of a shrinking time horizon for the modern society (aka "high time preference"). People want instant gratification, buy-now-pay-later, pay attention to the packaging, not content. Most citizens are conditioned to live here and now. Even climate change activists frame the issue (that is supposed to be about long-term thinking) on a very short scale: do something hysterical right now, otherwise the world's gonna end tomorrow.

oleganza··on Implementing the “one or more” UI component
This control does not allow you to uncheck first and check another one afterwards. Its logic is not self-evident that undermines trust from get-go.

There is a principle "let user click" formulated by Ilya Birman, which means "let user enter whatever data they want and then deal with it separately". E.g. i'd like to be able to uncheck any checkbox before selecting a different one. Or clear the text to paste some other text. If there is a hardcoded logic that prohibits any of these intermediate states, people would be constantly frustrated.

Food delivery apps say "select one or more options" and let you uncheck anything with a separate validation. These guys literally make money by optimizing for happiness — their job is the best UX scientific experiment out there.

oleganza··on Deniable Encryption
This is a very poor advice at deniable encryption. The structure of the ciphertext is visible to the reader - when you get your decryption you know that it is one of many.

I presume the true deniable decryption would work in a way that fully hides the presence of the alternate contents. Note, however, that most encryption schemes are specifically designed to be non-deniable, so you'd be caught by simply using organically grown crypto before even decrypting anything.

For those interested in paranoia, I suggest looking into steganography and forward-secrecy schemes with transient secrets.

oleganza··on Midjourney bans all Stability AI employees over alleged data scraping
Your sarcasm is valid on its own, but here the issue is more towards DoS rather than copying of the content.
oleganza··on Linux Hits 4% on the Desktop
Late 90s argument against linux sounded like “we need to run Office”. Today i don’t need spreadsheets that are not shared in real time with my colleagues. So you use web version of excel/googlesheets and it doesn’t matter what OS is running your webkit-based browser.

Also all the “free software” is in someone else’s server.

oleganza··on Firsty.app – free 300kbit/s eSIM for US/EU
This is so backwards. We now have cheap and fast cryptocurrency (I build Tonkeeper, a wallet for TON) and eSIMs that cover big chunks of world at a time. The cost is low, it's one-click purchase and you have a reliable connection without spam.

Basic human right is not to sell your soul for pennies, but to be able to buy things you need, cheap and easy without lame border controls and obnoxious banking fees.

oleganza··on Fix date-handling bug when today’s date is later than the target month
Unlike many issues with dates, this one is purely a result of a wrong API design. It does not make sense to "set a component" of a date all by itself (unlike hours/minutes/seconds in a day), so an API that allows you to so is plain broken.

Correct API would be to set the components D,M,Y all at once and have them validated on the spot before returning a valid Date value.

oleganza··on Only 90s Web Developers Remember This (2014)
For me personally this is a nice bit of absurdist humour that so few people cherish lately.
oleganza··on 1D Pac-Man
This is great. That's what Alan Kay envisioned when doing Smalltalk 45 years ago: opening up a computer program while it's running and tinkering with its code directly.

And it's quite funny that JS was designed after Self/Smalltalk well before anyone cared about interactive tooling, towards which we evolved independently.

Alan Kay truly is a genius.

oleganza··on Epic vs. Google: Google Loses
By the same logic, other phonemakers can come over and make phones. The definition of what is a "market" is arbitrary and subjective. Google may be a monopoly in internet search, but only a small player in "global advertisement". And anyone anywhere is a monopolist in the very narrow definition of the market that includes their own ten customers.

What's really important is the power play: your company should strive to hold a comfortable and stable monopoly position in a meaningful market (meaningful to you), while the government's role is to watch over all the businesses so that large numbers of people are not under heavy influence of external forces and not made unhappy. If any product exploits its monopoly by shifting the power from the government or making people sad, then gov steps in and interprets the rules in the way to correct this. Or, the gov is corrupt and helps keep that monopoly going :-)

oleganza··on Apple and Google avoid naming ChatGPT as their 'app of the year'
After everything that happened over 2016-2023 don't people realise there is no such thing as "neutral source of information"?

Even the neutral POV policy of wikipedia is constantly worked around by various actors by marking "bad" sources as biased or unverified, while "good" sources canonical and neutral.

oleganza··on Embeddings: What they are and why they matter
Common mistake when doing practical trigonometry is to compute square roots when that's not necessary:

def cosine_similarity(a, b):

    dot_product = sum(x \* y for x, y in zip(a, b))

    magnitude_a = sum(x \* x for x in a) \* 0.5         # <- no need for \*0.5

    magnitude_b = sum(x \* x for x in b) \* 0.5         # <- no need for \*0.5

    return dot_product / (magnitude_a \* magnitude_b)
If you compare your cosines, you might as well compare their squares and avoid costly root computation.

Similarly, in elliptic curve crypto certain expensive operations, such as inversion (x^-1 mod n) are delayed as much as possible down the computation pipeline or even avoided completely when you need to compare two points instead of computing their canonical values.

oleganza··on Jobs working with the Rust programming language. No crypto
Cryptography means cryptocurrency because that's what virtually every cryptographer was trying to achieve: cryptographically-secured interactions between people.

And economic interactions are the most impactful ones. Note that (Open)SSL was created when people really wanted to make CC payments over the internet.

Also: a lot of cryptographic protocols require some censorship-resistant publication medium. Wanna rotate keys and retire old ones? You need some sort of distributed transparency log. Want a human-readable name that escapes Zooko's triangle? Also need a log. These things did not exist until people got used to blockchains. Even CT log for TLS arrived only after Bitcoin, even though it does not require no mining or currency.

oleganza··on Retirement savings simulator
Because after 100 misery grows regardless of amount of cash on hand.
oleganza··on Microwaved plastic containers release microplastics into food
i'd imagine there would be plenty of pictures taken so you could link to one that's exceptionally convincing.
oleganza··on Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs
The problem is not being offended per se, but having your user id accidentally become "user_123fuck567" — that's akin to having a vulgar license plate on your car's forehead. People don't appreciate how lucky they sometimes are.
oleganza··on Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs
Trve Latinists wovld appreciate yovr point.
oleganza··on The Power of 10: Rules for Developing Safety-Critical Code [pdf]
Stack is a dynamic memory of sorts and some languages (Rust) heavily optimize towards keeping things on stack so that your data types could turn out to be quite big.

It is hard to determine the max value for time-to-die counter if your stack footprint is hard to estimate due to nested structs/enums/unions/generics/optimizations.

oleganza··on Making C++ safe without borrow checking, reference counting, or tracing GC
The reason I use Rust is because I can bypass all this messy business altogether and have my sensible patterns wrapped in a usable syntax and enforced by the compiler out of the box.

Whenever people say "just follow these rules" I read "just add this extra mental burden and do not slip up". Computers were invented to automate things. Rust automates ownership and borrowing rules. Suggestions like "do not forget to initialize unique_ptr with something" are not intelligent solutions.

oleganza··on Apple could force a 111-year-old fruit company to change its Apple logo
As any laws, regulations and private agreements: they provide an up-front framework for conduct so that people do not get creative in the heat of the moment.
oleganza··on TypeScript 5.2's new keyword: 'Using'
I wonder how does it work with destructuring? The last example extracts `connection` from the returned object:

await using { connection } = getConnection();

If you are used to Rust semantics, you'd expect that the whole thing is disposed, apart from still living objects. Reading this line I am immediately afraid that the whole object is disposed immediately (or right on the next line), the callback is called and your `connection` a couple of lines later will be closed already.

oleganza··on Show HN: Add Favicons to HN
This is nice. In general icons work well when designed in common style. They must be distinct enough to be easily recognisable, but sit nicely next to each other.

Since favicons are designed by independent authors, they don't usually look nice in dense list. However, you can try making them 1.5x smaller and apply common style tweaks: e.g. round the corners, apply slight desaturation/tinting to match the HN style.

Then, they won't be distracting from content, won't look out of place and still would give useful visual cues when scanning through the news.

oleganza··on Neverflow: C macros that guard against buffer overflows
"'Brother,' says he, 'greetings. Didn't I see you in Southern Missouri last summer selling colored sand at half-a-dollar a teaspoonful to put into lamps to keep the oil from exploding?'

"'Oil,' says I, 'never explodes. It's the gas that forms that explodes.' But I shakes hands with him, anyway.

...

"'Listen,' says I. 'I instruct her to keep her lamp clean and well filled. If she does that it can't burst. And with the sand in it she knows it can't, and she don't worry.

— O. Henry, The Man Higher Up

oleganza··on The obvious final step
Knowing that Ruby libraries used block (lambda) pattern for the past 25-ish years, it was very painful to read through the first 90% of the article explaining all the issues with abusing destructors.

Maybe because first-class support for lambdas was added too late in C++ and Java, or maybe because it was always PITA to type.

Ruby syntax is the lightest there could be (and it supports both {braces} and do/end keywords)

transaction do

   foo()

   bar()
end
← PreviousPage 2 of 34Next →