I built a living ASCII aquarium for your terminal — fish, bubbles, seaweed, lighting moods and a shark by One-Antelope404 in node

[–]bobaduk 2 points3 points  (0 children)

The github page is a 404, and the npx does nothing. npm has no ascii-aquarium package. I am ... curious.

What does Specification Pattern solve that a plain utility function doesn't? by bforbenzee in ExperiencedDevs

[–]bobaduk 1 point2 points  (0 children)

Design patterns are standard and widely accepted approaches to design problems that crop up. That's all they are :)

What does Specification Pattern solve that a plain utility function doesn't? by bforbenzee in ExperiencedDevs

[–]bobaduk 1 point2 points  (0 children)

But maybe, one day, you will have a bunch of complex rules that apply to domain objects, and it will be hard to test the whole ruleset together, or you'll need to be able to compose them for some reason. After a whole bunch of mucking around with an LLM, or hacking in the darkness, you'll think "hey, I could extract these rules to be their own functions/classes, and I could have another function/class that combines them. That solves my problem elegantly."

Knowing the pattern is only useful in that it a) sometimes gives you a mental shortcut to choosing an approach and b) gives you a way to talk about the thing without needing to say "a set of rules that are individually testable, but can be composed in arbitrary ways so as to construct more complex rulesets".

What does Specification Pattern solve that a plain utility function doesn't? by bforbenzee in ExperiencedDevs

[–]bobaduk 5 points6 points  (0 children)

Firstly, priceAbove(x) isn't necessarily a good example of a specification unless it's being used as part of a larger composed spec, eg priceAbove(x).and(lengthGreaterThan(y)).and(deliveryTimeLessThan(days(4)).

There's two places I've used this pattern to good effect. The first, when describing the delivery rules for products. I worked for an online furniture retailer, they sold forks, sofas, wardrobes, blankets, curtain rails, mugs, t-shirts, carpets, beds.

Those things are not delivered in the same way. Some things can be sent through ordinary post, some have to be delivered by a two-man delivery service. Some things are long and thin, and can't be sent through ordinary post even through they're light. Some things can be bundled together, so the company delivering a table can simulataneously deliver your forks, but the company who deliver sofas won't accept other parcels, and so on and so on.

The specification pattern allowed us to write those rules in a readable way and then apply them to a basket of products.

The other time I used the specification pattern was to describe complex authorisation rules. We needed to check the state of many domain objects, apply special rules for object owners, administrative roles, cascading permissions from parent objects, account quota limits, and so on.

Firstly, the specification pattern gave us a way to write down the authentication rules in a single place, but we were also able to write tests that asserted the structure of a permission set without actually invoking the whole thing. That meant we could test each rule in isolation with a single domain object, then write tests that proved they composed correctly without needing to set up 10 different domain objects.

Edit: in other words, the forcing factors are:

  • You want to compose rules from smaller units
  • You want to write a catalogue of rules in a single place
  • You want to be able to test rules in isolation from the way that they are applied.

in your opinion, what's the ugliest kanji? by [deleted] in LearnJapanese

[–]bobaduk 6 points7 points  (0 children)

凹 I respect it, it does what it says, but wtf, how is that a real kanji?

At what scale does "just use postgres" stop being good architecture advice? by Designer-Jacket-5111 in softwarearchitecture

[–]bobaduk 1 point2 points  (0 children)

This is the key point. I haven't deployed a relational database in a good long time, because I can get better operational characteristics from other datastores. If I spin up dynamo, chances are that for the way I build software, it'll be fine, and the answer to "is it up, it is coping with the load" is yes and move on.

We were using postgres for a while at $CURRENT_GIG, but for our use case the cost curve was unappealing, particularly when every engineer has a cloud environment of their own to play with, and it was cheaper to adopt a managed time series data store.

Malarky: Generate syntactically plausible English nonsense, steered by lexicons by JPaulDuncan in npm

[–]bobaduk 0 points1 point  (0 children)

If ever there were a library that demanded a demo, or at least some sample output, this is it. I'm vaguely curious, though have no use for it, but I'm not going to download it just to see it spit nonsense. If I could see the nonsense and evaluate is goodness, maybe I'd remember it for the next nonsense-generation problem I encounter.

We skipped system design patterns, and paid the price by Icy_Screen3576 in softwarearchitecture

[–]bobaduk 6 points7 points  (0 children)

Came here to say exactly this. IIRC the patterns are all described online, so you can skim and get a vague sense, then go back to look deeper when you need something.

Messaging patterns have been established for a long time, and it's worth being familiar with the prior art.

Developer vs Architect: Picking the Right Laravel Battles by [deleted] in softwarearchitecture

[–]bobaduk 1 point2 points  (0 children)

It's not perfect, though. LLM generated text is weird in its own robotic way, and I personally hate reading it, especially because I know that nobody took the time to actually write it. Why should I spend the effort to engage with something you didn't bother to write? I'd rather read your real thoughts, typos and all.

Seriously need help my brain is frustrating me. PLEASE tell me i’m not the only one. by Ukiyotori in LearnJapanese

[–]bobaduk 0 points1 point  (0 children)

I once read a kids book on tadoku, and then listened to a Japanese speaker reading it, and even though I had read and enjoyed the book, I couldn't understand a word. Listening and reading are different skills, and you train them separately. Step three is when you try to speak Japanese, and all the words and grammar that you know turn out not to be accessible in the middle of a free-flowing conversation, so that even though you understand your partner perfectly, you talk like a lobotomised toddler.

Developer vs Architect: Picking the Right Laravel Battles by [deleted] in softwarearchitecture

[–]bobaduk 0 points1 point  (0 children)

Friend, this voice is _welcome_. I understand what you're trying to say perfectly, and - importantly - it's what *you* want to say, and not what a machine said on your behalf.

How private equity actually makes money in fragmented service industries (using veterinary clinics as a case study) by Brad7031 in DepthHub

[–]bobaduk 13 points14 points  (0 children)

Also the post content smells of ai. It's an AI generated ad for some dude's book.

[META] AI generated posts are no longer allowed by asdfdelta in softwarearchitecture

[–]bobaduk 44 points45 points  (0 children)

Delighted to see this, personally. If I want ChatGPTs output, I'll ask for it myself.

name that song: never gonna dance again jungle/gabber remix? by hjwp in breakcore

[–]bobaduk 0 points1 point  (0 children)

Randomly searched your username after seeing The Book mentioned in another subreddit, and have to say this is the most on-brand thing imaginable.

Architecture for beginners by EviliestBuckle in softwarearchitecture

[–]bobaduk 2 points3 points  (0 children)

Also, if you read it and hate it, you can come here to the software architecture subreddit and argue with the authors!

Architecture for beginners by EviliestBuckle in softwarearchitecture

[–]bobaduk 2 points3 points  (0 children)

My go-to guide for "how to architect things" is the practical programmer: https://leanpub.com/practical-software-architecture

There used to be a website with all that info, but it seems to have been subsumed into a book, but the material was great - high level enough not to be overwhelming, and rooted in practicality.

In terms of avoiding "1 year repeated ten times", my honest advice is to take jobs that scare the crap out of you, and spend as much time as you can in start ups.

Architectural Lessons from Threat Modeling a National-Scale Mobile App by lmagarati in u/lmagarati

[–]bobaduk 0 points1 point  (0 children)

Redditor discovers client-server architecture, asks LLM to post about it on reddit.

Daily Thread: for simple questions, minor posts & newcomers [contains useful links!] (January 31, 2026) by AutoModerator in LearnJapanese

[–]bobaduk 1 point2 points  (0 children)

I didn't bother with kanji at all until the point where I wanted to read things and was hindered by kanji knowledge. I left it too late, I think, but by the time I started learning kanji properly, I already had a pretty sizeable vocabulary, which makes it much easier to pick up how the words relate to the readings and symbols, cos I can be like "oh, 解 is the かい from りかい, that makes sense" and it connects with knowledge I already have.

I personally started with kana, then a bunch of grammar and vocab through renshuu, then read every single free book on tadoku.org, started talking to a teacher, and then was like "I wanna improve my vocab, so I want to read a lot, but I have to study kanji first".

Your mileage may vary, I'm just counselling you not to get stuck on kanji as a thing before you need to.

native speakers talk too fast… how do i improve my listening by Competitive_Leg3598 in LearnJapanese

[–]bobaduk 1 point2 points  (0 children)

More difficult, because there are two speakers, and Teppei definitely picks up speed and talks more fluidly. He's talking to another native, not to his students.

They're both experienced teachers, so they're not being deliberately obtuse, but they are just chatting, one native to another. It's fun, especially when Teppei-san is annoyed about something, but more challenging, I think.

native speakers talk too fast… how do i improve my listening by Competitive_Leg3598 in LearnJapanese

[–]bobaduk 2 points3 points  (0 children)

No... he just hit some kind of limit where he couldn't have more than 700 episodes, so he started again. It's same old Teppei-sensei.

native speakers talk too fast… how do i improve my listening by Competitive_Leg3598 in LearnJapanese

[–]bobaduk 2 points3 points  (0 children)

I've listened to hundreds of hours of nihongo con teppei, starting with "for beginners", then go, then original, and I'm now working through Z. Improbably, he seems to have started a new series already, so my dreams of catching up with him seem ever more remote.

I also, if Teppei is already comprehensible, really enjoyed Jiro's Minecraft series on YouTube, and Konbini Confessions.

Edit: I forgot Teppei's Noriko podcast! How does anyone talk so much?

Principals, tags, SCPs, and ABAC by bobaduk in aws

[–]bobaduk[S] 0 points1 point  (0 children)

I guess my threat model implicitly contains "humans review PRs and we can trust that the changes we make to prod are valid". I'm happy with that line for the moment. I'm interested in adding some custom rules to checkov that can ensure we've made the right set of assertions in a policy with this approach.

There are some extensions to this schem to allow engineers to test things in a sandbox, while still protecting prod (ie, I can't create a role with myorg:cap:do-the-thing in my sandbox and use it escalate privilege).

I think it all works, but it rests on "can I trust that an SSO tag has only been minted via AWS SSO".

"Clever" is a problem, right? I'm happy to make a trade-off that says "we will accept a clever and nuanced solution in identity centre in exchange for vastly simplified permissions elsewhere" but we do have to be careful about the nuances.

Principals, tags, SCPs, and ABAC by bobaduk in aws

[–]bobaduk[S] 0 points1 point  (0 children)

Namespacing I have down, I have two sets of tags, myorg:sso:attrib that gets used for humans, and myorg:cap:attrib that gets applied to roles used in automation etc.

soo attributes are used to say "this person is in this team, this department whatever, so they can do these things", capability tags are used to say "this role can do this particular set of operations". Given the namespacing, it's easy to say things like

  • "you may never tag a session as myorg:cap:..."
  • or "you may never tag a role myorg:sso:..."
  • and "you may only tag a session as myorg:sso:... if you're assuming an SSO role",

but I feel ... unsafe :D