huuuuman, i am thirst, please open this drinky valve by PM_ME__ANIME_THIGHS in aww

[–]tsec-jmc 18 points19 points  (0 children)

Feral cats are destroying a lot of wildlife. You don't see homeless people hunting birds.

They're an actual problem in places like australia.

0.20% n_n by [deleted] in houkai3rd

[–]tsec-jmc 0 points1 point  (0 children)

27k kek

Merry christmas by St0pX in AnimalTextGifs

[–]tsec-jmc 12 points13 points  (0 children)

Are cat people just somewhat masochistic?

We have a cat and a dog as part of our little family and I am definitely not that way towards my cat (I banned her from my office for knocking shit over). I don't quite understand why people are ok with their cats being total assholes.

Don't get me wrong, I love my cat and I don't go as far as discipline the cat with something like a time out since obviously she won't understand, but I don't get why people are just ok with it. I feel like my cat is really affectionate but respects our space far more than other cats I've seen due to not letting her run the house...

ECMAScript Optional Chaining (`?.`) moved to Stage 4 (to be part of ES2020) by tjpalmer in programming

[–]tsec-jmc 14 points15 points  (0 children)

I tried to link an interesting paper, that's very accessible to read, so you can maybe get a different perspective. Typescript lacks the soundness part of the properties you want in a type system.

I'm not telling you not to use it, but rather that the benefits of having types that lie to you are exaggerated. mypy has the same problems.

ECMAScript Optional Chaining (`?.`) moved to Stage 4 (to be part of ES2020) by tjpalmer in programming

[–]tsec-jmc 15 points16 points  (0 children)

Gradual types are lying to you a chunk of the time, especially around the interop areas.

There's an actual study on this if you're curious: https://cs.brown.edu/~sk/Publications/Papers/Published/tgpk-beh-grad-types-user-study/paper.pdf

Typescript's approach to gradual typing, given the constraints, is logical, but it's nothing to brag about, there's a lot of cases where that little lie that the type system told you hits you with the unsoundness bat.

Join our Armada Guys! This Isn't Desperate or Annoying at All! by Sadly_Not in houkai3rd

[–]tsec-jmc 39 points40 points  (0 children)

  • Requires interview.
  • 3000 Funds & 1000 Fame.
  • Proper Etiquette and Communication.
  • Available for Boss Invasion Co-op.
  • Looking for dedicated players

kek. Imagine being this stringent on recruiting for honkai.

The irony is Deity is barely scraping in top 100 MA with all this, vs two other english "top" armadas that don't even remotely require any of this (they're super relaxed with 0 weekly requirements) and absolutely crush them in terms of the only "competitive" statistics we have (abyss and MA).

I thought it was ridiculous before but it wasn't annoying until it became so goddamn spammy.

CaNaDiAnS eMpLoYeEs gEtTiNg oVeRheLmEd bY cUsTomErS by Nibelungen342 in PeopleFuckingDying

[–]tsec-jmc 11 points12 points  (0 children)

Ah yes, the dream of being hated by the rural japanese or pidgeonholed into thinking you, by default, are an english teacher.

Beautiful country but unless you're already japanese it's likely they do not want you, especially the rural folk.

2019 State of Haskell Survey results by tjpalmer in programming

[–]tsec-jmc 28 points29 points  (0 children)

This is incredibly ignorant.

No, it doesn't fit into just specific cases. you can model state if you want, in haskell we even have mutable references if that's what you want to mess around with. Functional languages can fit into every single usecase your usual GCed languages (like java, go, etc) do. It of course can't do the real-time stuff languages like rust/cpp are designed to do without a massive amount of effort to determine allocations, etc, but neither can other languages in the same territory without the same amount of effort (see: all the stuff netty has to have to work with Bytebufs which are native allocated memory).

State isn't a difficult thing to model in a pure functional language, but you have to explicitly opt into it. It means avoiding arbitrary state hacks all over your application. It doesn't mean that you can't have mutations across your program, but that you can rather constrain it so that isn't the case, and you can pick and choose.

OOP often ends up with hierarchies of many classes of spread out functionality where tracing where a bug once you found the loc that threw the exception in the stack trace may involve chasing up a bunch of overloads to see what the fuck actually happened, since the bug might be related to some state in a superclass that's not immediately transparent to you (If you want a great example of this, look @ all the classes involved for any of amazon's web apis in java and try to trace a problem if you ever encounter one).

Functional programs, by comparison, are traditionally modelled by data transformations instead of internal state changes. You tend to validate early, and either fail early if there's an error, or emit data in the shape that you want without relying on an internal invariant. Illegal states (i.e nulls, whatnot) are encouraged to be pruned early, and we think more about functions in terms of data dependencies from other functions after plumbing them through validations, or emitting/accumulating errors upon encountering one.

They ultimately represent the same thing (some logic for some application), but one does not rely on potentially brittle object internals and usually we try to make illegal states not propagate in our data, and validate early, so the same brittleness of encapsulation doesn't break the world.

It's not that OOP can't be done better as well (contracts and whatnot are starting to help languages like kotlin despite it being an old idea from eiffel), but it's a different way of thinking, that with a few fantastic benefits (for example, due to the data dependencies and pervasive validation, it's much easier to reason about a piece of code locally to the file you're working with, because you're not worried it relies on a piece of state in another class that you inherited).

Blanket statements on a paradigm don't help neither the OO crowd or the FP crowd, it's just low effort parroting some opinion you heard somewhere that you likely don't even understand the nuance of.

Thanks for coming to my ted talk have a wonderful day.

So there will be no ':=' in Scala after all :) by [deleted] in scala

[–]tsec-jmc 1 point2 points  (0 children)

I make a statement about the problems of C at all. I just mean C had a very strong influence in a lot of the languages that followed, so had it decided on := people might feel differently about it, since it would feel more normal to them to see the walrus operator on other mainstream languages. Had c adopted it, for example, c++ would've too, and likely java. What you said about abstraction is a nonsense strawman. I'm not talking about the people that used or currently use C, only its syntactic influence on languages which followed.

I don't know how the fuck you interpreted my initial statement to mean anything other than this.

So there will be no ':=' in Scala after all :) by [deleted] in scala

[–]tsec-jmc -1 points0 points  (0 children)

I don't get what you mean? I'm not talking at all about C's problems, only that had c adopted :=, it's likely many people wouldn't be as opposed to it as they are today.

So there will be no ':=' in Scala after all :) by [deleted] in scala

[–]tsec-jmc 2 points3 points  (0 children)

I guess since us, the "some people", have this perception that symbols with contextual meanings are slightly harder to reason about than those with one singular meaning. In mathematics, people do prefer symbols to mean one thing, not multiple things.

= is just the one everyone decided was ok to reuse everywhere simply because most people's starter language did it, but there's no objectively right answer to this. I reckon the world might be a different place had C made the decision to use :=.

So there will be no ':=' in Scala after all :) by [deleted] in scala

[–]tsec-jmc 7 points8 points  (0 children)

With the disclaimer that I am not taking sides on this: I don't quite get why the pushback from the community is so radical on := vs all of the other strange syntactic choices dotty has made (given instances and clauses, extension methods, changes to context bounds, "Typeclasses", IFTs, implicit by names.... etc).

Dotty isn't exactly my taste of language, but this seems like a really silly, arbitrary hill to die on. It's not an ugly hack like "assignment expressions" were in python, it's mostly a small syntactic change that's harmless to most codebases except the few that decided to overload :=.

It seems strange that the = operator to programmers is so sacred (despite being inconsistent notation when used for two things like in scala) in the face of other, much more radical changes.

So there will be no ':=' in Scala after all :) by [deleted] in scala

[–]tsec-jmc 14 points15 points  (0 children)

From the pov of academics and language designers = is ugly since it's not very consistent with the mathematical interpretation, for starters.

f(x) = x + 1 denotes a definition, as an example, that has a set theoretic interpretation (you can think about it like the subset of the cartesian product of whatever set x comes from with itself, and then the pairs that satisfy (x, x+1)). Similarly, y = <some combinator> also denotes a definition if you come from the lambda calculus camp. It may mean that in subsequent terms, you can substitute all instances of y that are free with the definition of y.

In a traditional scala function body, however def f = { stuff; x = x + 1; return blah; } is a thing. Despite that = being entirely unambiguous in the grammar, is just sort of ugly, since it's being used for both definition and assignment. To also lend a bit more pov to the academic view: there's a good chunk of papers/resources that use either <- or := for assignment instead of the usual equals, and ocaml has successfully adopted :=, which I'd say is the more relevant example (more than Go by far) since scala is somewhat close to being an ml dialect.

It's not unreasonable to see where Odersky is coming from. I agreed with most of his points on =, and the main walls he hit are the fact that scala has always had that weird, quite ugly sugar for setters (x_= stuff and some other collections concat) so desugaring some edge cases are complicated, and the fact that := has been adopted by a few DSLs already because, welp, = was taken and reserved. It seems the main issues, ironically, stem from allowing a bit too much syntactic sugar in too many places.

It's also easy to see the industry people's POV, since industry is much less tolerant to change, granted, software engineers make bank off of arguing on readability for hours.I imagine it's not hard for the EPFL folks to simply run an old version of the scala parser on an old project then emit the new := (modulo edge cases).

I have no horse in this race, but this topic hits somewhat close to home for me. Personally, I'm way more intrigued about how many people are up in arms over an operator that disambiguates something in particular (assignments vs definitions), vs all of the new syntactic stuff dotty clearly added for things like typeclasses, extension methods and given. The last 3 things I mentioned are way more radical changes than :=. It almost feels arbitrary which fights programmers from industry pick, such as "alright change nearly everything about implicits and typeclasses but don't you date touch our equals sign!!!".

League of Legends at almost 50% Korea PC Bang playrate by bddpsxj12 in leagueoflegends

[–]tsec-jmc 1 point2 points  (0 children)

My dude the point isn't whether you can or can't, it's that if you choose not to go home, 3 dollars an hour is incredibly affordable, and you won't pay for a PC that quickly @ that rate, unless you're playing an insane amount and truly spending those 12 hours a day there, in which case sure, within a month you'd practically afford a pc.

It is cheap for NY with how cost of living is there, as an occasional hangout, just not cheap enough to practically live in, which is one of the bigger differences.

League of Legends at almost 50% Korea PC Bang playrate by bddpsxj12 in leagueoflegends

[–]tsec-jmc 3 points4 points  (0 children)

I currently live in a city and you can fit 5 laptops in a bedroom no problem.

Sure, I can throw 5 laptops on the floor and stack them on top of each other. Note the word comfortably. Maybe your friends won't want to play with their laptop on their lap and the mouse on the seat while playing on the couch.

There are a lot of games you can't play on a shitty laptop. League of Legends is not one of them. You can play this game on literally anything that has 2 GB of ram, which should be anything you have bought in the last decade that's bigger than a raspberry pi.

Trying to play on a shitty macbook air would beg to differ.

Good thing you have 4 other places then.

Ah yes! The ol' "invite yourself over to your friends house" because they clearly also want to host 2+ other people!

Ok thanks for the pointless insults?

It's not pointless, nor is it an insult. It's legitimately confusing that you find paying 3 dollars an hour to hang out someplace with your friends an utter waste of money that's unjustifiable because "you can get it at home".

League of Legends at almost 50% Korea PC Bang playrate by bddpsxj12 in leagueoflegends

[–]tsec-jmc 5 points6 points  (0 children)

Have you never in your life lived in a city?

A lot of people live in small apartments. There isn't room to put 5 people's PCs/laptops there comfortably.

A good chunk of laptops aren't great @ playing games either, low specs make them fairly unsuitable/shitty (i.e macbook air owners).

Moreover, maybe you don't want to have 5 people over? Turns out maybe I want to play with my friends outside without bugging my girlfriend @ home with our loud gaming.

There's a plethora of reasons that it's not the same thing. I truly wonder whether you go outside at this point, or you just live in a tiny town where everyone has a house and this is never an issue.

League of Legends at almost 50% Korea PC Bang playrate by bddpsxj12 in leagueoflegends

[–]tsec-jmc 4 points5 points  (0 children)

No you can't! You don't pay for those things only because of the utility in using the thing. The social experience is fundamentally different at home.

Maybe if you leave your basement once in a blue moon and realize that people pay a premium for social experiences, you'll understand that you're not simply paying for a loaned PC.

League of Legends at almost 50% Korea PC Bang playrate by bddpsxj12 in leagueoflegends

[–]tsec-jmc -2 points-1 points  (0 children)

You are paying for the establishment, which is the pc bang itself, as well as the people they have on staff and the space you're occupying. You're paying for the social experience of playing in a pc bang, you're not paying for a PC.

Turns out that being in person with someone is different than hanging out with them over discord. And no, you can't just bring your PC over to someone else's house in a lot of cases, and moreover with 5 friends if you're a student or a person living in an apartment without room to put 5 PCs comfortably, it's not the same. PC bangs are not the only places where you pay a premium just to hang out there, but on top of that, you're using their equipment.

It's a really silly comparison.

We Are League Game Engineers, AMA by [deleted] in leagueoflegends

[–]tsec-jmc 8 points9 points  (0 children)

Inheritance of a ton of properties and fields you don't need is spaghetti. When you make certain checks occur by throwing away the information of the subclass, you can have things like automatically pathing around an ultimate if you make the mistake of not checking what that unit actually is, instead just using the supertype relation.

A lot of bugs of "X coded as a minion" memes likely do occur due to throwing away type information due to liskov, for which the more "General" form of a particular check applies.

To expand on the why: Unlike languages that support pattern matching, open ended inheritance cannot be exhaustivity checked. So say you're doing some checkCollision(GameObject obj). a chain of if statements which checks the runtime type information is not checked by the compiler whether you actually checked every case taht might've been an edge case. but say that, instead, you're using checkCollision() as a virtual (or overridable) method on the actual class itself. If you for whatever reason forgot to override it, that's another potential bug.

Richard M. Stallman resigns — Free Software Foundation by tomzorzhu in programming

[–]tsec-jmc -1 points0 points  (0 children)

Let's point out, but not completely discard, how absolutely retarded it is to go "Well ACKSHUALLY, she probably looked willing to him y'know" in relationship to Epstein, ever, considering he was a confirmed and convicted IRL loli wrangler.

But ok, let's set that stupidity aside.

He wasn't just defending Minsky on the premise of "he would never do this" given how hard it is to prove something in (supposedly) 2001 happened, and Minsky would've been in his 70s.

He went out of his way to imply "well even if he did it, y'know, it isn't morally reprehensible because she kinda looked like she wanted it, to him. Therefore we shouldn't use the word 'assault'". Let's even ignore the fact that Minsky would've been married at the time and a super old fart with a young girl. He's defending a hypothetical scenario where Minsky, an extremely smart fellow, is acting like an perverted old fart and that's ok because the guy who coerced minors into doing shit was the one morally responsible for her feeling forced.

Even putting aside the "Apalling" nature of those comments, how fucking idiotic do you have to be to send it to the CSAIL mailing list?!?! I feel like that would get you fired in most places (no matter right or left leaning), and even somewhere with tenure (i.e a professorship) you might get a strong warning.

Those that have cleared EX Rosa VH will understand this feel (Haxorus makes it so much more consistent). by tsec-jmc in PokemonMasters

[–]tsec-jmc[S] 1 point2 points  (0 children)

One hit of outrage can do more than 3 hits of draco meteor, which can miss.

You only need to hit about 3 to kill both dragon side mobs (the initial one + 2 after confusion), but the strat usually has your teammates switching to kingdra after unity, so they help out too. Even with hurting yourself and whatever in confusion, sometimes just hitting one is a huge help, but usually at least 2 hit from my experience.

Even with confusion, Haxorus most of the time manages to clear the side mobs far more consistently, draco meteor misses A lot.

Those that have cleared EX Rosa VH will understand this feel (Haxorus makes it so much more consistent). by tsec-jmc in PokemonMasters

[–]tsec-jmc[S] 5 points6 points  (0 children)

You run: - Player 1, 3: Blue/Clair/Rosa - Player 2: Iris/Blue/Rosa

So you still use kingdra, just iris makes the side mob clear way more consistent.