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

help-circle
  • Every year or two I give Windows a genuine try for around a month. WSL2 is actually pretty decent, it’s a massive improvement on the Windows development experience I had back in 2015 when I tried running Windows full time doing Python/Ruby/Java development. Required cygwin, git bash, power shell, and cmd depending on what I was doing. It was a special kind of nightmare. Lots of native gems couldn’t compile, lots of tooling issues, etc.

    Now you can use exclusively Windows terminal, keep essentially all your development stuff in a Linux subsystem, and pretend you’re in Linux. Integration with things like vscode or intellij is quite decent with the WSL.

    That said, I hate Microsoft, hate the lack of customization, hate the default UI, hate the split between Windows 95-style settings and new Windows 10+, it’s inconsistent as hell. Moving windows across monitors with different scaling still resizes the windows in a very archaic way. You can’t reasonably use multiple desktops because you can’t easily rebind keys to swap desktops without third party software. I’ve changed DEs in Linux for smaller issues than these.


  • Yeah for both Ubuntu and Arch on two separate computers in my house, the process was just install the distro then install steam + Lutris (steam for steam games, Lutris for every other kind of game like League or WoW).

    Installing steam games is identical in Linux and Windows for the vast majority of games. Installing non-steam games is arguably easier since you never have to go to a web browser.

    Honestly the only reason Windows is “easier” is because it’s preinstalled on computers. As someone who has fresh installed Linux and Windows, Linux is miles easier to install. To install Windows 11 I tried following their recommendations (enabling TPM and secure boot in bios), but the W11 installer still didn’t like my 2 year old computer, so had to open up the command prompt, regedit, and add 3 Bypass registry DWord 32 bit values. Then actually installing the O.S you just sit there and wait with an unusable computer. Linux installations have nice GUIs that are far more modern, don’t require weird terminal hacks, and you have a usable computer while it’s installing (you can open up Firefox and browse the web for example).

    \rant




  • Nevoic@lemmy.worldtoProgrammer Humor@programming.devGolang be like
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    11 months ago

    Note: Lemmy code blocks don’t play nice with some symbols, specifically < and & in the following code examples

    This isn’t a language level issue really though, Haskell can be equally ergonomic.

    The weird thing about ?. is that it’s actually overloaded, it can mean:

    • call a function on A? that returns B?
    • call a function on A? that returns B

    you’d end up with B? in either case

    Say you have these functions

    toInt :: String -> Maybe Int
    
    double :: Int -> Int
    
    isValid :: Int -> Maybe Int
    

    and you want to construct the following using these 3 functions

    fn :: Maybe String -> Maybe Int
    

    in a Rust-type syntax, you’d call

    str?.toInt()?.double()?.isValid()
    

    in Haskell you’d have two different operators here

    str >>= toInt &lt;&amp;> double >>= isValid
    

    however you can define this type class

    class Chainable f a b fb where
        (?.) :: f a -> (a -> fb) -> f b
    
    instance Functor f => Chainable f a b b where
        (?.) = (&lt;&amp;>)
    
    instance Monad m => Chainable m a b (m b) where
        (?.) = (>>=)
    

    and then get roughly the same syntax as rust without introducing a new language feature

    str ?. toInt ?. double ?. isValid
    

    though this is more general than just Maybes (it works with any functor/monad), and maybe you wouldn’t want it to be. In that case you’d do this

    class Chainable a b fb where
        (?.) :: Maybe a -> (a -> fb) -> Maybe b
    
    instance Chainable a b b where
        (?.) = (&lt;&amp;>)
    
    instance Chainable a b (Maybe b) where
        (?.) = (>>=)
    

    restricting it to only maybes could also theoretically help type inference.


  • Nevoic@lemmy.worldtoProgrammer Humor@programming.devGolang be like
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    11 months ago

    Here’s an example (first in Haskell then in Go), lets say you have some types/functions:

    • type Possible a = Either String a
    • data User = User { name :: String, age :: Int }
    • validateName :: String -> Possible String
    • validateAge :: Int -> Possible Int

    then you can make

    mkValidUser :: String -> Int -> Possible User
    mkValidUser name age = do
      validatedName ← validateName name
      validatedAge  ← validateAge age
      pure $ User validatedName validatedAge
    

    for some reason <- in lemmy shows up as &lt;- inside code blocks, so I used the left arrow unicode in the above instead

    in Go you’d have these

    • (no Possible type alias, Go can’t do generic type aliases yet, there’s an open issue for it)
    • type User struct { Name string; Age int }
    • func validateName(name string) (string, error)
    • func validateAge(age int) (int, error)

    and with them you’d make:

    func mkValidUser(name string, age int) (*User, error) {
      validatedName, err = validateName(name)
      if err != nil {
        return nil, err
      }
    
      validatedAge, err = validateAge(age)
      if err != nil {
        return nil, err
      }
    
      return User(Name: validatedName, Age: validatedAge), nil
    }
    

    In the Haskell, the fact that Either is a monad is saving you from a lot of boilerplate. You don’t have to explicitly handle the Left/error case, if any of the Eithers end up being a Left value then it’ll correctly “short-circuit” and the function will evaluate to that Left value.

    Without using the fact that it’s a functor/monad (e.g you have no access to fmap/>>=/do syntax), you’d end up with code that has a similar amount of boilerplate to the Go code (notice we have to handle each Left case now):

    mkValidUser :: String -> Int -> Possible User
    mkValidUser name age =
      case (validatedName name, validateAge age) of
        (Left nameErr, _) => Left nameErr
        (_, Left ageErr)  => Left ageErr
        (Right validatedName, Right validatedAge) => 
          Right $ User validatedName validatedAge
    





  • “from a private third party” where? A (non-foolish) socialist would advocate for rules against renting people, just like we’re not allowed to buy people right now.

    That would mean there would be no private third parties that are renting out factories of rented workers.

    If what you’re saying is “from a private third party outside the socialist space”, then that’s a problem for all kinds of socialist spaces. We can’t control productive forces outside of the space we have domain over.


  • It sounds like the market socialists you’ve been talking to haven’t been socialists if they’re in favor of private property, that’s strictly a capitalist position. They’re probably just welfare capitalists.

    An actual market socialist is against private entities owning the means of production, they’re owned communally by some mechanism (be it some democratically run cooperative, the state, etc .) It wouldn’t be a group of stakeholders that are a separate, private entity disconnected from the workers (though the state arguably is an entity like that, and that’s where the line between state socialism and state capitalism gets blurry).


  • I’m a huge anti-capitalist/socialist, and often times I find it useful to use this mix-up of markets and capitalism in my favor.

    When people say “but we need capitalism because the alternative to markets is so bad” I say plainly that I’m not advocating against markets, I’m advocating against classes. The vast majority of self-described capitalists aren’t trying to defend massive corporations or employer exploitation, they’re defending markets.

    If all those pro market capitalists became market socialists, dismantling capitalism would be far easier, then we could have much more interesting discussions about the merits of markets and when to use them versus centralized planning, without a leech class exploiting wage slaves or scalping houses.


  • Authoritarian state capitalism is different than liberal capitalism, I wasn’t trying to say they’re the same as the U.S, and you correctly outlined some differences that I agree with.

    As for beliefs, I also recognize many Chinese people believe they have socialism, just like many Americans believe that we live in a free democratic first world country. The similarity here is that both these takes are just state propaganda that have been successfully fed to the masses.

    China has successfully reverted anything remotely socialist about the country over the last 40 years. Like I’ve said previously, I recognize one day they might flip the switch, eliminate all the landlords & business owners, seize the means of production, and dissolve the State. I don’t believe this will happen though, and they’ve made no indication of even moving vaguely in this direction.

    If/when the day arrives that the workers own the means of production and are no longer wage slaves to a bourgeoise class, they will have successfully installed socialism. Before that day comes you can’t just execute a few billionaires and claim you have socialism, if you’re at all concerned with the true state of things.


  • I didn’t tell anyone how to run anything, I pointed out how they’re an entirely capitalist nation that pretends to be socialist. Maybe the current authoritarian regime will suddenly revert all the market reforms they’ve implemented over the last 3-4 decades, seize the means of production, and then dissolve the state when it’s no longer needed.

    I don’t believe this will happen, and I don’t think many people do. Most of the “socialists” that support China are more than happy with the bourgeoise class existing and exploiting working class people “for the betterment of the State”. This kind of thinking falls much more in line with Mussolini than Marx.



  • On this note it’s crazy there are people who will spend over $100 on a Windows license, when all they do is use a web browser or simple productivity apps like spreadsheets or word.

    I can get if you’re using some adobe products, or some game that hasn’t been updated to the Linux compatible EAC, but for the vast majority of people paying over $100 (or having that cost passed onto you from the manufacturer if Windows is preinstalled) is crazy.


  • Mostly agree, but the “incentive” focus is a misnomer. Humans don’t just sit around and stare at walls when they’re not “incentivized”. Incentives in sociopolitics is just a rebranding of coercion, getting people to do things they don’t want to do. People are incentivized/coerced to work at McDonald’s because otherwise they’ll live on the streets, the housing scalpers will make sure of it.

    FOSS exists and isn’t at risk of dying. Yeah, it’s ideal if the people working on FOSS things don’t have to also work a soul crushing day job, and yeah maybe when their soul is crushed they’ll lose interest in the things they enjoy doing, but we shouldn’t frame that as them getting jaded towards FOSS projects. It’s actually just depression, and it impacts other hobbies too.

    All that being said, I’m all for donations to people who do FOSS work so they can escape and do the things they love, it means better FOSS products and happier developers.