#programmers-off-topic
1 messages · Page 25 of 1
fun…
Yeah it's frustrating out here
I'm going to be in this position relatively soon personally, too! 
I'm sorry!
Oh, no, in a good way! Maybe?
It really depends on the jobs you're applying for. I can only speak from my perspective as a hiring manager and for the role of data engineer
Oh, then yay! ?
the company I work for announced a hiring freeze recently
I'm just going for entry level, I really enjoy the entire process of coding a website so I'm not entirely sure what to specifically look for?
For a couple years I had something even worse than a hiring freeze, all backfills were getting swiped up
So any team that lost employees due to attrition were just short staffed
well at least web is probably the “easiest” market to find entry positions in
Like, if I had a role to hire, Sr Engineer for example, I was incentivized to not promote from within because their backfill would be lost
I've found exactly one web job hiring and they prefer a graphic design specialist with no experience in coding
what is meaning of backfill in this context? how do you lose a backfill
It means I lose a team member, and the company swipes up that role and gives it to another team
backfilling to me is a term in construction so idk what exactly it means for employment
Whereas normally if I lose an employee, I'm able to hire someone to replace them
There was a time where they wanted backfills to go to teams that "needed it more than you do"
So pretty much, everyone there has to stay in their roles or else the team gets smaller?
But it's not like your team is responsible for less work, the remaining team members absorb the extra responsibiliity
how does this solve anything for the team who is 1 less person now 
doesn’t solve anything for the team but management feels like they did something probably
It doesn't solve anything, it just shows how disconnected leadership is from what's happening at the worker's level
i would like to unlearn the meaning of backfill
If anything, they do it intentionally so that it leads to more attrition
It's a better deal for them than to pay someone a severance to let them go
Make everyone's job more miserable so they can get rid of positions they don't understand, and fill them with AI engineers
a concussion coming your way
Is there a better place to look than LinkedIn or Indeed?
Meanwhile data quality suffers because the people who were experts in that are gone, and they have no idea why AI doesn't magically solve for everything when you have garbage data going into the models
Do does that add extra work to the team since they would have to fix up the AI stuff?
my personal experience(in the netherlands) was that recruiters were able to find a lot of jobs that weren’t on any public board like linkedin or indeed…
sometimes companies just have a little section on their website and do nothing else publicly
On a more fun topic, my new toy is working wonderfully
I’m assuming this is a 3D printer
That looks cool
Yes, I've been wanting one for a while, and I finally made the space for it
I had a bunch of failed prints yesterday, but I'm figuring things out now
I've also wanted one for forever!
For example, I did not know that the filament absorbs humidity, and that can ruin prints
What will you print 
Like, a spool can increase by as much as a few grams in moisture
I've got two projects in mind:
https://gridfinity.xyz/
https://www.multiboard.io/
a house
Gridfinity - organize horizontal storage
Multiboard - organize vertical storage
I also printed a turtle
incredible
I should have printed it in green, but that was my first test print and I hadn't figured out yet how to select the spool I wanted to use
Retractable neck action 
That print is pretty neat because it doesn't require any glue to put together
It includes these H clips to attach the halves together
"ugh I don't like how passing things to my worker thread scrubs types"
This sounds ancient, MT code in C# is rarely written with worker threads anymore. Hasn't been since like... .NET 4 I think? When did they introduce Task, Parallel and so on? There's concurrent collections, immutables and atomics that solve 95% of problems, and lock, Mutex and so on for the other 5%. I think I can count the number of times I've used volatile on one hand, including Java threading, and IIRC they all had to do with double-checked locking.
Tbh there was probably a better way but in the case of the "I want to use an enum and votaile doesn't like this" was a case where one thread fed work to another thread and they would set a shared state field to signal the other
There are like actual ways to do this but i did it basically manually
There are like actual ways to do this
Like... producer-consumer queue?
(AKA BlockingCollection in C#)
Or Channels, apparently, but they're too new for me to have ever used them: https://learn.microsoft.com/en-us/dotnet/core/extensions/channels
Imagining this emoji was representative of someone’s actual reaction made me giggle 
(Yeah, I'm not a professional programmer. So when I couldn't find the concept because I didn't know what to Google for, I just winged it.)
Hence, writing code that looks weird
What is your definition of a professional programmer - apparently it is something other than "someone who gets paid to code?"
I'm just curious, it wasn't meant as an interjection or anything.
Your primary job description and primary job output is code
While for us the code is just a tool to do what we actually want to get done
Hm... for a while my primary output was design docs, meetings and other corporate minutiae.
oh that sounds more like software engineer vs anyone else who happens to code a lot for work
So most of your job does not involve coding? You work primarily on the hardware itself?
imo programmer is umbrella term though, a college kid in intro comp sci is still a programmer
I don't think it's the "programmer" that's in question, it's the "professional" adjective.
(Yes)
Ok, didn't know that. Since you mostly discuss the coding part here.
NDA?
Basically
Ah well, I think we get the basic idea anyway. You obviously do a fair amount of coding, though. I've met a lot of hardware guys who couldn't reliably write FizzBuzz.
if 1 then Fizz
if 2 then Buzz
wait
no that’s not how fizzbuzz works
I’m very tired
you must be a hardware guy
unfortunately not

It's this, right? https://stackoverflow.com/questions/20957693/fizzbuzz-in-python-using-random-how-does-it-work
See, I wouldn't hire the guy who came up with that either, because he obviously thinks he's a very clever boy, and they cause all kinds of trouble on teams.
As a joke on a blog or something, of course it's fine, but if I saw that in an interview, that's another case of "thanks for coming in today".
idk what I’d even do if I was asked to implement fizzbuzz. Do I just go for the normal implementation with modulos? Do I try find an “interesting” solution? Obviously in a production setting I’d do the normal implementation
I think it's mandatory to use Enumerable if it's a C# position.
damn
Also, start by writing a ForEach extension (if you want to see their eyes roll into the back of their head, that is).
Enumerable.Range(0, 100) would be the easy one to get one in there if we take the exact version in that post
List already has a built in ForEach implementation so we’re good(it’s slow as molasses don’t use it)
Enumerable.Range(0, 100).ForEach(i => Console.WriteLine(/* a bunch of ternary gibberish */))
(if you want to make me hate you)
while I love my LINQ I will pass
Your code is insufficiently shiny.
the js equivalent would be each
Because Javascript
no. It’s drastically slower when you do use it
ForEach in C# doesn't exist, and Eric Lippert wrote an entire blog post on why it doesn't exist (short answer: because it's stupid).
thank god I thought I was going to lose my mind for a sec there
it doesn’t exist in enumerable no but
https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.foreach?view=net-8.0
It does for List (and you should still never use it)
that is evil
What about Select?
forEach does exist in Java streams, though, which tells you all you need to know about Java.
Select makes sense, because you would normally only use it as part of a processing pipeline for a sequence
Select is sorta the whole point of the language feature, imo.
regularly might be too enthusiastic
my most used is definitely just Where or FirstOrDefault(with a condition)
I guess I use Any and All pretty often as well, but Select and Where probably dominate.
Any is sometimes useful
According to the code search, I even used Aggregate one time in this project.
That's my least-favorite extension for sure, there's just something ineffably awkward about the signature.
Oh right and Concat is technically linq as well. that's a weird one but it is useful once in a while
Aggregate is a fold
Yeah, but it's a hard-to-use fold.
One thing I do tend to forget is to use TrueForAll when working with lists instead of All. It’s a little faster since it avoids the linq allocations
I don't know, I just find I always have to look up the doc whenever I use it.
I’ve used plenty folds in functional programming languages but I practically never see the need in C#
My least favorite thing about linq tbh is the naming
var (targetView, bounds) = pathAfterScroll.Aggregate(
(view as IView, bounds: Bounds.Empty),
(acc, child) => (child.View, new(acc.bounds.Position + child.Position, child.View.OuterSize)));
(as an example of why I'd actually use it)
I have to translate quite a bit
in rust they’re just called iterator functions
Like, select = map, where = filter
SelectMany
Stuff like that
I do use SelectMany even if it should just be called flattenMap or something
well technically in c# LINQ is just a particular set of IEnumerable extension methods. it's more like a library name than a feature name
In rust it's just FlatMap, yeah
yeah
I will give the point on that one to Java, at least they used the standard names for streams.
ultimately I do love linq very much and it’s a big factor in me enjoying the language at all
map, reduce, filter and so on.
there are things I like about it but also things I don't
there are times when it's just simpler to handwrite a loop in a spearate breakout method
probably the funkiest part of Linq I’ve used is OfType but considering I’m surrounded by modders, maybe it’s more common there idk
I'm guilty of using OfType and Cast rather often.
i still can't believe there is no FirstOrNull
To make a long story short, it's because C# generics aren't quite as sophisticated as C++ templates or Rust traits, and often find myself having to drop down into non-generic System.Collections
GroupBy is also incredibly useful, though I always forget it exists
(when working on framework code, that is. not app code)
oh for sure. that's the price of having a managed language though
I do use GroupBy fairly regularly, I used one yesterday
the guardrails help stop you from doing stupid things but they also stop you from doing useful things
I'm not complaining - the way the BCL is set up with generic collections inheriting from nongeneric makes the problem solvable almost 100% of the time.
Although I'm kind of glad I'm not someone else having to learn and maintain my code.
also ReadOnlyList is excellent for working with subtypes
groupby is definitely up there when ranking them purely by how many lines of code it’d take to write the same logic without it
The one thing that irritates me about the collection hierarchy is that IReadOnlyList<T> doesn't have IndexOf or some other extremely common list methods. ("Covariance", I know, but it still annoys me).
honestly C# has a ridiculous number of collection types in the standard library
they all have a use in something but it’s pretty funky
How many are necessary? <meme>ALL OF THEM</meme>
I couldn't find the meme image so whatever.
all one needs is List smh don’t be silly
if something isn’t list just ToList() and there u go
I KNOW it drives me insane
WHY does it not have it?
they don’t want you to have fun
"variance"
You can actually discover the reason when you implement it yourself - I had to do something like this:
private int FindNodeIndex(INode node)
{
for (var i = 0; i < AllNodes.Count; i++)
{
if (AllNodes[i] == node || (AllNodes[i] is IEquatable<INode> eq && eq.Equals(node)))
{
return i;
}
}
return -1;
}
Which is... kind of obnoxious.
what is C# curry/partial
without knowing anything about them I’d have definitely expected IReadOnlyList to implement the IList interface yet it does not
besides just writing a delegate
I don't think that's a thing
I don't think there is a curry function, but you could always write one yourself in 3 lines.
you could probably hack something together
unless you count expressions IG
I don’t generally like currying very much
Funny, I'd have expected IList<T> to implement IReadOnlyList<T> instead, but neither is actually the case.
not sure if that’s due to the actual function or just that it gives me flashbacks to haskell classes in uni
I've used partial before too
It's super fun for (python) decorators with optional arguments
I used bind in JS but eh, it's really not necessary, just a minor convenience. (also partial, just less often)
I probably won’t be using partial nearly as much with the new extensions feature coming in .net 9
don’t think I’ve used a partial method beyond using it with the built in regex source generator
Partial and partial method are two different things, though.
yeah
I think we are talking at cross purposes
Crumble, chue means https://docs.python.org/3/library/functools.html#functools.partial
Yeah, you're referring to partial as currying.
Different from partial methods and classes.
While I think your thinking of https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods
oh idk python
well curry is the higher order func concept
I see
The term is actually from functional languages, python stole the concept.
Python has functional concepts!!!
I know currying from haskell
But not the mutability thing
the mutability thing is what most inspired languages drop
tbh rust for me is the best of both worlds with explicit markers in function calls whether something you pass in could be mutated or not
mutation is still possible but you still have a good idea whether it’s safe or not to assume something you pass into a function won’t change from it
I know currying from the Integrated Dynamics minecraft mod
lmao
generally I do prefer to lean on the side of immutability when performance isn’t critical
I know currying from a cook book oh wait
I like that kind of curry much more
re: fizzbuzz
Once submitted this to a fizz buzz code golf competition and got 3rd place 
for(x=y=z="";z++<100;)y+=((z%3?x:'fizz')+(z%5?x:'buzz')||z)+`
`
I also came up with something really dumb that used binary arithmetic but it was slightly longer. That might go on the blog... when I get around to making a blog
I get most of it, but Im surprised whatever langauge it is is happy with z being a string and then an int, and idk what the || z does at the end
Javascript \o/
Highly recommend this link for non-JS (or even JS) coders
https://www.destroyallsoftware.com/talks/wat
There's something good you can say about every programming language. But that's no fun. Instead, let's take the worst features of all the languages we know, and put them together to create an abomination with the worst syntax, the worst semantics, the worst foot-guns and the worst runtime behaviour in recorded history. Let's make a language so b...
I've played with ruby before, but dont know it very well
i can see why it's highly recommended
IBM cobol is amazing
||z is more funky JavaScript type coercion. Basically
x always empty string
y initially empty string
every iteration, increment z and calculate
- "z is NOT divisible by 3? Then x (empty string) otherwise 'fizz'"
- "z is NOT divisible by 5? Then x (empty string) otherwise 'buzz'"
Concatenate the two strings with +
Using the fact that
- Boolean("non-empty string") = true
- Boolean("") = false // empty string
If the concatenated output is an empty string, treat it like a boolean such that (false || current iteration) === current iteration
Join that to y with a line break. In a for loop block, the return value is the output of the last operation, which will be the concatenation performed at the last iteration.
The only reason for x to be a constant empty string is to save one double quote character across the two ternaries
The fact that the answer isn't JavaScript has me intrigued. I'm gonna set up some time (and a bowl of soup) later this week to enjoy this
Okay python does this too
Or returns the first truth thing
And returns the first falsy thing
I know there's at least one eso-lang out there that has a dedicated character to output fizzbuzz from 1 to 100
lmfao
"I did it in one byte. I win!"
Another interview yeet. Ok Mr. Clever, thanks for coming, we'll call you. Maybe. Don't wait around.
I remember an job interview in college where the whiteboard challenge was to identify whether a string contained the four-letter acronym of the company
And apparently it stumped a lot of students
Not judging. If you go into it with only two years of learning C at uni, you're not really equipped to solve that on instinct
was includes banned
do people not know .includes?
oh C
oh no js
Maybe case-sensitivity? Unicode? I can think of a lot of ways to spice it up, I guess. Even in plain C with no libs, it's not that hard to multiple through with a for-loop.
that's impressive
contains in C# or if you want to be fancy and use a .NET 9 feature you can define a SearchValues<string>
It was whatever language you wanted to use
ahh
No catch. Apparently the most common solution was nested loops. It was computer science sophomores
If you're gonna use a loop, you can do it with just one. No need for nesting
I had some really terrible interviewees but I don't remember any that were that hopeless (then again, they probably got screened out).
presumably the challenge is to implement it without includes
guy pulls out Nintendo 64 assembly
Okay Kaze Emanuar
he would...
he probably put the thought in my head
That'd be an acceptable answer to me. There's a fine line between passion and smugness, but I think console code is closer to the former.
power move is to pull out Nintendo 64 assembly and then utterly fumble at even implementing FizzBuzz
LOL
I did recently have some fuck up at work due to sql server apparently using UTF16 encoding when hashing strings cause windows be windowsing
strings can be funky
Bush hid the facts /ref
"My brain is performing 61535 calculations per second and they're all wrong!"
very impressive for every single one to be incorrect
I'm proud to announce that we are failing faster than ever before.
const input = "This is a very cool company. THAT is the company's four letter name"
const chars = ['T', 'H', 'A', 'T']
for (var i = 0; i < input.length; i++) {
if (input[i] == chars[0]) {
inner: for (var n = 0; n < 4; n++) {
if (input[i + n] != chars[n]) break inner
if (n == 3) console.log('String found at position ' + i)
}
}
}
there wow so complicated
named loops
I see, I see
Can you have a named loop inside of a named loop and break out of the outer one using its name?
Never seen that before
That's the point of labels.
Wouldn't be very useful if you could only break out of the inner loop, would they?
it doesn't really need to be named but it's nice for clarity
I had initially planned to break the outer which is why, and I removed the label on it but didn't the inner
For me it evokes goto which years of CS trained me to despise
Because goto.
ya
Honestly, usually, any labeled break can be refactored into a function. But there are a few exceptions.
(Exceptions usually involving obscure scoping, memory or other performance issues)
anything is possible if you believe in yourself
you can even solve the halting problem
Ok, that gif was annoying, I deleted it.
lmao
anything halts eventually...
If your timeline is "heat death of the universe" then for sure.
Reminds me of that missile launch code thing
I think the halting problem is whether the program halts sooner than that.
a shame
(I find this interesting because in a real way I prefer labeled breaks over extra functions floating around. To the point where when I do have to extract to a function and the programming language allows inner functions that aren't terrible, python, I'll do an inner function.)
"Who cares about memory leaks? Give it 2x the memory we think we need. It'll all be freed destructively on impact"
I don't actually like opening a class and seeing a pile of functions and having to sort through them. If a function is only used in one other function it goes into that function
I suppose it depends on how trivial the function would be. If it's a big chunk of code in an even bigger chunk of code and N=4 nesting level, just refactor it already.
Ah, but according to quantum physics no information is ever lost, so those memory leaks are theoretically still somewhere in the fabric of spacetime
If a function is only used in one other function it goes into that function
That's FORTRAN style to me. At least in any OO language, it's the class that defines the abstraction, functions are just a way to organize the code inside them.
the air is full of unresolved memory leaks
Sobs in DoD 5220.22-M
I understand the allergy to a huge pile of 1 line "utility" functions - like everything else, moderation matters.
(the US government's drive erasure standard)
But a single 200-line function with 4 nested loops is far harder to understand than two 100-line functions with 2 nested loops.
(and much harder to test)
imo nested loops is a code smell but if it's a better fit for the problem, add comments and go for it
I have a bit of a laissez-faire attitude about empirical code standards
I will gladly split a function into several even if it will only be used once as long as what is being split off is still a logically separate process
If your nested loops are iterating over the rows and columns of a 2D grid, or the x/y/z values of a 3D geometry, or the x/y/z/t values of a 4D matrix, and so on, then it should be one function with nested loops.
If the nested loops are iterating over "sub-entities", "details" and so on, then usually it shouldn't be one function.
That's my rule of thumb, anyway. I'm sure someone can dig up an exception. (not an Exception)
Which, by the way, is a totally more effective way of breaking out of an outer loop - just throw!
I've actually seen that
I've actually written code that does something similar to that ngl
throw new BreakThisLoopException()
Not sure you're joking or not
But
Raise StopIteration
Definitely joking. Is that VB you're referring to?
Is **literally how python works **
Really? I've written some python - measured maybe in the thousands of lines, but not tens of thousands - and I don't think I've come across that.
A web request inside a try-catch, and a non-200 status would still count as a resolve, so I threw manually when handling that to force every error condition into the single catch block
Guess I should consider myself lucky.
It was dirty, but it worked
(It's how custom iterators work. You raise StopIteration to signify you're done.)
It's not a common general usage thing just how the language works behind the scenes
Oh, you do it in the iterator.
Yeah
That's... somewhat less bad.
I still have yet to find a production use case for JS generator functions, but I really want to
why is it that and not like, break
I used generators many times, back in the days. Same reason you'd write an IEnumerable<T> with yield.
No, there is break yes
Crumble it would be the c# equivalent of implementing MoveNext and Current yourself
ah
Yeah, it's the same yield keyword in JS
function* myGenerator() {
yield 1;
yield 2;
yield 3;
};
for (i of myGenerator()) {
console.log(i);
}
// 1
// 2
// 3
yield from 
Is that a COMEFROM joke?
I actually almost never find myself in a situation where I want to use yield
Exactly, same
def fun():
yield 1
yield from (other generator)
oh interesting
It's equivalent to
for i in other_gen:
yield i
public static IEnumerable<T> ToEnumerable<T>(this IEnumerator<T> enumerator)
{
while (enumerator.MoveNext())
{
yield return enumerator.Current;
}
}
A trivial example - but a good one, that you really can't implement properly without yield.
I think the only way to do that in JS is
function* inner() {
yield ...; // something
};
function* outer() {
yield 1;
for (x of inner()){
yield x;
}
yield 2;
}
You beat me to it lol
save that precious line of code
incredible
Any time you want to flatten a recursive structure, you'll probably use yield.
not something I do very often
Yeah I'm trying to think of a case where I'd need that
Example of yield in the content patcher lexer
¯_(ツ)_/¯
I guess it's on my mind since I just wrote a UI library and that involves a lot of widget and coordinate trees.
I think I have 1 I worked on recently where I could have used it
It's the equivalent of return in an iterator block.
Oh
lets you take the day off
Oh thank god
is jury duty fun
half an hour since this post and nobody has pointed out that it's incorrect (presuming it is meant to work on arbitrary inputs and not the defined constants)? Well... incorrect for many languages in the family that use that syntax. It probably works just fine in js because that will let you get away with almost anything.
do they give you free pizza
is jury duty fun
Is that a serious question?
Me personally I've got a penchant for all things law so
yea i never got picked for it before
I've always been excused or dismissed so this may be my first time serving too
Look the less I have to think about that particular scoping rule in JS/python the better
Even so - while there are folks who don't try to get out of it and consider it their civic duty, it's legendary among the activities most people avoid at all costs.
I hate it. Why. Why has my loop variable escaped.
Not escaped - "hoisted".
the issue is with accessing elements past the end of an array. Which probably works fine in js and gives you an Undefined.
Ah yeah
Oh yeah, those for variables should be const tho, on the real. var will still scope properly but
But wouldn't kt false positive on "THA*"?
which just goes to show why we do code reviews even with simple problems and experienced developers
Personally, I didn't comment on it because I was talking obliquely about FizzBuzz and FizzBuzz-like problems, not offering to do code reviews.
Never mind the break inner is in a different locairon than what I thought it was
I know there's always a group who can't resist the opportunity for code golf and whatnot, nothing against them; I stay out of it.
(and also goes to show why the answer is almost always "use the function built in to the language/standard library/platform that already does what you want, but that wasn't really the purpose of the exercise here)
Yes. Don't roll your own crypto, don't roll your own substring search, definitely don't roll your own regex.
Since I'm looking at it again anyway, I'd do something like this
const input = "This is a very cool company. THAT is the company's four letter name"
const match = 'THAT';
let matchIndex = 0;
for (let i = 0; i < input.length; i++) {
if (input[i] === match[matchIndex]) {
matchIndex++;
} else {
matchIndex = 0;
}
if (matchIndex === match.length) {
return true;
}
}
return false;
Not proofread, not tested
return not in function
Yeah there was no function wrapper in the original so I didn't bother to add one and reindent
Pretend it's there
works fine in a function though
yippee
In reality, though, a built-in which runs as a V8 native function is better in every way
But that's obviously not the point of whiteboarding
still relies on the language javascript returning a value (Undefined) when using [] to access beyond the length of a string
How so?
oh, wait... sorry...
wasn't paying enough attention while doing other things. nevermind.
All good 
I suppose technically if match was empty string then the undefined behavior would be momentarily relevant
But the function could be refactored to perform the matchIndex === match.length check first, and then it's a non-issue
Or, hell, just check that condition explicitly at the top of the function for clarity
(Spent some time wondering if the various transpjler helpers could be refactoring to use this optimization but no.)
(Sadly)
I think this would also work fine in C because array[length+1] will give some arbitrary byte which will almost always evaluate to false, at which point matchIndex becomes 0 and the exit condition is met
Replacing matchIndex === match.length with matchIndex >= match.length would fix the 1/255 edge case too
Because there isn't a one to one correlation on match patterns and the matchee sequence
Oh, you mean automatic optimization?
For il helpers often build in a little fuzzy (ie match both stloc and stloc_s)
No, it's an optimization over double loops
Which is what every single ilhelper does
I forgot the name of the two guys
I mean, like, you’re seeing if the compiler could optimize out the nested loop?
Or maybe I misunderstood
I have no idea what those are lmao
Like this is searching for these five opcodes in sequence
But unlike substring match, it's fuzzy, I can't just jump forward the length of the sequence
I have to check every position
No, but imagine if a sequence matcher was four always Trues and like, match stloc or stloc_s
I’m gonna be real with you, this is going over my head
Substring match could be fuzzy too... if it's regex. Or even case-insensitive.
Sorry we do a lot of raw bytecode manipulation here
I am a real, actual, factual front-end engineer
Yeah but regex does backtracking
(?>exp)
Seriously though, there is such a thing as non-backtracking regex.
https://v8.dev/blog/non-backtracking-regexp
V8 now has an additional RegExp engine that serves as a fallback and prevents many instances of catastrophic backtracking.
Nah I'm just being unclear this is just a Modding Thing TM
re2 intensifies
A bunch of us wrote helpers to help us do raw bytecode stuff
C# too https://learn.microsoft.com/en-us/dotnet/standard/base-types/details-of-regular-expression-behavior
This presentation was recorded at GOTO Amsterdam 2023. #GOTOcon #GOTOams
https://gotoams.nl
Mark Rendle - Creator of Visual ReCode with 7 Microsoft MVP Awards & 30+ Years of Experience Building Software @MarkRendle
RESOURCES
https://twitter.com/markrendle
https://github.com/markrendle
https://linkedin.com/in/markrendle
ABSTRACT
Most of the t...
This is what I'm listening to while I garden
time to ddos it
oh cloudflare didn't migrate the subdomains
how did it get es.pillow.rocks and gh.pillow.rocks but not xnb??
uhhh
why does aws still do some stuff
hm
xnb2 works

that message seems fine, but general tip: don't circumvent the filter by reposting blocked messages as images 😄
That's a good point that I didn't consider, though I really am curious what is blocked there
Oh wait I think
Nevermind I know that triggered it
"lol I'm"
Stop tripping the censor, Myuu
Sorry, my bad
Oh! 
lmao
tone tags logooo
Yes, please don't post blocked messages. 🙂

Can you please clarify what was against the rules about the message? Please feel free to message via Bouncer if it shouldn’t be discussed here.
Edit: the original, blocked message
A somewhat perfectly timed blocked message after discussing regex & pattern matching lol
Anyway, what I meant to say was, er,
The timing of this is so coincidental, and I am laughing out loud as a result. This is because I'm currently working on migrating my parents’ business’ website for the first time in a decade and adding https as part of that

Like the modern day Shakespeare of evading a regex filter
Beautifully put
Thank you, thank you
It's interesting what people consider "good value" in a video game
(Kinda similar to the knittingland joke of "why pay $50 for a sweater when you can pay $100 for yarn then spend 100 hrs knitting said sweater. ")
when I was a teenager and had little money my definition of good value was simply how many hours of gameplay I could get out it per euro
now I've moved on and it's based simply on a vibe
Fact is at this point, I would be content if Stardew was a typical AAA game price.
Would have likely been significantly more hesitant to buy it at first...
Typical triple a battery what
What about the forgotten A size
A
Interesting that the term comes from bonds though
Something something Moody downgrades Activision from AAA to AA on the back of repeated sexual assault lawsuits
(Call of Duty has no meaning to me.)
(Video game, faux military, often advertises to teenage boys)
money printer game franchise that will sell regardless of controversy
Booo
Eh, for languages, better right than fast
C# 2014
Discriminated unions when
I think people discriminate against unions now
Stop 👏 Union 👏 Discrimination 👏
I feel like I can never find AAAA batteries in the store. I used to have a microsoft surface which used a pen that required those batteries. Found it frustrating lmao
In a pinch you could do this
...WHAT.
Ngl I thought you knew this already and that was why aaaa was your favorite
Note that this doesn't work with every 9v, there are at least two configurations,
yeah theres a few battery types like that, where theyre just other cylindrical cells bundled together
Was a reliable indicator until the big studios figured out how to game the metric with endless padding and assorted dark patterns to trigger addictive behaviors. These days a "50-hour game" tends to mean 5 hours of gameplay and 45 hours of terminal boredom.
Holy crap, I didn't know that!
According to what I've read, they are actually LR61s, which are about 1/8" shorter than an AAAA. They'd probably work in some AAAA slots but fall out/fail to make contact in others.
If you’ve ever owned an RC car (or cordless house phone, in some cases), this type of battery will be very familiar— which shows the cells a lot better
A lot of internal consumer electronics batteries are also made up of individual cells wired in series, as well
what shells do you linux people use?
I've used bash, zsh and fish but currently just bash
how does using zsh make you old. that's the one people often use cause it has an easy way to install themes
i use zsh on mac
it's younger than bash as well ever so slightly
it occured to me I have a spare nvme drive so planning to dualboot linux
could just stick with zsh
im using fish
personally I just don't particularly care which shell I'm using cause I don't do much with it beyond just calling a command with some arguments
if I'm feeling particularly adventurous I might pipe something into another command
i should use a fancy prompt thing
I have a custom prompt, but not one with fancy backgrounds or anything. It just says the time and git branch if there is one
atuin is also nice
probably going to go with arch bc pacman for switch dev
I set up the gba dev stuff once, its p easy to do
my humble shell prompt
Mine is basically thr same except the time is on the right
And I have a little git branch thingies with little symbols for changed/added/removed
i should figure out nerd fonts
is there anything else to them other than installing the font and looking up the glyph you want
I think there's like a tool to create a nerd font out of other fonts
i've no idea where to install them tohugh lol
via the package manager?
oh
fira code my beloved
I have ttf-hack-nerd installed
nice
idk why I picked that one, but it works
for hipsters

I should pick some random programming font to for some reason be a really big fan of and use everywhere
jetbrains mono is nice
I tend to use that one
well
I use whatever the default font is of any specific editor the most
can't say I've ever even considered changing the font for visual studio
is that the microsoft one
I'd have to learn how to change my neovim font
oh it just uses the terminal font
now we fight over the best terminal
I use foot
I've used foot and kitty as well
foot just feels the snappiest, idk how else to quantify it
is that the microsoft one
I don't think either are "owned" by Microsoft, though they're both included in Windows and/or VS.
i mostly don't care which gui terminal emulator i use as long as it has copy-paste to/from the desktop clipboard and i can change the fonts and colors. that's essentially every terminal, so i am not picky
actually Fira is p nice...
its got cute ligatures 
i've been using monaspace (neon) lately and it's fine. even though i love fonts and typography broadly, i am not married to a particular font and i switch it up from time to time.
however, i hate programming ligatures
i got the one without ligatures lol
/mnt/c/Coding/SDV Converters/TMXL2CP/TMXL2CP$ python3 -m pip install -r requirements.txt
/usr/bin/python3: No module named pip
nghnghngnh
I thought u r use arch
(this is ubuntu WSL)
Ah ok I was ahead of myself 
was helping a friend set up modding the other day. it's crazy how slow the built in zip expansion is. genuinely snails pace. and then i download 7zip for them and it's over in an instant but like. omg what did they even set up
the built in archive expander on mint works just great. although it might've just installed 7z for me lol
yeah it did
alright
apparently windows is using some archive extraction code that hasn't been meaningfully updated since 1998
it was originally sold as part of the Windows 98 Plus Pack
im sure compression algorithms havent changed since then
I always wondered why opening a zip file in Explorer was so brutally slow, and could even drag down the rest of the system with it.
for some reason I didnt think windows even supported zip out of the box
I had not seen a single Windows XP installation without WinRAR installed
if Windows' zip implementation was flawed I don't think a single soul noticed
Plenty of us noticed. Installing 7zip is one of the first things I do in any new install.
Were the zip features a easily accessible thing before win 7?
I remember a zip/rar would prompt open with rather than just open in file explorer as a folder
don't think they were
I'm sure microsoft does patch their algorithm when there's an actual major bug in it
but the underlying algorithm hasn't meaningfully changed in over 20 years apparently
I'm guessing the zip specification hasn't changed in many ways that'd break old implementations
zips major strength is it's branding. "zip" is just such a better name than rar or 7z or whatever
Depends what you call easily accessible. A number of people turned the feature off in Windows XP because, even though it wasn't entirely integrated into explorer at that time, it was integrated into the indexing service and the system could slow to a crawl when first indexing a large zip file.
My memory's telling me that it's been a shell extension since Vista, but I guess it could have been 7.
Windows 98 it claims
oh yea i memory holed vista completely
I skipped vista entirely
perhaps its more the popularity of the rar format that got everyone to install winrar
I have no positive memories of WinRAR.
everyone as in avg non programmer user
Zip has its issues, and Windows' Zip support has its own separate set of issues, but RAR is just plain awful.
I still sometimes see people with winrar
chu - I'm not saying it wasn't ubiquitous, just that it was miserable.
yea i agree all hail 7zip
WinRAR = "Let's all ditch the format that's been stable for 15 years and is supported by well over a dozen software programs including Windows itself, and go for a copyright- and patent-encumbered pile of junk that keeps begging for money, maintained infrequently by a single guy, because the archives are 3% smaller!"
Eventually they did reverse-engineer the format, although I think there may still be pending lawsuits over that even today.
There were other formats that were just silly (who remembers ARJ?), but they weren't as... hostile as RAR was.
what was the rar marketing team's secret 
you're not gonna find a single computer in Vietnam that has 7zip installed over WinRAR
"It's smaller" does wonders for a third world country's piracy scene
zips major strength is it's branding
Incidentally, there is another reason for its popularity: it's pretty easy to incorporate into other software since it most commonly uses deflate and has many similarities to gzip. If you've ever tried to add .7z support to your own app, you may have noticed that it's... inconvenient.
7z stands head and shoulders above the rest as a standalone program, but as a library it's a huge pain.
As far as piracy, yeah, I know that's where RAR is most popular, but even back in those days, neither storage nor bandwidth were at such a premium that it would make any kind of difference. Though I think what did make a difference, at least for a while, was the obscurity of the format; since file hosting services didn't "understand" RAR, the archives stayed up longer.
Easy archive splitting played a part as well, though I think that's possible with zip as well
Yeah, all the major archive formats including zip support that. Maybe RAR made it easier, or Zip didn't have it at that particular time? Not how I remember it, but it's possible.
i think the rar gui was simply easier to use for that
It was definitely more XPish.
I remember it used those candy-apple quasi-3D icons and big honkin' toolbar buttons for every function.
rar has some nice features that others (e.g. 7z) still lack, and I think it's probably more than a 3% difference for a lot of things
7z almost always has better compression than RAR; RAR was better than .zip.
And the rar program was much nicer than the standard zip program on windows, which for some reason was Winzip, which has pretty much all the problems of rar in terms of nagginess etc
i think zstd is king now, although I never see it in consumer aspects
Yes, but 7z is comparatively very new
yeah and when you make a 7z file you get questions like "yo wtf is this format I want a rar" and that brings us to another reason rar is popular: inertia
i think zstd is king now, although I never see it in consumer aspects
Definitely the king in gaming.
What's the competitor - brotli, I think? It's pretty popular too.
And the popularity of zstd is a tacit acknowledgment that compression ratios aren't as important as performance. They never were, once floppy disks stopped being a thing.
zstd is I think what I use for my server's filespace compression
nvm i use lz4 apparently
Safari still doesn't support zstd apparently
why am I not surprised
it's also old and unencumbered by patents, like mp3.
that coupled with "good enough for almost any use" means it's already available on every computer, so it's the sane, obvious choice
apparently chrome and firefox only got zstd support this year
when you play a game by running it directly from your terminal and you see some of the log messages left in the build: (/lh)
talk was created
Room exist
Is this being executed?
Creating light_surface because it was supposed to exist at this point
freeing title cat surface```
lol
i love video games
it's cute
Freeing title cat surface❤️
Do you ever have days where you get interruption after interruption
Also compact keyboards are super annoying actually
Do you ever have days where you get interruption after interruption
Do you ever have days where you don't?
idk how people actually use 60% keyboards
I've used down to 75% which was still fine but 60% just starts removing crucial keys from the keyboard and putting them behind a layer
just use a 1% keyboard with 100 layers
In this video I go into some detail about the layout I'm using on my 16 key keyboard. It has taken me a while to get to this point and I think there are now very few barriers to this keyboard being able to sustain pretty fast typing.
The main thing that makes this layout so unusual is the way we deal with using two layers for the alpha keys. ...
as someone with a full keyboard with numpad and some macro keys probably

the delivery person: unknown huh? closes eyes and throws package into a nearby bush delivered
not even the country is known
Yeah, the unknown part is a surprise to me!
I didn't know (but I'm not shocked) that Framework ships from the Netherlands in Europe, though.
Shift ctrl ; in excel 💖
that's good news for me though as someone who lives in the netherlands and has considered one before
I see you've transitioned from funky command line scripts on latex documents to excel
Please let me know how using it goes! They are my laptop brand of choice were I to get a new one based on what I know about them, but I haven't needed a new one yet so I haven't tried one
I think aquo has one
That's kind of where I'm at. I've had the same laptop since 2016 and I'm just... waiting for it to stop working so I can get a new one. But it keeps working
not even once
But once it finally kicks the bucket, I'm getting a Framework.
I've had the same laptop since 2015 so same boat
90% of what I use it for at this point is remote desktop from other places in my house.
my last legitimate use of my laptop was to do advent of code every night when it released and I was out of the house
framework feels pretty similar to other ultrabooks (i think thats the right marketing word?) in the price range
I went to a christmas party and whipped out my laptop to do the problem in the middle of it
lmao
I'm hoping Framework makes a mainboard based on Snapdragon once those are more broadly available.
the partygoers were legit impressed
my deception is uncovered
the reason i got one is cus my dell xps battery keeps becoming spicy and framework had the best customization option for how much storage + ram 
it is a nice laptop, i like it
oh no not the spicy pillows
all these other brands make u get the $$$ cpu even if u just want 1tb storage
pros:
- good linux
- you can swap out the ports which is sick
- you can just anything you want on it rather than replace the whole thing. I swapped out my original intel board for an AMD one recently
cons:
- battery life isn't the best
- downward firing speakers
- theres some harsh seams where things don't quite go together well, but its worth it for being able to just open it with a screwdriver
shit
that's a big con
didn't press shift enter smh
i think the port swapping thing is a negative they coulda fit twice as many ports in the same amount of space 
wheres my 2 usbc expansion card
imo my old laptop has ports i never need, custom ports is nice
you could always make/buy a custom 2 usbc one, no?
storage options is the biggest scam in modern electronics. Especially apple loves to pretend they spend hundreds trying to add another 512GB of storage
i kinda doubt it has enough bandwidth for that, given the cards are just adapters for a single usb-c port
ig they wouldn't be full bandwidth, true
They couldn't necessarily fit twice as many ports, depending on how the PCIe lanes are distributed to the usb controller.
i've heard the battery life thing about linux and laptops in general as well
i know on the AMD board theres weird limitations where the front slots dont support the newer HDMI spec or something, which the intel board didnt have issues with
despite laptops being portable, I never use one without being connected to a power outlet
yea but the point of 2 usbc would just be a integrated version of a usb hub
yeah, idk if the battery life is just linux in general or this laptop
i mean, you could just replace all four cards with usb-c
AMD graphics has poor HDMI support in Linux, because of licensing constraints. Maybe that's it?
yeah it would be a bigger deal if i was still a student, but its not a problem for me these days
ur telling me recursively plugging in usb hubs into my usb hubs doesn't give me 512 ports worth of usb?????
what's the point been then
you can download more usb ports
The HDMI governing body refuses to let them implement new HDMI standard in Linux because their drivers are open so they would be effectively publishing the spec.
On the most recent Intel Framework, all four of these expansion card bays support Thunderbolt 4. Its AMD counterpart’s connectivity is a bit more of a homework assignment. You have USB4 in the rear left and rear right, USB 3.2 and DisplayPort in the front right, and only USB 3.2 in the front left. That means you can’t use an HDMI module on the front-left port, and the rear ports will have faster data transfer speeds. It’s far from the end of the world, but arranging your ports on the AMD system requires a bit more thought than the free-for-all that the Intel system afforded.
-# https://www.theverge.com/23911664/framework-laptop-13-2023-amd-review
"i want a governing body to control my hardware standards" statement by the utterly deranged
Honestly I'm surprised the EU hasn't added the HDMI thing to the list of "things to start legal shit over", to my knowledge.
I would like to fight any company that wants to patent and close source basic necessary specifications
HDMI is effectively an industry standard so they shouldn't be allowed to restrict it.
agree
Never heard of these framework laptops, they look neat
I doubt the EU governing body even understands what HDMI is I wouldn't expect much there
I first heard about them cause of a LTT video.
ive seen good stuff from one eu department on pressuring tech companies
And I really appreciate anyone making modular / more repairable things.
I forget what it's called
theyre politicians, they spend all day looking at powerpoint presentations on projectors, that might be the one port they do recognize
maybe... but it's all usb docks nowadays
say have u guys heard of eurocom?
oh all our projectors are still hdmi lol
no but i've heard of eurocorn
it's corn, but in europe. a wild concept
what will they think of next
a long time ago when i was a wee lass i wanted to get one of their laptops, for similar "high customization" reasons
no but ive heard of europopcorn
our projects are work are the fuckin worst. You need to install some random ass executable and then connect this funky ass usb device and then you can "link" your laptop to the meeting room display.
I have not experienced it working correctly even once in the 4 years I've been here
Yeah, if I were to buy a laptop today I might look at framework
I'm surprised electronics companies aren't trying to be "modern" and replacing HDMI with usb-c, like how phones killed standard headphone jacks.
the fun thing is when I upgraded my laptop, I was left with a perfectly fine motherboard with ram and wifi card, so I got their case and now I have another machine
i dont have any ideas what to do with it tho
a chess bot
oh theyve been doing that for years now
piracy
<- hipster macbook enjoyer
I should clarify that I mean... not laptops.
Laptops and phones are very space constrained compared to everything else.
So a physically smaller port actually makes sense at least in those cases.
was there a phone with an hdmi port at some point
I want to beat up every single laptop manufacturer that has decided to do the absolutely mental insane thing of just adding a singular usb c port and expecting you to just use a docking station to do fucking anything at all
surely there was
With the Framework Laptop 13™️, you can have 5 headphone jacks and nothing else
Sometimes they had micro-HDMI.
Can't imagine a full HDMI port on a phone, though.
the future
A full HDMI port on a phone would look so freakin goofy
Oh, I definitely will!
Even if it means a laptop brand in common with Aquo.
It would have to be a very big phone.
im a trendsetter
public Trend Aquova {
set {
// ???
}
}```
I still like that I can have multiple DisplayPorts on the laptop if I deem it necessary.
me inserting 4 ethernet expansion cards for tetrabit internet speed
At least Thunderbolt hubs are actually good, unlike the garbage they market as USB-C hubs.
I wish docking stations weren't a nightmare of checking the exact specifications of your laptop's port + the optional protocols supported by the dock just to know if you can run two 1440p monitors from it(the answer is usually no)
I dove into that nightmare for several days just figuring out a dock that'd work for my mom's work laptop which is a microsoft surface laptop which had only a singular fuckin port on it not counting the charging port
I mean there was the "easy" option of just buying the surface dock but that thing is expensive as hell
sure let just drop 300 euros on a dock
oh yeah I forgot the part that the cable also needs to support the correct protocols

why do we even have standards
when they're like this
There should be labelling requirements for any device with a USB-C port that implements any standard other than just... pure USB.
it definitely doesn't help that manfucturers don't like to list in clear terms what they do or don't support
Especially with cheap garbage from China, which is like 90% of usb-c docks
yeah cheap garbage from china is almost the entire market
and then when I would find one I thought would work I find out it's not sold in my country

Especially with cheap garbage from China, which is like 90% of usb-c docks
I think it's 100%
There's also expensive, name-brand garbage from China
nothing makes me feel more confident a product is good when I see the exact same dock being sold under 5 different brand names
"Hmm yes, this is so good... that a lot of people want to sell it."
Definitely nothing to do with how Amazon's terribly policies make it easy for one group of people to open dozens of seller accounts and completely invalidated brand names as anything but a way of manipulating consumers.
expensive, name-brand garbage from China
You mean the stuff with unpronounceable names like FRBWZTNUXWPQS?
Or SHABOOXNPLRT. Always in ALL CAPS, of course.
Ngl I think idle has set back python development by insane amounts
The worst python ide is the one newbies often encounter first
I've never heard of idle
Crumble, the autocomplete doesn't work
I don't get docstrings or parameter names
This is suffering
is there any reason you're using that over just using a regular code editor with a python plugin
or like... pycharm or something
It's....a long story
You also don't want to know what version of python I'm running here
is there a prize if we guess right
don't worry. I don't know enough of python to be horrified
I have never heard of IDLE before, but then again I'm a zoomer and we have better IDEs by this point
so please regale to us your stories
(Disclaimer: zoomer spiritually, not physically)
You also don't want to know what version of python I'm running here
Is it an actual version, or a mutilated vendor-specific fork?
I've used IDLE before I think, it comes bundled with a windows install of python iirc
but idk how to tell you this, python is insanely popular and widespread
I'm a Linux user by the time I started with Python, and I just used gedit + python test.py
Back in my home country we were taught at least 4 different programming languages before even touching Python
I was never taught python to begin with
I mean I had to use it once but they didn't teach it...
I think I just used notepad++
i dont think anyone actually uses the IDLE editor
Yeahhhh
I think if I were to pick a computer for myself it would be a desktop
And if I were to cheap out and buy a used business laptop I have no choice
same, but I'll be damned if the Framework isn't cool though
I'd get them partially just to support the concept
I use a custom built desktop most of the time and only use a laptop for work.
always wonder what porting to mobile/console actually means for sdv
with how long it takes it sounds more like reimplementing the whole update
I'm sure y'all know better than me
if it were just updating some platform specific api bindings it wouldn't take that much to get an update out for a different platform
sounds like tedious work regardless
(Only casey/pathos/ca/myuu/whatever subcontractors are handling console know I would guess.)
From the various issue reports, it seems like a lot of the problem relates to Harmony. But then, if I look at the Android-SMAPI-Installer repo, it's mostly a mess of binaries - it's less of a "SMAPI loader" and more of an "APK generator" so there are probably a lot of different places things can go south.
I'm not sure if Android really has access to the full .NET Framework?
Net 6 unifies though
Unifies what?
It was .NET 5 that got rid of the weird .NET Core branch and made the framework more-or-less portable, not sure what 6 adds in that regard.
My understanding is that the runtime net6 and beyond are no longer xamarin
I don't see any mention of Xamarin in the SMAPI repo or the Zane repo. I thought it was just a UI tool, not a binary loader or that sort of thing.
Even if it's somehow applicable in the main SDV source, wouldn't explain why SMAPI and certain SMAPI mods in particular have problems.
I thought xaramin was the name of the runtime on mobile up to net 5
^
We definitely noticed the runtime has different behavior (for example, stringsplitoptions.trim(I forgot) didn't work on mobile)
Trim entities?
Something like that
It's been a day though
My meeting sock has more progress than I would like
Ok, it's a little confusing because Xamarin is an entire company, but wiki says they also made "Mono for Android"
So if Xamarin itself implements a lot of the BCL, and it seems to (https://en.wikipedia.org/wiki/Mono_(software)#Xamarin.Android) then I'm sure a lot of it is buggy.
(Hi Casey! I hope you had a good day)
I wish to make art during my meetings
you can, if your definition of making art is "making vivid scenarios involving your OCs in your head with a tacit promise to write them down eventually somewhere"
*scribbles dnd session plans on a sticky note*
My meetings have real irl people tho that'd be awkward
We have this one support hand-off but I am not on support rotations so every week I just sit there
yeahto clarify I'm doing it all in my head
spinning a cow in my mind is free, and so is writing sappy fanfiction
Real
At one point when I worked remotely I'd do duolingo while waiting for pipelines to run and stuff lol
I need to go back to studying anyways so see yay
Software driven graphics, aren't they fun?
(Attributes share absolutely nothing with decorators for the record)
yeah I just looooove manual sprite rendering in python /s
(Other than sitting on the function)
I will give pygame credit for helping make game dev more accessible to beginners but that's the only thing I'm giving it credit for :P
😛
It's always nice when there are two reasonable ways to do something
And Europeans do one way and Americans the other
Not
depending on the day that's a lot of duolingo time...
our build agents are pretty much at max capacity so these days it can sometimes take 30 minutes for your build to even start cause you're in a queue
idk buy these builds are so slow anyway
a build that takes like 20 seconds on my pc will take like 13 minutes for the build agent
...now i feel bad about complaining about fpga compile times
oof, i didn't have it this bad. we had something like 20-30% overhead on our build thing (which is still high!) but nowhere near that.
then, of course, there was deployment...
they changed how our pipeline works, and now it takes hours for it to do a build. Granted, they do like a dozen to test everything
nixos continues to tempt me, if only there werent 1000 pain points using it
not yet
maybe someday I will be lured
How long DO they take?
I hope to never, thanks.
unless you enjoy restarting visual studio every few minutes cause it broke
Though lately I've been doing Java. I don't know if that's any better.
I'd hope so
Java 🤢
I honestly don't hate Java. I just hate that I can't use an int as I'm a generic. Or a char. Or any primitive.
Yeah, but having to do that all over is SO tedious.
I've been doing some funky dom manipulation in javascript today to make some layout someone dreamt up work
measuring locations and heights and doing shit based on that
😌
bless css grid or this would've driven me mad
Just use tables, you coward. /j
I think I would've just quit my job if they forced me to do this with tables
since the number of columns is dynamic based on how many fit next to each other
you can't use an integer as a generic type? You mean like List<int> or something else
idk java at all
North of 20 minutes!
int is a primitive, Integer is an Object
does java have two integer types
✨ Boxing ✨
java has these primatives which are speshul
a boxed integer sounds like a disaster waiting to happen in 90% of cases

strange
I don't think I've ever used any language that restricts what can be using for generics as long as it is a type of some sort
Generics in Java just use type erasure I believe.
Meaning it has to be an object to work in a generic, and I dislike this fact.
oh no
I... don't think so?
I'm still relatively early in getting to grips with it all fully.
Haha, that is funny
wow there's a whole section about problems with type erasure on wikipedia
https://en.wikipedia.org/wiki/Generics_in_Java#Problems_with_type_erasure
Wait, a generic class can't extend throwa... What.
i thought the whole point of generics is to make the compiler write a bunch more funcs for you so this design is confusing me
Type erasure was implemented in Java to maintain backward compatibility with programs written prior to Java SE5
good old legacy causing terrible decisions
It's the specific way it handles generics by way of type erasure it seems is the entire problem...
I kind of always assumed C# and Java were essentially equivalent for basic stuff like this
Look up string equality
it is good for teaching value vs reference 
I mean that's fine, that didn't trip me up.
For reference, Integer is heap-allocated, and can be null.
how very exciting
Primitives and their boxed types are mostly implicitly convertible, though, it's not such a huge issue. Being unable to use primitives in generics is really the only problem. Being able to use primitives in generics has its own set of problems, which were frequently painful in C# before we had constraints like default and notnull.
it's not like C# generics being an unholy mixture of templates and type erasure doesn't give us fits when writing transpilers
How do generics make transpilers more complicated?
I'm not sure about that either. I guess it's harder to get the correct name of a private class or method, maybe?
They do hurt in heavy codegen scenarios like Roslyn analyzers/source generators, though - not that there's anything wrong with the way generics are implemented, just very difficult to think about the AST when you have to worry about generic arguments - not even knowing in advance how many arguments there will be! - and then those generic arguments potentially also being generic types themselves, and so on. Every single codegen task becomes inherently recursive. But I don't think that's what MIB was talking about.
i thought you just MakeGenericMethod(type) and its ok most of the time 
MakeGenericMethod
For reflection, yeah, not codegen scenarios.
Well yeah but codegen isn't transpilers which is specifically what I'm confused about
With transpilers you generally understand the arity and expected type args for a generic X so it's no big deal.
yea i was respond to writing transpilers
Codegen it makes sense but transpilers seem like that wouldn't be hard to work with
Or shouldn't be any big deal. ¯_(ツ)_/¯
If you're writing the actual injector, maybe it's a challenge.
oh but atra did mention this #making-mods-general message
somehow a patch was made without getting the generic

