skysight-inc/HackerNews huggingface dataset:
Steel is very problematic. 90% comes from China. Proven reserves of iron will run out at some point and we'll need to find new ones. Smelting uses coal. Iron mining is environmentally destructive.
> I'm just left confused why I'm meant to care.

Semiconductor supply chains have been of recent interest due to unpredictable supply shortages, sanctions, export controls, diversification of electronics manufacturing from China to SE Asia, and billions of national investment in duplication of Asian fabs on US, EU and Japanese soil.

Those who care about semiconductor supply chains include those whose businesses depend on availability and integrity of computers, automobiles, aircraft, cellular networks, mobile phones, satellites and other communication systems.
> And we didn't even talk about their sweatshops in China where employees kill themselves an awful lot, the Chinese government boosting iPhone production with child slave labor, and all the many other scandals they've been involved with.

This tired argument again.

Apple has always led the industry in their auditing of their supply chain and taking proactive steps to address illegal and unethical behaviour. There will always be mistakes but it's how you deal with them that counts.

If you're going to call Foxconn a sweatshop then arguably Amazon, Tesla etc should be called them as well.
The dockerfile is optimized for “works for the most number of people out of the box”. There was debate over using the ruby v ruby-slim image. Ultimately it was decided to go with the larger image to maximize compatibility.

That said, keep using Alpine! There’s no reason for folks to stop doing what they’re already doing if it’s working for them.

The new dockerfile is meant more for people who are just getting started that aren’t familiar with Docker or Linux.
Oh you know, just around
Does anyone know more about the Galaga programmer, Tetsu Ogawa? I haven't seen any interviews, or even an idea about whether he might be alive or dead.
> in a way that seemingly nobody knows about when you’re Googling?

On the first page of results on DuckDuckGo for the query

resolvconf unbound configuration

you can find:

https://wiki.archlinux.org/title/Unbound#Using_openresolv

which describes the issue/feature and links to the upstream documentation. So that seems pretty Google-able.

You can also get it via

man resolvconf.conf

https://man.archlinux.org/man/resolvconf.conf.5

To return to

> at what point...

Maybe about a decade, in the case of openresolv? Looks like it's been the most common resolvconf implementation since the early 2010s at least, maybe longer.

I could see myself running into this if I tried to run a DNS server with a dynamic IP for some reason (maybe I fix the IP with a DHCP reservation instead of configuring it on the server?). It would probably take me some time to figure out what was going on, and I'd be frustrated, too.
For someone who hasn’t written any larger rust programs. Is the compile time worse than c++?
I don't recall whether this was ever stated explicitly, but I always had the impression that this is one of the elements of Apple's strategy that is still driven by the tribal memory of the late 1990s turmoil. Both Steve Jobs and Tim Cook were there at the time, and especially the former (who also had witnessed a 1980s bust) was determined to never be in this position again.

So as a consequence:

* Apple is hoarding cash to an extent that business analysts dislike (although Tim has reduced this to some extent)

* Teams are being run leaner than they'd like to be (not nearly as much so as in the pre-iOS times, admittedly)

* Conversely, since the company builds good reserves and not too much bloat in good times, it can and will avoid overreacting to bad times.
May I recommend Dance Dance Revolution / Stepmania.

I have yet to find a good setup in Stepmania that is fundamentally easier to approach than endless mode on DDR X on the PS2. They have the songs divided up in levels of difficulty. I can roll in level 2 at this point after getting the hang of 1/8th beat steps, this took months (*edit: off and on for years). Before that level 1 kept me in heart rate workout level whatever they call it zone 2 and I'd pop into endless level 2 if I wanted to push it into high intensity (zone 3 I think). Now it's more like level 2 hits me zone 2 and if I want to push it I go to level 3. A decent foam pad with exercise mat like things in it for support seems to run about $100, maybe a little less now that the pandemic-mania is starting to fade.

I've had a Python script started for months to parse and only allow songs in the Stepmania library that have a difficulty level relating to the DDR X endless level arrangement (*edit: grammar is difficult). Their interface leaves a bit to be desired and I find hacking around on my own Python script less daunting than hacking around in someone else's Java.
It's a PR stunt. Get shareholders and the public talking about 'oh poor CEO he lost a few of the many many millions he earns a year'
Software Engineering at Google has lots of valuable advice and best practices to accomplish this - https://abseil.io/resources/swe-book/html/toc.html
> Plus the on bench and locker room time means you get to know one another over time.

It's so lonely being a goalie sometimes. We never get any bench chat except for the short intermissions.
My vote is for Nim too, but I'm decidedly biased. It's allowed us to do things in embedded that would've taken 3, 4 times as long and with more developers to achieve in C++.
It was right then, but it's kind of dated and misses an evolutionary lesson: beautiful code isn't enough, it has to be safe, beautiful, maintainable, productive, understandable, and resource efficient.

Ruby is still great for throwing something together fast and maintaining it until it runs into scale problems. It added gradual typing with sorbet and RBS.

Crystal is a neat typed, compiled Ruby-alike but it's buggy.

Rust hits more of these but it's ugly. Uglier than Python and approaches C++-level eyebleed. Rust generics aren't as flexible as they could be because type constraints don't have union and specialization is painful. Tag structs are laborious. Go hits more of these except it's not as flexible and not quite as safe as Rust. Rust makes enormous binaries and compiles slow and the cargo index download is glacial, I'm surprised they don't have an "sccache" for it. Go is easy to learn but then the capability of it plateaus. Go compiles and tests insanely fast.

Rust should rebase its type system to have union types, i.e., foo: i32 | f32. Also, more granular and specialized type constraints (negation, union) on generic trait parameters.

Elixir (on erlang) can be productive. It's gorgeous, it's fast, it's powerful, and fairly expressive.

Haskell and Idris are beautiful and powerful, but inaccessible to most software engineers.

Pony is beautiful, productive, extremely safe, and fast.

Zig, Nim, Kotlin and friends are all moving in the right general directions. Swift is alright too.
Recursion is great if that's the only way to "loop" in said language.

Erlang, Elixir, Haskell, APL, Prolog, etc.

I'm tempted to say you have the question backwards: loops are somewhat arbitrary; why do imperative languages need loops? Imperative/OO languages need loops because they have no other way to write iterative code. Functional languages do: recursion. Recursion is not a "feature" of functional languages, it's a natural consequence of their design. On the other hand, early imperative languages didn't support recursion at all and even modern ones support it poorly, forcing them to use something else to iterate—loops.

Recursion, by itself, does a poor job of reflecting intent. if we have a for-loop, we know that we're taking n steps or iterating over every element of a list; if we have a while loop, we know we're going until we hit some condition. Not much, but recursion doesn't even give us that.

This is where higher-order functions come in. Map, filter, fold and friends package up common recursive patterns into library functions that are easier to use than direct recursion and signal intent. When you see a map, you know that it will apply a function to every element in a list and nothing more. Moreover, when you use map, you know the iteration is going to be correct—you can't make off-by-one errors or skip elements in the list. The same idea holds for all the other higher-order functions available in functional languages' libraries, and there are a lot.

TLDR: It's worth knowing, but don't piss off your professor because you will need to pass their class.
I walk my dog for an hour every morning; then, I will come back and do strength training in my living room. That's usually one or two exercises from a pool of bodyweight exercises like pull-ups, push-ups, jumping squats, rock presses, jumping lunges or burpees. I typically go for total count rather than sets and keep trying to improve how many I can do in a row without taking a break. I alternate exercises each day to rest muscle groups. Then I stretch and get on with my day. I do this every day unless sick or injured. I usually get this done within 5 to 10 minutes.

I've experimented with doing longer workouts at the gym 2-3 times a week, but my brain is good at using time shortages as excuses to skip workouts. Eventually, weeks go by without doing any workouts at all.

If I can get my workout done in the time it takes me to go to the toilet, I can never tell myself I don't have enough time for them. Doing it daily forces my brain to quickly normalise it as part of my routine.
The Dockerfile is not optimized for a development environment. It might work for some cases, but this default file is really all about “how can the probability of a successful production deployment be improved out of the box?”

Getting a Docker compose dev env working is another can of worms. Maybe I should write about that next?
Another thing is that back in 2004, a larger % of code was hand written. So, choosing a new language didn’t come with as high a switching cost outside of learning a new syntax.

Now, if you deviate from PHP, Python, Node, Rails, etc., to one of the new “esoteric” languages, you have to learn a new language, plus reinvent the wheel in a lot of areas that you’d otherwise be getting for free.

So you have brilliant developers working in esoteric languages trying to complete 25-50% more code.

Even if you can swim upstream fast enough to compete with highly competent devs working in a more popular language, then you get into hiring / onboarding challenges, documenting and debugging custom features (features that would otherwise be a “solved problem” in other languages), acquisition due diligence, etc., that persistently weighs against you.
It really isn't, lots of F500 tech companies are not cutting and making a selling point of the fact to investors this earning season.
I set up a small home gym consisting of a power rack, different bars for different exercises and plenty of space for calisthenics, with Olympic rings where I mostly do pullups and dips.
I've used to do powerlifting but after a lower back injury I'm more into body weight exercises.
I like to walk, 45-60 min a session.
I know many others have said this, but it is true so I will repeat: find what you like, it's way harder forcing yourself into a physically challenging activity you dislike. When you like what you're doing, you naturally try to improve, so getting fit becomes fun and rewarding and not some bad chores.
Muay Thai - 5 hours a week. Great aerobic exercise; get flexible; I highly recommend that anyone (who hasn't tried it) give it a go!
2014

Almost 10 years ago, I translated this article to Telugu.

https://avilpage.com/2014/12/python-paradox.html
Ok I enabled computation for a little while on prod, but you have to know this super secret keyboard shortcut to turn it on: Control-Option-E. I'll leave it on at least a few days, and if you want to try more I can put up a more permanent link to a build with it.
Brazilian jiu jitsu. I’m small and in my late 30’s, so my goals are a little different than the young, strong wrestlers in their 20’s (and some days it feels like they’re all young, strong and in their 20’s). I like the technique and game of BJJ. I used to do a lot of trail running. I’ve tried lifting weights several times, but I always dropped out of it after a year or so. I need a game to keep me engaged, and there’s a nice community aspect to my Jiu Jitsu gym.
Yup also common in the Midwestern US
What an interesting theory. Talking to new hires, they learned python because that's what they were taught in school. Maybe in the 1990's when Python was competing with PERL for 2nd generation scripting languages that was the case that enthusiasts picked it up (along with Java beans, it was the 90's. :), but Python is institutional now in CS coursework.

EDIT: I just realized this was 2004. And now I agree with him.
I don’t own a car. That means that most of my transportation, walking and biking, is exercise as a side effect.

I also bike indoors and outdoors as intentional exercise.
> Rust isn’t as safe as GCed language

Safe rust should be. And C# is a notable example of a GCed language that also has 'unsafe'. Along with most of the GCed languages with FFIs.
...sounds a lot like insider trading to me.

Can somebody explain why it would/ wouldn't land under insider trading laws?
I just used a regular soft bandage tape (‘leukosilk’). In the beginning I sometimes ripped them off in the night, so I’d go with something soft.
The C++ sample is definitely a strawman: you allowed Rust to `use std` but C++ was not permitted `using namespace std`. Still ugly, less so. And further, I think your "deoptimized" Rust sample should be the headliner, since you point out that the Rust sample sacrificed readability for performance reasons.

> The next noisy element is the <P: AsRef<Path>> constraint.

Should be replaced with `fn read(path: impl AsRef<Path>)`

> We’d have to use some opaque Bytes type provided by the runtime.

A less joke example might be to have `pub type Bytes = Vec<u8>` as a secondary declaration.

I guess the rest of the post is just hyperbole. Next time, take an example that has a struct with a lifetime parameter implementing traits that have lifetime parameters. That's some ugly syntax!
cycling for 11 years. and just recently firewood cutting
That's a different situation that what I am discussing - where the defendant is directly using AI.
approaches C++-level eyebleed

Have you ever hit F12 on any C++ std function or data structure? Every time I do it genuinely feels like I'm back at day 1 freshman year of an undergrad CS degree.
Early days, but trying to solve the lack of data problem with a project called "Oxen".

At it's core it's a data version control system. Built from the ground up to handle the size and scale of some of these ML datasets (unlike git-lfs or DVC which I have found to be relatively slow and hard to work with). Also building out a web hub similar to GitHub to collaborate on the data with a nice UI.

Would love any feedback on the project as it grows! Here's the github repo:

https://github.com/Oxen-AI/oxen-release#-oxen
Ask HN: Right to Repair for Software?
How would you implement a right to repair for software in 2023?

Perhaps you could change copyright law to require either public source code or source code escrow before software could be eligible for copyright protection. Plus some default rights, like right to modification, rebuild and reinstallation for individuals.
Small program to generate random bytes to stdout, using original 2008 randombytes() function that presumably inspired librandombytes.

Usage:

a.out number_of_bytes

For example,

a.out 128 > data
od -tx1 -An < data

Taken from public domain source code by djb and jmojzis. Tested on Void Linux with musl.

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <poll.h>
#include <errno.h>
#include <sys/stat.h>

int strtonum(long long *,const char *);
int strtonum(long long *r,const char *buf){
char *bufpos=(char *)buf;
int flagsign=0;
long long i;
unsigned long long c,ret=0;
if (!buf) goto failed;
switch(buf[0]){
case 0: goto failed;break;
case '+': ++bufpos;break;
case '-': flagsign=1;++bufpos;break;
default: break;
}
for(i=0;bufpos[i];++i){
c=bufpos[i]-'0';
if(c<0||c>9)break;
c+=10*(ret);
if(ret>c)goto failed;
ret=c;
}
if(i==0)goto failed;
if(flagsign){*r=-ret;if(*r>0)goto failed;}
else{*r=ret;if(*r<0)goto failed;}
return 1;
failed:
*r=0;
errno=EINVAL;
return 0;
}

int writeall(int,const void *,long long);
int writeall(int fd,const void *xv,long long xlen)
{
const unsigned char *x=xv;
long long w;
while(xlen>0){
w=xlen;
if(w>1048576)w=1048576;
w=write(fd,x,w);
if(w<0){
if(errno==EINTR||errno==EAGAIN||errno==EWOULDBLOCK){
struct pollfd p;p.fd=fd;p.events=POLLOUT|POLLERR;
poll(&p,1,-1);continue;
}
return -1;
}
x += w;
xlen -= w;
}
return 0;
}

void randombytes(unsigned char *,unsigned long long);
/* it's really stupid that there isn't a syscall for this */
static int fd = -1;
void randombytes(unsigned char *x,unsigned long long xlen)
{
int i;
if(fd==-1){
for(;;){
fd=open("/dev/urandom",O_RDONLY);
if(fd!=-1)break;
sleep(1);
}
}
while(xlen>0){
if(xlen<1048576)i=xlen;else i=1048576;
i=read(fd,x,i);
if(i<1){sleep(1);continue;}
x+=i;xlen-=i;
}
}

int fsyncfd(int);
int fsyncfd(int fd){
struct stat st;
if(fstat(fd,&st)==0&&S_ISREG(st.st_mode)){
if(fsync(fd)==-1)return -1;}
return 0;
}

void byte_zero(void *,long long);
void byte_zero(void *yv,long long ylen){
long long i;char *y=yv;
for(i=0;i<ylen;++i)y[i]=0;
}

static unsigned char buf[4096];
int main(int argc,char **argv){
long long i,l;
if(!strtonum(&l,argv[1])||l<0)exit(0);
byte_zero(buf,sizeof buf);
while(l>0){
i=l;
if(i>sizeof buf)i=sizeof buf;
randombytes(buf,i);
if(writeall(1,buf,i)==-1)exit(0);
l-=i;
}
if(fsyncfd(1)==-1)exit(0);
exit(0);
}
Have you tried Ring Fit Adventure? It seems like exactly the game you're after.
It's also important not to overreact to temporary hiccups. This time Southwest crapped out. The next time it will be some other airline. An important part of resilience is how they learn from their mistakes.

Southwest has a strong, resilient internal structure[1] that ought to help them learn from this, perhaps better than other airliners would. I wouldn't write them off so quickly.

When judging things on their resilience, I think it's important to not look at single events and then pass judgment. Better to apply theory to the system and make predictions under a wide variety of upsets.

[1]: https://www.forbes.com/sites/darrendahl/2017/07/28/why-do-so...
I'm 72 years old and diabetic. There are significant limits on what I can do. My wife and I will do 30 minute walks 5 to 7 days a week. We go fast enough to get my heart rate up to the lower end of the aerobic zone. I also do strength training at the YMCA 3 or 4 days a week. I use the machines rather than the free weights. I worry about getting injured using free weights. I can't do many of the exercises other people have described here, but I do what I can. My weight is in the middle of the Normal BMI range, my diabetes is reasonably well controlled, and I think my strength is good for a 72 year old.

My recommendation would be to find an exercise that you enjoy doing, do it often enough to improve your health, and take your time; don't rush it. If you injure yourself it'll set you back to the beginning.
This is an already solved problem:

https://en.wikipedia.org/wiki/Gpl
Rust is "not as used" but it has a following who hype it to the point that I've avoided taking time to relearn it just due to the strange vibes I get from their community. These people once mentioned, on twitter, that people who hate systemd are like reactionaries (as in, politically far right), as if a choice of init is a correlative of political ideology. When you view others' preferences for fucking software as so important to your world view that they might as well be nazis[0], you can tell your priorities are not in order.

They hardly seem like iconoclasts in that respect, it feels like there is a lot of group mentality there which is strange to me. People in a place with strange groups dynamics might not be aligned with the public outside the group (who are oblivious to the group think since they are just "normies"), and so the group is sure, against the grain in some respect, but that aspect of being separate from the general population is due to adherence to groupthink, not really due to individual eccentricity or originality.

Another aspect, rust is being hyped by some big names in Tech, so at this point, rust feels alot more like Java in its early days, so not really niche but just new and before mainstream penetration.

[0] Yes, some anti-systemd people literally say Lennart Poeterring is hitler or some nonsense, they are idiots. I just think the software he pushes is not the best.
Since this essay cycles here on HN perennially and inevitably people are curious about how your views about lisp, or other languages have changed, you might want to have a follow up page that you forever keep on updating as your views change? Maybe linked from the original article?

Such as:
Year 2033 - lisp is still a great language for $xyz
Year 2043 - I was wrong, I should have used COBOL all along, how was I so blind?
When it should belong to customers and employees
Things you could do on a jailbroken PS3 or JTAG'd Xbox 360 (besides playing pirated games) != things you can do on an Xbox One with dev mode enabled, including but not limited to: running Linux; viewing and controlling thermal performance of the console; modding games/enabling cheats; theming the UI; playing game discs made for a different region (e.g. PAL); backup game save files (I think this is a given on today's consoles but it was more restrictive back in the day).
Thanks for the well thought out response. I hope Matano succeeds. I can't email you since my hn presence isn't public/social but I might be involved in evaluating your product some day soon and would chat and share thoughts with your folks then.
So essentially the basics of building any resilient system. Sad that our market economy punishes this approach in the general case.
most languages have support for tail call optimization so really this is an irrelevant question
Sure, violence will likely always happen, since people can kill with just their two hands too. The thing with a gun is that its a lot different than most other ways of enacting violence, in the sense its a lot easier to be brutally successful with a gun and a lot harder to be stopped. The numbers of dead and wounded from some of these mass shootings are absurd. You'd have to be a decent bomb maker to get similar numbers, and the FBI tries to anticipate people like this by limiting access to precursors for example. We don't see very many bombings in this country anymore, so I guess their efforts work decently well. Likewise with a knife, maybe you'd slash a few people but a lot of people would be able to get away, and if someone comes with a blunt object that puts some distance between them and you, the knife might only hinder you.

The gun though. You can get a Glock with a 19 round magazine and fire it as fast as you can press the trigger. You can even practice with this thing at the gun range all day until you are a crackshot. People can't get close to you to stop you. People can't run away from you as easily either. Even if someone else in the room has a gun, they'd have to somehow beat you on the draw while you already have a gun out cocked and loaded. That's why mass shootings usually only end after the shooter is entirely surrounded by swat in body armor, or they shoot themselves.
These days, it is mostly long walks (10k+ steps) with the dog. Dogs really help get you out of the house. There is also the occasional yoga, rollerblade and bike riding too.
good question !
Post a pic
Paid access only.
Obvious bait