• 0 Posts
  • 45 Comments
Joined 1 year ago
cake
Cake day: June 19th, 2023

help-circle

  • Ditto on the no text part. That is an accessibility failure that’s way too widespread.
    Sometimes I’m afraid to even push a button: does this delete my thing, or does it do some other irreversible change? Will I be able to tell what it did? Maybe it does something completely different, or maybe I’m lucky and it does in fact perform the action I’m looking for and which in my mind is a no-brainer to include?

    And it’s infected interpersonal communication too - people peppering their messages with emojis, even professional communications. It not only looks goofy, but is either redundant (when people just add the emoji together with the word it’s meant to represent - such a bizarre practice) or, worse, ambiguous when the pictogram replaces the word and the recipient(s) can’t make out what it depicts.
    The most fun is when it’s a mix - the message contains some emojis with accompanying translation, some without.


  • I don’t share the hate for flat design.
    It’s cleaner than the others, simpler and less distracting. Easier on the eyes, too. It takes itself seriously and does so successfully imo (nice try, aero). It feels professional in a way all the previous eras don’t - they seem almost child-like by comparison.

    Modern design cultivates recognizable interactions by following conventions and common design language instead of goofy icons and high contrast colors. To me, modern software interfaces look like tools; the further you go back in time, the more they look like toys.

    Old designs can be charming if executed well and in the right context. But I’m glad most things don’t look like they did 30 years ago.

    I’m guessing many people associate older designs with the era they belonged to and the internet culture at the time. Perhaps rosy memories of younger days. Contrasting that with the overbearing corporate atmosphere of today and a general sense of a lack of authenticity in digital spaces everywhere, it’s not unreasonable to see flat design as sterile and soulless. But to me it just looks sleek and efficient.
    I used to spend hours trying to customize UIs to my liking, nowadays pretty much everything just looks good out of the box.

    The one major gripe I have is with the tendency of modern designs to hide interactions behind deeply nested menu hopping. That one feels like an over-correction from the excessively cluttered menus of the past.
    That and the fact that there’s way too many “settings” sections and you can never figure out which one has the thing you’re looking for.

    P S. The picture did flat design dirty by putting it on white background - we’re living in the era of dark mode!



  • TLDR:
    Nature can’t simply select out consciousness because it emerges from hardware that is useful in other ways. The brain doesn’t waste energy on consciousness, it uses energy for computation, which is useful in a myriad ways.

    The usefulness of consciousness from an evolutionary fitness perspective is a tricky question to answer in general terms. An easy intuition might be to look at the utility of pain for the survival of an individual.

    I personally think that, ultimately, consciousness is a byproduct of a complex brain. The evolutionary advantage is mainly given by other features enabled by said complexity (generally more sophisticated and adaptable behavior, social interactions, memory, communication, intentional environment manipulation, etc.) and consciousness basically gets a free ride on that already-useful brain.
    Species with more complex brains have an easier time adapting to changes in their environment because their brains allow them to change their behavior much faster than random genetic mutations would. This opens up many new ecological niches that simpler organisms wouldn’t be able to fill.

    I don’t think nature selects out waste. As long as a species is able to proliferate its genes, it can be as wasteful as it “wants”. It only has to be fit enough, not as fit as possible. E.g. if there’s enough energy available to sustain a complex brain, there’s no pressure to make it more economical by simplifying its function. (And there are many pressures that can be reacted to without mutation when you have a complex brain, so I would guess that, on the whole, evolution in the direction of simpler brains requires stronger pressures than other adaptations)


  • I want to preface this with the mention that understanding other people’s code and being able to modify it in a way that gets it to do what you want is a big part of real world coding and not a small feat.
    The rest of my comment may come across as “you’re learning wrong”. It is meant to. I don’t know how you’ve been learning and I have no proof that doing it differently will help, but I’m optimistic that it can. The main takeaway is this: be patient with yourself. Solving problems and building things is hard. It’s ok to progress slowly. Don’t try to skip ahead, especially early on.
    (also this comment isn’t directed at you specifically, but at anyone who shares your frustration)

    I was gonna write an entire rant opposing the meme, but thought better of it as it seems most people here agree with me.
    BUT I think that once you’ve got some basics down, there really is no better way to improve than to do. The key is to start at the appropriate level of complexity for your level of experience.
    Obviously I don’t know what that is for you specifically, but I think in general it’s a good idea to start simple. Don’t try to engineer an entire application as your first programming activity.

    Find an easy (and simple! as in - a single function with well defined inputs and outputs and no side effects) problem; either think of something yourself, or pick an easy problem from an online platform like leetcode or codechef. And try to solve the problem yourself. There’s no need to get stuck for ages, but give it an honest try.
    I think a decent heuristic for determining if you have a useful problem is whether you feel like you’ve made significant progress towards a solution after an hour or two. If not, readjust and pick a different problem. There’s no point in spending days on a problem that’s not clicking for you.

    If you weren’t able to solve the problem, look at solutions. Pick one that seems most straight forward to you and try to understand it. When you think you do, give the original problem a little twist and try to solve that. While referencing the solution to the original if you need to.
    If you’re struggling with this kind of constrained problem, keep doing them. Seriously. Perhaps dial down the difficulty of the problems themselves until you can follow and understand the solutions. But keep struggling with trying to solve little problems from scratch. Because that’s the essence of programming: you want the computer to do something and you need to figure out how to achieve that.
    It’s not automatic, intuitive, inspired creation. It’s not magic. It’s a difficult and uncertain process of exploration. I’m fairly confident that for most people, coding just isn’t how their brain works, initially. And I’m also sure that for some it “clicks” much easier than for others. But fundamentally, the skill to code is like a muscle: it must be trained to be useful. You can listen to a hundred talks on the mechanics of bike riding, and be an expert on the physics. If you don’t put in the hours on the pedals, you’ll never be biking from A to B.
    I think this period at the beginning is the most challenging and frustrating, because you’re working so hard and seemingly progress so slowly. But the two are connected. You’re not breezing through because it is hard. You’re learning a new way of thinking. Everything else builds on this.

    Once you’re more comfortable with solving isolated problems like that, consider making a simple application. For example: read an input text file, replace all occurrences of one string with another string, write the resulting text to a new text file. Don’t focus on perfection or best practices at first. Simply solve the problem the way you know how. Perhaps start with hard-coded values for the replacement, then make them configurable (e.g. by passing them as arguments to your application).

    When you have a few small applications under your belt you can start to dream big. As in, start solving “real” problems. Like some automation that would help you or someone you know. Or tasks at work for a software company. Or that cool app you’ve always wanted to build. Working on real applications will give you more confidence and open the door to more learning. You’ll run into lots of problems and learn how not to do things. So many ways not to do things.

    TLDR: If it’s not clicking, you need to, as a general rule, do less learning (in the conventional sense of absorbing and integrating information) and more doing. A lot of doing.






  • The main difference is that 1Password requires two pieces of information for decrypting your passwords while Bitwarden requires only one.

    Requiring an additional secret in the form of a decryption key has both upsides and downsides:

    • if someone somehow gets access to your master password, they won’t be able to decrypt your passwords unless they also got access to your secret key (or one of your trusted devices)
    • a weak master password doesn’t automatically make you vulnerable
    • if you lose access to your secret key, your passwords are not recoverable
    • additional effort to properly secure your key

    So whether you want both or only password protection is a trade-off between the additional protection the key offers and the increased complexity of adequately securing it.

    Your proposed scenarios of the master password being brute forced or the servers being hacked and your master password acquired when using Bitwarden are misleading.

    Brute forcing the master password is not feasible, unless it is weak (too short, common, or part of a breach). By default, Bitwarden protects against brute force attacks on the password itself using PBKDF2 with 600k iterations. Brute forcing AES-256 (to get into the vault without finding the master password) is not possible according to current knowledge.

    Your master password cannot be “acquired” if the Bitwarden servers are hacked.
    They store the (encrypted) symmetric key used to decrypt your vault as well as your vault (where all your passwords are stored), AES256-encrypted using said symmetric key.
    This symmetric key is itself AES256-encrypted using your master password (this is a simplification) before being sent to their servers.
    Neither your master password nor the symmetric key used to decrypt your password vault is recoverable from Bitwarden servers by anyone who doesn’t know your master password and by extension neither are the passwords stored in your encrypted vault.

    See https://bitwarden.com/help/bitwarden-security-white-paper/#overview-of-the-master-password-hashing-key-derivation-and-encryption-process for details.



  • This works as a general guideline, but sometimes you aren’t able to write the code in a way that truly self-documents.
    If you come back to a function after a month and need half an hour to understand it, you should probably add some comments explaining what was done and why it was done that way (in addition to considering if you should perhaps rewrite it entirely).
    If your code is going to be used by third parties, you almost always need more documentation than the raw code.

    Yes documentation can become obsolete. So constrain its use to cases where it actually adds clarity and commit to keeping it up to date with the evolving code.



  • If their password was actually good (18+ random characters) it’s not feasible with current day technology to brute force, no matter how few PBKDF2 iterations were used.

    Obviously it’s still a big issue because in many cases people don’t use strong enough passwords (and apparently LastPass stored some of the information in plaintext) but a strong password is still good protection provided the encryption algorithm doesn’t have any known exploitable weaknesses.



  • There’s no need for something that complex.
    Someone with access to a chess engine watches the game and inputs the moves into the engine as they’re played. If there’s a critical move (only 1 or very few of the options are winning/don’t throw the game) they send a simple signal to let him know. That can be enough to give you an advantage at that level. If you really want, you could send a number between 1 and 6 to represent which piece the engine prefers to move, but it’s likely not necessary.

    That said, all the evidence he actually did anything like that is at best circumstantial (mostly statistical evidence supposedly showing how unlikely his performance was given his past performance and rating at the time, as well as known instances of past cheating by him - though the only confirmed ones were several years ago when he was still a kid and online rather than in person).


  • wols@lemm.eetoProgrammer Humor@lemmy.mlIn case you forgot.
    link
    fedilink
    arrow-up
    13
    arrow-down
    1
    ·
    1 year ago

    Extra steps that guarantee you don’t accidentally treat an integer as if it were a string or an array and get a runtime exception.
    With generics, the compiler can prove that the thing you’re passing to that function is actually something the function can use.

    Really what you’re doing if you’re honest, is doing the compiler’s work: hmm inside this function I access this field on this parameter. Can I pass an argument of such and such type here? Lemme check if it has that field. Forgot to check? Or were mistaken? Runtime error! If you’re lucky, you caught it before production.

    Not to mention that types communicate intent. It’s no fun trying to figure out how to use a library that has bad/missing documentation. But it’s a hell of a lot easier if you don’t need to guess what type of arguments its functions can handle.


  • wols@lemm.eetoMicroblog Memes@lemmy.worldYup
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    We’re talking past each other a bit I think. I’ve been trying to convince you that having billionaires is bad and we should have a world where they don’t exist. I’m not sure that I have, but now you seem mostly concerned about how we get there.

    When I said the money goes to the government, I meant profits past a certain net worth. I concede that this is more complicated for unrealized gains. So here’s a tentative solution: if you have unrealized gains that are worth more than the threshold, you’re forced to realize the amount you’re over at the current market price and your profit gets taxed. This would be the process when we’re already in the new system, without billionaires.

    If we’re talking about the process of getting rid of billionaires: are you a billionaire? No? Do you have enough shares of Apple where you, perhaps with the cooperation of 5 other shareholders, outvote all other shareholders? Or can exercise strong pressure on the board/CEO? No? Then I don’t think anyone should be coming for your shares.
    But if the answer to one of those questions is yes, all your shares past the threshold are divided among the workers employed by Apple. If you’re worried your remaining shares will go down in value in the future, just sell them now. Maybe you’re even allowed to sell a certain percentage before your shares are redistributed.

    For discussion’s sake, my own idea of a decent threshold would be in the tens of millions. Perhaps $80M. It’s arbitrary and I’m not particularly committed to that number. But you best believe I’m nowhere near worth that. And neither are 99.9% of people. It would of course be kept in line with inflation.

    If we’re still talking about the initial asset seizure with the sneakers. If I own 10% of a $1T company, I have a net worth of $100B. I’m not taxed 90% of that, $99_920_000_000 (99.92% in this case) worth of the stock is divided among the employees of that company. If I want, I can sell $80M worth of stock before that, but anything that brings my net worth (excluding my remaining stock) over $80M gets taxed at 100%.
    If the stock doesn’t appreciate in price and my net worth didn’t increase in some other way, I’m not getting taxed again next year on my stock. This “getting taxed to 0” concept is a misdirection to try to confuse workers about progressive taxes. You get taxed until you’re at the threshold (which is still much more than most people will ever have). You’re not ending up poor, or even middle class.

    I agree with your last paragraph. But both the corruptors and the corrupted have a strong incentive to keep the status quo. They always will, in capitalism.
    And besides that, being extremely wealthy doesn’t just give you political power through bribes. You probably have powerful friends, many of them probably owe you a favor or two. If you control a big company, you can even push governments around out in the open: if your state doesn’t write/keep laws that make me more money, I’m going to close up shop in your state and leave 10% of your workforce unemployed over night. Unelected people simply shouldn’t have that much power.


  • wols@lemm.eetoMicroblog Memes@lemmy.worldYup
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Yes, there are always incentives for corruption. But capitalism ads to and intensifies those incentives. People with unfathomable amounts of wealth have power over others. And they’re not elected, you can’t vote them out. They can fuck your life and there’s really not much you can do about it.

    Maybe the richest people don’t “make anything” until the asset is sold, but their incredible net worth still gives them power. That’s the issue at the end of the day.
    Many critics of anti-capitalists seem to think workers are envious of the money that the ultra-wealthy have. I don’t think this is the case.
    It would perhaps make sense to be envious of millionaires who can afford anything their heart desires and don’t have to work at a job they hate in order to be financially secure. I think for most people, that second part would already be more than enough. But to be envious of billionaires? I think this is not the norm. What billionaires have over millionaires is power. Most people don’t want power, they just want a happy, meaningful life.
    The problem with capitalism is that it facilitates and encourages those few that do want power. For most of them it would be more beneficial for society if they didn’t get it.

    The rich are already hiding their wealth. Trillions in offshore accounts suggests they don’t need to be taxed aggressively in order to try to hoard their money like dragons.

    Again, I was suggesting we don’t let it get that far. What’s the billion dollar asset you can’t make liquid? A company? If it’s that valuable you should simply not be allowed to own/control it alone. Really, if it’s that big it should be broken up in the first place.
    Where does the money go? To the government, same as it does now.
    I’m not really sure I understand the hand greasing fear: the government gets the money anyway, it’s in the law. What’s the scenario here? Rich guy bribes IRS bureaucrat to not take his money? That will be a lot harder when the rich guy doesn’t have billions and the IRS bureaucrat has enough money (and good enough social support) for a comfortable life.

    I also think speculation isn’t good and we should get rid of it. I really don’t care about your $600 sneakers and neither should the government. But at a scale that matters (not hundreds but hundreds of thousands - if you’re buying 1000 sneakers you’re also not in the clear) you should not be allowed to buy things for the purpose of re-selling them, except if you’re actually providing a service (like a supermarket, for example) - and even then I think there should be limits on how much you’re allowed to mark up the products vs. what you paid for them. I think in general there should be a cap on margins. You shouldn’t be able to ask for 10x what it cost you to make a product, especially if you make millions of them.