Initial commit

Decided to split this out from haven git master, as it will change
very often and contain information that is not strictly related.
This commit is contained in:
Přemysl Eric Janouch 2020-08-15 05:44:44 +02:00
commit 238ce6719c
7 changed files with 350 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.html
gen.sh

42
BadThings.adoc Normal file
View File

@ -0,0 +1,42 @@
Bad things
==========
Web browsers
------------
https://drewdevault.com/2020/08/13/Web-browsers-need-to-stop.html
Scrap it all, start anew. Content goes first, presentation second. Don't allow
for the inverse to happen. I'm not interested in anyone's animations and gray
font.
GNOME 3
-------
Removing features, worsening accessibility, making the UI incomprehensible,
piling up laughable levels of complexity, politically driven development,
everything is wrong here.
KDE
---
KDE will always be hideously ugly, it's the one constant in the universe.
Unix terminals
--------------
Barely tolerable with graphical displays. The character grid must go, not only
because variable pitch fonts are infinitely more pleasant to read.
The only redeeming quality is how well these work over slow links.
ASCII
-----
Outdated, made for teletypes. Unicode mostly just adds more complexity (and
characters). For sanity reasons, I'll put up with it and try to avoid the parts
I don't like, perhaps even banning certain characters where possible.
Centralisation
--------------
Try to build things so that they survive outages--resilient, robust, and even
anti-fragile. Admittably, this principle is hard for humans to follow.
Speaking of which, project Haven has no public mirrors yet. Not that it matters
thus far... but eventually we should at least set up mirrorring to repo.or.cz,
which is local.

101
GoodThings.adoc Normal file
View File

@ -0,0 +1,101 @@
Good things
===========
Windows 95
----------
// TODO: Include a screenshot.
Most applications followed design guidelines, giving a unified and simple UI.
Could be reasonably well controlled from the keyboard.
SerenityOS
----------
https://github.com/SerenityOS/serenity
// TODO: Include a screenshot.
A project with a much larger scope than Haven but with somewhat similar goals,
to create a nice new environment. Gives proof that such a project can be
written in few people, given proper experience.
ToaruOS
-------
https://github.com/klange/toaruos
Similarly to SerenityOS, this proves that one can write an entire operating
system from scratch. Somewhat sadly, it just replicates the Linux desktop
without trying to make any fundamental changes whatsoever. Still, it makes for
a very interesting data point.
Haiku
-----
Pretty. Desktop-first. Just the window manager sucks, and C++ is no longer
a reasonable choice for a high-level programming language, despite all the
effort to improve it. It's the foundations that are rotten.
VIM
---
Customizable modal text editor allowing for rather efficient editing. While the
internals might not be so great, the user interface is hard to beat once you get
used to it.
With https://github.com/prabirshrestha/vim-lsp/[vim-lsp] it even shines as an
IDE, which is a wonderful development.
Qt Creator
----------
// TODO: Include a screenshot.
Has a very good VIM emulator (rare!), excellent code navigation on top of that,
clean UI.
Primarily a C++ IDE, yet slowly the Language Server Protocol implementation
makes it transcend into a general-purpose one.
Vimperator/Pentadactyl/qutebrowser
----------------------------------
// TODO: Include a screenshot.
Vimperator/Pentadactyl has created a new standard in web browser usability.
The most important innovations being the addition of modality to the web browser
and the "follow link" feature, which is what I feel all mouse-first UIs
deserve.
Too bad it can no longer work in current versions of Firefox as they cut off
all support for XUL addons. The good times are already behind us. I certainly
enjoyed them.
qutebrowser went somewhat beyond in terms of how neat the integration of a VIM
interface and a web browser engine can be, rebuilding the concept on top of
Webkit, but to this day it lacks a normal AdBlock, and thus remains a toy.
SourceHut
---------
https://sourcehut.org/
Drew might be an opinionated asshole but that's not necessarily a bad quality.
His creations are compatible with my values.
WikiWikiWeb
-----------
http://wiki.c2.com/
An interesting knowledge base. Simple formatting, automatic links. I've
borrowed the general concept for this very collection of texts (I don't want
to say "wiki" since no one else can edit).
It's a shame that it's been frozen in time.
AsciiDoc
--------
I despise Markdown for its choices, and I don't want to suffer while writing.
Granted, I can see some faults in AsciiDoc as well, notably with how hard it is
to parse and process, but I haven't found anything better yet. One day I might
create a processor for a slightly modified subset of it. Until then,
libasciidoc is what I'll be using for all markup.
Plan 9, Go
----------
Pervasive simplicity. Sometimes it's annoying but overall you get the feeling
you have the entire platform under your control.

71
Haven.adoc Normal file
View File

@ -0,0 +1,71 @@
Haven
=====
// This is a wiki of sorts, although, since no one else can edit it,
// it's just a personal wiki, or maybe just a collection of articles.
// Might name it like "writings" or even simply "db".
As computer power user, I often get unhappy, especially as a result of
the changes that have happened over the last decade:
- almost every application I use looks and feels different,
- senseless animations vie for my attention and add delays,
- many applications are hard to control from the keyboard,
- visual clutter distracts me from tasks at hand,
- lack of customizability sets all those problems in stone,
- and unbelievable hardware requirements, stemming from accidental complexity
and a general lack of care, push me to buy unnecessarily expensive equipment
just so that I don't feel like being _used by the computer_.
*haven* is an umbrella project for a range of mostly desktop
applications. The greater goal is to create a fresh computing environment for
daily work and play--easily controllable, reasonably complex, both visually
and internally unified and last but not least responsive.
I'm not trying to create anything novel but to achieve something
*elegant* and *pleasing*.
.Related articles:
- https://lobste.rs/s/ksbcw5/12_principles_for_diverging_desktop +
While I don't fully agree with the vision, we have similar concerns.
Further reading
---------------
To get a better sense of the direction this project is going in, you can take
a look at a list of GoodThings and BadThings. If you're of the shallower kind,
have a look at Identity, and if you're interested in the overall design,
consult Technicalities.
Status
------
Trying to gain momentum, there's an astounding amount of work to be done. Hop
on if you know Go well, my contact is on the link:/[front page]. Top priority
tasks:
- [x] start writing a detailed wiki for propagation purposes
- [ ] create a basic terminal emulator for `TERM=dumb` (exercise)
- [ ] create a basic CSV viewer (simple, useful)
- [ ] create an IRC client (lots of know-how, trivial UI)
- [ ] create a basic vi-inspired text editor (required component for later)
- [ ] create a personal wiki/organiser (urgent)
Mockups
-------
// TODO: Mockups can be just included from different places.
// SVG is too precise, must use HTML/CSS.
.ht -- terminal emulator
+++
<div style="border: 1px solid black; padding: 2px; background: white;">
<pre style="margin: 0; padding: 0;">
This is just supposed to be a simple terminal emulator application.
It ought to be a rather simple exercise.
</pre>
</div>
+++
While I despise the Unix terminal, I can't just stop using Unix tools, and so
I'll need a means to interact with them. One day it might evolve into
a graphical terminal with a tty compatibility layer, which would need
integrating a custom POSIX shell such as https://github.com/mvdan/sh[].

33
Identity.adoc Normal file
View File

@ -0,0 +1,33 @@
Identity
========
The name "haven" merely hints at motivations and otherwise isn't of any
practical significance other than that we need an identifier. (This time
I resisted using something offensive for personal amusement.)
A logo covering the entire project is not needed and it seems hard to figure out
anything meaningful anyway, though we might pick a specific font to use for the
project's name <1>.
__
<2> _/ /_ <1> | _ _ _ _
\ _ \ |/ \ / \| \ / /_\ |/ \
/ / / / | | | | \ / | | |
/_/ /_/ | | \_/| \/ \_/ | |
That being said, if any symbol is deeply desired, a simple "h" <2> or "hvn"
could work. I'm not sure where I took this "h" letter styling from, it seems
too familiar. The above illustrations also show how awful it looks when a logo
is just a stylized version of the first letter of a name when you put the two
next to each other. Distinctly redundant. Facebook and Twitter are doing fine,
though, perhaps because they do not use them together like that.
Mascots
-------
I can think of two kinds of mascots that would bring me joy: an anime-style
character, or a My Little Pony OC. The color scheme would be mostly grayscale,
with something like shades of orange thrown in.
Either of the two choices is hard to draw for me if I don't want to infringe on
someone else's copyright, so I might have to find someone else to do it.
Eventually. Priorities lie elsewhere.

77
Technicalities.adoc Normal file
View File

@ -0,0 +1,77 @@
Technicalities
==============
Languages
---------
Primarily Golang with limited C interfacing glue, secondarily C++17, mostly for
when the former cannot be reasonably used because of dependencies.
Build system
------------
https://github.com/zevv/bucklespring is a good example of a rather simplified
project that makes do with a single Makefile, even for cross-compilation on
Windows. Let us avoid CMake and the likes of it.
It seems that Go can link dynamically, therefore I could build libhaven.so
(https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ
and https://stackoverflow.com/questions/1757090/shared-library-in-go)
and have the rest of the package as rather small binaries linking to it.
The "cannot implicitly include runtime/cgo in a shared library" error is solved
by "go install", which again requires "-pkgdir" because of privileges.
libstd.so is a beautiful 30 megabytes (compared to libc.a: 4.9M).
GUI
---
Probably build on top of X11/Xlib or xgb. Wayland can wait until it
stabilizes--it should not be a major issue switching the backends.
Vector graphics can be handled by draw2d.
- https://rosettacode.org/wiki/Window_creation/X11#Go
- https://github.com/llgcode/draw2d
The c2 wiki unsurprisingly has a lot of material around the design and
realisation of GUIs, which might be useful.
It seems like an aligning/constraint-based "layout manager" will be one of the
first harder problems here. However I certainly don't want to use fixed
coordinates as they would introduce problems with different fonts and i18n.
We could use BDF fonts from the X11 distribution, but draw2d has native support
for FreeType fonts and it's more of a choice between vectors and bitmaps.
The looks will be heavily inspired by Haiku and Windows 2000 and the user will
have no say in this, for simplicity.
.Resources:
- https://github.com/golang/exp/tree/master/shiny is a GUI library
- https://github.com/as/shiny is a fork of it
- http://man.cat-v.org/plan_9/1/rio has a particular, unusual model
Internationalisation
--------------------
For i18n https://github.com/leonelquinteros/gotext could be used, however I'll
probably give up on this issue as I'm fine enough with English.
Go also has x/text packages for this purpose, which might be better than GNU,
but they're essentially still in development.
Versioning
----------
Versions are for end users. We can use a zero-based, strictly increasing
number, be it a simple sequence or date-based numbers such as 1807. If we do
this at all, we will eventually also need to release patch versions.
Since dates don't seem to convey important information, let us settle on 0, 1,
1.1, 2, 3, 3.1, 3.2, ... In practice releases are going to be scarce, unless
we find a person to take care of it. Note that there is no major/minor pair--
a new project will be created when radical philosophical or architectural
changes are to be made. See Goal.
Licensing
---------
All will be released into the public domain. The preferred way of doing so is
the 0BSD license.
Other people's libraries may be used or even imported if it makes sense, so long
as they're not licensed under something either viral like the GPL, or annoying
such as the original 4-clause BSD license.

24
header.tmpl Normal file
View File

@ -0,0 +1,24 @@
<meta http-equiv=content-type content="text/html; charset=utf-8">
<!-- make mobile browsers happy -->
<meta name=viewport content="width=device-width, initial-scale=1">
<link rel=stylesheet href=../style.css>
<style>
.sect1 { margin: .5rem 0; }
.sect1 h2 { margin: 0; }
.paragraph { margin: 1rem 0; }
.paragraph p { margin: 0; }
.literalblock { margin: 1rem 0; }
.literalblock pre { margin: 0; }
.ulist { margin: 1rem 0; }
.ulist .ulist { margin: 0; }
.ulist ul { margin: 0; }
.ulist li p { margin: 0; }
#links, #footer { font-size: small; color: gray; }
</style>
<ul class=nav>
<li><a href=../index.html>Me</a></li>
<li><a href=../haven/Haven.html><b>Haven</b></a></li>
<li><a href=../show.html>Showcase</a></li>
<li><a href=../articles.html>Articles</a></li>
</ul>