skysight-inc/HackerNews huggingface dataset:
> I suspect designers deliberately harm UX in an attempt to drive away unprofitable power users.

You might be partly right. I mean, I've worked in UX for more than a decade and I've never met anyone who did this deliberately. But over-optimizing for the novice experience essentially produces the same result.

A decade ago it was trivially easy to find improvements that benefited all users, but these days platforms are a lot more mature and there are fewer universally beneficial usability improvements like that left. At this point making improvements for one persona often result in regressions for others. It comes down to a business decision of which users matter and how the changes impact the bottom line. And you sort of have to make a call because if your company decides not to optimize for a profitable set of users then your competitors will.

I've never worked on UX for a web browser, but my guess is that they're mostly optimizing for novice users and safety at the expense of the power user experience. I don't see that changing as long as their business model depends on appealing to the largest possible number of users. Of course I wasn't in the room when the team made that call and you may be right that they're engaging in some dark pattern shenanigans to actively sabotage your experience and make you leave but I seriously doubt it's that explicit -- no one's actively trying to drive you away, they just don't particularly care about you. You might be able to find a niche web browser just for expert users that meets your need, but I'm not not sure how they'd sustain the business.

Having said that, there are lots business models in which power users are profitable. I've worked on expert systems (military, finance, ETL, data science) that often have crazy high learning curves for novices because whenever there's a tradeoff they optimize for the efficiency and stability for expert users. Having said that, these systems can be expensive (for example ~24k/yr/seat) so the businesses can afford to focus on optimizing for a small number of expert users.
The Cold War was a sham, nobody was ever going to fire missiles except by mistake. It was just a way to maintain military budgets (and contracts) when peace broke out after WWII. Any instability in the main was only ever by design.

Look at all the people who went supernova when Clinton downsized the military after the fall of the Berlin Wall and the collapse of the USSR.

"Generals and majors always seem so unhappy 'less they got a war."

https://www.youtube.com/watch?v=WiLuYZNzNyc
you can take friday before the weekend and monday after the weekend, with your tuesday to get five days. moreover, just tsking off one day gives you 4 days. the latter is true if your regular day off is any day except wednesday.
Intel Xe MAX GPU supposedly outperforms RTX 2080 in AI-related workloads
I want one of these and will get or build one soon.

Nice work networking 8 bit computers so usefully.
I've become more and more convinced that copyright laws do not promote progress of useful arts and sciences. The most obvious example is the incredible success of free and open software.

Are people really going to stop writing books, composing music, painting pictures, etc, without copyright protection? Not a chance!
I wonder how do you deal with people who block images and thus break the open tracking, or are not comfortable with anyone stalking their e-mail reading habits?
I'm a little bit confused by this. Isn't the modern docx format just a bunch of XML markup in a zip file?

Actually, I'm sure the modern docx format is just a bunch of XML markup. I just created a toy docx with the text "This is a test." and ripped it open with a little bit of python that I had lying around from previous experiments along those lines[1]

Looking at the output of the file 'word/document.xml', in relevant part, we see:

<w:body>
<w:p w14:paraId="64E164D6" w14:textId="77777777" w:rsidR="00EB525B" w:rsidRPr="00E02EE2" w:rsidRDefault="00E02EE2">
<w:r>
<w:t xml:space="preserve">This </w:t>
</w:r>
<w:r>
<w:rPr>
<w:i/>
<w:iCs/>
</w:rPr>
<w:t>is</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"> a test.</w:t>

which looks like the underlying XML representation indeed intersperses formatting codes in the stream, at least in part---certainly it's clear that the "is" is italicized"...

That seems like enough information to build reveal codes out of...

[1] https://github.com/paultopia/dedocx/blob/master/deconstruct....
I've been thinking for a while about something like an "assertion based type system." Rather than types being variants of other types, types can be described as other types + restrictions. Functions take variables with types but also come with a list of assertions. For example, it is sometimes useful in graphics to differentiate, in the type system, a 3D vector and a normalized vector (e.g. separate Vec3 and Norm3 types) but there is nothing you can do to actually put this into the type system. In some assertion based system, you would write something like: `type Norm3 = Vec3 v given(len(v) == 1)`. You could cast a Vec3 to a Norm3 which would run the assertion at run time, or you could write a function like `normalize` which always returns a Norm3 (maybe even it comes with its own assertion that len(v) != 0). Then you can safely pass your Norm3s to functions that expect normalized vectors. It's always recommended to make bad states unrepresentable, but it's weird how no language has ever given you a system like this.
“the endgame of virality is extremism”
Almost everything the article says about the prospects for using C++ in an OS kernel is wrong.

It is hard to understand how someone could know so many basic facts about the language and still be so thoroughly confused.

None of the reasons cited for not using C++ in kernel code is valid. None of the things claimed to be impossible are.

Example: RTTI. Really, RTTI is hardly ever used in good code. (I used in once in 10 years.) Despite its low use-value, nothing interferes with using it in a kernel.

Name mangling is absolutely no problem; neither would using `extern "C"`, if you wanted to.

Operator new is wholly compatible with kernel allocators.

The Standard Library does have read-write locks, although it is usually foolish to use such a lock in real code. It is trivial to wrap any synchronization primitive you like with a zero-overhead abstraction. Kernels tend to have their own anyway.

Exceptions in kernel threads would work identically the same as in user-level threads.

Static ctor sections could be run by kernel startup code as easily as they are run in regular programs. (Probably one would not bother running static dtor sections.)

I could go on and on, but enough.

This article joins others packed to the brim with out-and-out falsehoods. When you need to rally so many falsehoods to make your case, you end up making the opposite case--except where your audience is easily fooled.
systemd also has container support baked it. It's actually as simple as 'pacstrap/debootstrap' followed by 'machinectl start'.
I read both sides and it looks like The Intercept really doesn't have a leg to stand on. Greenwald offered to publish the story elsewhere (which he is explicitly allowed to by his contract) and they said no. He published both the article and the emails leading up to his resignation. The Intercept clearly breached the terms of his employment contract and expected to pressure him into accepting it.

I think what makes it hurt so much for Jeremy (who strikes me as good guy) is that he is still loyal to the organization and doesn't want to face up to its hypocrisy. I don't know how he reconciles his opinion of Betsy with her comments accusing Glen of acting like a spoiling child.

I want Biden to win and think the NY Post stinks but Greenwald is right on the merits.
Privateer was so great. I also have some fond memories of it being one of the first games I “hacked” by editing the dialog with a hex editor.
If you give cash payments to poor families, you will simply get more poor children and encourage dysgenics.

The solution is to encourage contraception and abortion for poor women, and remove all cash incentives for having children - replace them with just tax credits.

Additionally to scale property tax payments based on the number of children in the property. Empty nesters should need to pay more tax than families to represent the needs of families for larger living space.
No offense intended by who in their right mind would boot off spinning rust in 2020? You can get a brand new 240GB SSD for $30 and a 1TB for $90. That’s ignoring the used market where you can get a solid used Intel for $10. If you need more storage buy a spinning disk for bulk storage - even if it’s a laptop, usb-3.1 is faster than the drive.
Hah. Binary patching is a neat hack, but my first thought would've been to make a loopbackable filesystem in a file that explicitly didn't have that many inodes.

Mostly on grounds that if one binary had that problem, maybe another one would, and I would really rather not go through the same process twice ;)
Hey now, photo booths have been doing very, very well in Japan for 30 years! =D
More than 49,000 miles of paths lost from maps in England and Wales
"Pessimists sound smart. Optimists make money." —@natfriedman
Why would a better solution require income redistribution?

If someone produces $10/hr, why should they make $15/hr?
Habits That Will Lead You to Successful Life
I wouldn't subscribe to the more constant interruption the people in the story use, but overall I guess so.
I think you might be describing refinement type systems [1]?

[1] https://en.wikipedia.org/wiki/Refinement_type
Don't forget that Churchill may be called a white supremacist and genocidal: https://www.bbc.com/news/magazine-29701767

And there's also that other country that exploded nuclear bombs over two mass populated cities killing a good number of innocent people.

There's not a lot of people that can save face in a world war. At least there is a consensus that the Germans were the most atrocious.
'This is revolutionary’: new online bookshop unites indies to rival Amazon
Sounds like you're describing dependent types. You've now got the problem that showing your program is correct involves writing maths proofs that show your properties hold in all cases (which is an undecidable problem).
Darwin-only by my read.
Yes, on its own, a newtype is nothing more than a name. The safety comes from pairing a newtype with an encapsulation mechanism and a carefully-designed trust boundary.

Without an encapsulation mechanism, I do not consider using newtypes to wrap real numbers with units of measure sufficient to be called “type safety”; in my experience it still requires significant discipline to use properly (because the points of wrapping/unwrapping are usually fairly local and require delicate care).

Of course, this is a matter of both subjective definition and relative situation. One can theoretically imagine a codebase that conventionally uses units-of-measure wrappers so pervasively that the safety is genuine, since the places where values are wrapped/unwrapped are so well-defined that any misuse would stick out as wrong. However, I have never in my life seen such a codebase, so anecdotally I can only consider such measures more like the lines painted on a road to delineate lanes than a bona fide safety mechanism.
Very cool. Node has been on my back burner to learn for years, but making the mental leap from tutorial-sized projects to anything more complex has been particularly difficult. Perhaps this will help!
You're right that Trump is not necessarily representative of other Republicans. But I think the skew is actually the opposite direction of what you're saying. I think Trump is actually less likely to be favored by wealthy people vs say Bush.

Look at this polling of support of Bush vs Kerry by income level[1], as income rises support for Bush almost always rises, and support for Kerry almost always decreases.

[1] https://www.cnn.com/ELECTION/2004/pages/results/states/US/P/...
It gets much worse than that. If you're planning to do software development consulting/contracting, definitely read on.

Here's some scenarios I've seen:

1) US F500 companies are sending out documents to vendors to allow clawing back payments from your bank account number. So besides stretching out payment terms to monts, they can reverse those payments. Never sign those if you plan to be around next year.

2) Sometimes the staff proposing the project get cold feet in the middle of the approval process, realizing there's career risk if the project fails for any reason. You'll get an email like, "Good news, we signed the deal but you'll be reporting to somebody else. Good luck!." And then you talk o the new guy and he says, "It doesn't matter to me if this project succeeds. We just won't pay if it doesn't." Without a champion, there's a sense of limbo that weighs on the project.

In this case, the former champions became so risk-averse that they said, "Why don't you retain ownership of the product, and we'll just pay you like it was a service instead?" Bizarre, but that level of hands-off made them comfortable, and the product can be sold as-is to other companies.

3) Then there's the "missing key man" who shows up after approval and says, "This project is for my group, but I don't want to meet with you. Just develop it and I'll take a look after you're done and let you know if I like it or not."

4) I've done development on 3 contracts where the big name companies had serious networking or other infrastructure issues that required workarounds.

One manager actually said after I arrived on-site, "It's more valuable to me if you troubleshoot the infra problems than finish the product." It turned out they had email loop problems that lost most internal emails and saturated their switches.

Often you get a reaction of disbelief when you tell people these anecdotes, even in the industry, but those actually happened. All of the projects were finished successfully, but the project risk increased far beyond what was expected for both sides, and relations turned from friendly to hard-nosed solely because of their internal politics.

The best thing you can do is ensure the project is big enough to make it worthwhile despite surprises, and to know exactly who the champions and customers are. Or just get a job at FAANG.
The problem with shebangs that I really want to solve is that I often need to edit files on a Windows machine, and then try to run the resulting CR/LF scripts on a Linux machine using a shared filesystem. (Docker, WSL, Vagrant etc...).

I'd like to invoke them with just (eg.) ./dostuff.py - Python, Ruby etc... have absolutely no problem running files containing Win-style line-endings. The only issue is that /usr/bin/env complains that it can't find (eg.) "python3\n".

Yes, I know I could convert these files with dos2unix, and I also know that I can just invoke the interpreter explicitly - but I'm lazy, and this seems like such a trivial thing to solve that I can't believe it's not been done already.

I've taken to actually recompiling /usr/bin/env to strip trailing whitespace from the executable name - but there must be a better solution.
Funny thing about debuggers is that they seem to encourage stepping - step in, step out, step over, single step, step to return.

Stepping is an enormous waste of time with a debugger.

Breakpoints are where it's at. Level up your breakpoints: logging breakpoints, conditional breakpoints, memory breakpoints (super handy when combined with deterministic memory allocation), syscall / library breakpoints - and soon you're going somewhere useful.

Debugging is about formulating theories and proving them wrong, or right. Stepping doesn't scale; breakpoints can scale, if you know where to put them.

I'm not sure that the gap between a debugger with breakpoints, and printfs in source, is that large, though. It's easier to write complex conditionals or log the state of a complex predicate in the source language than in whatever the debugger gives you - even if it gives you the native language, you typically have to write it all on a single line. And you need to dive deep into the source to understand where to put those breakpoints - or printfs.

An underused debugging tool is an instrumenting profiler. The captured call graph is a useful clue for dynamic & indirect control flow in particular, without needing to decipher it from stepping or infer it from chasing source references and indirections. Things like generic message dispatchers and event callbacks are horrible to try and step through and aren't much better when eyeballing the source.
Yeah, so I feel burned but for different reasons. Mainly the amount of thinking required, and where that thinking involves thinking about the code, what was intended by the legacy code, who do I talk to, are they an asshole, should I bother talking to them or just do something to get the job done, what don't I know, do I refactor, or not, etc. etc. None of the stuff you do at work is simple. It's either complicated, or if you are lucky just complex. Making code and UI's simple seem to be low down on priority lists, and a lot of developers like making coding fun at the expense of making it easy to understand. So yeah I'm a bit over it all.
Ask HN: How to handle a heartbreak? How to pull yourself together?
I am going through a heartbreak and I also feel I am being overwhelmed with emotions.

It's affecting my career and my productivity.

How did you handle such a situation? Any resources or books that helped you?

I don't expect it to overcome over night, but at least I want to be in control that my work isn't affected.

P.S: Not sure if HN is the right place to post this, but I felt there might be people who have been through the same.
Addendum, but I'm really getting curious now: How did you come to this flawed impression of GUI frameworks? Why did you think people used them if they were so useless?
How do you write a data type which can only hold legal email addresses? Or URLs? ZIP codes? Or even dates and times? Expressing all of the requirements of these real-world data formats, within a type system such as Haskell's, seems like an extremely daunting task to me. I have programmed in Haskell a fair bit in the past and I have no idea where I'd begin with those.
Silicon Valley (as a culture) is dead. Here's what is replacing it
As Europe's governments lose control of Covid, revolt is in the air
Thanks, I was not aware of that page.
Maybe they sang a lot.
The new pricing model for Travis CI
Thank you! Subscribed.
Stalin would have rolled over Europe if he had half the chance. Nukes like it or not is the reason why we haven't had WW3.
Thank you for the advise, this is my first post on HN so was not aware of this. Will keep this in mind.
There is a significant group who are wrong about literally anything one can think of. How vocal they are about it does not correlate with much.
Say I believe no swearing and no pink shirts and my co-organiser thinks no swearing and no blue shirts. It makes sense for us to sit down before the conference and document our official stance on those issues. Then when I see someone wearing a pink (or blue) shirt I know how to respond without starting a fight on the day with my co-organiser.

The problem is that you'll never be able to write things down in a sufficient level of detail in a CoC to avoid this situation. Sure, your CoC details what to do when someone wears a pink shirt or a blue shirt. But what happens when someone comes in wearing a purple shirt, and you co-organizer kicks them out because "that shade of purple is too close to blue"?

I agree that conference and event organizers and moderators ought to sit down together and figure out how they resolve disputes among themselves. I disagree that a Code of Conduct is helpful in facilitating that.
The "sealioning" concept seems invented solely to soothe the ego of people who always have to have the last word. Those who can't stand to let a conversation end without looking and feeling like the winner.

If something's not worth your energy, just walk away. Don't stew so hard that you need a webcomic to reassure you that you're a well adjusted person that's obviously in the right and your opponent is a grotesque sea creature that doesn't any social etiquette.
That seems more than just the dangers of metadata. That's more of the dangers of giving machines the authority to drop bombs with no human oversight at all. That same kind of problem could happen if the government wasn't spying on anything, or if the government was spying on content, not just metadata.
If you enjoyed reading this story, u/Admiral_Cloudberg has been writing these kinds of well-researched post-mortems on air collisions and accidents on Reddit[0] for several years, and has recently expanded to Medium[1]. The posts are always interesting, even for someone with no background in aviation, and often come with photographs, diagrams, or video.

[0] https://www.reddit.com/user/Admiral_Cloudberg/posts/?sort=to...

[1] https://admiralcloudberg.medium.com/
what frequent action can't you do with ST3/VSCode's command palette?

I've been using ST for 8-ish years and never use the mouse/trackpad/touchscreen/joystick/stylus/trackball/wheel.
How to Learn React Native Practically
> I don’t think I’ve ever seen anybody claim that hooks are ‘functional’

That's not quite true. The linked story tries to explain Hooks as algebraic effects. Before Hooks, functional components were explained as "UI is a function of state". After Hooks, they are continuing on FP ideas as the justification or explanation of their design choices: https://overreacted.io/algebraic-effects-for-the-rest-of-us/
my last name ends in er, i want that vanity url
Winamp with airdrop music visualizer made this geek the life of the party around 20 years ago
In my circle of close guy-friends it’s so common to just always crack jokes and banter that there are zero silent moments. In fact there’s often more than one person yelling over another person with a better joke or twist on a previous joke or some story. It’s like a bazaar.

You do need to time it right to get the word in, but you can’t wait for a silent moment.

It’s like merging on the highway. You can’t wait for all cars to stop. Have to time the merge correctly and force your way in, even if nobody is letting you in.
End of Mike Gunderloy's “Double Shots” after 2716 posts (7 yrs)
What you are looking for are refinement type systems. LiquidHaskell [0] is the most well known refinement type system out there, to specify and verify these kind of assertions.

[0]: https://ucsd-progsys.github.io/liquidhaskell-blog/
In JavaScript UI development it is not important, IMHO. So why do React developers keep pushing functional concepts, as if React is functional?
Every UX change is a negative to those who've already invested in learning your UX and a signal that nobody should invest further.
Something is terribly wrong if astronomy of all fields encountered a reproducibility crisis.
People can report anything.

Solutions to pervasive, debilitating GC problems are as perennial as the Spring rain. Every year, we get a new crop, but the problems are still there the year after.
Would love to live and work in Japan again, but it's depressing how Tokyo centric the job market appears to be. I'd gladly take a pay cut if I could be somewhere other than Kanto. It'd be worth it.
If you are a reader looking for a viable alternative to Twitter and problematic social media in general, take a look at the Fediverse.

I wrote an article explaining the Fediverse, but really you can just search online for it.
https://torresjrjr.com/archive/2020-07-19-guide-to-the-fediv...

https://fediverse.network

It's decentralised and federated, and works on sane, standard protocols. It essentially rips out the problems caused by massive centralisation. I'm a big advocate for it, and for good reason. I believe we're currently collectively around 3 million users and growing, so it's definitely not a niche. It's not a magic wand of a solution, but it delivers where it matters the most.