1. 2

    I am currently using a MacBook Pro Escape 2016. I cannot recommend it. The keyboard has problems. Having 2 USB-C ports is very limited. Many of the hardware components are not supported by Linux.

    I was drawn to it, because I had primarily used Macs since 2007 and was very with them. Both hardware-wise and macOS. Unfortunately, both have gone downhill, whereas prices have gone op. When I am not on the go, I am now using Linux again >50% of the time (on a Dell Precision workstation).

    1. 2

      why does crappy vision mean you need 1080p? wouldn’t it make resolution less important? or if anything a lower resolution would be better because fonts would be larger by default?

      written from an x61… for a larger screen i’d recommend thinkpad t61, t400, t410, t420, or t430. i think those are mostly 14”; there were 15.4” models in the t61 and t500. meets your frugality requirements for sure, and everything else feels flimsy in comparison.

      1. 2

        Probably means as opposed to HiDPI, although with scaling set up that shouldn’t be a problem. My only experience with scaling is with our living room PC hooked up to the TV (only 1080p, but far away), and while not everything is perfect I haven’t had too many problems.

        1. 1

          Probably means as opposed to HiDPI, although with scaling set up that shouldn’t be a problem. My only experience with scaling […]

          I have a desktop workstation with a 4k screen and (integer) scaling is not a problem, at least on GNOME. Both Gtk+3 and Qt applications work perfectly fine. The primary exception are some Gtk+2 apps like Inkscape and The Gimp, which have tiny controls. Interestingly, I also run some Tk applications, which have also worked great with scaling since Tk 8.6.

      1. 20

        The “lacks” of Go in the article are highly opinionated and without any context of what you’re pretending to solve with the language.

        Garbage collection is something bad? Can’t disagree harder.

        The article ends with a bunch of extreme opinions like “Rust will be better than Go in every possible task

        There’re use cases for Go, use cases for Rust, for both, and for none of them. Just pick the right tool for your job and stop bragging about yours.

        You love Rust, we get it.

        1. 2

          Yes, I would argue GC is something that’s inherently bad in this context. Actually, I’d go as far as to say that a GC is bad for any statically typed language. And Go is, essentially, statically typed.

          It’s inherently bad since GC dictates the lack of destruction mechanisms that can be reliably used when no reference to the resource are left. In other words, you can’t have basic features like the C++ file streams that “close themselves” at the end of the scope, then they are destroyed.

          That’s why Go has the “defer” statement, it’s there because of the GC. Otherwise, destructors could be used to defer cleanup tasks at the end of a scope.

          So that’s what makes a GC inherently bad.

          A GC, however, is also bad because it “implies” the language doesn’t have good resource management mechanisms.

          There was an article posted here, about how Rust essentially has a “static GC”, since manual deallocation is almost never needed. Same goes with well written C++, it behaves just like a garbage collected language, no manual deallocation required, all of it is figured out at compile time based on your code.

          So, essentially, a GC does what language like C++ and Rust do at compile time… but it does it at runtime. Isn’t this inherently bad ? Doing something that can be done at CT during runtime ? It’s bad from a performance perspective and also bad from a code validation perspective. And it has essentially no upsides, as far as I’ve been able to tell.

          As far as I can tell the main “support” for GC is that they’ve always been used. But that doesn’t automatically make them good. GCs seem to be closer to a hack for a language to be easier to implement rather than a feature for a user of the language.

          Feel free to convince me otherwise.

          1. 11

            It’s inherently bad since GC dictates the lack of destruction mechanisms that can be reliably used when no reference to the resource are left.

            Why do you think this would be the case? A language with GC can also have linear or affine types for enforcing that resources are always freed and not used after they’re freed. Most languages don’t go this route because they prefer to spend their complexity budgets elsewhere and defer/try-with-resources work well in practice, but it’s certainly possible. See ATS for an example. You can also use rank-N types to a similar effect, although you are limited to a stack discipline which is not the case with linear/affine types.

            So, essentially, a GC does what language like C++ and Rust do at compile time… but it does it at runtime. Isn’t this inherently bad ?

            No, not necessarily. Garbage collectors can move and compact data for better cache locality and elimination of fragmentation concerns. They also allow for much faster allocation than in a language where you’re calling the equivalent of malloc under the hood for anything that doesn’t follow a clean stack discipline. Reclamation of short-lived data is also essentially free with a generational collector. There are also garbage collectors with hard bounds on pause times which is not the case in C++ where a chain of frees can take an arbitrary amount of time.

            Beyond all of this, garbage collection allows for a language that is both simpler and more expressive. Certain idioms that can be awkward to express in Rust are quite easy in a language with garbage collection precisely because you do not need to explain to the compiler how memory will be managed. Pervasive use of persistent data structures also becomes a viable option when you have a GC that allows for effortless and efficient sharing.

            In short, garbage collection is more flexible than Rust-style memory management, can have great performance (especially for functional languages that perform a lot of small allocations), and does not preclude use of linear or affine types for managing resources. GC is hardly a hack, and its popularity is the result of a number of advantages over the alternatives for common use cases.

            1. 1

              What idioms are unavailable in Rust or in modern C++, because of their lack of GC, but are available in a statically typed GC language ?

              I perfectly agree with GC allowing for more flexibility and more concise code as far as dynamic language go, but that’s neither here nor there.

              As for the theoretical performance benefits and real-time capabilities of a GCed language… I think the word theoretical is what I’d focus my counter upon there, because they don’t actually exist. The GC overhead is too big, in practice, to make those benefits outshine languages without runtime memory management logic.

              1. 9

                I’m not sure about C++, but there are functions you can write in OCaml and Haskell (both statically typed) that cannot be written in Rust because they abstract over what is captured by the closure, and Rust makes these things explicit.

                The idea that all memory should be explicitly tracked and accounted for in the semantics of the language is perhaps important for a systems language, but to say that it should be true for all statically typed languages is preposterous. Languages should have the semantics that make sense for the language. Saying a priori that all languages must account for some particular feature just seems like a failure of the imagination. If it makes sense for the semantics to include explicit control over memory, then include it. If it makes sense for this not to be part of the semantics (and for a GC to be used so that the implementation of the language does not consume infinite memory), this is also a perfectly sensible decision.

                1. 2

                  there are functions you can write in OCaml and Haskell (both statically typed) that cannot be written in Rust because they abstract over what is captured by the closure

                  Could you give me an example of this ?

                  1. 8

                    As far as I understand and have been told by people who understand Rust quite a bit better than me, it’s not possible to re-implement this code in Rust (if it is, I would be curious to see the implementation!)

                    https://gist.github.com/dbp/0c92ca0b4a235cae2f7e26abc14e29fe

                    Note that the polymorphic variables (a, b, c) get instantiated with different closures in different ways, depending on what the format string is, so giving a type to them is problematic because Rust is explicit about typing closures (they have to talk about lifetimes, etc).

                    1. 2

                      My God, that is some of the most opaque code I’ve ever seen. If it’s true Rust can’t express the same thing, then maybe it’s for the best.

                      1. 2

                        If you want to understand it (not sure if you do!), the approach is described in this paper: http://www.brics.dk/RS/98/12/BRICS-RS-98-12.pdf

                        And probably the reason why it seems so complex is because CPS (continuation-passing style) is, in general, quite hard to wrap your head around.

                        I do think that the restrictions present in this example will show up in simpler examples (anywhere where you are trying to quantify over different functions with sufficiently different memory usage, but the same type in a GC’d functional language), this is just a particular thing that I have on hand because I thought it would work in Rust but doesn’t seem to.

                        1. 2

                          FWIW, I spent ~10 minutes trying to convert your example to Rust. I ultimately failed, but I’m not sure if it’s an actual language limitation or not. In particular, you can write closure types in Rust with 'static bounds which will ensure that the closure’s environment never borrows anything that has a lifetime shorter than the lifetime of the program. For example, Box<FnOnce(String) + 'static> is one such type.

                          So what I mean to say is that I failed, but I’m not sure if it’s because I couldn’t wrap my head around your code in a few minutes or if there is some limitation of Rust that prevents it. I don’t think I buy your explanation, because you should technically be able to work around that by simply forbidding borrows in your closure’s environment. The actual thing where I got really hung up on was the automatic currying that Haskell has. In theory, that shouldn’t be a blocker because you can just introduce new closures, but I couldn’t make everything line up.

                          N.B. I attempted to get any Rust program working. There is probably the separate question of whether it’s a roughly equivalent program in terms of performance characteristics. It’s been a long time since I wrote Haskell in anger, so it’s hard for me to predict what kind of copying and/or heap allocations are present in the Haskell program. The Rust program I started to write did require heap allocating some of the closures.

            2. 5

              It’s inherently bad since GC dictates the lack of destruction mechanisms that can be reliably used when no reference to the resource are left. In other words, you can’t have basic features like the C++ file streams that “close themselves” at the end of the scope, then they are destroyed.

              Deterministic freeing of resources is not mutually exclusive with all forms of garbage collection. In fact, this is shown by Rust, where reference counting (Rc) does not exclude Drop. Of course, Drop may never be called when you create cycles.

              (Unless you do not count reference counting as a form of garbage collection.)

              1. 2

                Well… I don’t count shared pointers (or RC pointers or w/e you wish to call them) as garbage collected.

                If, in your vocabulary, that is garbage collection then I guess my argument would be against the “JVM style” GC where the moment of destruction can’t be determined at compile time.

                1. 8

                  If, in your vocabulary, that is garbage collection

                  Reference counting is generally agreed to be a form of garbage collection.

                  I guess my argument would be against the “JVM style” GC where the moment of destruction can’t be determined at compile time.

                  In Rc or shared_ptr, the moment of the object’s destruction can also not be determined at compile time. Only the destruction of the Rc itself; put differently the reference count decrement can be determined at compile time.

                  I think your argument is against tracing garbage collectors. I agree that the lack of deterministic destruction is a large shortcoming of languages with tracing GCs. It effectively brings back a parallel to manual memory management through the backdoor — it requires manual resource management. You don’t have to convince me :). I once wrote a binding to Tensorflow for Go. Since Tensorflow wants memory aligned on 32-byte boundaries on amd64 and Go allocates (IIRC) on 16-byte boundaries, you have to allocate memory in C-land. However, since finalizers are not guaranteed to run, you end up managing memory objects with Close() functions. This was one of the reasons I rewrote some fairly large Tensorflow projects in Rust.

                  1. 2

                    However, since finalizers are not guaranteed to run, you end up managing memory objects with Close() functions.

                    Hmm. This seems a bit odd to me. As I understand it, Go code that binds to C libraries tend to use finalizers to free memory allocated by C. Despite the lack of a guarantee around finalizers, I think this has worked well enough in practice. What caused it to not work well in the Tensorflow environment?

                    1. 3

                      When doing prediction, you typically allocate large tensors relatively rapidly in succession. Since the wrapping Go objects are very small, the garbage collector kicks in relatively infrequently, while you are filling memory in C-land. There are definitely workarounds to put bounds on memory use, e.g. by using an object pool. But I realized that what I really want is just deterministic destruction ;). But that may be my C++ background.

                      I have rewritten all that code probably around the 1.6-1.7 time frame, so maybe things have improved. Ideally, you’d be able to hint the Go GC about the actual object sizes including C-allocated objects. Some runtimes provide support for tracking C objects. E.g. SICStus Prolog has its own malloc that counts allocations in C-land towards the SICStus heap (SICStus Prolog can raise a recoverable exception when you use up your heap).

                      1. 1

                        Interesting! Thanks for elaborating on that.

                  2. 3

                    So Python, Swift, Nim, and others all have RC memory management … according to you these are not GC languages?

                2. 5

                  One benefit of GC is that the language can be way simpler than a language with manual memory management (either explicitly like in C/C++ or implicitly like in Rust).

                  This simplicity then can either be preserved, keeping the language simple, or spent on other worthwhile things that require complexity.

                  I agree that Go is bad, Rust is good, but let’s be honest, Rust is approaching a C++-level of complexity very rapidly as it keeps adding features with almost every release.

                  1. 1

                    you can’t have basic features like the C++ file streams that “close themselves” at the end of the scope, then they are destroyed.

                    That is a terrible point. The result of closing the file stream should always be checked and reported or you will have buggy code that can’t handle edge cases.

                    1. 0

                      You can turn off garbage collection in Go and manage memory manually, if you want.

                      It’s impractical, but possible.

                      1. 2

                        Is this actually used with any production code ? To my knowledge it was meant to be more of a feature for debugging and language developers. Rather than a true GC-less option, like the one a language like D provides.

                        1. 1

                          Here is a shocking fact: For those of us who write programs in Go, the garbage collector is actually a wanted feature.

                          If you work on something where having a GC is a real problem, use another language.

                  1. 9

                    Build systems that will last, where multiple services can coexist effectively, and where users will want to return to work, communicate, and setup up their .project files.

                    I am not sure that this is realistic outside some subcultures that do it for nostalgical reasons or because they want to be part of a niche subculture (all completely valid!). Unix systems used to be multi-user, because they were fast, large, and expensive machines compared. So, it was more price-effective to let people log onto a UNIX machine from dumb terminals, than to put a VAX on every desk. Now machines have become so powerful that everyone can just have their personal single-user machine. For social stuff, we have Facebook, Twitter, Mastodon, WhatsApp, Signal, or whatever.

                    Rebooting used to be a mark of failure as a sysadmin: you couldn’t figure out what was going wrong and had to resort to the nuclear option. Today, we don’t even bother to reboot the system. Instead, just destroy the whole thing and start over. What went wrong? Who cares!

                    Or just switch to the previous NixOS generation. No need to destroy the system ;).

                    1. 7

                      “I am not sure that this is realistic outside some subcultures that do it for nostalgical reasons or because they want to be part of a niche subculture (all completely valid!). “

                      Exactly. We have a finite amount of time to live, a subset of that to be productive at our goals, and lots of potential goals. The non-console-UNIX systems showed us a lot of stuff can be automatic and have little to no learning curve if its developers invest some effort into that. Maybe an optional, escape hatch where a support team or command line lets of do more than the GUI’s defaults. That frees up more time to achieve our goals that we’re not spending on incidental complexity in our systems.

                      So, I’m opposed to the old model of learning all kinds of complicated crap to keep a system going. I’d rather they be designed to handle that for you with admins using just enough effort to steer the automated system in the right direction. Where possible, simple enough for non-admins to administer it from system defaults to pre-packaged help.

                      “Or just switch to the previous NixOS generation. No need to destroy the system ;)”

                      Or switch to Minix 3, QNX, etc that let you keep going despite many failures. Alternatively, verified components that prevent them. Or a mix. We have lots of options today.

                    1. 17

                      Just another “Why Rust should replace Language X” article with not much depth. By now the greatest entrance barrier to Rust is the community’s attitude. Go lacks in a certain field that Rust does well? let’s talk for hours about how rust does it better. Rust lacks async networking that Go was designed to do well? no problem we’ll catch up for sure.

                      1. 13

                        They can’t figure out why everyone doesn’t love their thing and why some like this other thing so much better while they are convinced that the other thing is inferior.

                        1. 5

                          I don’t think this is true for the whole Rust community. However, when a language has temporal exponential growth, there are a lot of newcomers who are intoxicated with the language. It usually takes a few years for a language community at large to get a better perspective on the role of their favorite language. It’s pretty much what happens during all language hypes.

                          I also fundamentally disagree with the author. Go is not a bad language, it just has different design goals than Rust. I think the strongest criticism that one can have is that it does not provide many improvements above modern Pascal, Modula-2, or Oberon-2. The Wirth languages are also very simple. But Go has clearly shown rebooting a language philosophy with a new ecosystem and a more familiar (C-like) syntax can bring success.

                          1. 0

                            The Wirth languages are also very simple.

                            I think even Wirth would design a language in 2018 differently compared to his work in 1971.

                            Go creators seem to disagree, discarding almost FIFTY years of progress in language design.

                            They can do whatever they want, but please don’t drag Wirth through the mud.

                            1. 4

                              I think even Wirth would design a language in 2018 differently compared to his work in 1971.

                              Oberon-2 is from 1991 and Wirth has updated its specification. Here is the 2013 revision of the spec:

                              https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf

                              He also still seems to be working on the compiler:

                              https://www.inf.ethz.ch/personal/wirth/news.txt

                              It still looks as simple as it did when I wrote some Oberon in the early 00s.

                              1. 1

                                That’s unsurprising and doesn’t detract form anything I wrote.

                              2.  

                                Go creators seem to disagree, discarding almost FIFTY years of progress in language design.

                                Have you even considered that they don’t necessarily agree that fifty years of overcomplicated type system designs might not be considered ‘progress’ by everyone?

                        1. 13

                          The OS itself in my opinion is not ready for widespread desktop usage…

                          Would I install it on my granma’s computer? Most likely not, but nor would I GNU/Linux. However, it is just right for my kind of usage (workstation on a Thinkpad Carbon Gen 3).

                          OpenBSD is by far the most stable and predictable OS I am running (that includes OSX and GNU/Linux) and I am running -current. It does everything that needs being done and does it well.

                          I agree with OP that one has to like configuring stuff by editing files and reading manpages on the CLI. That being said, configurations are usually pretty terse, man pages well detailed and examples in the man abundant.

                          OpenBSD is a powertool for powerusers. It’s not being developed for mass market appeal and that’s actually one of its most attractive features.

                          1. 11

                            Actually, it is exactly the system I would install on my granma’s computer: A clean OpenBSD desktop with two icons: “Internet” and “Mail”.

                            She will never get a virus, break it, or fail to fake windows phone scams.

                            My mother ran a Linux box for many years before jumping to a mac, and she was happy. Everything worked, nothing ever broke. It was predictable. Nowadays Linux is less predictable, especially after an upgrade, but OpenBSD is :)

                            Edit: However I wouldn’t recommend OpenBSD to a “regular user” friend.

                            1. 7

                              Actually, it is exactly the system I would install on my granma’s computer: A clean OpenBSD desktop with two icons: “Internet” and “Mail”.

                              Geez, what an assumption ;), maybe grandma is a UNIX wizard and uses qutebrowser and mutt and launches them from the terminal.

                              At any rate, as far as I understand from various posts (haven’t tried OpenBSD since the early 00s), “Internet” would be very slow. Moreover, she would not be able to watch Netflix, since Widevine is not supported on OpenBSD. Oh, and she probably can’t Skype with her grandchildren, etc.

                              Do you non-tech beloved ones a favor and buy them an iPad. Despite the problems of Apple or Apple hardware, it is the most secure consumer platform, that gets updates for at least half a decade, and probably supports any popular application they’d want (Skype, Netflix, Youtube, Facebook, etc.).

                              1. 6

                                An iPad would work well for some people, but for many of my older relatives, they have trouble with the touchscreen input. They can all type reasonably well, since they’re of a generation where Typing was an entire course you took in school, but find touchscreen-typing to be frustrating. As far as something similar but with a kb, not sure whether iPad+bluetooth kb, or just a MacBook would be easier.

                                1. 4

                                  An iPad would work well for some people, but for many of my older relatives, they have trouble with the touchscreen input. They can all type reasonably well, since they’re of a generation where Typing was an entire course you took in school, but find touchscreen-typing to be frustrating.

                                  That’s interesting and a good point. Though it does not apply to everyone. My mother is in her sixties and never used a computer until 5 years ago (well, except for a domain specific-terminal application when she worked in a library in the 90ies). Despite doing some courses, etc. she always found computers too complex. However, since my dad bought an iPad for her ~5 years ago she has been using it very actively. She is able to do everything she wants - iMessaging, sending e-mail, and browse the web. Later, she also started using a smartphone, since ‘it is just a small iPad’.

                                  At any rate, iPad + KB vs. MacBook would strongly depend on the person and how much they want beyond a simple media consumption device. Of course, if someone is going to compose documents on a device all day, an iPad is a bad option.

                                  Of course, when it comes to typing you don’t want to buy a MacBook 12”/Pro now either ;). The butterfly keyboard is terribly unreliable (my 2016 MBP’s keys are sticky all the time).

                                  1. 1

                                    Sounds like my grandmother. She does almost everything through a web browser. I had her use Ubuntu briefly. She had no trouble with using it but just prefered the look and feel of Windows. So she went back. I still get malware calls on occasion.

                                  2. 2

                                    On phones, touch typing sucks for me cuz I have shaky fingers. Miss the keys and have to backspace a lot. Happens less on tablet with big keys. Doesnt happen with a physical keyboard regardless of size. I think it’s the extra, tactile feedback my brain gets from raised keys.

                                    1. 1

                                      I use an iPad (with a bluetooth keyboard) while on vacations as a substitute laptop. And with an SSH client program I can even do development on a remote server [1].

                                      [1] I may not like it that much, as the bluetooth keyboard I use is hard for me to use [2]. But I can do it.

                                      [2] Even the keyboards on Mac laptops suck. I generally only use IBM Model M keyboards, but taking one on vacation is a bit overkill I think.

                                    2. 2

                                      Geez, what an assumption ;), maybe grandma is a UNIX wizard and uses qutebrowser and mutt and launches them from the terminal.

                                      Sounds like OpenBSD would work even better for your grandmother than we first thought!

                                      “Internet” would be very slow.

                                      Why would that be?

                                      Do you non-tech beloved ones a favor and buy them an iPad. Despite the problems of Apple or Apple hardware, it is the most secure consumer platform, that gets updates for at least half a decade, and probably supports any popular application they’d want (Skype, Netflix, Youtube, Facebook, etc.).

                                      Sorry but no way would I ever subject anyone I know to using an iPad. Not only is their hardware crap (overheating the moment you do anything with it), and not only is their software locked-down-to-the-point-of-unusably crap, but tablets in general are absolutely pointless devices that have no reason to exist in the home. Tablets are great if you’re an engineer that needs to have a lightweight device with a good bright screen that they can use to look at plans on site. For my mother? Why wouldn’t she just use a laptop?

                                      Want to make a spreadsheet of your expenses? Nope, sorry, tablet spreadsheet software is garbage. Hope you like having a keyboard pop up over whatever you’re doing every time you want to input anything. Hope you like being unable to copy a row in a single drag of the mouse like you can on desktop, instead having to apparently click, copy, and manually paste into each cell. etc. They’re just bad devices for doing anything productive with a computer, and contrary to popular belief most people want to sometimes do something productive with their computer, whether it’s making a spreadsheet of their expenses, writing a letter to the editor of their paper, making a newsletter for their knitting association, or whatever. Sure they also want to watch Netflix, but that doesn’t mean that all they want to do is watch Netflix.

                                      1. 2

                                        Why would that be?

                                        https://www.tedunangst.com/flak/post/firefox-vs-rthreads

                                        but tablets in general are absolutely pointless devices that have no reason to exist in the home. Tablets are great if you’re an engineer that needs to have a lightweight device with a good bright screen that they can use to look at plans on site. For my mother? Why wouldn’t she just use a laptop?

                                        Both my parents and wife are completely happy iPad users. Outside work, my wife usually uses her tablet, despite having a laptop. They are safe, fast and effortless (require virtually no tech support). Interestingly, I as an engineer don’t need or want one. I had an iPad and Nexi on several occasions, but would never use them.

                                        YMMV

                                      2. 2

                                        ipads serve ads and manipulate you. allowing a manipulator access to a loved one doesn’t sound like a favor, not for the loved one at least.

                                        1. 4

                                          You will have to expand on that statement. The iPad I’m using to type this does not serve any ads outside apps. Nor do I feel manipulated.

                                          1. 1

                                            ads inside apps are still ads, as are push notifications from apps. and of course ios/app developers aren’t trying to make you feel manipulated.

                                          2. 3

                                            What ads? Paid apps typically don’t show ads. Besides that Safari on iOS has a content blocking API. Install e.g. Firefox Focus, which is a Safari ad blocker (besides a privacy-focus browser), and websites in Safari are ad-free.

                                            I have an iDevice (iPhone) and I never see an ad.

                                            1. 1

                                              youtube and facebook both show ads, and many facebook stories are ads even if they don’t look it. you can circumvent that on an ipad? could your grandma?

                                              1. 3

                                                What exactly does that have to do with the iPad? Facebook and Youtube are hardly specific to the iPad. Circumvention being ad-blocking? Won’t block facebook stories that are ads.

                                                1. 1

                                                  the ipad has facebook and youtube apps, as /u/iswrong pointed out.

                                                2. 1

                                                  Well, the comparison here is unfair. In OpenBSD they wouldn’t even have a Facebook or Youtube app. If they’d use the browser to access Facebook/Youtube in OpenBSD, there would be no difference, since Safari can also do ad blocking. Plus they would get hardware-accelerated video ;).

                                                  1. 1

                                                    right, BSD and Linux don’t have apps, so their utility isn’t tied to apps which show ads and manipulate you. OpenBSD has alternatives to facebook and youtube which don’t have these problems.

                                          3. 2

                                            Feels like a Chromebook would have a lot of the same advantages?

                                            1. 2

                                              What do you mean by “predictable” here? In my experience most major Linux distributions care far more about backwards compatibility between releases than OpenBSD does.

                                              1. 1

                                                Might pretend on the distro. Ubuntu is annoying about changes that break stuff or needlessly force me to learn new way to do old thing.

                                            2. 9

                                              OpenBSD feels to me similar to how Linux felt 10 years ago: precisely aimed at me. Now it feels like the ‘powers that be’ in the Linux community are only interested in targeting mobile devices and turning GNOME into macOS’s awful UI design of not letting you do anything that they didn’t think of beforehand.

                                              1. 4

                                                Why not run Gentoo or NixOS? Both give you as many configuration options as you require and neither sacrifice any speed? If you are security conscious I believe Gentoo still runs the “hardened” sources.

                                                1. 2

                                                  My concerns have nothing to do with security or configuration. I currently run Gentoo.

                                            1. 7

                                              Go to System Preferences > Security & Privacy > Privacy > Camera/Microphone and remove any app you don’t want to have access to the camera or microphone, if any

                                              If you need apps to access the camera/microphone (e.g. for web conferencing), it can be useful to install Micro Snitch:

                                              https://www.obdev.at/products/microsnitch/index.html

                                              This is from the developers of Little Snitch and warns you visually if an application accesses the microphone or camera.

                                                1. 1

                                                  I don’t have any controls for Camera/Microphone, on High Sierra. Do you know if that’s a Mojave thing?

                                                  1. 2

                                                    Could be, I definitely have them on Mojave.

                                                    Edit: indeed seems to be Mojave-only: https://www.cnet.com/how-to/stop-apps-from-accessing-your-macs-camera-and-microphone/

                                                1. 7

                                                  I have been running the 18.09 prerelease for a while, and for me the largest visible improvement over 18.03 is that GNOME works out of the box with Wayland. Thanks NixOS team!

                                                  [1] Though I install many ‘unstable’ packages through home-manager.

                                                  1. 1

                                                    nice! is wayland automatically enabled or I have to set an option?

                                                      1. 1

                                                        I think this just makes GDM run with Wayland. Once the user session activates it could be switching back to X11. Fedora had GDM running on Wayland for a while to test it out while keeping Gnome on X11.

                                                        1. 2

                                                          See the rest of the thread ;).

                                                        2. 1

                                                          I don’t think that actually enables wayland on the gnome desktop itself unfortunately, I think it just enables it for GDM itself :(

                                                          I’ve actually been following this issue and this PR waiting for it to be merged in because Xorg is consistently kind of janky and low framerate in my setup and I can’t get my desktop to scale correctly.

                                                          1. 1

                                                            I know that that is for enabling GDM on Wayland. But in GDM, one can choose the Wayland session type. But you are right, even the Wayland session type uses Xorg. The Wayland session type just didn’t work before on my machine, so I expected that it was actually running Wayland now that it works. But loginctl indeed reports X11 and now that I look more at it, I have the typical small X11 mouse cursors in places, despite 2.0 scaling.

                                                            1. 1

                                                              With that PR applied, the GNOME Wayland session actually runs Wayland indeed.

                                                              % echo $XDG_SESSION_TYPE
                                                              wayland
                                                              

                                                              Thanks!

                                                    1. 2

                                                      “universal” packaging fails at the most basic things…

                                                      1. 3

                                                        Could you qualify your statement more?

                                                        • Outdated packages are not a fundamental property of Flatpak. It’s a property of a particular repository.
                                                        • By default, Flatpak sandboxes applications, the author of the Flatpak has to explicitly state that the application needs access to the home directory or complete system.
                                                        • Flatpak provides a portal mechanism that allows sandboxing while still allowing the user to open files outside the sandbox (similar to macOS). However, many of the listed applications are using old Gtk+ versions, wxWidgets, Java JDK, etc., for which the portal mechanism is not implemented. So, their only choice is currently to permit home directory access (or the applications would be useless).
                                                        • A random Flatpak’ed application from Flathub provides more isolation than installing the same application through your distribution’s package manager (e.g. virtually all Gtk+ and Qt applications do not have blanket home directory access). So unless you explicitly sandbox your GUI applications with firejail, SELinux, AppArmor, etc. yourself, the Flatpak’ed application is going to be more secure.

                                                        I am not a Flatpak cheerleader. I think it works ok for some types of applications (non-developer/terminal applications that do not need deep system integration). But these blanket statements without any support are pretty useless. People spent a lot of paid and volunteer time into Flatpak and are making a serious attempt to isolate desktop applications more than before. So the discussion would be far more productive if you provided concrete arguments.

                                                        1. 2

                                                          The first thing that I notice with flatpak though is that it doesn’t promote secure defaults. I appear to have jumped on the bandwagon without clarifying… my bad.

                                                      1. 6

                                                        My hope for the future of Go is that it will continue to embrace simplicity in the face of cries for complexity.

                                                        I agree. I used to be a large proponent of adding generics to Go. But since Rust has taken off, I’d like it if Go and Rust explore two different approaches: Go with a drastic approach to simplicity and GC, Rust with parametric polymorphism + memory safety without GC. So with that in mind, I wouldn’t mind if Go did not add generics.

                                                        I am using Rust as my primary language, but I would like it if there was a fall-back option in case Rust or Rust libraries become over-engineered. This is just personal opinion and I don’t want to be controversial, but I think Haskell went from a simple functional language to type wizardry. Scala followed a similar path, except that it already started as a more complex language by aiming to be a functional language, while simultaneously implementing many OO concepts. Type wizardry can be fun, but it typically results in libraries that are hard to use by diverse teams or set of contributors. Rust libraries are generally ok in this respect, but there is definitely a lot of room of over-engineering with generics and traits.


                                                        The thing that I miss the most in Go, besides less repetitive error handling, is deterministic destruction. Especially when binding C. There is no guarantee when/if finalizers run and asking that callers call or defer a Close() function is a bit annoying. Destructors and GC are not mutually exclusive. A minor shortcoming is the lack of more powerful sum types.

                                                        Outside the language, it would be nice to have a slower compiler that inlines and optimizes more aggressively. As far as I understand, gccgo performance is currently not much better yet than the native Go compiler.

                                                        But everyone probably has a different set of wishes and if they were all added go Go, we’d end up with something that is not Go. So, it’s probably best for Go’s designers to be conservative ;).

                                                        1. 1

                                                          I’m getting more and more disenchanted with Rust’s memory safety claims. Seems like every week now we are hearing about another overflow in a Rust library due to unsafe. If you build a footgun, someone will use it.

                                                          1. 18

                                                            That is a good sign. The bad things you hear in the news are those that are rare and thus not dangerous. The really dangerous stuff is not reported in the news because these bad things happen all time.

                                                            For a comparison, statistically you will probably die from some form of cancer in a hospital. That does not get reported in the news. Being killed from a plane crashing into a skyscraper. That is newsworthy, but nothing to be afraid of.

                                                            When was the last time an overflow in a C program was on the lobsters frontpage?

                                                            1. 2

                                                              Compared to the status quo (C, C++), Rust is in a far better position, and far easy to audit. It’s great that some of these other bugs are being sorted out, but it would be far worse in a language with no separation between safe and unsafe code. Yes, I would love to see a systems language that has been formally verified from the ground up, with dependent types that we can prove properties about some of the more tricky low level stuff, but this is hard to do and will take more years, and even then it’d be prudent to install escape hatches for practicalities sake.

                                                          1. 34

                                                            I’m a chocolatier. I buy couvature in bulk and make chocolates. I usually bring them to events and conferences for funsies. I currently have cherry cordials, taro truffles, and candied orange peels in my cupboard.

                                                            I do a lot of cooking in general, too.

                                                            My other big hobby is juggling. I can do a five ball cascade one time in three, but these days I’ve been slacking off on toss juggling in favor of cigar boxes.

                                                            I want to volunteer more and learn knitting, but haven’t really started doing either of those.

                                                            1. 6

                                                              Did you grow up with someone who was a chocolatier? How’d you get into it.

                                                              1. 4

                                                                Nah, I didn’t even know how to cook until I got to college. Then I got obsessed. One Christmas I was alone on campus, got cabin fever, and decided I was gonna learn confectionary. Been doing it ever since!

                                                              2. 6

                                                                I’m a chocolatier. I buy couvature in bulk and make chocolates. I usually bring them to events and conferences for funsies. I currently have cherry cordials, taro truffles, and candied orange peels in my cupboard.

                                                                Oh that sounds like a lot of fun. I didn’t think of that as a hobby, any tips for anyone who wants to get started as an amateur? Recommended books or websites?

                                                                (I would just like to try this once, sounds like a nice activity to do with a kid as well!)

                                                                1. 9

                                                                  I did a writeup here last time this question was asked!

                                                                  1. 1

                                                                    Thanks for the link and writeup!

                                                                2. 4

                                                                  Ever since @JordiGH mentioned knitting, I’ve been wanting to join ravelry and learn to knit. I have yet to start as well.

                                                                  1. 4

                                                                    Do it! Yarn and needles are cheap to buy at your local craft mart, so it’s low cost to learn and find out if you like it. Ravelry has lots of patterns for basic coasters, which are small enough learn on quickly and finish a project quickly.

                                                                  2. 3

                                                                    Time to start making your own chocolate then. I use a Premier Chocolate Refiner.

                                                                    1. 3

                                                                      knitting

                                                                      I love knitting, it keeps me sane. I have a pair of socks in my bag that have an easy pattern, so I have something to occupy my hands in meetings. And I work on more complex stuff in the evenings so my Youtube and Netflix downtime has something to show for itself.

                                                                    1. 7

                                                                      Besides programming: cycling, music (listening, going to concerts), reading (mostly news & commentaries), enjoying some good shows with my wife, cooking.

                                                                      I used to meditate, but somehow that got in a slump in recent years. But recreational cycling is something that I enjoy a lot. I recently moved from Germany to The Netherlands. In Germany I used to cycle an hour everyday (back and forth to work). I have to work that into my routine in a different way, now that I am too close to work. Though I did get a frame seat for our 4yo daughter last weekend. We went for a ride and she enjoyed it intensively, so we’ll do that more often ;).

                                                                      1. 5

                                                                        What values should a programming language’s standard library prioritize?

                                                                        This is a very valid question, but since it is based on what one values, there is no ‘correct’ answer.

                                                                        For me personally, Rust is already in the right ballpark performance-wise. So, I prefer correctness and readability. To me the standard library should (largely) be the place where one could look to see correct and idiomatic use of a language (though most standard libraries fail that test). Unfortunately, many parts of the Rust standard library are not very readable and use raw pointers and unsafe a lot. Of course, to some extend this is unavoidable, since you have to provide safe wrappers around raw memory somewhere.

                                                                        But I agree that this change is a risky optimization of a relatively niche function. Also, the function is not really necessary, since one can implement (perhaps less efficiently than the old String::repeat implementation, though it does use size hints) using iterators:

                                                                        https://play.rust-lang.org/?gist=1a36c52d1076ae11202594f124c83357&version=stable&mode=debug&edition=2015

                                                                        1. 7

                                                                          “I love my domain registrar.” Has anyone ever said this?

                                                                          Yes, because I use gandi.net

                                                                          1. 3

                                                                            I have been using Gandi more than 10 years and they are stellar. They contribute financially to free software projects, they are technically competent, and the two times I had to contact support they were extremely helpful. So, yes, I love my registrar.

                                                                            I have also used their VPS hosting for nearly a decade without any issues.

                                                                            1. 2

                                                                              Same! Gandi is amazing, no reservations at all. I very much love them and they have been absolutely a pleasure to do business with.

                                                                              1. 1

                                                                                Same but with Hover.

                                                                              1. [Comment removed by author]

                                                                                1. 7

                                                                                  If I find myself on a machine that doesn’t have my customized environment, my productivity drops and cognitive burden increases, as I try to remember how to do things the unaugmented way.

                                                                                  Emacs tramp-mode makes it pretty easy to edit files on remote machines using your local config.

                                                                                  I have to remember what I have installed and what I don’t.

                                                                                  Most Emacs users keep their dotfiles in git, which makes it pretty easy to ensure that you’ve got the exact same setup on every machine you use. (It’s a little more complicated if you use package.el because it defaults to just installing the latest version every time, which is why I use git subtrees for all my dependencies; helps guarantee you’ve always got the exact same setup every time.)

                                                                                  1. 1

                                                                                    Most Emacs users keep their dotfiles in git, which makes it pretty easy to ensure that you’ve got the exact same setup on every machine you use.

                                                                                    I doubt even 10% of Emacs users keep their dotfiles in git. Not to mention that it’s not exactly kosher to go downloading a repository of files onto every computer you happen to ssh into. My standards for what kind of code I allow myself to run and download and what kind of code I’d download onto an arbitrary production server are pretty different.

                                                                                    (It’s a little more complicated if you use package.el because it defaults to just installing the latest version every time, which is why I use git subtrees for all my dependencies; helps guarantee you’ve always got the exact same setup every time.)

                                                                                    Because every vim plugin I’ve come across was hosted in a git repository, I’ve switched to using git submodules for plugins. Only problem is that every time I go to clone my repository, I do a git clone, then remember I have forgotten the command to initialise all submodules, delete the clone, then clone again with --recurse-submodules.

                                                                                    It also means I can clone without submodules to just get my .vimrc if I just need to do something simple. Although to be honest, I can get back to 90% of my productivity just by switching ; and :.

                                                                                    1. 8

                                                                                      I doubt even 10% of Emacs users keep their dotfiles in git.

                                                                                      A bold claim. However, speculative.

                                                                                      Not to mention that it’s not exactly kosher to go downloading a repository of files onto every computer you happen to ssh into.

                                                                                      I think you’re misunderstanding how Emacs tramp-mode works. You can edit files over ssh just like you would on your local file system. No need to setup a remote Emacs config.

                                                                                      1. 1

                                                                                        A bold claim. However, speculative.

                                                                                        No, it’s not a bold claim, because it’s not a claim at all. On the other hand, ‘most Emacs users keep their dotfiles in git’ is a claim, and a very dubious one at that.

                                                                                        I think you’re misunderstanding how Emacs tramp-mode works. You can edit files over ssh just like you would on your local file system. No need to setup a remote Emacs config.

                                                                                        I wasn’t talking about tramp-mode. Obviously. I was talking about what I was directly responding to and what I directly quoted.

                                                                                        1. 4

                                                                                          I wasn’t talking about tramp-mode. Obviously. I was talking about what I was directly responding to and what I directly quoted.

                                                                                          I am quite sure that what @pab meant was that there is no need to to clone your dotfiles to every machine you ssh into, as long as you have tramp-mode at hand.

                                                                                      2. 3

                                                                                        I doubt even 10% of Emacs users keep their dotfiles in git.

                                                                                        I’m probably inclined to agree, when it comes to all Emacs users. It would probably be better to say that most modern and intermediate (or more advanced) users use git to manage their dotfiles (or just .emacs.d, in my case). Those using Emacs over 30 years probably already have a scheme and a strategy, and those still experimenting and learning will not find great value in using VC.

                                                                                        Not to mention that it’s not exactly kosher to go downloading a repository of files onto every computer you happen to ssh into.

                                                                                        I think that @technomancy is talking about workstations. As he mentioned, Emacs users use Tramp to connect to remote systems, while retaining their local configuration. At most, people usually use, eg mg instead of vi, but porting everything is usually not worth the effort.

                                                                                        1. 3

                                                                                          I doubt even 10% of Emacs users keep their dotfiles in git.

                                                                                          I don’t know about that. ~/.emacs.d/ has been a thing for many years now, and things like [Prelude}(https://github.com/bbatsov/prelude) & (I believe) spacemacs distribute themselves as git repos. Do more than 10% do this? I don’t know how I’d find out. But I think it’s common, and it is certainly useful to be able to roll back changes, merge them across work & personal machines &c.

                                                                                          Not to mention that it’s not exactly kosher to go downloading a repository of files onto every computer you happen to ssh into.

                                                                                          This is also common, e.g. with Oh My zsh, but note that with emacs one is far less likely to ssh into a remote machine and run emacs there: rather, one would just use TRAMP, e.g. to edit /ssh:remote-host:.config/foo/bar.

                                                                                          And of course an emacs user can do as you do, and jut schlep around a .emacs like you schlep around a .vimrc — but many (I hope more than 10%!) of us find a version-controlled repo is a better solution.

                                                                                          1. 0

                                                                                            But I think it’s common, and it is certainly useful to be able to roll back changes, merge them across work & personal machines &c.

                                                                                            There are of course many many version control systems that allow you to do all of this without being git.

                                                                                          2. 1

                                                                                            I do a git clone, then remember I have forgotten the command to initialise all submodules, delete the clone, then clone again with –recurse-submodules.

                                                                                            Why not run git submodule update --init?

                                                                                            1. 1

                                                                                              then remember I have forgotten the command to initialise all submodules

                                                                                              1. 2

                                                                                                Ah, sorry, I misread that as ‘forgotten to add the --recurse-submodules flag’.

                                                                                      1. 7
                                                                                        • Correcting homework projects (in Rust). Amazed by the quality of some of the submissions. These projects were relatively short time-wise, but that didn’t hold some students from implementing interesting machine-learning related projects, such as a small voice recognition system, spectral clustering, and neural net-based spell correctors.

                                                                                        • Preparing the first release of finalfrontier, a Rust package that implements training of word embeddings with the skip-gram model and subword embeddings (similar to fastText) and the structured skip-gram model (similar to wang2vec). One student is also working on dependency embeddings. (The project started out as small library to read fastText embeddings, so that I could easily use them in my Rust NLP projects, but I wanted some features that are currently not available in fastText, so I decided to implement training as well.)

                                                                                        • Contemplate more if I want to ‘host’ this project at GitHub, self-host with cgit (but losing some potential contributors, Travis CI, etc.), or some other place.

                                                                                        • Polishing a paper that I am co-author of.

                                                                                        • Packing up stuff at work, since we are moving to NL next week.

                                                                                        • Recently (private/home): picked build failures from the NixOS 18.09 branch, tried to fix them (new to Nix), and submitted some pull requests. It’s been fun and the Nix folks are very responsive! At least spaCy and some other ML projects should be working on 18.09 now ;).

                                                                                        1. 15

                                                                                          You just have to assume all proprietary software is collecting your data. Even reputable software often gets sold to someone else who will do evil with it.

                                                                                          1. 3

                                                                                            I agree, however, open source software does this sometimes as well. E.g. Homebrew uses Google Analytics by default to report what packages you are installing and the Zeal document browser includes an ad on the main page that is opened when the application is opened. Luckily, it will be disabled in a future version [1]. Visual Studio Code also collects usage data and uploads it to Microsoft.

                                                                                            Of course, the difference is that (with reproducible builds), we can know that FLOSS applications are collecting data. IMO distributions should proactively disable such data collection. Application-level spying should be stopped in its tracks before it is normalized.

                                                                                            [1] https://github.com/zealdocs/zeal/issues/779 [2] https://code.visualstudio.com/docs/supporting/FAQ#_how-to-disable-telemetry-reporting

                                                                                            1. 4

                                                                                              Yeah the knowledge is very important. Also the fact that the open source crowd has very little tolerance for opt out tracking. When Ubuntu was sending searches to Amazon there were non stop complaints about it until it became opt in.

                                                                                              Also the source version of visual studio has no tracking, only the prebuilt version does which is propriy. The source code has no tracking or branding.

                                                                                            2. 2

                                                                                              Exactly. It’s why I favor all mission-oriented organizations to be nonprofits or public benefit companies with data protection in charter, contracts, and licensing agreements. Might block or penalize the going rogue phase.

                                                                                            1. 8

                                                                                              I used DocBook for years. Among other things for writing the Slackware Linux Basics book [1], writing some chapters for the NetBSD guide, and writing documentation for Libranet Linux (paid).

                                                                                              The one thing that I really liked is the customization that you can do with XSL stylesheets. However, writing documentation in XML is such a dread (even with a decent editor) that I eventually stopped using DocBook completely. Oxygen XML made the experience somewhat more enjoyable, but still not great.

                                                                                              I have largely replaced DocBook by Markdown + pandoc. It is by no means as sophisticated as DocBook and for a large documentation project I would probably still recommend DocBook. But Markdown (and org-mode markup) are a hell lot easier and less dreadful to write. Of course, pandoc can convert to DocBook XML as well ;).

                                                                                              [1] https://rlworkman.net/howtos/slackbasics.pdf

                                                                                              1. 8

                                                                                                Markdown’s good enough for small documents, but if you have much structure to keep track of, AsciiDoc or ReStructuredText are better options, and still much more ergonomic than XML. For what it’s worth, Github README handles both of them (and org-mode) just as easily as markdown.

                                                                                                1. 2

                                                                                                  Our documentation stack is somewhat in-between, we use ReST + pandoc, the former being a little more powerful than markdown (while only slightly more complex to use). It’s pretty nice.

                                                                                                  1. 2

                                                                                                    After switching between markdown, textile and sphinx-flavoured rst, I start to long for an XML based markup language for writing my book.

                                                                                                  1. 17

                                                                                                    I have only recently started using Nix and NixOS (about two months ago). It’s one of those experiences where you are completely oblivious to something’s existence, but once you know it you wonder how you could have ever lived without. I started trying NixOS because of atomic updates/rollbacks and declarative system configuration, but discovered so many other nice features:

                                                                                                    • home-manager for declaratively managing your home directory with atomic updates/rollbacks.
                                                                                                    • nix-shell, which is like pyenv/rbenv/virtualenv but for any library/program in nixpkgs.
                                                                                                    • direnv + default.nix: automatically switch to environments by entering a directory.
                                                                                                    • An enormous number of up-to-date packages: https://repology.org/repository/nix_unstable
                                                                                                    • It is really easy to extend the package collection locally with overlays.
                                                                                                    • A really nice community: I encountered glitches with some packages. I tried to fix them, made pull requests. Received constructive feedback and generally polished changes are accepted within a couple of hours.
                                                                                                    • Support for (encrypted) ZFS on root.

                                                                                                    On my Linux machine, I now have a very slim NixOS installation with GNOME/Wayland and I install/manage the rest with home-manager. On my MacBook I now also use home-manager. My next project is to try nix-darwin (thanks @LnL7).

                                                                                                    (Jumping in does require some investment of time though.)

                                                                                                    1. 5
                                                                                                      • Insightful comments.
                                                                                                      • Higher ratio of technical links (as opposed to startup news, politics, etc.).
                                                                                                      • Small enough to recognize most names.
                                                                                                      • More tools to improve the experience (filtering tags, etc.).
                                                                                                      • Invitation system.