1. 5

    This is the first thing I think about when I see .io:

    Stolen island and given to the US Army to use as an airfield.

    Glad to see this article. Thanks

    1. 1

      I’d love to be able to host a mail list that is assigned to a group, rather than a project under my own username.

      So far this features has been in the backlog. With this new release, I hope to finally see this feature addressed.


      1. 26

        I find the ‘I need to edit in a web browser’ argument pretty weak.

        I run a static website. It’s repository is currently hosted on GitLab GitLab has a web interface to edit files. Changes are automatically tested and pushed to the public through CI. And best of all, as I use markdown I usually prefer to edit in Vim, but I can use a million other tools if I’d like.

        I’m not too sure about this workflow on an iPad, but I’m sure it isn’t as bad as the article author states for a static website.

        1. 15

          GitHub also allows you to edit, preview, and commit directly from their web UI. So no, I don’t buy the argument either.

          1. 5

            If he really wanted the pragmatic approach on iPad, he could’ve used Working Copy app, which allows you to edit your code and push it up to your Git repo. Then at this point he could have the setup that is described above, where it’s all automated.

            1. 3

              Another aspect that’s important with a setup like this is having a deploy pipeline keyed off changes to the master branch.

              Between github/gitlab webui PR authorship, and circleci deploying the changes, we don’t need a webui either for our static blogs.

              1. 2

                does GitHub have CI pipelines? because you would need to create a CI pipeline to deploy changes from your repo to production in order for the web UI to be usable for this use case.

                1. 3

                  I don’t use their CI, but apparently yes they do have this.

                  For a team blog I’m working on at the moment, I’m using GitHub’s GitHub Pages mechanisms to automatically deploy whatever is on the gh-pages branch of the blog’s repository. It’s free, it’s easy, and it works.

                  1. 1

                    Yeah, it’s not as robust as GitLab’s but is fairly easy to set up. I was able to go from never using actions to having a commit trigger build and FTP everything over in about two hours [0] and most of that was figuring out sftp command line quirks between Mac, Ubuntu and my host.

                    [0] http://prepend.com/setup/2019/12/figuring-out-actions.html

                  2. 1

                    I was able to teach a retired journalist to use this workflow (and Markdown) without much trouble. The website was simple, he had a lot of time on his hands, and he was eager to learn.

                  3. 10

                    Agreed, compared to that workflow my argument in regards to using a web browser is weakened. I’ll edit the post to reflect that. Thanks for the feedback.

                    1. 8

                      I think there is still an important point in that argument. The only alternatives that have been presented have been ad-hoc solutions like a headless CMS – yet another separate component that you need to setup – or GitHub/GitLab’s in-browser editing – yet another external service that you need to rely on. With an actual CMS like WordPress, you have a single consistent interface that you can totally own and control yourself.

                      1. 1

                        That’s true, thanks.

                    2. 5

                      I don’t think this is an easy option for everyone. You still have to know a thing or two about git, github/gitlab, and continuous integration. It might be easy for you, but it’s not easy for everyone. You wouldn’t need to learn an insane amount of stuff, but I imagine it’s still more work than using WordPress.

                    1. 1

                      He mentions Java briefly in the article, but doesn’t go on to explain the setup for it.

                      If you use FreeBSD, what version of JVM do you use and are you using some exotic setup or just installing from ports? Thanks

                      1. 2

                        OpenJDK as recent as 12 is available in the ports tree.

                      1. 2

                        I fondly look back on the time I wrote a small clojure script project about 6 years ago I believe. I don’t know if mom was a thing back then but certainly cljs did offer a lot of infrastructure for programming that I was used to.

                        Three was an active eco system of libraries to choose from.

                        I looked at cljs two years ago. The eco system felt atrophied. I was constantly researching what library was maintained and mature.

                        1. 1

                          I looked at cljs two years ago. The eco system felt atrophied. I was constantly researching what library was maintained and mature.

                          Is that because your perception is based on some other ecosystem where high commit churn and lots of new features signify progress?

                          Because if you use this metric, then sure, you can get that impression.

                          But if you need the libraries to get the job done, ClojureScript is pretty stable and useful.

                        1. 8

                          Day One is excellent generally, although I am not sure if you need a subscription now in order to sync between different devices. They do have an Android app though.

                          1. 3

                            DayOne was nice, but my issue with it was that your data is pretty much locked in. I think there are export options but no way to say access it from my Linux box etc.

                            I ended up with Evernote.

                            1. 3

                              Nice looking app. I used it and they upgraded the app. Requiring you to buy the upgrade and locking you out of your existing notes.

                              If you don’t mind having your data held hostage, sure. But otherwise, stick with plain text. Guaranteed to stand the test of time.

                              1. 2

                                As far as I know, even when they’ve upgraded the app, you’re allowed read only access to your data - and the main thing a subscription gets you is sync… you can still export when sync is disabled.

                                1. 3

                                  Sure, there are ways… But it wasn’t like the app was free in the first place.

                                  Using beorg now. It’s cool. Has even built in Scheme allowing you to script the app (via BiwaScheme). Which you can also tap into via in-app REPL.

                                  1. 2

                                    That’s pretty cool - it’s the best looking org-mode client on iOS I’ve seen… to be honest, that’s been my main issue. org-mode is fine for the desktop where you have a full emacs instance but once you’re working from a mobile device, it loses most functionality.

                                    As opposed to something like Day One which was designed with it in mind. I’d love to see a more full featured solution which works as well as Day One on mobile.

                            1. 13

                              listen to everything and ignore 90% of it

                              This is probably good advice. I’ll apply it to this article.

                              1. Avoid comments.

                              This varies heavily by language. If the language features documentation strings, as Common Lisp does, then it’s fine advice and that’s how I operate; if it lacks them but still has many first-class structures for documenting intent and whatnot, such as Ada, then I’ll write less comments, but perhaps one or two where I think it’s fine.

                              It’s just my preference, but I’ve never been fond of names such as getUserAndAPITokenFromLocalStorage and would rather read the comments, but I’d rather avoid reading JavaScript at all, so this could be seen as a superfluous aside.

                              1. “Never use a plugin you would not be able to write yourself.” (credit to Jamis Buck).

                              I don’t see any issue with this advice, amusingly. This seems like programmer common sense, perhaps, or should be. I’d prefer to use libraries for what I don’t want to write, not what I can’t, such as implementing a complex protocol I need to interact with but don’t otherwise care about.

                              1. Use simple tools.

                              Without any malice, this is the worst advice in the article and I vehemently oppose telling new programmers this. Ostensibly, the computer is a machine that is to reduce work on the human and aid in tasks; this advice runs counter to that. Firstly, Emacs is just one tool that enables one to use a remote machine with local tools with its Tramp mode; there are undoubtedly others. Secondly, I’m of the opinion that a programmer can and should gradually replace tools they use with ones they’ve written themselves, although I understand others would see differently. I’m doing this in my own way, gradually, but at least I’m making some progress.

                              I don’t in any way support the idea that whatever dumbassery the UNIX or Microsoft gods decided decades ago is the baseline and anything on top of that is superfluous. That is stagnation. That is awful.

                              About 10 years ago, I remapped Caps Lock to Ctrl on my keyboard. I like that position so much better. Now I can’t use anyone else’s computer without either getting frustrated or going into their settings and remapping the keys on their computer. Is my enjoyment worth this? Probably not.

                              Is this a work machine you’re using for hours every day or a toy? Would, in any other setting, a professional who spends years or decades of his life doing something be faulted for customizing his tools to work best for him and remove strain or friction?

                              I suggest one reads what Erik Naggum had to write about this general idea: https://www.xach.com/naggum/articles/3065048088243385@naggum.no.html

                              1. Working code is good code.

                              I’d argue that working isn’t the only qualification for good code. Good code is eventually finished and requires no further changes to accomplish its purpose elegantly.

                              1. Don’t be afraid to delete code.

                              I have no argument here, really.

                              1. Prefer data.

                              This isn’t bad advice, with how it’s phrased. I suppose I would’ve used this: ``Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won’t usually need your flowcharts; they’ll be obvious.’’ –Fred Brooks

                              1. Always do the hard thing.

                              To me, this is the most original advice in the article, but perhaps I’m simply differently read. I’d be wary of a system that is poor at the outlook, though, such as tens of thousands of lines of some poor language, or really tens of thousands of lines of anything.

                              This sums my thoughts on the article; perhaps someone will find this a pleasant read on its own or a good critique. I’d be glad for my articles I submit here to receive the same attention, certainly.

                              1. 3

                                “Never use a plugin you would not be able to write yourself.” (credit to Jamis Buck).

                                I don’t see any issue with this advice, amusingly. This seems like programmer common sense, perhaps, or should be. I’d prefer to use libraries for what I don’t want to write, not what I can’t, such as implementing a complex protocol I need to interact with but don’t otherwise care about.

                                This literally goes against human nature, this recent Human Brian podcast[0] explores why humans depend on others before them to solve/understand things that they can build upon.

                                My immediate reaction to this comment though was: if you wanted to make a new car seat, would you (or do you need to) know how to make the engine, frame, wheels, etc? I would argue “no”, and that depending on systems you don’t understand is nominally ok. Another silly example: I depend on my local grocery store to sell me food, without me knowing about how to make most of it myself..

                                1. https://www.npr.org/2019/01/11/684435633/how-science-spreads-smallpox-stomach-ulcers-and-the-vegetable-lamb-of-tartary
                                1. 2

                                  To “be able to write something yourself” covers a very wide range of possibilities. Do I need to be able to write it myself in a reasonable timeframe? Do I have to already have the knowledge to write it now, or can I take time to study it when I actually need to write it? Given enough time, I should be able to learn most things, so that would actually rule very little out.

                                  I think a more useful focus is “Can I fix problems in a dependency if I discover them?”. For me, this means preferring open source dependencies, as without the source you are at the mercy of the vendor (who may cease to exist). It also means preferring dependencies with simple, well designed code, which I should be able to understand with a little studying, but without necessarily having to have the expertise right now.

                                2. 2

                                  I really appreciate your thoughts, even though we’re likely to disagree on many things. I only want to reply to one thing – about the keyboard. I remapped Caps Lock to Ctrl on every machine I use, including my work machine I use for hours each day. If I could go back 10 years and tell myself not to, I would. I use other people’s computers a lot more than most people, though; I pair-program with students on their computers all the time.

                                  I really like your opinion that programmers should replace tools with ones they’ve written themselves. It’s bold and solid advice.

                                  1. 5

                                    I pair-program with students on their computers all the time

                                    Yeah, that’s a bit of a special case. I use other people’s computers… approximately never, so I’m very happy with the Colemak layout and a CapsLock that acts as both Ctrl and Escape and shifts that act as parens on their own.

                                  2. 1

                                    Upon reading blog post’s point 3. I got the “somebody is wrong on the Internet” rash.

                                    Thank you for posting a soothing response, I lathered it in generously.

                                    1. 1

                                      You are right about 3.

                                      If we would not progress with the tools the recommendation would still be “use sh instead of the fancy korn shell or crazy bash”.

                                      The key is - as always - balance. Be careful about the bleeding edge but don’t limit yourself to the largest common denominator just to be perfectly safe all the time.

                                    1. 7

                                      Let’s see. The reasons have to do with Τεχ, with those character encodings that were used before utf8 took over, because it’s difficult to find on an unfamiliar keyboard, because of something to do with Spanish and Portuguese, and because people misprint it. Right? That’s a fair summary?

                                      I don’t see any point in using tilde. Home directories on multuuser servers have disappeared.

                                      But those are hilariously weak reasons to stop. Τεχ is dead, so are those character encodings, most typing is done on familiar keyboards, if I were to stop doing things because they’re difficult in some other language (even just ones I’ve half-learned for a vacation) I’d have to change both my first and last name, and as for misprints the tilde is a minor detail. Many pages today have more difficult URLs. The URL of the page you’re reading includes the character sequence “dlk8d1” and orgies of “…?…=…&q=…” are normal.

                                      1. 18

                                        Τεχ is dead

                                        … what?

                                        1. 16

                                          Home directories on multuuser servers have disappeared.

                                          The first one has been around for a while, while the last two are sort of new and are attempts of taking the Internet back…

                                          1. 12

                                            Home directories on multuuser servers have disappeared.

                                            IME many university/college sites use this. FWIW my university uses this for course sites (e.g. http://___.ca/~csXXX/)

                                          1. 6

                                            What’s wrong with just script(1) to record:

                                            script script.log

                                            which makes a script of everything typed and displayed. Which you can then play back via:

                                            while read line; do echo ${line}; sleep 1; done < script.log

                                            Tweak the parameter to sleep(1) for replay speed :)

                                            1. 4

                                              Indeed, script is great, and ubiquitous. script usually (depending on the version) also has options to record and playback everything, including timing. (scriptreplay under Linux, script -p under FreeBSD.)

                                              1. 1

                                                Didn’t know about -r option to script(1), at least from BSD, to record. And -p option, to play back.

                                                Very cool!

                                                Thanks :)

                                            1. 0

                                              Maybe I will seem like a jerk but my opinion is this is an expensive project with little to gain. Not really worth the effort spent. But prove me wrong and I’ll be happy for you.

                                              1. 17

                                                Not really worth the effort spent. But prove me wrong and I’ll be happy for you.

                                                Wilfred mentioned it in his presentation that while porting Emacs C source to Rust, he found bugs, fixed them and in turn was given Emacs commit access.

                                                1. 0

                                                  Those are good things, but the cost benefit still does not make sense to me.

                                                  For the cost of many hours of time you get:

                                                  • A few minor bugs fixed that didn’t affect anyone majorly for years.
                                                  • Commit rights so you are free to give away more of your own time for free. (Trading time for prestige?)
                                                  1. 3

                                                    You can’t actually say what they get out of it because what you get out of it isn’t necessarily the same.

                                                    Time preferences vary according to each individual.

                                                    1. 1

                                                      I suppose I should have worded it “doesn’t make sense for me”.

                                                      I actually mean well by being this critical. I’ve lost lots of time and other things to projects like this and in the end it was not worth it. Programmers often don’t value time as much as they should.

                                                      1. 3

                                                        Programmers often don’t value time as much as they should.

                                                        Given my previous comment, I think it should be clear that I reject this notion because I fundamentally disagree with its premise: that there is some gold standard on what time preferences should be.

                                                        Whether spending time on projects like this was worth it or not is completely a matter of perspective. Both successes and failures can be valuable. For example, my time preferences at $work are tuned completely differently than my time preferences at home. At work, I (generally) can’t afford to take a 2 week diversion to read a couple research papers to figure out what the best of the best is, primarily because the solution we know how to build today satisfies our immediate business need for it. But at home, I have no deadlines and my only real constraint is the number of days that I live. Therefore, if I want to spend 5 years rewriting a piece of software, there’s nothing inherently wrong or mystical about that.

                                                        All you need to do is acknowledge that my time preferences are different than yours. It might help to consider opportunity cost. For example, this week, I can either go home and work on my pet project (which maybe you think is a giant waste of time) or maybe I could go sit on the couch and watch Game of Thrones. Is that less of a waste of time? Or more? How do you know without knowing my own personal time preferences?

                                                        In my experience, telling people that what they’re working on has no or little benefit can’t possibly end well. The very fact that they’re working on it means they chose to do that at the expense of every other thing that they could do with their time. So they must see some value in it. If you want to mean well and you think there’s a lesson you can teach about time preferences, then it might help to ask them what they’re hoping to gain by working on this project. In my experience, most people understand that sometimes working on a thing is just fun because they like building stuff, and something about porting an old piece of software might just catch their fancy. I’d wager that most of these projects die and fizzle away to obscurity, and you might think, “Hah! Told ya so!” But, no, in fact, you didn’t. Because I still enjoyed my time working on the project, and I achieved the goal I wanted: to have fun. In other cases, the project is so much fun that other people have fun working on it with you. And it evolves. And guess what? So do your goals. The project becomes more than just something to scratch an itch, it becomes something that solves problems for other people too.

                                                2. 7

                                                  It certainly does. This can be said about almost any exploratory or porting project and these ones have at least made the effort to write a lot about why they thing its a worthwhile endeavor.

                                                  Even if the project goes nowhere, the Rust community gains a lot from this, as making this kind of porting work possible is a core target of the language. They will hit all the things we haven’t foreseen.

                                                  1. 3

                                                    I didn’t see any measurable objectives for the port. The closest thing to a justification is better thread safety. Which may be a problem, but I wasn’t aware of it, and have no way to measure if the work was successful.

                                                    Listing the good things about rust and the good things about Emacs is not a good justification for Emacs in rust.

                                                    I guess the real reason is to have fun, though that motivation is maybe one of the most flimsy to base a lasting project on.

                                                    1. 8

                                                      For example, exploration is explicitely mentioned:

                                                      By forking, we can explore new development approaches. We can use a pull request workflow with integrated CI.

                                                      It mentions that maintained forks of emacs are not unusual:

                                                      Forking is a longstanding tradition in the Emacs community for trying different approaches. Notable Emacs forks include XEmacs, Guile Emacs, and emacs-jit.

                                                      There’s a measurable objective: Emacs, written in Rust. That might be simple, but is quite enough.

                                                      I also wouldn’t discredit fun here. Lots of projects started as fun and got somewhere when someone got hooked.

                                                1. 3

                                                  The author of the port gave a presentation on it, here is the transcript:


                                                  And here is the latest update of the project:


                                                    1. 1

                                                      Ha, I was thinking the same, except, you don’t import it from .jp and you build it yourself :)

                                                      Pretty cool project.

                                                    1. 2

                                                      This is one of those things I was always embarrassed about explaining to Clojure newcomers. Of course it’s important to understand seqs and laziness, but the fact that there are many lists for which the list? predicate returns false for is just a stupid accident of history where a patch got merged carelessly without taking time to understand its implications, and people have tried to rationalize it retroactively.

                                                      1. 2

                                                        stupid accident of history where a patch got merged carelessly without taking time to understand its implications, and people have tried to rationalize it retroactively.


                                                        Seems like the first appearance of seq? was:

                                                        commit 86dd57ad4e8d1cbe6a46a45d6eb5df5711373fe9
                                                        Author: Rich Hickey <richhickey@gmail.com>
                                                        Date:   Mon Feb 4 16:57:57 2008 +0000
                                                            added string? symbol? map? vector? seq? nthrest
                                                            first cut at destructuring let (let*)

                                                        And the first appearance of list? was:

                                                        commit 3f0cef5142672ea1a9f881477135565b316a2796
                                                        Author: Rich Hickey <richhickey@gmail.com>
                                                        Date:   Fri Sep 5 15:52:08 2008 +0000
                                                            added many predicates

                                                        My read from that is that list? was added later intentionally as a way to differentiate from seq?.

                                                        1. 2

                                                          added many predicates

                                                          A former co-worker claimed this patch was submitted by him before the switch to git made it possible to attribute patches to non-committers.

                                                          1. 1

                                                            Thanks for the explanation.

                                                        2. 1

                                                          I completely disagree with this and I wrote up a post coming at it from the design perspective to try to give a different mental model to explain why list? does what it does.


                                                          1. 4

                                                            I have a day job at New Relic, in my off hours I’m working on improving my Brazilian Jiu Jitsu and making some electronic music. I’ve also been working on www.livingbjj.com – although it has been dormant for a while, I’m going to be committing to it this week.

                                                            1. 1

                                                              Just wanted to say that we recently started using New Relic and it’s an amazing product. It confirmed various performance problems I suspected, and also highlighted a few really odd ones that were totally unexpected.

                                                              So, thanks!

                                                              1. 1

                                                                Glad to hear it. I just started here a couple of months ago, and am still learning my way around the code, but it is nice to work on a product that people find useful.

                                                              2. 1

                                                                How long have you been doing BJJ?

                                                                I started doing Muay Thai a month and a half ago and am probably going to transition to BJJ at a Gracie Barra facility at some point.

                                                                1. 1

                                                                  a little over 2 years now – got my blue belt last year, but I still suck. Trying to focus on fundamentals and getting my head in the right place to make progress. It’s a sport that can be rough on the ego, but that’s one of the reasons I love it – there’s such a good sense of accomplishment when something ‘clicks’ – a lot like programming.

                                                                2. 1

                                                                  Nice site @mattvanhorn!

                                                                  Have you thought about adding some clubs that aren’t in the US?

                                                                  1. 1

                                                                    I’ll take that as a feature request and get it in there ASAP.

                                                                  2. 1

                                                                    what sorts of EDM? Do you have soundcloud page by chance?

                                                                    1. 2

                                                                      I’m still at the point where my taste far surpasses my skill, and as such I am too embarrassed to put anything out there yet. I might upload a 10min DJ set or similar to youtube, but probably not much more than that for a while. My tastes run towards drum & bass, house & dubstep – Calyx, Dillinja, Bassnectar, Datsik, Photek, but also a lot of stuff in other genres.