1. 7

    Rust just joined the ranks of Paxos and monads.

    1. 11

      Not quite. The title may refer to “easy english”, but what’s meant is the reduced linguistic subset often also called “simple” or “basic” English.

      “Paxos made simple” is not such a text.

      1. 3

        You mean the subset used in https://simple.wikipedia.org/wiki/Main_Page ?

        1. 3

          Yep, exactly that.

        2. 1

          often also called “simple” or “basic” English.

          Isn’t “Basic English” the name? Why are you putting it in quotes?

          1. 4

            Quotes for readability. Basic is the correct name, but e.g. the Wikipedia itself uses and lists simple as another way to refer to it (and has a “Simple English Wikipedia”).

            1. 4

              It would appear the word “basic” isn’t in the Basic English vocabulary (but “simple” is. And “base” - but I don’t think there’s a (grammar) rule to define/derive “basic” - except maybe the “use words from industry etc.” (special terms).

              So it would make sense that the Basic English term for Basic English is Simple English…

              1. 1

                Ha, that’s a great find!

        3. 11

          The borrow checker is like a burrito.

        1. 13

          It’s a little worrisome to me that people don’t see through this. It’s grammatically fine, but there is no conceptual power behind the words, which is a common problem (in different forms) with procedural generation algorithms. I would have hoped that readers expect, and can evaluate, coherence of writing beyond grammar. Maybe that’s overly optimistic.

          1. 26

            There are plenty of low-quality blog posts with no conceptual power behind their words.

            1. 4

              Can you imagine what the content marketing mills will do with this?

              1. 2

                Please don’t give them ideas; If I get a new story from Maupassant in my email, there is no way I am not going to read it.

                1. 1

                  They’re just replacing humans with robots, which has been the trend for decades in other industries.

                2. 3

                  I saw a tweet about jokes generated by GPT-3 being amazing, complete with a screenshot. When I clicked through I found Gwern’s tests. Nothing like what was implied. None of the examples in the screenshot were actual output.

                  It was the No Man’s Sky of joke writing. Semantically correct but an empty void when it came to humour.

                  1. 2

                    Yeah, I got about halfway through the generated post and then just started scrolling, which led me straight to the gotcha. I was completely bored and confused by what the ‘author’ was trying to say. Sure, it was largely grammatically coherent, but bits of it just flat out did not make sense in context. I was especially confused by the line ‘The forum also has many people I don’t like’, which I read about three times trying to work out why the ‘author’ had said that. There were several other bits that tripped me up because they just didn’t make contextual sense. While I could see this tool being useful for generating painting-by-numbers style sports reports and the like I’m not too worried about it putting actual writers with something to say out of a job.

                    1. 1

                      ‘The forum also has many people I don’t like’, which I read about three times trying to work out why the ‘author’ had said that.

                      That was my favorite part. I read it as the bot saying “There’s a lot of people I don’t like, and I’ll show everyone how dumb they are when they think a bot is being intelligent and funny.”

                    2. 1

                      It’s grammatically fine, but there is no conceptual power behind the words, which is a common problem (in different forms) with procedural generation algorithms.

                      And it’s a common problem in people too. Too many lost points on high-school essays…

                    1. 9

                      I unabashedly love it when things have “new” in their name that are 15 years old or older. This and newLISP are some favorite examples.

                      1. 7

                        “I went to New College at Oxford.”

                        “Oh, it’s new? When did it open?”


                        1. 6

                          It’s fascinating to me that we don’t actually know how old Oxford University is. The traditional ‘founding’ date of 1096 is actually just the first year we have records of teaching taking place.

                        2. 5

                          Or “yet another”, like YACC, when almost no one remembers what earlier compiler-compilers existed before it.

                          1. 3

                            Windows New Technology.

                          1. 10

                            A couple thousand people got screwed over several decades ago by the British Government for geopolitical reasons therefore you shouldn’t buy the .io TLD? I don’t think that’s reasonable. .io is a useful de-facto gTLD with explicit tech connotations unlike .xyz, and as stated in the articles linked through by the OP a proportion of its profits are reinvested in internet infrastructure. Some things are worthy of boycotting, but this is not one of them.

                            1. 44

                              There’s a difference between “I urge people to reconsider” and “You’re a moron if you do this”. The author did the former, not the latter.

                              Everyone is free to boycott what they want.

                              1. 15

                                I agree, the OP is perfectly free to boycott .io if they so choose. And I am perfectly free to say that I think it’s hand-wringing and an over-reaction. On a site like lobste.rs, which is rarely overtly political, a skimming reader might think that there is a good technical reason to not choose .io, which as far as I know is not the case.

                                1. 20

                                  And I am perfectly free to say that I think it’s hand-wringing and an over-reaction

                                  I won’t try and convince you otherwise :)

                                  might think that there is a good technical reason to not choose .io, which as far as I know is not the case

                                  Well….. [1]

                                  Also, the future of the TLD being uncertain due to these geopolitical issues is quite a technical reason not to choose .io [2] (I added an update about this to the post)

                                  [1] https://thehackerblog.com/the-io-error-taking-control-of-all-io-domains-with-a-targeted-registration/ [2] https://www.prolificlondon.co.uk/marketing-tech-news/tech-news/2019/05/future-popular-io-domains-question-over-british-empire-row

                                  1. 5

                                    That first link was an interesting read, thanks! Good thing I’m too tight to buy .io domains anyway :p

                                  2. 4

                                    There are technical reasons too: it’s a poorly run registry with bad record of nameserver uptime. The whole thing is held together with chewing gum and gaffer tape. I know this because of the “fun” I had going through ICB’s registrar accreditation process, where I spent most of the time getting them to fix bugs on their side.

                                    1. 3

                                      Wait, I’ve thought this whole time that lobste.rs was a political wing in Kosovo/Serbia! /s

                                  3. 42

                                    A couple thousand people got screwed over several decades ago

                                    Those people are still being screwed over, today. Denied their homeland, they are forced to remain stateless. Their buried dead lie in graves untended, their lands appropriated for CIA Black Sites and USAF weapons of mass destruction.

                                    .io is a useful de-facto gTLD

                                    It isn’t a gTLD, its a cock-a-mamey “ccTLD” run for the benefit of the same people who have stolen the Chagossians homeland.

                                    Some things are worthy of boycotting, but this is not one of them.

                                    What would be worthy of boycotting, O Sage of the Internet?

                                    1. 5

                                      I’m pretty sure tech firms have been treating it as essentially a gTLD for quite a while now.

                                      What would be worthy of boycotting

                                      China for atrocities against Uyghur Muslims, or Saudi Arabia for atrocities in Yemen. Nations and entities which have murdered people en-masse instead of just displacing them.

                                    2. 29

                                      A couple thousand people got screwed over several decades ago by the British Government for geopolitical reasons therefore you shouldn’t buy the .io TLD? I don’t think that’s reasonable.

                                      I’m surprised (perhaps disappointed) you don’t think that’s reasonable. I can’t think of many better reasons to boycott something. You say “a couple thousand people” as though that’s a number that should be treated as insignificant.

                                      1. 4

                                        You say “a couple thousand people” as though that’s a number that should be treated as insignificant.

                                        The suffering of one person is a tragedy, the suffering of “a couple thousand people” is a statistic, right? Considering how shady this whole thing is I think it is completely fair to just vote with your wallet and chose a different TLD at no inconvenience to yourself.

                                      2. 14

                                        A couple thousand people got screwed over several decades ago by the British Government for geopolitical reasons therefore you shouldn’t buy the .io TLD? I don’t think that’s reasonable

                                        You probably would revise your position if you were one of those couple thousand who had a foreign colonial government stealing your wealth.

                                        Beyond the problematic colonist mindset here, there are actual technical reasons, well documented at this point, and with a little google fu you can find quite a few horror stories.

                                        1. 12

                                          I don’t like using .io simply because it’s supposed to be a geography-specific domain. It’s abusing the spec to use it as a trendy tech domain, IMO.

                                          1. 10

                                            Well, there’s .tech, .computer, .systems. So why .io? Just because it means “input/output”? If I make a techy website, why do I need my domain to be associated with “input/output”? Also, few people outside tech will get the .io reference. To others, it’s just confusing.

                                            There’s also the “future of io” issue: https://www.prolificlondon.co.uk/marketing-tech-news/tech-news/2019/05/future-popular-io-domains-question-over-british-empire-row Who knows what will happen if the Mauritian government gets ownership of the TLD.

                                            1. 4

                                              The problem with long, unusual TLDs like those ones is that they don’t immediately parse as URLs when one reads them - in fact, less technical people may not even realize they are URLs at all (I accept this may be a feature not a bug :p). They also break a lot of field validators. You are to some extent right about non-technical people not associating IO with input/output - I think many consider the domain synonymous with those simple online multiplayer games in the vein of agar.io.

                                              Is there a better source for the claim that .io would pass to the Mauritians if the UK ceded the Chagos islands (which I doubt will happen, but that’s beside the point)? Cynically, I am inclined to think that this will not happen.

                                              1. 6

                                                Cynically, I am inclined to think that this will not happen.

                                                On your side of the fence as well. I’d like to see it happen, but… UK giving up a source of money like that?

                                                In the end, it’s risk assessment. If you feel your brand perception will improve by using .io and the chances of .io going “territory only” mode are slim, no one is stopping you.

                                                It’s difficult, but I’m trying to not to judge. What other people do with their domains is their business. I’m really only asking to take these issues into consideration when buying a domain.

                                            2. 3

                                              This is exactly the kind of libertarian nonsense that seems to plague lobsters these days.

                                              1. 5

                                                Nothing about his comment in any way pertains to libertarianism or libertarian philosophy.

                                            1. 2

                                              This will come in handy if I ever need to blackmail the Unicode Consortium :p

                                              1. 8

                                                Interesting. I have been having similar thoughts about error handling in my own current language project. Algebraic result types are awesome, but there needs to be a good way to solve the ‘Hadouken Problem’.

                                                1. 7

                                                  I love the name ‘Hadouken Problem’. I’m going to have to remember that one!

                                                  If you’re interested in some prior art, when designing try we mostly looked at Haskell’s <-, OCaml’s rebindable let*, Scala’s for, Rust’s ?, Swift’s try, Zig’s catch, Elixir’s with, and some of the proposals for error handling in Go 2.

                                                  1. 4

                                                    Why not a more general monad sequencing syntax, like Scala for? The same issue arises with options.

                                                    1. 5

                                                      A great question, thank you.

                                                      Scala’s for is made possible by interfaces, a feature that Gleam does not have. In future we may add some kind of interface-like polymorphism (such as traits) and then we can revisit try.

                                                      Another reason is that Gleam aims to be very simple, predictable, and conventional. Having monomorphic constructs in the langauge encourages users to all write similar code, which makes the language more easier to learn. We value approachability, productivity, and ease of adoption over conciseness or more exciting language features.

                                                      1. 2

                                                        All good reasons, and I applaud restraint in language features and syntax. I haven’t looked in detail at the docs, but presumably adding monadic interfaces similar to Scala’s option would be another way to solve the hadouken problem without new syntax.

                                                        1. 5

                                                          We do have a result.then function in the standard library (which is >>= in Haskell, but specialised to Result). It works nicely but can get quite verbose when depending on multiple previous results, so this syntax is a welcome addition.

                                                          I was lucky enough to be able to test out try with a junior developer and they found it much more understandable than result.then, which I took as a good omen.

                                                    2. 3

                                                      Have you had a chance to look into the way Frank and Unison do algebraic effects and handlers (Unison uses a strange term ‘ability’ for this)? The nice thing is that you can have multiple effects for different error cases, without needing to build up the error conversion machinery that you would need to do in Rust. The plumbing is also done in a more automatic way, without need for an explicit do/try/for*.

                                                      1. 1

                                                        I’ve not no. I did look in a few other places but I wasn’t able to get a good idea of how it worked in practice, so we opted to stick with what was familiar to us (Result/Either).

                                                        Sorry for the slow reply!

                                                    3. 2

                                                      just use goto ;)

                                                      function register()
                                                      	$msg = '';
                                                      	if (empty($_POST)) {
                                                      		goto err;
                                                      	} else if (!$_POST['user_name']) {
                                                      		$msg = 'Empty Username'
                                                      		goto err_msg;
                                                      	} else if (!$_POST['user_password_new']) {
                                                      		$msg = 'Empty Password';
                                                      		goto err_msg;
                                                      	} /* etc */
                                                      	$_SESSION['msg'] = 'You are now registered so please login';
                                                      	header('Location: ' . $_SERVER('PHP_SELF']);
                                                      	$_SESSION['msg'] = $msg;
                                                      1. 1

                                                        I agree. I’ve spent years using goto-less programming languages of all kinds and interestingly, I use goto rather often when I go back to C. Not only for the error handling pattern illustrated in your example but even for loops sometimes. Quite often, goto really makes sense where you would recurse in a functional programming language.

                                                        1. 1

                                                          Genuinely not the worst solution but I think 52 years after Dijkstra’s missive we can do a bit better :-)

                                                      1. 6

                                                        I recently installed Pop OS over the top of a broken old Ubuntu install and found it very pleasant. I think for the more casual computer user who wants an attractive, modern system, with support for gaming as good as one can get outside of Windows, it’s probably best-in-class.

                                                        As a brief stylistic point I would acronymise ’Tiling Window Manger as T.W.M. (with the dots) to avoid confusion with twm.

                                                        1. 10

                                                          Kind of amazing the progress this project is making. On the flip side I can’t help but wonder what is attracting people to it over Haiku. They’re both BSD licensed, both use C++. Both hark back to a similar era. Both GUI first. Haiku is arguably a lot more functional and further along though.

                                                          Some ideas that come to mind:

                                                          • I wouldn’t be surprised if at least part of it was that Serenity is on GitHub and uses a GitHub pull request workflow.
                                                          • Serenity looks easy to build and supports a wide range of build hosts (Linux, macOS, FreeBSD, OpenBSD).
                                                          • Being newer it’s easier for someone to just show up with an idea, implement it and have it accepted.
                                                          • Perhaps it appeals to a broader audience since it’s Windows inspired vs. BeOS.
                                                          1. 9

                                                            Once upon a time in the early/mid ’00s, there were a plethora of operating system projects that existed “just for the heck of it”, and most of them are essentially dead at this point for one reason or another. Haiku had a purpose that most of them did not: an unrealized vision of a better future for computing.

                                                            To me, at least, SerenityOS feels like a callback to those days when developers got together and learned something about computers and operating systems by building one. Which is ultimately pretty cool; but it’s a pipe dream to think you will be able to use it as your primary OS anytime soon. Most of the people working on SerenityOS seem to be doing it for the fun of it, which is great! Obviously Haiku has a ton of “solved problems” that SerenityOS, being newer, does not, and you can learn a ton by working on it.

                                                            But in terms of being a realistic possibility for a “daily driver”? Yeah, SerenityOS is years and years away from that. And at least when this project first made the rounds, I know some of the developers at least then said that they wanted to get there. That’s not a sentiment uncommon to new OS developers, but, well, Haiku has been around for two decades, and once made progress as rapidly and as impressively as SerenityOS, but as you can see, our install-base is still rather small, and people still have lists of things that we would need to do in order for them to make the jump.

                                                            It’s also worth noting here that SerenityOS has (or had?) a policy of not using any imported code whatsoever, even for things like ACPI, where Linux, *BSD, Haiku, etc. all use Intel’s ACPICA (and even the OSDev wiki recommends hobbyist OS developers do, too, simply because of how absurdly complicated ACPI is), or the libc, or the coreutils, or the shell, or any number of other things which Haiku et al. reuse from one another. That means that SerenityOS has a task ahead of it that is unbelievably massive even in comparison to Haiku, which uses the GNU coreutils, bash, musl’s libm, etc. and does not completely and totally re-create every wheel. Again, doing those things is an excellent way to learn; but it’s more or less incompatible with using the system as an actual daily driver.

                                                            1. 3

                                                              Linux, *BSD, Haiku, etc. all use Intel’s ACPICA

                                                              Except OpenBSD. They have to deal with some fun bugs due to their own implementation sometimes :)

                                                              1. 1

                                                                Inspired by this thread, I spent some time on the SerenityOS issue tracker. I am interested in a well-designed permissively licensed OS that is not written in C. I was not convinced that SerenityOS is going to be that system.

                                                                It currently targets x86-32 and has a single userspace ABI. Adding good layering for these with a clean set of abstractions is really hard to get right and causes massive pain later on if you don’t. Their approach is to just incrementally refactor to get x86-64 support, without thinking about a final design. Once you have two architectures supported, cleaning up the abstractions is hard because your testing burden is high. Once you have three, your mistakes are basically baked in forever.

                                                                The BSD family was quite lucky here, because the VAX port required them to think hard about these abstractions, get them wrong, and then copy the ones that Mach built based on their experience. Linux was less fortunate and so ended up with a split between architecture-specific and architecture-agnostic code that is quite painful in some places (for example, system call numbers are architecture specific, managing signal delivery for the product of architecture and ABI is quite ugly).

                                                              2. 11

                                                                I’ve played a lot with Serenity and made a couple of modest contributions. I have also played about with Haiku a little bit. For me, I was more attracted to the former, for a few reasons. Firstly, the GUI is much nicer - it’s almost exactly what I want in a classic style desktop environment, and makes me feel a little nostalgic for the Windows interfaces on which I learnt to use computers. For the most part I find Haiku’s interface to be a little ugly - although I do love the boot screen! Secondly, Serenity is a clean sheet design - built in a thoroughly modern way simply in accordance with the intuition of Andreas and the other developers, rather than in an attempt to cling on to compatability with an obscure OS that was dead before I was even old enough to use a computer. Thirdly - and this is mostly as a consequence of Andreas’ videos - Serenity felt to me like a system that was alive and blossoming, that I could jump into and make a difference to, while Haiku seemed to me an anachronism kept alive by a cabal of mysterious maintainers who refuse to let go of the past. I’m sure that’s not the case, and that Haiku’s community is welcoming and forward thinking, but it’s hard to be inspired into lending a hand by simply seeing a new set of patch notes every two years.

                                                                TL;DR - Haiku is clinging to the past while Serenity is taking interfaces of the past back to the future.

                                                                1. 13

                                                                  For the most part I find Haiku’s interface to be a little ugly

                                                                  If you are speaking purely of the “look and feel” of Haiku, why not just write a Windows “Decorator” (window border styling) and “Control Look” (control theming)? You could get almost a pixel-perfect recreation of the Serenity GUI on Haiku. We personally just like the way Haiku looks now, but anyone can customize it!

                                                                  rather than in an attempt to cling on to compatability with an obscure OS that was dead before I was even old enough to use a computer.

                                                                  I think you will find that we are more modern-minded than even Linux in terms of how the system is put together. Maybe not quite as modern-minded as Serenity, but the Be origins have not constrained us. The package filesystem is proof enough of that, as are the use of C++ in the kernel and quite a lot of other things under the hood.

                                                                  while Haiku seemed to me an anachronism kept alive by a cabal of mysterious maintainers who refuse to let go of the past

                                                                  Dude, when I started contributing to Haiku the better part of a decade ago, I was in high school. We’re not all (or even at this point, mostly) “old geezers”. We have forums, an IRC channel, mailing lists, a bug tracker, and it is pretty easy to see who we are; and our technical decisions are pretty good proof that we absolutely know how to let go of the past.

                                                                  but it’s hard to be inspired into lending a hand by simply seeing a new set of patch notes every two years.

                                                                  We’ve been publishing monthly Activity Reports on the blog detailing what’s been going on in the Haikusphere for multiple years now, and new software (and screenshots) appear in the Depot on a weekly basis.

                                                                  1. 4

                                                                    If you are speaking purely of the “look and feel” of Haiku…

                                                                    My impressions are naturally, if unfairly, formed off what the system looks like in its default state, not what could be achieved with a weekend’s worth of programming.

                                                                    I think you will find that we are more modern-minded than even Linux…

                                                                    Fair enough. I always got the sense skimming through the project that it was a bit tied down by its adherence to BeOS but I happy to be wrong on this point.

                                                                    We’re not all (or even at this point, mostly) “old geezers”.

                                                                    Again, I don’t doubt you’re right, but the impression I got of the community was of a very old project, and the assumption I made from that was that it would be quite set in its ways. Perhaps I am completely wrong about that.

                                                                    We’ve been publishing monthly Activity Reports on the blog

                                                                    Like most people, the honest truth is that with the exception of a few blogs that I go out of my way to check, I only really see what bubbles up on HN, lobsters, Reddit, /g/, etc. Hence my exposure to Haiku is pretty limited.

                                                                    I really don’t want my original post to be interpreted as ‘this is why Serenity is better than Haiku’. My intention was to rather explain ‘this is why a bored student browsing the techy parts of the internet might be more drawn to Serenity than to Haiku’. I have a great deal of respect for your project and your comments in this thread have inspired me to perhaps check in on it with a little more regularity :-)

                                                                    1. 2

                                                                      The website indeed could use a refresh with more information as to what we do and what we are about, sure. But, I mean, if you go look at Fedora or Ubuntu or something, are their websites really that much more engaging as to getting involved with the project? Not really. So it’s a hard balance to find for us; because on one hand we are initially if not ultimately targeting the same market the “Linux Desktop” is, while we have a fraction of both the volunteers or the financial support they do.

                                                                      1. 1

                                                                        It’s perhaps natural, then, that hobbyists with a bit of time on their hands are more likely to feel able to get stuck in with a GitHub project which features, front-and-centre, a YouTube channel of a guy making near-daily coding logs, rather than something like Haiku, which - to its credit - looks far more like a professional endeavour than an amateur collective’s labour-of-love.

                                                                        1. 1

                                                                          Well, the “ports” portion of the Haiku project lives on GitHub, and there is a GitHub mirror of the main repository with a very friendly README.

                                                                          Yes, we are more focused on actually getting development done in what precious little spare time we have than making YouTube video logs about it. But Kyle Ambroff-Kao, one of the newer names (he was granted commit access last month :) has started doing development screencasts, so maybe some of us do have the time…

                                                                  2. 7

                                                                    I’m not sure I completely agree with some of your characterisation of Haiku but I get your point.

                                                                    and makes me feel a little nostalgic for the Windows interfaces on which I learnt to use computers. For the most part I find Haiku’s interface to be a little ugly

                                                                    It’s funny, I grew up on Mac OS and consider classic Windows supremely ugly. To me Haiku (or Platinum Mac OS) is my ideal classic vibe. So, for me the appearance of SerenityOS puts me off a little, I guess in the same way Haiku might for you. :)

                                                                    Anyway, thanks for responding. It seems my intuition might be on the right track. I’m interested to watch how the project progresses.

                                                                    1. 3

                                                                      From its home page, SerenityOS’s key selling point seems to be it’s “a love letter to ’90s user interfaces” … something I don’t grok at all, the 90s being that awkward age of “wow, if we color the top and left edge darker and the bottom and right lighter. It looks like it’s inset!!” in GUI design. But at least they’re not aping Motif…

                                                                      And this matters, because all those sharp contrasts and hard lines create a ton of visual noise that makes it hard to parse the interface and focus on the important stuff. I freely admit today’s GUIs have their problems and silly fads, but they’re so much better.

                                                                      Behind the GUI, I don’t see the website describing any new and different architecture that would entice me to work on this, or pick it for a desktop over a stable Linus or BSD distro.

                                                                      tl;dr: You damn kids and your “retro” stuff! You don’t know how much better you have it now than in the old days. Now turn off that “vaporwave” and get off my lawn!

                                                                      1. 2

                                                                        I am completely willing to put my hands up in the air and say that my impressions of Haiku are just that - my impressions - formed from the collective sum of the few times I’ve seen the project pop up on aggregator sites and an hour and a half playing with an ISO in qemu. That is to say, I am in no way qualified to make reasonable assertions about the Haiku project, either technically or with regards to its community. At the end of the day, Serenity just captured my imagination more than Haiku, and that’s what ultimately matters when it comes to deciding whose codebase to spend your afternoon trawling through.

                                                                  1. 1

                                                                    Is anyone trying to port rust on Serenity? Maybe we can assemble a working group. I can’t wait to port my projects on Serenity

                                                                    1. 2

                                                                      It’s something I’ve thought about. I don’t need another side project right now but I would be interested to see if someone made progress on this.

                                                                      1. 1

                                                                        I don’t need another side project right now

                                                                        Me too, but I probably could do stuff as part of a group. Perhaps there can be an easy but hacky enough solution in cross-compilation, how is Serenity’s libc POSIX compliance?

                                                                        1. 2

                                                                          I think it’s pretty compliant. For reference, here are the patches that had to be made to get a version of Python sorta-working:


                                                                    1. 21

                                                                      I often find, even when I’m interested in a subject I end up procrastinating all day instead of doing it.

                                                                      I have some form of background anxiety that prevents me from starting; maybe the scope is too big, or I worry about interruptions.

                                                                      Eitherway; the key piece of advice I shamelessly stole from Tom Limmoncelli’s book “Time Management for Systems Administrators” was to write down the first thing you will do the next day. Before anything else except the essential morning rituals (brush teeth, make coffee, do not check emails) and when I follow this advice I am generally more productive the whole day.

                                                                      If you find a subject thoroughly boring though, I don’t think any advice is really going to help.

                                                                      1. 7

                                                                        I also often find myself procrastinating. I started the Bullet Journal Method, and it kind of helps. In the morning I plan what need to be done, and at the end of the day I can review the progress/achievements I had.

                                                                        Pair programming always helps to get the nastiest work get done. Just need some mental support to get started on the really crap parts, or talk it over, to create a mental path through the unwanted parts. Also when doing research having someone who I can talk the progress of 2-8 hours of research over helps a lot.

                                                                        For me the positive feedback is needed to get up to speed and get into flow, or to provide reward after the hard work. In remote work this is not that trivial, while in the office when I was leading a team I always made sure my teammates got positive feedback from me, and they also instinctively provided it for me, and others, or help, if that was needed. I really miss the natural meta-communication present if personal meetings.

                                                                        1. 5

                                                                          Anxiety is the #1 problem for me. It’s so difficult to concentrate and get ‘in the zone’ when the project, company, or personal life seem in chaos. The global pandemic has been a real issue for me personally, even though I shut out all news, take breaks, exercise, etc. I have no idea if I am normal or some kind of bad dev :shrug emoji:.

                                                                          1. 5

                                                                            Anxiety definitely affects my ability to focus too. Sometimes I find that just taking the first small step helps, because often my anxiety is overblown, and even when my fears were accurate, action makes them less scary. Ymmv.

                                                                          2. 5

                                                                            Structured Procrastination can be an effective strategy for people like us.

                                                                            anyone can do any amount of work, provided it isn’t the work he is supposed to be doing at that moment

                                                                            The trick is to find some bigger, nastier task that you ought to be doing, and work on your smaller goals as a means of procrastinating on the big one.

                                                                            1. 6

                                                                              It’s a pretty delightful read, but I think on balance I’d rather focus on improving rather than outwitting my foibles.

                                                                            2. 2

                                                                              If you find a subject thoroughly boring though, I don’t think any advice is really going to help.

                                                                              But what do you do when you have to get the task done? Quit your job? Pay someone else to do it? Beg a teammate?

                                                                              1. 9

                                                                                Personal approaches: go for a quick walk, nothing long 10-15 minutes to clear your mind. On the way back pick the least bit of work you can think of to start. When you get in just start doing it.

                                                                                Or I do some push ups/jumping jacks/burpees/whatever just to get my body/brain into its time to do something mode and then start work.

                                                                                I find personally that just getting started tends to be my problem so this tactic tends to yield good benefits. To each their own.

                                                                                Or you might like my Grandpa’s view on things, he grew up through the Great Depression. Nobody likes cleaning the toilet, but if nobody does it it will never get done so you have to buck up and just get it done.

                                                                                1. 2

                                                                                  I find personally that just getting started tends to be my problem

                                                                                  Same here. The Pomodoro technique helps me start.

                                                                            1. 4

                                                                              Cool, but also pegs my CPU to >80%. Not really something I am inclined to leave running for that reason.

                                                                              1. 2


                                                                                Found this site some time ago. It can be helpful for you.

                                                                                1. 6

                                                                                  Not sure why this would be their first port of call when it essentially covers what they’ve just studied in their degree.

                                                                                  1. 1

                                                                                    Studying it once isn’t enough to act natural when pretending you didn’t memorize your whiteboard questions. Gotta hit that leetcode.com too.

                                                                                    1. 2

                                                                                      Cheers you’ve just reminded me why I have no inclination to throw myself into the big tech meat grinder when I graduate.

                                                                                      1. 2

                                                                                        OK, upon hearing you haven’t graduated yet, I’ll amend my first statement.

                                                                                        I may be exaggerating. I’m a person who has A) done (and failed) at least 50 leetcode-style whiteboard interviews, B) had (so far in ~7 years) rewarding jobs without leetcode interviews, where I had good coworkers and learned lots.

                                                                                        Maybe by the 20th time I had to draw a graph or binary tree in a Google doc (like actually typing out symbols like A—–B—–C to draw edges and vertices) to answer a network flow question in 30 min over a scratchy phone line while “vocalizing my thought process”, it got pretty old.

                                                                                        I know a common feel-good statement around leetcode is that you’ll only get them when you’re trying to get into the best of the best. That’s a joke too, leetcode will surprise you anywhere and everywhere. I’ve had the most absurd questions for run of the mill “DevOps Engineer” jobs at companies that were most definitely not big tech (or even close).

                                                                                        tl;dr: fuck leetcode, hate leetcode, but study leetcode. Just in case

                                                                                        1. 1

                                                                                          I’ve been working as a developer for six years, I’ve probably interviewed with 20 companies across a few job hunts. I only had to whiteboard a few times and it was always about architecture rather than algorithms.

                                                                                          Granted I haven’t interviewed with any of the biggest name brand companies, but it’s definitely not a common phenomena for your average interview in my experience.

                                                                                          Most interviewers are aware of the “invert a b-tree on a whiteboard” meme, those who persist don’t have many excuses.

                                                                                  1. 9

                                                                                    This is essentially the same argument that Tom Scott made in his video ‘The Art of the Bodge’ [1]. I remain sceptical that better solutions could not be achieved in Linux, but at the end of the day it’s about what tools work for you.

                                                                                    [1] https://www.youtube.com/watch?v=lIFE7h3m40U

                                                                                    1. 2

                                                                                      That was a fantastic listen and you should submit it as an actual article.

                                                                                      1. 2

                                                                                        It was a great video. I can relate to the why’s and benefits of bodging.

                                                                                        Although, I have to say that bodging the safety-critical situation they did the way they did was the most opposite of all high-assurance principles I’ve seen in production in a while. Glad it worked out. I’d have probably drawn the bodging line there switching to cheap and lazy approaches that were extra careful.

                                                                                        1. 3

                                                                                          one of my more.. dubious of bodgings with durden went something like this:

                                                                                          /global/settings/timers/periodic/add=yeah:1=/global/display/region/ocr=0,0,300,100 /global/settings/timers/periodic/add=dont:60=/windows/group/remote/clipboard/paste

                                                                                          now, hypothetically, there might have been an RSA SecureID token hanging in front of a webcam ..

                                                                                      2. 2

                                                                                        I expect the lack of a standard GUI API on Linux would make something like AutoHotKey more difficult to achieve. AHK relies a lot on low level aspects of the Windows API to select windows, activate them, send them messages, send keys, read the clipboard, etc. I would think that would be more complex to do in Linux.

                                                                                      1. 8

                                                                                        Wasn’t the consensus that “regular” (non-release) sourcehut posts are just advertising? Or has that changed, because @ignaloidas seems to have been posting a lot of their content recently.

                                                                                        1. 22

                                                                                          Clearly this was of interest since it was voted to the top of the site. There’s also interesting technical detail in here. I am a bit of a DeVault fanboy but tbh I think this is better content than a lot of the personal blog posts that get submitted here.

                                                                                          1. 6

                                                                                            There’s also interesting technical detail in here.

                                                                                            Fair enough, I just don’t think every announcement should be reposted here.

                                                                                        1. 12

                                                                                          Thanks for posting this @wesleyac. I’ve been experimenting with this a lot lately and I’m starting to feel that a lot of complexity in software is down to trying to be reusable instead of reditable or recombinable. Eg I mentioned in another comment that last year I replaced anki with my own spaced repetition app and the code ended up smaller than my anki configuration. If anki had instead been written as a collection of loosely-linked functions that you glue together to make your own main function I believe it would be a much simpler codebase and it would be much easier to change it’s behavior, because:

                                                                                          • they wouldn’t have to try to anticipate all the changes that any user might want to make
                                                                                          • they wouldn’t have to reason about all the combinations of all possible configurations and how they interact
                                                                                          • writing code as code is much easier than writing code as config files and templates.

                                                                                          Trying to think of examples of editable software:

                                                                                          • The bitsquid game engine shipped as a collection of libraries and a ~300loc lua script that glued them together. So rather than having a configuration mechanism you just edited the glue script. I can’t find where they wrote about that decision, but ‘managing coupling’ has some related thinking.
                                                                                          • Xmonad is similar - it’s a library and you have to write your own main function to use it as a window manager.
                                                                                          • Emacs has some examples of this - while a lot of packages provide explicit extension points, it’s also really easy to just copy and edit a single function in your own init without having to fork the original. I often use that to fix minor bugs or to change behavior that isn’t configurable.
                                                                                          • Excel/airtable/etc have a culture of providing templates which you edit to customize, rather than trying to build customization points into an otherwise immutable ‘library’ spreadsheet.

                                                                                          Casey Muratori’s post about complexity and granularity also seems very relevant here. Money-quote:

                                                                                          Suppose that I’d made Panel_Layout’s data entirely private and didn’t support any way of querying anything in it. In that case, you would be forced to either use or not use Panel_Layout for everything in a panel. So if you’d done all your buttons with push_button() and the modified toggle-boolean push_button(), then got to a button that couldn’t use one of those, you’d literally be forced to rewrite the entire panel using the low-level UI calls!

                                                                                          It is always important to avoid granularity discontinuities, but fortunately, it is really easy to do if you just remember a simple rule of thumb: never supply a higher-level function that can’t be trivially replaced by a few lower-level functions that do the same thing.

                                                                                          I think the sweet spot here might be shipping simple granular libraries that cover the 80% case along with a default example of how to glue them together, rather than shipping a monolithic app with a configuration file that inevitably tends towards Turing-complete.

                                                                                          When libraries are written in a granular way, it’s easy to inline functions into your own project and edit them without having to maintain a large diff over the original library. But we don’t seem to have much cultural experience with writing libraries in this way so I’m constantly stumbling over my own broken habits when I try.

                                                                                          One good example is microui which I’ve found very easy to alter and extend without having to fork the original code, because it offers layered access to all of it’s internals. Most libraries want to enforce hiding of their internal implementation details which means you can’t add new functionality without forking them.

                                                                                          1. 2

                                                                                            Have you found that this approach leads to a higher learning curve? I can’t say that I’ve tried any of the programs in question, but I know if the first thing I had to do to use a window manager was write a glue script, it’d make it harder to get started

                                                                                            1. 1

                                                                                              I think all of the projects above ship with an example that has reasonable settings and then you tweak it from there.

                                                                                              It does require that you figure out how to compile the thing though. Nix/guix make that a lot easier which is why I’m so interested in them.

                                                                                              1. 0

                                                                                                I know if the first thing I had to do to use a window manager was write a glue script, it’d make it harder to get started

                                                                                                I don’t use XMonad but I would guess this is a feature not a bug insofar as I expect that they take a suckless-esque stance of mild hostility towards less technical users.

                                                                                                1. 1

                                                                                                  It’s possible to configure a lot of XMonad without knowing Haskell. It’s not particularly fun though. In my case I took some else’s config and modified it, which gave me 90% - but I failed to implement a simple layout that didn’t exist. Was a thing of 10 minutes for someone who knows Haskell.

                                                                                            1. 1

                                                                                              I don’t get the value proposition of parser generators. They don’t seem that much easier than just rolling your own recursive descent parser and with the homegrown option you have full flexibility over error messages, recovery, etc.

                                                                                              1. 4

                                                                                                Formal grammars are typically easier to read and understand. Eg we have a recursive descent parser for SQL at work and the parser alone is ~3kloc with ~7kloc of supporting code.

                                                                                                This is especially important for multiple implementations of the same standard, where you really want to be sure whether something is an intended part of the syntax or a quirk of the implementation. For a new language project I would go for:

                                                                                                • a hand-written recursive descent parser that is used in production
                                                                                                • a formal grammar that is included in the documentation / language spec
                                                                                                • randomized tests that compare the two for differences
                                                                                              1. 1

                                                                                                Not a sysadmin so only have my own machines to deal with. I go with famous corners from the Nordschleife racetrack. I have flugplatz, adenauer, and bergwerk.

                                                                                                1. 54

                                                                                                  Okay, okay, that’s technically off-topic, but…

                                                                                                  Can we talk about the awesome project name?

                                                                                                  1. 39

                                                                                                    It’s cool on two levels because ores are often oxides.

                                                                                                    1. 8

                                                                                                      It’s a masterpiece! I love this level of creativeness, especially nowadays when everyone slaps an “.io” or “d” at the end of their projects’ names.

                                                                                                  1. 2

                                                                                                    That’s really cool. Next step: someone get Sway/wlroots running on the Serenity kernel!