commit a4d22bad505c84f16ac6b0e5f30923c1cfbd373d Author: Nathan Fisher Date: Wed Mar 30 17:18:31 2022 +0000 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..364fdec --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +public/ diff --git a/Config.ron b/Config.ron new file mode 100644 index 0000000..79a5a5f --- /dev/null +++ b/Config.ron @@ -0,0 +1,14 @@ +( + title: "JeanG3nie\'s Capsule", + author: ( + name: "Nathan Fisher", + email: Some("jeang3nie@hitchhiker-linux.org"), + url: None, + ), + domain: "gemini.hitchhiker-linux.org", + path: None, + entries: 3, + feed: Some(Both), + license: Some(CcBySa), + show_email: true, +) diff --git a/content/gemlog/.meta b/content/gemlog/.meta new file mode 100644 index 0000000..dff5382 --- /dev/null +++ b/content/gemlog/.meta @@ -0,0 +1,7 @@ +2022-03-27-vostok.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/vostok.gmi +2022-03-20-re-email-in-fact-its-worse.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/re_email_in_fact_its_worse.gmi +2022-03-16-re-scarlet-www.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/re_scarlet_www.gmi +2022-03-13-packaging-eva.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/packaging_eva.gmi +2022-03-12-on-learning.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/on_learning.gmi +2022-03-07-status.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/status.gmi +2022-03-05-welcome.gmi: 30 gemini://gemini.hitchhiker-linux.org/gemlog/welcome.gmi diff --git a/content/gemlog/index.gmi b/content/gemlog/index.gmi new file mode 100644 index 0000000..14681f6 --- /dev/null +++ b/content/gemlog/index.gmi @@ -0,0 +1,8 @@ +( + title: "", + summary: None, + published: None, + tags: [], +) +--- +### Rust and Zig code, with a side of sarcasm diff --git a/content/gemlog/on_learning.gmi b/content/gemlog/on_learning.gmi new file mode 100644 index 0000000..df6a924 --- /dev/null +++ b/content/gemlog/on_learning.gmi @@ -0,0 +1,32 @@ +( + title: "Re: On Learning", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 12, + hour: 18, + minute: 43, + second: 00, + )), + tags: ["thoughts"], +) +--- +Maria @ tilde.pink writes: +> once kids enter kindergarten, latest in school, there is a set of things that need to be learned, that are deemed very important later on. and so grown-ups try to streamline this into a schedule, a plan, and slap it around the heads of the kids, force them to squeeze through it, because otherwise some doomsday future will apparently happen to them. + +I hated school with a passion at least equal to the people in life whom I have loved. But over time as an adult, I've come to believe that it's only one symptom of a much larger problem. Another quote which has stuck with me since I first read it, this time from Drew Devault: +> it starkly illuminates just how successful capitalism has been in corrupting a broad human understanding of empathy. So, I will spell the answer out: why do we have a system which will, for any reason, deny someone access to food? How unbelievably cruel is a system which will let someone starve because they cannot be productive within the terms of capitalism? + +Indeed, I felt that one deeply. I am not an unintelligent person. I have always been chronically underemployed and generally get overlooked in favor of much less capable peers who seem to have, for lack of a better way of putting it, better social skills. To be more specific, they generally either lack strong opinions or have no problem with not voicing them, and seem to have a much higher tolerance for bullshit. I, on the other hand, lack the capacity to work under a small minded individual who makes bad management decisions without saying exactly what I think of it. This has not worked in my favor. + +I know I'm rambling, but let's stear the threads together a bit. Western society strongly rewards the ability to conform, beginning in school but continuing throughout life. And worse, if you haven't managed to become successful "within the terms of capitalism" by the time you have been alive for a certain number of years you are basically written off. + +When I was young, as smart as I thought I was, I did not understand a few key things about myself. I'm on the spectrum. It runs in my family actually. I joke that it's both a superpower and a curse, but when something interests me I come up for air weeks later with at least some proficiency no matter how blank my slate was when starting. The curse is that I lose track completely of anything else that is going on around me. Well, that's part of the curse. Another part is that no matter how genuine I try to be with people they largely get the impression that I'm always pissed off and can't tell if I'm being friendly or sarcastic. + +What I would love to see is a world where the inability to tolerate the experience of "getting an education" does not preclude one from being taken seriously or becoming employed in a technical field. The term meritocracy has been quite sullied over the years, but I believe it still has, if you'll pardon the pun, merit. + +In the spirit of all of my great rants let me end with Douglas Adams: +> Anyone who is capable of getting themselves made President should on no account be allowed to do the job. + +There's a lot more than politics in that quote IMO, because politics and human nature creap into pretty much everything. diff --git a/content/gemlog/packaging_eva.gmi b/content/gemlog/packaging_eva.gmi new file mode 100644 index 0000000..9f91e3d --- /dev/null +++ b/content/gemlog/packaging_eva.gmi @@ -0,0 +1,20 @@ +( + title: "Packaging Eva", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 12, + hour: 12, + minute: 08, + second: 00, + )), + tags: [ + "eva", + "programming", + ], +) +--- +I've been reluctant to take on packaging my software mostly. Someone made an Arch PKGBUILD of Zterm a while back, and when I contacted them to let them know that a new version was released they promptly made me a co-maintainer and then took themselves off of it. Fun. I don't really enjoy the extra work, as I would rather just write the software. + +Anyway, I broke down and made an Arch PKGBUILD for Eva today. I'll probably upload a FreeBSD binary soon as I do for Zterm and Gfret. diff --git a/content/gemlog/re_email_in_fact_its_worse.gmi b/content/gemlog/re_email_in_fact_its_worse.gmi new file mode 100644 index 0000000..4fa9266 --- /dev/null +++ b/content/gemlog/re_email_in_fact_its_worse.gmi @@ -0,0 +1,31 @@ +( + title: "Re: Email - in fact it\'s worse", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 20, + hour: 19, + minute: 02, + second: 00, + )), + tags: ["thoughts", "email", "programming", "satire"], +) +--- +=> gemini://rawtext.club/~ploum/2021-10-20.gmi Ploum makes some great observations about email. + +I would like to submit that it's in fact worse than that and always has been. Enough so that I don't find the idea of attempting to salvage it feasible. I'd rather starrt from scratch. Let's consider two users and email in it's official implementation. + +User adent@dressinggown.uk sends an (unsolicited) email to user trillian@heartofgold.space. The subject read's "Hey it's Arthur, the guy from that fancy dress party" and he proceeds to try desperately to plead with her to give him another chance. The message gets sent, in plain text, all the way from the UK to somewhere in the vacinity of the Horsehead nebula, where we find Trillian reading her email. By this time, the cost of this message has been amplified a billionfold due to the distance that it has had to travel. Indeed, it is believed that Galctic president Beeblebrox has sent enough unsolicited d**k pics this year alone to deplete the sum total energy output of a small star with an (unfortunately now extinct) intelligent species on it's second planet. This message was accepted by the server without question and now resides on the email server aboard the Heart of Gold. Because that's, as I see it, one of the chief flaws baked into email from the beginning. + +### You can literally place anything that you want onto an email server by sending an email to one of it's users. + +It's this flaw mainly, that I would remedy if I could. Why should you be able to upload files to a server without permission? Because that's what you're doing whenever you send an email. Trillian never consented to receive Arthur's email, yet there it sits in her inbox, right next to an advert for public telephone sanitization from the Golgafrinchan's and several dozen unopened notifications that another user on some social network "liked" her photo. I envision instead, a new protocol, where the receiver get's to decide whether to accept the message. Sort of a "collect call" but in electronic message form. + +In my scenario, user adent@dressinggown.uk types out his message and hit's send. The server at dressinggown.uk opens a tcp connection and performs a tls handshake with the server at heartofgold.space. It then sends a single line containing the subject of this message. From there, the server at heartofgold has three options. If the address adent@dressinggown.uk is in a list of addresses approved by user trillian@heartofgold.space, the server can respond with an Ok status, and the message is transmitted and placed into Tricia's inbox. If the address adent@dressinggown.uk is one which has not previously been dealt with, the server can send a "Maybe later" response, telling the originating server to hold on to the message for now, and then hangs up the connection. The third option is that the receiving server just terminates the connection, because Arthur really did totally blow it and his address has been permanently blocked. Notice that only in the first instance is the body of the message ever transmitted. In both of the other cases no bandwidth has been consumed by transmitting the body, only the subject line, and the full message only exists on the originating server. The server aboard Starship HeartOfGold is about as powerful as a small digital watch, and could make do with a few eight inch floppies for storage. + +Assuming that this is the first message that Arthur has sent, let's see what happens when Tricia checks her mail. + +Tricia has her normal inbox. It's surprisingly clean, because she only has messages in it which she has consented to receive. She has another folder, call it her "request box". In that folder are requests to send messages from not only Arthur, but several other guys she met at that same party. There is also a request from President Beeblebrox, to look at another picture of his d**k. She has purposely left them all "on read" because she just wants to enjoy being in space for a while. There are no advertising messages, because what would be the point? Any spam sent through this system would only consume the resources of the sender, and never reach the intended target. She does have a few other options for dealing with these requests, however. If she just wanted to see what Arthur had to say, without committing to any further contact, she could press the appropriate button and the server aboard heartofgold would open a tcp connection to dressinggown.uk, perform the tls handshake and requests the message that it told the originating server to hang on to. The message is then transmitted. Should Arthur decide to send any further messages the process would repeat. Alternatively, she could hit the "Hell no" button and any further requests from arthur would just receive a hang up. The final option would be for her to accept all from this address, adding it to the whitelist so that all future messages from this address get sent straightaway. + +I actually believe a system like this would in fact be pretty easy to knock together. It would require that the servers do away with the notion of sending and receiving being tasks belonging to separate servers, and instead each server would be both sender and receiver. Technically it's probably not much more complex than Gemini to hack together. Adoption is of course sketchy, as in all new ideas. This has been mostly spitballing, but honestly I think even a half baked idea like this is better than the ridiculously naive protocol that we have in email. diff --git a/content/gemlog/re_scarlet_www.gmi b/content/gemlog/re_scarlet_www.gmi new file mode 100644 index 0000000..b114aa9 --- /dev/null +++ b/content/gemlog/re_scarlet_www.gmi @@ -0,0 +1,32 @@ +( + title: "Re: Scarlet WWW", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 16, + hour: 14, + minute: 38, + second: 0, + )), + tags: ["thoughts", "gender"], +) +--- +=> gemini://gerikson.com/gemlog/gemini-sux/Re-Scarlet-WWW.gmi Gustaf Erikson writes: +> Note that this crap is fractal - text that is coded female (romance fiction, fanfic) is valued less than text that is coded male - blog posts about programming, opinion pieces in big newspapers. Likewise, in the photography forums, the members (mostly male) value wildlife, nature and landscape (and female nudes) above photography aimed at and practiced by women, like wedding photography. + +Before I begin let me say that I do understand the historical reasons for this to be the case. That said, rather than saying that geminispace has barriers in place which raise the cost of entry based on gender, should we not be attacking the notion of roles being gendered in the first place? I am male. During the years that I tried to make a living in photography I shot a number of weddings. I also enjoy cooking, and raised my daughter as a single parent. It's true that I'm a bit of a computer nerd. It's also true that I have a daughter who is a first year computer science student at Boudin University. +> Unfortunately Gemini has multiple filters in place that reinforce this. Please note that these filters do not exclude women entirely - I personally e-know women who are part of Gemspace - but each filter removes some women. + +This is along the same lines. We're assuming that women as a group have less of an affinity for text based communication, are less likely to care about open source, and are less likely to have Unix command line knowledge. And that is a fair assumption, but I would once again prefer to solve the root problems in society that have lead to this than to call out the gemini community as gatekeepers. + +> 1. text-only: see above +I disagree. I've known more voracious readers in my life who were women than who are men. + +> 2. free/open-source focus +I agree that historically there have been barriers for entry to open source which disproportionately impact women. There are groups working on this, and there are projects taking the issue seriously. It's awfully late in the game, but that doesn't make open source itself a bad thing. Open source as a concept was created by humans, who were and are flawed, and this was one of the flaws. It (open source) is in itself a good thing, however, and we should be trying to actively engage more women into that world. + +> 3. lack of hosted services - and those that exist presume unix command line knowledge +Well there is a lot that can be said here. I'm not sure how one would make a hosted gemini service more "user-friendly" without having some kind of web portal, using https, html and javascript. But doesn't that sort of defeat the purpose? I can't see a great path towards creating an interactive control panel for a gemini capsule using gemini itself. Unix tools are probably prevalent here mainly because a) that's what the person running the service uses themselves and b) they haven't taken the time to write something which might have a friendlier user-facing interface. And really, I would once again say that we should be trying to reach a point where there are as many women using the Unix command line as there are men. + +Interestingly, back in the early days of computing there was a quite large proportion of women working as programmers. If one looks at history that trend only changed when big money started changing hands and the occupation of computer programmer became a high paying profession. Those facts are, of course, despicable in what they say about our values as a society and how we historically viewed women in the workforce. But they also clearly show that there is absolutely nothing inherently "male" about programming a computer or indeed being a power user of a computer. I would rather Gemini keep it's current flavor and change our outdated attitudes about gender roles. diff --git a/content/gemlog/status.gmi b/content/gemlog/status.gmi new file mode 100644 index 0000000..9fec081 --- /dev/null +++ b/content/gemlog/status.gmi @@ -0,0 +1,23 @@ +( + title: "Update on Eva and GemView", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 7, + hour: 12, + minute: 0, + second: 0, + )), + tags: ["updates", "eva", "gemview", "programming"], +) +--- +I've been working off and on mostly on squashing bugs and making these projects more robust. There were (and still are) a number of rough edges to smooth over. Things like making sure that the window and tab titles generally always match what is going on, giving the user more visual feedback about what is going on, and reporting errors. Ive added a spinner to the tab labels in Eva, which spins to indicate that a page is currently being loaded. No we set the title to "bookmarks" when viewing bookmark pages. And now when a page fails to load you get an error page instead, indicating the error. + +The error pages are a work in progress right now. I need to go through the potential errors and give a more user-understandable text for a lot of them. Right now we only customize this is two cases, and in all others just print the raw error string as Rust would format it in the terminal. It's made somewhat more challenging due to the way that page load errors are received. Since all network traffic now runs on background threads, we have to send the data from the background thread to the main thread. In the case of errors, Rusts std::error::Error type is not able to be passed between threads (it doesn't implement the send trait) so we first convert it to a string. So we know that something went wrong, but we don't have a nice match friendly error enum to work with. + +I've improved url handling in GemView somewhat. Previously, any url passed to the widget had to include the scheme, ie you could type in "gemini://gemini.circumlunar.space" but not "gemini.circumlunar.space". Now you can omit the scheme if desired, assuming that the scheme is gemini. + +Lastly, for now, I did some work on a module to handle opening file:// url's. It's not active yet, but when it is you should be able to not only open local files but also browse the filesystem, as there is a function to create a gmi document from a directory, with links to it's parent and all of the directory entries. Since gmi is line based, this will not be as rich as what is provided in the typical web browser. You won't get folder and file icons, and there won't be any metadata about the size of files or timestamps. Still, should be useful. + +With the move to threaded network traffic this is close to where I wanted to be before an initial release. So after a bit more cleanup and some more documentation I'm going to do a 0.2 release of GemView on crates.io and a 0.1 release of Eva. Should be sometime later this week, hopefully. diff --git a/content/gemlog/vostok.gmi b/content/gemlog/vostok.gmi new file mode 100644 index 0000000..6606e61 --- /dev/null +++ b/content/gemlog/vostok.gmi @@ -0,0 +1,40 @@ +( + title: "Announcing Vostok", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 27, + hour: 00, + minute: 11, + second: 00, + )), + tags: ["announcements", "vostok", "programming", "rust"], +) +--- +## Some Glasnost +The Space Race and the Cold War ran concurrently for much of the mid to late 1900's. What seems lost to memory unless you lived through that time is that the ultimate outcome was anything but a foregone conclusion for either. In particular, the Soviets took an early and substantial lead in the Space Race, putting the first satellite into orbit, the first man, and achieving the first spacewalk. The Russian people have their own heroes to celebrate from this era, and well they should. + +I grew up in that time during the 80's when the term Glasnost was being bandied about, and even though tensions were high between the US and the USSR there appeared to be hope that our respective leaders were at least interested in the idea of peaceful coexistence. While I don't, overall, think that Reagan was a terrifically great president, I do applaud the interaction between him and Mikhail Gorbechev during this time. Of course, the scientific communities of both countries were always at the forefront of the efforts to acheive not just coexistence but cooperation and sharing of knowledge, in spite of what their respective governments wanted. + +I hate that there is a war in Ukraine right now. That said, I hate xenophobia even more. + +The Soviet counterpart to the NASA Gemini project was Vostok, which ultimately succeeded in placing Cosmonaut Yuri Gagarin into low earth orbit on April 12th, 1961. This was more than ten months ahead of NASA's successfully getting John Glenn into orbit the following February. + +My capsule has been up until now entirely hand crafted, including the index pages and feeds. While I could continue doing so, this is not really sustainable in the long term and will most likely lead to me posting much less than I would otherwise. I don't want this. So about a week and a half ago I temporarily stopped work on other projects and began writing my own static gemini capsule generator, taking cues from Hugo and Zola. In the spirit of Glasnost I've named it Vostok. + +Vostok is written in Rust. I actually began writing it in Zig, but after an hour's work which was less than productive decided to switch to Rust just because I want to get this banged out pretty quick and Rust has a more mature ecosystem. Zig would have been well up to the task, but I would have been writing a lot more of the code from scratch, and with the language still being immature there would have been the issue of long term maintenance as well. I just don't want to spend that much time on this tool. Design wise, Vostok is much like Hugo in that it uses front matter tospecify things like a page's title and publication date. I went with the Ron file format for front matter and configuration just because I find it interesting (Ron stands for Rusty Object Notation and reads much like Rust code) and have been wanting to use it for something for a while. Unlike Hugo, or Zola, or Jekyll, etc. Vostok does not have a "static" directory separate from it's content directory. It will process any gemtext files and just copy over everything else. There's also no development server, as it would truly be overkill for gemtext IMO, and since gemtext does not need massive styling there really aren't templates, either. + +What it does provide though, is a lot of bookkeeping like adding links to the index pages, copyright and license information, optional gemini and atom feeds and the ability to leave pages in draft form until they are ready to be published. Posts and pages can also have tags for categorization, and every tag get's an index page. There's a fair amount of customization possible via "Config.ron", too. The current options are: +* Site title +* Author's name +* Author's email and homepage (both optional) +* The domain and an optional path from the domain root +* The number of gemlog entries to display on the homepage +* Which type(s) of feed to generate (currently only does Atom, but it will have Gemini feeds in the next few days) +* The license for the site (optional) which can be any of the creative commons licenses, or a custom license +* Whether to display an email link on each page + +Vostok has reached a minimum viable state as of today. I'll probably try migrating the capsule over on Wednesday when I have a day off work. While my primary purpose in writing it was to scratch an itch, and to have my own custom tool for this capsule, the code is available on Codeberg should anyone be interested. Right now it's all completely undocumented and I was a complete bastard in that every single error just get's bubbled up to main, but that said I think it should be pretty robust and useful. I have a few ideas for the future, but nothing major. I may implement optionally including an ascii art banner from a file which would then be added to every page, for some branding. Also, currently there is no automatic link generation done for pages other than gemlog posts. But I figure with how easy gemtext is that's probably fine, and it's easy enough to just manually manage that aspect. + +=> https://codeberg.org/jeang3nie/vostok Vostok source code on Codeberg diff --git a/content/gemlog/welcome.gmi b/content/gemlog/welcome.gmi new file mode 100644 index 0000000..67d21a5 --- /dev/null +++ b/content/gemlog/welcome.gmi @@ -0,0 +1,19 @@ +( + title: "Welcome", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 5, + hour: 12, + minute: 0, + second: 0, + )), + tags: ["announcements"], +) +--- +This is the second time that I've had a gemlog. The first was wiped out due to a hard drive failure and it has just taken me some time to get back to it. I've been using Gemini for quite some time, inspired originally by a post that Drew Devault made on the subject. I had around that time forked the Castor browser and added a number of features including tabs and what I though was more pleasing rendering. + +Since that time my coding has progressed quite a ways. My current two projects, GemView and Eva, are both in Rust leveraging Gtk4. GemView is a library, which provides a gemini (and gopher, finger, etc) browser widget for gtk4, while Eva is the browser built around that widget. I think they're useful, and becoming more so all of the time. I'll probably post about those projects here as much as anything. + +That's all for now. diff --git a/content/index.gmi b/content/index.gmi new file mode 100644 index 0000000..2a86479 --- /dev/null +++ b/content/index.gmi @@ -0,0 +1,33 @@ +( + title: "", + summary: None, + published: Some(( + year: 2022, + month: 3, + day: 30, + hour: 16, + minute: 25, + second: 15, + )), + tags: [], +) +--- +{% posts %} +## Gemini related projects I develop + +### GemView +GemView is a browser widget for the smolweb written in Rust and Gtk4. It aims to be for the smolweb what webkit2-gtk is for the large web. Currently it supports Gemini, Gopher, Finger and data url's and will open other url schemes in the system default. Some features of gemini are yet to be implemented, most notably handling input requests, client certificates and Tofu. +=> https://codeberg.org/jeangnie/gemview GemView repository on Codeberg + +### Eva +The Eva browser (as in ExtraVehicular Activity, or Spacewalk) is a Gemini browser built around GemView. It aims to be extremely attractive, relatively simple and nocely featured, with a focus on providing a more polished experience than many of it's counterparts. +=> https://codeberg.org/jeang3nie/eva Eva repository on Codeberg + +## Non Gemini projects I develop +### Gfret +Gfret is a graphical (and cli) tool for creating a fretboard layout template used in the construction of musical instruments such as guitar, bass, or mandolin. It is written in Rust and uses a gtk4 interface. +=> https://codeberg.org/jeang3nie/gfret Gfret repository on Codeberg + +### Zterm +Zterm (pronounced Zed-Term, you heathens) is a terminal emulator written in Zig using gtk3 and vte. It features tabs, split panes and a simple yet highly configurable interface. +=> https://codeberg.org/jeang3nie/zterm Zterm repository on Codeberg \ No newline at end of file