write two articles about cost of hardware for Gopher - tgtimes - The Gopher Tim… | |
git clone git://bitreich.org/tgtimes git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit 812f6bfe1baa59beec1220bf4e8a4e4db3385c61 | |
parent d9486721b97cbded94d8f48e118f9fce9493f77b | |
Author: Josuah Demangeon <[email protected]> | |
Date: Sun, 29 Jan 2023 01:52:48 +0100 | |
write two articles about cost of hardware for Gopher | |
Diffstat: | |
M opus | 2 +- | |
M opus7/article-athas-shell-redirect… | 2 +- | |
D opus7/article-tgtimes-most-minimal… | 1 - | |
A opus7/article-tgtimes-most-minimal… | 88 +++++++++++++++++++++++++++… | |
A opus7/article-tgtimes-most-minimal… | 62 +++++++++++++++++++++++++++… | |
A opus7/article-tgtimes-panopticon-e… | 0 | |
A opus7/article-tgtimes-peering-cake… | 0 | |
A opus7/footer.mw | 24 ++++++++++++++++++++++++ | |
A opus7/tgtimes7.mw | 14 ++++++++++++++ | |
A opus7/tgtimes7.pdf | 0 | |
A opus7/tgtimes7.txt | 100 +++++++++++++++++++++++++++++… | |
11 files changed, 290 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/opus b/opus | |
@@ -1 +1 @@ | |
-v=6 | |
+v=7 | |
diff --git a/opus7/article-athas-shell-redirections.mw b/opus7/article-athas-sh… | |
@@ -1,6 +1,6 @@ | |
.SH athas | |
Shell Redirections | |
-.2C 60 | |
+.2C 30 | |
. | |
.PP | |
Newcomers to the Unix shell quickly encounter handy tools such as | |
diff --git a/opus7/article-tgtimes-most-minimal-gopher-client-hardware.mw b/opu… | |
@@ -1 +0,0 @@ | |
-https://github.com/ptrks/AVR-ENC28J60-Examples | |
diff --git a/opus7/article-tgtimes-most-minimal-gopher-client.mw b/opus7/articl… | |
@@ -0,0 +1,88 @@ | |
+.SH athas | |
+Most minimal gopher client | |
+.2C 30 | |
+. | |
+.PP | |
+Gopher is a protocol allowing browsing text, images interactively, | |
+reach telnet interfaces, and download any file, or open any URL, | |
+for custom action to be chosen by the user. | |
+. | |
+.IP "Network" | |
+One reliable way to fetch the content from internet would be Ethernet, | |
+but convenience and price would push toward using radio transmission | |
+such as WiFi. | |
+.FS | |
+Ethernet would require an extra transceiver chip, while wifi takes mostly | |
+just a wire acting as antenna, which partly explains its low cost. | |
+.FE | |
+. | |
+.IP "Processing" | |
+One inexpensive family of processors featuring a high cost-to-performance | |
+ratio, which also features WiFi, is the ESP32. The C3 iteration even uses | |
+the open-source architecture RISC-V. The speed is decent enough for | |
+decoding JPEG an PNG, or support TLS as used in gophers://. | |
+. | |
+.IP "Display" | |
+The cost of displays have dropped considerably as they invaded the market. | |
+Economy of scale made small color displays even cheaper than | |
+character-based displays. | |
+. | |
+.IP "Input" | |
+Browsing content is a lot about scrolling. Since we do custom hardware, | |
+capacitive touch buttons can be used for little to no extra cost. | |
+This could permit a smooth scrolling through the content. | |
+.FS | |
+Once again, mostly requiring wires, this cuts the price and explain | |
+their popularity. | |
+.FE | |
+. | |
+.IP "Text" | |
+Text is compact and efficient, and bitmap font requires a bit of storage | |
+for all the common non-ASCII characters, but ESP32 have 16MB of flash | |
+storage enough for the entire uncompressed Unifont: | |
+.LK http://unifoundry.com/unifont/ | |
+. | |
+.IP "Audio" | |
+Producing sound does not cost much more than a small audio amplifier, | |
+software for decoding MP3, and a 3.5mm Jack connector. | |
+Very small cost added. | |
+. | |
+.IP "Extension" | |
+an USB interface would allow plugging the device to a computer for | |
+either automation or using a full keybaord. | |
+. | |
+.IP "Power" | |
+A small dedicated battery could be included increasing the cost, | |
+but getting all power from USB would also preserve the choice to | |
+the user, free to chose a wall charger or portable power bank. | |
+. | |
+.IP "Enclosure" | |
+A custom 3D printed case would allow keeping the cost very low | |
+even at small volume production. | |
+. | |
+.PP | |
+There exist boards around 5 USD which would provide all of the above | |
+except audio and a few wires, typically the size of an MP3 player. | |
+The grand total bill of material could realistically approach 10 USD. | |
+An actual product could eventually reach as low as 15 USD if keeping | |
+only a small margin for the seller, and eventually lower if produced | |
+on a larger scale. | |
+. | |
+.PP | |
+Writing the software for such a product from the ground up could take | |
+typically an entire week, including JPEG and PNG decoding libraries, | |
+image and font rendering, writing driver for all the parts involved, | |
+integrating the TCP/IP stack and TLS stack. | |
+. | |
+.PP | |
+While an XML parser able to fetch content over HTTP would be relatively | |
+as difficult to build, this would not permit the same level of user | |
+experience as the Gopher-based project: CSS and JavaScript are becoming | |
+an increasingly frequent requirement to access the Web, and reimplementing | |
+a new compatible rendering engine is not feasible to a single person. | |
+. | |
+.PP | |
+This requirement would in turn affect the minimal performance of the | |
+processing unit used: a processor in the GHz range with RAM in the | |
+GB range, in particular if anticipating future needs of the Web | |
+software system. | |
diff --git a/opus7/article-tgtimes-most-minimal-gopher-server.mw b/opus7/articl… | |
@@ -0,0 +1,62 @@ | |
+.SH tgtimes | |
+Most minimal Gopher server | |
+. | |
+.PP | |
+Gopher is a protocol providing a gateway to a document system, allowing | |
+to serve an organized hierarchy of files over the network. Dynamically | |
+generating the content as per user requests is also possible. The client | |
+side is in charge of rendering the content as it sees fit. | |
+. | |
+.PP | |
+Generating Gopher indexes and transmitting file contents or generated | |
+contents is low in software compmlexity, and in turn allows less expensive | |
+hardware to be run than complex web stacks. | |
+. | |
+.PP | |
+Which cost would we end-up for building a minimal piece of hardware able | |
+to host the Gopher protocol acheiving all of the above? | |
+The Gopher Times investigates. | |
+. | |
+.IP "Communication" | |
+While WiFi is inexpensive and fits moving device gracefully, the | |
+reliability of Ethernet is indicated for a server. Ethernet adds | |
+1 USD of cost for the transceiver handling the electricial characteristics | |
+of Ethernet. These typically expose an RGMII interface. | |
+. | |
+.IP "Processing" | |
+A microcontroller featuring an Ethernet peripheral (with an RGMII | |
+interface) could be the popular STM32F103, or an alternative | |
+compatible part. Enough processing power would be present for an | |
+embedded TCP/IP and a TLS stack. | |
+. | |
+.IP "Automation" | |
+In addition, most microcontrollers feature a large range of | |
+built-in peripheral such as timers and communication or analog | |
+interfaces, enabling automation of devices such as lighting, | |
+heating, laundry, motors, or an entire car, through external | |
+modules. This would come for no extra cost. | |
+. | |
+.IP "Storage" | |
+A slot for a MicroSD card would allow storing and updating | |
+the static content to serve, and storing network configuration. | |
+. | |
+.IP "Scripting" | |
+There exist project to fit programming languages onto microcontrollers. | |
+Separate projects for supporting a subset of each of Python, Ruby, | |
+Javscript, Go, Rust, Lua, Forth and more. | |
+. | |
+.IP "Power" | |
+By letting power supply happen through the USB port, a large range | |
+of power source can be used, such as battery, solar panels, wind | |
+turbine, hydropower, or power outlet. | |
+. | |
+.PP | |
+The bill of materials for such a design would approximate 5 USD. | |
+A marketed device with a small margin for the seller could reach | |
+as low as 10 USD. | |
+. | |
+.PP | |
+Interestingly, such a device would also be able to provide an | |
+equivalent Web service able to work with all Web client, but | |
+not running the existing popular Web server software stacks | |
+known as "Web Frameworks". | |
diff --git a/opus7/article-tgtimes-panopticon-effect.mw b/opus7/article-tgtimes… | |
diff --git a/opus7/article-tgtimes-peering-cake.mw b/opus7/article-tgtimes-peer… | |
diff --git a/opus7/footer.mw b/opus7/footer.mw | |
@@ -0,0 +1,24 @@ | |
+.SH you | |
+Publishing in The Gopher Times | |
+.2C 10v | |
+. | |
+.PP | |
+Want your article published? | |
+Want to announce something to the Gopher world? | |
+. | |
+.PP | |
+Directly related to Gopher or not, | |
+reach us on IRC with an article in any format, | |
+we will handle the rest. | |
+. | |
+.DS | |
+ircs://irc.bitreich.org/#bitreich-en | |
+gopher://bitreich.org/1/tgtimes/ | |
+git://bitreich.org/tgtimes/ | |
+.DE | |
+. | |
+.PP | |
+Did you notice the new layout? | |
+We now can jump between single and double column as it is more fit: | |
+Some large code chunks will not fit in a two-column layout, | |
+but text is more pleasant to read on two columns. | |
diff --git a/opus7/tgtimes7.mw b/opus7/tgtimes7.mw | |
@@ -0,0 +1,14 @@ | |
+.TL | |
+The Gopher Times | |
+.AB | |
+Opus 7 - Gopher news and more - Jan. 2023 | |
+.AE | |
+. | |
+.so opus7/article-athas-shell-redirections.mw | |
+.so opus7/article-tgtimes-10-cent-risc-v-mcu.mw | |
+.so opus7/article-tgtimes-a-billion-gopher.mw | |
+.so opus7/article-tgtimes-most-minimal-gopher-client-hardware.mw | |
+.so opus7/article-tgtimes-panopticon-effect.mw | |
+.so opus7/article-tgtimes-peering-cake.mw | |
+. | |
+.so opus6/footer.mw | |
diff --git a/opus7/tgtimes7.pdf b/opus7/tgtimes7.pdf | |
Binary files differ. | |
diff --git a/opus7/tgtimes7.txt b/opus7/tgtimes7.txt | |
@@ -0,0 +1,100 @@ | |
+ | |
+ | |
+ | |
+ The Gopher Times | |
+ | |
+____________________________________________________________ | |
+ | |
+ Opus 7 - Gopher news and more - Jan. 2023 | |
+____________________________________________________________ | |
+ | |
+ | |
+ | |
+ | |
+ Shell Redirections athas | |
+____________________________________________________________ | |
+ | |
+ Newcomers to the Unix shell quickly encounter handy | |
+ tools such as sed(1) and sort(1). This command prints | |
+ the lines of the given file to stdout, in sorted or- | |
+ der: | |
+ | |
+ $ sort numbers | |
+ | |
+ Soon after, newcomers will also encounter shell redi- | |
+ rection, by which the output of these tools can conve- | |
+ niently be read from or stored in files: | |
+ | |
+ $ sort < numbers > numbers_sorted | |
+ | |
+ Our new user, fascinated by the modularity of the Unix | |
+ shell, may then try the rather obvious possibility of | |
+ having the input and output file be the same: | |
+ | |
+ $ sort < numbers > numbers | |
+ | |
+ But disaster strikes: the file is empty! The user has | |
+ lost their precious collection of numbers - let's hope | |
+ they had a backup. Losing data this way is almost a | |
+ rite of passage for Unix users, but let us spell out | |
+ the reason for those who have yet to hurt themselves | |
+ this way. | |
+ | |
+ When the Unix shell evaluates a command, it starts by | |
+ processing the redirection operators - that's the '>' | |
+ and '<' above. While '<' just opens the file, '>' | |
+ *truncates* the file in-place as it is opened for | |
+ reading! This means that the 'sort' process will du- | |
+ tifully read an empty file, sort its non-existent | |
+ lines, and correctly produce empty output. | |
+ | |
+ Some programs can be asked to write their output di- | |
+ rectly to files instead of using shell redirection | |
+ (sed(1) has '-i', and for sort(1) we can use '-o'), | |
+ but this is not a general solution, and does not work | |
+ for pipelines. Another solution is to use the | |
+ sponge(1) tool from the "moreutils" project, which | |
+ stores its standard input in memory before finally | |
+ writing it to a file: | |
+ | |
+ $ sort < numbers | sponge numbers | |
+ | |
+ The most interesting solution is to take advantage of | |
+ subshells, the shell evaluation order, and Unix file | |
+ systems semantics. When we delete a file in Unix, it | |
+ is removed from the file system, but any file descrip- | |
+ tors referencing the file remain valid. We can ex- | |
+ ploit this behaviour to delete the input file *after* | |
+ directing the input, but *before* redirecting the out- | |
+ put: | |
+ | |
+ $ (rm numbers && sort > numbers) < numbers | |
+ | |
+ This approach requires no dependencies and will work | |
+ in any Unix shell. https://github.com/ptrks/AVR- | |
+ ENC28J60-Examples | |
+ | |
+ | |
+ | |
+ Publishing in The Gopher Times you | |
+____________________________________________________________ | |
+ | |
+ Want your article published? Want to announce some- | |
+ thing to the Gopher world? | |
+ | |
+ Directly related to Gopher or not, reach us on IRC | |
+ with an article in any format, we will handle the | |
+ rest. | |
+ | |
+ ircs://irc.bitreich.org/#bitreich-en | |
+ gopher://bitreich.org/1/tgtimes/ | |
+ git://bitreich.org/tgtimes/ | |
+ | |
+ Did you notice the new layout? We now can jump be- | |
+ tween single and double column as it is more fit: Some | |
+ large code chunks will not fit in a two-column layout, | |
+ but text is more pleasant to read on two columns. | |
+ | |
+ | |
+ | |
+ |