Code Monger, cyclist, sim racer and driving enthusiast.
8581 stories
·
6 followers

Grunn is a delightfully scary game about the dangers of a Dutch garden

1 Share

Grunn is a game about gardening. It is a very normal game where things are exactly as they appear, or at least that’s the kayfabe developer Tom van den Boogaart likes to spin up around the project. But things immediately seem off as I start my journey in Grunn. The bus driver’s face is wrong, and I can’t make out anything he’s saying. I’ve just arrived at my new job site, and the vibes are absolutely rancid.

It’s hard to say what type of game Grunn is, exactly, because it defies conventional genres. It is a gardening game where I spend chunks of time carefully trimming hedges and clipping away at tall grass. It’s also a game where I found a skeleton and had to soothe its upset ghost with my magical trumpet. That victory was short-lived, as I fell into a trap and drowned shortly after.

Grunn is modest in scope and scale, taking place in a small town with a gas station, dock, church, and stately manor. Despite being set in a relatively small environment, this game is stuffed with secrets. Little Polaroids are left behind by an unknown party, giving me clues on where to go and what to try. Most puzzles are pretty simple to figure out as long as you’re willing to explore weird holes, mysterious strangers, and magpie nests.

The visuals are cartoonish and low-fidelity; figures look like they’re made out of clay. Everything has kind of a goofy bent to it — even the jump scares. Despite that, Grunn kind of got to me. Part of it is the sheer commitment to the bit; no matter how silly things get, everything is still lethal. I can — and do — die at the hand of all sorts of threats, from angry ghosts in a graveyard to a furious guard dog blocking my path.

This weird, minimalist horror comes in a two-hour package, but it took me multiple sittings to finish the dang thing because frankly, it kind of freaked me out. Sure, the visuals are simple and stylized, but the audio does a great job of setting the tone, and the pacing is quick enough that I never had time to dwell overlong on any one area or problem. 

I came for the gardening, but I ended up sticking around just to explore every little corner of this weird little game. Grunn is a marvelous Halloween surprise, perfect to enjoy as a palate cleanser between longer campaigns and more intense, complex narratives. Like a fun-sized chocolate treat, it’s a sweet experience I’d feel good offering to just about anybody.

Read the whole story
LeMadChef
22 hours ago
reply
Denver, CO
Share this story
Delete

Get Me Out Of Data Hell

2 Shares

It is 9:59 AM in Melbourne, 9th October, 2024. Sunlight filters through my windows, illuminating swirling motes of dust across my living room. There is a cup of tea in my hand. I take a sip and savor it.

I text the other senior engineer, who unlike me is full-time, on the team: "I'm ready to start at 10", as is our custom.

The minute hand moves.

It is 10:00 AM in Melbourne, 9th October, 2024. The sun is immediately extinguished and replaced by a shrieking skull hanging low in a frigid sky. I glance down at my tea, and it is as blood. I take a sip and savor it.

I text the other senior engineer on the team: "Are you ready to enter the Pain Zone?"1, as is our custom.

I. The Pain Zone

The Pain Zone, coated in grass which rends those who tread upon it like a legion of upraised spears, is an enterprise data warehouse platform. At the small scale we operate at, with little loss of detail, a data warehouse platform simply means that we copy a bunch of text files from different systems into a single place every morning.

The word enterprise means that we do this in a way that makes people say "Dear God, why would anyone ever design it that way?", "But that doesn't even help with security" and "Everyone involved should be fired for the sake of all that is holy and pure."

For example, the architecture diagram which describes how we copy text files to our storage location has one hundred and four separate operations on it. When I went to count this, I was expecting to write forty and that was meant to illustrate my point. Instead, I ended up counting them up three times because there was no way it could be over a hundred. This whole thing should have ten operations in it.

Retrieve file. Validate file. Save file. Log what you did. Those could all be one point on the diagram, but I'm being generous. And you can keep the extra six points for stuff I forgot. That's ten. Why are there a hundred and four? Sweet merciful Christ, why?

At two of the four businesses I've worked at, the most highly-performing engineers have resorted to something that I think of as Pain Zone navigation. It's the practice of never working unless pair programming simply to have someone next to you, bolstering your resolve, so that you can gaze upon the horrors of the Pain Zone without immediately losing your mind. Of course, no code alone can make people this afraid of work. Code is, ultimately, characters on a screen, and software engineers do nothing but hammer that code into shapes that spark Joy and Money. The fear and dread comes from a culture where people feel bad that they can't work quickly enough in the terrible codebase, where they feel judged for slowing down to hammer the code into better shapes that sadly aren't on the Jira board, and where management looks down on people who practice craftsmanship.

The last doesn't even require malicious management — it just needs people that don't respect how deep craftsmanship can go. These are the same people that do not appreciate that an expert pianist is not simply pressing keys, they are obsessively perfecting timing and the force applied to each key, alongside dozens of factors that I can't comprehend. An unthoughtful person will see something and think "It can't be that hard" or more generously "That looks quite hard" . The respectful thought to have when viewing any competent professional in a foreign domain, in every domain that I'm aware of, is "That must be way harder than it looks."

I have now seen enough workplaces, and thanks to the blog have access to enough executives, to know that this is what most cultures degenerate into. Terrible companies are perpetual cognitohazards where everyone is bullied all day. The median companies (which some people call "good" for lack of ever having seen better) lack the outright bullying but still consist of people that are trying to convince themselves that it's fine to feel disempowered or subservient all day. There are times in my life where I have to deal with this, but it is hardly fine. The best are places where you can get at least some of the things that a person needs other than rent money2 .

This place has a better culture than most, as bullying is mostly not tolerated, we have fully remote work, and it is a terrible faux pas to accuse someone of not working fast enough outright, though you can hint at it gently.

It is worse than most places at software engineering, as... oh, you'll see.

In any case, I have a deal with the team. Every morning, grab your coffee, attend your meetings, and at 10 AM we navigate the Pain Zone together for at least three to four hours. Management is blissfully unaware that this force of camaraderie and mutual psychotherapy is the only way that things continue to limp along.

II. I Am Lost To The Pain Zone

We have one simple job today. The organization wants to know:

  1. Is data coming into our system?
  2. Is any data being lost?
  3. Each data source goes through approximately thirteen steps on average — how many are getting stuck along the way?

Someone has already landed all of the logs our system produces in the data warehouse, so we can examine them in there, alongside the actual data. Is that smart? I dunno, something feels a bit weird about it but I have no concrete objection. My co-navigator and I decide to look at the logs for one data source.

This is where, five seconds in, we begin to become lost in the Pain Zone.

Let's say the data source we picked was "Google Analytics". We search the landed logs for Google Analytics, expecting to see something like this.

Source
Google Analytics

Here is what I actually see in the source column, and yes, it actually looked exactly this bad.

Source
6g94-8jjf-eo84757h4758z", "jobStatus": "JobStatus.Waiting", "jobExpiry":"2023-10

That... is not "Google Analytics". In fact, what the fuck is that? It looks like someone has dumped a random snippet of JSON into the logs, but not even the entirety of the JSON. The strings aren't terminated. We should have around fifty source systems, so how many distinct source systems appear in— FIFTY-SEVEN THOUSAND?

We've been writing total nonsense to half the logs for over a year and no one noticed? We only have two jobs. Get the data and log that we got the data. But the logs are nonsense, so we aren't doing the second thing, and because the logs are nonsense I don't know if we've been doing the first thing.

I take a deep breath. The plan is to submit my notice on December 2nd anyway, so this is fine. This is so fine. The other engineers already know I'm leaving, and we've all committed to do the best we can for two months for our spiritual growth. The ability to do painful things is a virtuous skill to cultivate as a responsible adult.

Okay, how is this happening? Well, it turns out that we're embedding a huge amount of metadata in filenames, and the Lambda functions that produce all of this — of course, we're serverless, because how can you hurt yourself without a cutting-edge? — use lots of regex to extract data. Unfortunately, because we don't have any tests, someone eventually wrote some code to download data that passed a big JSON blob instead of a filename to the logging function, and that function happily went "Great, I'll just regex out the source system from the file name!" Except it wasn't a filename, so it has instead spewed garbage into the system for months.

I find something like this every time we enter the Pain Zone. Sometimes we've laughed so hard that we've cried at the things we've seen $2,000 per day consultants do.

The issue is raised with the team, but because fixing this critical error in our auditability is not on the board and Velocity Must Be Up, fixing the logs is judged to be less important than... parsing... the nonsense logs. Why? We have another saying on our team, which is "Stop asking questions, you're only going to hurt yourself".

I take another deep breath.

Okay, we'll continue with the work instead of fixing the critical production error. We can't query the Google Analytics stuff based on source system, so let's pick another one. We also draw data from Twitter once every two hours, and that source column isn't broken for that. I just need to be able to associate the log events to begin working on that. That is, we'll have one log that says "I downloaded the data from Twitter" and another log that says "I checked that it had all the correct stuff in it", and I just have to tie them together.

I don't like the way this table is configured for various reasons, but I'm expecting to see:

Event ID Source Event Success
1 Twitter Downloaded True
1 Twitter Validated True

Then I can just do something like:

select
  event,
  success
from
  log_table
where event_id = 1 and source = 'twitter'

Now I can see if all the correct stuff happened.

But I cannot find an event_id column or anything that looks like one. I hit up the expert on this system, and am informed that I should use the awslog column. I look at it.

It looks like this:

awslog
converted/twitter/retweets_per_post/year=2023/month=03/day=11/retweets_per_post_fact-00045-8b3226g9.txt | Validated

I mean, firstly, what the fuck is this? Secondly, what the fuck is this? Thirdly, well, you get it. Why not just store this in a relational format? Why are they all in one column? Why do you hate me specifically?

Stop asking questions, you're only going to hurt yourself.

I am expected to use regular expressions to construct a key in my query. As far as I can tell, the numbers and letters don't represent or uniquely identify anything, they've really just been appended for no reason. I waste a fair amount of time figuring out if I can use them.

December 2nd, I tell myself. Of course, I could be working on a book, shipping a hobby project, and dedicating more time to the business we're committing to in January, but December 2nd was the plan. It will be a great exercise to come up with a plan to gradually refactor all of this while delivering the things we're supposed to. It will make me a better engineer. December 2nd, December 2nd, hold fast.

III. I'm Out

Okay, we can write a regular expression to identify all Twitter sources that came from 11/03/2023. This is very stupid, but compared to minimum wage in my home country, I am being compensated spectacularly to deal with this particular brand of stupidity.

But wait, we retrieve this once every two hours, which means that while I can find all the Twitter data pulls from the 11th, I can't actually tell which rows are associated with the 8 AM run versus the 2 PM run. This perplexing awslog column only identifies things down to the day, not the hour. We have another column that logs the exact time down to the second that a Lambda function has fired, but each step happens at a slightly different time, and each source takes different amounts of time based on filesize.

I message the team. "Any ideas for how to identify specific runs that don't assume there is only one run per day?"

We take a ten minute break. We return.

I am informed that there is no way to do this. All I can think of is to create a heuristic per data source, such that I see when the file was acquired then scan for the validation event that happens closest to the acquisition event without going so far ahead that I read the next successful validation event by mistake. I just wanted to see if data was landing in the platform. And to make things worse, I suddenly remember that I've seen this awslog thing before. A month after I joined the business, I saw it, and I said that it was unacceptably bad. The response was that it's okay because all the data we want is technically inside those strings, and this design is more flexible. Of course, since then we've added our first data source that is downloaded more than once a day, so it turns out, shockingly, that they should have Just Used Postgres and not tried to be excessively clever. As always.

How have we been running things like this for two years? Millions of dollars were spent on this system. Our CTO, who has never written code themselves, gets on stages every few months and just lies to people about things that the CTO can't possibly understand, pretending that any of this works and that they're a leader in the space. Then their friends buy the same software — I know because recruiters keep calling to ask me if I'll help lead the efforts. Almost every large business in Melbourne is rushing to purchase our tooling, tools like Snowflake and Databricks, because the industry is pretending that any of this is more important than hiring competent people and treating them well. I could build something superior to this with an ancient laptop, an internet connection, and spreadsheets. It would take me a month tops.

I've known for a long time that I can't change things here. But in this moment, I realize that the organization values things that I don't value, and it's as simple as that. I could pretend to be neutral and say that my values aren't better, but you know what, my values are better. Having tested code is better. Having comprehensible logs is better. I'm wasting their money sitting around until December, which is unethical. I'm disrespecting myself waiting two more months for a measly Christmas break payout, which is unwise. I've even degraded team morale because I've convinced some of the engineers that things should be better, but not management, so now some of the engineers are upset. I'm a net negative for this team, except for that one time I saved them so much money that it continues to cover all three of our managers' salaries combined.

As an afterthought, the person who just informed us that we have no way to associate logs to their respective ingestion events adds:

"By the way, I think that there's a chance some of the logs don't actually report the right things. Like the ones that say Validated: True are actually just hardcoded strings in the Lambda functions, and the people that wrote them may have meant to type in things like File Landed: True but made mistakes."

I am dumbstruck. The other senior is laughing hysterically.

It is 11:30 AM in Melbourne, 9th October, 2024. The wind is a vortex of ghost-knives sending birds careening from the sky. I glance down at my tea, and it is liquid hatred. I take a sip and savor it.

"Hey, are you still there?", my pairing partner replies.

"Yeah. Yeah. Listen, I'm done. I'm out today."

"What? What about December?"

"I could get the entire terrible first draft of a whole book out by December if I wasn't wasting time on this."

"... Fair."

I briefly consider contacting my partner, but I know she'll support me. I could check in with my parents, but they'd just worry for no reason. I could chat with my co-founders, but they're just going to tell me to do what I need to do. I could sleep on it, but that would just be to give myself the illusion of responsibility even as I barrel towards wasting two more months to earn money that, thanks to five years of diligently navigating various Pain Zones, I don't even need.

I resign at 2:00 PM.

IV. Blessed Freedom

It is 3:00 PM in Melbourne, 9th October, 2024. I have called my director, who is highly competent, and explained why every engineer wants to quit, and finalized the paperwork. My last day is the 5th of November, 2024. My only job title is now director of my own consultancy, and in January my savings will start to tick down. I glance down at my tea, and it is tea. I take a sip and savor it.

PS:

Firstly, I gave a talk at GDG Melbourne which you can watch here. The audio quality is not great, so I forgive anyone who taps out. The comments are weird because I asked people to flip a coin and respond with "This guy is the next Steve Jobs" or "This guy seems like a real piece of work", which I only regret a little bit. I should not be allowed to run a business.

Secondly, I gave a webinar to US board members at the invitation of the Financial Times. Suffice it to say that while people are sincerely trying their best, our leaders are not even remotely equipped to handle the volume of people just outright lying to them about IT. Also apparently my psychotic blog does not disqualify me from Financial Times affiliation, which is wild, but is maybe a useful lesson that the world is desperate for sincerity even when it isn't dressed up as corporate maturity.


  1. We do actually say this every morning. 

  2. The people that expect to get all of them are probably not doing themselves any favors either. 

Read the whole story
LeMadChef
22 hours ago
reply
Denver, CO
Share this story
Delete

Sweet Potato Chana Masala

1 Share

A staple in my house for a variety of reasons, it’s naturally vegan, super cheap to make and also really easy to do

And also, because Indian food is life.

  • 1 large sweet potato, peeled and cubed
  • 2 tablespoons oil, divided
  • 1 large white or yellow onion, diced
  • 3 tablespoons ginger garlic paste*
  • 4 tablespoons garam masala
  • 2 teaspoons paprika
  • 1 teaspoon turmeric
  • 1/4 teaspoon cayenne (optional)
  • salt and pepper to taste
  • 1 (28) ounce can crushed tomatoes + 1 can of water
  • 2 cups cooked garbanzo beans
  • 1 can full fat coconut milk
  1. Preheat oven to 425 degrees
  2. Toss the sweet potatoes in 1 tablespoon of oil, place them on a baking sheet and bake for 12-15 minutes until fork tender but not fully cooked
  3. While the potatoes are cooking, heat the rest of the oil over medium high heat, in a large stockpot or Dutch Oven. Once the oil is hot, add the onions and sauté until they are tender. It takes roughly 5-8 minutes but be careful that they don’t burn because it will make everything taste weird. Trust me, I know of what I speak.
  4. Add in the garlic ginger paste and cook for about a minute or until the raw odor goes away. Then add the rest of the spices – garam masala, paprika, turmeric, cayenne, salt, and pepper and cook for 1 or 2 minutes or until fragrant. If you need to, you can add a tablespoon or so of water to keep the spices from burning.
  5. Add the sweet potato, canned tomatoes, chickpeas and coconut milk. Bring to a boil and then reduce the heat and simmer about 20 minutes or so. I usually start my rice right around here so I know the curry is done at the same time as the rice.

*You can also use minced ginger and minced garlic if you don’t have the paste. Although you can get a big jar of the paste at a lot of ethnic or Asian grocery stores for cheap.

*I always cook my beans from dry because it’s less expensive to buy dried beans in bulk, I can control the sodium content, and storing dried beans takes up less space than canned beans in my teeny kitchen.

*This also tastes really great if you top it with some Greek yogurt, I like 2% Fage yogurt personally. The yogurt can also be helpful if it is too spicy for your tastes.





Read the whole story
LeMadChef
1 day ago
reply
Denver, CO
Share this story
Delete

LLMs can’t reason — they just crib reasoning-like steps from their training data

1 Share

Researchers at Apple have come out with a new paper showing that large language models can’t reason — they’re just pattern-matching machines. [arXiv, PDF]

This shouldn’t be news to anyone here. We know how LLMs work — they guess the most likely next token in a verbal pattern.

Anything that looks like “reasoning” is the LLM cribbing from training text that looks like reasoning. You can trivially make it fail hard if you go even slightly outside the cribbed text.

Senior author Mehrdad Farajtabar says they found “no evidence of formal reasoning” in LLaMA, Phi, Gemma, Mistral, GPT-4o, or o1: [Twitter, archive]

Their behavior is better explained by sophisticated pattern matching — so fragile, in fact, that changing names can alter results by ~10%!

You can scale up your LLM and feed it even more data — but the result will be a better pattern-matcher and not a better reasoner.

AI bros have long claimed that their super-duper-autocomplete can think just like a human. OpenAI’s pitch for o1 “Strawberry” is that it goes through a reasoning process to answer you. It’ll even present you with a list of steps it went through — even as it actually just generates a plausible list of steps.

We suspect this research is likely part of why Apple pulled out of the recent OpenAI funding round at the last minute. 

Perhaps the AI bros “think” by guessing the next word and hoping it’s convincing. They certainly argue like it.

Read the whole story
LeMadChef
2 days ago
reply
Denver, CO
Share this story
Delete

General Motors is ditching Ultium branding for its EV batteries

1 Share

General Motors is shaking up its electric vehicle strategy once again. Despite bumper EV sales in 2024, the US automaker told investors yesterday that it will stop branding its batteries under the Ultium name. Perhaps more consequentially, it's also abandoning its one-cell-type-fits-all strategy and will embrace a wider range of cell chemistries and physical formats in forthcoming EVs.

GM debuted the Ultium brand in March 2020 as part of a much-hyped EV plan that was supposed to see 22 new electric models on sale in the US by 2023. The company formed a $2.3 billion joint venture with LG Chem, called Ultium Cells LLC, and decided on a family of common batteries across its brands, using a nickel manganese cobalt aluminum chemistry in a pouch cell format that could be combined in modules for packs as small as 50 kWh or larger than 200 kWh, as found in the Hummer and Silverado EVs.

Most importantly, GM chair and CEO Mary Barra said that Ultium cells would drop below the important $100/kWh barrier "early in the platform's life."

Real life proved harder

Things have not gone as GM hoped in early 2020. For one thing, Ultium's debut took place less than two weeks before the US declared COVID-19 a national emergency. Office workers were sent home, and some GM factories concentrated on making ventilators and personal protective equipment instead of cars and trucks.

That pushed back many of its timelines, but the EV headaches did not end there. The Ultium batteries were supposed to be ready for mass production, which was true up to a point. While Ultium Cells LLC could churn out plenty of cells, the robots that were supposed to assemble the cells into modules were unable to do their jobs, slowing Ultium-based EV production to a crawl.

(Note: This is a completely different problem to the one the battery packs in the Chevrolet Bolt faced; those sparked a huge and costly recall due to badly folded cell tabs that could start fires.)

And those 22 new EVs? At best, GM has half that many offerings for North America in 2024, as long as we count handbuilt ones like the Cadillac Celestiq.

But GM's Ultium-making has mostly been corrected now. In fact, despite the loss of the sub-$30,000 Bolt from showrooms, GM has seen spectacular growth in its EV sales despite an overall reduction in total vehicle sales of two percent. GM grew its EV sales by more than 60 percent year-over-year for the third quarter of 2024 and looks set to displace Ford as the second-best seller of EVs in the country after Tesla, with around 200,000 EVs sold. It has even started delivering the $35,000 Equinox EV to dealerships.

No one calls it that but you

Despite this, Ultium as a brand hasn't caught on beyond its use by GM staff and automotive journalists, so it's headed for the same trash heap as Pontiac and Oldsmobile.

"It now makes business sense to transition from one-size-fits-all to new program-specific batteries," said Kurt Kelty, GM's vice president for battery cell and pack. "As we do so, we will sunset the brand name Ultium for our EV batteries and technologies. Ultium will continue to be used in reference to our joint venture manufacturing sites and other facilities. But as we enter the next phase of our journey, the time is right to begin this transition."

The automaker says it will build a new battery R&D facility at its Warren Tech Center in Michigan, which will look into cylindrical and prismatic cells as well as pouches, plus alternative battery chemistries. And the second-generation Chevy Bolt will now be powered by lithium iron phosphate (LFP) batteries instead of NMCA cells.

Read full article

Comments



Read the whole story
LeMadChef
4 days ago
reply
Denver, CO
Share this story
Delete

Severance Is “Mapped Out” Beyond Season 2

1 Share

We’ve waited a long time for the second season of Severance, Apple TV+’s sci-fi corporate dystopian hit, where people have their minds divided so that the work self, trapped in the bowels of an office, knows nothing about their outside self and vice versa.  

The good news is that Season Two is set to come out early next year, and according to one of the show’s writers, Mohamad El Masri, creator Dan Erickson and executive producer and director Ben Stiller have already started work on Season Three.

“There was always a thinking ahead to future seasons,” El Masri told IndieWire during an interview to promote his short film, Other Other. “Even in Season Two, we were talking about, what is the end game and how does this show end? A lot of work was talking about that.”

El Masri also added that Season Two will “point us in the direction we want to go” for the eventual end of the series, and that “there was work being done on Season Three while they were still shooting Season Two.”

When we’ll see a potential third season—Apple has yet to officially greenlit anything beyond Season Two—remains up in the air.

“What I would say is that Ben and Dan and the entire team, they’re perfectionists and they want it to be great. And if that takes, you know, a year, two years, three years or whatever it’s going to be, they’re just going take the time they need to make it the show that they want, and clearly that’s paid off in a remarkable first season,” El Masri said. “I feel like Ben and Dan and everyone, they’re not going to put something out that they don’t feel is amazing.”

Season One of Severance is currently available to (re)watch on Apple TV+. The second season is set to come out on the streamer on January 17, 2025, with one episode dropping weekly every Friday until the finale on March 21, 2025. [end-mark]

The post <i>Severance</i> Is “Mapped Out” Beyond Season 2 appeared first on Reactor.

Read the whole story
LeMadChef
4 days ago
reply
Denver, CO
Share this story
Delete
Next Page of Stories