Compare commits

..

33 Commits
master ... dev

Author SHA1 Message Date
Georges Dupéron
e5c737e8d7 Details about keyboards, screens and bootstrap 2019-03-13 10:34:14 +01:00
Georges Dupéron
ee32eb47d5 References: keyboards, screens, bootstrap 2019-03-13 10:17:58 +01:00
Georges Dupéron
c0916a2eef Automatic list of occurrences of to-do and other open tasks. 2019-03-13 00:09:42 +01:00
Georges Dupéron
9b3afd96b4 READMEs for some tests and status reports. 2019-03-10 06:46:37 +01:00
Georges Dupéron
d585a9a756 Some references. 2019-03-10 06:46:19 +01:00
Georges Dupéron
35a6dd2161 Run the nano-scheme self-test as part of the build. 2019-03-10 06:26:31 +01:00
Georges Dupéron
d6d2f88d11 Work in progress on nano-scheme evaluator. 2019-03-10 06:25:58 +01:00
Georges Dupéron
a69fb10fc6 Links to some standards and documentations 2019-03-09 07:23:50 +01:00
Georges Dupéron
336b2111fa Missing self-closing tag. 2019-03-09 06:11:49 +01:00
Georges Dupéron
d529a33ebb Generate PDF dependency graph directly without going through .ps 2019-03-09 06:06:23 +01:00
Georges Dupéron
2dda788622 Missing style.css for index.html 2019-03-09 06:02:02 +01:00
Georges Dupéron
ac12b61898 Link to dependency graph, (X)HTML polyglot for index.html, dependencies in Makefile 2019-03-09 05:24:00 +01:00
Georges Dupéron
f7e37e89f6 Sections for the references 2019-03-09 03:32:11 +01:00
Georges Dupéron
6e17e34770 Added style and HTML markup around the markdown output 2019-03-09 03:22:57 +01:00
Georges Dupéron
eb6b899396 Added mising file 2019-03-09 00:40:30 +01:00
Georges Dupéron
20cdf621d9 Makefile tabs 2019-03-09 00:33:43 +01:00
Georges Dupéron
716f25d9f6 Build references/index.html from references.md 2019-03-09 00:30:58 +01:00
Georges Dupéron
09f8f641e5 Publish website via GitLab pages (index.html) 2019-03-09 00:14:03 +01:00
Georges Dupéron
3182ac305c Publish website via GitLab pages (stage deploy) 2019-03-09 00:11:31 +01:00
Georges Dupéron
b855847538 Publish website via GitLab pages (phase deploy) 2019-03-09 00:08:44 +01:00
Georges Dupéron
30c2352e91 Publish website via GitLab pages (index.html) 2019-03-09 00:04:04 +01:00
Georges Dupéron
2fbcec2eac Publish website via GitLab pages 2019-03-08 23:56:23 +01:00
Georges Dupéron
8266105144 Fixed Makefile 2019-03-06 06:17:42 +01:00
Georges Dupéron
ac95a9f27a Fixed Makefile indentation 2019-03-06 06:14:25 +01:00
Georges Dupéron
fc24e04f9d Place the output in the artifacts/ directory 2019-03-06 05:41:45 +01:00
Georges Dupéron
71f4bec881 GitLab CI: apt-get update 2019-03-06 05:37:02 +01:00
Georges Dupéron
6cd8c7f4fd Temporarily install dependencies via apt-get 2019-03-06 05:28:33 +01:00
Georges Dupéron
179df1901b Automatic build with gitlab 2019-03-06 05:16:33 +01:00
Georges Dupéron
e75e629fc4 Added script to rename the project in one command 2019-03-06 05:16:33 +01:00
Georges Dupéron
7871abebaa Compile the dependency graph 2019-03-06 05:16:31 +01:00
Georges Dupéron
97786ae8e7 Graph of the components and their dependencies. Implementation will start at the bottom and move upwards. 2019-03-06 04:46:59 +01:00
Georges Dupéron
b6d9d87e19 Ignore backup~ files 2019-03-06 04:46:59 +01:00
Georges Dupéron
77dc6a2af6 Preliminary notes on the build system 2019-03-06 04:46:54 +01:00
12 changed files with 413 additions and 24 deletions

12
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,12 @@
before_script:
- apt-get update -qq
- apt-get -y -qq install graphviz ghostscript markdown
pages:
stage: deploy
script:
- make
- if test -e public; then mv public public.old; fi && mv artifacts public
artifacts:
paths:
- public/

View File

@ -1,6 +1,13 @@
language: c
sudo: false
addons:
apt:
packages:
- graphviz
- ghostscript
- markdown
# TODO: don't overwrite artifacts.
script:
- make

View File

@ -1,17 +1,42 @@
all: deps.svg deps.png deps.pdf
all: artifacts/deps.svg artifacts/deps.png artifacts/deps.pdf artifacts/index.html artifacts/references/index.html micro-scheme/test-result
deps.dot: deps.sh
sh $< > $@
mkdir -p $$(dirname $@)
sh $< > $@
deps.svg: deps.dot Makefile
dot -Tsvg $< > $@
artifacts/deps.svg: deps.dot Makefile
mkdir -p $$(dirname $@)
dot -Tsvg $< > $@
deps.png: deps.dot Makefile
dot -Tpng $< > $@
artifacts/deps.png: deps.dot Makefile
mkdir -p $$(dirname $@)
dot -Tpng $< > $@
deps.ps: deps.dot Makefile
dot -Tpng $< > $@
artifacts/deps.pdf: deps.dot Makefile
mkdir -p $$(dirname $@)
dot -Tpdf $< > $@
deps.pdf: deps.ps Makefile
ps2pdf $< $@
artifacts/index.html: doc-src/index.html artifacts/style.css artifacts/deps.svg artifacts/deps.png artifacts/deps.pdf artifacts/references/index.html artifacts/open-tasks/index.html Makefile
mkdir -p $$(dirname $@)
cp doc-src/index.html $@
artifacts/references/index.html: references.md artifacts/references/style.css Makefile
mkdir -p $$(dirname $@)
doc-src/markdown2html.sh $< "References" > $@
artifacts/style.css: doc-src/style.css Makefile
mkdir -p $$(dirname $@)
cp $< $@
artifacts/references/style.css: doc-src/style.css Makefile
mkdir -p $$(dirname $@)
cp $< $@
micro-scheme/test-result: micro-scheme/nano-scheme.sh Makefile
mkdir -p $$(dirname $@)
sh $< > $@
.PHONY: artifacts/open-tasks/index.html
artifacts/open-tasks/index.html: Makefile
mkdir -p $$(dirname $@)
tests/to-do/list-to-dos.sh > $@

View File

@ -1,5 +1,3 @@
Ma proposition pour un `mek` bien, dites-moi vos opinions sur l'interface. Celle-ci passe autant que possible par le système de fichiers, parce qu'un `mek` bien sait parler aux files.
Problems solved:
* Forgotten dependencies: build in isolated environment
* Reactive builds (auto-rebuild): mek watch

17
doc-src/index.html Normal file
View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>{{{project-name}}}</title>
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
<body>
<h1>{{{project-name}}}</h1>
<ul>
<li><a href="deps.svg">Dependency graph</a> with work-in-progress indications (<a href="deps.png">PNG</a> and <a href="deps.pdf">PDF</a> versions)</li>
<li><a href="references/index.html">References</a></li>
<li><a href="open-tasks/index.html">Open tasks</a></li>
</ul>
</body>
</html>

22
doc-src/markdown2html.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/sh
if test $# -ne 2; then
printf %s\\n 'Usage: path/to/markdown2html.sh file.md "Page title"'
exit 1
fi
cat <<EOF
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>$2</title>
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
<body>
EOF
markdown "$1" | sed -e 's/^/ /'
cat <<'EOF'
</body>
</html>
EOF

94
doc-src/style.css Normal file
View File

@ -0,0 +1,94 @@
html {
background: #eee;
padding: 0 .5em;
}
body {
background: white;
border: thick solid #ddd;
border-radius: 2em;
padding: 0.5em 2em 1.5em;
max-width: 40em;
margin: 2em auto;
font-family: Helvetica,Arial,sans-serif;
font-size: 120%;
line-height: 1.3em;
color: #333;
}
h1 {
color: #222;
}
code {
color: #04c;
background: #eee;
padding: 0.1em 0.3em;
}
input, select {
padding: 0.3em !important;
}
pre em {
color: red;
font-style: normal;
}
kbd {
color: #444;
background-color: aliceblue;
border: thin solid gray;
border-radius: .5ex;
padding-left: .5ex;
padding-right: .5ex;
}
pre kbd {
color: #04c;
border: none;
border-radius: 0;
padding-left: initial;
padding-right: initial;
}
pre {
overflow: auto;
background: #eee;
border: thin solid #ccc;
padding: .5em;
border-radius: .5em;
}
hr {
margin: 1em 25%;
height: .35ex;
color: #aaa;
background-color: #aaa;
border: none;
border-radius: .175ex;
}
/* TODO: use a technique like tinytypo's to change the quotes based on the language?
* https://github.com/tetue/tinytypo/blob/5f7411746c8c4d634ac8cd14c730b86f4ffd1813/css/typo.css#L397
*/
blockquote {
border-left: 0.85ex solid #ccc;
padding: 0.8ex 1ex;
background: #f0f0f0;
margin: 1em 2em;
}
/* An <ul> appearing at the end of a blockquote has too much vertical space following it. */
ul:last-child {
margin-bottom: .25ex
}
img {
max-width: 100%;
max-height: 100vh;
}
li > img, li > a > img {
vertical-align: top;
}

View File

@ -38,9 +38,9 @@
# N null "_"
# F free cell ptr
# I integer int
# Y symbol hex
# Y symbol octal
#
# Note: hex strings must not contain any spaces.
# Note: octal strings must not contain any spaces.
h=0
s=0
@ -97,7 +97,7 @@ debug_print() {
elif test $a = Y; then
if $2; then printf %s '.'; fi
heap_get_val $1
printf %s $a | xxd -ps -r
printf \\$a
if $2; then printf %s ')'; fi
else
if $2; then printf %s '.'; fi
@ -110,21 +110,86 @@ debug_print() {
fi
}
eval_scheme() {
local callee ptr result
heap_get_type $1
if test $a = P; then
heap_get_val $1
# TDODO: use a stack
echo h=$h
heap_sbrk; heap_set_pair $h P $a $h;
echo h=$h
callee=$a
echo -n callee=
debug_print $callee false
echo
# compute the arguments
a=P
heap_get_cdr $1
ptr=$a
heap_get_type $ptr
echo cdr1=$ptr type=$a
while test "$a" != N; do
heap_get_val $ptr
echo val=$a
eval_scheme $a
# TODO: push on a stack
echo h=$h
heap_sbrk; heap_set_pair $h P $a $h;
echo h=$h
result=$a
echo result=$result
heap_get_cdr $ptr
ptr=$a
heap_get_type $ptr
echo cdr=$ptr type=$a
a=N
done
# TODO: this assumes that the callee is a symbol.
heap_get_val $callee
echo callee====$callee
echo callee----$a
case $a in
# octal for "r"
162) echo READ
# fake read (always returns "h", soon to be "hello"!)
a=150;; # TODO: should be some-input | od -v -A n -t x1 | read -n 1 a
# octal for "w"
167) echo WRITE: $result
printf \\$result >> output;; # TODO: should use octal, \x is not portable.
*) echo TODO_OR_ERROR
a=42;;
esac
else
echo TODO_OR_ERROR
a=42
fi
}
main() {
printf '(w((lxx)r))' \
| od -v -A n -t x1 \
# printf '(w((lxx)r))' \
# printf '(r)' \
printf '(w(r))' \
| od -v -A n -t o1 \
| sed -e 's/^ //' \
| tr ' ' \\n \
| (while read c; do
echo lex:$c
case "$c" in
28) s=$(($s+1)); eval s$s=M ;;
29) stack_debug; rlist; stack_debug ;;
# octal for "("
050) s=$(($s+1)); eval s$s=M ;;
# octal for ")"
051) stack_debug; rlist; stack_debug ;;
*) heap_sbrk; heap_set $h Y $c; s=$(($s+1)); eval s$s=$h ;;
esac
done
heap_debug
debug_print $h false)
echo
to_eval=$h
heap_sbrk; heap_set $h N _
eval_scheme $to_eval
echo
debug_print $to_eval false)
}
if true; then main; exit $?; fi

View File

@ -1,21 +1,119 @@
* [9780751305418](https://isbnsearch.com/isbn/9780751305418) Dorling Kindersley Multimedia The Complete User-Friendly Guide to the Internet, World Wide Web, DVDs, Virtual Reality, CD-ROMs and 3D Games
# Multimedia software
* [Dorling Kindersley Multimedia The Complete User-Friendly Guide to the Internet, World Wide Web, DVDs, Virtual Reality, CD-ROMs and 3D Games](https://isbnsearch.com/isbn/9780751305418).
ISBN-13: 978-0751305418, ISBN-10: 0751305413
This is an overview of the professions and techniques involved in the creation of interactive multimedia software. It fits well as a welcome guide for new employes, to let them know what the other professions are doing in the company, or as a pamhplet for students interested in joining a school training them for these professions.
# User interface
* The Humane interface Jeff Raskin
* [DocumentDefinitions](https://wiki.c2.com/?DocumentDefinitions), some definitions related to document-based interfaces, on the [C2 WikiWikiWeb](https://wiki.c2.com)
* [ZoomableUserInterface](https://wiki.c2.com/?ZoomableUserInterface), on the [C2 WikiWikiWeb](https://wiki.c2.com)
# Software engineering best practices
* [Software Engineer's Reference Book](https://isbnsearch.com/isbn/9780750608138),
John McDermid, 1992. ISBN-13: 978-0750608138, ISBN-10: 0750608137
This is a compilation of surveys written by people in the fields of
testing, systems design, and so on. Each survey describes the
practices and techniques used in that field, and include a rich
bibliography
# Programming practices (human-human interactions)
* The psychology of computer programming silver anniversary edition
# Hardware
## CPU and integrated circuits
* Wikipedia's illustration of a [NAND gate's physical layout](https://en.wikipedia.org/wiki/CMOS#Example:_NAND_gate_in_physical_layout) clearly shows how NMOS and PMOS transistors are created on a silicon substrate, as well as a schematic representation of the resulting layers. Page visited on 2019-03-12.
* Some people have built small integrated circuits (e.g. inverters) at home, using simple equipment: [Jeri Ellsworth](https://hackaday.com/2010/03/10/jeri-makes-integrated-circuits/), [HomeCMOS](https://hackaday.com/2012/07/09/make-your-own-integrated-circuits-at-home/).
* [visual6502.org](http://visual6502.org/), a sumulation of the 6502 CPU based on photos of the silicon die. It features an online zoomable view of the CPU with different colors for the logic states, in which wires and transistors blink as the CPU executes instructions.
## Keyboard
* N-shot injection keycaps:
* N-shot injection keycaps
* [![double-shot injection keycaps cut in half to expose the two plastic parts](https://i.imgur.com/kVQNa.jpg)](https://imgur.com/a/OhRd4)
* [The best mechanical keycaps](https://blog.wooting.nl/what-are-the-best-mechanical-keyboard-keycaps), a presentation of various properties of keycaps
* [![Quadruple-shot injection keycap with two colors for the label and transparent plastic for caps lock or scroll lock indicator](https://deskauthority.net/download/file.php?id=5573)](https://deskauthority.net/viewtopic.php?p=80654#p80654)
* Planck [![Example layout of a planck keyboard](https://i.imgur.com/cNipMSc.png)](https://i.imgur.com/cNipMSc.png)
* [![Quadruple-shot injection keycap with two colors for the label and transparent plastic for caps lock or scroll lock indicator](https://deskthority.net/download/file.php?id=5573)](https://deskthority.net/viewtopic.php?p=80654#p80654)
* Planck keyboards have only four rows. The first row is usually activated with the thumbs, and all other keys are at most 1 key away from the home row. [![Example layout of a planck keyboard](https://i.imgur.com/cNipMSc.png)](https://i.imgur.com/cNipMSc.png)
* [WASD Keyboards](https://www.wasdkeyboards.com/) does full-color print on keycaps. Examples:
[![illustrations (planets and space decor) on keys](https://i.imgur.com/F3lgqHJ.jpg)](https://i.imgur.com/F3lgqHJ.jpg)
[![Video editing software shortcuts](https://66.media.tumblr.com/9e8cbe7747b696822570ce0329f92fa1/tumblr_noo0x0SAcK1u475ako1_1280.jpg)](https://wasdkeyboards.tumblr.com/image/120541521288)
[![On-key characters for greek, mathematical symbols and other languages accessible via XCompose](https://i.imgur.com/21OoXw0.jpg)](https://imgur.com/a/DpQHW)
* Manufacturers and sellers:
* [Massdrop](https://www.massdrop.com/) gathers enthusiasts to buy medium-sized batches of random items (including keybords) to reduce the costs of small series that would not be commercialy viaable otherwise.
* [Relegendable keycaps](https://pimpmykeyboard.zendesk.com/hc/en-us/articles/204416135-What-are-Relegendable-Keycaps-), a paper label can be placed below a transparent snap-on top. [Other source](https://www.fentek-ind.com/keys.htm#relegend).
[![Relegendable keys can have part of the legend on the front, and can be flat keys or thick keys.](https://pimpmykeyboard.zendesk.com/hc/en-us/article_attachments/201690109/Relegendables.jpg)](https://pimpmykeyboard.zendesk.com/hc/en-us/articles/204416135-What-are-Relegendable-Keycaps-)
* [Apple Touch Bar](https://support.apple.com/en-us/HT207055)
* [Optimus Maximus](https://www.artlebedev.com/optimus/maximus/) keyboard has OLED screens below the keys, which are transparent, so that the symbols or icons under the keys can be changed.
## Screen
* [OLPC display](http://wiki.laptop.org/go/Display#Understanding_the_display_system)
The OLPC (One Laptop Per Child project) integrates a Pixel Qi
screen. This screen uses subpixels (red, green, blue) with a square
aspect ratio using a non-traditional layout of the subpixels. It
features a reflective higher-resolution black and white display,
which works in bright sunlight. Behind that black and white layer,
there is a backlit screen with colored pixels. This means that
depending on the lighting of the environment and backlight
brightness, the color may fade away, but a crisp black and white
picture will always be visible. This also allows for reduced power
consumption if the backlight is disabled or its brightness reduced.
# File format standards
## Used to generate or write files in this project
* [Polyglot Markup](https://dev.w3.org/html5/html-polyglot/html-polyglot.html), an intersection of valid HTML5 and XHTML (except for the doctype)
* [Sending XHTML as text/html Considered Harmful](hixie.ch/advocacy/xhtml) on the subtle differences between XHTML and HTML.
* POSIX a.k.a. IEEE Std 1003.1 a.k.a. Open Group Base Specifications Issue 7:
* [latest edition](https://pubs.opengroup.org/onlinepubs/9699919799/),
* [2017-2018 edition](https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/),
* [2016 edition](https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/),
* [2013 edition](https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/),
* [2008 edition](https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/).
* The oldest version of POSIX [(IEEE Std 1003.2-1992)](https://ieeexplore.ieee.org/document/6880751) that we could find is behind a paywall.
* The oldest version of the Single Unix® Specification [(Version 1 Document Set UNIX 95)](https://publications.opengroup.org/c43x) that we could find is behind a login wall, but seems free to download.
* [GraphViz Reference](https://www.graphviz.org/doc/info/)
## Used to read files
# Bootstrap
Bootstrapping is an important facet of technology. By having a clear
path to bootstrap a given branch of science or technology we can
explain it in a more synthetic way, implement things in a clean way
while getting rid of historical blunders and baseless
traditions.
Having some hindsight on the shortest path to success can give some
foresight on the future directions to explore. If the failed paths are
also made clear, this foresight might extend to knowing which future
directions should likely be avoided.
The references in this section are not limited to computer-related
technologies.
* [RepStrap](https://www.reprap.org/wiki/Category:RepStrap)
RepRap is a 3D printer that is capable of replicating most of its
parts which are not off-the-shelf.
RepStrap projects are about creating an initial RepRap without an
existing RepRap and without advanced tooling.
* [Global Village Construction Set](https://www.opensourcetechnology.org/gvcs/)
The GVCS aims to design construction kits for 50 industrial machines
which would be necessary for a self-sufficient village. Among these
are the compressed earth brick press (used to make bricks for
buildings), a tractor, a wind turbine, or the Fabrication
Construction Set which can be used to build the other machines.
* [The Knowledge](https://isbnsearch.com/isbn/9780143127048) How to
rebuild our world from scratch, Lewis Dartnell, ISBN-10: 0143127047,
ISBN-13: 978-0143127048

5
tests/to-do/README.md Normal file
View File

@ -0,0 +1,5 @@
Check how many tasks have been left aside.
These tasks are marked with the four consecutive letters T, O, D, O in the source code.
This tool also looks for instances of F, I, X, M, E and of X, X, X

41
tests/to-do/list-to-dos.sh Executable file
View File

@ -0,0 +1,41 @@
#!/bin/sh
escapehtml() {
sed -e 's/&/\&amp;/g' \
| sed -e 's/</\&lt;/g' \
| sed -e 's/>/\&gt;/g' \
| sed -e 's/"/\&quot;/g'
}
cat <<'EOF'
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>{{{project-name}}}</title>
<style>
body > ul { display: table; }
ul > li { display: table-row; }
li > a, li > span { display: table-cell; }
li > * + span { padding-left: 1em; }
li > a + span { text-align: right; }
</style>
</head>
<body>
<h1>Open tasks</h1>
<ul>
EOF
commit="$(git rev-parse HEAD | escapehtml)"
(
cd "$(git rev-parse --show-cdup)";
git grep -i -n \\\(todo\\\|fixme\\\|xxx\\\)
) \
| escapehtml \
| sed -e 's~^\([^:]*\):\([^:]*\):\(.*\)$~ <li><a href="https://gitlab.com/project-name/project-name/blob/'"$commit"'/\1">\1</a> <span>\2</span> <span>\3</span></li>~'
cat <<'EOF'
</ul>
</body>
</html>
EOF

5
tests/website/README.md Normal file
View File

@ -0,0 +1,5 @@
Tests for the web pages.
* Checks that the pages are valid Polyglot Markup (an HTML5 / XHTML chameleon, TODO link to references)
* Uses the W3C validator to check that the pages are valid HTML 5, XHTML 1.0, XHTML 1.1, as well as valid HTML 3.2, HTML 4.0 with the exception of the obvious incompatibilities (doctype and self-closing tags)
* Checks that there are no broken links between the pages, and no broken links to external pages.