skysight-inc/HackerNews huggingface dataset:
Appreciating what Lisp is capable of doing (think macros), and having worked through SICP some twenty years ago, and after having tried to make a deep dive in CL and Emacs Lisp two years ago, I come to the conclusion that there is no silver bullet in Lisp-land. Python is a good enough Lisp, as Peter Norvig has concluded. And it’s got all batteries included. Ain‘t nothing it can’t do. Building websites, doing maths, automating, except building compilers and OSes. But Lisp won’t compete in that field anyway.

Programming languages are there to express ideas and solve problems. I can think of more elegant ways to express ideas (functional languages for instance), but Python is an excellent ecosystem for solving problems.
Razer was by the Chrome team, subsetting (plus some web-compat polyfillable superset) HTML and CSS consciously by design for performance and code size. It would have been great for Cobalt's target.

Cobalt is mostly whatever YouTube can afford to implement and run on TVs.
You can get smart switches, they require wiring but they work as switches without smart system. I have Zigbee and ZWave and both have been reliable.

I primarily use the remote to turn on light switches from across the room. It only saves a couple of steps but the seconds add up. The big one is turning on porch light at night while standing on porch. I have turned off left on lights on way to airport. I have also set up routine to turn on lights in evening while I’m away.
The need for a journal in the first place is, in small part, to coordinate peer-review. Eliminate pre-publication peer review and you eliminate, in a small part, the need for a journal.
> but screens emit light, and maximum contrast puts additional strain on the eyes

Depends on the screen. You don’t know if the viewer is using e-ink or something like that (or even printing to paper—though in that case especially, colours specified in your stylesheet are more likely to be just ignored). If they’re using an LCD or similar, you also have no idea about their brightness settings. They might be ridiculously overbright, as is stupidly common, or “maximum contrast” may actually be delightfully pleasant because they’ve got sensibly-set brightness. Certainly for me in my current lighting circumstances, simple black on white will look delightful, matching the ambient lighting neatly.
The amount of complexity created in the desperate attempt to avoid learning k8s APIs has at this point, dramatically out complexified k8s itself.
I don’t quite understand the point in all this. Design tradeoffs are still a thing; did we all just forget?

“Abortions for some... miniature American flags for others!”
The two reasons are invalid for Pixel phones:

1. Pixel phones display an "unlocked bootloader" warning (which can't be disabled) during boot. In case it is re-locked with an additional signing key installed (Pixel-s are literally the only phones which you can do this currently in the market), a similar screen with the SHA256 hash of the public key is displayed.

2. Unlocking does not void warranty.

The only reason Google is doing this is they do not want to have two separate SKUs and pay extra cost to configure each phone physically as unlockable or not in the factory.
Risk of fire due to all the counterfeit cables in the market.
I definitely agree. More than once I've taken a monolith and sliced out a small piece of it to run as a separate service. That's been a significantly less painful task than trying to aggregate multiple microservices into a less expensive monolith, especially when multiple microservices use the same underlying packages but different conflicting versions or different global configuration.
Headline is "Tech Workers Aren't as Rich as They Used to Be" and to save you a click, the TL;DR: is the death of ZIRP erased the inflated paper value of public and private tech stocks.

Key takeaway here is you should never plan your life around the value of stock-based compensation. The story is also very specific to people who thought that stock comp was real enough that it was a sure bet they could buy homes in insanely expensive markets like the Bay Area, Seattle, etc.
This is a problem that afflicts perfectionists; they want to consider all the options so they can pick the best one, and a blank canvas has nothing but options.
You can sub JVM for something else but you should probably stick with PG and k8s.

What I am saying is the highest quality tools are still the best and will remain that way. As other things come and go they absorb the best ideas from the new stuff without losing what makes them good.

Sometimes the new stuff survives (Node/TS/Go/Rust) sometimes it doesn't (Clojure, Scala, arguably Ruby), some we are waiting to find out.

But betting on JVM and .NET has been winning strategy from a technical perspective for a long time now.

Also worth mentioning no, PHP probably doesn't work here because it's not "general purpose" enough IMO.
JVM can handle almost any workload shape, the main one it doesn't do well in is memory constrained environments (though it's possible if you really want to).
PHP, Node/TS, Python, Ruby all suffer from being single threaded so can't take advantage of properly large machines without a ton of extra complexity and you pay a high memory overhead for most of those strategies.

Go is OK, I hate writing it but it can do all the things so if that floats your boat go for it. Rust is also perfectly fine, I just find it is actually pretty slow to write because changing requirements often mean changing structure which can be harder to manage in Rust vs Java/Kotlin/C#.

Anyways, wasn't meant to be a thing about languages. Just pick a good runtime or AoT lang of choice, write everything in it, stick to conventional frameworks, choose PostgreSQL, run the lot on k8s. That is the core takeaway.
Agreed, and it doesn't even feel overwhelming to choose between all these options. It's just fun.
Same stack here, I just use Stimulus instead of Vanilla JS because it pairs well with Live View, it is sane and simple.

Put everything in a container, stick it in a dedicated server at Hetzner, and Bob's your uncle.
I’m building something with Spring Boot, Kotlin, Postgres and containers, with a small team. It’s far from boring, it’s the most fun I’ve had in ages.
I found it humerous and shared my observation thinking others might enjoy it.

Why was your initial observation about shame?
This thread may be as good as any to ask: the code I write has to deal with a huge amount of state. To summarize, my code receives millions of "change commands", which update state in memory. Data structures are hash tables, lists, etc. And some commands, once in a while, are queries like "how many of these are there now, of what does this element now point to?".

I guess I'm describing some kind of custom in-memory database engine.

Anyway, I'm confused as to how the purity of Lisp functions would or would not prevent me from writing this code? Is this a use case that is bad for Lisp, or am missing something?
$579

I think they lost touch with what single board computer buyers are looking for. At that price, there are hundreds of mini pcs with similar (or better) specs, that are just as "hackable".
There are fundamental reasons why microservices have become a bit less popular though. If you see a good, elegant microservice architecture, it looks very appealing: independently scalable parts, greater redundancy, etc.

The problem comes when you try to start a new project and begin to realize that except in simple cases, it's exceptionally hard to know ahead of time how you would best be served to split an application up into services. Once there's a network boundary between two pieces of code, there's now an API that needs to be managed carefully: deployments of the two pieces of code may not be in lockstep, rolling one back may be necessary, etc. If you got the split wrong, the refactoring to fix that could be extremely hard.

By comparison, splitting logical services out of a monolith isn't always a cakewalk, but it's usually more straightforward, especially since as you mentioned, it's totally possible to just share the same codebase between services. It could even be the same binary invoked differently.

My feeling is that it's easier to split a monolith than to join microservices that were developed separately together; they might have different codebases and possibly even be written in different programming languages. Therefore, it's probably better to start with a monolith even if you're pretty damn sure you will need some services split off later to scale.

Serverless on the other hand I am more skeptical of. I like certain products that provide generic-ish abstractions as a service: Cloud Run for example seems like a good idea, at least on paper, and Amazon Aurora seems relatively reasonable, too. But I think that they are often too expensive and do not provide enough value to justify it, especially since a lot of serverless tools don't provide terribly generic APIs or services, leading to substantial lock-in.

Both microservices and serverless APIs were sold as near-panaceas to the woes of traditional monoliths, but it's a lot more complicated than that.

edit: When I typed this response, the message I was replying to was different/much shorter.
It is relevant because the excuse made for disabling bootloader unlocking is that unlocking the bootloader can defeat a carrier lock. They are interrelated.
And when the dictator dies, so will the way
> Again, the "spirit of the law" is a fallacy. It's an illusion people would like to believe, but it doesn't exist.

You might want to tell that to multiple judges who rule daily on the spirit of the law.

TBH, I don't think that you know how the law works better than judges and magistrates do.

You know what a loophole is, right?
It's more like 35, but really ramps up in the 40s.
> they just want to use it to accomplish some other goal with as little trouble as possible.

I feel much the same way about git.
Here's an example session I just had with 4, forgive the formatting:

User
Please construct a simple webpage which allows me to add an arbitrary amount of team members, and when I am done adding them I should be able to click a button to randomly assign them into teams.

ChatGPT

I can provide you with a simple HTML and JavaScript code to create the webpage you've described. The following code creates a webpage that allows you to add team members, input the number of teams, and click a button to randomly assign team members into teams.

1. Save the code below as an HTML file (e.g., "team_randomizer.html").

2. Open the HTML file in a web browser to use the webpage.

```html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Team Randomizer</title>
<style>
.result {
margin-top: 20px;
}
</style>
</head>
<body>
<h1>Team Randomizer</h1>
<div>
<label for="memberName">Member Name:</label>
<input type="text" id="memberName" />
<button onclick="addMember()">Add Member</button>
</div>
<div>
<label for="numTeams">Number of Teams:</label>
<input type="number" id="numTeams" min="1" />
<button onclick="randomizeTeams()">Randomize Teams</button>
</div>
<div class="result" id="result"></div>
<script>
const members = [];

function addMember() {
const memberName = document.getElementById('memberName').value.trim();
if (memberName) {
members.push(memberName);
document.getElementById('memberName').value = '';
displayMembers();
}
}

function displayMembers() {
const result = document.getElementById('result');
result.innerHTML = `<p>Team Members: ${members.join(', ')}</p>`;
}

function randomizeTeams() {
const numTeams = parseInt(document.getElementById('numTeams').value, 10);
if (!numTeams || numTeams < 1) return;

const shuffled = [...members];
for (let i = shuffled.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
}

const teams = [];
for (let i = 0; i < numTeams; i++) {
teams[i] = [];
}

for (let i = 0; i < shuffled.length; i++) {
teams[i % numTeams].push(shuffled[i]);
}

displayResult(teams);
}

function displayResult(teams) {
const result = document.getElementById('result');
let html = '';
for (let i = 0; i < teams.length; i++) {
html += `<p>Team ${i + 1}: ${teams[i].join(', ')}</p>`;
}
result.innerHTML = html;
}
</script>

</body>
</html>
```

This code will create a simple webpage where you can add team members, specify the number of teams, and randomize the teams. The team members and resulting teams will be displayed on the page.
Mastodon winning would be the most cited exception to worse is better if it happened. It's just too much for normies.
Why do the new ipads have USB-C then?
That just sounds like "you don't get to own your device"
I agree but it’s not about us but about the owners of capital and shareholder driven quarterly capitalism. The economic system would need a huge adjustment to entertain a 4 day work week. Some of that adjustment would be logistical and some cultural but both are needed. A lot of us fight to keep our 5-day work week from becoming a 6 to 7 day work week so some shareholder can make a fast profit and move onto something else.
Isn't this an issue of only having one way to measure things? It's like the mathematical difference between numeric methods that get you closer to something (eg 10/3 = 3/33333....) vs analytical/symbolic methods that represent values in different ways (eg 10/3 = 3⅓).
I love the profit and Marcus!
The USB-C spec wasn't finalised until the following year and only fully standardised in 2016. The USC-C port, which Apple contributed to considerably first appeared in 2015. Micro USB, which superseded Mini USB, was and remains to be complete and utter shite. Lightning was actually well received by the tech press of the time for being significantly better than Micro USB. The "bad press" was users on this site, among others, whining about their other 30-pin gadgets.
“Twitter, whose press office has been largely destaffed and set to autoreply to requests for comment with a poo emoji, did not acknowledge the reports.”

Of course he did that.
Also the implication that the digital equivalent of adding entire new lines (new products, new features, or new backend infrastructure, I guess?) is just a "click of a mouse" glosses over the large amount of work that goes into software and tech development, especially at the largest scales. Yes, it might be faster than building a rail line in the early 1900s, but the "button click" metaphor seems a little silly.
It might be worth exploring that with a counsellor. Good ones will offer a free session and you’re not doing any wrong to try out a handful of intro calls. Best
The whole industry is stupid at this point. I don’t think anyone knows what they are doing. Everyone just wants to play with the new shiny thing. Half the engineers probably have ADHD which leads to this behavior of seeking novelty.

Everyone is obsessed with their shitty stack they used at their last company, and this shit will keep going on and on.

The only things that matters is how easy is something to debug and to change. Think about how often you have heard that as any kind of priority. So many shitty decisions would be avoided if people started thinking about that.
Most of the time it’s better to adapt existing code than light a match and start again.

For example, I’ve seen and participated in the transition of a completely undocumented custom web framework (with an entirely Redis based ORM) to an industry standard web framework with a MySQL backed ORM.

All of this happened without any customers noticing, no feature development pause, no huge “rewrite” branch requiring regular rebasing, and without the original development team responsible for the mess.

That was truly a work of art.
Still 40% more powerful than an M2, according to the benchmark in the article.
Without government force companies will not act in the interest of the consumer or employees. Seatbelts, airbags, and crash testing are obviously fantastic standards, but require significant and continuous cash expenditure. Few or no auto companies would invest in them without the public mandating it. Indeed, many companies lobbied and vehemently protested it when first implemented.
You are absolutely correct. I have made a tool that suggests the most suitable journal for a particular paper to publish. Fewer than 50% researchers care; they all want to be in Nature, price be damned. Academia is not wrong to say publishers make too much profit, but is entirely unwilling to change the way it works too. And how much is Nature supposed to charge when they need 600 highly qualified people to pick the best handful of papers amongst thousands?
The same thing will happen that always happens... some TPM vendor that has millions upon millions of devices in the field will have their private signing key leaked. MS won't be able to cripple millions of machines. Bam, before you know it someone has a patch for QEMU to have it emulate a device with random identifiers signed using the leaked key.
I find the site slightly dishonest when it's comparing current gen parts against parts from a few years ago. For the cpu benchmarks, it's comparing the i5-1340P (released 2023) against the i9-9900K (2018) and Ryzen 7 2700X (2018). The same goes with graphics. The integrated graphics in the i5-1340P (2023) is being compared against GTX 1050 Mobile (2017) and Vega 8 (2018).
It's (GPT-4) tuned to give stackoverflow-like answers and respond that it can't provide you full working solutions if you ask for something complete. You have to play to its strengths and adapt your workflow to whatever its capabilities are today, for your specific project.

I've tried to get it to do 100% of my coding for smallish projects, and it's pretty frustrating. I'd only do that as a challenge.
Really strong language without any backing arguments whatsoever. You can’t just pick some random tech and decide this is boring tech so it’s good and so the other is bad and has always been. This type of comment is so incredibly meaningless and infuriating.

Please explain why you are saying what you’re saying so at least we can learn from it.
Just the Internet.

You have to click Skip when the phone prompts you to log in to a Google account though, as it does this by default.
Almost every demo of ChatGPT or other generative AI that goes viral on Twitter nowadays is cherry-picked and/or does not include other relevant attributes that are critical to solving the problem, such as unique prompt engineering.
IIRC, when GPT4 was released OpenAI demoed the AI taking a drawing of a website and building a working one.
On TN panels, #000 looks horrible from bad angles (mostly below, from memory—it’s years since I’ve had to endure a TN panel), and #1b1b1b would actually look much better and even darker.
The lightning connector standard specifies it must survive through 20k plug/unplug cycles, the USB-C standard 10k.
Yeah. I didn't see that. Any chance you can link which one you're referring to?

Are you saying the phrasing I just used matched verbatim?
Is jvm pg and k8s boring enough?

K8s is overkill. Jvm is heavy. Pg is fine but relational dbs generally suck.
I appreciate the authors position, but I like Greenfield projects. It's best to have a goal, but the blank page offers an opportunity to search for an optimal or satisfying solution. The author mentions having early work thrown away, but that's part of the search. Of course this needs some freedom to fail and change course, so environment matters. Easier to do on personal projects than under a deadline.
> All the points noted in the slides etc just come from poor engineering leadership. i.e decisions/choices, etc.

Hindsight is 20/20. It's easy to make these claims after the fact. In the moment it's far more complex and the decisions made at the time take in a lot of factors. Oversimplifying things and placing blame on a tiny thing doesn't push the discussion and learnings forward.

Lambda came out in late 2014 and Step Functions came out in late 2016. It's entirely likely that this team was an early adopter of the tech. Internally a lot of these AWS technologies have a roadmap that sound like they will solve a lot of your issues but those roadmaps get tossed fairly regularly as priorities shift at the product level and AWS-wide level.

We won't be able to get the info on what went on here (likely the team that improved things doesn't even know due to turn over). But watering it down to be "poor engineering leadership" is off the mark and way too simplistic.
I thought so too, but in order to show that the device was sold as unlocked, the article has a footnote (#7) about carrier unlocking.

> Keep in mind that I bought this phone full price6 from store.google.com, where it was advertised right in the FAQ as an “unlocked smartphone”7
Oho! So excited about this. I’ve used a hybrid of Radix UI and React Aria on previous projects. Radix had a much nicer DX out of the box with pre-wired components, but my team was always apprehensive about the long-term support for Radix post-acquisition. Really excited to see React Aria adopting a similar component-based interface.

Couple questions/feedbacks if you’re still in the comments, Devon!

1. Radix implements an asChild prop to help merge the library components down into other components that might already have their own styling or behaviors. Did y’all consider supporting this sort of polymorphic approach? Or is there another way to merge components? The main spots where I’ve used it are buttons and dropdown triggers, so it might not be broadly applicable.

2. Is it easier to extend from the React Aria types with this interface now? My previous implementations with React Aria - I’ve always been a little confused about which inputs to the hooks are useful to include in the component’s props interface and how to correctly annotate them, whether that’s recreating the types or extending from the numerous options within the react-aria package. Radix at least has some suggestions for conventions, and I feel a bit more confident following them.

3. More on the feedback side - React Aria has typically implemented similar-but-different props for the common HTML form control attributes like “disabled” and “onChange” as “isDisabled” and “onValueChange” - I really appreciate these at one level for the internal consistency throughout the library, but I’ve found these choices make it a bit more annoying to integrate React Aria with other third-party libraries meant to “just work” with the regular attributes. E.g. spreading Formik form props for a field into a form control, but having to re-map the onChange prop to onValueChange. Definitely trade offs in either direction, but I’m curious how y’all made the choice and if there are some remediations y’all have found along the way?

Thanks so much for your (and the team’s) work on this! And on Parcel and the million other projects you’re building.
Great videos, thanks!

About the second one, I'll leave this one here in case someone wonders why does the pilot hit the break and throttle pedals at the same time (heel & toe): https://youtu.be/xeoLRWCNGcA
90% of EVERYTHING is shit

-- sturgeon's law
That all makes perfect sense and it's how we had always assumed these things worked. However we were told - by multiple installers - that they couldn't guarantee the products they were offering would continue to work for long without Internet access. Even if they didn't literally shut down with loss of power supply they wouldn't necessarily be configurable. That really matters with battery-backed systems where there are different strategies for charging them that might make sense depending on the conditions and expected usage.

It seems a particularly bad design because if the power is out in our area then probably so is the Internet. (Apparently our local ISPs haven't discovered putting a UPS in with their last-mile equipment yet.) And yet these were battery-backed systems that could take over supply for our own property during an outage so having access to their UI to change settings in the event of a longer outage could be important.
There is, in hiring a highly qualified set of reviewers.