skysight-inc/HackerNews huggingface dataset:
If "diffs" and "snapshots" are leaky abstractions, that often enough lead you badly astray, then why insist on these abstractions in the first place?

Why not just teach people the mental model behind Git up-front? Objects form an immutable directed acyclic graph, human-readable names point at objects, there are some rules by which the graph is being extended and pruned, and by which names (references) are being updated to point at different objects.

This isn't a hard mental model, not for programmers (for whom the tool is intended in the first place). If you know how the most basic pointer-based data structures - a linked list, a tree, a directed graph - work, then learning the actual model isn't hard, immediately clarifies why Git does what it does. It should be taught to people up front.

A commit isn't a diff, and it isn't a snapshot. It's a bunch of objects Git creates for you, where the "commit" object points at previous commits and at a tree, built of "tree" and "blob" objects. When Git wants to know how to recreate your file structure, it starts at the "commit" object and walks the graph to discover what files and folders should exist. When you make a change and perform the "commit" action, Git creates a new "commit" object and a new "tree" object for it, and add more objects to the graph to encode what changed, while reusing previously existing objects for things that did not change. The end state is, if you start at your new "commit" object and walk the graph, the resulting description of your file structure should be equal to what's on your hard drive when you made your commit.

Trying to paper over that with "friendly abstractions" is what makes Git difficult to understand.
C11 added _Generic for overloading by type.
Cheap is relative, would I rather have Photoshop for 2.5 months or a permanent license of Affinity Photo?

I'm taking into account a current 50% discount, but I think that's fair since Adobe products no longer go on sale.

But even without the sale, it's 5 months of Photoshop versus a permanent license.
I knew you could tweak imported animations and stuff, but it didn't hold a candle to Flash's stuff, since Flash was an "animation-first" program.

Maybe I need to play with Construct again though, it's probably improved substantially in six years.
I store my list of ffmpeg shortcuts on a website called StackOverflow
> I was a TA in a first-semester course in C programming for several years, and one of the harder things to inculcate is how return value checking is not optional. It's very tempting to assume your standard library function just works, always.

The situation is worse than that. People check for errors except when they don't. And you are expected to know the difference. Take for instance malloc. It can return NULL but you don't check for it, because that's just the way it's done. Or take close(2).

> If close() is interrupted by a signal that is to be caught, it shall return -1 with errno set to EINTR and the state of fildes is unspecified.

> This permits the behavior that occurs on Linux and many other implementations, where, as with other errors that may be reported by close(), the file descriptor is guaranteed to be closed. However, it also permits another possibility: that the implementation returns an EINTR error and keeps the file descriptor open. (According to its documentation, HP-UX's close() does this.) The caller must then once more use close() to close the file descriptor, to avoid file descriptor leaks. This divergence in implementation behaviors provides a difficult hurdle for portable applications, since on many implementations, close() must not be called again after an EINTR error, and on at least one, close() must be called again.

How did this discrepancy go unnoticed for so long? Because no one checks close return value. Everyone nods and say you should, and then keep writing code without checks, because come one close never fails. If you do check you are the weird edge case. The one people whisper about "why does he have to be such an annoying pedant".

And while I'm ranting, the same goes for undefined behavior. Of course you shouldn't rely on undefined behavior. Of course of course. But maybe, just a little pointer casting is fine?
There is something soothing about these noises. They reassure you that the device is doing something. I've never seen a MiniDisc player in person, but I remember PSP with an optical drive that made similar noise while your game loaded.
The key is to catch the people who buy stolen bikes in bulk. The thieves need somewhere to fence the bikes, without that they'd be stuck trying to unload them on the street. Years ago in Toronto they arrested a single person who had warehouses of stolen bikes [1]. After that bike theft dropped dramatically.

1. https://en.wikipedia.org/wiki/Igor_Kenk
What a wonderful collection. Thank you!
What about Adobe Animate?

"Get Animate as part of Adobe Creative Cloud for just US$20.99/mo." from https://www.adobe.com/products/animate.html

It would be a hard thing to ask various professions that developed content using HyperCard to fork over the money.
I agree, I was just using term as it is normally used.

The pithy joke about it is this:

"What do you call alternative medicine that works?"

"Medicine."
Actual link to the "wooden stake" website is here:
https://web.archive.org/web/20111203222943/http://www.thomas...
I mean, yeah, at the end you only get a raw pointer, the object managing the pointer doesn't exist anymore. I'm not a Rust programmer, but I would imagine it's equivalent to the following C++ code

auto ptr = std::string(something).c_str();

This creates a std::string, calls c_str() on it to get the pointer. However, since the std::string isn't stored anywhere, its lifetime stops and it is destructed (this is why these are called temporaries), and the pointer is now invalid. The right way of doing it is this:

std::string str { something };
auto ptr = str.c_str();

Now, str and ptr both live in the same scope, and ptr's lifetime is entirely contained in str's.
He did more for me than I did for him.
I know you're joking, but it actually is a hard problem. Desperate people do desperate things.
Of course vi is graphical. Vi is literally short for 'visual': it was created as a graphical extension of ex.

The mark of a command line is a stream of commands and responses, not whether it does ascii art to emulate graphics.
Adobe is going acquire one of them
I don't really think a communication from Malwarebytes is the place for sarcastic comments. Lets say if you are working with a US government this could have enormous implications. I've talked to a lot of clients who ditched Zoom for Microsoft Teams due to their earlier mistakes.

Also I find it funny that the heading "Not patched yet" is solved by the headline "Security done right".

Lets say if you are working with a company that deals with say healthcare information a 0-day certainly doesn't make things safer and since it is not patched yet this is definitely not done right.
Let's also change all conference names that end in "con" to something else. It is extremely offensive to french speakers.
XD was a tactical response to Sketch and Figma's encroachment of Photoshop as an UI/UX tool. Whilst XD is now a better target for a like-for-like comparison, from a historical perspective, Adobe is on the back-foot trying to re-capture the disciplines which no longer use their product.
I have never used Teams but is 1GB of memory usage really an issue in 2021, when most laptops have at least 16-32 gigs of memory? It's been years since the last time I actually worried about how much memory some software on my laptop was using.
Hey. Always interesting to find a like-minded developer. Care to share a bit about what you're looking for? Personally, while most work expects you to add new things, I'm somehow drawn to the opposite where I want to gradually take things apart and put them back together in a free-er way, if that makes sense. I could go on, I find this an interesting subject.
Omg, thanks!

I don't know how I missed that all this time... I've going off the "zero/dot" releases of https://winpython.github.io/ this whole time.
I completely disagree with your comment and I'm not talking about different things. There are a lot of side projects on Github to replace various parts of a Linux system, and various parts of systemd. They exist. What else were you talking about? When you want to replace something then you have to re-implement all its functionality. Systemd isn't any harder to replace than anything else, and it certainly didn't create the problem that someone has to actually put in the work to write the replacement. If it feels like too much extra work, then maybe ask yourself if it's really worth it to replace it to begin with? What are you really getting out of it?

The "club" is people who were invested in that particular project. If you're just a free user and you didn't have an active investment in pushing the project forward, then you're not in that club. Sorry, I don't mean to be blunt and I'm not trying to insult you, but the honest truth is that your opinion doesn't really matter unless you have the resources or the clout to push it forward. And if you did, then you'd be the one running the company, and then people would be complaining about how you're marginalizing them. Again I don't meant to be rude here or shut down your opinions or anything but let's just be real. Someone's got to foot the bill eventually, and when you're that person you get to be the one who says no, and then everyone else gets to be mad at you.
like C++, rust frees values once they've gone out of scope; the result of

CString::new(filename.as_str()).unwrap()

is a temporary which is freed at the end of that line, since the .as_ptr() returns a non-lifetime-encumbered value.
Yes, !0 would work. Or, to make the intent even more clear:

-1_i32 as u32

Definitely better than declaring your own function prototype.
I don’t think it’s a green screen, it appears to be a painted wall — you can see the seams and perspective to it.
The Piraha People
I have on occasion been called a reasonable person, and good heavens! I could understand that in a functional language with lazy evaluation, but that doesn't fit at all with my mental model of how C++ works. It can't be a macro, because the VLOG parentheses would need to enclose the entire expression. It can't just be the normal operator<< , because then the expression would always be evaluated. I suppose expression_with_side_effects() could return an object that is implicitly convertible to string, and the actual side effects happen in that optional conversion, but that would require lots of cooperation from the user.

I'm almost scared to ask. How is that even implemented?
Maybe that's all true, but in the specific example in question, he just does a string conversion and calls into a C library via ffi (for a reason he has justified). I think he has a real point about how the compiler should find this error if Rust is to fully match its marketing, so to speak. Clippy (a tool for style issues as much as anything else) doesn't seem to be an appropriate place for such error checking.

On balance Rust does a great job, but "be even more careful in unsafe Rust than in regular C++" is probably a losing battle.
Ask HN: What is your favorite keyboard?
Hey everyone,

Keyboards are our main tool (besides the computer) when doing our daily work. As such, its quite normal to develop a strong preference over time. My personal favorite is the Leopold FC660C which I bought in Japan while visiting.

What are your favorites? It can be standard, mechanical, or even ergonomic models.

Cheers!
I'm not trying to change the world here, just making a practical utilitarian point: Due to an HR mistake, OP is underleveled and likely at the top of that level's pay band. You don't want to be here because being a the top of your pay band limits your future raises. It's in OP's financial best interest to bring this up with HR ASAP and get it corrected.

If you think promotions are straightforward when you're performing well and found to be underleveled, then the problem is less urgent, but in my experience this is not the case. As the saying among employees goes: "It's easier to get hired at [FAANG competitor] than to get an internal promotion." I know that we HN folks have heard this one before, so I'm kind of puzzled by the downvotes.
Yeah, that's what I thought. I remember hearing that you couldn't magically export your AS3 into HTML5 like you can with something like GameMaker.

Somewhat ironically, due to something like Ruffle, exporting to an SWF like before might actually be a viable option again, since you'd get all the nice sandboxing of modern browsers while having pretty-ok flash compatibility.
Yep, Google had already gone ahead with this anyway.

> Google has already implemented both First Party Sets and SameParty cookies in Chrome 89, the current version, where they are included as an "origin trial" to "allow developers to try out new features and give feedback."
As well, Firefox now defaults to DoH (DNS over HTTPS), which may be bypassing systemd-resolved by doing DNS resolution in the app instead of calling `gethostbyname()` (`man gethostbyname`) and/or `getaddrinfo()`.

`man systemd-resolved` describes why there is new DNS functionality: security; "caching and validating DNS/DNSSEC stub resolver, as well as an LLMR and MulticastDNS resolver and responder".

From `man systemd-resolved` https://man7.org/linux/man-pages/man8/systemd-resolved.servi... :

> To improve compatibility, /etc/resolv.conf is read in order to discover configured system DNS servers, but only if it is not a symlink to /run/systemd/resolve/stub-resolv.conf, /usr/lib/systemd/resolv.conf or /run/systemd/resolve/resolv.conf

> [...] Note that the selected mode of operation for this file is detected fully automatically, depending on whether /etc/resolv.conf is a symlink to /run/systemd/resolve/resolv.conf or lists 127.0.0.53 as DNS server.

Is /etc/resolv.conf read on reload and or restart of the systemd-resolved service (`servicectl restart systemd-named`)?

Some examples of validating DNSSEC in `man delv` would be helpful.

NetworkManager (now with systemd-resolved) is one system for doing DNS configuration for zero or more transient interfaces:

man nmcli

nmcli connection help
nmcli c help
nmcli c h

nmcli c show ssid_or_nm_profile | grep -i dns

nmcli c modify help

man systemd-resolved
man delv
man dnssec-trust-anchors.d
Rich people are all equally useless. They're all parasites who profit from the exploitation and monopolization of people and economic resources.

There is no such thing as a 'self made' millionaire or billionaire. They just got lucky and most of the time somebody helped them.
So You Want a Career in Cybersecurity?
AI - really Machine Learning - is "just" massively parallel software for using linear algebra on high-dimensional matrices representing huge data sets.

Any programmer today can feed anything into the machine, but as the old saying goes, GIGO.
They have worked on improving error messages between Windows PowerShell and PowerShell, e.g.

PS C:\> 1/0
Attempted to divide by zero.
At line:1 char:1
+ 1/0
+ ~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException

is now:

PS C:\> 1/0
RuntimeException: Attempted to divide by zero.

And everywhere else they've tried to make a shorter, clearer default error.
I was able to add dimming capability to the lights in my rented apartment where it wasn't available before using smart lights. That was a pretty big benefit to me.
Upstreams were very limited, and HTTP requests send cookie data in each GET.

For instance, if you had a 128kbps DSL upstream and each request was 2KB (loaded up with cookies), you're already limited to 8 requests/second. A cookie-less domain for small resources helped this a lot.
Only if you have JavaScript enabled.
They are doing it anyway.

> Google has already implemented both First Party Sets and SameParty cookies in Chrome 89, the current version, where they are included as an "origin trial" to "allow developers to try out new features and give feedback."
Fast People Access Data (Personal, Professional & Social). More than 3 Billion + profiles available in our Private Datasets with over 170 data points
Deep explore of Companies & Officers Wordwide
Prevent your Organization from Data Breaches, with our most reliable Leak Sources
People & Corporates Money Laundering discover
Prevent Risk Business: People and Organization Anti Fraud & Corruption activities Search Engines
Discover multiple target files and documents on the CDN Amazon Web Service
Image Analysis Toolset (Image AI Prediction, Sentiment, Image People Search, Logo and Face Recognition)
Research Social Networks as never before (Coming Soon)
One Click - One Space: Acces all the Business Intelligence in your favourite web browser, in a Only Space Operations Based System
Web Based User Interface. Saas Busines Intelligence
Signal Intelligence Chatbot: Generates Intel Data Reports directly from your Mobile Phone
Pay per use. No additional fees

Reduce Information Gathering time processes and Invest on Análisis and Strategy
Smooth and secure transition from “Off” to “Online” researchs
Keep your Business Data Safe. if a Breach appears, "Effect Group" will find.
Reduce Business Risk impact. Our Search Engines allow Organizations to have the best Anti-Corruption knowledge, incluiding Money laundering practices.
Adaptative Intelligence. Real Time Web Data extraction. One “keyword”, multiple Sources, including Amazon S3 CDN Services
Fake News, Fake Profiles, Fake World… Discover the truth behind Images. AI Technologie to improve reality.
Explore, extract and analyse the seen and hiden Social Networks Data. A world of relationships waiting to be discovered (Coming soon)
Access "Effect Group" anytime, anywhere, from any device. Our Saas Intelligence Systems are accessed via web browser. Responsive Design for a better User Experience
Take your research wherever you go. Intelligence Signal ChatBot available. All the Intel at your pocket.
High Privacy Standards. Private Servers in Sweden. End to end encription
Forget about multiple subscriptions and pay for what you really need in a Single Service. We optimize processes, but also resources.
Apache Software Foundation to Attempt to Form New Mesos PMC
If I followed this advice I would be perpetually taking 3 months off, and never get back to working.

Don't diagnose people in 10 sentences. Have you ever tried solo developing? Without the extrinsic motivation, and forced external schedule it's fairly difficult for most people to stay on target with all the distractions we have today.
If it's just the privileged few that go vegan, how would it be a solution to anything at all? That's why I assumed this person meant everyone.
> I find `with myAttrs; myExpr`

To make it clearer, he is saying that he does

with { foo = "bar"; }; <some other block>

instead of

let foo = "bar"; in <some other block>

The differences here so other people can follow along.

1. with will not shadow variables defined higher up. This can be either desirable or very confusing.

2. let is recursive by default, meaning you can reference other variables in that block. This behavior can be mimicked with `with rec {}`
So this YT video of 3:47 is going to prove that Ruby is faster and better than Unity? This is like comparing BASIC and C, but making sure BASIC is on a quad-core, and C on a 386 to make the point work.
Didn't they route calls through China for no apparent reason as well?
Myst was originally built using HyperCard, which I always thought was rather clever
Can't you just continue to use Signal as before, without using the cryptocurrency?
There's a difference between implementation details and core abstractions you need to know to understand a device. That git stores data as an immutable DAG with a layer of pointers to attach human-readable names to things, that's not an implementation detail. That's a core abstraction.

It's not like knowing the internals of an ICE, it's like knowing a car moves using wheels, that these wheels must touch the ground for the car to be controllable, and some of them must rotate to change the direction of movement. Knowing such "car internals" isn't necessary for you to be able to turn the key and get it to roll - but it is necessary for safe driving. People who didn't master these "car internals" are the ones who speed on wet ground, don't understand safe braking distance, or why their car skids.
This has to be one of the most misleading reports I've seen in a while and especially damaging because it's now been cited by many news outlets. It is misleading for 3 very big reasons:

1) It counts the non-edible portion of food as "waste". Consider this just in terms of bananas: About 50 billion tons of bananas are produced each year. The banana peel, not edible, is about 30% of the banana weight, which means you're already ready starting with 15 billion tons of supposed waste on bananas alone.

2) A significant amount of waste not accounted for in the underlying UN report is actually not wasted: If not suitable for human consumption it is often used in animal feed (often pig slop) or composted back into productive material for further use on the farm.

3) Even food that is well & truly wasted isn't really contributing all of its carbon or the emissions released to grow it back into the atmosphere because carbon is actually sequestered in the food itself, the same way and for the same reasons that planting new trees sequesters carbon.

I am by no means an anthropomorphic climate change denier, but sloppy studies like this do significant damage to the cause by giving such people ample ammunition by which to paint the entire body of science with the same "fake news" brush.
My gut says the same. The costs of trying to scale Adobe XD to the same utility as the best-of-breeds will be known pretty soon, and Adobe will have two options, grow or acquire, and a price against both. It'll be straightforward thereafter.
Podman is very, very cool, but it's not quite what we're doing.
I’ve used Photoshop since before you some of you people were born. (I’m 37, but I started very, very early.) I breathe Photoshop. I live in Photoshop. I am like a surgeon with Photoshop.

And the vast majority of the time, using Photoshop for a design task is gross overkill, or it’s poorly suited to the task in subtle ways.

It never felt right for UI design. They've made nice improvements (hello, Artboards), but it never “feels” quite right. Am I using the right color space and management settings? Can I override that symbol? How do I edit that global color? Oh god, did I rasterize that layer!?
Agree. The comparison only works if you don't dig, or not ask questions.
I’m claiming there is a wide gap in desirability of various regions around the world, and there is a wide gap in wealth/income also. This dynamic will result in the situation where the most desirable places (such as CA) will have insatiable demand.

Creating enough housing supply to satisfy it, whether through higher density or sprawl, will make the place less desirable (have to share resources and amenities with more people), so residents will of course oppose it.

Maybe smoke season will dissuade people.
It probably depends strongly on how annoying the connection is. For most people irritation is a much stronger motivator than principles.
Where can I get info about Nix 3.0 new features?
Of course I participate in academic and research forums.

For example, see the following video:

https://www.youtube.com/watch?v=PJ4X0l2298k

Participating in forums such as Hacker News is also important :-)
Or how about people on HN are educated about zoom and therefore hate it.