1. 25

    Merging instead of rebasing doesn’t save you from creating a bad merge commit either, with or without merge conflicts. Whether you rebase or you merge, the final commit on top (i.e. the final snapshot of your files) will be in the same state. You’d get the same merge conflicts whether you rebase or you merge (possibly in a different order). It’s still your responsibility either way to make sure this commit is semantically correct – git doesn’t know your programming language and line-oriented diffs, whether by merging or by rebasing, can be wrong.

    The article is also making the case that having the merge commit instead indicates that a whole batch of commits introduced a bug. You can just look at the merge commits and know which merge commit was the problem. This still doesn’t indicate which commit in the batch was buggy. So you have the same problem, except it’s more swept under the rug. Throwing out a whole series of commits because of one bad commit in the batch seems like too much baby bathwater to me.

    1. 12

      Another reason I stay away from merge commits is the train track wreck graph of history. Try running git log --graph --oneline on any google project (chromium, etc) and trying to sort out the history visually. Often times I find the tracks completely fill up my terminal and I have to scroll to the right in order to see what the commits are.

      1. 7

        Merging instead of rebasing doesn’t save you from creating a bad merge commit either, with or without merge conflicts. Whether you rebase or you merge, the final commit on top (i.e. the final snapshot of your files) will be in the same state.

        That’s correct but it does make the merge point more obvious and explicit, which if the author is to be believed, makes it easier to untangle subtle errors of the type under discussion.

        I don’t buy it though - I’ve been using Git as a release engineer for years and as an IC for years more and I can think of maybe 1 instance where such a bug was introduced but not immediately caught by the developer doing the merging.

        That said one person’s experience does not make a thing true, so I’d be curious as to whether others have been bitten hard by this kind of subtle rebase induced bug?

        1. 4

          I’ve had similar problems. Write some code, thoroughly test it, merge and commit. Later a problem is discovered. Didn’t I test for this? Unfortunately it’s not possible to recreate the exact artifact that was previously tested.

          Features interfere in complex ways. After rebase you can no longer untangle this feature from all the features in its new base.

          1. 3

            Unfortunately it’s not possible to recreate the exact artifact that was previously tested.

            This in no way contradicts your point, which I appreciate you chiming in with - but best practice with Git whenever you want to freeze a point in time is to use tags.

          2. 0

            My experience has been very close to this author’s. I’ve also run into issues with git blame when a feature is rebased, effectively hiding the true author of the code. Over my many years of git use in various sized organizations I’ve come to join Paul Stadig’s philosophy of “Thou Shall Not Lie”.

            It’s easy to customize a git worflow to speed along deployments and releases. Git’s first and most important role is the safety-net. Keeping your history accurate is the safest way to keep that safety-net strong.

            If you have challenges with git log when you have many branches, there are plenty of tools to help visualize that. Monorepos also make all of this much more complicated (i’m not a fan).

            1. 8

              I’ve also run into issues with git blame when a feature is rebased, effectively hiding the true author of the code

              Rebasing a feature branch doesn’t hide its author.

              1. 0

                It can when the history is rewritten by another user, especially when squashing. Squashing commits leaves only the author of the base, hiding both the other contributors and the identify of the squasher.

                1. 2

                  Nope. Squashing a feature branch on a base only allows you to squash the commits of the feature branch into one another. It doesn’t allow you to squash them into the base commit. To lose commit authorship information, you’d need to very deliberately go outside normal rebasing commands like git rebase master.

        1. 2

          Really cool stuff. It reminds me of the sites on gopher://fritterware.org/1/. I’ve added your gopher hole to my aggregator on gopher.black. Keep up the awesome work

          1. 2

            Thank you for adding me! Could you maybe tell a bit more on what runs gopher.black? Self written scripts, language, how do you track GopherHoles without rss, etc?

            Fritterware looks like my idea indeed. Most of the rss feeds are incomplete due to the html parsing I guess. That is always an uphill battle sadly.

            1. 1

              gopher.black runs on a raspberry pi from my apartment. I run motsognir as my main gopherd, but also have gophernicus running for tor (I could have done both over motsognir, but did the gophernicus bit for more complex silly reasons). I author content using my gopher helper, burrow (https://github.com/jamestomasino/burrow) and push all content into git where it is mirrored through cron-job pulls on several other systems (sdf, tilde.town, etc). I have a few stand-alone scripts that do things like pull my reading lists out of goodreads (via rss). Most importantly I run a very large aggregator using Alex Schroeder’s moku-pona (http://github.com/kensanata/moku-pona). This is updated on a cron 4 times a day. My site list for moku-pona is tracked in git (https://github.com/jamestomasino/dotfiles/blob/master/mokupona/sites.txt) in case the pi dies or I get eaten by a whale.

              Come join us in irc.sdf.org or irc.tilde.chat in the #gopher rooms

              1. 1

                That is really cool! Let’s hope the whale 🐋 thing doesn’t happen anytime soon. This would be worthy of it’s own article even if you have some time for that.

          1. 1

            @tomasino@mastodon.sdf.org - I post about gopher (A LOT). Command line stuff, keto, retro tech, books, and random life stuff. Come chat with me.

            1. 3

              This is so much fun and great work. On a whim I was curious if I could set the base measurement with a font-size property and do the rest of the math with ems. Here’s the result… as you can see, changing the font size scales it!

              https://www.tomasino.org/a.html

              edit: I should have set the font-size to the height property and worked from there so the font-size would actually measure correctly to the font. No matter. If someone were to do this for real they can do it right. It’s possible.

              1. 9

                I haven’t found a free moment to build this into a browser extension just yet, but here’s the crux:

                Array.from(document.getElementsByTagName(‘a’)).map(a => { if (a.getAttribute(‘ping’) !== null) { a.removeAttribute(‘ping’); } })

                This will check the page for anchors with ping attributes and remove them.

                1. 2

                  Love this concept, but not for the multiple orgs. It may make sense to you personally to have an “old projects” org, but it changes URLs for people that may have bookmarked your old junk. I did create an org for forks, though. That’s brilliant. Most of those were done to make a single PR.

                  1. 1

                    Assuming the PR was merged, why not delete the fork?

                    1. 2

                      As trousers said, sometimes the PRs aren’t merged in quick order. In other cases I will continue to make contributions to the project over time and want to keep my fork around. I’ll rebase in upstream as time goes on and make new feature branches for PRs. But, even in the case where I just made a single PR, I like to have that record around where I can find it or point to it in case the need arises. If a future employer was curious what my relationship is like with the open source community this new “org” is a great place to send them.

                      1. 2

                        I’ve had PRs hanging out for /months/. Sometimes I just forget to go clean up the repo later.

                    1. 5

                      It’s a fantastic server for playing around and learning openBSD! I’m working through all the manpages on it.

                      1. 3

                        Another nice simple tool is drist: https://dataswamp.org/~solene/2018-11-29-drist-intro.html and https://dataswamp.org/~solene/tag-drist.html . It is written by solene (an OpenBSD ports developer). In a nutshell it is a simple well-structured shellscript that uses SSH and rsync to sync files to hosts.

                        1. 3

                          … (an OpenBSD ports developer) …

                          An OpenBSD developer - her contributions aren’t confined only to ports :^)

                          1. 3

                            From solene in IRC:

                            dunno if you can post on lobste.rs or if somebody has an account, but on https://lobste.rs/s/6bk4pp/rdist_1_when_ansible_is_too_much#c_fdspzh it’s said that drist copy files, but it miss the important part that it also execute scripts :D

                            1. 1

                              That does indeed look very interesting.

                            1. 3

                              We’re taking the kiddo to the zoo today. I’ll probably keep working on my speed reading plugin, stutter (https://github.com/jamestomasino/stutter) for a bit, and keep reading the many, many books in my queue.

                              1. 2

                                I’ve been collecting introductory gopher tutorials over on https://gopher.zone. I’ll have to contact the author of this one to see if I can pull it in.

                                1. 1

                                  The author is I think @alynpost, admin here and owner or at least employee of prgmr

                                  1. 1

                                    Thank you @raymii for highlighting me. James I would love to have this article on gopher.zone.

                                    The author of the article is Paul Scott. I’ve previously spoken with him about publishing this article on gopher.zone. He would like to be able to extend and republish it in the future but verbally non-exclusivity was the only issue he raised with you publishing this article. I would like attribution on the article stating where it was originally published.

                                    I’ve sent you an email to the address on your resume restating this and including the relevant parties. I’m glad you’re interested in incorporating this material.

                                    1. 1

                                      The site is on github :)

                                    2. 1

                                      Hi, James! I’m glad you like the article. :)

                                    1. 3

                                      I’ve been observing this community over the last few months with great interest. http://tilde.club/ seemed very interesting the first time I found it (I wished it had existed when I was limited to using Windows), but it was closed (which of course has it’s benefits too, as this site shows). Nevertheless I consider http://tilde.town/ to be more successful in it’s message and idea.

                                      It’s kind of a more general, and larger, community like the one around suckless/cat-v/nixers that I found very interesting around a year ago. They have common opinions that go against contemporary trends, forging a community that does stuff and creates stuff. But what makes it even more interesting is how it transcends just one site, while not loosing it’s character. The affinity to the fediverse also delights me.

                                      Sadly it seems to be kind of a 10%/90% affair when it comes to activity: Just look at http://tilde.town/ as you’ll see most people still have the little more added than the default index.html (examples 1, 2). What I read into this is that although this exists, and people find it interesting, many don’t know what to do with it. Kind of sad… General lack of creativity maybe? But I haven’t seen it from the other side, so maybe they are more active in other ways.

                                      1. 5

                                        Not all people are super creative with their sites; at least for me most of the social activity occurs on the irc net and the mailing lists.

                                        1. 3

                                          I think it’s important to note that many of these pubnix servers are not oriented toward generating a lot of public web content, but rather to intra-system activities. IRC chat, bulletin boards, local gaming, “botany”, grafitti walls, and so on are extremely popular. tilde.town is a lush playground of activity of all sorts, just not a lot of it bleeds out through the web. But that’s also kind of the point. Everyone on a tilde knows how to toss a webpage out there in some form or another. They congregate for the community. The outputs are very different.

                                          Now, there are other tildes, like my own https://cosmic.voyage (or gopher://cosmic.voyage) which ARE oriented toward a public channel (collaborative storytelling in our case). Our activity is still more robust in IRC with people talking and planning than the output suggests.

                                          Finally, you touched on federation and that’s some new and exciting territory for the tildeverse. While we do have a round-robin of IRC servers that all federate, there’s also some novel experimentation going on. The circumlunar pubnix servers are rsyncing their local bulletin boards to one another. Cosmic, baud.baby, and circumlunar are experimenting with a low-fi social networking system built on top of fingerd. There’s a lot of playing around of this sort as people push limits and turn their hobby eye toward community building.

                                          1. 2

                                            maybe they are more active in other ways.

                                            Yes. The community is super active on IRC, 24 hours a day. They also have a local intranet for more private things that users don’t want indexed by google. There are a number of CLI apps that don’t have a web presence, also, such as feels, bbj, botany etc…

                                          1. 5

                                            A great write-up! I’ve also been collecting tutorials and guides for aspiring gopher content creators. You can find it over at https://gopher.zone

                                            1. 3

                                              That’s so cool! Although deep down I know it probably won’t, I’d love for Gopher to make a comeback (where comeback is “more software understands gopher://”).

                                              Will you be providing links to the other articles up at gopher://sdf.org:70/1/sdf/faq/GOPHER as well?

                                              1. 3

                                                There’s a small but thriving phlogging community on gopher.

                                            1. 3

                                              This is brilliant. I love literate programing as a teaching tool. This is helping me overcome so many of my frustrations in learning haskell.

                                              1. 5

                                                How old is this post? I see there’s an update from 2009 when someone pointed out the fundamental difference between check boxes and radio buttons to the author.

                                                1. 3

                                                  Wayback machine says 2007.

                                                  1. 1

                                                    Sadly, he doesn’t date his content :(

                                                  1. 2

                                                    Brilliant work. I’ll be using this daily as my main interface to Lobste.rs now. I hope you keep tweaking it and improving it with time.

                                                    1. 7

                                                      > discord

                                                      God please, no!

                                                      1. 2

                                                        Better than slack.

                                                        1. 7

                                                          Of course!

                                                          But why you need to stick to proprietary solutions and make them unreachable on platforms you’re caring about on this community? Wouldn’t be better to just use IRC like civilized people do?

                                                          1. 7

                                                            Trying to convince people who want Slack or Discord to use IRC will get you nowhere.

                                                            IRC is awesome and some of us have been using it since dirt but it ITSELF lacks features some modern users really want - built in search / logging / voice chat / built in image / sound rendering, etc etc etc.

                                                            You can say “Bah that’s all crap” - and I’ll agree with you, but that doesn’t stop people from wanting.

                                                            Personally, I wish more open source folk would explore sollutions like https://zulipchat.com/

                                                            1. 2

                                                              Direct link to the code for everybody’s convenience: https://github.com/zulip/zulip

                                                              1. 1

                                                                I know Zulip but haven’t tried it personally yet…

                                                                And, more importantly - does it have an IRC gateway? :)

                                                                1. 1

                                                                  Sort of: https://github.com/zulip/python-zulip-api/issues/106

                                                                  I still like zulip quite a lot, i think its concept of topics does really improve discussions.

                                                            2. 1

                                                              They have an IRC channel too, and a bot that communicates between IRC & Discord

                                                              1. 1

                                                                These bridging bots (between Slack/Discord/Matrix/Telegram/Hipchat and IRC) are quite incomplete solutions, as they can’t do “puppeting” so the bot impersonates all IM users as single IRC user and it’s bad to interact with them in that way.

                                                                I hope Matrix could solve this in the future.

                                                                1. 1

                                                                  I’ve been using Matrix for about 18 months, and it does puppeting perfectly when bridging to IRC, from either side.

                                                                  The Slack bridging with Matrix looks to behave in a similar way; you’re almost unable to distinguish native users and bridged users.

                                                        1. 4

                                                          This is a godsend. I’ve been staring at my Indigo2 for months wondering how I’m going to take the next steps in getting it back online. Bam, here we go! Now I just need to get a working SCSI drive and burn these CDs to reset the root password. Thanks!

                                                          1. 3

                                                            Use DINA instead?

                                                            1. 1

                                                              How will DINA help if @jamestomasino doesn’t have IRIX install media?

                                                              1. 2

                                                                It doesn’t but it saves on avoiding the clumsy install process from CDs which involves swapping disks in and out multiple times.

                                                            2. 2

                                                              I had a full Indigo2 with graphics upgrade that got abandoned in a move. :(

                                                              At one time we had a Challenge, a Fuel, an Octane (which I still, have, I think, or maybe an O2?), and that Indigo2.

                                                              1. 1

                                                                I also have an Indigo 2 and an Indy sitting around in need of various little repairs. I hope this might help me get back into things.

                                                              1. 5

                                                                From a comment:

                                                                let gopher stay simple

                                                                This. I see interest in Gopher again, but they way they talk about it, they want to talk shit on like Markdown (read; HTML) parsers and essentially turn it into the web over port 70; all because the web sucks. (It does though, so I’ll give them that.)

                                                                Gopher’s strength and charm (why we talk about it in the endearing sense today) is its simplicity. Basically having something like the web just without HTTP isn’t very interesting after all.

                                                                1. 3

                                                                  There’s some good threads on this on gopher phlogs arguing over what “simple” constitutes, what makes sense as a natural extention of the protocol and what feels like reverse engineering the web. The way Alex’s wiki page on encryption started feels very much like the latter to me. It was too much as soon as he started talking about adding persistent connections, which undermine the core principle of gopher. He eventually settles on adding TLS, though, which I think falls into a more natural fit. It’s easy to implement on both client and server and can fall back easily enough. It doesn’t fundamentally change the way you interface with gopher, just makes sure that anyone listening in the middle can’t read along. I like it!

                                                                  1. 3

                                                                    Wanting to adhere to the core principles of gopher, but try saying persistent connections are useless when you’re not in a tight geographic area like gopher would’ve been when its core principles were conceived. (Basically: try living in Australia. Latency sucks.)

                                                                    1. 2

                                                                      Yeah, TLS is simple - you just wrap the existing connection. It’s an easy adaption (either via stunnel or via adding a library) and fits other stateless protocols like HTTP fine.

                                                                      1. 1

                                                                        I still maintain that the most gopher-ish way to support encryption is via public anonymous gopher proxies which take requests over plain gopher, encrypt them, and tunnel them to an exit node on the other side.

                                                                        This means:

                                                                        1. no existing clients need to be modified – even netcat still works fine, and produces plaintext results
                                                                        2. the IP a request comes from is known only to one of the two proxies

                                                                        The mechanics of implementing the encrypted gopher proxies is beyond me, unfortunately. (I made an attempt, but ultimately couldn’t figure out the tooling.)

                                                                        1. 1

                                                                          …but this doesn’t protect against anyone snooping on your end of the connection? They still have, in plaintext, what server you connect to, your request, and the response. You don’t even need to be a nation-state, just some guy in a coffee shop with a laptop.

                                                                          1. 1

                                                                            If this is part of your threat model, I recommend running a local encrypted gopher proxy on localhost and chaining it with a remote pair (preferably having a pair of remote proxies that are forwarding your encrypted stream).

                                                                    1. 4

                                                                      The original gopher link: gopher://sdf.org/0/users/dbucklin/posts/gopher_groff.txt

                                                                      I love seeing gopher content shared on lobste.rs but it’s a shame when the original links are left off. Is it possible to share direct gopher links in submitted stories? I’m guessing not.