[JM]: So I came across a tool the other day called Historical Tech Tree, and I'll read the description here.
[JM]: The Tech Tree is an interactive visualization of technological history from 3 million years ago to today.
[JM]: A work in progress, it currently contains 1,983 technologies and 2,360 connections between them.
[JM]: And you can find this at historicaltechtree.com.
[JM]: And this is cool.
[JM]: It shows a very large linked list of all of these different technologies.
[JM]: I highly recommend if you can using the largest monitor you have access to and maximizing your browser window when you view this because
[JM]: The various points on this very large connected graph are somewhat far apart as you move along, and it will be easier on a larger screen.
[JM]: But whoever did this, put a lot of time into it and you can search for particular years or people or technologies and you can filter by field or location.
[JM]: And this is cool, really well done.
[JM]: I'm impressed with this project and I haven't fully had a chance to go through it because as I just mentioned, there are a lot of technologies in it and the connections between them.
[JM]: But when I can find a moment, I'm looking forward to digging into this and seeing the treasure trove of information contained within.
[DJ]: Yeah, this is ultra fascinating.
[DJ]: I definitely want to spend some more time on it.
[DJ]: And just contemplating the, as you said, like it starts at essentially the beginning of human, not even human history.
[DJ]: It starts at like the beginning of human existence and sort of like goes forward from there.
[DJ]: And it is interesting to see how the, of course, the distance only in relatively recent times, given the scope of the graph, does the distance between things start to collapse?
[DJ]: And now suddenly you have, so probably like 99% of humans
[DJ]: All of the things on the chart are in the last tiny segment of it, right?
[DJ]: Which is just very interesting to contemplate.
[DJ]: My favorite thing so far, though, is I jumped to a random point in the graph and I saw an entry for something called the Bude light, Bude, B-U-D-E light.
[DJ]: It's like a lamp of some kind.
[DJ]: And I wasn't able to confirm yet whether or not there's a direct line from that to Bud Light, the popular...
[JM]: beer but i hope so as do i yeah when i was experimenting with it i put computing in the field filter and then jumped to say the 1940s 50s 60s 70s and followed all the different connections between the various technologies like hard disk drive operating system high level programming language
[JM]: mouse and you go on and on.
[JM]: And it's really interesting to see all of these things connected together because a lot of these things are things that we grew up with, right?
[JM]: As we're not talking about, like in the beginning, it's like the stone age and there's stone tools.
[JM]: You're like, okay, well, I wasn't there for that.
[JM]: But during this part, you know, it's like we can relate to it more directly and it's kind of cool to see all the different technologies.
[DJ]: Yeah, I would be interested in how far, if you type in computing, what's the earliest entry?
[DJ]: Like, does it go back to Babbage's calculation engine or whatever that was called?
[DJ]: Does it go back even further to like the abacus?
[DJ]: Like, I wonder what it considers the root of what we would call computing.
[JM]: Yeah, I agree.
[JM]: That would be an interesting thing to know.
[JM]: So if you find out or if any of our listeners find out, by all means, let us know.
[JM]: All right, to follow up on a previous segment, I wanted to tell you a little bit about my UPS issue.
[JM]: I mentioned before that I had this problem that I attributed to my M3 Ultra Mac Studio and what I believed to be its higher power draw that caused my UPS to suddenly become... Caused it to become an IPS, if you will.
[JM]: What does IPS stand for?
[DJ]: An interruptible power supply.
[JM]: There it is.
[JM]: Well, in the end, I thought about it some more and I thought, okay, yeah, this is a theory, but it's an untested theory.
[JM]: And before buying a whole new one, I thought there's another possible thing that I didn't think about, at least not when we originally talked about this.
[JM]: And that is, well, I assumed that it's binary, right?
[JM]: So battery either works or it doesn't work.
[JM]: And then I realized, no, that's not often how batteries work, including the lead acid batteries that are typically in uninterruptible power supplies.
[JM]: So my next thought was, maybe this is just a sign that the battery is no longer holding a sufficient charge or is no longer able to supply enough power.
[JM]: So
[JM]: Yes, it worked fine when it was just the modem and the router.
[JM]: But as soon as I attach something with anything more than that, it would no longer function.
[JM]: So I tested this theory by ordering a new lead acid battery, put it in their problem solved.
[JM]: So all the things I said before, you can disregard them because I figured out the solution wasn't what I thought it was, it wasn't that the
[JM]: M3 Ultra was drawing significantly more power than the MacBook Pro.
[JM]: I'm sure it does, but it was still, as I found once I replaced it, within the bounds of what this particular UPS provides.
[JM]: And in fact, when I looked up the power requirements for the M3 Ultra Mac Studio, they're not actually all that high.
[JM]: So my original suspicion was unfounded.
[DJ]: So in the end you just had to replace the battery in the UPS?
[JM]: That is correct.
[DJ]: How old is the UPS out of curiosity?
[JM]: I don't remember exactly, but if I had to take a relatively good educated guess, I would say it is at least five years old, which from what I've read is significantly longer than lead acid batteries are generally rated to last.
[JM]: I've seen that they are supposed to last for like one to two years.
[JM]: Really?
[JM]: But that was on a product page for another UPS that I was looking at back when I thought I had to replace it that had a lithium ion battery that said that those need to be replaced every three to four years and that lead acid batteries needed to be replaced every one to two years.
[JM]: So maybe...
[JM]: That's just them trying to get you to buy the lithium ion variety of it.
[JM]: So all I know is I would say five years in the past is probably around the time that I think I've had to replace them.
[JM]: But it's been so long just because there was a period where I didn't need one for whatever reason that I couldn't remember how long they lasted for.
[JM]: So it just didn't even occur to me when this happened.
[JM]: Like, oh, maybe the battery needs replacing.
[JM]: Didn't even occur to me.
[DJ]: that hasn't occurred to me either.
[DJ]: And it probably should because I have uninterruptible power supplies as well.
[DJ]: And they're probably headed for five years old.
[DJ]: I've never really thought about it.
[DJ]: And I wonder if there's a way to do like a battery test.
[DJ]: This honestly never occurred to me that like, yeah, battery is a consumable.
[DJ]: You have to replace it eventually.
[DJ]: And, you know, more is the pity, like even if it's not really used, right?
[DJ]: Like my UPSs have very rarely had to fall back to battery.
[DJ]: They're the kind of thing that I buy and I put them there because for the one in a however many times that my power goes out, you know, I don't want a catastrophic failure of certain of my computing equipment.
[DJ]: It's never really occurred to me that, oh yeah, you probably have to replace the batteries in those.
[DJ]: They're not going to last for the rest of time.
[JM]: Yeah, and when I looked up in the very sparse manual that I could find for this particular UPS device, of course it mentions nothing about replacing batteries because why would they?
[JM]: They just want you to throw it in the trash and buy a new one.
[JM]: So I had to look up some random YouTube video in an entirely different language other than my native one.
[JM]: to try to figure out how to do this.
[JM]: And then there's the question of, okay, well, where do you get the battery from?
[JM]: Well, in the video, the person's describing how to replace the battery in this unit that I have, although his was a higher capacity in terms of volt amperes or whatever the appropriate unit is.
[JM]: And so he mentions a specific one that he found on Amazon.
[JM]: And I thought, Okay, cool.
[JM]: I couldn't find a replacement battery that exactly matched the voltage and other characteristics.
[JM]: So I thought, Okay, well, wait a minute, this one that I have, it comes in an 800, you know, VA and a 1000 VA variety, the guy in the video has the 1000, I have the 800.
[JM]: I'm like, what if the company that sells this thing sells the exact same product as the 800 and the 1000?
[JM]: And the only difference is the VA of the battery.
[JM]: Could I get the battery that this guy was talking about for the 1000 VA?
[JM]: Can I just get that battery and put it in the mind and effectively get the 1000 VA model?
[JM]: Because the only difference is the battery and spoiler alert, I'm pretty sure the answer is yes.
[DJ]: So you overclocked your UPS.
[DJ]: That sounds dangerous, but I like it.
[DJ]: It probably is.
[DJ]: Maybe put a fire extinguisher in there as well.
[DJ]: I hear you can buy them now where they connect to the internet to download firmware updates.
[DJ]: So that'll be right up your alley.
[DJ]: Perfect.
[JM]: Moving on to another follow-up item, we talked about Mac sleep issues and my complaints with regards to how macOS over time has just diluted the concept of sleep and now does a whole bunch of things in the background.
[JM]: And there are times where if my computer, for example, my MacBook Pro is not connected to MacOS,
[JM]: power, and I leave it overnight, just sitting on a shelf somewhere, there are times where I'll go back to it the next morning, and half the power is gone, or sometimes it's just fully drained.
[JM]: And not long after I saw a post about this very same issue called MacBook Pro insomnia.
[JM]: And this person might have had a different issue, I can't really tell, it could very well be very much the same.
[JM]: But in any case, this person mentioned a tool called sleep aid.
[JM]: which can be used to display wake events in a more user-friendly way and has a interface for changing settings.
[JM]: I don't believe this tool is free, but it seems like something that could very well be worthwhile.
[JM]: I am going to dig into it and check it out.
[JM]: It seems like there's a free trial.
[JM]: So yeah, I just thought I would mention this because this was a problem that I found and continue to find very vexing.
[JM]: And perhaps this tool could be a way of managing it.
[JM]: I should at least mention that I don't think this tool should be necessary.
[JM]: Like I want, as I said before, and I'm now totally repeating myself from the last time, but I just want like a little checkbox that goes like, yeah, I just want the old version of sleep.
[JM]: You know, the one where you put it to sleep and then like nothing happens until I wake it up.
[JM]: Like it doesn't do stuff in the background.
[JM]: It's not checking for email.
[JM]: It's not looking for
[JM]: messages.
[JM]: It's not doing anything until I tell it to wake up, but that's not going to happen.
[JM]: So I will check out this tool and see if it might provide me some degree of relief from this very annoying problem.
[DJ]: That sounds like a good idea.
[DJ]: I will say that if we're going to continue to anthropomorphize this feature of computers by calling it sleep and referring to its inability to sleep as insomnia, that really we should just go ahead and call this tool Mac melatonin.
[JM]: Seconded.
[JM]: I like it.
[JM]: Yeah, you're right.
[JM]: Between that, there's hibernate.
[JM]: Yeah, everyone is just piling on with the sleep metaphor.
[DJ]: So I guess we could actually call what the Mac does when it's supposed to be sleeping lucid dreaming, probably.
[DJ]: That's interesting.
[JM]: That's a pretty good description.
[JM]: Perhaps more like a fever dream.
[JM]: And in the last item of follow-up, in a previous episode, we talked about a really wonderful site called drawafish.com.
[JM]: And very shortly after we came across it, apparently the entire internet also came across it.
[JM]: You're welcome.
[JM]: Yes, of course.
[JM]: This was entirely our doing.
[JM]: And I am going to read the postmortem because there was an incident.
[JM]: And I'm going to read the opening to the postmortem just because it's entertaining.
[JM]: It starts like this.
[JM]: If you were on Hacker News on the 1st of August, 2025, you may have seen drawfish.com because it was in the number one spot.
[JM]: You may also have seen it if you follow me on Instagram.
[JM]: You also probably saw that I was in the number one spot on Hacker News there too, because I posted about it a lot.
[JM]: And if you talk to me in person, you probably heard about it.
[JM]: And then you probably heard a lot of quotes from the social network where I replaced various words with fish, such as a million fish isn't cool.
[JM]: You know what's cool?
[JM]: A billion fish.
[JM]: If you read the post on Hacker News, you saw that the website was an exercise in vibe coding.
[JM]: I used Copilot to implement features and I used it to implement features fast.
[JM]: In my career, I have learned the art of blameless postmortems.
[JM]: The problem with a blameless postmortem is that it doesn't really work when you're the sole contributor.
[JM]: So this is a blameful postmortem and I blame me, not the LLM, sorry.
[JM]: If you saw the website only on August 1, you probably do not understand why I need to write a postmortem at all.
[JM]: Everything went swimmingly.
[JM]: Haha.
[JM]: But if you had the displeasure of viewing my website between the hours of 2am 20 minutes after I went to sleep and 8am when I woke up on August 3, then you would have seen chaos.
[JM]: Every single username was transformed to a heinous slur.
[JM]: Many unsavory fish had made it into the fish tank and many beautiful fish were gone.
[JM]: How did this happen?
[JM]: And this person goes on to describe the various things that happened.
[JM]: And you should read it.
[JM]: It's fun.
[JM]: It's entertaining.
[JM]: And it's interesting.
[JM]: At the end, there's an image that says, LLMs don't commit code.
[JM]: People commit code, which is, I think, an interesting insight.
[JM]: And below that, he writes, I am selling these stickers for $100 each.
[JM]: Please reach out to purchase them.
[JM]: So like I said, check it out.
[JM]: This is a great postmortem on something that it sounded like was a bit unfortunate for the people who are trying to legitimately enjoy the wonder that is, was, I don't even know, drawfish.com.
[JM]: And yeah, this was a fun read.
[JM]: Okay, moving on, I wanted to point out that yesterday, August 19 2025 was the 15 year anniversary of pelicans first release back on August 19 2010.
[JM]: I've explained in previous episodes that pelican is a static site generator that I maintain.
[JM]: And it was first released to the public on that date as version 1.1.
[JM]: And I wanted to mention it because this was the first open source project that I ever contributed to, at least as far as I remember.
[JM]: And 15 years later, the project still going strong with a GitHub star count of over 13,000.
[JM]: And of course, we know that is the only way to measure the value of any open source project is in GitHub stars.
[JM]: Everyone knows that.
[JM]: And it's, yeah, it's been fun.
[JM]: I'm pleased that so many people have contributed to it.
[JM]: Over 400 people have contributed to it over time and that so many other people continue to find it valuable.
[JM]: So I just wanted to take a moment and mention this fun milestone and enjoy the moment.
[DJ]: Yeah, congratulations to Pelikan and to you as the lead maintainer.
[DJ]: I came across Pelikan a couple of years ago when I was looking for a static site generator and I more or less adopted Python as my primary scripting language.
[DJ]: So I was looking, I had been using Jekyll, which is a popular static site generator, but it's written in Ruby and there's nothing wrong with that.
[DJ]: Ruby is cool, but
[DJ]: I was doing a lot of stuff in Python, and I thought I would just as soon install more Python instead of having to maintain a Ruby toolchain alongside of it.
[DJ]: And I came across Pelican, and then this was a complete surprise.
[DJ]: We had never talked about this before.
[DJ]: I was pleasantly surprised to see that you were the lead maintainer.
[DJ]: I think I might have mentioned that to you at some point.
[DJ]: So it's very cool, and I've had a lot of fun using it.
[JM]: One of the things that I enjoy that occasionally just happens at random is I will be looking at someone's website and I'll think, oh, this is a cool site, you know, both usually because the content is interesting and engaging.
[JM]: And also sometimes the design is pleasant and I will scroll down to the bottom, find a footer, see if there's any description of how the site was built.
[JM]: And every once in a while, I'll see some mentioned that it was built with Pelican and I'll
[JM]: Particularly if it's someone who I've had some interaction with, either in person or on the web.
[JM]: It's one of these things that always just sparks joy.
[JM]: So it's one of the things that really provides a feeling of fulfillment and gives, you know, a lot of this effort some meaning because it is a lot of effort.
[JM]: And it's, yeah, it's a cool experience.
[JM]: All right, moving on.
[JM]: The other day on the Fediverse, Marika said, quote, you know that feeling when you need to grab something from an old directory only to discover you've already rm rf earlier that day.
[JM]: For those that don't get the reference rm dash rf is on a command line how you recursively delete files and folders, and it is a destructive, irreversible operation.
[JM]: And this is an experience that I've definitely had personally, where I will run this command on a folder thinking I don't need it anymore.
[JM]: And then some degree of minutes or hours later, usually I will realize, oh no, there was something in there that I actually wanted to keep.
[JM]: And so I responded to her post and I said, hey, listen, I know this does not help you at all right now.
[JM]: But going forward, you might consider using one of several available command line tools, usually with the name of trash.
[JM]: There are different implementations, but usually it's the trash command.
[JM]: And personally, I have been using an implementation for macOS that has been around for years.
[JM]: I think the last commit to this open source project was seven years ago, but it still seems to work just fine for my needs.
[JM]: And I've been using it even recently without any problems.
[JM]: And I pointed out in my reply that there is, as of macOS Sequoia 15, and presumably any later version,
[JM]: Now a built in trash command that Apple provides that I have not used, but I have been aware that it's there.
[JM]: I just haven't needed it because I have this older tool that like I said, works fine, haven't felt the need to replace it.
[JM]: And when I mentioned this bundle tool, someone on the Fediverse pointed out a post by Peter Lewis of keyboard maestro fame.
[JM]: that apparently using the bundled trash command on Sequoia confuses the finder.
[JM]: And the finder kind of just wigs out when you use it gets confused as to which folder was deleted.
[JM]: It was at the parent or the child, I don't really understand exactly what happens, but it gets confused.
[JM]: And that doesn't inspire a lot of confidence in terms of me switching to the bundled trash command.
[JM]: So I think I'm going to stick with the one that I have, at least on Mac OS.
[JM]: There is also, for those that are interested, a cross-platform implementation of this written in Python that can be used on any platform, including on remote servers.
[JM]: So if you are on a remote server and you think, oh, here's this folder of old backups, I don't need this anymore, because there is usually no built-in trash, unlike on a desktop, on a remote Linux server, you might just be tempted to RMRF the folder
[JM]: and potentially regret that choice a few minutes or hours later when you realize that there was something in it that you wanted to keep.
[JM]: And this Python implementation can be easily installed via a variety of package managers.
[JM]: So whether it's for your desktop or your server environment, I highly recommend checking these kinds of tools out so that you hopefully don't lose any data that you didn't want to lose.
[DJ]: I think I'm going to need to look into that.
[DJ]: It's actually really funny that I've never really thought about how on the command line, when you delete stuff, the way to do it is RM.
[DJ]: When I first learned how to use a command line interface in university, probably, that was what we were all shown.
[DJ]: And we were all warned of the dangers of
[DJ]: rm-rf slash, which on a Linux or Unix-like operating system, if you could actually run that with the appropriate permissions, would wreck your operating system.
[DJ]: It is actually sort of strange that the notion of a trash bin or a recycle bin, as it's sometimes called,
[DJ]: somehow seems to be a desktop user interface concept, right?
[DJ]: Like Windows and Mac OS have their versions of it and have for decades.
[DJ]: And I believe most Linux desktop environments have some concept of a trash bin as well.
[DJ]: But for some reason, this has never filtered down to the command line because now I'm thinking about it as you were speaking about these tools, how they might be implemented.
[DJ]: And at least one very simple way to implement it would be to create something like a .trash hidden folder in your user home directory and just have a command that moves files to that instead of deleting them.
[DJ]: There.
[DJ]: Now you have a trash bin feature on the command line.
[DJ]: So...
[DJ]: It's actually a little strange that over the many years, no Linux distribution that I'm aware of has built that in.
[DJ]: But here it is.
[DJ]: Here are the tools.
[DJ]: So I might look into acquiring one of those because it is a good idea.
[JM]: On some level, I am not at all surprised that the neckbeards of yesteryear just decided, YOLO, I don't care.
[JM]: This needs to go.
[JM]: Bye-bye.
[JM]: And just never bothered, right, to like implement some kind of safeguard.
[JM]: Like, you know, I guess they could take something that they wanted to trash and like, well, I might need this.
[JM]: And they'll just, you know, like rename it, like delete me in a month.
[JM]: You know, like there's various ways where you could do
[JM]: sort of fake this.
[JM]: But the reality is that's not really solving the problem because the problem is I think as of this moment, I'm, I feel confident this is something I will never need again.
[JM]: Sometimes information changes and an hour later you realize, oh, actually I was wrong.
[JM]: This is something that I need.
[JM]: And that is why when macOS came out, this concept of
[JM]: the trashcan was added, I believe it was first born in a Mac environment.
[JM]: And I think the reason why it's less common, and by less common, I mean, almost unheard of in server environments is that there's no visual representation of it.
[JM]: So how would you know when you need to empty it?
[JM]: Well, you know, it's looking you in the face on macOS, right, you see this trashcan in your dock, that it has stuff in it, it's this representation of like, hey, there's stuff you should probably empty at some point.
[JM]: on server environments where filling up your disk means your site no longer loads anymore, and your web application is dead, suddenly becomes a bit more important than say, the disk filling up on your desktop machine.
[JM]: So I can see how there is a bit of a risk if you are putting things in the trash, unless there's an automated way of emptying it, right?
[JM]: Like if it's if there's like a built in or easily configurable, okay, after a month, six months, whatever you decide the amount of time is just go ahead and empty this because if I haven't figured out that I need this in a month or six months or whatever you've decided is the appropriate amount of time.
[JM]: guess what, probably don't need it anymore.
[JM]: But as someone who's seen disks fill up again and again, and having seen the dire consequences that has for service availability, I guess I can understand why someone might decide like, you know what, maybe we should not have like a built in, you know, trash thing.
[JM]: But again, it's probably an implementation question.
[DJ]: I've got to argue.
[DJ]: I think that's BS because I've had, yeah, I've experienced this too.
[DJ]: And the thing is like Apache will blow your server disk by just writing logs to slash var slash log.
[DJ]: And there's no visual indication of that until your server grinds to a halt.
[DJ]: So you have to configure it to truncate or something like, like this problem already exists.
[DJ]: You wouldn't introduce it by adding a trash feature to Linux.
[DJ]: So I take some, some exception.
[JM]: True, but it's not exactly helping.
[DJ]: I suppose not.
[DJ]: But actually, there's a deeper thing here, which is interesting, because notwithstanding the foregoing about automated systems that will eventually fill up your whole disk, in general, disks like storage on modern computers is so large compared to the average size of data.
[DJ]: that in 2025, it's worth asking, why would you delete stuff?
[DJ]: There's kind of only two reasons that immediately present themselves to me.
[DJ]: One of them is because you need to free up space, but depending on what sort of data you're working with, that doesn't happen that often.
[DJ]: I mean, if we're talking about text, for example, short of writing hundreds of millions of log lines or something from some process,
[DJ]: But as far as human generated text, it's essentially impossible to generate enough text to fill a modern storage disk, like 500 gigabytes or something like that.
[DJ]: So you probably don't ever need to delete, say, text files, as opposed to maybe video.
[DJ]: Like, yeah, video you might have to clean up.
[DJ]: Other reason to delete files would be if you don't want that data available anymore, like for privacy or security reasons, in which case then it makes sense, especially to maybe put it in a holding area just so you have time to think twice about that decision and then destroy it.
[DJ]: It's interesting because I've never really thought about it this way because 20 years ago or 30 years ago, you really couldn't afford to keep files around because your disk was relatively small.
[DJ]: I mean, I remember on my family's first PC having to regretfully uninstall video games to make room for more video games because we only had something like a 200 megabyte hard drive.
[DJ]: Whereas now, now that I'm thinking about it, the only things I have really ever had to delete from, say, my laptop because of space are maybe things like big video files or like Docker containers and stuff like that.
[DJ]: But just normal data files, I guess I still delete them when I don't need them anymore.
[DJ]: But now that we're talking about this, I'm not really sure why I need to do that.
[DJ]: They don't really hurt anything by just staying there.
[JM]: at least as far as it relates to the command line, which is where you would be running this, you know, RM dash RF command, I usually am not doing that on a desktop anyway, usually, if I'm getting rid of files, folders, etc, I'm probably doing it in the finder.
[JM]: And that's going to the trash by default anyway.
[JM]: So at least for me, this whole question of using a trash command versus RM dash RF is really a remote server
[JM]: topic for me.
[JM]: And on remote servers, disk space actually is very much an issue.
[JM]: If you get a entry level, say five euro a month virtual private server, you get like 20 gigabytes of space, half of which is consumed by the operating system.
[JM]: So you actually don't have a whole lot of space.
[JM]: And that can very much be an issue.
[JM]: You're right nine times out of 10.
[JM]: It's not because you put stuff in the trash and forgot to empty it.
[JM]: It's because
[JM]: some log file process just filled up your disk and you didn't come up with a strategy for managing your log files.
[JM]: You're right that that is far more likely.
[JM]: But at the same time, one could envision a scenario where you're just trashing folders here and there, old backups, whatever they are.
[JM]: And you could, without really realizing it, have a significant amount of space relative to your small slice of storage space on your VPS.
[DJ]: Yeah, the nice thing about Linux is it is filled with tools that make things like notifying you that you have a bunch of stuff in a trash bin easy.
[DJ]: So I could see there being some sort of standard package.
[DJ]: I guess at this point I should just build this and use it myself anyway.
[DJ]: where it combines a command that can quickly move files to a hidden trash bin folder with, say, like a cron job that applies some retention policy, right?
[DJ]: And like scrubs that folder every 30 days or at the very least either notifies you by sending an email or showing you the message of the day message when you log into the server.
[DJ]: There are a bunch of it feels to me like low hanging fruit, I guess, is what I is what I come back to.
[DJ]: And so instead of complaining that this doesn't exist, it probably does exist.
[DJ]: Let's be honest.
[DJ]: You've found tools like this.
[DJ]: But I think what I'm getting out of this is I should just go make one for myself.
[JM]: Yeah, definitely check first to see whether or not there's something out there that's already out there and battle tested.
[JM]: But if not, then by all means, yes, please build it and share it with us.
[DJ]: Will do.
[DJ]: Maybe I'll put it on GitHub, which I think is an excellent segue into our next topic.
[JM]: Well done, sir.
[JM]: GitHub is in the news recently because they have become much less independent at their parent company of Microsoft after GitHub's CEO resigned.
[JM]: And there is a lot of concern given GitHub's recent pushes into generative software in the form of Copilot, as well as their massive built-in access to
[JM]: essentially all of the world's open source software to train their models on.
[JM]: And one post that I read since deleted, for whatever that's worth, reads, several people sent me this.
[JM]: GitHub is no longer an independent company.
[JM]: Rather, as of today, GitHub is under the AI team.
[JM]: As far as I'm concerned, this is an open admission, the function of GitHub is not to host source code, but rather as an intake for Microsoft to harvest source code to train their AI.
[JM]: I guess it always seemed unlikely Microsoft would have paid all that money to altruistically host the open source community.
[JM]: And since this news landed, there have been a lot of people calling for moving repositories away from GitHub, which is not new.
[JM]: This is a process and a conversation that's been going on for a long time.
[JM]: But given GitHub's pushes into the whole concept of generative software, and given their access to this huge amount of open source repositories, it seems like this latest push to
[JM]: migrate repositories away from GitHub has really accelerated to the point that there is a domain called give up github.org.
[JM]: And when you visit it, you will be redirected to a page on software freedom conservancy where they describe why you should give up
[JM]: GitHub and how to do it and list resources.
[JM]: And a lot of the folks that I've seen have talked about moving to CodeBerg, which is an alternative that uses an open source code repository and code management software platform with a name that I can never pronounce.
[JM]: So go for it, Dan.
[DJ]: Forgejo.
[DJ]: That's how I choose to pronounce it.
[JM]: Excellent.
[JM]: From now on, anytime I need to say it, I'm just going to pause it and I'll just have you say it instead.
[DJ]: Just drop that in.
[DJ]: Come at me for gay home maintainers.
[DJ]: This is how I pronounce your sillily.
[DJ]: No, that's not a word either.
[DJ]: I guess this is hard.
[DJ]: Anyway, the name of your software is Silly and that's how I pronounce it.
[JM]: Yes.
[JM]: Naming is hard, et cetera, et cetera.
[JM]: But, oh, man.
[JM]: Yikes.
[JM]: So, yes, there are these people that are talking about making this migration.
[JM]: I've even considered it in various points in time.
[JM]: But this is, like a lot of other people, an opportune time to be deciding, like, okay, well...
[JM]: How much longer do I want to continue contributing code to a platform knowing how it's going to be used?
[JM]: And is that something that I want?
[JM]: And the answer could be yes.
[JM]: I don't know yet because there's costs, right?
[JM]: There's costs to switching to something else.
[JM]: And I'll come back to that in a moment.
[JM]: But I wanted to mention that one of the issues with switching to one of these tools is that with GitHub, pretty much everyone has a GitHub account.
[JM]: And if you want someone to be able to contribute to your project, the network effect is just so massive, that it's relatively easy to get people to contribute.
[JM]: The problem with the aforementioned alternatives is that there's no great Federation story.
[JM]: So if everyone decides, okay, well, Codeberg is the way to go.
[JM]: Okay, great.
[JM]: So you've solved the network effect problem.
[JM]: and then introduced a new one because now you have the same issue should Codeberg ever cease to be the place where people want to be, either because they start doing things that are nefarious or undesirable or for any other reason.
[JM]: And so this is where a federation could resolve this issue, except, like I said, there's no great federation story for these alternative tools.
[JM]: There is a project called forgefed.org, which aims to...
[JM]: address this, but it is still very much in the specification stage.
[JM]: And who knows how long it'll take if ever for this to actually turn into something where okay, you can create an instance that federates with other instances.
[JM]: I want to mention one more project.
[JM]: And that is a project called radical.
[JM]: And it is indeed more radical in that, from what I understand, it is a protocol
[JM]: that uses Git underneath, and also stores things like issues as metadata in the Git repository.
[JM]: So it is quite a interesting but different solution than the kinds of things that we're used to up until this point, it looks very interesting.
[JM]: And I could conceivably consider using it if I was creating something new, or if I were migrating a repository that already doesn't have a lot of contributors.
[JM]: And I thought, you know what, why not be a good place to start good place to experiment.
[DJ]: I actually really like what you just suggested, because one of my frustrations with these code repositories is that they use Git.
[DJ]: That's not my frustration.
[DJ]: They all use Git under the hood, and Git is Git.
[DJ]: That's the nice thing about it.
[DJ]: So if you have a Git repository and you pull a copy of it, it doesn't matter that it came from GitHub or for Geho or somewhere else.
[DJ]: It just works, because it's just Git.
[DJ]: But all of the other stuff, the issues and the pull requests and et cetera, that all has to be implemented by the provider of the management tool.
[DJ]: And that can be frustrating if you want to migrate from one thing to another.
[DJ]: I recently looked into migrating from one of these tools called Getea.
[DJ]: I don't think that's actually how you pronounce it either.
[DJ]: But again, I make the rules.
[DJ]: It's my podcast.
[DJ]: Yeah.
[DJ]: And as I understand, Forgejo was developed as like a, I don't know if fork is the right word, but like it broke off from Getea when the latter changed its policies and or ownership structure, basically.
[DJ]: So I looked into migrating.
[DJ]: And there is a migration path, but unfortunately, my version of Geteo was already too new for the migration to be supported.
[DJ]: And again, this doesn't affect me at all for my actual code, because it's just Git.
[DJ]: But all the issues and stuff are essentially proprietary.
[DJ]: to each of these providers.
[DJ]: So I would actually really welcome a protocol that comes up with some standardized way to wrap things like issues and pull requests and et cetera into a Git repository so the whole thing is portable between hosting platforms.
[DJ]: That would be awesome.
[DJ]: So maybe I need to check out Radicle, which I think is also misspelled.
[DJ]: Isn't it spelled radically?
[DJ]: R-A-D-I-C-L-E?
[JM]: Yeah, I don't know if I would say that's radically.
[JM]: I think it's just radical spelled a different way.
[DJ]: Well, I know, but I don't know if you've noticed that my shtick in this episode is selective pronunciation.
[JM]: You're right.
[JM]: I forgot.
[JM]: That's very consistent, which I appreciate.
[JM]: I agree that it would be really cool if there were a standardized way, right?
[JM]: And I think I just want to underline that word.
[JM]: But I don't think that's what Radical is doing, right?
[JM]: Radical is like, hey, here's this thing we're doing.
[JM]: I don't think it's really going to provide the kind of portability that you're talking about, where if at some point you decided you want to use, I don't know, a different tool that's not Radical and still have access to your issues and other metadata that's in the repository, probably not in the cards until this becomes something that is more commonly used and standardized and
[JM]: Who knows if that will ever happen?
[JM]: And also there's just the issue of the more you diverge from what people are used to in the GitHub realm, the less likely someone's going to figure out how it works and contribute.
[JM]: So I think that like radical could be very cool for a niche thing if you're collaborating with a small group of people who have all agreed to do it.
[JM]: small teams.
[JM]: But if you have like an open source project and you are trying to get people to join and you value that community and those contributions, that's probably asking a lot of a community to say, okay, well, here's this weird thing you've never tried before.
[JM]: And if you want to contribute to this project, here's what you have to do.
[JM]: Like that's, I don't know if that's going to pan out, but I am interested in trying it with, like I said, perhaps a open source project that is
[JM]: relatively small that I don't already get lots of contributions to, but I'm more hesitant with some of the larger ones.
[JM]: One of the things that I think are going to be potentially contentious is the question of sponsorship.
[JM]: How does that work?
[JM]: Because right now, people sometimes receive a decent amount of
[JM]: donations or compensation, however you look at it for their open source efforts on GitHub.
[JM]: And I don't know how you replicate that.
[JM]: Of course, there's a whole bunch of third things like Libera pay and, and other Tidelift other tools that allow you to do it.
[JM]: And I guess maybe that's the answer.
[JM]: You just do something that's not tied to GitHub.
[JM]: So I guess there are tools for that.
[JM]: But that is something to consider because everyone, like I said, probably has a GitHub account or not everyone, but a lot of people that are interested in software and interested in open source.
[JM]: And not everyone has a Libera Pay or a Tidelift account.
[JM]: And so that does kind of create the same kinds of network effect problems.
[JM]: So those are tricky things to solve.
[DJ]: This is a tricky situation in general.
[DJ]: There's a lot of analogies between this like, hey, GitHub is doing a thing that we don't like, so let's get off GitHub, to the conversation we had recently about Substack.
[DJ]: And it's a tough bargain to be like, look, the reason people use these centralized systems is because they tend to be popular and they make things like network effect easy.
[DJ]: And so the problem of going somewhere else to stand on your principles is that now no one knows you exist and they can't find out easily.
[DJ]: And that's too bad.
[DJ]: I do want to, and I don't do this often.
[DJ]: I'm not a big fan of devil's advocacy.
[DJ]: I'm more a fan of sympathy for the devil.
[DJ]: That was a music joke for the zoomers in the audience, but to play devil's advocate for a moment.
[DJ]: Why now?
[DJ]: When people go like, hey, I heard that GitHub is moving under the AI branch of Microsoft, so we got to get out of here.
[DJ]: Well, I have some bad news for you.
[DJ]: Copilot already exists.
[DJ]: So that means that Microsoft presumably has been training a large language model on your code for years already.
[DJ]: So what does this change exactly?
[DJ]: And also, by the way, most of the code on GitHub is licensed such that I'm not sure why training a large language model on it is a problem, since most open source licenses say, yeah, take my code and do whatever you want with it.
[DJ]: Look, I know like I know there's lots of nuance there.
[DJ]: It just this does feel to me a little bit reactive.
[DJ]: And you made the point that people have been saying, hey, maybe get off GitHub for a long time.
[DJ]: And that's fair.
[DJ]: I'm not saying people shouldn't get off GitHub, but it's a little I don't know what.
[DJ]: It gives me weird feelings sometimes when people act kind of like a school of fish where like one particular thing happens and people go, oh, we have to change everything now.
[DJ]: I'm not sure that's true.
[DJ]: Like there's the concept of the straw that breaks the camel's back.
[DJ]: I've never really understood why that's the metaphor we use, but like I was unhappy with this.
[DJ]: I was starting to get unhappy with this in general.
[DJ]: And then one final event pushed me into action.
[DJ]: It's like, yeah, okay, fair enough.
[DJ]: But I guess in this case, it doesn't feel super compelling to me why we would give up all of the, as we've said, advantages that we get from having code on GitHub and
[DJ]: merely because Microsoft appears to be continuing to do a thing that we already knew that they were doing and that I'm not 100% sure why we object to?
[JM]: I don't find it too surprising just with the general concept of like, okay, I've had it, right?
[JM]: Like we have all had this experience, right?
[JM]: Where you experience something that you find unpleasant for some reason,
[JM]: You let it go.
[JM]: It happens again in a different form.
[JM]: You let it go.
[JM]: And then at some point you just decide, you know what?
[JM]: I'm done.
[JM]: Like this is something that we can all relate to.
[JM]: So I don't think there's anything wrong with this concept of like, okay, you know what?
[JM]: That's it.
[JM]: This is, as you said, the last straw for me.
[JM]: I think it is worth asking the question of, as you said, okay, well, why now?
[JM]: But at the same time for everyone, the answer is going to be different because for every person, it's just individual, right?
[JM]: Like some person might be like, yeah,
[JM]: Whatever.
[JM]: Yeah, this is unpleasant, but it's been going on for a while.
[JM]: And I just don't want to bother thinking about this or I don't really care or whatever the reason isn't for other people like, oh, no, that's it.
[JM]: This is like literally the line in the sand and I'm gone.
[JM]: And maybe people that are fine with it today, next year, there'll be some other thing in the news and they'll look at it and be like, okay, that's it.
[JM]: Now I'm gone.
[JM]: And so I feel like this is somewhat natural just in terms of, I don't know, humans, life.
[JM]: But the question that you posed of like, why would people care because it's open source?
[JM]: I don't know.
[JM]: I feel like the open source contract up until now has been that open source is for more or less people, right?
[JM]: You are giving the license to people and yes, to also organizations that are companies of people, right?
[JM]: And you are telling them, here is the contract.
[JM]: This is what you can do with it.
[JM]: And the concept of LLMs and rampant scraping of the world's information, including source code, is sort of not incorporated, right?
[JM]: It's like it wasn't factored into this contract when the idea of open source came around.
[JM]: And I can understand how someone might say like, yeah, I was fine with this before.
[JM]: but I don't feel particularly good about companies like OpenAI and Google and Facebook and Microsoft ingesting all of the code that I write for free as a volunteer and them profiting from that.
[JM]: Like I can understand why someone might find that distasteful and decide that, you know what, I would rather put this code somewhere else where they either can't do that or it becomes more difficult for them to do that.
[JM]: So I don't know.
[JM]: For me, I can relate to folks that would feel uncomfortable.
[JM]: Just speaking for me personally, if I have the ability today to push a button and know that not a single line of code that I write is going to be ingested by Facebook and used in some way, I would push that button right now.
[JM]: So I can really understand why people feel the way they do right now.
[DJ]: I understand it as well.
[DJ]: And look, I haven't reached a conclusion on this at all.
[DJ]: But in the larger case of like, there's all this stuff, there's lots of things going on in the world that I don't like, that stand against my values, in order to move through life in a sane and healthy way.
[DJ]: And I apologize that this is kind of a big, blowing the topic way out past GitHub, but I'll bring it back in.
[DJ]: Like,
[DJ]: There are so few things that are under our control as individuals.
[DJ]: I think one of those things is the fact that someone else is going to profit off your labor in ways you don't like.
[DJ]: It is really frustrating, especially for people working in the systems in which we exist.
[DJ]: It's really rough to like struggle to pay your rent.
[DJ]: Well, that person over there indirectly takes the work that you did and buys themselves a new hundred million dollar yacht.
[DJ]: But unfortunately, the button you just described doesn't exist.
[DJ]: And there's probably nothing we can do about that sort of inequality.
[DJ]: I'm not saying we shouldn't try to do things about it.
[DJ]: But I am saying that everyone has to choose their line in the sand and you have to figure out what your values are and live according to them.
[DJ]: But what I'm in the process of working out are things like how hard am I going to try to prevent big tech from taking advantage of me?
[DJ]: And maybe I'll do it to some extent.
[DJ]: But again, I think it is just the thing where like I would rather if I had an open source project and it's popular and it's important to me that it's vibrant and receiving lots of contributions and lots of people know about it so they can use it and take advantage.
[DJ]: And the best way for me to do that appears to be to host it on Microsoft's platform.
[DJ]: But that means that Microsoft is going to train large language models and ultimately make billions of dollars and then their shareholders will get even wealthier.
[DJ]: Maybe my best bet to achieve my ends in the world is still to host my code there.
[DJ]: It's a tough decision, but I guess that's what I'm wrestling with when I bring up these questions is like the challenge for everyone is like, how do you live according to your values without, well, maybe without losing things that are important to you.
[JM]: Yeah, and that's a very individual decision that everyone has to make for themselves.
[JM]: I think that for a lot of folks, there isn't like a mountain of contributors or sponsorship income.
[JM]: Like that kind of open source project is extremely rare.
[JM]: Most open source projects just languish in terms of outside contributors, the vast majority of them.
[JM]: or they get small amounts of contributions here or there and zero income.
[JM]: So I don't know that there's a whole lot being left on the table in terms of moving away from GitHub unless you are in that position where you do have potential or existing large contributor base.
[JM]: So I think for a lot of projects, it actually could very well make sense to not use GitHub.
[JM]: At least you're not losing anything, I would argue, by using something else.
[JM]: And the idea that you posed a moment ago, like, okay, well, I don't really know how I would even prevent, you know, these companies from ingesting all this stuff.
[JM]: You can create an account at Codeberg today.
[JM]: And because as you said, Git is very portable, push your repository to Codeberg.
[JM]: And they have already implemented proof of work based countermeasures to prevent generative software companies from ingesting repos that are hosted at Codeberg.
[JM]: So if that is something that aligns with your values, as you said, that's a decision we all have to make, then that might be a good place for you.
[DJ]: That's interesting to know because my next potential objection was going to be, like, do you really think that just moving your code to a different place on the public internet is going to prevent these companies from slurping it up?
[DJ]: But fair enough that there are countermeasures.
[DJ]: And you make a good point about the fact that the vast majority of open source projects are mostly things that, like,
[DJ]: One person did and then put on the Internet and they're like, hey, dudes, if you think this is useful, I'd love to share it with you.
[DJ]: They're not really reliant on the infrastructure that you get from GitHub.
[DJ]: I'm curious.
[DJ]: And if you want to defer this one because you're still thinking about it, please feel free.
[DJ]: I'm really curious where you are, where you would stand with a repository like Pelican, where it's a relatively popular tool, both for users and for contributors.
[DJ]: Where's your thinking on this?
[JM]: This is a topic that was very much on my mind when this news came out.
[JM]: And my inclination at this point is to take a wait-and-see approach as it relates to Pelican because it does have a large number of contributors and a much larger number of users who would potentially be impacted by a move to something else.
[JM]: And I wouldn't want that for the community.
[JM]: And that's why I talk about using other smaller repositories and other projects that I maintain that have a drastically lower level of community activity as test beds for maybe using one of these other alternative code repository solutions.
[JM]: But I do hope that there will come a day where these alternatives address some of the potential downsides to switching away from GitHub.
[JM]: so that it at least becomes a wash, right?
[JM]: Where it's like, okay, well, setting aside the personal values, setting aside any potential moral or ethical questions, I am ambivalent in terms of leaving it where it is or switching away to something else.
[JM]: The pros and cons are a wash.
[JM]: I would love to arrive at that at some point, because at that point, well, as soon as you start factoring in the personal values and other considerations, well, then the choice becomes easy.
[JM]: But I think that will take a while.
[JM]: And until then, at least for that particular project, I'm going to just wait and see how things pan out.
[JM]: But I am excited to give this a try with some of these other repositories and see if some of these alternatives could be a good fit.
[DJ]: Radical dude.
[JM]: All right, everybody.
[JM]: Thanks for listening.
[JM]: That's all for today.
[JM]: You can find me on the web at justinmayer.com and you can find Dan on the web at danj.ca.
[JM]: Share your thoughts about this episode via the Fediverse at justin.ramble.space.