I now yearn for the old plain HTML pages with "up / next / previous" links [1]. I used to hate how basic they were, but with "modern" web sites loading so much JavaScript to display static content, I'm starting to see the appeal of basic websites with no styling whatsoever.
I wish more people would hop on board the info train, which is what the "up / next / previous" style of hypertext comes from (thanks again, Richard Stallman).
People love to shit on info because its default viewer uses emacs keybindings and the documentation "isn't geared for professionals" which is another way of saying providing minimum-viable knowledge (AKA non-OpenBSD man pages).
I happen to love info for those very reasons. Software freedom and usability used to mean that non-developers could understand how to use software. Want to learn how to code in Emacs Lisp? An info book on it comes with Emacs. Want to learn the ins and outs of the coreutils? Bash? gawk? Documentation the size of a book comes with all of them as well, formatted and designed to be friendly to people who have no idea what they're doing.
With a few lines of CSS in the head section you can have a blazing fast page that looks elegant as well. This site is one, although I think it is a touch too narrow. Also, headers/footers with a different background color are pleasing.
Agreed, altough I find myself liking websites with a narrow width lately.
I have no data to back this up, but to me, it seems that when people think
about building websites without JS, they completely forget that CSS, or design
are a thing.
I am building a website for a simple API I built for my company[1] that I
thought others might want to use, and while there is no JS, that does not mean
that I just uploaded an unstyled .html file to the root of my server.
While unstyled have their own charm at times, in general, I think a little bit
of CSS, design, and inspiration goes a long way.
I usually use a max-width of 40rem and add 1rem padding for small screens/windows to keep off the grass, as it were. That anchors the width to the base text size so the line length makes basic sense, no matter what the user font settings might be.
Yes, I agree. I don't like the max-width setting; it should use the width of the window that the user has set. Same with font sizes, and usually, also colours. (Sometimes CSS is helpful (if not overused), but for many documents it will be much better to avoid CSS.) CSS is often what makes web pages look bad.
Does your browser have sidebars? You can add sidebars if you want to reduce the width of the document, I suppose. (There is bookmark sidebar, history sidebar, and web developer sidebar; what I think is missing is the table of contents sidebar, which would list the <h1>, <h2>, etc in the current document. Another thing that might be wanted is split-screen mode, I think.) I personally do want a full-screen line of text, although I suppose some people do not want.
One thought is that we could have two mandated versions of every website: (a) the text-retrieval optimised version and (b) the web developer engagement version.
When this idea has come up on HN before it has been met by angry web developers claiming they "would have to maintain two websites" or some such nonsense.
However, consider that no one composes content in JSON, or even HTML. Textual content always begins as readable text. Even if only in the mind of the person creating it. There is nothing to maintain as there is nothing to "develop". All that needs to be done is add the HTTP header and deliver the text.
One of the most popular examples of text retrieval I can think of to illustrate:
I've been thinking of migrating my blog back to text only. When I was a student I kept a "blog" as a list of HTML files that I manually updated. I've been using Wordpress for the past ~15 years and am growing weary of having to keep up with plugin, theme or CMS updates. My blog is not worth this much effort to maintain, I just want a place to share essays and occasional photos. I need time to make the switch, but the simplicity of text only format is attractive.
I wrote a <100 lines of python that takes a nested set of markdown files and outputs a mirror structure rendered as HTML (any file starting with a _ is skipped for works in progress), threw tufte.css on top of it and I have a page that loads in 9ms over wifi and renders so close to instant it's not worth measure.
Has syntax highlighting as well, beyond that I wrote it myself because it let me do exactly what I wanted the way I wanted.
It supports Jinja templates and you can put meta data in the header so you can choose what template you want, override the title etc.
If you don't override the title 10-tricks-to-foo becomes "10 tricks to foo" automatically
I've used that script to write technical documentation as well, I just swapped out the template and everything else stayed the same, in terms of time to value reward it's up there for the most useful code I've written in a long time.
For context/the uninitiaatd, I think of pandoc as the "postgres" of markdown-to-<blessed_format>: you can build your own text-format-converter, but oftentimes you can get 90% of the way there with pandoc, and fill in the rest with custom filters and elbow grease.
To whet your appetite, I have a personal site that checks your boxes, where the build script is basically one long invocation of pandoc and xargs. In my experience and that of others', building on top of pandoc can get you to quite satisfying places and workflows (e.g. https://www.gwern.net/About).
(Also, fwiw, we use it at my place of work for writing versioned technical documentation, as well.)
Great minds, my site is on my real name and I'd rather not connect my user name with my handle so publicly, it's got nowhere near the amount of content yours has though.
In my case there is a certain irony in writing it in Python the lazy way since I'm a full stack dev who writes typescript, js and PHP for work.
Never trust a builder with a finished house I guess applies, I didn't want anything I'd have to maintain.
It might have changed recently, but tufte.css used to behave badly in portrait (say on a mobile phone, or just with a narrow browser window.) Part of the problem is just the design works a lot better in landscape.
It took me a lot of fiddling before I managed to find an acceptable compromise.
If I was going to start again I might consider implementing the margin notes differently. They interact oddly with each other and image captions.
I recently stopped using a static site generator for my personal site [1] in favor of just manually maintaining a bunch of HTML files, for similar reasons. The last straw for me was a nonpassive change to the site generator mysteriously breaking the homepage. Themes are frustrating as well since they either constrain you or force you to spend time figuring out how to shoehorn what you want into the theme. I only post occasionally, and keeping all the pages consistent with each other isn't as important to me as being able to post a page that looks however I want it to with minimal hassle.
I did something along those lines once, but I used https://github.com/susam/mdme as the preamble so I could write the posts in markdown rather than html. The index was an extra line to add links to index.html.
Google's guidelines for HTML5 [0] are surprisingly good and concise. You can omit most closing tags, and even many "structural" tags are implicitly opened. This is a 100% correct and complete HTML5 document:
<!doctype html>
<title>Title of the document</title>
<p>A paragraph
<ul>
<li>First item
<li>Second item
</ul>
<p>Another paragraph
writing html tables by hand is especially pleasurable due to the auto-closing tags. As I see it, modern HTML is so concise that markdown is more of a burden than an aid. In most cases, we would be better off writing html directly than markdown. Maybe the only thing that I miss is that an empty line creates a paragraph tag.
You've touched on a slightly interesting topic. HTML has never had strict parsing requirements, for example, it was completely permissible in HTML4 to leave a tag unclosed if you subsequently opened a tag which could not be nested (as in your example of two <li>s in a row). Containers have always been implicit in most cases, so it's perfectly acceptable to start a table row without having started a table, the parser will start the table when it encounters the row. This is ultimately because HTML is derived from SGML, a markup standard that is visually similar to XML but with very relaxed parsing.
However, HTML4.1 for a time faded in popularity compared to XHTML, which was an "HTML-like" markup derived from XML rather than SGML. XML has significantly stricter parsing rules, for example always requiring full closing tags, trailing slashes on self-closing tags, etc.
XHTML's popularity seems to have been in large part a result of the IE6 backlash. Problems with web standards were widely perceived as a high priority for the web. This was the time period in which people kept putting "W3C Compliant HTML" badges in their footers. Because XHTML had stricter parsing rules, it fit into the general scheme of emphasizing web markup that was "correct" by allowing for strict automatic validation. Because it was XML-compliant it also fit nicely into both the popular-at-the-time "Semantic Web" (e.g. XHTML documents could be validated against XML DTDs/schemas) and dovetailed with browser support for XSLT (in which case a document could be sent to the browser as semantic XML with an XSLT "style sheet" for transformation to XHTML for presentation), which was one of those things that seemed like "the future" for about five minutes. I had done my personal website that way for a hot minute.
XHTML's vogue was somewhat short-lived, while it was a big part of the "web" scene in e.g. 2007, it was largely forgotten the moment HTML5 because available. What seems to have survived from XHTML, though, is a much stricter approach to writing SGML being seen as more or less required. I think a lot of people "grew up" on XHTML, quite possibly unknowingly, and so errantly view HTML itself as XLM with the subsequent parsing rules.
As always, there is often value in being explicit and verbose in markup in terms of maintainability. But in a lot of cases readability and maintainability are not harmed or even improved by saving some typing... as in cases like lists and tables.
That said, a big part of the phenomena is that hand-writing or reading HTML is decidedly out of vogue today, and so in general the readability quality of most HTML on the web is extremely poor, generally a result of it being generated by templating or composable component systems which often abandon basic indentation, as well as by the popularity of frameworks with unusual use of HTML such as non-semantic class-driven CSS frameworks. Of course this phenomena isn't entirely new, FrontPage and DreamWeaver were popular in their day and generated some pretty terrible markup, but it seems to have become more common, rather than less, for HTML to be machine-generated and thus extremely unpleasing to humans.
The only reasonable thing I have found is mathjax.
Otherwise, if you math is just inline latin/greek symbols without 2D formulas (integrals, summations, etc), you can get away with unicode symbols and sub-indices.
I think one of the advantages is that markdown is not just that it is concise, but that it is also somewhat limiting.
If someone worked on a large team and moved all documentation from markdown to HTML, I think they'd quickly grow to become something a lot more messy than your example.
I wrote up a few of my own thoughts[0] on moving away from writing markdown to writing HTML directly. At this point I have a small bit of code to wrap things into an <article> tag include a <header>, <footer> with links to a home page and include some boilerplate like <meta> tags. I don't think I've sacrificed anything in terms of best practices and actually gained a few things in writing more semantic HTML which I think aid in assistive technologies[1]. I actually hope people will "view page source" on my pages anymore -- a big part of getting to where I am has been testing against alternative browsers like eww and w3m.
I've been writing HTML directly for my blog [1] for 20 years [2] and back around 2003 I started to be a bit more pedantic about the HTML I use, so I always (try to) close every tag. About five years ago I set up a gopher server [4] and use it to mirror my blog. I went the easy route and decided to use Lynx to convert the entries from HTML back to text, and ... it looks horrible. Now that the Gemini protocol [5] has stabilize, I've decided I should convert the HTML to text myself, and because I decided back in 2003 to close every tag, it's easy to do (after spending an evening cleaning up a few entries here and there---there are over 1,000 entries pre-2003 that need extensive cleanup though---sigh).
The optional tags make it easier to write, but make it far harder to mechanically process later if need be.
Nice. I went one step further because I don't even want to write HTML. I built my website in PHP to parse plain-text files then sort and display them by creation/modification date or title/category. The only markup in the text files is usually <b>, <i>, and sometimes <a href>. This way I can write in whatever editor I feel like, export as .txt, then scp the file right to my site for publishing. I guess it's like a custom CMS? Either way, it really helps my ability to write for some reason.
If you want text only (especially if it is only ASCII text) and not HTML, consider using Gopher. You can serve them with both HTTP and Gopher, actually. (If you want to accept public comments too, then NNTP is another possibility.)
If you do want HTML (or possibly Markdown), then of course HTML will do. Just use plain HTML (perhaps with a common header and/or footer, added either ahead of time or using server side includes); no CSS, JavaScripts, decorations, etc.
(note that "test_blog_2020" here is a global unique identifier you can customize when you first upload to archive.org. as long as it is available of course)
wow, I love your solution using github
even if you want to migrate of github down the line its still all Jekyll +plugins underneath
Do you know if there is a way to have an automatic directory index page? (i looked around the gitubpages/Jekyll docs but couldn't find a way at first glance)
i.e. What I mean is I would like to throw a bunch of md files into a folder and have a url that outputs the hyperlinked dir listing
thanks for the suggestion, but I was looking for a "zero code" solution like parent. i.e. it would use some Jekyll feature that is running behind the scenes
meanwhile after some googling this may be it (not tested though)
This is great. My only feedback is that, yes you're using text only but please don't shy away from minor CSS changes that can make the site look more pleasant. I have been working my homepage (https://usmanity.com) for years to make it minimal, organized, and still pleasant to look at.
I agree minor CSS changes make sense, and you'll see I've applied some styling for dark mode, use of serif font, maximum page width and minor other things on specific pages.
But I've chosen not to mess with things line text size and line height. More power to the user (agent)! Also, pleasant is in the eye of the beholder and I like it this way.
That was on purpose, the main theme color is RED, the username was made light to shift focus on the problem title instead of users to add friction towards votes biased towards users.
When the users are logged in, the voting buttons get RED and you'll notice less of the pink(Please do give it a try and let me know if it's better).
This is exactly how websites should be. It loads astonishingly fast, page after page, and there is nothing between me and the information.
I built my website the same way, and spent a lot of time shaving milliseconds off and optimising readability. I wanted to create the same sort of smooth, bullsh-- free experience.
Chiming in with Piero Scaruffi's website[1]. I used to read it a decade back and it really hasn't changed that much; the information is plentiful and interesting, the site is fast, and it seems like he nailed down the "static content is all that matters in the end" bit not only way before it became a common reaction to the overencumbered web of today, but also way before the web got overencumbered at all.
I would not call US-ASCII an achievement. A majority of the world's languages (whatever the exact metric might be...) cannot be written using using US-ASCII
Email (SMTP) was defind 7 bit and it took us 2 decades to work somewhat reliably with other languages requiring more characters.
Of course it's parochial. The very name is United States-American Standard Code for Information Interchange. It is an antique standard for teletype machines that can still be read and decoded by everything on the planet. It is as close to universal as anything we have. There is a reason that the first 128 decimal code characters in UTF-8 are US-ASCII...
ASCII is good when it works. Of course, not everything can be written suitably in ASCII, but if it can be, then it should be. As they said, "[it] can still be read and decoded by everything on the planet. It is as close to universal as anything we have."
Being pedantic, the list strikes me as poorly named. Websites listed do have images and other media, the unique trait they have in common is very minimal CSS (for better or for worse).
They tend to use little to no decorative images outside of main content though, which is nice. Not to imply a list like this doesn't have the right to exist.
This is right. The list started with a handful of sites that were (almost) text-only, such as the NOS, CNN and NPR news sites, but as submissions came in it expanded with not quite text-only sites that still espoused many of the same values.
I intend to further curate the list soon and give proper text only sites a more prominent place. Retro, minimal, and text-only sites aren't quite the same.
The Wiby search website is so cool! There is something really comforting and nostalgic about text-only websites. In one of the searches I came across Project Gutenberg Australia. http://gutenberg.net.au/
Thank you for sharing this.
I should probably email Sijmen but I've been using https://engineeringblogs.xyz/ to help me keep track of hundreds of product/software development blogs and am keeping it as plain as possible.
One nice thing about this is that you can use most of these sites in obsolete devices — I have an iPad 3 with a glorious, bright retina screen, entirely bricked by its inability to update to the latest iOS . Every day more and more of the web is breaking on it.
This, though: http://wttr.in, will never break. I'll tape my old iPad to the fridge and use it as a weather screen.
The old mobile interface is entirely text, it removes the thumbnails present in the i. subdomain (also available with a trailing /.compact) -- the fact that there are so many different interfaces is a little baffling to me, but the text-only version is the only one I can stand to read: https://www.reddit.com/r/apljk/.mobile
I'm not usually a pedant, but something about this drives my brain totally insane. None of these websites are text only. Alternatively, all websites are text only. Several of them even feature that unholy technology which must be struck from the Earth according to HN: javascript. What is the line being drawn here? You might as well call it "Websites that load very fast and have a very plain aesthetic that I enjoy".
If I wanted a clear definition of a text only website, I'd say a text-only website is a website which is served with a Content-type: text/plain header. This is far from that.
Yeah, it's not text/plain. The list has also strayed a bit from what I originally intended, which wasn't so much about loading quickly but more about primarily sticking with marked up, hyperlinked text.
I do intend to reorganise the list to focus on those kinds of sites, but this HN submission caught me by surprise so for now it's just a list of sites the sort of match an aesthetic I like. "totally insane" is a bit harsh maybe.
I had a dream of a text only "underground" web the other day. Then executed it in a very poor way. If you want to check it https://tilde.pt/~fimdomeio/index2.html
Actually A text only web as a few interesting advantages. Almost instantaneous load even in a poor connection. Very fast development time since you throw away so many things away.
I am thinking about a little side project to launch this summer, just for fun, and I'm very tempted to build a simple card game, like kards.com, but text-only. I think it would be super fun, and I think that if well designed, you don't need fancy graphics to appreciate it.
Probably going to use Javascript and angular.js, but open to suggestions. (I used to be good at JS, never used angular so far).
I have not heard of Gemini before, but I tried the SSH that was linked above, and read about it. It seems a interesting idea. I don't like insisting on TLS either; I think that perhaps better would be like with HTTP, where the URI scheme is different for TLS or plain, perhaps "pgemini://" for the plain variant (the only difference, other than that there is no TLS, is that the 6x response codes are not supported).
How about https://wordsandbuttons.online ? Sure, it uses JS for interactive visuals but all the pages are still under 64K by design. There are very few pictures, too. Even the logo at the bottom of pages is the reused icon file.
I try to do text only myself. Unfortunately Fossil requires CSS (although it does still work reasonably well with Lynx), but other stuff I write is usually just plain text, or if HTML is needed, it rarely has CSS. I also have a gopher server too.
Fun question although probably not really on topic.
NetHack
MUDs, MOOs, MUSHs
Dwarf Fortress
Kroz
Brogue
Zork (looks best on green phosphor screen).
Midnight Commander.
Trade Wars 2002.
If you explore the right platforms and eras then you will find many tens or even hundreds of thousands of text applications, many of which look "good" in my opinion.
manuw - random-ish question i saw somewhere that u were using minikeepass which is deprecated on ios -- any suggestions? what are you thinking of using?
The rate.sx site is pretty nifty. It provides a simple REST endpoint that server cryptocurrency exchange rate info. The nifty part is that it's built to be used on the command line!
$ curl rate.sx # outputs a nifty table of coins and their market rates
$ curl rate.sx/:help # to see how to use the api
I whipped up a shell function wrapper that makes this feel more like a standard cli command. In the off chance anyone is interested, I'm sharing it below (unfortunately, HN turns my tabs into spaces, so indentation is now a single space.)
Note that I was careful to not let it clutter up your environment, so feel free to include it in your .profile with impugnity. Also, this sort of exhibits my current experiments with terse shell style, so don't hate on me for that, but otherwise the function should provide all the typical ergonomics you expect of a standard cli utility.
ratesx() (
set -o errexit -o nounset -o noclobber
RATESX_DOMAIN=${RATESX_DOMAIN:-rate.sx}
RATESX_CURRENCY=${RATESX_CURRENCY:-USD}
RATESX_NROWS=${RATESX_NROWS:-10}
RATESX_FETCH_CMD=${RATESX_FETCH_CMD:-curl --silent}
usage=$(cat <<-USAGE
usage: ratesx [<options>] [<command> <arguments>]
Show information about cryptocurrencies. Command defaults to 'table'.
Commands
graph <coin> [<interval>]
Display exchange rate graph for <coin> over <interval> (defaults to
\$RATESX_CURRENCY hours)
value <amount> <coin> [<amount> <coin>] ..]
Convert sum of <amount>*<coin> to <currency> (defaults to
\$RATESX_NROWS).
table Display table of top coins by market capitalization
coins Show list of supported cryptocurrency coins
currencies Show list of supported currencies
info Show upstream API info
Options
-q Quiet mode. Hide header and footer
-F Hide "Follow" line
-T Disable ANSI color
-n <nrows> Number of currencies (rows) to display in output table
-c <currency> Base currency for exchange rate calculations
-d <domain> Use API endpoint located at <domain>
Variables
RATESX_DOMAIN=$RATESX_DOMAIN
Default domain name of API endpoint
RATESX_NROWS=$RATESX_NROWS
Default count of rows to display in output table
RATESX_CURRENCY=$RATESX_CURRENCY
Default base currency for unit conversions
RATESX_FETCH_CMD=$RATESX_FETCH_CMD
Default command with which to submit API requests
USAGE
)
fetch() { $RATESX_FETCH_CMD "$@"; }
table() { fetch "$1/${2:+?$2}"; }
graph() { fetch "$1/$4${5:+@$5}${2:+?$2}"; }
value() { u=$1; o=$2; c=$3; shift 3; p=0
for v in "$@"; do
p=$((p^1)); [ $p = 1 ] && r="${r:+$r+}"; r="${r:-}$v"
done
printf '%s %s\n' "$(fetch "$u/$r${o:+?$o}")" "$c"
}
info() { fetch "$1/:help"; }
currencies() { fetch "$1/:currencies"; }
coins() { fetch "$1/:coins"; }
while getopts ':qFTn:c:d:' opt "$@"; do
case "$opt" in
q) quiet=q;; F) follow=F;; T) ansi=T;;
n) nrows=$OPTARG;; c) currency=$OPTARG;; d) url=$OPTARG;;
:) error "Need argument: -$OPTARG" "$usage";;
*) error "Unknown option: -$OPTARG" "$usage";;
esac
done; shift $((OPTIND - 1))
nrows=${nrows:-$RATESX_NROWS}; currency=${currency:-$RATESX_CURRENCY};
url=${url:-$RATESX_DOMAIN}; cmd=${1:-table}; shift || :;
url="https://$currency${currency:+.}$url"
opts="${quiet:-}${follow:-}${ansi:-}"
opts="${opts:+$opts&}${nrows:+n=$nrows}"
"$cmd" "$url" "$opts" "$currency" "$@"
)
I wanted to try out making gemini pages. I got some of the example servers, but no where in the official gemini spec, both via http and via gemini, could I find examples of the actual freakin gmi/gml formats!
I started up Wireshark and then remembered that the traffic is encrypted by default ... so yea, that's not going to help.
Are there any gemini tutorial on how to make a gemini site?
I've dipped into Gemini to see if it was worth adding to my gopher client[1], but the defined spec is vague and barely complete. I subscribed to their mailing list, and it's really busy - the spec is clearly in flux and developing rapidly.
If you check out the official specs[1] scroll down to "5 The text/gemini media type", and especially "5.4 Core line types".
Summary: you write plain text. Use linefeeds to separate paragraphs, not lines of text ("Multiple consecutive lines which are shorter than the client's display device MUST NOT be combined into fewer, longer lines.").
Links go on lines by themselves, like:
=>[<whitespace>]<URL>[<whitespace><USER-FRIENDLY LINK NAME>]
Wrap preformatted blocks in "```", like in Markdown.
Mark headers with "#", "##", or "###", like in Markdown.
Write lists like "* item", like in Markdown.
Write quotes on lines starting with ">", like in Markdown.
I think AV-98 has a setting or function for dumping the raw results of a gemsite.
But I think the main reason there's no example is because there's very little to show. Just make a text document and if you need to link to something you use the Gemini method of
=> URL title text
There's a few other things in the spec that are considered hints for clients (using # as headers, * for numbered lists) but those aren't even guaranteed to be rendered by the client as anything but plain text.
So does elpher. But you don't need a dedicated client to see the raw server response, all you need to really do is use something like 'gnutls-cli hostname -p 1965 --no-ca-verification' and then enter the full gemini URL once you have a connection.
If you have a working gemini client, could you not just look at a server's response and piece together the format? I'm curious because I'd also like to play around with gemini.
[1] https://www.freesoft.org/CIE/Topics/index.htm - I learned from this twenty years ago. Still relevant.