• 3 Posts
  • 42 Comments
Joined 1 year ago
cake
Cake day: July 24th, 2023

help-circle


  • I do not get why it would work in that case. I assume the scenario is someone with a bike coming, doing theft, then leaving with the same bike.

    Therefore there will be a period without bike, then a period with bike, then a period without bike again.

    Let’s assume there is no bike on the particular moment viewed. How do you know whether it occured before or after the theft? If you make the wrong decision, you get stuck on an endless binary search… Unless you take note at each timestamp where you made the decision, draw a tree of timestamps, and go back the tree if your search is fruitless but that’s much more complicated than what this post says.


  • For a first time don’t try to get the strongest character possible. It’s a time sink to do that. Usually the main campaign of games are beatable even if you screw up something. The worst that can happen is you backtracking a bit and spending time to level up before doing the next quest.

    When you played the game once and got used to the mechanics you can make a 2nd char and plan it more deeply ahead if you wish. You know what mechanics you like so the prospect of finding what to invest in what is worth etc… becomes more streamlined. But you don’t have to. You can just be happy to have finished the game and call it a day.

    That’s what I did for Diablo 4. After the main campaign I did not feel like venturing more into the game or making another character so I started playing another game. If you really want to 100% a game it does require a ton of time and planning but you don’t have to


  • On the world’s roads last year, there were over 20 million electric vehicles and 1.3 million commercial EVs such as buses, delivery vans, and trucks.

    But these numbers of four or more wheel vehicles are wholly eclipsed by two- and three-wheelers. There were over 280 million electric mopeds, scooters, motorcycles, and three-wheelers on the road last year

    There are about 20x more e-bikes than electric cars. Of course its going to demand more oil.

    The real question is what is best in terms of oil demand between electric cars and e-bikes


  • There are techniques like abstract interpretation that can deduce lower and upper bounds that a value can take. I know there is an analysis in LLVM called ValueAnalysis that does that too - the compiler can use it to help dead code elimination (deducing that a given branch will never be taken because the value will never satisfy the condition so you can get rid of the branch).

    But I think these techniques do not work in all use cases. Although you could theoretically invent some syntax to say “I would like this value to be in that range”, the compiler would not be able to tell in all cases whether it’s satisfied.

    If you are interested in a language that has subrange checks at runtime, Ada language can do that. But it does come at a performance cost - if your program is compute bound it can be a problem


  • Why would you have to choose between tests and compiler checks? You can have both. The more you have the less chance of finding bugs.

    I would also add that tests cannot possibly be exhaustive. I am thinking in particular of concurrency problems - even with fuzzing you can still come across special cases where it goes wrong because you forgot a mutex somewhere. Extra static checks are complementary to tests.

    I think you can write “unsafe” code in Rust that bypass most of the extra checks so you do have the flexibility if you really need it.




  • About your specific example I find the Rust code to be much simpler to understand than your equivalent Golang code…

    To understand the Rust code I just have to understand each case. 0…1 returns false. Ok. 2…n returns true iff no divider was found between 2 and n-1. Ok the function is primality test

    The Golang code is much harder. I do not take into account the division by 2 because its not part of the original Rust code.

    A for loop starting at 2 that look for divisors. Then the return value > 1. Why is it OK to just return value > 1? Oh that’s because the loop did not return. Why did it not? Either no dividor was found or we did not get into the loop at all. If value > 1 we have the guarantee the loop was executed so it’s really a primal number. If value <= 1 it is either 0 or 1 which are not primal. Ok, so we return value > 1.

    I think people dislike Rust because it has a lot of functional languages constructs and people are not used to code in functional languages.

    Whatever you fight in Rust you end up saving time by avoiding runtime bugs that would have plagued your productivity anyway. I’d much rather have a language with a hard entry but with solid and maintainable code rather than fast-written spaghetti that no one knows what it is supposed to do 2 years after.


  • Yes, getting into a new project is hard. Even when you do know the languages and frameworks it’s still hard because you have to get into the mini ecosystem that the developers of that project built. In companies there is usually an expected amount of time (days? weeks? Months? Varies on the project) where a new developer is not really expected to do anything major, just getting used to the project.

    I do not know if you are professional or hobbyist. But coding takes a lot of time, a lot of it is spent on just figuring out how you will code this or that feature ; then another bunch of time is spent debugging ; and finally, yet another bunch of time is spent integrating your new feature. That’s why it’s a whole job, and that’s also why you need a ton of free time to do this as a hobbyist.

    But the good news is that once you spent that upfront time to get into the project, you can code more efficiently (that is, get right to the features you want to make) and you will also spend a little bit less time getting into other projects because although projects are different, there is always some level of organization that remains similar. The more advanced you become, the quicker you can get into a “production” state where you can code right away thanks to spending less time figuring out how things work.


  • Yeah exactly. Here follows some spoiler for those who have never played Dark Souls

    spoiler

    Once you escape from the asylum you can get to the catacombs right away. I did that and got my ass kicked so I figured I was not supposed to get there first.

    So I went up towards the upper Bell. Which I did ring. But then afterwards it looked so clear to me, especially as you unlock the shortcut to Firelink : yes ! The other bell must be down in the catacombs! So I headed there.

    I struggled a lot to handle all the monsters. I kept going until the valley where you face skeletons on wheels and the black Knight. I figured “no something isn’t right, I don’t think the game is supposed to be that hard. There are tips on the ground about using a divine weapon but I don’t even know how to get one.”. I read a post online and figured I went the wrong way… Once again

    Once I fixed that and went the right way things got significantly easier. I heard how some players literally got down to the catacombs from the get go and somehow managed to get to the boss door only to be met by a yellow fog that can’t be passed, and how they struggled to get back to firelink without getting killed…

    The bottom line is that I think you need to have someone telling you where not to go to really enjoy Dark souls. Because its not obvious whether you die because of your incompetence or just because you were not supposed to be there right now. I wouldn’t say its bad design though - but it’s not for everyone for sure





  • They are for providing special hardware for Neural Network inference (most likely convolutional). Meaning they provide a bunch of matrix multiplication capabilities and other operations that are required for executing a neural network.

    Look at this page for more info : https://www.nvidia.com/en-us/data-center/tensor-cores/

    They can be leveraged for generative AI needs. And I bet that’s how Nvidia provides the feature of automatic upscaling - it’s not the game that does it, it’s literally the graphic cards that does it. Leveraging AI of video games (like using the core to generate text like ChatGPT) is another matter - you want to have a game that works on all platforms even those that do not have such cores. Having code that says “if it has such cores execute that code on them. Otherwise execute it on CPU” is possible but imo that is more the domain of the computational libraries or the game engine - not the game developer (unless that developer develops its own engine)

    But my point is that it’s not as simple as “just have each core implement an AI for my game”. These cores are just accelerators of matrix multiplication operations. Which are themselves used in generative AI. They need to be leveraged within the game dev software ecosystem before the game dev can use those features.







  • I don’t know of any software platform where that would not happen.

    Even with a text-only platform people can still post URLs to unsafe content.

    I think OP is referring to some kind of automated scanner but I’m not sure there are publicly available ones. I guess using them would come at a cost - either computational or $$. And even so, there can be false positives so you would probably still have to check the report anyway someday.