I know my job banned .zip domains as soon as they leared of it. It’s an IT firm so they don’t really care to take any chances, and would rather just make exceptions if needed.
I know my job banned .zip domains as soon as they leared of it. It’s an IT firm so they don’t really care to take any chances, and would rather just make exceptions if needed.
I am more than happy with Jetbrains and Visual Stuido to do most of my work. While VS has some annoying irks, I just like things more visual such as handling merges through seeing the code as I used to instead of a text like visualization.
I do occasionally need an empty commit, visit the reflog because I fucked up or just do some check on existing commits on a branch. But no, daily I just do pull, merge, commit and push through my IDE.
But nothing is forcing you to check exeptions in most languages, right?
While not checking for exceptions and .unwrap() are pretty much the same, the first one is something you get by not doing anything extra while the latter is entirely a choice that has to be made. I think that is what makes the difference, and in similar ways why for example nullable enabled project in C# is desired over one that is not. You HAVE to check for null, or you can CHOOSE to assume it is not by trying to use the value directly. To me it makes a difference that we can accidentally forget about a possible exception or if we can choose to ignore it. Because problems dealt with early at compile time, are generally better than those that happen at runtime.
It can be pretty convenient to throw an error and be done with it. I think for some languages like Python, that is pretty much a prefered way to deal with things.
But the entire point of Rust and Result is as you say, to handle the places were things go wrong. To force you to make a choice of what should happen in the error path. It both forces you to see problems you may not be aware of, and handle issues in ways that may not stop the entire execution of your function. And after handling the Result in those cases, you know that beyond that point you are always in a good state. Like most things in Rust, that may involve making decisions about using Result and Option in your structs/functions, and designing your program in ways that force correct use… but that a now problem instead of a later problem when it comes up during runtime.
If Reddit back in the day had asked a few dollars for me to stick with using 3rd party apps using the API I would have. But they did the opposite, so here I am. First time actually donating to something, a measily $2 dollars a month, but hopefully a start to fund some of the free stuff I use.
I largely agree with this nodding along to many of the pitfalls presented. Except numbers 2s good refactor. I hope I won’t sound too harsh/picky for an example that perhaps skipped renaming for clarity on the other parts, but I wanted to mention it.
While I don’t use javascript and may be missing some of the norms and context of the lanugage, creating lamda functions (i don’t know the js term) and then hardcoding them into a function is barely an improvement. It’s fine because they work well with map
and filter
, but it didn’t address the vague naming. Renaming is refactoring too!
isAdult
is a simple function with a clear name, but formatUser
and processUsers
are surprisingly vague. formatUser
gives only adult FormattedUser
s, and that should probably be highlighted in the name of formatUser
now that it is a resuable function. To me, it seems ripe for mistaken use given that it is the filter that at a glance handles removing non-adult users before the formatting, while formatUser
doesn’t appear to exepct only adult users from it’s naming or even use! Ideally, formatUser
should have checked the age on it’s own and set isAdult true/false accordingly, instead of assuming it will be used only on adult User
s.
Likewise, the main function is called processUsers
but could easily have been something more descriptive like GetAdultFormattedUsers
or something similar depending on naming standards in js and the context it is used in. It may make more sense in the actual context, but in the example a FormattedUser
doesn’t have to be an adult, so a function processing users should clarify that it only actually creates adult formatted users since there is a case where a FormattedUser
is not an adult.
He may have used the wrong word, but maintaining the same function signature across two files (while made easier by IDE tools) sucks ass to do. It was one of the major pain points for me doing a C++ course (along with the abyssmal compilation error messages). Not that I have tried Zig, but I do not see a reason to involve header files in my life if I can avoid it.
It’s not the fart (speed) that kills you it’s the smell (crash). A Norwegian English joke.
Looks very Norwegian, and there seems to be a crossing on the road used to prevent sheep from leaving the area (while cars still can drive over it) which is also something we have in Norway.
I’m red green colorblind but ended up at 177, which is fairly close to the (as I see at least) middle while line dividing green and blue.
Which is surprising because I bought blue chopsticks in Japan, and my mother say they are mainly green, much to my frustration.
Late here, but if you want the easy route then there is always Unity (C#) if it fits for your use case in game dev and the license isn’t a problem for you.
If you use it frequently, I suggest getting a GUI that have profiles or remember options so you don’t have to mess with commands all the time. I wrote my own little command line wrspper which is Windows only since I don’t have Linux to test on. Though it shouldn’t take much effort to add support.
Makes it much more convenient when you don’t have to specify things like archive (ignore duplicates), filename to be “artist - title” (where possible), download destination, etc. Just alt-tab, Ctrl-v, Enter. And the download is running. And mine also has parallel downloads and queue for when you got many slow downloads.
I sorta remember this happened, or something like it, try actually clearing your cookies and logging in again. That might make it stick.
Ultimately, I don’t see any need for users to care about ids. I’d just make a user ID column in the category table and use that for selecting categories. Rather think about a display name that is either known or made by the user.
The only problem with increasing numbers is if you don’t properly limit access to creator account and a user can just edit the url bar to get others categories. It’s still a problem with other unique stuff, but less easy to crack when it’s not sequential.
If you really want it, just replace ID in the url with the category name, if that is a simple string without any special characters. Actually useful for users visually, avoids numbers, users only see what they care about, still no bridging table. And the query is still a simple where user_id = x and category_name = y. This actually means non-unique names, but you are always filtering on users, so you can instead use a constraint or unique composite index on user_id and category name.
Personally i would stick with IDs because they are simple, and don’t change so they are not prone to renaming, special character issues, and whatever else string handing deals with. And it’s probably slower.
Not for the rapid update that broke everything.
See post incident report:
Software Resiliency and Testing
Improve Rapid Response Content testing by using testing types such as:
Local developer testing
Content update and rollback testing
Stress testing, fuzzing and fault injection
Stability testing
Content interface testing
Add additional validation checks to the Content Validator for Rapid Response Content.
A new check is in process to guard against this type of problematic content from being deployed in the future.
Enhance existing error handling in the Content Interpreter.
Rapid Response Content Deployment
Implement a staggered deployment strategy for Rapid Response Content in which updates are gradually deployed to larger portions of the sensor base, starting with a canary deployment.
Improve monitoring for both sensor and system performance, collecting feedback during Rapid Response Content deployment to guide a phased rollout.
Provide customers with greater control over the delivery of Rapid Response Content updates by allowing granular selection of when and where these updates are deployed.
Provide content update details via release notes, which customers can subscribe to.
Source: https://www.crowdstrike.com/falcon-content-update-remediation-and-guidance-hub/
Compute becomes cheaper and larger undertakings happen. LLMs are huge, but there is new tech moving things along. The key part in LLMs, the transformer is getting new competition that may surpass it, both for LLMs and other machine learning uses.
Otherwise, cheaper GPUs for us gamers would be great.
The difference is, with a build pattern you are sure someone set the required field.
For example, actix-web you create a HttpResponse, but you don’t actually have that stuct until you finish the object by setting the body() or by using finish() to have an empty body. Before that point you have a builder.
There is noting enforcing you to set the input_directory now, before trying to use it. Depending on what you need, that is no problem. Likewise, you default the max_depth to a value before a user sets one, also fine in itself. But if the expectation is that the user should always provide their own values, then a .configre(max_depth, path) would make sense to finish of the builder.
It might not matter much here, but if what you need to set was more expensive struts, then defaulting to something might not be a good idea. Or you don’t need to have Option<PathBuf> and check every time you use it, since you know a user provided it. But that is only if it is required.
Lastly, builder make a lot of sense when there is a lot to provide, which would make creating a strict in a single function/line very complicated.
Example in non-rust: https://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern
Halo 4 had great graphics to run on a damn Xbox 360. But yeah, they lost in the design department, imo I felt too much felt like plastic/artificial instead.
Didn’t want to install something to move stuff of my laptop yesterday. Took a USB which has both a boot partition and a data partition, which worked on my W10 computer and moved it to the W11 laptop and it wouldn’t recognize it…
Long story short, I had to manual set the partition id for the data part using diskpart for the data partition to be recognized. But that was a lot more effort than expected to move a few files over.
They are just more likely to be scam like, particularly since they can be assumed to be a file at a glance.
Even more deviously, crafty urls like this further hides what you are actually doing, like this:
https://github.com∕kubernetes∕kubernetes∕archive∕refs∕tags∕@v1271.zip
Hover it with your cursor, watch what that actually links too, no markup cheating involved. Anything before the @ is just user information. Imagine clicking that and thinking you downlodaed a tagged build, only to get a malware?
It’s not the end of the world, but as a developer it makes great sense to just auto-block it to avoid an incident. The above URL is from this article, which says it’s not as big of huge problem too:
https://www.theregister.com/2023/05/17/google_zip_mov_domains/
But it’s kind of a death by a thousand cuts to me, because it’s another thing with another set of consideration accross the internet ecosystem that one will have to deal with.