<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2009-04-21:109442</id>
  <title>Roadrunner Twice</title>
  <subtitle>Nick Eff</subtitle>
  <author>
    <name>Nick Eff</name>
  </author>
  <link rel="alternate" type="text/html" href="https://roadrunnertwice.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://roadrunnertwice.dreamwidth.org/data/atom"/>
  <updated>2024-02-14T22:44:23Z</updated>
  <dw:journal username="roadrunnertwice" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2009-04-21:109442:596983</id>
    <link rel="alternate" type="text/html" href="https://roadrunnertwice.dreamwidth.org/596983.html"/>
    <link rel="self" type="text/xml" href="https://roadrunnertwice.dreamwidth.org/data/atom/?itemid=596983"/>
    <title>Busride-rs</title>
    <published>2024-02-14T22:44:23Z</published>
    <updated>2024-02-14T22:44:23Z</updated>
    <category term="computers"/>
    <category term="nick is doing something impractical"/>
    <category term="coding"/>
    <category term="web"/>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">&lt;p&gt;Okay, so I know this is going to shock you, but I've been working on something arcane and impractical.&lt;/p&gt;

&lt;del&gt;I'm in a new band &lt;a href="https://www.youtube.com/watch?v=4BFzRM-dID4"&gt;called Kuwait Grips&lt;/a&gt;&lt;/del&gt;

&lt;p&gt;I made a wrapper for normal HTTP-speaking Rust web apps so their traffic can take an extra round trip through a totally different protocol, before being translated &lt;em&gt;back&lt;/em&gt; into HTTP for the outside world. Specifically, I plan to serve &lt;a href="https://github.com/tokio-rs/axum/"&gt;Axum&lt;/a&gt;-based apps via FastCGI, a protocol that went out of fashion in the mid '00s.&lt;/p&gt;

&lt;p&gt;This probably sounds dubiously useful, but, man, listen,&lt;/p&gt;

&lt;p&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://roadrunnertwice.dreamwidth.org/596983.html#cutid1"&gt;Or don't! Contents: historical background and some technical exegesis.&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;/p&gt;

&lt;h2&gt;Anyway, I Did It!&lt;/h2&gt;

&lt;p&gt;Here's &lt;a href="https://www.youtube.com/watch?v=1OIrQsrYVds"&gt;a little 3m demo I recorded&lt;/a&gt; when I got my initial proof-of-concept working. If you know anything about deploying a self-hosted app in the 2020s, it will shock and scandalize you.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/1OIrQsrYVds?si=UauB6WxYdPlPZFgr" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;And, here's the code itself, including a demo project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nfagerlund/busride-rs"&gt;nfagerlund/busride-rs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I found a &lt;a href="https://github.com/TheJokr/fastcgi-server"&gt;FastCGI server library for Rust&lt;/a&gt; (I'm SO curious about why the author made this, but yeah it's very precisely what I needed) and put together a server loop that translates between the normal HTTP that an inner app understands and the FastCGI protocol that Apache is willing to accept. As long the binary you build knows how to start up in the weird environment that classic FastCGI provides, you can just install it, drop in an &lt;code&gt;.htaccess&lt;/code&gt; file, and wander off to go do something else.&lt;/p&gt;

&lt;p&gt;At the moment, it's Axum-specific and has to be built into your app as an alternate server mode. In theory it ought to be possible to make a fully generalized wrapper that can spawn &lt;em&gt;any&lt;/em&gt; program as a child process and proxy real-actual HTTP to it, but that's more work than I want to do on this; at the moment, this should work fine for me.&lt;/p&gt;

&lt;h2&gt;So... Why??&lt;/h2&gt;

&lt;p&gt;Here's another interesting point about apps that run in this mode: &lt;em&gt;anyone else&lt;/em&gt; can install them on their shared hosting just as easily, if I give them a build and a README.&lt;/p&gt;

&lt;p&gt;In the last few years, there's been a medium amount of big talk about how we need to re-wild the interwebs; bring back some spirit of curiosity and generosity and chaos that we thought we perceived in the '90s and the '00s.&lt;/p&gt;

&lt;p&gt;In a recent thread that rolled across my Mastodon feed (wish I could remember and link it, but it took a while to percolate before I took it to heart), someone pointed out the short version of what I described above — that hosting has gotten better for pros at the expense of amateurs — and then said: if we think there's a connection between self-hosting and re-wilding the web, then we're going to have to reverse that, because getting out of a tech-dominated world of walled gardens is going to require empowering the type of normal users who could kinda-sorta keep a Wordpress installation afloat back in the day but who have no hope of, say, sysadmining a Mastodon instance.&lt;/p&gt;

&lt;p&gt;I've been thinking about that in the background, a bit.&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=roadrunnertwice&amp;ditemid=596983" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-21:109442:501484</id>
    <link rel="alternate" type="text/html" href="https://roadrunnertwice.dreamwidth.org/501484.html"/>
    <link rel="self" type="text/xml" href="https://roadrunnertwice.dreamwidth.org/data/atom/?itemid=501484"/>
    <title>Evil is a Feature</title>
    <published>2012-08-12T09:29:10Z</published>
    <updated>2012-08-14T20:02:53Z</updated>
    <category term="appropriate icon deployment"/>
    <category term="web"/>
    <category term="facebook"/>
    <category term="technobabble"/>
    <dw:music>Bugseed — Bohemian Beatnik LP (ON MY AWESOME NEW STEREO)</dw:music>
    <dw:security>public</dw:security>
    <dw:reply-count>6</dw:reply-count>
    <content type="html">&lt;span style='white-space: nowrap; text-decoration: line-through;'&gt;&lt;a href='https://skud.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: not sure how i feel about &lt;a href="http://app.net"&gt;http://app.net&lt;/a&gt;. i'm all for paid services to avoid values mismatch b/w users/advertisers/service operators&lt;br /&gt;&lt;span style='white-space: nowrap; text-decoration: line-through;'&gt;&lt;a href='https://skud.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: but the sites i know that do that best (eg. &lt;span style='white-space: nowrap;'&gt;&lt;a href='https://www.dreamwidth.org/profile?user=dreamwidth'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://www.dreamwidth.org/profile?user=dreamwidth'&gt;&lt;b&gt;dreamwidth&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span style='white-space: nowrap;'&gt;&lt;a href='https://pinboard.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/community.png' alt='[community profile] ' width='16' height='16' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://pinboard.dreamwidth.org/'&gt;&lt;b&gt;pinboard&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;) also have a very human/community feel that i don't see here&lt;br /&gt;&lt;span style='white-space: nowrap;'&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;b&gt;nfagerlund&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: &lt;span style='white-space: nowrap; text-decoration: line-through;'&gt;&lt;a href='https://skud.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; I feel that. W/ DW, I was immediately like “seems legit; I can tell who these folk are &amp; how big it can get.” A.n is like Diaspora.&lt;br /&gt;&lt;span style='white-space: nowrap;'&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;b&gt;nfagerlund&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: &lt;span style='white-space: nowrap; text-decoration: line-through;'&gt;&lt;a href='https://skud.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; …by which I mean their story is critically incomplete in some way I can’t yet put my finger on.&lt;br /&gt;&lt;span style='white-space: nowrap; text-decoration: line-through;'&gt;&lt;a href='https://skud.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: &lt;span style='white-space: nowrap;'&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;b&gt;nfagerlund&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; yeah, i get that feeling too. which is not necessarily an impediment to their platform taking off...&lt;br /&gt;&lt;span style='white-space: nowrap; text-decoration: line-through;'&gt;&lt;a href='https://skud.dreamwidth.org/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: &lt;span style='white-space: nowrap;'&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;img src='https://www.dreamwidth.org/img/silk/identity/user.png' alt='[profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='https://www.dreamwidth.org/profile?user=nfagerlund'&gt;&lt;b&gt;nfagerlund&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; ... but does mean that my gut feeling about them is a bit nervous&lt;br /&gt;&lt;br /&gt;Yeah, so &lt;span style='white-space: nowrap;'&gt;&lt;a href='http://twitter.com/skud'&gt;&lt;img src='https://p2.dreamwidth.org/e0caa790ec10/-/twitter.com/favicon.ico' alt='[twitter.com profile] ' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' width='16' height='16'/&gt;&lt;/a&gt;&lt;a href='http://twitter.com/skud'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; was doubting on &lt;a href="http://app.net"&gt;app.net&lt;/a&gt;, and I am doubting on it too, and I don't have much more to say about said putative service at the moment. But I'm posting because I think I finally DID put my finger on what was wrong with Diaspora! And I am very proud of myself for it.&lt;br /&gt;&lt;br /&gt;So &lt;a href="https://joindiaspora.com/"&gt;Diaspora&lt;/a&gt; was meant to be Facebook without all the evil, right? Here's the problem with that: Facebook without the evil is NOTHING. &lt;br /&gt;&lt;br /&gt;Because what the hell even IS Facebook? The answer changes significantly every nine or ten months. I joined it in January 2005 because it was a visual address book to my college, and I needed that when I was looking for a new sublet. Then it turned into a walled-garden email replacement. Then it turned into Flickr for spring break photos, then it finally managed to replace the .plan file, then it was also Livejournal for about a month, then it tried to be Craigslist for a summer, then it was Twitter with less focus, then it was a platform for shitty little games that you pay real money in order to not have to play. Now it's just sort of an undifferentiated mishmash, although it seems to be turning into Tumblr lately, mostly to accomodate George Takei. &lt;br /&gt;&lt;br /&gt;Obviously there is no common thread. Facebook's soul is not in what it does for you or allows you to do. The product itself, the THING that Diaspora tried to copy, is frankly irrelevant. The one thing that has always made Facebook Facebook is that fucking practically everybody you know is on the goddamn thing, and they got there because Facebook was persistently and craftily evil. &lt;br /&gt;&lt;br /&gt;The original short-lived college-scope restrictions on the thing were brilliant, because they made people let their guards down, join up, and put their personal info in. That made it easier for peoples' friends in other colleges to find them, which anchored them further in. All the effort to make it difficult to add people to your normal email address book meant that you were signing in on a regular basis to get/send messages, and would be more likely to see new friend requests and other activity, which would keep you interested. Let's not even get into that Zynga Skinner box. Etc. etc. etc. The only reason you're on Facebook now is because they were evil, and although you'd leave if your friends left, they're all still on there because of the evil. The fact that everyone is there makes Facebook a horrible place most of the time, but it also makes it indispensable, and the fact that you can't properly export your information makes it non-disposable and non-replaceable. &lt;br /&gt;&lt;br /&gt;I don't think the people behind Diaspora ever understood any of that. They thought people were on Facebook because Facebook was a good app, and people actually &lt;em&gt;wanted&lt;/em&gt; some atrocity that was kind of like Tumblr/Flickr/Twitter/LJ/toilet-graffiti/emotionally-abusive-Gameboy except worse. That's manifestly not the case. People want everyone they know in one place, and the only way to give them that is to be evil. Which makes it impossible to replace Facebook with any less-evil alternative -- whatever eventually kills Facebook will win by being either MORE evil, or more SOPHISTICATEDLY evil. And since Diaspora was unable to compete with Facebook, it found itself competing with all the non-Facebook focussed-purpose services like Twitter and Flickr and DW and Tumblr, and it since it was built to be worse than all of them, you probably still aren't using it. Of course, you're probably not using Dreamwidth, either. You probably ARE using Twitter, and I'll be interested to hear app.net's plan for dealing with the fact that 80% of Twitter joined Twitter because all their friends were on Twitter.&lt;br /&gt;&lt;br /&gt;Yes, this is depressing and annoying. Whatever, let me have my moment of explanatory triumph.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=roadrunnertwice&amp;ditemid=501484" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
