bakhy
Joined 14 years ago
Joined 14 years ago
I've worked on codebases where people were so allergic to the "billion dollar mistake" of nulls, that they created empty objects to return instead of returning null. This bit us in the ass a couple of times, e.g., when caller code was mistakenly passing the wrong ID variable into a fetch method, and just happily continued working and writing garbage into the DB, because it did not realize that its fetch had actually failed. It took data from the empty result object and happily continued its computation with it.
IMO they should just remove the password generator feature. It's barely usable, and with this behavior it's just dangerous.
Why barely usable? Some really simple features are missing. I miss the ability to specify password requirements - for annoying sites which specify length, require so and so many these and those types of characters, or even forbid some types. And another one is that it's not possible to manually generate a password, not even in the password storage UI, when manually adding a new entry. So, if a site did not correctly declare a password field, which happens, you must generate a password yourself somehow.
All movies that have such limited audio/subtitle options, when I play them, start with a title card of a German distributor, so I would believe Netflix on that one.
* With the about:config setting off, tabs that had PDF files from the internet open in them will now, when first loaded, suddenly show the popup. If you choose "Open in Firefox" there, the file gets downloaded to a temp folder, opened in a new tab for some reason, and the new tab's address is the temp file. So, after restarting the browser again, it's broken, because the temp file has been deleted.
* In the new mode (I switched back because of the above...), I have set ZIP files to "Ask me", and even if I pick "Open with ..." in the popup, it still downloads the file into the default downloads folder, instead of the temp folder. So now I have to clean that folder up regularly, I guess.
* Lots of people on connect.mozilla.org are complaining that the little Download Manager, the popup you get when clicking on the Downloads icon in the toolbar, now annoyingly always opens whenever you download any file.
The FAQ (https://support.mozilla.org/en-US/kb/manage-downloads-prefer...) about this also sounds kinda condescending:
> I want to approve each download before it happens, is there still a way to do this? Firefox no longer shows the dialog because downloads are usually intentional. Having to click a second time for a download to start is usually unnecessary.
This is really irritating, I'm for the first time in a long while considering switching to Chrome.
But it still should not be an issue, since according to what you quoted an acceptor will not reply to a second proposal that bears the same number ("If an acceptor receives... number n greater than...), which means only one of the two proposers can gather the required majority of promises to move to the next phase, and thus only one of the values can end up being accepted. After the crash you describe, there will be only one accepted value the Proposer-C will receive.
Maybe read the papers on Paxos, like the "Paxos Made Simple" one, it's not too big (though it's not all that simple either, at least to me...).
I worked on a very concurrent system and thought maybe STM would be a nice fit for it. I found the concept of STMs very interesting. And I noticed that, although there were many implementations for .NET, all were one-off projects, not maintained, and in my opinion not very nice to use. So I ended up writing one myself.
I guess that sweet spot for me was having a problem that I dealt with on a daily basis, which gave me the drive and a clear picture of what I'm trying to achieve, and the fact that it was a fun challenge to implement and a learning experience related to a concept that intrigued me. The other ideas I had would mostly have just that second part - they're fun, challenging, but not really solving something I deal with too often.
So, I don't have much experience, I don't have many side projects, but for what it's worth, my advice is to try to find something in your day-to-day which bugs you, and for which you have some interesting idea that you'd like to experiment with.
When it happens that parts of this work later turn out not to be needed, it's easy to discard an enumerable, and the iteration is not actually performed. It can sometimes lead to really ellegant code that also performs well.
https://github.com/jbakic/Shielded.Gossip
It needs more work, but I think the eventually consistent part could already be useful for a simple distributed cache layer atop a classic relational DB.