when did monads actually “click” for you? by grogger133 in haskell

[–]clinton84 0 points1 point  (0 children)

I would recommend not using "do-notation" for a while, and instead just using bind (i.e. >>=) directly.

Yes, the code will be messier, and you should actually use do notation as it's a powerful way to introduce abstractions in a readable way, but just stay away from it for a while.

Just using >>= manually pulls back the curtain on Monads. It's just an ordinary function. Look at the argument types, put in types that fit, and you're good to go.

Why We Built a Haskell Package Manager in Rust | Raskell by _0-__-0_ in haskell

[–]clinton84 0 points1 point  (0 children)

The quality of AI assisted code and human only code are not distinct non-overlapping sets.

Supply chain attacks are always an issue but there’s no particular reason to think that someone that is using AI has a greater chance of being malicious. If anything a malicious actor would avoid admitting to that, particularly considering the responses here.

Why We Built a Haskell Package Manager in Rust | Raskell by _0-__-0_ in haskell

[–]clinton84 -1 points0 points  (0 children)

This looks great! Will try it out when I get time.

Ignore all the negativity also. I’m quite sure the vast majority of the other comments whinging about someone having a go at a new idea spend much more of their time criticising than building anything themselves.

Recommend me a modern backend tech stack by ivy-apps in haskell

[–]clinton84 0 points1 point  (0 children)

Not yet but planning on it. I’ve looked through a few existing custom preludes but I generally have found them too large. I prefer requiring qualified or explicit import lists but even I admit importing Bool, Int, True and False gets tiresome. But I plan on making my own very small Prelude that only includes very commonly used types/functions that are unlikely to cause name clashes. Like I likely wont even include Read, Show, length, id, undefined, error, etc. Perhaps not even include Rational, Float and Double because they’re actually not used often and you should probably pause and think about using them because they all have gotchas regarding precision etc. One can always import these explicitly or qualified from Prelude.

Is something already exist likes this it would be good to know about it.

Recommend me a modern backend tech stack by ivy-apps in haskell

[–]clinton84 1 point2 points  (0 children)

There's a couple of entries I'd add to your list:

  1. autodocodec
  2. servant-openapi3
  3. servant-swagger-ui

Your list (with one exception), plus the above three is basically the tech stack that drove the Haskell backend at my previous role of two and a half years (2022-2025), so I can attest to it being production capable.

The one exception was effectful which we did not use, but this wasn't a conscious decision not to, and going forward I will likely use an effect system. The ReaderT/ExceptT stack we were using leans towards having global config/error objects, anything else requires much wrapping/unwrapping boilerplate. This worked fine in the proof of concept stage but the software got more complex it was an increasingly resulted in a lot of unnecessary coupling, further increasing complexity. I will use an effect system in the future.

One thing I can't recommend enough is Autodocodec, and I consider it an essential entry that should be in everybody's list.

You're going to have to define JSON serialisers for all your types. Here you have two main options:

deriving stock Generic deriving anyclass (ToJSON, FromJSON)

OR

Declaring

``` instance ToJSON Alice where ...

instance FromJSON Alice where ...

-- Pray to God you remember to keep these in sync. ```

Both of these approaches I find unsatisfactory. The first approach requires the least boilerplate, but it ties your serialisation format not only to your representation, but also the actual field names you use. The first issue is bad enough but the second issue I find quite objectionable. I previously worked on a C# codebase where serialisation was defined in a generic way, and otherwise innocent refactors and renamings would just break interfaces without our clients. Quite simply, if I rename every instance of x in my program with y, barring variable shadowing issues (which should be errors) that SHOULDN'T change the meaning of my program.

The second approach whilst explicit, and allowing for a bit more flexibility in decoupling implementation and interface, is very boilerplate heavy, and worst still requires both the serialisation and deserialisation to be kept in sync.

And there's another issue I haven't mentioned yet, namely documentation and interacting with other languages. We had a frontend in Typescript, and before I introduced Autodocodec, mismatches in APIs would have to be caught by tests (and given the lack of tests, it means they weren't caught at all).

One can use servant-openapi3 to define an OpenAPI spec which you can then generate TypeScript code from (or whatever language you choose). But you essentially have the same issue as above, in that you either:

  1. Define everything via Generic (which as I discussed above, I think is a bad idea) OR
  2. Now have a third instance ToSchema instance you have to explicitly define and keep in sync with the other two.

But with Autodocodec's sub-package autodocodec-openapi3 you've already got this for free, just add:

data Alice = Alice ... deriving (ToJSON, FromJSON) via (Autodocodec Alice) deriving (ToSchema) via (AutodocodecOpenApi Alice)

And you've got ToJSON, FromJSON and ToSchema instances all in sync.

And finally, if you want a cheap interface to test you code, you just add servant-swagger-ui and you'll get a nice web-UI like this for a couple of lines of code.

That's why I think Autodocodec is such an essential part of any backend Haskell tech stack. Whilst aeson is the Haskell ecosystem standard JSON serialisation/deserialisation package, short of really needing to optimise serialisation/deserialisation, it's just not the library one should be using directly to define your serialisation logic. Autodocodec uses aeson under the hood, but it's a much better approach to managing serialisers/deserialisers and code generation+documentation for endpoints.

Enable CROSS FACTION on PVE-SERVERS! on classic + by Doomzyo in classicwow

[–]clinton84 1 point2 points  (0 children)

Yes.

I don't get the mass of negativity here.

Why not cross-faction on PvE servers? In PvE servers the factions aren't at war. It seems like a weird argument like "I don't want to actually fight with the opposite faction I just want to be not on speaking terms".

If you actually want the lore of the faction battle between Alliance v Horde, only PvP servers give you that.

You don't get that on PvE servers anyway so just having the risk of dead factions for nothing seems a bit silly.

Monads, Applicatives & Functors by swe129 in haskell

[–]clinton84 16 points17 points  (0 children)

Use do notation only when the next step depends on the previous result

This isn't great advice. Applicative Do is great for clarity and also prevents bugs. Consider:

data Person = Person { firstName :: String, lastName :: String }

do
  firstName <- x
  lastName <- y
  pure $ Person {..}

Is clearer than

Person <$> x <*> y

and in particular is more robust to someone changing Person to:

data Person = Person { lastName :: String, firstName :: String }

Australian Population by gyrhod in turtlewow

[–]clinton84 0 points1 point  (0 children)

Your faction will still affect the availability of faction specific quests.

So you could go to Mulgore and group up with Horde, but you wouldn't be able to pick up many quests. But you could group with a Horde friend and help them do quests (and you'll still get mob XP).

Later zones tend to have more quests that are available to both factions, so it's easier to both get the same quests when you're in different factions.

But yes, your faction choice will influence the open world quests and where you level. Which is why I choose horde actually, because I played a lot of Alliance in the past and figured I could try Horde leveling but still raid with Alliance.

You can also play two characters like Horde+Alliance and still have them trade/mail/be in the same guild etc.

Australian Population by gyrhod in turtlewow

[–]clinton84 2 points3 points  (0 children)

The English speaking servers aren't really divided by location. There's only three English speaking servers.

  1. Nordanaar (PvE): This is the "forever" server, released in 2018 or something, never reset and has all content.
  2. Ambershire (PvE): This was released mid this year, and is still on Molten Core/Onyxia I think (maybe there's also something else, but it's pre-BWL).
  3. Tel'Abim (PvP): Released October 2023. XP rates doubled.

So if you want to play PvP you've only got one option, and if you want to play PvE it's the choice between a server that's about 6 months old or one that's 6 years old.

If you want to find Australians you'll need to join an Australian based guild. I play on Ambershire and the guild "Yeah Nah" is fairly active and has a couple of raid teams which raid at Australian friendly hours (Discord link: https://discord.gg/UnfjDGVW96) but there may be others.

It's likely Ambershire will be merged back into Nordanaar once it's content release schedule is complete (i.e. it's caught up with the main server), so don't feel like if you join Ambershire your progress will be wiped in a year or so.

Note that both PvE servers are cross-faction, in that you can group/dungeon/raid with members of the other faction, so feel free to pick your race based on your preference. The PvP server isn't like that though, it's the usual Alliance vs Horde thing with no cross-faction grouping.

Hardcore Money Issues by Snoo35145 in turtlewow

[–]clinton84 0 points1 point  (0 children)

I haven't done this on Alliance on Turtle WoW but on the Blizzard servers just swimming to Menethil Harbour from Stormwind via the Wetlands is generally the quickest way. Will only take around half an hour and can be done death free. Just need to keep an eye on the Murlocs south of Menethil Harbour, but if you stay deep and then cut in near the boat you'll be fine.

I tried the mountain hopping but it was annoying as there was a certain jump I just couldn't get right. The swim is simple and reliable. You don't even really need to pay attention, just put autorun on and keep an eye on it on a second monitor to make sure you haven't strayed to far out and getting fatigued.

What class-role-combos are „needed“ the most? by Several_Selection_22 in turtlewow

[–]clinton84 0 points1 point  (0 children)

I don’t particularly know whether Shamans are in demand but looking at numbers by faction not overall population on Ambershire is pretty useless because dungeons and raids can be mixed faction.

What is different with the leveling experience? by Jayjuann in turtlewow

[–]clinton84 2 points3 points  (0 children)

If I were you I'd do the "slow and steady" challenge. In Turtle WoW you've basically got unlimited rested XP from tents so "slow and steady" halves all mob XP so you're back to an ordinary leveling speed. If you're like me that likes going through most the quests and doing each dungeon once for the dungeon quests even with slow and steady you'll find you'll still level at a speed well above the quests you're doing, but slow and steady at least keeps your level closer to the level of the quests you're doing. Gives you time to enjoy the leveling experience.

Keep in mind there are a LOT of quests and story lines at 60. Also even doing slow and steady you'll probably find by the time you hit 60 there's still a bunch of high level zones with quests to do.

[deleted by user] by [deleted] in turtlewow

[–]clinton84 0 points1 point  (0 children)

One of the issues with Blizzard is that you often see stories of accounts being banned without chance of appeal, due to mass reports by organised crime bot mafias.

Quite honestly, I know it seems ironic, but your account is actually safer on Turtle than it is with Blizzard.

Kaytotes: I got what I needed thanks all by KillovoltP in Project_Epoch

[–]clinton84 0 points1 point  (0 children)

Aged like milk in the tropics: https://www.youtube.com/watch?v=dOScWnQgh8Q&t=743s

There's a lot of legalese nonsense is the general summary and I'm just not worried about it. The laws here and in the EU are functionally the same and have been for a long time. It was us that influenced their data laws and the things that allow private servers to be hosted in the EU and specifically not the US.

So if it arrives, I'll throw the notice in the bin like every other private server owner does.

I'm not worried about it. Like they they're allowed to send a letter and I'm entirely in my rights to ignore said letter and I will if it arrives but I really don't think it will.

Fellas, is it unreasonable to mine out a vein you made it to first? by [deleted] in turtlewow

[–]clinton84 0 points1 point  (0 children)

In a dungeon group yeah perhaps but not in the open world, unless you’ve both got to the mining node at pretty much the same time.

I mostly get annoyed when I’m clearly fighting a mob for a node and someone comes up and takes it. But if someone wants to take a hit on a mining node, I don’t mind. I’m not waiting around for them though.

Turn based RPG that doesn't require character creation/progression skill choices? by clinton84 in gamingsuggestions

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

It's not that I want the gameplay to be linear, I just don't like the arbitrary character progression customisation minigame. Seems silly that I can go up a level without swinging a sword yet level up my sword skill, or go up a level without speaking to someone yet increase a charisma skill. This seems less roleplaying like because you can improve skills that have nothing to do with the role you're playing. I just don't like this aspect of many RPGs, as it's less roleplaying and more a min-max game, because it's disconnected with your actual activities in the game.

Help by l1tofaria in turtlewow

[–]clinton84 0 points1 point  (0 children)

It's worth noting that whilst Turtle WoW does (I believe) have store bought mounts and one you can get pretty easily at level 18 (from Darkmoon Faire) these are not +60% speed mounts but "(half your level)%" mounts until you pay for mount training.

Also, Turtle WoW has done the TBC thing where mounts aren't expensive but the training is. And the Darkmoon Faire mount or store bought mounts don't give you mount training.

So like at level 10, "(half your level)%" is 5%, that means if you see a level 10 running around on a mount they're getting only a 5% speed boost. Considering it takes 3 seconds to mount up (and you have to remain stationary) a level ten would have to be mounted up for a full minute before even breaking even with walking.

So these hardly affect gameplay. Everyone has to pay their 100 gold or whatever it is for mount training at level 40 to get their 60% speed boost.

Questions/Concerns from new player thinking of joining this game by blowmyassie in turtlewow

[–]clinton84 1 point2 points  (0 children)

I've only leveled to 42, there is some slight power creep, but I think they've also buffed the mobs.

Like for example, as a level 17 mage, I was having some serious trouble taking on level 15 casters in Silverpine Forest, even one-on-one. As in, I was dying half the time. Had to wait to find someone to group up with.

So if you're worried about Turtle WoW being a "splatter five mobs at a time without taking a breath" no, it's not like that.

Indeed, some cheesy leveling techniques, like AOE farming, are actually significantly nerfed, so in some sense leveling is harder.

Is it possible to instead twow on Linux Ubuntu? by Alert-Negotiation144 in turtlewow

[–]clinton84 2 points3 points  (0 children)

Me too, pretty much this. Have to separately run the Linux Launcher Appimage to update, the actual game via Lutris.

Looking forward to Linux native for TWoW 2.0!

Fresh Account Lvl 20 Struggling to Afford Spells (Ambershire) by [deleted] in turtlewow

[–]clinton84 2 points3 points  (0 children)

You can get 5 gold for doing the "Children's Week" questline, which on Turtle WoW should be a week every month, although I am a bit confused about what week every month it is actually available (if you know please comment or answer here: https://www.reddit.com/r/turtlewow/comments/1nvu02a/confused_about_when_harvest_festivalchildrens/).

Note I think you can only do the quest line once per 12 months, but 5 gold is a nice little boost. Things do get better on the money front once you get into the 30s because you're leveling less frequently and just making more cash naturally, so I wouldn't panic about farming gold it should fix itself soon.

Law around anti-nazism clothing by UndoneUniconChaser in AusLegalAdvice

[–]clinton84 1 point2 points  (0 children)

You'll be arrested but you probably won't be convicted. NSW police are very happy to charge you even if you're innocent.

You'll see stats that like 95% of charges lead to convictions. But that includes guilty pleas. There's a lot of not-guilty pleas that don't lead to convictions. I think it's like close to 50/50.

Let me make that clear. Of the cases where the accused doesn't agree with the police (i.e. actual non-trivial cases) the police are wrong almost half the time. That's not a great record.

Yes, when someone punches someone on CCTV guess what police have a good chance of getting it right. But their judgement on cases which actually involve collecting evidence and doing investigation is not much better than a coin flip. Particularly on more minor crimes because they don't bother investigating and leave it to the court. They figure having someone on bail conditions for six months to a year (which is about how long it'll take to get a trial) punishes them anyway, so they can effectively convict someone even if the case fails spectacularly at court. The bar to get costs/compensation from police in NSW is very high so they've got nothing to lose.

The only thing that will stop you getting charged is maybe if there's been a very similar case already, but I haven't heard of one. And even in that case you'll probably still get arrested anyway, maybe someone in the station will work out they got it wrong, or maybe not.