You panic a lot on errors in functions where you return a result. Almost all of these are due to input problems not programming logic errors. These really should be return from the functions as errors so higher up functions can handle them how they might need to rather than just imminently crashing the program. Really panics should only be used when the situation should never occur and if it does that indicates a bug in the program - or you are being lazy with small/test code/one off scripts (but in this case why return any errors at all, you might as well just .unwrap() on everything instead of ?.
nous
This is a pet peeve of mine, but don't put main last. Its like opening a book to be greeted by a random chapter - probably one near the end and you have to hunt through it to find where the story actually starts, which is probably near the end.
This is a IMO horribly hangup from languages that require you to declare something before you can use it. You don't need to do that in rust. So put your functions in order that makes sense to read them from top to bottom. This typically means main should be one of the first functions you see - as it is the entry point to the code. In other files this might be the main functions a user is expected to use first. Sometimes you might want to see some datastructures before that. But overall things should be ordered by how it makes sense to read them to make it easier to make sense of the program.
You are not considered to be working somewhere until you have signed a contract and after the start date on that contract. Accepting a offer is not signing a contract. You are not working at the new place yet. You have no obligations to do anything at that point. You just need to have stopped working at your current employment before your start date. You definitely do not need to quit before accepting the offer. No where I have worked requires that.
You are right. You cannot onboard a new job before you leave your old one. Accepting an offer is not part of the onboarding process though. It happens before.
After an interview process the company makes an offer. The candidate can then accept or reject it. But that is really all informal. You can then negotiate with them for an official start date and contract. You just need to ensure you can hand in your notice and work the rest of your notice period before the start date of your new contract.
I don't know anyone that would hand in their notice before accepting the initial offer of a company. At least here in the UK.
You assume they don't already have a job and we're just looking for other opportunities. Not everyone is unemployed before they apply for other jobs. If anything that is a good time to look as it gives you stronger position to negotiate from.
Yes it is a security issue. But almost everything is. You can make it secure enough with the right policies. However it overall increases the attack surface of your application and has a greater chance that you missed something or miss configured the policies. So many firebase apps have been hacked because of miss configured access to the database.
So it puts more work on you to get things right.
Think it is an old blackarch logo - an arch based pentesting distro.
Valve needs to win this. Or at least stop this part:
The NYAG also proposed to gather additional information (beyond what we normally collect in the course of processing payments) about each game user on the off-chance someone in New York was anonymizing their location to appear outside of New York, such as by using a VPN. This would have involved implementing invasive technologies for every user worldwide. Similarly, the NYAG demanded that Valve collect more personal data about our users to do additional age verification—even though most payment methods used by New York Steam users already have age verification built-in. Valve knows our users care about the security of their personal information, and we believe it’s in our and their interest to only collect the information necessary to operate the business and comply with law.
Loot boxes are overall bad for users and should be regulated. But not by getting valve to collect personal information on everyone in the world.
Audiences watching any live TV on the likes of YouTube or streaming platforms need a TV licence, but this is apparently not well known and not effectively enforced.
I hate this. What does it mean by live TV? Is that any live stream on YouTube? Or live shows published by the BBC. They make no attempt to clarify WTH you need a license for. I am not going to pay for a TV licence to watch someone in Australia live stream something that will never see a dime from it. Also YouTube and these other platforms have their own monitozation methods. Are they not collecting on that as well? What about people outside the UK that watch these shows through these platforms?
The whole thing is just a mess of confusion.
When 94% of people use the BBC each month yet fewer than 80% of households contribute,
How the hell did they get this 94%. Seems very high number. I know many people that just don't have a TV anymore.
In an open letter to the prime minister, Labour MPs said "successive governments" had done "too little to protect young people from... unregulated, addictive social media platforms".
They are focusing on the wrong thing. The problem is not young people access it, it the unregulated and addictive parts. Those affect everyone not just the young. Regulate the addictive behaviours of these platforms and protect everyone. Don't just force ages ineffective age verification that harms the privacy of everyone.
parse_oui_databasetakes in a file path as a &String that is used to open the file in a parsing function. IMO there are a number of problems here.First, you should almost never take in a
&Stringas a function argument. This basically means you have a reference to a owned object. It forces an allocation of everything passed into the function only to take a reference of it. It excludes types that are simply&strs forcing the caller to convert them to a full String - which involves an allocation. The function should just taking in a&stras it is cheap to convert aStringto a&str(cheaper to use than a&Stringas well as&Stringhave a double redirection).Sometimes it might be even better might be to take in a
impl<AsRef(str)>which means the function can take in anything that can be converted into a&strwithout the caller needing to do it directly. Though on larger functions like this that might not always be the best idea as it makes it generic and so will be monomorphised for every type you pass into it. This can bloat a binary if you do it on lots of large functions with lots of different input types. You can also get the best of both worlds with a generic wrapper function to a concrete implementation - so the large function has a concrete type&strand a warpper that takes aimpl <AsRef<str>>and calls the inner function. Though in this case it is probably easier to just take in a&strand manually convert at all the one call sites.Second.
String/&strare not the write types for paths. Those would bePathBufand&Pathwhich both work likeStringand&str(so all the above applies to these as well). These are generally better to use as paths in most OSs dont have to be unicode. Which means there are files (though very rarely) which cannot be represented as a String. This is whyFile::opentakes in aAsRef<Path>which your function can also.Lastly. I would not conflate opening a file with parsing it. These should be two different functions. This makes the code a bit more flexible - you can get the file to parse from other sources. One big advantage to this would be for testing where you can just have the test data as strings in the test. It also makes the returned error type simpler as one function can deal with io errors and the other with parsing errors. And in this case you can just parse the file directly from the internet request rather than saving it to a file first (though there are other reasons you may or may not want to do this).