

I wasn’t trying to give you advice, I was describing the situation in general. 🤷
I wasn’t trying to give you advice, I was describing the situation in general. 🤷
It’s very hardware dependent with a few problem’s like Nvidia. For Best results go established brands that support Linux like thinkpads.
Steak fries are not shown here. They’re bigger again.
I’m now 1 year in to working in Go having been mostly C++ and then mostly large-scale Python dev (with full type annotation).
Frankly, I bristle now at people giving Python a hard time, having worked with Go and I now hate Go and the de-facto ethos that surrounds it. Python may be slow, but for a lot of use cases not in any way that matters and modern computers are very fast. Many problem areas are not performance-limited, and many performance problems are algorithmic, not from raw statement execution. I even rewrote an entire system in Python and made it use 20% of the CPU the former C++ solution used, while having much more functionality.
The error returns drive me nuts. I looked around for explanations of the reasoning as I wasn’t seeing it, and only found bald assertions that exceptions get out of control and somehow error returns don’t. Meanwhile standard Go code is very awkward to read because almost every little trivial function calls becomes 4 lines of code, often to do nothing but propagate the error (and errors are just ignored if you forget…). With heavy use of context managers, my error and cancellation handling in Python was always clean, clear, and simple, with code that almost read like whiteboard pseudo-code.
The select
statement can be cool in Go, but then you realize that literally 98% of the times it’s used, it’s simply boilerplate code to (verbosely) handle cancellation semantics via the context object you have to pass everywhere. Again, literally code you just don’t need in exception-based languages with good structures to manage it like Python context managers.
And every time you think “this is stupidly awkward and verbose, surely there’s a cleaner way to do this” you find people online advocating writing the same boilerplate code and passing it off as a virtue. e.g. get a value from a map and fall back to a default if it’s not there? Nope, not offering that, so everyone must write their own if foo, ok := m[k]; !ok {...}
crap. Over and over and over again the answer is “just copy this chunk of code” rather than “standard libraries should provide these commonly needed utilities”. Of course we can do anything we want ourselves, it’s Turing Complete, but why would we want to perpetually reinvent these wheels?
It’s an unpopular language, becoming less popular (at least by Google trends) and for good reason. I can see it working well for a narrow set of low level activities with extreme concurrency performance needs, but it’s not the only language that could handle that, and for everything else, I think it’s the wrong choice.
Go code is always an abomination.
Along with “it’s sometimes hard to detect your own stink”
I know about window managers and how using them will reduce the memory usage by system a lot because they are less bloated etc.
Ehhhh… I think it’s more “not using a curated general-purpose DE”, rather than “using a WM”. All graphical systems include a WM, and a DE in some senses is more of a concept or category than a concrete thing. The choice is whether it’s one you cobble a DE together yourself, or use a pre-configured, curated one.
Many people use stand-alone WMs and then create their own DE, but quite a few of us put the WM of our choice within existing DE because we want the WM but have no interest in re-inventing all those DE wheels (and/or have >4Gb memory so the “bloat” is not an issue). In my case it’s i3 on Gnome via gnome-flashback.
Curated DEs do tend to use more resources - typically mostly memory - partly because they tend to be comprehensive for diverse users. Rolling your own minimal DE for your personal needs can often be lighter weight. If you have a very constrained system then it can be beneficial, though that circumstance is more and more unusual these days when 8Gb of memory is often considered “minimal”.
The main reasons for making your own DE is to do things exactly the way you want, at the expense of having to do it. Beware though, there will be various helpful features of DEs you may not realize you appreciate until you have realize you don’t have them. E.g. what happens when you plug in a USB drive? Nothing, by default - a DE usually manages that. SSHing into servers a lot - a credentials agent is nice - better add one of those…
A lot of rolling your own DE is months or years of “oh yeah, that is a useful thing to have; I need to find tools and configure them to do that”. Conversely, dropping your WM of choice into another DE is often a case of “huh, that happens automagically; nice!”.
Dynamic typing is shit. But type annotation plus CI checkers can give you the same benefits in most cases.
Once you need performance
If you need more performance. Many things just don’t.
I think that’s a slightly different animal. AFAIK it’s doesn’t switch config depending on the current focused window. E.g. for some programs I don’t want remapping.
I use a key remapper to give me the readline keys everywhere. Though I’ve used XKeysnail and xremap and they’re both a bit flakey, so if anyone has better recommendations that work on X11 and Wayland, I’m all ears.
I have decades as a SWE, including deep (but now out-of-date) C++ experience, a lot more recently in serious Python systems, and a fair amount of web UI dev on the side.
Now I have 1 year with Go. I came to it with an open mind having heard people sing its praises I thought it would be broadening to spend some time with a language new to me.
My advice now is do anything you can to avoid working in golang. Almost daily, I seriously contemplate whether it’d be worth quitting and being unemployed, even in this economy (US). It is a better C, but that’s a low, low bar at least for the project domains I ever work in. Where it’s an even plausible answer, Rust is probably a better one (I think? - haven’t used Rust for anything real).
That seems to be the Go way. Why put it in a library when everyone can just re-implement it themselves (and test and document it too, right? Right?).
E.g. There isn’t even a standard set object, everyone just implements it as a map pointing to empty structs, and you get familiar with that and just accept it and learn to understand what it means when someone added an empty struct to a map. And then people try to paint this as a virtue of the language.
That’s ironic. Few countries have less readable plates.
Excellent description of the zeitgeist.
Your portrait of before generative AI is a bit hard to square with the ad driven internet, but fits ever better the further back you go.
Yeah, we’re turning it all to shit in so many ways simultaneously, it’s truly something awful to behold. Maybe there is a singularity coming after all, but it’s not one like the credulous tech worshippers imagined.
To be fair though only some are ok with Palantir. They made some useful generic developer tools and quite a few refused to use them.
And there is a lot of free software ethos was born out of MIT. Free as in libre, not free as in beer. This may all have been a mistake, but quite a few people in our are ok.
Also depends on your variant of English, because North American Biscuits are very different from the rest of the anglophone world’s biscuits. Many of them are unleavened, just as most gods don’t have a strong position on whether you should use leavening at any time of the year, let alone now.
There are lots of cyclists in the photos. We’re you expecting them to all crowd together in one spot?