Thank you for the feature! Thibault is a legend & Lichess is awesome. Here as some additional information based on what Prime said in this video: 2:42 - For top level Chess players, a simple nudge in a critical position to let them know they should use their time is enough to swing a game in their favour 9:00 - Bare metal may not be a great word here. I was trying to differentiate from the cloud, and to say that they manage everything on the machines (down to the Linux distro) 20:55 - Storage makes up 40-50% of the overall server costs, or about $2000 USD a month. There is a spreadsheet with all costs breakdown linked on the Lichess site (or at 32:11) 21:11 - I think picking a DB can be very scary when starting a project. What I meant here is that as long as your choice has robust and scalable it's not that critical to building a successful product. 25:00 - What I meant by raw Javascript was DOM manipulation 30:34 - Not sure about this one since Thibault still uses Arch on his personal computer 32:50 - It all runs off donations and it is registered as a not-for-profit
Welcome to MongoDB, where every field of every dataset is basically Schrödingers Datafield. You only truly know if it exists and what type it is, once you observe it.
Each team of engineers at a big company owns a few widgets on the site, or a service or collection services, or internal tool or whatever. Can be very silo’ed
Theres also a shit ton more bureaucracy to deal with at larger comapnies. Younneed to alogn more people to amke decisions. You need deal woth a lot more secuirity reviews for any small features. You need workwith all the tech debt we have
3:00 you wouldn't need to do anything that complicated. Just having a boolean that answers if the player is in an advantaged position or not is enough to drastically improve chess between grandmasters. It's arguably the hardest thing at that level of chess, simply analyzing whether your strategy is working or if there's a massive hidden threat. If you can just have the answer in yes or no form, that's enough of an advantage to change how you play those positions.
Another way to think about it is that at that skill level of chess, you can presume that anything that is findable will be found if the player is told to look for it. So it would be an effective method to just have it be quiet until an imbalance occurs on either side, and then it tells you to pay attention.
I am coming from Java 8 (old legacy customers) background doing a one-off Scala project for large data transformation. I tried to do it the proper Scala-way (everything immutable and FP) from the EPFL Effective Scala course. It was such a delight to use and I just love it. Later on I learned Java copied/mimicked a bunch of the Scala features over to the modern Java like case class -> records, pattern matching, etc.
Regarding the vibrations question. The answer is simple. The beads would vibrate when there is a great move on the board that can give the player an advantage. Given enough time, top chess players will find it. The problem is with knowing whether it exists because if it doesn't then you are just wasting your time and the move you thought of in 5 seconds is the move you will play after wasting 5 minutes. The time on the clock is the single most important resource you have. If you waste it on the wrong moves, then you won't have it when it matters.
Funny enough I actually watched the origin of that rumor. Eric Hansen made a joke about it on the chessbrah channel covering the scandal and then mainstream media ran with it as a real possibility 😂
How can you know for sure if they're cheating? Don't worry, they'll let you know. If they moan or leave a wet spot on their chair, it's their prostate being milked for hours. Wait, he's playing chess? I didn't know that, I thought he was just gooning in public.
i think the origin of the meme is that when someone was asked about how someone could’ve cheated, one possible answer was “using a hidden vibrating device”, at which point the jump to beads was very obvious
A manager went to the master programmer and showed him the requirements document for a new application. The manager asked the master: "How long will it take to design this system if I assign five programmers to it?" "It will take one year," said the master promptly. "But we need this system immediately or even sooner! How long will it take if I assign ten programmers to it?" The master programmer frowned. "In that case, it will take two years." "And what if I assign a hundred programmers to it?" The master programmer shrugged. "Then the design will never be completed," he said. - The Tao of Programming
I hate to say it but the "feature is a liability" talked about at 35:20 will never be realized for the majority of professional devs, because there's too much jumping around from company to company, while speedrunning features to impress their bosses for the sake of miniscule gains, therefore most people don't actually ENGINEER the thing they work on. Ornicar2 is an inspiration!
there's no coordinated engineering as long as large companies treat employees as interchangeable and ignore skills and knowledge that can't be immediately transferred as employees come and go due to the plug and play mentality of managers.
When I hear "a bare metal server", I think "MacBook under the stairs". Also, lag compensation and optimistic client-side rendering are _not_ unique to turn-based games. I play a lot of first-person shooters. Optimistic client-side rendering is what causes rubber-banding on high ping when the server decides your inputs are invalid for whatever reason (e.g. packet loss). One form of lag compensation known as server-side movement prediction is what causes the models of disconnected players to continue on their last course at their last speed until they hit a wall, and can mitigate a lot of peeker's advantage. Another form of lag compensation known as ping rollback (or rollback frames in fighting games) is what causes you to get shot around a corner, because it gives the guy who fired the shot preferential treatment over movement. Overwatch 1 in particular had a fairly strong ping rollback system, and that game felt fantastic to play even on 250 ping (although I think ping rollback capped out at maybe 100 ms). Now, what _is_ true, is that turn-based games can crank all these dials up to 11. 1-5 second ping times could go wholly unnoticed in chess, while an FPS player would likely start screaming the instant they see triple digit ms. Thank you for coming to my TED talk -a guy who has never written a letter of netcode
People do play fast games of chess where lower latency does matter (I play a lot of bullet where each player starts with 1 min on their clock, some people even play ultrabullet which is normally 15 seconds). Or they sometimes get low on time while playing slower games. Lichess does compensate for ping, and I think that you get more time to think if you're on higher ping/can premove in a longer window, but it would be excessive to compensate a full second per move. The servers are in France, and I typically get a bit under 300ms ping, which feels noticeably more lenient than when I watch some streamers play (who I assume have lower latency because of their location).
@@asdasdv7540 the way I imagine lag compensation for bullet chess games working is that you get more time to think, sure, but not when it matters. The instant your computer gets the enemy move, your clock is running, and you only have the time on the clock to react to the current enemy move. So does it really matter if you're desynced by up to 5 seconds? You get 10 more seconds per move to imagine what your enemy is going to do and general strategy, sure, but no additional time to react to anything.
@@mage3690 An extra 10 seconds (or even 1 second) per move would matter a massive amount in bullet. You have extra time to anticipate the enemy moves/calculate lines, and see any flaws in the moves you were considering to do. You just have more time to generally process the board. Keep in mind that the 1 min is not per move, it's for all your moves over the entire game. Thinking on your opponents time is very important in general. When in a time scramble (when both players are low on time), you barely have time to think, you just have to make legal moves, while maybe going for some plan/tricks to win, but playing fast enough to not run out of time. If you can have that extra time to think about your opponents threats, it is a big deal (for both players, since your opponent would also be thinking on your time).
I find it amazing that Overwatch was such a great piece of software, ECS, latency system, design, playability. But in the end what killed the game was Blizzard's bad decisions because the game did not enough money to be "worth it"
every sufficiently complex and highly available system evolves to either install or reinvent the wheels that are Erlang/OTP. every sufficiently performant system evolves to approach the limit that is Awk/NC.
Regarding "passing a message via vibration" a common take from grandmasters is that even a single bit of information (specifically buzzing once when the engine thinks there exist one move that is much better than all others) would be a huge advantage in competitive play between pros.
Scala is great, used it at a startup for 4 years. And while Play has downsides, their Twirl template language is very very good. Typesafe and very fast
yes it has! I learned Scala for a one-off project with Apache Spark. I noticed that if I used Jave 8 to compile it the time is horrendously slow. But if I use Java 21 to compile it, then something that takes 2 minute compile goes down to something like 4-10s. Note I use Gradle for my build.
Let's not forget about Peppy - author of osu!, dev who created one of the most popular if not the most popular ranked rhythm game almost entirely himself.
btw the next update to use osu lazer, it's a complete rewrite and opensource and his philosophy is "while players aren't switching to lazer on their own, we have work todo to improve it" and i think that's beautiful, btw osu lazer exists since 2017 and still isn't the default
Agreed about using frameworks at the start, then as time goes on, the enterprise demands to the codebase make them a liability. I think its still the correct path though, as going enterprise from the start introduces complexity which is counter-productive to maintaining a smaller codebase with non-domain developers.
still that way in C#, just integers with names attached. I didn't even know enums were fancier in other languages with constructors and whatnot until recently.
Zig I think does this the best way. For a tagged union, you do union(enum), and it creates a classical enum for the tag of the union. You can also define the enum separately and pass it in. Basically, it's a union with an enum as a tag in a position.
Nah Flix gets the clear win as a language itself because it's newer and does not have technical debt and backward compatibility to worry from. Flix needs however a plan to get enough people to make libraries in it.
I want to draw everyone's attention to the humbleness presented. Guys, he literally says "product of years of evolution". But, instead of evolving new features, he evolves the system for less footprints. I know that product team has to come up with new features every month, and your enterprise package allows customers to request for "customization". But, a lot of the time, these additions are abstraction of existing product. So, if it is absolutely the case, UX is the problem.
The user interface of Lichess is actually pretty good, very fast and it has lots of features like links to live streams, views of up to 15 games in real time, lists of problems, analysis, etc.
*The epitome of the corporate world:* ayyo I need a full stack engineer who maintains our entire site. Pay: $58,000/yr plus we have pizza parties every Tuesday.
4:05 Look at China. All of China is one timezone instead of at least 2, maybe 3. Or Nepal, they are UTC + 5¾. Or look at the International Date Line. We have UTC - 14 ffs.
For cheating in chess via vibration, I think what is important to know is that on the professional level, the games come down to one or two critical moments, where a critical moment is where you only have one possible winning move, where any other move makes you throw away the win, or a situation where there is only one defensive move, where any other move makes you loose the game. One of the most important (and hardest) part of this when you are playing, is to know exactly when this moment is ( and here is were a simple vibration hint can assist). This will allow you to invest a great deal of your limited time trying to find the correct move, compared to you not having a vibrator, and not knowing it is a critical position, and just making a move within a few minutes, since you don't want to run out of time in the long run. I would also like to point out, that this way of cheating wont make a amateur beat a professional, but for players of similar strength, if would definitely give one player the edge.
they make more sense if you consider it's sane for a country that's small enough to exist in one time zone even if it intersects an imaginary line. Imagne driving across town and needing to change time zones because of it!
These sort of retro-viability of platforms created by one guy often ignore the fact it is more likely that it was chosen due to personal capability and preference over anything else.
About the butt plug thing, at the highest level it's enough to send a single signal whenever there's a critical move on the board, that alone would be enough to decide victory especially across multiple matches, while also not tripping any cheat detection algorithms or even skewing statistics in a significant way
I just watched this yesterday so glad you’re doing this one! I tried to go down a Scala hole afterward but it just didn’t seem to be there content wise
At a Grandmaster level, if you can highlight a single square, that's generally considered good enogh for a grandmaster to figure out what they are being advised. So a learning a simplified set of notifications to be able to given them that would be all that's required normally.
You know why he was so fast and productive? He didn’t have a team to sync with and stakeholders to cater to. Two devs is not a 2x speedup. Four devs feels like 2 devs most of the time. More devs is a burden.
I think that the enums are called enums because the enumerable set. Numerable sets are a set that have 1:1 correspondence with the natural numbers, so that, for every element exists a natural number that maps the element. In this case, the enum represents the mapping between the cases and a natural number, I think. en.wikipedia.org/wiki/Computably_enumerable_set
Re: messaging via vibrations. For a good chess player you really only need to send the destination square, which can easily be coded as two integers between 1 and 8. So if you are OK doing it quite slowly then just vibrate the number of times for the first digit then the number of times for the second digit. If you can vary the vibration in two ways then it could easily be changed to 1-4 with each type of vibration meaning a different half of the board.
As long as a dependency is as reliable as your standard library, it shouldn't be a problem to include it. I would even prefer it to your own code. The issue with dependencies is the "have a bug -> upgrade" cycle. If libraries A and B have transitive dependencies on C, those transitive dependencies can conflict. Even if A and B cooperate well today, that doesn't guarantee they will tomorrow. Also, dependencies can be intrusive, which is both a value and a blessing. Something like Spring Boot or Ruby on Rails is very "intrusive" to the point that they *are* your architecture. Not using them isn't an option-you wouldn't have software without them. Using them means waiting for a new version to have a bug fixed. At the end of the day, handling binary dependencies is a mess, which is why solutions like distro package management and Docker were built. If there were a simple solution, we would already be using it. Taking a stance of "not using dependencies" means not using systems like Linux. So, that's that.
@@mohd-arzhe is a yogurt male. The more sophisticated version of a sigma male. Always on the ground, but does not forget to eat his protein-packed Greek yogurt.
For the cheating part, I've seen a lot of videos of Caruana and others, they say that a simple signal indicating critical positions give them a lot of advantages. Then the player would do the thinking in the position.
Scala is great, especially when you keep it relatively simple and level up your team gradually. Performance and Type Safety are right up there, but it doesn't read like hieroglyphics the way Haskell can to a newcomer.
3:10 You could do it N times to specify the column of something, and then N times again to specify the row. As just knowing the location to place something is enough for a good chess player to figure out what to do. If you weren't that good of a player, you could maybe do this twice, and so you first specify the start square, and then the end square. There are probably better ways of compressing this, maybe taking from inspiration from morse code with short and long signals, you can for example specify which side of the board it is on, so you only to at most 4 pulses, rather than 8.
I did Scala from 2012-2018 or so. Great language and has totally changed the way I think about writing software. I switched to working on Go at a startup after that. It just so happened that a couple of other guys that got hired soon after me were also Scala devs. At first it was hard for us to wrap our heads around and appreciate something that had ignored the last 30 years of Computer Science, but we all eventually came to appreciate it's simplicity, fast builds, and small executable sizes. Keep in mind that go modules didn't exist at the time so there were competing ways to deal with dependencies. I still wish there were some way to work in Go treating data as immutable that was natural, but I digress. In the early days of Scala there wasn't really other ways to build projects sanely other than SBT. You almost had to actually understand a bit of Scala before being able to build it.
@@awful999 It doesn't sound familiar, so I don't think so. At the time I worked on services for a video streaming platform for a cable company, so no cli stuff really.
Regarding semantic type systems when applied to game's rules that can not change. Rust is perfect. Would you want to encode business logic into Rust's type system you will be refactoring every quarter, just to compile.
42:26 But isn't that also the issue of "Batteries Included"? That the creaters of the language also have to implement the standard library, so creating a dependency system, they essentially don't need to anymore? Also I am a big fan of "Batteries Included", but I can understand the other approach aswell.
To cheat you really do only need a boolean signal. At the high end being told that a particular position has a significant tactic and you need to switch your brain into “puzzle solving” mode is enough to gain a huge advantage.
@40:30 I think it's nice to have community crates, but the best world is when the most successful projects that have become de-facto standards are folded into more of first-party support, whether that's being adopted into the standard library or first-party modules, or inspiring first-party APIs in the standard library. The worst thing is for crates to become de-facto standards where everyone is always pulling it into every project, but it is never absorbed into first-party support and the maintainers may eventually disappear suddenly and without warning.
There is a video of a channel called Mike Boyd named "Actually making THAT chess cheat device". He actually uses it against a guy really good at chess in the video and wins. Worth watching
Tagged unions are called "enums" these days because there's no other satisfying concise keyword for what they actually are. At least, I have yet to either find one or come up with one myself. Haskell uses the keyword "data" and OCaml calls them "variants" neither of which express what they're about as well as "tagged union" or "sum type" do.
I was on his stream while watching this video, he said the video from Tom and Prime's reaction are exaggerated. Im not sure if he is being humble, or these are just too easy for him and we are just all --100x engineers.
@@tahayassine7435 for a project that's community backed ? Where you are your own boss and don't need to convince higher ups that tech debt needs to be solved ? Where tech wise you do whatever you want ? Yeah I take that slight cut sorry.
Sumtype/"enum"/tagged unions are great. It's not true that Java has no sumtype nowadays: Java 21 has sealed classes that can act as sumtype (you can even do pattern matching on them)
10:54, I also love enums, @prime how do you deal with Go not having a real built in enum system? I was a little surprised finding I sort of had to roll my own - is this expected or am I doing something wrong?
about the Rust for Linux thing and encoding kernel semantics in Rust: It's okay to have doubts about enforcing them in the type system, but what are the alternatives? Documents, comments and dev knowledge aren't reliable, require first-hand experience and cannot be automated. Are we choosing a sub-par solution just because that's what we did in the last 30 years? I'm not saying the type system is enough, but why can't we just have both?
timecode 3:10 its weird and unexpected that we are talking about this anyway, but we've already started delivering message with vibration: Chess field is a 8x8 square if there are 3 distinct vibrating sources its 8 combinations 2 pulses uniquely identify a cell another 2 pulses uniquely identify a second cell this way in 4 pulses every move available in any position may be uniquely messaged How realistic it is to be able to differentiate it all during a real game I dont know, but if you're cheating this way already, I think its within reasonable expected effort
two beads. one that's in shallow denotes letter. one that's in deep denotes number. 3 shallow vibrations and 4 deep vibrations and a pause would mean select piece on C4 and then after the pause you could repeat vibrations to say where to move piece to.
I don't think that's a possibility, there are not many nerve endings deep, so I don't think one would be able to distinguish deep vibrations well. Talking from my encyclopedic knowledge, not experience
around 41:00, talking about rust reaching JS status because of duplicate competing dependencies. i tried reading the rust book, and i think either chapter 2 or 3 was telling me to use cargo to install dependencies so i can generate a random number. i immediately got npm vibes and decided maybe i shouldn't get into rust after all.
The cargo philosophy is bad in my opinion, there is no way of getting around in some cases unless you want to write custom wrappers for the c libraries. But the language is very strong, as someone who shit talk it for a while, its worth taking some time to avoid cargo and get a feel for the language.
And I might be biased because I write a fairly decent amount of rust myself but, I think the primary reason for getting you to use a crate in that instance was both getting a handle on the fact that cargo is the main build tool and it does all the major stuff (ie: “plz don’t use rustc to compile your program”) And also the fact that writing a random number generator inside rust itself might be rather overwhelming for a newbie right off the rip (type system and all) you gotta remember, the book itself is aimed at like, complete plebs. Well, that being, the guy above me has a solid take, it’s pretty accurate too. Getting a handle on the base language itself is pretty important and using the language has changed how I interpret and interact with other languages as a whole (for the better. Especially performance wise from teachings of borrow checker etc. forcing things)
Rust, lots of deps = small std lib - think about embedded stuff etc. Or think of lots of deps as a modular std lib. Flutter, multi platform front end - web, desktop, android, ios.
that issue of having too many ways of doing things is being adressed by scala 3, if you haven’t looked at it since scala 2 it might be worth revisiting in future
Thank you for the feature! Thibault is a legend & Lichess is awesome.
Here as some additional information based on what Prime said in this video:
2:42 - For top level Chess players, a simple nudge in a critical position to let them know they should use their time is enough to swing a game in their favour
9:00 - Bare metal may not be a great word here. I was trying to differentiate from the cloud, and to say that they manage everything on the machines (down to the Linux distro)
20:55 - Storage makes up 40-50% of the overall server costs, or about $2000 USD a month. There is a spreadsheet with all costs breakdown linked on the Lichess site (or at 32:11)
21:11 - I think picking a DB can be very scary when starting a project. What I meant here is that as long as your choice has robust and scalable it's not that critical to building a successful product.
25:00 - What I meant by raw Javascript was DOM manipulation
30:34 - Not sure about this one since Thibault still uses Arch on his personal computer
32:50 - It all runs off donations and it is registered as a not-for-profit
picking a DB based on pertinence to the problem > picking a DB because you like it and know it well
Welcome to MongoDB, where every field of every dataset is basically Schrödingers Datafield. You only truly know if it exists and what type it is, once you observe it.
My god that's soo good Imma sc it
I prefer stored procedures in relational databases myself. 🥸
LMAO
And half the time it's dead and doesn't exist
I'm not a programmer. What is the $jsonSchema validation for?
A real 100x dev makes a 10 hour reaction video from 6 minutes of content.
Whenever I hear the number of engineers at any large company, I do often wonder wtf they all do
Each team of engineers at a big company owns a few widgets on the site, or a service or collection services, or internal tool or whatever. Can be very silo’ed
Overly specialized. Often enough more than needed?
This is why companies are firing people because they see comments like this
Theres also a shit ton more bureaucracy to deal with at larger comapnies. Younneed to alogn more people to amke decisions. You need deal woth a lot more secuirity reviews for any small features. You need workwith all the tech debt we have
The bigger company I work in because, the less of actual work I have to do
for completeness: it was the Omega Star team that still doesn't support ISO timestamps (even though they said they would, like a month ago)
I'll die alone. Without ever knowing love.
@@wlockuz4467So will I. You're not special.
can anyone explain wtf is an omega star team
@@qlx-i It's a joke in the Microservices video from KRAZAM
3:00 you wouldn't need to do anything that complicated. Just having a boolean that answers if the player is in an advantaged position or not is enough to drastically improve chess between grandmasters. It's arguably the hardest thing at that level of chess, simply analyzing whether your strategy is working or if there's a massive hidden threat. If you can just have the answer in yes or no form, that's enough of an advantage to change how you play those positions.
Another way to think about it is that at that skill level of chess, you can presume that anything that is findable will be found if the player is told to look for it. So it would be an effective method to just have it be quiet until an imbalance occurs on either side, and then it tells you to pay attention.
Scala is pretty neat for a long-term one-man project, where advanced language features are not a downside, while types are amazing.
Scala is like Rust with GC
@@ederolima I don't think so, they don't serve the same purpose
@@DlacremeFRGC is the difference that dictates the difference of purpose between the two.
@@ederolimaI’m gonna start using scala, huh
I am coming from Java 8 (old legacy customers) background doing a one-off Scala project for large data transformation. I tried to do it the proper Scala-way (everything immutable and FP) from the EPFL Effective Scala course. It was such a delight to use and I just love it. Later on I learned Java copied/mimicked a bunch of the Scala features over to the modern Java like case class -> records, pattern matching, etc.
Regarding the vibrations question. The answer is simple. The beads would vibrate when there is a great move on the board that can give the player an advantage. Given enough time, top chess players will find it. The problem is with knowing whether it exists because if it doesn't then you are just wasting your time and the move you thought of in 5 seconds is the move you will play after wasting 5 minutes. The time on the clock is the single most important resource you have. If you waste it on the wrong moves, then you won't have it when it matters.
Funny enough I actually watched the origin of that rumor. Eric Hansen made a joke about it on the chessbrah channel covering the scandal and then mainstream media ran with it as a real possibility 😂
Also you could just encode the moves and have it vibrate it
assencoding
How can you know for sure if they're cheating? Don't worry, they'll let you know. If they moan or leave a wet spot on their chair, it's their prostate being milked for hours. Wait, he's playing chess? I didn't know that, I thought he was just gooning in public.
i think the origin of the meme is that when someone was asked about how someone could’ve cheated, one possible answer was “using a hidden vibrating device”, at which point the jump to beads was very obvious
A manager went to the master programmer and showed him the requirements document for a new application. The manager asked the master: "How long will it take to design this system if I assign five programmers to it?" "It will take one year," said the master promptly. "But we need this system immediately or even sooner! How long will it take if I assign ten programmers to it?" The master programmer frowned. "In that case, it will take two years." "And what if I assign a hundred programmers to it?" The master programmer shrugged. "Then the design will never be completed," he said.
- The Tao of Programming
I hate to say it but the "feature is a liability" talked about at 35:20 will never be realized for the majority of professional devs, because there's too much jumping around from company to company, while speedrunning features to impress their bosses for the sake of miniscule gains, therefore most people don't actually ENGINEER the thing they work on.
Ornicar2 is an inspiration!
there's no coordinated engineering as long as large companies treat employees as interchangeable and ignore skills and knowledge that can't be immediately transferred as employees come and go due to the plug and play mentality of managers.
When the 1000x engineer vid come up, we are WAITING DAMN VIDEOOOOOOOOOOOO
When I hear "a bare metal server", I think "MacBook under the stairs".
Also, lag compensation and optimistic client-side rendering are _not_ unique to turn-based games. I play a lot of first-person shooters. Optimistic client-side rendering is what causes rubber-banding on high ping when the server decides your inputs are invalid for whatever reason (e.g. packet loss). One form of lag compensation known as server-side movement prediction is what causes the models of disconnected players to continue on their last course at their last speed until they hit a wall, and can mitigate a lot of peeker's advantage. Another form of lag compensation known as ping rollback (or rollback frames in fighting games) is what causes you to get shot around a corner, because it gives the guy who fired the shot preferential treatment over movement. Overwatch 1 in particular had a fairly strong ping rollback system, and that game felt fantastic to play even on 250 ping (although I think ping rollback capped out at maybe 100 ms).
Now, what _is_ true, is that turn-based games can crank all these dials up to 11. 1-5 second ping times could go wholly unnoticed in chess, while an FPS player would likely start screaming the instant they see triple digit ms.
Thank you for coming to my TED talk
-a guy who has never written a letter of netcode
People do play fast games of chess where lower latency does matter (I play a lot of bullet where each player starts with 1 min on their clock, some people even play ultrabullet which is normally 15 seconds). Or they sometimes get low on time while playing slower games. Lichess does compensate for ping, and I think that you get more time to think if you're on higher ping/can premove in a longer window, but it would be excessive to compensate a full second per move. The servers are in France, and I typically get a bit under 300ms ping, which feels noticeably more lenient than when I watch some streamers play (who I assume have lower latency because of their location).
@@asdasdv7540 the way I imagine lag compensation for bullet chess games working is that you get more time to think, sure, but not when it matters. The instant your computer gets the enemy move, your clock is running, and you only have the time on the clock to react to the current enemy move. So does it really matter if you're desynced by up to 5 seconds? You get 10 more seconds per move to imagine what your enemy is going to do and general strategy, sure, but no additional time to react to anything.
I'm open to being wrong here, though -- I don't play online chess, so I don't know how much it would matter.
@@mage3690 An extra 10 seconds (or even 1 second) per move would matter a massive amount in bullet. You have extra time to anticipate the enemy moves/calculate lines, and see any flaws in the moves you were considering to do. You just have more time to generally process the board. Keep in mind that the 1 min is not per move, it's for all your moves over the entire game. Thinking on your opponents time is very important in general. When in a time scramble (when both players are low on time), you barely have time to think, you just have to make legal moves, while maybe going for some plan/tricks to win, but playing fast enough to not run out of time. If you can have that extra time to think about your opponents threats, it is a big deal (for both players, since your opponent would also be thinking on your time).
I find it amazing that Overwatch was such a great piece of software, ECS, latency system, design, playability. But in the end what killed the game was Blizzard's bad decisions because the game did not enough money to be "worth it"
"So youre a scala dev? Enumerate all possibilities."
every sufficiently complex and highly available system evolves to either install or reinvent the wheels that are Erlang/OTP. every sufficiently performant system evolves to approach the limit that is Awk/NC.
Dude's raw dogging transistors out here
Regarding "passing a message via vibration" a common take from grandmasters is that even a single bit of information (specifically buzzing once when the engine thinks there exist one move that is much better than all others) would be a huge advantage in competitive play between pros.
This is written by 1 person...
The next 2 people with 3000 and 1000 commits that probably aren't getting paid at all..
the guy with 50000 commits is being paid 58k a year. How much do you think they're able to pay the 3000 and 1000 commits guys?
Enum is short for electronic number
They need to do a cavity search before each match.
well well well, if it isn't a-skill-issue-agen
Are you a human?
@@Tymon0000we are cooked
dead internet fr
what's happening
Scala is great, used it at a startup for 4 years. And while Play has downsides, their Twirl template language is very very good. Typesafe and very fast
Re 34:15:
> My point today is that, if we wish to count lines of code, we should not regard them as "lines produced" but as "lines spent".
-- EWD 1036
React is amazing for SPAs but it turns into a mess once the whole site starts running with React.
what if the whole site is an spa? i like vue or solid more than react anyway
I remember wanting to learn Scala like 10 years ago and I just couldn't bare the compile times. Hopefully it's improved significantly since then!
yes it has! I learned Scala for a one-off project with Apache Spark. I noticed that if I used Jave 8 to compile it the time is horrendously slow. But if I use Java 21 to compile it, then something that takes 2 minute compile goes down to something like 4-10s. Note I use Gradle for my build.
Let's not forget about Peppy - author of osu!, dev who created one of the most popular if not the most popular ranked rhythm game almost entirely himself.
That's not anywhere close as impressive as what the author of lichess did, at least in terms of IT infrastructure.
@@InXLsisDeo Peppy also doesn't work alone by far. Though to me it still is impressive
btw the next update to use osu lazer, it's a complete rewrite and opensource and his philosophy is "while players aren't switching to lazer on their own, we have work todo to improve it" and i think that's beautiful, btw osu lazer exists since 2017 and still isn't the default
Agreed about using frameworks at the start, then as time goes on, the enterprise demands to the codebase make them a liability. I think its still the correct path though, as going enterprise from the start introduces complexity which is counter-productive to maintaining a smaller codebase with non-domain developers.
In cs history, enums were literally just types with named integer type constants counting up from 0.
I like both typical numerical enums, but also more Java style enums that act as compile time constants
They both have utility
still that way in C#, just integers with names attached. I didn't even know enums were fancier in other languages with constructors and whatnot until recently.
And the 'tag' of the tagged union is a 'normal enum'.
Zig I think does this the best way. For a tagged union, you do union(enum), and it creates a classical enum for the tag of the union. You can also define the enum separately and pass it in. Basically, it's a union with an enum as a tag in a position.
Scala is the best jvm language imho. Typeclasses, higher kinded type inference. Good interop with the test of the JVM ecosystem.
Nah Flix gets the clear win as a language itself because it's newer and does not have technical debt and backward compatibility to worry from. Flix needs however a plan to get enough people to make libraries in it.
Primeagen and chess in one video - not something I expected to see in my YT recommendations but clearly something I am happy to see
I want to draw everyone's attention to the humbleness presented. Guys, he literally says "product of years of evolution". But, instead of evolving new features, he evolves the system for less footprints. I know that product team has to come up with new features every month, and your enterprise package allows customers to request for "customization". But, a lot of the time, these additions are abstraction of existing product. So, if it is absolutely the case, UX is the problem.
The user interface of Lichess is actually pretty good, very fast and it has lots of features like links to live streams, views of up to 15 games in real time, lists of problems, analysis, etc.
i’m upset that he missed the “react is my favourite Meta framework” joke
*The epitome of the corporate world:* ayyo I need a full stack engineer who maintains our entire site. Pay: $58,000/yr plus we have pizza parties every Tuesday.
High IQ wizards exist. 2 wizards out perform an army of Muppets.
4:05 Look at China. All of China is one timezone instead of at least 2, maybe 3.
Or Nepal, they are UTC + 5¾.
Or look at the International Date Line. We have UTC - 14 ffs.
@kuhluhOG Could you please expand on this? I’m confused
@@InvalidPersistentName These a just a few example where time zones are more f'ed up than what Prime pointed out
India is one timezone .not sure about china
For cheating in chess via vibration, I think what is important to know is that on the professional level, the games come down to one or two critical moments, where a critical moment is where you only have one possible winning move, where any other move makes you throw away the win, or a situation where there is only one defensive move, where any other move makes you loose the game. One of the most important (and hardest) part of this when you are playing, is to know exactly when this moment is ( and here is were a simple vibration hint can assist). This will allow you to invest a great deal of your limited time trying to find the correct move, compared to you not having a vibrator, and not knowing it is a critical position, and just making a move within a few minutes, since you don't want to run out of time in the long run.
I would also like to point out, that this way of cheating wont make a amateur beat a professional, but for players of similar strength, if would definitely give one player the edge.
Beautiful video. Ty so much for this content.
globe doesnt ever translate well to flat map. i wonder if the timezones would make more sense if plotted on a globe
they make more sense if you consider it's sane for a country that's small enough to exist in one time zone even if it intersects an imaginary line. Imagne driving across town and needing to change time zones because of it!
I really like your last take. thanks for covering the story!
These sort of retro-viability of platforms created by one guy often ignore the fact it is more likely that it was chosen due to personal capability and preference over anything else.
About the butt plug thing, at the highest level it's enough to send a single signal whenever there's a critical move on the board, that alone would be enough to decide victory especially across multiple matches, while also not tripping any cheat detection algorithms or even skewing statistics in a significant way
I just watched this yesterday so glad you’re doing this one! I tried to go down a Scala hole afterward but it just didn’t seem to be there content wise
At a Grandmaster level, if you can highlight a single square, that's generally considered good enogh for a grandmaster to figure out what they are being advised. So a learning a simplified set of notifications to be able to given them that would be all that's required normally.
or just telling them “this one is tricky”, improve the accuracy by a lot already
You know why he was so fast and productive? He didn’t have a team to sync with and stakeholders to cater to. Two devs is not a 2x speedup. Four devs feels like 2 devs most of the time. More devs is a burden.
ENUMERATION cause the cases can be enumerated !!!
I think that the enums are called enums because the enumerable set. Numerable sets are a set that have 1:1 correspondence with the natural numbers, so that, for every element exists a natural number that maps the element.
In this case, the enum represents the mapping between the cases and a natural number, I think.
en.wikipedia.org/wiki/Computably_enumerable_set
Re: messaging via vibrations. For a good chess player you really only need to send the destination square, which can easily be coded as two integers between 1 and 8. So if you are OK doing it quite slowly then just vibrate the number of times for the first digit then the number of times for the second digit. If you can vary the vibration in two ways then it could easily be changed to 1-4 with each type of vibration meaning a different half of the board.
As long as a dependency is as reliable as your standard library, it shouldn't be a problem to include it. I would even prefer it to your own code.
The issue with dependencies is the "have a bug -> upgrade" cycle. If libraries A and B have transitive dependencies on C, those transitive dependencies can conflict. Even if A and B cooperate well today, that doesn't guarantee they will tomorrow. Also, dependencies can be intrusive, which is both a value and a blessing. Something like Spring Boot or Ruby on Rails is very "intrusive" to the point that they *are* your architecture. Not using them isn't an option-you wouldn't have software without them. Using them means waiting for a new version to have a bug fixed.
At the end of the day, handling binary dependencies is a mess, which is why solutions like distro package management and Docker were built. If there were a simple solution, we would already be using it. Taking a stance of "not using dependencies" means not using systems like Linux.
So, that's that.
You don't need a morse code to cheat. You just need to know that there's a tactic or non obvious move and a good chess player will find it.
More often, you just don't see a good strategy
Less is more - The number one thing I'll teach any new developer
its time 2 rise and grind
What did you mean ?
@@mohd-arzhe is a yogurt male. The more sophisticated version of a sigma male. Always on the ground, but does not forget to eat his protein-packed Greek yogurt.
For the cheating part, I've seen a lot of videos of Caruana and others, they say that a simple signal indicating critical positions give them a lot of advantages. Then the player would do the thinking in the position.
Never thought I would hear MongoDB and resilient mentioned in the same sentence :D
3:07 numbered coordinates, first the piece to move, second where it goes. saw a video where a guy created one
This video made me realize how much I love programming
Scala is great, especially when you keep it relatively simple and level up your team gradually. Performance and Type Safety are right up there, but it doesn't read like hieroglyphics the way Haskell can to a newcomer.
3:10 You could do it N times to specify the column of something, and then N times again to specify the row.
As just knowing the location to place something is enough for a good chess player to figure out what to do.
If you weren't that good of a player, you could maybe do this twice, and so you first specify the start square, and then the end square. There are probably better ways of compressing this, maybe taking from inspiration from morse code with short and long signals, you can for example specify which side of the board it is on, so you only to at most 4 pulses, rather than 8.
You dropped some good wisdom bombs today
I did Scala from 2012-2018 or so. Great language and has totally changed the way I think about writing software.
I switched to working on Go at a startup after that. It just so happened that a couple of other guys that got hired soon after me were also Scala devs. At first it was hard for us to wrap our heads around and appreciate something that had ignored the last 30 years of Computer Science, but we all eventually came to appreciate it's simplicity, fast builds, and small executable sizes. Keep in mind that go modules didn't exist at the time so there were competing ways to deal with dependencies.
I still wish there were some way to work in Go treating data as immutable that was natural, but I digress.
In the early days of Scala there wasn't really other ways to build projects sanely other than SBT. You almost had to actually understand a bit of Scala before being able to build it.
have you used the scala-cli
@@awful999 It doesn't sound familiar, so I don't think so. At the time I worked on services for a video streaming platform for a cable company, so no cli stuff really.
@@yayinternets with scala-cli you can compile and run scala way easier than using SBT.
Regarding semantic type systems when applied to game's rules that can not change. Rust is perfect. Would you want to encode business logic into Rust's type system you will be refactoring every quarter, just to compile.
you look at the map but fail to see. this is the world anomaly;
Great video, thanks for the enlightening
42:26 But isn't that also the issue of "Batteries Included"? That the creaters of the language also have to implement the standard library, so creating a dependency system, they essentially don't need to anymore?
Also I am a big fan of "Batteries Included", but I can understand the other approach aswell.
standard library is also a dependency - can have faults and tradeoffs just like a third party library
To cheat you really do only need a boolean signal. At the high end being told that a particular position has a significant tactic and you need to switch your brain into “puzzle solving” mode is enough to gain a huge advantage.
@40:30 I think it's nice to have community crates, but the best world is when the most successful projects that have become de-facto standards are folded into more of first-party support, whether that's being adopted into the standard library or first-party modules, or inspiring first-party APIs in the standard library.
The worst thing is for crates to become de-facto standards where everyone is always pulling it into every project, but it is never absorbed into first-party support and the maintainers may eventually disappear suddenly and without warning.
"I always want more types" omg that's exactly how i feel but i'm afraid to say it
How to spot the average dev: "Devs don't need to know"
Scala's great.
There is a video of a channel called Mike Boyd named "Actually making THAT chess cheat device". He actually uses it against a guy really good at chess in the video and wins. Worth watching
Tagged unions are called "enums" these days because there's no other satisfying concise keyword for what they actually are. At least, I have yet to either find one or come up with one myself. Haskell uses the keyword "data" and OCaml calls them "variants" neither of which express what they're about as well as "tagged union" or "sum type" do.
I was on his stream while watching this video, he said the video from Tom and Prime's reaction are exaggerated. Im not sure if he is being humble, or these are just too easy for him and we are just all --100x engineers.
The salaries are quite good for France, living cost is not what you might have in highly populated zone in the US.
It’s triple the minimum wage, which is alright but still underpaid for someone with 5+ years of experience in development
@@tahayassine7435 for a project that's community backed ? Where you are your own boss and don't need to convince higher ups that tech debt needs to be solved ? Where tech wise you do whatever you want ? Yeah I take that slight cut sorry.
Nah I know people in France in way easier IT jobs making a lot more, and they don't even have to write a line of code.
@@unixtreme and I know a lot of them who get less and write more, your point is ?
58 000 c'est le super brut attardé. Ça fait 2000€ par mois en super net
On the chess vibrator, I believe someone has gone ahead and made it as a proof of concept 😂
eyre/color-eyre are not "duplicates" of anyhow, they're wrappers with pretty colors and nicer UI over anyhow.
Sumtype/"enum"/tagged unions are great. It's not true that Java has no sumtype nowadays: Java 21 has sealed classes that can act as sumtype (you can even do pattern matching on them)
I love flutter and dart, I wish I worked more with it
scala makes sense ,since its data science language...
chess is math and a lot of "data science" , numbers...
maybe the 100x dev are the friends we made along the way
scala mentioned! lfg!
The wrong synchronidstion happened because kramniks brand new pc at the tournament wasnt correctly setup. It was an Windows problem
Poor accountant.
I love Scala when I need to use a weird, eastern tuning on a MIDI instrument.
10:54, I also love enums, @prime how do you deal with Go not having a real built in enum system? I was a little surprised finding I sort of had to roll my own - is this expected or am I doing something wrong?
8:24 Pretty sure that's religious attire, if he's in the religion of the flying spaghetti monster
Rather than https/http couldn't you use RTP & NTP for time synchronization?
about the Rust for Linux thing and encoding kernel semantics in Rust:
It's okay to have doubts about enforcing them in the type system, but what are the alternatives?
Documents, comments and dev knowledge aren't reliable, require first-hand experience and cannot be automated.
Are we choosing a sub-par solution just because that's what we did in the last 30 years?
I'm not saying the type system is enough, but why can't we just have both?
because it mess many things than giving many benefits. and they that works on linux kernel are very advanced programmers, type isnt problem for them
timecode 3:10
its weird and unexpected that we are talking about this anyway, but we've already started
delivering message with vibration:
Chess field is a 8x8 square
if there are 3 distinct vibrating sources its 8 combinations
2 pulses uniquely identify a cell
another 2 pulses uniquely identify a second cell
this way in 4 pulses every move available in any position may be uniquely messaged
How realistic it is to be able to differentiate it all during a real game I dont know, but if you're cheating this way already, I think its within reasonable expected effort
two beads. one that's in shallow denotes letter. one that's in deep denotes number. 3 shallow vibrations and 4 deep vibrations and a pause would mean select piece on C4 and then after the pause you could repeat vibrations to say where to move piece to.
I don't think that's a possibility, there are not many nerve endings deep, so I don't think one would be able to distinguish deep vibrations well. Talking from my encyclopedic knowledge, not experience
@@reoseah sure buddy, encyclopedic knowledge it is
around 41:00, talking about rust reaching JS status because of duplicate competing dependencies. i tried reading the rust book, and i think either chapter 2 or 3 was telling me to use cargo to install dependencies so i can generate a random number. i immediately got npm vibes and decided maybe i shouldn't get into rust after all.
The cargo philosophy is bad in my opinion, there is no way of getting around in some cases unless you want to write custom wrappers for the c libraries. But the language is very strong, as someone who shit talk it for a while, its worth taking some time to avoid cargo and get a feel for the language.
And I might be biased because I write a fairly decent amount of rust myself but, I think the primary reason for getting you to use a crate in that instance was both getting a handle on the fact that cargo is the main build tool and it does all the major stuff (ie: “plz don’t use rustc to compile your program”) And also the fact that writing a random number generator inside rust itself might be rather overwhelming for a newbie right off the rip (type system and all) you gotta remember, the book itself is aimed at like, complete plebs.
Well, that being, the guy above me has a solid take, it’s pretty accurate too. Getting a handle on the base language itself is pretty important and using the language has changed how I interpret and interact with other languages as a whole (for the better. Especially performance wise from teachings of borrow checker etc. forcing things)
The windows timing delay was caused by Windows update operating on a new just unpacked system. Duh
Society is a framework for reality, but its very convoluted so I prefer to interface with reality through pure QASM code.
Morse code by vibration. Been using CW (Morse code) for 46 years, but I've never quite imagined that. Yeah that would work.
i would argue that you could have used PostgreSQL elixir ecto and phoenix live view
There are dozens of us, DOZENS
Batteries included also comes with a cost of maintainence in the long run no? It can't be that easy of a decision to make.
Rust, lots of deps = small std lib - think about embedded stuff etc.
Or think of lots of deps as a modular std lib.
Flutter, multi platform front end - web, desktop, android, ios.
ididathing has a full video on how they communicate using vibrations during chess
I did not like Scala, as language it is complicated as C++, has the same big issue as C++ to many ways to the same thing.
Ah yes, the problem of having choices. Do you like Go?
that issue of having too many ways of doing things is being adressed by scala 3, if you haven’t looked at it since scala 2 it might be worth revisiting in future
Scala is to java what c++ is to c
4:15 - And thats why the /usr/share/zoneinfo is 4.5MB of data to describe just timezones...
/usr/share/zoneinfo-leaps is another 1.5MB.
ahhh TOM the JDSL genius :)