Remember when homepages used to add snowflakes falling during the winter season? Modern web is too boring.

@nina_kali_nina

Agreed.

*wistful sigh*

At least we can still resize unstyled <textarea> to our hearts' content.  

Hat tip to the brilliant @mcc for this WILD tale of the early days . . .

https://cohost.org/mcc/post/325362-a-one-person-oral-hi

#webDev #earlyWeb #geoCities

A one-person oral history of Geocities HTML Chat

Geocities HTML Chat has been forgotten by the world. It is possible I am the only one who remembers it. I only half remember it. It was my first Internet community. Here is what I remember. Background 1. Geocities was a formative website for the older millennials who are just barely old enough to remember when the "web browser" was introduced, but not old enough to be adults when it happened. It wasn't a very good site. Geocities was the first, or at least biggest, of the "free web hosts" of the early Internet. Anyone could sign up for a pittance-small (5 megabytes? 10 megabytes?) web directory, and FTP up their HTML and GIF files and Geocities would host it raw and unaltered. Geocities sites had the ugliest URLs on the Internet. Each URL consisted of the user's "city", followed by a four-digit number Geocities assigned. The "cities" were broad categories indicating the type of content your site would contain, like "SiliconValley" for computers, "WestHollywood" for LGBT topics, or… "Tokyo"¹. The categories seemed ill-thought-out and lumpy. The existence of "NapaValley" seemed to indicate they believed there would be roughly as many sites about wine as about all computer-related subjects combined. These "cities" seem to have been part of a very vague desire to conceptualize Geocities' very basic service (HTTP file hosting) as in fact a collection of communities. The people who made Geocities had some kind of sense the social web would, or could, someday exist. They could smell it, they could feel the heat of the thing in the room with them. They just had no idea what it would look like. Leaping from flat file hosting to something that looks like "social" "media" requires interactivity, and that was just not really available in webtech at that early point. Cross-page communities were things stitched in by hand (like the "webrings" the Mastodon crowd loves so much; these littered Geocities and invariably consisted of 50% dead links). "CGI-BIN" existed, on some sites (not Geocities), but all it could do was generate new flat files, so people largely only used CGI for the most basic purposes: "Guestbooks" where you could leave your name and a bit of text which would be appended to the HTML of the guestbook page; mindlessly simple "counters" which would generate on each load a GIF containing a number one higher than the last one loaded, showing how many people had visited that page. If you're old enough to remember this time, you're kind of nodding off at this point in the post. You know all this. But you probably did not know about Geocities HTML Chat, and if you knew it existed and what it was you probably would be actually shocked. I'm not sure you're even going to believe me this was a real thing that existed. ---------------------------------------- The thing itself 2. Geocities HTML Chat was the only "community" feature I remember Geocities ever attempting other than the mere fact of the "city" names. Most Geocities users didn't seem to know the chat was there. The concept was simplicity itself. Geocities HTML Chat was, from a technical perspective, a guestbook with a small twist. There was a chat for each of the "cities" (my home was SiliconValley, I think?). Each chat used (of course) frames to display two smaller webpages. One frame above (I don't actually remember, but let's say it was above) was a thin band containing a CGI input form. The lower frame was larger, and scrolled freely. This frame used a server-side trick; the server would tell your web browser it was sending it an infinitely long web page (or maybe it just claimed it was some impossibly large size, a gigabyte or something). It would send it the opening <html>, and then it would hang. It would keep the socket open. When a user in the chat room submitted a line to their CGI box, every user would simultaneously receive a new line on the bottom-frame open socket (which their web browser sincerely believed an ordinary webpage was actually really loading into, just very slowly): > <br><br>Nickname: Chat Text And so, a chat room. Any user hits "submit", what they submitted appears on all our screens at once. Cute trick, you're thinking. They've just faked a dynamically loading chatroom without using any dynamic HTML features at all. But you've missed the important part. When a user submits text, it is forwarded to everyone's chatscroll frame unchanged. There was no input sanitization at all. 3. Think like a Cohost user. Imagine the most extreme way you could use, or abuse, a chat room in which anything you say may contain unsanitized HTML. Whatever you're thinking, we did it. On GeoCities HTML chat you could use raw HTML in your chat posts. You could use raw HTML in your nickname. Most people did. Most users' nicknames contained images. You could do anything. 4. goodmorning.gif [https://staging.cohostcdn.org/attachment/58e576ee-a104-40b0-8172-667de264db95/goodmorningX2.png] [https://staging.cohostcdn.org/attachment/e86a080e-777b-44d5-bb2c-92bc256e3b44/Dodongo.png]I had a particular trick I liked. I'd figured out I could align=right an <img> and it would "float" right and text would flow around it. So I had a little html block I'd occasionally begin my chats with that would float right a GIF I liked (hosted, of course, off my personal website; it was the System 7 "Finder icon" of a one-piece Macintosh, on a green hill, with a mushroom cloud erupting behind it) and that GIF would link to my personal webpage. It was normal (and acceptable) for people to post recurring, banner-like HTML adverts of their announcements and websites; Geocities HTML Chat had no history, there were no logs, so repetition was the only way to make something seen. This was my version of that, but it was subtle, and could fit right into whatever else I was saying at the time. I could have put the float-right GIF in my nickname, of course, if I'd wanted, but that would be overbearing. 5. Because inputs were unsanitized and HTML was allowed, a semi-common problem was that people would open HTML tags and forget to close them. A stray < would be no problem, that would only result in the rest of that person's chat being deleted up to the next <br>, but if someone said <i> but forgot to (or typoed) their </i> then the chat would simply be in italics, everyone's chats, until someone posted a </i>. Flubbing tag closure was seen as an embarrassing faux pas, no worse, and moderators and experienced users simply saw it as one of their community duties to notice left-open tags and post a corresponding close tag. This did, obviously, leave room for griefing, but less than you'd think, because this was the HTML 2.0 era and there simply wasn't enough in the HTML standard yet to allow for truly major abuses. CSS didn't exist yet. About the worst someone could do would be to use an "obscure" tag, <abbr> or something, which would result in a visible formatting difference but leave the high level users confused as they spammed various close tags without guessing the right one. I think occasionally it would occur to someone to post a <!-- comment open, which would entirely silence the chat until someone figured out what had happened. But such abuses were always easily identified and quickly dealt with, the user would be banned and that would be that. In a worst case scenario you could always just reload the page, erasing the history and any stray formatting, and in the normal case, you just got used to the idea that sometimes, the chat would simply be purple for a bit. 6. I was a regular on the chat for what I remember being years, and I made any number of friends there, but I actually only remember one specific user from that entire time, and that was "MC Skat Kat". MC Skat Kat, as you may know, was Paula Abdul's cartoon boyfriend from the music video for "Opposites Attract", not one of my favorite Paula Abdul songs. Animated GIF [https://staging.cohostcdn.org/attachment/170df98b-aeb7-4a2b-8dbc-34323840b5d2/500173_600.gif] MC Skat Kat (left) and Paula Abdul (right). Note that this animated GIF is modern, and could never possibly have existed in the Geocities HTML Chat era; it's simply too large. At 280 pixels tall it is over half the height of a 640x480 monitor, and the file itself clocks in at a simply unmanageable 995 kilobytes(!). MC Skat Kat is a literal cat, and also a rapper. Our MC Skat Kat posted from the persona of this fictional MC Skat Kat, regularly referring to Paula Abdul as his girlfriend. Everyone simply accepted this. I don't think this was a furry thing, or rather, the human behind MC Skat Kat probably didn't at that time have the language of "furry" or the "furry community" available to him. He had simply decided that he was MC Skat Kat, and everyone went along with it. His nickname contained, if my memory can be trusted, two images of MC Skat Kat, to the left and right of his specially-formatted name, taking up maybe a third of an average screen. MC Skat Kat was a community pillar, and the most active among the volunteer moderators. 7. I'm only just remembering this as I'm typing, and the memory is so vague I'm not entirely certain this part is real, but this is what my neurons are telling me: When a moderator kicked someone from the room I remember there being a big <h3> USER "NICKNAME" HAS BEEN KICKED FROM THE CHAT. announcement. There was of course nothing stopping you from simply, at any point, saying "User 'nickname' has been kicked from the chat." in h3 text. It wouldn't have any effect, but you could do it. I don't even think the mods cared. 8. Geocities HTML Chat puttered along in its gleeful, endless, rainbow-colored utter chaos until one day, all at once, the end came for it, without warning and very rapidly over a 48-hour period. You've probably already guessed the reason why. JavaScript. When Geocities HTML Chat was created, JavaScript did not exist. But then there came a time JavaScript existed, and then inevitably, there came a day that for the first time someone thought to use JavaScript in the chat room. My memories get a little fuzzy about exactly when this happened. What I think I remember was that there was a period that JavaScript had been introduced but lay dormant, and people only started to pay attention and learn it once Netscape 4 landed and "Dynamic HTML" got introduced. DHTML is now such a basic concept of the Internet you have to specifically explain there was a time it didn't exist; the concept of the DOM, and JavaScript being able to alter and rearrange a document structure after it has already been rendered as opposed to appending all at once as brutal one-off document.write()s. What I think I remember was that when the event happened I had some awareness I was partially immune to the consequences due to me staying for a time on Netscape 3 (due to Netscape 4 being slow and me liking a particular 3.0-exclusive mod I'd installed that transformed the browser into "Xena Navigator [https://xenafan.com/mac/]" and replaced the "loading" icon with a spinning Chakram). (I was literally twelve). DHTML, despite being practically useless in its early incarnation due to Netscape and IE offering mutually incompatible implementations, would have been really dangerous, not just because of its intended capabilities but because in those early DHTML browsers it was incredibly, unbelievably easy to find ways to use DHTML to make the browser crash. And as any modern programmer knows, if you can find a way to remotely crash a program, the chances are good you have a handle on a way to remotely execute code. I'm not sure though if Netscape 4 actually had been released when the event happened; that would have dated the event I'm about to describe to 1997, whereas honestly it might have been closer to 1995. But whether this was 1995 or 1997, and whether I was using Netscape Communicator 4 or Xena Navigator 3 at the time, doesn't really matter to the story. Even Netscape 3.0 supported alert(). And in those days, there was no way to escape a while (1) { alert() } loop except to force quit the browser. What I definitely remember is that one day, sitting in the chat, somebody posted a JavaScript alert(). This appeared once or twice more over the course of an evening. I don't specifically remember if I myself encountered someone putting alert() in a loop, but sometime that evening in one of the "cities" someone must have tried it. Within 24 hours of that first alert() being posted, Geocities HTML Chat was gone. Geocities simply removed it from the Internet. We had no indication what was happening, nowhere to go for news, it wasn't like there was a forum somewhere we could switch over to. The chat was our one way of reaching each other, and it was gone. About 48 hours after the takedown, the Geocities chat URL suddenly went back up, this time hosting a completely different, Java-based chat app that had clearly been set up in an incredible hurry. We were devastated. The Java applet was just not the same. It not only lacked the Godmode formatting capabilities of the old HTML Chat, it had no formatting at all. And it was slow, and clunky, and flickered constantly, because it was a Java applet. But Geocities was indifferent to our complaints. What is clear in retrospect is that Geocities probably literally did not have the ability to fix the HTML chat. Easy as it is to forget today, "internet companies" and websites in 1995-1997 were not by nature software developers. Many companies that ran websites probably had no software developers on staff at all. Whoever originally wrote the obviously tiny UNIX C program that must have powered the HTML chat— take in HTTP POST on socket A, push received bytes directly to sockets B through Q, do nothing else— probably no longer even worked at the company, and if they did, they probably lacked the technical skill to make the program any smarter than it was. Sanitizing HTML input is not trivial, and the best practices for it weren't developed yet then. Geocities did not actively maintain, and probably at an executive level did not even understand, this thing that they were hosting, until one day they suddenly discovered they were hosting a chat app where any griefer could at any time irrecoverably lock up every user's web browser. So they did the only thing they could do, which was to download or license as quickly as possible an off-the-shelf chat solution, which of course was not going to be anything like Geocities HTML Chat because nothing, before or since, has ever been like Geocities HTML Chat. No one would ever create something like Geocities HTML Chat on purpose. It's simply too bad an idea. I don't know how long the Java-based Geocities Chat endured, or what if any community it formed. My community was dead. The very few of us who could get the Java chat to run at all met up in the new SiliconValley room over the day or so after the relaunch, said our tearful goodbyes to each other, and departed. It was over. I took up IRC. 9. What, if anything, to take away from this? Geocities HTML Chat changed my life. I'd used BBS-like communities with message boards before, I had a web page (not on Geocities) before I found the chat. But this was the community I imprinted on. It was my first experience with the Web as something immediate, realtime, where a web page meant being in a place, with other people. It got me used to a mode of being online as an ever-flowing stream you dip in and out of, where you simply lay back and let a world wash over you. But more than that. As a community chat app, it gave me an entirely unrealistic expectation of user freedom that nothing that followed has ever lived up to. On Geocities HTML Chat, every user was a god. The powers an individual user had there were not verbs granted by the app, the power was ours, inherent, we could reach out and reshape the matter of the place itself without limitation. Other than kicking (terminating a connection) there was nothing the site administrators could do that we could not, in that place. There is some very small way that every website, or online community I've used since has been, a little bit, a disappointment. I tasted true freedom, once, and BBCode or even Cohost's security-boxed HTML passthrough, however generous, cannot live up to it. Someone once taught me that the proper form of the Internet is a thing where each individual person can do anything, up to and including eventually destroying the space itself. When I use, or design, online applications, I am dissatisfied with anything other than total scriptability. I dream of Twitter clones with LocalStorage-sandboxed user JavaScript and arbitrary server-side metadata storage that would let you design secondary apps attached to profiles, embed Twine games in individual posts. I look at VRChat or Second Life and all I see is the limitations in the sandboxed scripting, the points where a VRChat employee could write a tiny AI chatbot to follow you around but the end user with their tinkertoy primitives cannot. I develop anything at all for the modern Web and all I can think about is the variety of things a native application can do with ease but Apple denies me in my web-sandboxed jail. Within me rages a tiny, twelve-year-old god, now squashed into human shape, unable to comprehend where its powers have gone, and nothing less than everything is satisfying. ¹ "Tokyo" was the only Asia-related category; either they thought no one would be talking about Asia unless it was to talk about anime, or they assumed everyone talking about Asia-related subjects would be happy condensing under "Tokyo". Note of course there would be absolutely zero websites by actual Japanese users in the Tokyo community, since those users would be using geocities.jp, which had its own twenty "cities" and managed to survive a good nine years longer than geocities dot com, sunsetting in 2018 to .com's 2009.

andi on cohost
@dusk @mcc thanks for sharing the memoirs! It reminded me of my own experience with the Russian version of this, called Narod ("the people"), running a similar service from 2000 to 2009. It had no wonky chat, though, just good old guestbooks
@nina_kali_nina @dusk that is very interesting to hear about
@mcc RuNet was a very interesting place, lagging behind the UsNet due to high popularity of FidoNet. The events of the Soviets falling were translated over FidoNet as one of the first-party news source! The www part of RuNet was incredibly fragmented at the end of the 90s still, perhaps because an average web admin had to support three versions of a website: Unix version with KOI-8 for Cyrillic, MacOS version with MacCyrillic, and Windows CP1251. Some would also host at least one more version, for example DOS/Arachne with CP866. Most websites had a splash page on the main allowing to select the encoding!
Then Yandex has happened in 1997, bringing Russian language search to the web (your search engine must understand Russian grammar to search Russian texts, otherwise you'll miss "оптовый склад зелёного горошка" while you're looking for "зелёный горошек купить оптом дёшево Саратов"). Circa 2000 they started offering 5MB of pure static hosting+a guestbook for free. That spawned endless communities!
@mcc then somewhere around early 00s the Fido finally started to see an exodus of people to www - no doubt, thanks to free mail at mail.ru and free blogs at LiveJournal. Fido had a bit of resurgence around 2007, but it mostly stopped being active at all by 2015.
Curiously, Russians have avoided the Facebook curse, and instead embraced an embarrassment of a social network called Classmates. Older generations to this day prefer it to a hip Facebook clone you likely heard of, called VK, that is #1 Russian social network. The reason is it offers WordArt style stickers with glitter!

@yottatsa as an early-ish web hoster and long time runet user, do you remember any more fun stuff about the early Russian segment of www?

@mcc

@mcc @nina_kali_nina the most notable thing i remember is the broadband network hyper-locality, even around late 2000s

most of the networks in my hometown were growing out of large LAN, all of them were ethernet/Cat5-based, IX weren’t fast, and uplinks even to the rest of the country were scarce and expensive

as a result, lots of media were pirated on countless local shares and ftps, and there was a huge market for infra-city CSPs (e.g. as44128 i was working for)

@mcc @nina_kali_nina ADSL was not widespread because of very old POTS infra, and i only got one because my parents home was a new-built, and was connected to a “brand-new” digital exchange. it was mostly a thing only in moscow

also, BRAS/PPPoE wasn’t widespread in those huge LANs, as the big-iron was prohibitively expensive. most of the traffic was routed with home-grown BSD boxes, and ISPs were inventing their ways to authenticate users in the network

@yottatsa @mcc There is a memoir post from 2021 by someone on a Russian IT blog platform https://habr.com/ru/companies/macloud/articles/552168/ and it has some cool trivia:

> In Runet since 1996 there was a portal Halyava.ru, where it was possible to place a home page of no more than 512 kilobytes. FAQ said:

>> Why do you need more? If your page begins to weigh more than 512 kilobytes, the question arises: why make such ‘heavy’ graphics?

> The company offered an address like www.halyava.ru/ваше-имя, and overloaded the page with advertisements. In fact, the user's site was displayed in an embedded frame, at the top of which the hoster unrolled banners and placed a link to its own service. It is noteworthy that at first Halyava.ru did not have the ability to upload web pages via FTP: instead, the data was transmitted to the server via e-mail, and instructions were sent to the user via e-mail.

> The page lived on Halyava for two months after the server received the last command from the user, and then disappeared without a trace.

Веб на заре Рунета. Как создавали и где хостили сайты в 90-е

Хоумпейдж мой, домашняя страница готова. Сайт я свой доделал, бабуля! Удивительно, но я совершенно не помню день своего знакомства с интернетом. Это определенно был 1996 или 97-й год, но сам момент...

Хабр

@yottatsa @mcc

continued:

> The most popular web services at the time were guestbooks and chat rooms, and the most common language used to write CGI scripts was Perl.

> Access to DBs on free plans was also, understandably, absent as a phenomenon, data was written to text files, which were used instead of a database. Archaic, but the chat on Perl and .TXT safely existed on my site, I think, until 2002, when it was abolished for lack of need.

> Many people at that time rightly thought that there was no money in Runet. I and a couple of my mates made sites for American customers, mainly for small and super-small businesses. In the States, such services were expensive at the time, in Russia - an order of magnitude cheaper. I remember how I was completely stunned by a question from a gentleman from Texas, how many dollars is an hour of work in Russia webmaster. The hell I knew! In Russia in the late 90's people usually were paid for a completed project, and not always. Some students worked for a beer.

@yottatsa @mcc

Comments section is a trove of memories, too:

> aik:
>> In 1997, our city (small) sat on satellite channel 64 plus a backup modem for 28. In 98 the satellite was expanded to 128, and somewhere in 2000 we got a radio relay for 4 megabits

> aik
>> There was a citywide "ezernet" network, and everything big came to that network on hard drives and then got leaked by someone. This went on, probably, somewhere until the end of the noughties - because the first "unlimiteds" were pretty skinny and it took a long time to download some TV show from the nets.

This does confirm the theory of hyper-local networks!

@mcc @nina_kali_nina one of the coolest internet software projects from my hometown was NetProjectJournal: sort of a wiki + blog + forum, with federated feed and remote identities, all in 2005

see https://archive.is/BgzmL (translated from ruwiki)

@nina_kali_nina @mcc Ooh, Arachne, that brings back memories :)
@nina_kali_nina @mcc Ah, the FidoNet. I remember writing uucp-fido gateway, so I could read usenet alongside my FidoNet echo mail.

@dusk @nina_kali_nina @mcc there were less known but somewhat cooler ways to get your web-page running:

coordinating center for the geoTLD (ripn) had option to register free domain in one of the free zones (.pp.ru, .com.ru, .org.ru)

also, some hosting companies had free tiers to host a website on your own domain (usually for ads)