Even in 2024? There were lots of holdouts and stragglers for a long time yes but those numbers gotta be tiny now - right up there w/anyone running DOS or Win98 or OS/2 for critical applications still.
I think it's stating that if you use a single variable X to xor by itself, once you update X to its new value, you no longer have an X to xor back with. This would require a second variable to temporarily store X which is what the xor method is trying to avoid.
Before he got into search, it was a matter of solving problems. But with search it became a matter of creativity, and that's how you get infinite work.
@NOT_A_ROBOT solving a problem implies reaching a goal, upon which the process ends. Thus it's a limited process, however long. Improving the search is not really solving a problem, the goals can always be pushed further once reached, without limit.
Stuff like this triggers my imposter syndrome so hard. I've been developing for 15+ years. I've mastered a bunch of languages. But I don't even know what half the words this guy is using mean.
Stop this comment hits so hard. But I guarantee you know some words that these guys don't after 15 years. But also don't compare yourself to Prime no one is Prime lol. Think about what we know before a task and after one. How much of this do you think he had to learn while he was doing it. Our job isn't to know the things it's to learn about them and how to use them.
@@user-lz2oh9zz4y this is what programming WAS in comp sci in uni. I hated it so much it made me change degrees. I didn't sign up to do calculus in dev, :/
I'm fresh after graduating a CS degree so things like bijectivity, ciphers and enthropy make sense. I love reading about projects like this, it reminds me that programming is a mixture of creativity and math and it's beautiful
14:29 As a math PhD student that teaches undergraduate math, I absolutely love when stuff like this comes up. The author just discovered a really interesting property (one that's not too bad to prove if you're willing to sit down with it). The author is saying that taking the composition of two bijective functions, is itself a bijective function. It kind of translates to when you are solving an equation for x (like x^3-1 = 0) you are performing actions to both sides of this equation that are just applying functions! (and why when you have an even power for something like x^2-1=0, you can get multiple answers because it's not a bijective function on your entire domain and co-domain you're applying) Edit: I must also add that chat is wrong. 1-1 is just half of the requirement. You also need to be able to achieve every output possible (onto). 1-1 means each output is reached only once, and onto means you can actually get every output that you want to be able to get.
It’s things like this website that truly show it doesn’t matter the topic the human race will stop at nothing try to understand and optimize the crap out of everything. Rad website.
his javascript animation for page up/down has velocity and a delay, so using page buttons is way slower. Home and End keys are also not implemented. Autoscroll also isn't supported. What about using scroll events?
A Universally Unique Identifier (UUID) is a 128-bit label used to uniquely identify objects in computer systems. The term Globally Unique Identifier (GUID) is also used, mostly in Microsoft systems. from Wikipedia, the free encyclopedia
Easy to spot a v4 UUID. The third group of characters always starts with a 4, and the 4th group of characters always starts with a, b, 8, or 9. You're welcome.
Why not just generate six less bits, shift the first 48 bits from what you generate, shift 0100, shift the next 12 bits, shift 10, shift the remaining bits. I don't understand "skipping bits". Why skip bits when you could just not generate bits in the first place. It seems like you're opening yourself up to hypothetical freakishly rare collisions?
fun fact LCGs are used everywhere, math.random() in javascript, Math.Random() java, in python and all, people assume it’s just some random magic but when you get interested into it you can predict the next number from a random, by doing this you can get to know the real danger if you use it in the wrong place. A lot for website uses random string generator for like cookies that can be hacked like this
@ 25:00 currently: Why not use a scrolling search window for all buffered values? If no match is found you just continue to scroll. Please provide feedback on why it (won't) work.
@@randomblogger2835 but the number of qbits in willow is 105 and we need about 122 bits to get all the UUID's, so their should be a need for a loop or something to compensate for the 18 missing bits right, (I'm not an expert) what do you think ?
UUIDs are just 16 bytes. Int64 consists of 8 bytes, Int32 consists of 4 bytes. You could call those "BigLongs", or Int128. The purpose of RNG is to generate every single bit as "randomly" as possible. Everything that deviates from that is something different.
Can someone explain to me what Prime meant by losing the data with xor? Sure, xoring number with itself return 0, but xoring N with 0 return N. How do you lose anything?
Search does not scroll to the closest UUID. It scrolls to the closest in the tiny set that it generates from your input. It guesses about 20 and then sorts them by "which one would be next", where it actually would need to generate a nonillion and sort those when you give it the entire first 8 characters. Which, with quicksort, would take 1 decillion times the time it takes to sort 1. Assuming a single instruction per sort iteration on a 4GHz machine that would take 10 sextillion seconds. That's hundreds of trillions of years. In short, it cannot search all of them and serve them in order if generating and sorting is anywhere in that algorithm. However, if it just showed you any "next" anywhere, it could. Then it would take you 1 decillion times pressing "find next", but that's not its problem anymore.
bit twidling (shifting and masking) is what you do to write cpu emulators. I can't belive I used this knowledge anywhere else after coding up my risc-v emulator lmao
Ah, LCG, many years ago I also messed with this formula to generate random but predictable non-repeatable number to be used as Invoice ID while developing a eCommerce website.
You can XOR two of the same number together to get 0, and still reverse it with the XOR though? Thats part of the XOR? if you XOR 11 and 11 you'll get 00, but if you XOR 00 and 11 it returns 11, the original.
Couldn't you binary search the original list? Since it's sorted and then you take that UUID value and you pass it to the entropy function and you use to get the index of the UUID
But the problem is finding the nearest *displayed* UUID, as what a natural search would do. But since it's scrambled there's essentially no way to tell the nearest one without brute forcing all possible matching UUIDs for the search pattern, unless well you weakened the randomness aspect of the entropy function
14:43 there might be a lot of people lying in the chat but... His comment on bijectivity is, i believe, false without broader data context. Proof? Modulus function. Where did we start from? Of course if he means the entire context, that is true but it's not *operationally* true. I'd hardly call having to read an entire book having a "mapping function". If I end with a 3, even if i know i modded with 6 there's no way I could know I started with a 3 or a 9 or a... You get it. Not unless i had it recorded. Then you've got more than a mapping via a calculation, you have an enormous lookup table.
Random pseudo-numbers have trade-offs when compared to pseudo-random numbers, because they are actually truly random, in exchange for merely having the appearance of being numbers (they aren't actually numbers, but they are similar enough to be used like numbers in most use-cases). Also, Prime has dyslexia, which may contribute to this.
UUIDs are useful because they're highly likely to be unique globally. This makes it easier to identify specific data elements across different platforms, applications, systems, and databases. Hands down
This is so painful to watch... brilliant bitwise manipulation, but then not only writing it all without ASM... but writing it in Python??? This is probably 10M times slower than it needs to be XD
For search, couldn't the naive way work? Like couldn't you just start from the current position, and generate the UUID from that position on and just find out if the value is there?
No, there may be an enormous gap between the current index and the next one with the desired substring. The example of aabb is small enough to occur frequently, but what if you were searching for __f4976e-b9db-4c1d-9598-7836077e8707? This will occur 256 times throughout the list, around once every ~2^116 indices. A naive implementation will need to generate exponentially more UUIDs until it finds the next match as the length of the search string increases. You could have it put a hard cap on how far forward it will search, but we're back to having to make a compromise anyway.
@@Shananiganeer But it wouldn't be exponential though, it's a very slow search for sure but it's just O(n) in complexity. You're also assuming we should search as a string rather than just bits. Take your __f4976e-b9db-4c1d-9598-7836077e8707 convert it to bytes and a mask and then and/== it until you find your match. You could also use a hybrid solution where if you have a few defined bits you do the naive search, and if you have a lot of them you can do the reverse search.
searching is easy. there's lots of overlaps in the string chunks. just pretend it's an interview problem and re-invent indexing by brute force pre-searching and storing the full set of search results for every valid input chunk..
the research institute where i interned wanted me to optimize their internal toolchain for Internet Explorer. I asked by confirming they're talking about microsoft edge right? my mentor said no. Internet Explorer. I was stuck with php, little to no use of js, html, css (no tailwind), and was forced to optimize my shitass software for their site.
Bro unintentionally put every possible Minecraft user id in an ordered list. I wonder who is closest to the top! Steve is #1721978447384044941877699885222533204 in the list.
He's concerned about accidentally XORing a value with itself, yielding 0, and no data. This only occurs when you mess up, but messing up is quite common.
17:50 Hey dont bash python. It may not have a compile time to prevent some footguns at, but at least it has a runtime to crash at and not deploy time like javascript.
I'm a Rip Van Winkle who wrote up a couple years ago. Haven't yet slept with React or anything beyond Bootstrap on the client. Rolled my own JIT scroller in js recently, with regular sticky rows that made it fun. Used intersection observers. It's a beautiful mess. Now I know why you guys like pre-rolled components so much. I'd try one but I'm too busy rolling another one. ;)
I've worked on a project that supported Internet Explorer to maybe 2021? Just thought everyone should know. There are probably other projects still supporting IE out there. Enjoy that nightmare.
Exceptional use of free will
this is probably the best compliment to a coding project I've ever come across
😂
My new life motto. Thank you.
I laughed pretty loudly reading this.
😂
we need an NPM package for generating UUIDs that sends a fetch request to this website which has 2 million weekly downloads
why doesn't this exist yet, i can't think of a better way to do this
@shugy8459 blockchain
On It!!!!
It should of course roll a random 122 bit number to choose a random index from the site.
:(
this guy now has two successful ideas for sites that triggered tons of traffic. Looks like it’s pretty clear why. he takes into account EVERYTHING
How do i file a takedown request for my UUID? I don't want it in public.
You don't lol
Great, so you're telling me that every UUIDv4 I generate is not Universally Unique, because it is there?
Welcome to the multiverse?
Only if you’re using v4
Uniqueness=ruined
This is how used guid salespeople make their living. "Rarely used, great condition... Probably unique... Ish"
lol thats why i use uuidv7
I have bad news for you Prime,
I know places that have business critical applications that rely on IE7.
That makes sense because ie7 has some special microsoft features that they later removed.
Even in 2024? There were lots of holdouts and stragglers for a long time yes but those numbers gotta be tiny now - right up there w/anyone running DOS or Win98 or OS/2 for critical applications still.
@@colinstuBanking and insurance still run very aged software
@@colinstu yes.... My company does..... And we are pretty big..
@@oyeahisbest123 Let me assume... government contractor?
16:18 uh no, you can always recover a number X by xoring a random number with X twice. Even if the random number happens to be X.
Exactly!
The first time you get 0, and then you XOR 0 with X and get back X, right?
I think it's stating that if you use a single variable X to xor by itself, once you update X to its new value, you no longer have an X to xor back with. This would require a second variable to temporarily store X which is what the xor method is trying to avoid.
The problem is with the swap when the two variables are the same reference, not just the same value
Who here saw the deleted Devin stream? Stuff of legend
Yes, I thought this would be the recap for it. That was CRAZY.
What happened? I missed it
This stream was incredible
I joined in a few times. Wth happened then...?
Why deleted? Tweets too?
Before he got into search, it was a matter of solving problems. But with search it became a matter of creativity, and that's how you get infinite work.
Solving problems does involve creativity sometimes wdym
@NOT_A_ROBOT solving a problem implies reaching a goal, upon which the process ends. Thus it's a limited process, however long. Improving the search is not really solving a problem, the goals can always be pushed further once reached, without limit.
Stuff like this triggers my imposter syndrome so hard. I've been developing for 15+ years. I've mastered a bunch of languages. But I don't even know what half the words this guy is using mean.
Stop this comment hits so hard. But I guarantee you know some words that these guys don't after 15 years. But also don't compare yourself to Prime no one is Prime lol. Think about what we know before a task and after one. How much of this do you think he had to learn while he was doing it. Our job isn't to know the things it's to learn about them and how to use them.
In the same boat, but I think it's because this has more to do with Math and Cryptography than Programming.
13:27 This madlad is using Abstract Algebra to reason about a web app . Insane
This is what people think programming is
computer science ftw
Bijection is a pretty basic and standard term though, you don't need to know abstract algebra to understand it
@@user-lz2oh9zz4y this is what programming WAS in comp sci in uni. I hated it so much it made me change degrees. I didn't sign up to do calculus in dev, :/
@@colinstu Me neither, that's why I do all my calculus in prod
2^128 is 5 undecillion. I'm really surprised it cleared a decillion.
Did devin push the code to master? Guys update please.
Last I checked, he was waiting for his JIRA ticket. Hope he can get the ticket before holidays.
31:05 better idea : why not have NFTs over UUIDs so that you could own a UUID and resell it later?
There are much much more uuids than there are people on earth so owning one uuid is pretty useless
@arkadius228 The whole concept is useless... You just found out, congrats.
@@dexter9313 nfts can at least enrich those who sell them, uuids as nfts is just a bad idea
I'm fresh after graduating a CS degree so things like bijectivity, ciphers and enthropy make sense. I love reading about projects like this, it reminds me that programming is a mixture of creativity and math and it's beautiful
As someone finishing up a CS and a math degree, the intersection is my favorite.
14:29 As a math PhD student that teaches undergraduate math, I absolutely love when stuff like this comes up. The author just discovered a really interesting property (one that's not too bad to prove if you're willing to sit down with it). The author is saying that taking the composition of two bijective functions, is itself a bijective function.
It kind of translates to when you are solving an equation for x (like x^3-1 = 0) you are performing actions to both sides of this equation that are just applying functions! (and why when you have an even power for something like x^2-1=0, you can get multiple answers because it's not a bijective function on your entire domain and co-domain you're applying)
Edit: I must also add that chat is wrong. 1-1 is just half of the requirement. You also need to be able to achieve every output possible (onto). 1-1 means each output is reached only once, and onto means you can actually get every output that you want to be able to get.
It’s things like this website that truly show it doesn’t matter the topic the human race will stop at nothing try to understand and optimize the crap out of everything. Rad website.
There's already every UUID in the library of babel
If you XOR A with A it's all 0s and if you then XOR it with A again you still get A, it still works.
The problem arises when using xor to swap without using another register
@@SkylerAk what are you talking about? This swap works for all pairs of a, b, including when a=b or when any of a or b is 0
a = a^b
b = a^b
a = a^b
his javascript animation for page up/down has velocity and a delay, so using page buttons is way slower. Home and End keys are also not implemented.
Autoscroll also isn't supported. What about using scroll events?
Cat spotted at 8:00
Miauw~
ok now list out all GUIDs, i really need to find some GUIDs i can use.
Aren't guids the same thing as UUIDv4?
Nobody else use b60876f6-bbaf-4d0d-ae70-ce89ba0a89d8.
That ones mine
A Universally Unique Identifier (UUID) is a 128-bit label used to uniquely identify objects in computer systems. The term Globally Unique Identifier (GUID) is also used, mostly in Microsoft systems.
from Wikipedia, the free encyclopedia
Easy to spot a v4 UUID. The third group of characters always starts with a 4, and the 4th group of characters always starts with a, b, 8, or 9. You're welcome.
Why not just generate six less bits, shift the first 48 bits from what you generate, shift 0100, shift the next 12 bits, shift 10, shift the remaining bits. I don't understand "skipping bits". Why skip bits when you could just not generate bits in the first place. It seems like you're opening yourself up to hypothetical freakishly rare collisions?
Feistal cipher is easier if you split the bits into two even parts, hence 61 and 61
fun fact LCGs are used everywhere, math.random() in javascript, Math.Random() java, in python and all, people assume it’s just some random magic but when you get interested into it you can predict the next number from a random, by doing this you can get to know the real danger if you use it in the wrong place. A lot for website uses random string generator for like cookies that can be hacked like this
This is so great. I love the guy making this stuff. What a legend.
Agreed, total legend
I want to see the UUID of the day and how it will interact with current astrological 'data' to determine my destiny for the next 24 hours
@ 25:00 currently:
Why not use a scrolling search window for all buffered values? If no match is found you just continue to scroll. Please provide feedback on why it (won't) work.
I just studied this in uni!
This gave me flashbacks to Advent of Code's "Slam Shuffle" question from some years ago... I still sometimes wake up crying.
It would be fun to see Google new Willow chip to attempt this, at least a loop which goes through all the possible UUID's.
It's quantum. not linear, it doesnt do loops.
@@randomblogger2835 but the number of qbits in willow is 105 and we need about 122 bits to get all the UUID's, so their should be a need for a loop or something to compensate for the 18 missing bits right, (I'm not an expert) what do you think ?
UUIDs are just 16 bytes. Int64 consists of 8 bytes, Int32 consists of 4 bytes. You could call those "BigLongs", or Int128. The purpose of RNG is to generate every single bit as "randomly" as possible. Everything that deviates from that is something different.
Can someone explain to me what Prime meant by losing the data with xor? Sure, xoring number with itself return 0, but xoring N with 0 return N. How do you lose anything?
It is just skill issue at his part. You will only loose information if you override a variable with itself, which is probably what he did
prime was just confused there
As others have said, it's an issue with his code, not with XOR
Cool! I'm thinking of getting UUIDs for all my friends and family. Now I know where to go shopping for them.
This is like the Library of Babel but even nerdier
It's quite fun to realize that there's 1 UUID that is the absolute most popular in our history :)
You know what, I've never seen such beautiful snake oil in my life.
How is it snake oil? It does exactly what it says on the tin
@orterves lol, Prime joked it was snake oil, I'm just playing along.
@infinitivez ah I missssed that my apologiess
@orterves It alright.. there were just too many tasty UUID's. I'm not even sure how *I* caught it with all that eyecandy 😉
ok but how do i center a
Search does not scroll to the closest UUID. It scrolls to the closest in the tiny set that it generates from your input. It guesses about 20 and then sorts them by "which one would be next", where it actually would need to generate a nonillion and sort those when you give it the entire first 8 characters. Which, with quicksort, would take 1 decillion times the time it takes to sort 1. Assuming a single instruction per sort iteration on a 4GHz machine that would take 10 sextillion seconds. That's hundreds of trillions of years.
In short, it cannot search all of them and serve them in order if generating and sorting is anywhere in that algorithm. However, if it just showed you any "next" anywhere, it could. Then it would take you 1 decillion times pressing "find next", but that's not its problem anymore.
31:37 Technically, any trending page of any social media is already a trending page of UUIDs
Ask Devin to do it, he will crush it and make it better
bit twidling (shifting and masking) is what you do to write cpu emulators. I can't belive I used this knowledge anywhere else after coding up my risc-v emulator lmao
“Of all things to think about, it’s just not the one I thought”
Ah, LCG, many years ago I also messed with this formula to generate random but predictable non-repeatable number to be used as Invoice ID while developing a eCommerce website.
My reaction to this video
"Wow I don't understand any of this"
"CAT!"
"Wow I don't understand any of this"
XORing yourself or 0 is no problem at all, no idea what Prime is getting at. V XOR V == 0, 0 XOR V == V presto value back
Me: drifting off to sleep
Brain: but what about UUID collisions in critical infrastructure
You can XOR two of the same number together to get 0, and still reverse it with the XOR though? Thats part of the XOR? if you XOR 11 and 11 you'll get 00, but if you XOR 00 and 11 it returns 11, the original.
We need to be able to updoot our favourite UUIDs.
Yess Feistel cipher! Used this to make an autoincrementing id number turn into a unique hexadecimal id that looked random. Fun project.
Oh it's the frickin' jane street guy. That makes a lotta sense
Couldn't you binary search the original list? Since it's sorted and then you take that UUID value and you pass it to the entropy function and you use to get the index of the UUID
But the problem is finding the nearest *displayed* UUID, as what a natural search would do. But since it's scrambled there's essentially no way to tell the nearest one without brute forcing all possible matching UUIDs for the search pattern, unless well you weakened the randomness aspect of the entropy function
@phucminhnguyenle250 I mean yeah, what I described wouldn't show the *nearest* one, but it would show you all of them they are. I am pretty certain.
You dont need a database with all uuids in it. You can literally just generate one based on the row index and do some "procedural generation"
But would that give you all of them exactly once?
isn't that what he did lol
@@davidr2421 nope.
14:43 there might be a lot of people lying in the chat but... His comment on bijectivity is, i believe, false without broader data context. Proof? Modulus function. Where did we start from? Of course if he means the entire context, that is true but it's not *operationally* true. I'd hardly call having to read an entire book having a "mapping function". If I end with a 3, even if i know i modded with 6 there's no way I could know I started with a 3 or a 9 or a... You get it. Not unless i had it recorded. Then you've got more than a mapping via a calculation, you have an enormous lookup table.
9:58 what is a "random pseudo-number"? 😏
Random pseudo-numbers have trade-offs when compared to pseudo-random numbers, because they are actually truly random, in exchange for merely having the appearance of being numbers (they aren't actually numbers, but they are similar enough to be used like numbers in most use-cases).
Also, Prime has dyslexia, which may contribute to this.
@@haph2087 His dyslexia was running wild in this one, yeah.
Ok, I’m only missing one tiny piece of information- what the hell is a UUID?
UUIDs are useful because they're highly likely to be unique globally. This makes it easier to identify specific data elements across different platforms, applications, systems, and databases.
Hands down
virtual scroll ftw
Oh, so this is from the same guy who brought us the “one million checkboxes” website 😅
This is so painful to watch... brilliant bitwise manipulation, but then not only writing it all without ASM... but writing it in Python??? This is probably 10M times slower than it needs to be XD
Imagine if someone do this project to predict Hash 256 pairings with paired of all possible SSH certificate.
damn, i wish we would have a list for every number too
For search, couldn't the naive way work? Like couldn't you just start from the current position, and generate the UUID from that position on and just find out if the value is there?
No, there may be an enormous gap between the current index and the next one with the desired substring. The example of aabb is small enough to occur frequently, but what if you were searching for __f4976e-b9db-4c1d-9598-7836077e8707? This will occur 256 times throughout the list, around once every ~2^116 indices.
A naive implementation will need to generate exponentially more UUIDs until it finds the next match as the length of the search string increases. You could have it put a hard cap on how far forward it will search, but we're back to having to make a compromise anyway.
@@Shananiganeer But it wouldn't be exponential though, it's a very slow search for sure but it's just O(n) in complexity. You're also assuming we should search as a string rather than just bits. Take your __f4976e-b9db-4c1d-9598-7836077e8707 convert it to bytes and a mask and then and/== it until you find your match.
You could also use a hybrid solution where if you have a few defined bits you do the naive search, and if you have a lot of them you can do the reverse search.
omfg UUID NFTs you are the goat I'm in
searching is easy. there's lots of overlaps in the string chunks. just pretend it's an interview problem and re-invent indexing by brute force pre-searching and storing the full set of search results for every valid input chunk..
i just got flashbacks to discrete math and now im sad
bijection mentioned 😲
the research institute where i interned wanted me to optimize their internal toolchain for Internet Explorer. I asked by confirming they're talking about microsoft edge right? my mentor said no. Internet Explorer. I was stuck with php, little to no use of js, html, css (no tailwind), and was forced to optimize my shitass software for their site.
Bro unintentionally put every possible Minecraft user id in an ordered list. I wonder who is closest to the top!
Steve is #1721978447384044941877699885222533204 in the list.
0:00 what a great start 😂
i hate js scrolling, how imma scrape that site now?
But what is a uuid
The primetime can you speak about devin?
Should have a look on IPFS CIDs and IPLD data model ><
CIDs include the hash function they're using.
14:12 learned this is precalc junior year, ez
Hey prime caboose.
He should do Bitcion private addresses next
Oh no, they leaked my uuids on the internet, I have to go change all my credentials now :(
The dude was tired of pretending. He sorts UUIDs all day long, just figured hed cut out the middle man and sort them directly
Why's prime keep saying 0? All 0 can be recovered with XOR.
He's concerned about accidentally XORing a value with itself, yielding 0, and no data.
This only occurs when you mess up, but messing up is quite common.
Reading stuff from the first 10 min of my first math lecture (aka bijection) on stream "this is getting to advanced" xD
I see a lot of bijectivity over here
17:50 Hey dont bash python. It may not have a compile time to prevent some footguns at, but at least it has a runtime to crash at and not deploy time like javascript.
2012.. Windows XP was still in support. ofc IE7 too
I'm a Rip Van Winkle who wrote up a couple years ago. Haven't yet slept with React or anything beyond Bootstrap on the client. Rolled my own JIT scroller in js recently, with regular sticky rows that made it fun. Used intersection observers. It's a beautiful mess. Now I know why you guys like pre-rolled components so much. I'd try one but I'm too busy rolling another one. ;)
Watched all the way without knowing what a UUID is
What kind of network engineering or intrusion detection is this guy doing to make a UUID website?
If the value is zero you only need to xor once
This kind of content is so funny to me lol
Please tell me someone PR'd trendy UUIDs
Looks like an AOC question
How is nobody talking about his use of switch
somebody find the accidental duplicates caused by the constrains 😀
Who’s here after Devin Stream ?
he should implement download :)
I always thought a bijection waa what happened whenever I flirted with a couple
Forgot to show search results at scroll bar. Wasted :)
we are so in
So you concur?
7:59 CAT
I've worked on a project that supported Internet Explorer to maybe 2021? Just thought everyone should know. There are probably other projects still supporting IE out there.
Enjoy that nightmare.