Updated build

This commit is contained in:
Mark Qvist 2025-12-22 19:09:59 +01:00
commit 663dc8fe7c
32585 changed files with 285364 additions and 0 deletions

View file

@ -0,0 +1,85 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>15 kilometre LoRa SSH link with RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="15 kilometre LoRa SSH link with RNode">
<meta name="description" content="In the last post, I looked at running APRS over LoRa using two RNodes. For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres.">
<meta property="og:description" content="In the last post, I looked at running APRS over LoRa using two RNodes. For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres.">
<meta property="og:image" content="https://unsigned.io/images/20180630_133650-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_06_30_15-kilometre-ssh-link-with-rnode.html">
<meta property="og:title" content="15 kilometre LoRa SSH link with RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_06_30_15-kilometre-ssh-link-with-rnode.html">
<meta name="twitter:title" content="15 kilometre LoRa SSH link with RNode">
<meta name="twitter:description" content="In the last post, I looked at running APRS over LoRa using two RNodes. For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres.">
<meta name="twitter:image" content="https://unsigned.io/images/20180630_133650-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-06-30</div>
<h1>15 kilometre LoRa SSH link with RNode</h1>
<p>In <a href="https://unsigned.io/aprs-over-lora-with-rnode/" title="APRS over LoRa with RNode">the last post</a>, I looked at running APRS over LoRa using two <a href="https://unsigned.io/rnode/" title="RNode">RNodes</a>. APRS is a relatively simple application, where data is mostly flowing from mobile stations, beaconing their position to fixed stations (which may in turn rebroadcast these beacons). As such, the system is largely unidirectional, and no fast-switching bi-directional communication takes places. As such, APRS is not very demanding from a hardware or software standpoint to support.</p>
<p>For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres, with just two RNodes, and no intermediaries. I scouted out a location with a distance of 15 kilometers to my home station, and found a pretty good spot. The total distance is actually 15.75 kilometres.</p>
<p><img src="../images/link_ssh-1024x726.png"/></p>
<p>The terrain profile for the RF path is absolutely not ideal. To be honest, I was doubting it would work at all, with those hills in between, but I wanted to give it a try either way. As I said, I wanted to push the limits of these things a bit. Sometimes, you get positively surprised though!</p>
<p><img src="../images/profile-0904_nofresnel-1.png"/>
<br/><br/></p>
<hr />
<center>***Note from the future***</center>
<p>The next part of this article talks about how to acheive the IP setup using <code>ax25-utils</code>, which has now disappeared from several distros.</p>
<p>It is now much easier to do this using the <code>tncattach</code> program, please see the <a href="https://unsigned.io/ethernet-and-ip-over-packet-radio-tncs">Ethernet and IP over Packet Radio TNCs with tncattach</a> post for a guide on how to use <code>tncattach</code> instead of using the old <code>ax25-utils</code> and <code>kissattach</code>.
<br/><br/></p>
<hr />
<p><br/>
To use SSH, we need IP. Luckily it's easy to set up an RNode as a generic network card. Under Linux, you will need a few packages. If you haven't already got them, use your package manager to install the following packages:</p>
<p><code>sudo apt install ax25-apps ax25-tools</code></p>
<p>You should also use the <a href="https://github.com/markqvist/rnodeconfigutil" rel="noopener noreferrer" target="_blank">RNode Config Utility</a> to put the RNodes into TNC mode. The command I used in this case was:</p>
<p><code>./rnodeconf /dev/ttyUSB0 -T --freq 433700000 --bw 125000 --txp 14 --sf 8 --cr 6</code></p>
<p>The above setup yields an on-air bitrate of 2.6 kbps. It's a bit low for interactive full-screen apps (unless you're the patient type), but works fine for simple stuff. At bitrates from about 5.7 kbps, interactive apps like <strong>htop</strong> or <strong>nano</strong> starts to work better.</p>
<p>With packages installed and RNodes configured, you will need to edit the <strong>/etc/ax25/axports</strong> file and add an interface for your RNode. Add a line like the following. Replace <strong>MYCALL</strong> with the callsign of your station. The <strong>1152000</strong> is the serial baud rate, <strong>484</strong> is the MTU, and <strong>5</strong> is the packet window. You can experiment with different window sizes, but don't change the MTU, it is intentionally set at that value (even though it might seem strange if you're used to "normal" ethernet).</p>
<p><code>rnode MYCALL 115200 484 5 RNode interface</code></p>
<p>After you've added the line to the configuration file, you're ready to bring up the interface. Use a command like the following. Remember to change <strong>/dev/ttyUSB0</strong> to whatever serial port the RNode is connected to. Also change the IP address to whatever you want it to be.</p>
<p><code>sudo kissattach /dev/ttyUSB0 rnode 10.189.77.12</code></p>
<p>Repeat the setup on the other computer, and make sure to set an IP address in the same subnet, so that the two hosts can communicate with each other. If the <strong>kissattach</strong> command completes successfully, you should be able to see the configured interface with <strong>ifconfig</strong>. Check that each host can ping each other to verify that everything is set up correctly!</p>
<pre><code>$ ifconfig ax0
ax0: flags=67&lt;up,broadcast,running&gt; mtu 484
inet 10.189.77.12 netmask 255.255.255.0 broadcast 10.255.255.255
ax25 OZ7TMD-4 txqueuelen 10 (AMPR AX.25)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>At this point I connected one RNode to an omnidirectional Diamond X200 antenna outside my house, and packed the other one along with a laptop and drove off. The antenna I used this time around was the Diamond NR770 that I've got mounted on my car. Here it is, with a view towards the home station. Somewhere, almost 16 kilometers in that general direction is another RNode listening for a signal.</p>
<p><img src="../images/20180630_133650-1024x659.jpg"/></p>
<p>So lets get started! To test whether there was any kind of connection, I tried pinging the other node. Success! I got ICMP replies immediately. Or, almost immediately. With a round-trip time of about 880ms, it is slow, but still totally useable for our purpose. At the higher bitrates, RTT is much more comfortable. At 21.8 kbps for example, RTT is about 170ms. Reminds me of the early days of 3G.</p>
<p><img src="../images/rnping-1-1024x576.png"/></p>
<p>After that I simply ran <strong>ssh -v 10.189.77.12</strong>, with the -v (verbose) flag so I could more closely see what was going on while it was connecting. After about 40 seconds of connection setup and key exchanges, I was greeted by the login prompt.</p>
<p><img src="../images/login-1-1024x576.png"/></p>
<p>Enter password, and there you go, logged in to the other box remotely from 15.75 kilometres away, using only two devices and 25mW of transmit power. Pretty fun stuff! As said earlier, full-screen interactive programs were too slow to be practical on just 2.7kbps, but the command line and simple stuff is fine.</p>
<p><img src="../images/ping-1-1024x576.png"/></p>
<p>I stayed connected for about 10 minutes and played around, and the connection was stable and functional during that time. I later tried faster bitrates at shorter distances, and at the higher bitrates, like 21.8 kbps, everything is very useable, and even full screen apps are comfortable enough to use.</p>
<p>Here's a <a href="https://youtu.be/IDjnK5Pp3hk">short video showing the entire connection and login process</a>. Admittedly, it is not very exciting, but it does show exactly how SSH works over a 2.7 kbps link :)</p>
<p><small><em>The astute reader will probably notice that I am a ham radio operator, and that I've used a ham frequency for this. As is tradition, I am sure someone will point out, that encryption is a no-no over ham radio frequencies. This is not the case where I live, so even heavily encrypted things like SSH are perfectly fine in ham radio here.</em></small></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

1
docs/3d/.htaccess Normal file
View file

@ -0,0 +1 @@
Header set Cache-Control "max-age=86400, public"

Binary file not shown.

437
docs/LICENSE.txt Normal file
View file

@ -0,0 +1,437 @@
Attribution-NonCommercial-ShareAlike 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
Public License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-NonCommercial-ShareAlike 4.0 International Public License
("Public License"). To the extent this Public License may be
interpreted as a contract, You are granted the Licensed Rights in
consideration of Your acceptance of these terms and conditions, and the
Licensor grants You such rights in consideration of benefits the
Licensor receives from making the Licensed Material available under
these terms and conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. BY-NC-SA Compatible License means a license listed at
creativecommons.org/compatiblelicenses, approved by Creative
Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
e. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name
of a Creative Commons Public License. The License Elements of this
Public License are Attribution, NonCommercial, and ShareAlike.
h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
i. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
k. NonCommercial means not primarily intended for or directed towards
commercial advantage or monetary compensation. For purposes of
this Public License, the exchange of the Licensed Material for
other material subject to Copyright and Similar Rights by digital
file-sharing or similar means is NonCommercial provided there is
no payment of monetary compensation in connection with the
exchange.
l. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
m. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
n. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part, for NonCommercial purposes only; and
b. produce, reproduce, and Share Adapted Material for
NonCommercial purposes only.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties, including when
the Licensed Material is used other than for NonCommercial
purposes.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-NC-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database for NonCommercial purposes
only;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.

View file

@ -0,0 +1,46 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>A New Board Joins the Family | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="A New Board Joins the Family">
<meta name="description" content="This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more.">
<meta property="og:description" content="This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more.">
<meta property="og:image" content="https://unsigned.io/images/20180406_152450-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_04_06_a-new-board-joins-the-family.html">
<meta property="og:title" content="A New Board Joins the Family">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_04_06_a-new-board-joins-the-family.html">
<meta name="twitter:title" content="A New Board Joins the Family">
<meta name="twitter:description" content="This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more.">
<meta name="twitter:image" content="https://unsigned.io/images/20180406_152450-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-04-06</div>
<h1>A new board joins the family</h1>
<p>Say hello to <strong>Unduino1284p</strong>! This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more. It is USB-powered, and connects directly to a host over USB for programming and serial communication. It measures less than 5x3 centimeters.</p>
<p><img src="../images/20180406_152450-1.jpg"/></p>
<p>It's truly a great board in a form factor that will fit into almost any project. It is also easy to place it in a breadboard for development. All pins of the ATmega1284p are broken out on the board.</p>
<p>I'm currently testing the latest revision of the design, and so far it is looking like everything is going to check out, which means that these should be available in my shop in a week or two. If you have any questions, post them in the comments!</p>
<p>You can read <a href="../unduino1284p">more about Unduino on this page</a>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,54 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>APRS over LoRa with RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="APRS over LoRa with RNode">
<meta name="description" content="One of the very convenient features of RNode is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software.">
<meta property="og:description" content="One of the very convenient features of RNode is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software.">
<meta property="og:image" content="https://unsigned.io/images/LoRa_APRS-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_06_29_aprs-over-lora-with-rnode.html">
<meta property="og:title" content="APRS over LoRa with RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_06_29_aprs-over-lora-with-rnode.html">
<meta name="twitter:title" content="APRS over LoRa with RNode">
<meta name="twitter:description" content="One of the very convenient features of RNode is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software.">
<meta name="twitter:image" content="https://unsigned.io/images/LoRa_APRS-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-06-29</div>
<h1>APRS over LoRa with RNode</h1>
<p>One of the very convenient features of <a title="RNode" href="../rnode" target="_blank">RNode</a> is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software. Arguably, APRS is the most popular amateur radio packet application currently, and a great way to experiment with the capabilities of the device.</p>
<p>You can use RNodes with just a small antenna attached directly to the SMA antenna port, but for this experiment, I wanted to try using them with external antennas connected.</p>
<p>I used the <a href="https://unsigned.io/rnodeconf">RNode Configuration Utility</a> to put two RNodes into TNC mode. I set the frequency to 433.7 MHz, and output power to 25mW. I configured the LoRa parameters to yield an on-air bitrate of 1.76 kbps, slightly higher than the 1.2 kbps normally used for APRS, but still in the same ballpark. RNode supports bitrates of up to 21.88 kbps, by the way. Here's the complete command I used to configure the RNodes:</p>
<pre><code>./rnodeconf /dev/ttyUSB0 -T --freq 433700000 --bw 125000 --txp 14 --sf 9 --cr 5
</code></pre>
<p>After configuring the devices, I hooked one up via USB to a computer at home with Xastir installed. I connected the antenna port to the feedline of a 430 MHz vertical antenna I have mounted outside the house.</p>
<p><img class="aligncenter size-large wp-image-882" src="../images/20180629_150717-1-1024x484.jpg" alt="20180629_150717" width="100%" /></p>
<p>The other one I attached to a laptop in my car (also running Xastir), and put a small magmount antenna on the roof. The larger antenna is connected to the mobile radio mounted in the car.</p>
<p><img class="aligncenter size-large wp-image-884" src="../images/20180629_200132-1024x548.jpg" alt="20180629_200132" width="100%" /></p>
<p><img class="aligncenter size-large wp-image-883" src="../images/20180629_162614-1-1024x575.jpg" alt="20180629_162614" width="100%" /></p>
<p>After that I went for a little drive to try out the setup. I keep being impressed by the range these devices offer at such a low power output.</p>
<p>The sensitivity of these things is just amazing. The farthest I went on this drive was 8 kilometers away, and the packets were still picked up fine by the receiving RNode, even though they were being transmitted from behind quite a few buildings, forests and hills. On the first part of the drive, you can see that there is quite some distance between the position updates, which was because I had set Xastir to query the GPS too slowly, so packets were not sent very often. On the last part, updates are quicker.</p>
<p>I actually think LoRa has a lot of potential for APRS networks. Being able to work below the noise floor, and utilising very low power output, LoRa APRS could even coexist with voice channels. If you're interested in getting started with LoRa, I think setting up a couple of APRS stations with RNodes is definitely a great and fun project! I'm definitely looking forward to experimenting more with this, and testing the limits of the concept.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

1
docs/archive_generated Normal file
View file

@ -0,0 +1 @@
Mon Dec 22 19:09:09 CET 2025

View file

@ -0,0 +1,42 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Arduino APRS Library | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Arduino APRS Library">
<meta name="description" content="It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE.">
<meta property="og:description" content="It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE.">
<meta property="og:image" content="https://unsigned.io/images/arduino_aprs2-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2014_12_10_arduino-aprs-library.html">
<meta property="og:title" content="Arduino APRS Library">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2014_12_10_arduino-aprs-library.html">
<meta name="twitter:title" content="Arduino APRS Library">
<meta name="twitter:description" content="It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE.">
<meta name="twitter:image" content="https://unsigned.io/images/arduino_aprs2-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2014-12-18</div>
<h1>Arduino APRS Library</h1>
<p>It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE. Check out the <a title="LibAPRS" href="http://unsigned.io/libaprs/">LibAPRS page</a> for more details. Per the time of this post, the library is considered beta status, so please let me know if you find any bugs! And ask away in the <a href="https://github.com/markqvist/Reticulum/discussions">forums</a> if you have any questions</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,346 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Abstractions Set In Granite | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:image" content="https://unsigned.io/images/asig_post.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta name="twitter:title" content="Abstractions Set In Granite">
<meta name="twitter:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta name="twitter:image" content="https://unsigned.io/images/asig_post.webp">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
//tex2jax: {inlineMath: [['$','$'], ['\(','\)']]}
tex2jax: {inlineMath: [['$','$']]}
});
</script>
<script type="text/javascript" async src="../scripts/mathjax/MathJax.js?config=TeX-AMS_CHTML"></script>
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2023-03-18 7:37:03</div>
<h2>Update: September 16th, 2025</h2>
<p><strong>I was wrong here!</strong> High-precision artefacts, and the Radial Traversal Pattern revisited:</p>
<p>When originally released, this article proposed embedded patterns and mathematical ratios in the most precise of the supposedly ancient Egyptian artefacts in the private collection of Adam Young (now running the company "Artifact Foundation"). However, recently <a href="https://arcsci.org/articles/revisiting_old_findings.html">this article on ArcSci.org</a> has refuted some of these claims, while confirming others. </p>
<p>While the discovery of the embedded $\pi$ and $\varphi$ ratios have now been convincingly substatiated, the existence of the Radial Traversal Pattern has been comprehensively, unequivocally and <strong>definitively</strong> refuted and dismissed. The proposed pattern <em>was</em> indeed a confirmation trap fluke - unquantifiable <em>even</em> within the extraordinary precision envelope of the object. I applaud the comprehensive, rigorous and on-point analysis, and I completely accept the refutation as valid.</p>
<p>This changes the probability calculation of this object substantially.</p>
<p>Back in 2023, I initially witheld judgement as to authenticity of the PV001 object. With the limited information available, I found it impossible to ascertain its authenticity, but simply shared my findings with the clear belief that it was important to investigate it further.</p>
<p>But given the overall picture of everything we now know, and the demonstrably horrible track-record of the "Artifact Foundation", I cannot escape openly stating my current personal opinion, as to the authenticity of this "artefact":</p>
<ul>
<li>The object itself, or at least its current form, is <strong>definitely</strong> not 5,000 years old.</li>
<li>It is either a modern replica, contemporary piece, or:</li>
<li>It was acquired as an ancient article, but later reworked to achieve its extraordinary qualities and features.</li>
</ul>
<p>For transparency and the full history of everything, I will not make corrections in the original article, but instead include this preface so it is clear what can be considered valid observations and what cannot.</p>
<hr />
<h2>Introduction</h2>
<p>This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, released on February 19th, 2023, by the team at <a href="https://unchartedx.com/site/2023/02/19/new-video-updates-to-the-vase-scan-responses-and-the-stl-file/">unchartedx.com</a>. For an introduction to the object itself, and some more context around how it was digitised, please see the first few paragraphs of my <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial analysis</a>.</p>
<p><img alt="Illustration 0" src="../images/a1_plate_0.webp" /></p>
<h3>Authors</h3>
<p>This article is written by Mark Qvist. The analysis and modelling work required to produce it has been the product of a joint effort between myself, and another engineer. For professional reasons, she currently wishes to remain unnamed. All mentions of "we" in this article refer to us as the authors. Whenever the <em>I</em> pronoun is found, it is used to signify an opinion, observation or conclusion made by myself alone.</p>
<h3>Preface</h3>
<p>Since getting access to the data, we have worked to gain a better understanding of this remarkable object, and we have been making some significant headway.</p>
<p>There is still much to learn, but we would like to share what we know so far. We could in no way have anticipated what came to light in this investigation, and just how extraordinary this object is.</p>
<p>While we cannot yet make any <em>direct</em> conclusions, as to who made this object, or when it was created, we now at least know a great deal more about the capabilities of the creators of the object.</p>
<p>This is a <em>long</em> article. If you want to ascertain wheter it is worth your time, you can skip ahead and read the conclusions first, which I am sure will catch your attention, if it wasn't already focused. If you have the patience though, I will recommend taking everything in its laid out order; there is a lot to unpack here.</p>
<h3>Some Math Included</h3>
<p>We will be using some mathematics to illustrate various points, but we have strived to keep it as simple to follow as possible. With a basic understanding of geometry and algebra, it should be possible to follow most of it. There will be a few sections where the equations get a little more involved. This is necessary to show that our model is valid, but these sections are not essential to the overall understanding of the article.</p>
<p>We will do our best to make the main points stand out even for those not interested in the math and equations. So if those parts doesn't mean anything to you, feel free to skip them.</p>
<p>In this article, we use <em>radians</em>, since it is a <em>universal</em> way to describe angles. Radians are based on the fundamental ratio between the radius and circumference of circle, whereas degrees is just an arbitrary subdivision of a circle into 360 pieces. As such, it is not based on any fundamental mathematical ratios or constants, and not really useful in an analysis such as this. Radians are useful because they show the underlying mathematical relations more clearly.</p>
<p>Radians may lead to some unease, if you are not familiar with them. Fear not, though! It is actually simpler, and much more intuitive than using degrees. All you need to know is that there is $2\times\pi$ radians in a circle, and $\pi$ radians in a triangle. For example, a $45^\circ$ angle is $\pi \over 4$ radians. You can describe any angle by simple fractions of $\pi$.</p>
<h2>Methodology</h2>
<p>This section will describe the methodology we employed while working with the object, and offer some context to the choices we made in analysing it, and in our design reconstruction.</p>
<h3>Initial Findings</h3>
<p>Shortly after the scan data of the granite artefact was released, I carried out an <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial geometrical analysis</a> of the object. This analysis showed very high levels of geometrical alignment in the object, even between exterior and interior features, as well as specific and consistent choices of angles and dimensional ratios.</p>
<p>These findings very clearly demonstrated, that there was a <em>design</em> behind the finished artefact, and that it did not just randomly appear, out of some intuitively guided fabrication process.</p>
<h3>Units, Measures &amp; Notes</h3>
<p>In this article, absolute measurements are given in <em>millimeters</em> ($mm$) or <em>micrometers</em> ($\mu m$), unless otherwise noted. Angles are specified in radians. All measurements mentioned here, have been taken on the high-resolution mesh data from the structured-light scan of the object.</p>
<p>Measurements were made in the application <em>Blender</em>, and parametric CAD models were created using <em>OpenSCAD</em>. The SCAD source code for our model is <a href="https://unsigned.io/dl/artefact_reconstruction.scad">available for download here</a>. We dimensioned the object in millimeters, and performed measurements by meticulously aligning measurement tools to vertices and polygonal plane intersections. For larger features we measured by manually working towards a best-fit placement of a measurement primitive, by the minimisation of the integral of the amplitudes of deviation over the measured feature.</p>
<p>All graphics and CAD renders presented in this article are ortographic projections. A simulated texture and lighting model has been applied in the renders, to make it easier to visually distinguish curvature and features of the object. This simulated texture is for illustrative purposes, and does not represent the real surface appearance of the object.</p>
<h3>Motivations For This Work</h3>
<p>The initial findings established the motivation for exploring the object more deeply. The approach taken in this work, has been to attempt to create a mathematically consistent and self-constrained model, that could describe all major features of the physical object.</p>
<p>It has been our theory, that if such a model indeed exists, and can be shown to map well to the actual object, it could allow us to learn a lot more about what processes and principles the designers of the object had access to, and what knowledge they held. By analysing the <em>simplest</em> way to create a satisfactory design for the object, we can get a good idea about the <em>minimum</em> levels of capabilities the designers must have had.</p>
<p>While I am currently the one collating our findings in this article, the work has been a shared effort, and is comprised of the input of a group of people. Without that, we would not have gotten as far in our understanding, as we are now.</p>
<h3>Constrained Design Hypothesis</h3>
<p>When designing an object, be that functional or purely aesthetic, one can take a multitude of approaches. It is of course possible for the designer to simply place various features of an object intuitively, without any underlying rules, constraints or principles, but practically all great design, art and architecture follow sets of internally consistent principles.</p>
<p>Various systems of design principles have been known since antiquity, and when beauty, completeness and harmony in form is experienced, it is often exactly because of the skillfull application of such principles. From the preliminary analysis of the object, we deemed it warranted to investigate whether such a set of principles had been employed in its creation, and if so, to what extent.</p>
<p>An important data point, that can be extracted through this approach, is the degree to which different design patterns are locked together to form <em>constraints</em>. In design work, such constraints are commonly used to define various aspects of the individual features, that make up the finished object.</p>
<p>If we can recreate the object from a relatively simple set of design primitives and constraints, which exhibit low degrees of interrelation, or if indeed no such relations even exist, and all features appear intuitively or randomly placed, this would indicate an object of a relatively low level of design complexity, or one that could have been made entirely from an intuitive process.</p>
<p>Contrarily, if we consistently see features defined by complex interrelations between different principles, this indicates a high level of design complexity, and that a higher level of abstraction was needed; not only in creating the design, but also in transferring it through the production method, to the finished object itself.</p>
<h3>The Parametric Model</h3>
<p>To explore what kinds of design principles were used in the creation of the object, we started out by measuring and mapping as many features of the object as possible, and looking for repeating patterns of placement and dimensioning, and repeating or mathematically significant ratios.</p>
<p>While we initially did not understand the underlying principles of what we found, it was clear that patterns and persistent ratios were present in overwhelming abundance throughout the object. Not only were they present, but they exhibited such a high degree of regularity, that we suspected them to be derived from well-defined mathematical formulae.</p>
<p>This led us to attempting something, that really should not have been possible, when dealing with a supposedly ancient artefact, made from granite, of all things: We decided to experimentally build a CAD model that would exclusively use mathematical concepts to dimension and place the features of the object, and use no tuning or arbitrary positional adjustments. All features should be placed and dimensioned by interrelation to each other.</p>
<p>We also limited the initial margin-of-error tolerance of the model to $75~\mu m$, in terms of how well it should map to the features of the actual object. This margin-of-error tolerance was, amongst other criteria, used to discern whether an attempted modelling of a particular feature should be considered for inclusion in the model, or rejected.</p>
<p><strong>I find it timely to stress how completely ludicrous this actually is</strong>. We are dealing with a stone vessel of supposed ancient origin, and are now proposing, that a purely mathematical CAD model, should somehow map to the actual object within a tolerance of less than 75 <em>thousands</em> of a <em>millimeter</em>.</p>
<p>Yet, I will let the results speak for themselves. Additionally, the CAD model, and all of its constituent equations, are available for verification, for anyone interested in doing so.</p>
<h2>Abstractions Set In Stone</h2>
<p>To arrive at a high-level understanding of how the object is defined, we will first look at some primary principles used in the design, and then describe how they are interrelated to create various features of the object.</p>
<h3>The Radial Traversal Pattern</h3>
<p>The most widely used primitive in the object is the circle. Circles, or arcs thereof, are used to define most of the features of the object, and <strong>all</strong> circular features in the object have radii that are interrelated with incredible consistency and precision.</p>
<p>There is, in fact, one single and elegant equation governing the dimensioning of almost all circles utilised in the design. The few circles not following this pattern have been specifically chosen to display some very significant numbers, which we will get to shortly. But for now, let's look at the radii-determining equation:</p>
<p>
<script type="math/tex; mode=display"> R(n) = \left({\sqrt 6 \over 2}\right)^n </script>
With this equation, we can generate all the relevant radii for shaping the object. We can more easily understand how this equation works, by looking at it geometrically.</p>
<p>Already in our early investigation, we noticed that many features seemed to be related to a certain geometric construction of unit circles, known as <em>The Flower of Life</em>. We also noticed that not just one, but several, of such grids were used. The above equation is the most simple description of how these grids interrelate to each other.</p>
<p>Let's look at two of these interrelated grids, composed of $R(3)$ and $R(4)$ circles. It is important to note, that there is no arbitrary decisions applied to these grids by us. Both their dimensions and positioning, in relation to each other, are determined by the above equation (and we shall see exactly how shortly). With these two grids, we can already define several features of the object:</p>
<p><img alt="Illustration 1" src="../images/a1_plate_1.webp" /></p>
<ul>
<li><strong>A</strong>: The top of the object (<em>deviation: $7~\mu m$</em>)</li>
<li><strong>B</strong>: The maximum extent of the curved part of the upper body (<em>deviation: $13~\mu m$</em>)</li>
<li><strong>C</strong>: The maximum diameter of the body curvature (<em>deviation: $72~\mu m$</em>)</li>
<li><strong>D</strong>: The maximum diameter of the internal cavity (<em>deviation: $161~\mu m$</em>)</li>
<li><strong>E</strong>: The bottom of the object (<em>accurate deviation indeterminable due to irregularity of scan data at lower terminus</em>)</li>
</ul>
<p>The design of the object ascends and descends to and from the various sizes of these <em>Flower of Life</em> grids, by using an elegant geometrical construction:</p>
<ul>
<li>Let us select two of intersection points (<strong>A</strong>) in the $R(3)$ pattern, separated by $1 \over 3$ of a full circle.</li>
<li>We now extend a line from each point, with an angle of ${\pi \over 4}~radians$ ($45 ^\circ$).</li>
<li>At the point where these intersect (<strong>B</strong>), we create the center of a new circle, and extend its radius to one of the first two points.</li>
</ul>
<p><img alt="Illustration 2A" src="../images/a1_plate_2a.webp" /></p>
<p>The ratio between the radii of the two circles is now $\sqrt 6 \over 2$. To clearly see why this is, we can place the following triangles in the construction:</p>
<p><img alt="Illustration 2B" src="../images/a1_plate_2_construction.webp" /></p>
<p>Since these two triangles share one equal side, we can use that to show the ratio:</p>
<p>
<script type="math/tex; mode=display">{ \sqrt(2) \over 2 } \times R = {\sqrt(3) \over 2} \times r \implies \sqrt(2) \times R = \sqrt(3) \times r \implies</script>
<script type="math/tex; mode=display">{R \over r} = {\sqrt(3) \over \sqrt(2)} = {\sqrt({3 \over 2})} = {\sqrt 6 \over 2}</script>
By the continuation of this pattern, we arrive at the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and thus the radii used in the object can be created:</p>
<p><img alt="Illustration 4A" src="../images/a1_plate_4.webp" /></p>
<p>Since this pattern is used extensively in the object, we will refer to this radial traversal function as $R(n)$ in the rest of this article.</p>
<p>With this elegant construction, we can account for the majority of the circular features in the object. All of the circles created with this function map to the actual radii of the features of the object with incredible precision.</p>
<p>For each of the radii marked in the graphic below, we found the place where the object deviated <em>the most</em>, from the mathematically pure representation of the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and collated these statistics across all observed radii:</p>
<ul>
<li>Minimal radial deviation is $3~\mu m$</li>
<li>Maximal radial deviaton is $68~\mu m$</li>
<li>Mean radial deviation is $16.25~\mu m$</li>
<li>Median radial deviation is $9~\mu m$</li>
</ul>
<p>Please note, that most radii (even those exhibiting local deviations above the mean) have areas that are, in any meaningful sense of the word, perfect. In many places, the deviation is so small, that we cannot say with certainty whether the deviation is due to "imperfections" in the object, or inaccuracies in the scan. All radii in the following illustration are generated by the $R(n)$ function, and are therefore tightly interrelated:</p>
<p><img alt="Illustration 4B" src="../images/a1_plate_4b_montage.webp" /></p>
<p>To see this level of <em>consistency</em> of precision across just two or three different radii, created from a purely mathematical function, would be astonishing. To see it <em>completely consistently</em>, to <em>microscopic precision</em>, across $12$ different radii, measuring from just $1.1~mm$, up to $42.2~mm$, in a granite artefact, is more or less unfathomable.</p>
<h3>The 1-Radian Arc</h3>
<p>In addition to the radial traversal pattern, we have identified another recurring design principle. The extension of arcs of exactly $1$ radian, locked into configuration with circles created from the radial traversal function, is also used to construct several features of the object.</p>
<p>The part of the body above the handles is composed of two primary regions. The region immediately above the handles exhibits a slight curvature, while the upper region is perfectly conical. This configuration of features can be defined by extending an arc of exactly $1$ radian so that the arc intersects with the $R(3)$ circle defining the maximum extents of the upper body curvature.</p>
<p><img alt="Illustration 5" src="../images/a1_plate_5.webp" /></p>
<p>Placing the arc, so that its lines are tangent to the $R(3)$ circle, perfectly maps the conical region (<strong>A</strong>). And by its intersection with the circle, also marks the point (<strong>B</strong>) where the curved region and conical region meet. The maximum deviation of the conical region from the $1$ radian angle is a mere $37~\mu m$.</p>
<p>As we will see later, this $1$ radian arc is also used to position and dimension the handles.</p>
<h3>Incorporation of π</h3>
<p>The $R(n)$ function, discussed above, still leaves a few circular features unaccounted for, so let us explore how these were dimensioned. The opening into the internal cavity of the object has an interesting feature, in that it tapers slightly inward to a point, and then slightly outward again, before blending with the rest of the internal cavity.</p>
<p>Even this extremely delicate feature is perfectly described by the curvature of an $R(6)$ circle. Though the curvature is very slight, it is sufficient to create a clearly defined minimum for the internal radius of the opening $(Ri)$. Likewise, an external maximum diameter $(Do)$ is clearly definable from the curvature on the lip exterior.</p>
<p><img alt="Illustration 6" src="../images/a1_plate_6.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Ri} = { 58.9322 \over 18.7391 } = 3.14488 \approx \pi</script>
<script type="math/tex; mode=display">\Delta = \left({{Do \over Ri} \over \pi} - 1\right) \times 100 = 0.1046\%</script>
</p>
<p>As we can see, the difference between the ratio existing in the physical object, and a perfect representation of $\pi$ is less than $0.11\%$. In such a small object, this equates to a real-world deviation of approximately $32~\mu m$. This finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>. Furthermore, Marián Marčiš <a href="https://twitter.com/mariusderomanu3/status/1633564138772332549">has also found preliminary evidence</a> of the same ratio incorporated in an object currently displayed at the Cario Museum.</p>
<blockquote>
<p><strong>Here is an experiment to do at home:</strong> Try setting a variable gauge to a gap of $32~\mu m$. You will hardly be able to see <em>light</em> pass through that slit. A human hair is twice as thick as the deviation of the $\pi$ ratio in the object. Even calling this an "imperfection" would seem just <em>slightly</em> arrogant.</p>
</blockquote>
<p>The creators of this object inscribed $\pi$ to perfection at the <em>microscopic scale</em>, in one of the hardest and most difficult materials to work with. I remain doubtful, that it would even be possible to replicate this result with modern CNC machinery.</p>
<h3>Incorporation of The Golden Ratio</h3>
<p>In a similar fashion to the use of $\pi$ above, the golden ratio has also been incorporated in the design of the object. The ratio between the diameter of the narrowest part of the exterior neck $(Dn)$, and the inner radius $(Ri)$ is $\varphi^2$.</p>
<p><img alt="Illustration 7" src="../images/a1_plate_7.webp" /></p>
<p>
<script type="math/tex; mode=display">{Dn \over Ri} = { 49.024 \over 18.7391 } = 2.61613 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left({{Dn \over Ri} \over \varphi^2} - 1\right) \times 100 = 0.072\%</script>
</p>
<p>Again we see a level of precision, that I have a hard time describing with words, so I will let the calculations speak for themselves. In the physical object, this <em>absolutely miniscule</em> deviation from <em>mathematically perfect</em> equates to approximately $20~\mu m$. As with the incorporation of $\pi$, this finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>.</p>
<h3>A Gift From The Past</h3>
<p>We also find the golden ratio encoded in the ratio between the outer diameter of the lip $(Do)$ and the radius of the foot $(Rf)$:</p>
<p><img alt="Illustration 8" src="../images/a1_plate_8.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Rf} = { 58.9322 \over 22.5299 } = 2.615733 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left(1-{{Do \over Rf} \over \varphi^2} \right) \times 100 = 0.088\%</script>
The deviation in absolute measurements here is approximately $35~\mu m$.</p>
<p>As a sort of mathematical gift, the designers of the object placed a double equivalence here: Since $Do$ is already produced by $\pi$, the radius of the foot can be more purely described as $Rf = {Ri \times \pi \over \varphi^2}$. Because this creates an equivalence between all four measures, established by fundamental mathematical concepts, the following should be a reasonable extension:</p>
<p>
<script type="math/tex; mode=display">Do = {Ri \times \pi} ~~\land~~ Dn = Ri \times\varphi^2 ~~ \land ~~ Rf = {Ri \times \pi \over \varphi^2}</script>
<script type="math/tex; mode=display">Ri = 1 ~~ \implies ~~ {Do = \pi} ~~ \land ~~ {Dn = \varphi^2} ~~ \land ~~ {Rf = {\pi \over \varphi^2}}</script>
<script type="math/tex; mode=display">\therefore</script>
<script type="math/tex; mode=display">1 = Ri</script>
</p>
<p>I really cannot imagine a more elegant and beautiful way to establish and communicate a base unit of measure. Whoever created this fascinating object wanted us to know what their measurement system looked like, and here it is. Set in stone, in the universal language of mathematics, and preserved through the ages. Absolutely incredible.</p>
<p>Since we do not currently have any better designation, we will refer to the unit of measure used in the design as $U$ (<em>Units</em>). According to our measurements, an approximation to this unit of measure could be:</p>
<p>
<script type="math/tex; mode=display">1~U \approx 18.739~mm</script>
Since we have observed dimensional deviations of between $20\mu m$ and $32\mu m$ in the measurements used to arrive at this number, we do not recommend using the above approximation as a basis for reference outside of this article.</p>
<p>We do, however, see an interesting corellation in this number. The approximation we have arrived at is just a mere $2.07\mu m$ (less than the scan accuracy) away from <em>exactly</em> matching the wavelength of an eloctromagnetic wave, with a frequency of $16~GHz$, propagating in vacuum:</p>
<p>
<script type="math/tex; mode=display">{c \over f} = {299,792,458~m/s \over 16,000,000,000~Hz} = 18.737028625~mm</script>
</p>
<p>We believe this establishes a more clear common reference, since $1~U$ can elegantly be defined as a simple subdivison of the speed of light in a vacuum.</p>
<p>For the purpose of having a shared reference, and thus the ability to talk about this unit without undue confusion, we would like to humbly propose its <em>provisional</em> definition based on the above ratio:</p>
<p>
<script type="math/tex; mode=display">1~U = 18.737028625~mm</script>
</p>
<h3>Original Dimensions Revealed</h3>
<p>With the above information, we are now able to see what the dimension of this object would really have looked like to its creators. Millimeters have a hard time conveying any meaning here, but once we view the dimensions in $U$, we are treated to a very different, and beautiful picture:</p>
<table>
<thead>
<tr>
<th>Dimension</th>
<th>$U$</th>
<th>$mm$</th>
</tr>
</thead>
<tbody>
<tr>
<td>Opening Radius</td>
<td>$1$</td>
<td>$~18.74$</td>
</tr>
<tr>
<td>Height</td>
<td>$32 \over 5$</td>
<td>$~119.9$</td>
</tr>
<tr>
<td>Width</td>
<td>$9 \over 2$</td>
<td>$~84.3$</td>
</tr>
<tr>
<td>Width at Handles</td>
<td>$46 \over 9$</td>
<td>$~95.7$</td>
</tr>
<tr>
<td>Max Lip Diameter</td>
<td>$\pi$</td>
<td>$~58.9$</td>
</tr>
<tr>
<td>Min Neck Diameter</td>
<td>$\varphi^2$</td>
<td>$~49.0$</td>
</tr>
<tr>
<td>Foot Radius</td>
<td>${\pi \over \varphi^2}$</td>
<td>$~22.5$</td>
</tr>
</tbody>
</table>
<h3>Placing The Handles</h3>
<p>In this section, we will show how the handles are created. The mathematics needed for this willl get a little more complex, and may not be interesting for everyone. However, we believe it is very important to account for this construction clearly, since it shows with undeniable clarity, just how complex and interrelated the design of the object is, and we want to present the mathematics as a concrete proof for this.</p>
<p>If you are not interested in the equations, you can skip to immediately after the vector construction, where we will return to talking about what it means, in plain english.</p>
<p>The geometry of the handles is constructed from an interaction between two of the 1 radian arcs, introduced earlier. The first of these arcs is extended from the center intersection point of the R(3) Flower Of Life grid:</p>
<p><img alt="Illustration 9" src="../images/a1_plate_9.webp" /></p>
<p>The second is created by constructing a $1$ radian arc, that is tangent to the upper circle in the $R(4)$ Flower Of Life grid:</p>
<p><img alt="Illustration 10" src="../images/a1_plate_10.webp" /></p>
<p>With these two arcs defined (originating from the $R(3)$ and $R(4)$ Flower Of Life grids), and an $R(-4)$ circle, we now have all the constraints necessary to construct the geometry of the handles, which can be expressed as a polar vector, $V_h$:</p>
<p><img alt="Illustration 11" src="../images/a1_plate_11.webp" /></p>
<p>
<script type="math/tex; mode=display">V_h = \begin{bmatrix} \ell \cr \theta \end{bmatrix}</script>
</p>
<center><i>Where</i></center>
<p>
<script type="math/tex; mode=display">\theta = {1 \over 2}~~~\land~~~\ell = {{{R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)} \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2}) + {{R(-4)} \over {sin({\pi \over 2}-1)}}</script>
</p>
<center><i>Because</i></center>
<p>
<script type="math/tex; mode=display">d = {1 \over 2} \times R(3) + {\sqrt(3) \over 2} \times R(3)~~\land~~ y = {R(4) \over \sin({1 \over 2})} \implies a = y - d \implies</script>
<script type="math/tex; mode=display">a = {R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)</script>
<script type="math/tex; mode=display">\ell_1 = {a \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2})~~\land~~l_2 = {{R(-4)} \over {sin({\pi \over 2}-1)}} \implies \ell = \ell_1 + \ell_2</script>
<br/><br/>
The remaining features of the handles are accounted for as follows:</p>
<ul>
<li>The angle of the straight part of the lower section of the handle is defined by the first $1$ radian arc, and is thus $\frac{1}{2}$ radian.</li>
<li>The curvature blending the straight part of the lower section of the handle to the body is defined by an arc of an $R(-13)$ circle. The $1 \over 2$ radian angle is tangent to this circle.</li>
<li>As best as we can currently tell, the straight part of the upper section of the handle has been intentionally configured to an angle of $\varphi \over 10$ radians.</li>
<li>The curvature blending the straight part of the upper section of the handle to the body is defined by an arc of an $R(-12)$ circle. The $\varphi \over 10$ radian angle is tangent to this circle.</li>
<li>An astute observer will notice that a very small outward anomaly ($\sim0.3~mm$) exists on the upper handle curvature. This feature is accurately accounted for, by adding a slightly offset $R(-5)$ circle to the geometry.</li>
</ul>
<p>We have <strong>not</strong> been able to simplify this construction any further than the above, and believe it is most likely the optimal configuration for creating the handles, in terms of simplicity. The implications of this are <strong>substantial</strong>.</p>
<p>The physical geometry, that we observe in the finished object, is <em>essentially created as the solution to a highly interrelated set of equations</em>, that span the entire object, in multiple dimensions and configuration spaces.</p>
<p>We consider it highly likely that the <em>entire object</em> can indeed be represented as <strong>a single equation</strong>.</p>
<h2>Conclusions</h2>
<p>It is our conviction that our current model demonstrates, with overwhelming certainty, that a high degree of sophisticated design principles, and intricately interlinked relations and design constraints are present in the object.</p>
<p>While we cannot tell with certainty, if the way that we have <em>described</em> the design exactly matches that of the original creators, we are confident that our reverse-engineered model does indeed represent the <em>actual</em> mathematics, interrelations and constraints present in the original design.</p>
<p>While there is still much to learn about this fascinating artefact, the knowledge and data we already have, allows us to draw some conclusions with confidence.</p>
<h3>On Chance Occurrence</h3>
<p>Could an object like this simply have been a chance happening? A rare coincidence of random alignment?</p>
<p>No. Proposing that would be completely magical and superstitious thinking.</p>
<p>Maintaining absolute precision and consistency by chance, between all the interlinked systems present in the object, is - simply put - an impossibility. Waking up one morning, with an entirely new universe sprouting from quantum fluctuations in your left nostril, would be a significantly more likely event.</p>
<p>It might be possible, by <em>extreme luck</em> to have an object randomly show the value of $\pi$ or $\varphi$ somewhere, but remember that <em>all</em> systems in this object are <em>tightly interrelated</em>! Changing one parameter would throw <strong>everything</strong> else off. Here, at least 15 levels of interrelation exists, and they are all precisely in harmony, down to microscopic scales.</p>
<p>This object was meticulously and carefully designed by a human being, with incredible levels of skill, insight and artistry. Of that, there can currently be no doubt.</p>
<h3>Required Design Capabilities</h3>
<p>What kind of system would have been necessary to represent the abstract design of the object, before its manufacture? Could the object have been designed by analogue means, for example as a drawing on paper, which was then used to guide the manufacture?</p>
<p>To attempt a satisfactory answer to this question, we will need to carefully consider a multitude of factors. A future article will delve into the full depth, that this question deserves, but we feel that our initial conclusions on the matter still bear touching upon here, even if only briefly.</p>
<p>When looking at the <em>scales</em> across which precision was maintained in this object, some interesting problems arise. The smallest radii - identified so far - in the object are only around $1 mm$, but they scale perfectly, through the radial traversal function, with precision in the micrometers, to even the largest radii in the object (of around $63mm$).</p>
<p>Carrying out this sort of scaling on any kind of analogue medium, would introduce errors immediately, that would only accumulate over successive radial traversals. Even our modern, finely tipped drawing tools, working on the smoothest of paper would create <em>errors</em> close to the <em>full radii</em> of some of these circles and features.</p>
<p>To account and control for such errors, the designer would have to scale up the blueprint to proportions of <em>at least</em> several meters, which of course just raises further questions of how to transfer it back down again, to the decidedly <em>petite</em> dimensions of the actual object.</p>
<p>Perhaps the most plausible way to represent this object on an analogue medium, would be to describe it geometrically and mathematically. This is decidedly possible, and one could even make sketches along the way, to show an <em>approximation</em> of the final design. Our civilization has known about the required mathematics to do this since approximately 500 CE.</p>
<p>But being faced with the prospect of then transferring this design through a manufacturing process, to a physical object, we are put squarely back to the starting point, since we now need to produce <em>some sort</em> of analogue template that can guide or control the manufacturing process.</p>
<p>While the point I will now make certainly necessitates a full, and very formal substantiation, I feel it would simply be cowardly of me, not to bring this argument to its logical conclusion, and stand by where the evidence and logic leads.</p>
<p><strong>As far as we know, no human beings, trained animals or naturally occurring phenomenae, modern or ancient, take mathematical formulae and equations as input, and produce lathe-operating motions as outputs.</strong></p>
<p>For all of the knowledge and insights we have accumulated over the ages, we know of exactly one, and <strong>only</strong> one <em>category</em> of things capable of such behaviour: The kind of thing, that we refer to as a <em>turing machine</em>. A device capable of taking input, holding state, performing operations on held states, according to pre-determined principles, and producing output.</p>
<p>They come in many shapes and sizes, and can be constructed mechanically, electronically and even pneumatically or hydraulically. And you are most likely using one right now, to read this article.</p>
<p><em>We</em> call this class of device <em>a computer</em>, and no plausible way of representing, operating on, or manufacturing the design of this artefact exists, without having access to one such.</p>
<h3>Required Manufacturing Capabilities</h3>
<p>When comparing the output of our generative model to the physical object, we can begin to get some rough insights into the fabrication capabilities of the creators of the object. From only looking at the observable facts, we can conclude the following:</p>
<ul>
<li>Since we have no known records of, or even ideas about, how an additive manufacturing process with granite could work, we are assuming a subtractive process (for example cutting, carving, grinding, ablating, and so on).</li>
<li>The creators of the object were able to consistently hold tolerances of around $30\mu m$ for subtractive processes in granite. In many places we see tolerances of less than $10\mu m$.</li>
<li>Tools used to substract material from the granite blank must have been held at incredibly high levels of axial stability to reach these tolerances.<ul>
<li>Technologically, this is <strong>only</strong> possible to achieve with ultra smooth and precise rods, bearings, ball-screws and similar mechanisms.</li>
</ul>
</li>
<li>Incredibly precise guiding mechanisms <strong>must</strong> have been employed to to control the substractive process, since the finished object conforms to the abstract design to microscopic levels of precision.<ul>
<li>Again, this <strong>absolutely requires</strong> mechanical technology of ultra high quality, rivalling or surpassing what we are able to produce today.</li>
</ul>
</li>
<li>We can observe no perceivable loss in calibration or positioning across curves of different radii, or their positional interrelation to each other, which most likely means that the creators of the object were able to machine it in a <em>single pass</em>, or could somehow carry out tool-changes with practically no loss of positional calibration.</li>
<li>The placement of the exterior features of the object, and the maintenance of precision across the areas between the handles means, that a simple rotational process would have been insufficient to produce the geometry we see.<ul>
<li>The most simple manufacturing process we have been able to come up with for the object, would require 5 axis of freedom in the system guiding the subtractive tool.</li>
</ul>
</li>
</ul>
<h3>Conclusions In Summary</h3>
<p>Based on the best understanding we currently have of the object, and on the knowledge of normal fundamental limits of physics and laws of nature, we have to conclude:</p>
<ul>
<li>That this object was fabricated on a highly sophisticated subtractive manufacturing system, from a solid piece of granite.</li>
<li>That the manufacturing system would require, <em>at the very least</em>, sophisticated mechanical technology and high-precision components.</li>
<li>That the manufacturing system would necessarily have been guided by an automated control system, which could read the design as input, and produce the required motions as output.</li>
<li>That a turing machine, of considerable sophistication, would most likely have been employed to create and operate on the design, and to finally transfer it to the manufacturing system.</li>
</ul>
<p>There is no way, in which we can attribute the production of this artefact, to anyone who do not possess, <em>at minimum</em>, the level of technological sophistication and capabilities mentioned above. This raises some very interesting questions regarding the origin of the object, which we hope to be able to explore in future work.</p>
<h3>Future Work</h3>
<p>We hope that a number of similar objects (of which there are thousands, in museums around the world) can be scanned with the same, or better, scanning technology, so that a body of work can be built up around the analysis of these remarkable artefacts.</p>
<p>With the analytical tools and technologies we have available today, we stand at the beginning of a new era of inquiry into our past and shared heritage. I can imagine few things more valuable, than deepening the understanding of our collective origins, as a species, and as individuals.</p>
<p>Only by open, critical and honest scientific inquiry, working from first principles anchored in concrete and verifiable data, can the deepest and most obscured echoes of our shared past be brought into the light of day once more.</p>
<p>We must allow the observable facts, the <em>givens</em> that we have, to speak <strong>without prior interpretation</strong>, even if the conclusions risk temporarily upsetting a prior understanding.</p>
<p>In the scientific endeavour, <strong>all</strong> theories are provisional, and must yield when a simpler one, that better fits the evidence, can be constructed. If this fundamental tenet ceases to hold primacy, science ceases to be science, and instead degrades into dogma.</p>
<p><br/><center><big><big><big><big>𓏜 𓂭</big></big></big></big></center></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,49 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>P-persistent CSMA | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="P-persistent CSMA">
<meta name="description" content="Just a quick update, but I just wanted to say that I have added full P-persistent CSMA to the KISS version of the MicroAPRS firmware, which means, that MicroAPRS will now adhere to the P and SlotTime parameters set by the controlling software.">
<meta property="og:description" content="Just a quick update, but I just wanted to say that I have added full P-persistent CSMA to the KISS version of the MicroAPRS firmware, which means, that MicroAPRS will now adhere to the P and SlotTime parameters set by the controlling software.">
<meta property="og:image" content="https://unsigned.io/images/csma-1-400x275.png">
<meta property="og:url" content="https://unsigned.io/articles/2014_11_20_p-persistent-csma.html">
<meta property="og:title" content="P-persistent CSMA">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2014_11_20_p-persistent-csma.html">
<meta name="twitter:title" content="P-persistent CSMA">
<meta name="twitter:description" content="Just a quick update, but I just wanted to say that I have added full P-persistent CSMA to the KISS version of the MicroAPRS firmware, which means, that MicroAPRS will now adhere to the P and SlotTime parameters set by the controlling software.">
<meta name="twitter:image" content="https://unsigned.io/images/csma-1-400x275.png">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2014-11-20</div>
<h1>P-persistent CSMA</h1>
<p>Just a quick update, but I just wanted to say that I have added full P-persistent CSMA to the KISS version of the MicroAPRS firmware, which means, that MicroAPRS will now adhere to the P and SlotTime parameters set by the controlling software. CSMA, or Carrier Sense Multiple Access, is a collision avoidance scheme used to minimise packet collisions on networks such as APRS. The functionality of CSMA is very simple, here's how it works:</p>
<ol>
<li>Assume that P is a predetermined number between 0 and 255, and SlotTime is a number of milliseconds</li>
<li>If there is another station transmitting, wait until the medium becomes idle</li>
<li>When there is no other transmitting stations, a random number R between 0 and 255 is picked</li>
<li>If R &lt; P, the packet is transmitted. If R &gt; P, the modem waits for SlotTime and goes to step 2</li>
</ol>
<p>Implementing this simple technique, the amount of collisions can be reduced significantly.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,84 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Prototype Preview | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Prototype Preview">
<meta name="description" content="I've been hard at work during the last while making a new version of MicroModem, with everything integrated on one board. Today I'm happy to present a sneak preview of the next version of MicoModem.">
<meta property="og:description" content="I've been hard at work during the last while making a new version of MicroModem, with everything integrated on one board. Today I'm happy to present a sneak preview of the next version of MicoModem.">
<meta property="og:image" content="https://unsigned.io/images/mmprotos1-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2014_12_01_prototype-preview.html">
<meta property="og:title" content="Prototype Preview">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2014_12_01_prototype-preview.html">
<meta name="twitter:title" content="Prototype Preview">
<meta name="twitter:description" content="I've been hard at work during the last while making a new version of MicroModem, with everything integrated on one board. Today I'm happy to present a sneak preview of the next version of MicoModem.">
<meta name="twitter:image" content="https://unsigned.io/images/mmprotos1-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2014-12-01</div>
<h1>MicroModem Prototype Preview</h1>
<h3>New hardware</h3>
<p>I've been hard at work during the last while making a new version of MicroModem. Particularly I wasn't too fond with the consistency in quality of the Microduinos I used as the processing board for the modems, and also very tired of Microduino occasionally using fake FTDI chips, which causes all kinds of headaches. So I set out to create a new version of MicroModem, with everything integrated on one board.</p>
<p>This allows me to source all the components, including the ATmega328p and the FTDI USB chips myself, thus ensuring that the quality of the modems are top notch every time. Sourcing the Microduinos was also a bit of a problem because of the very long and irregular lead times when ordering from them, which made it more or less impossible to manage stock, when I only do as small production runs as I do. Don't get me wrong, I really like Microduinos, but they're just not the best for this application :)</p>
<p><img src="../images/mmprotos-h-1024x891.jpg" alt="mmprotos-h"/></p>
<p>Today I'm happy to present a sneak preview of the next version of MicoModem! Please note that these boards are prototypes, and do not represent the quality of the final product. The final modems will come on a really nice black PCB with gold plated pads :) Functionally, the hardware&nbsp;is almost the same as before, featuring an ATmega328p, USB serial connection, the modem circuitry and adjustable output level.</p>
<p>The biggest change is that the demodulator ADC is now referenced from a regulated 3.3v supply instead of the 5V (rather noisy) bus. This gives much better receive sensitivity and performance, especially in noisy conditions. I should also mention that they are fully Arduino compatible, so you can reprogram them straight from the Arduino IDE over a USB connection! More on why this is awesome in the next section...</p>
<p>Here's a photo of the MicroModem prototype compared to an USB thumb drive. The dimensions of the board are 29 x 49 mm, so it's pretty compact! It's actually only 66% of the total footprint of the Microduino-based version.</p>
<p><img src="../images/mmproto-thumb-1-1024x689.jpg"/></p>
<h3>New software</h3>
<p>The other big update is that I am in the process of a very big re-write of the entire MicroModem and MicroAPRS firmwares. I want to move away from the <a title="BertOS" href="http://bertos.org" target="_blank" rel="noopener noreferrer">BertOS</a> foundation of the project, to better be able to optimise resource usage, and make the software more platform-independent. BertOS is awesome, but it is stupidly difficult&nbsp;to make it target multiple different processors. In the future, a firmware like MicroAPRS should be able to easily support many different processors. which brings us to the next point...</p>
<p>Arduino compatibility! I'm really excited about this!&nbsp;Concurrently with the release of the new modems I will release an Arduino library, that will make it very easy to create your own MicroModem firmware straight in the Arduino IDE. Want to make your own APRS tracker? How about something like this:</p>
<pre><code class="language-c">#import &lt;MicroAPRS.h&gt;
#import &lt;GPS.h&gt;
APRS myAprs;
GPS myGPS(Serial);
void setup() {
APRS_init(myAPRS);
GPS.begin(9600);
myAprs.setCallsign(&quot;NO1CLL&quot;);
myAprs.setSSID(1);
}
// Transmit a simple beacon every 30 seconds
void loop() {
GPS.parse(GPS.lastNMEA());
myAprs.setLat(GPS.lat);
myAprs.setLon(GPS.lon);
myAprs.transmitLocation(&quot;MicroAPRS Tracker&quot;)
delay(30000);
}
// This function gets called by the APRS
// library whenever a packet is received
void aprsCallback(APRSPacket *packet) {
Serial.print(packet.data);
}
</code></pre>
<p>Plug your MicroModem into your computer, hit upload in the Arduino IDE, and you're good to go! The MicroAPRS functions will run "in the background" of your sketch taking care of the heavy lifting, leaving you to implement the stuff you care about very easily! I think this will be a really great thing, both for people who buy a modem from me, but also for people who want to make their own.</p>
<p>It will be possible for someone with only minimal experience to build and program their own AFSK / AX.25 / APRS modem! And if you buy the modem from me, you get a professional quality modem, that is totally open source and the most flexible and customisable one currently on the market :)</p>
<h3>Backward-compatibility</h3>
<p>The new firmwares and Arduino libraries will of course be backward-compatible with the previous MicroModem versions! There will be a hardware detect feature in the library and firmwares that checks for hardware version and adjusts some configurations accordingly.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,42 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Arduino APRS Library | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Arduino APRS Library">
<meta name="description" content="It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE.">
<meta property="og:description" content="It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE.">
<meta property="og:image" content="https://unsigned.io/images/arduino_aprs2-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2014_12_10_arduino-aprs-library.html">
<meta property="og:title" content="Arduino APRS Library">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2014_12_10_arduino-aprs-library.html">
<meta name="twitter:title" content="Arduino APRS Library">
<meta name="twitter:description" content="It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE.">
<meta name="twitter:image" content="https://unsigned.io/images/arduino_aprs2-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2014-12-18</div>
<h1>Arduino APRS Library</h1>
<p>It's here! I have just released the first version of LibAPRS for the Arduino IDE! You can now write your own APRS firmwares for MicroModem or compatible builds directly in the Arduino IDE. Check out the <a title="LibAPRS" href="http://unsigned.io/libaprs/">LibAPRS page</a> for more details. Per the time of this post, the library is considered beta status, so please let me know if you find any bugs! And ask away in the <a href="https://github.com/markqvist/Reticulum/discussions">forums</a> if you have any questions</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,79 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>The new MicroModem | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="The new MicroModem">
<meta name="description" content="The hardware design for the new MicroModem is now finished, and is ready to ship! I feel that MicroModem is now at a point where it is actually a really great product.">
<meta property="og:description" content="The hardware design for the new MicroModem is now finished, and is ready to ship! I feel that MicroModem is now at a point where it is actually a really great product.">
<meta property="og:image" content="https://unsigned.io/images/A2-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2014_12_19_the-new-micromodem.html">
<meta property="og:title" content="The new MicroModem">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2014_12_19_the-new-micromodem.html">
<meta name="twitter:title" content="The new MicroModem">
<meta name="twitter:description" content="The hardware design for the new MicroModem is now finished, and is ready to ship! I feel that MicroModem is now at a point where it is actually a really great product.">
<meta name="twitter:image" content="https://unsigned.io/images/A2-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2014-12-19</div>
<h1>The new MicroModem</h1>
<p>Yay! The hardware design for the new MicroModem is now finished, and has become something I feel that I can ship! What a great feeling! There's been many revisions, many small changes, various experiments and general mocking around, but in the end, I feel that MicroModem is now at a point where it is actually a really great product.</p>
<p>It's been an interesting journey, and there's been many different choices along the way. I'd like to share a few of them! If you don't feel like reading all my blabberings, here's the short version: All is good, hardware and software is ready, MicroModems are back in the shop!</p>
<p><img src="../images/A2-1-1024x576.jpg" /></p>
<h3>New features</h3>
<p>Before I going into the details, I better just quickly list some of the new features of this version:</p>
<ul>
<li>Integrated design, everything on one board</li>
<li>Dimensions are just 2.9 x 4.9 cm (I think&nbsp;this is the worlds smallest full-featured TNC)</li>
<li>Lot's of pins broken out to connectors</li>
<li>ADC running at 3.3V reference, better decode sensitivity (about 10% more packets decoded in my tests)</li>
<li>3.3V regulated output for driving other stuff (like a GPS)</li>
<li>More robust USB Mini-B receptacle</li>
<li>High-quality crystal for better frequency stability</li>
<li>All high-quality components</li>
<li>Fully Arduino IDE compatible</li>
</ul>
<h3>The Hardware Journey</h3>
<p>When I first designed MicroModem, I wanted to make a modem that more or less anyone, with only some basic electronic skills could build. I think the topic of digital communication is extremely interesting, and my motivation was really just to make that topic more accessible to others in a direct experience way. I think and hope I succeeded in that goal, and while the new MicroModem might not be something you'd want to build yourself, the formula is essentially the same, and all of the old resources are still available for the "DIY" version, that will work just as good as it always has. I'm not leaving any users in the dark in regards to software updates either, all of the new software works on the first generation of hardware as well, but more on that later.</p>
<p>When I started selling the MicroModem builds based on the Microduino and the MicroModem expansion boards, it quickly became apparent that this was a really bad manufacturing process. It took&nbsp;<em>ages</em> to get new Microduino boards from the manufacturer. It took a lot of time to assemble the boards. The cost for the modules was way too high. There were quality issues with the Microduino core modules and USB modules, that basically meant I was running very near a net loss in making these modems. Bad plan if you want to make great products, and continue doing so! Well, sometimes you gotta make some mistakes to learn how to do it right!</p>
<p>Obviously these challenges prompted me to rethink the manufacturing process of the modem. It became clear rather quickly, that if I wanted a manufacturing process that was more smooth, I would need to make everything from scratch. That way, all the components would be easy to source, and would only have lead times of a couple of days, instead of several weeks. That's really key when you're doing small production runs as I am. The amount of modems I sell doesn't really warrant me shopping components for hundreds of modems at a time. Hopefully that will change in the future! But until then it's important to have a flexible source of parts, so I can just order components when stock starts running low, and then be ready with more modems before stock runs out.</p>
<p>But going to a fully custom design also meant a lot of research! I wanted to make the modem fully Arduino compatible, so you can just plug it into your computer and program it from the Arduino IDE. That basically meant designing an "Arduino clone" with the modem ciruictry integrated on the board. I drew up a quick prototype and send off a PCB order. Fingers crossed! Luckily it turned out to be less trouble than I had thought, and the first "Arduino" prototype actually worked flawlessly... Well, almost... At least it did after air-rigging in an extra resistor I had forgotten in the schematic and PCB! Well, I guess that's what prototypes are for!</p>
<p><img src="../images/BoardOverview-1-1024x623.png"/></p>
<p>It also meant moving from through-hole components, that I was very comfortable with, to surface mount technology. Yikes! Those things are small! I had never done ANY surface mount work before, and I was a little scared it would turn out pretty difficult. I can tell you now though, that if you have been thinking of doing surface mount designs for some project, do yourself a favor and just do it! I was amazed that it is actually&nbsp;<em>easier&nbsp;</em>and a lot quicker than through hole designs! Yeah, the components are small, but it's not a big deal. Just go spend four bucks on a nice pair of tweezers, and you're good to go! For prototyping stuff, you can easily hand-solder SMD components, but of course you need a reflow oven for manufacturing. So I set out to put one together, and after some Youtube-education, a trip to a hardware store and bunch of modifications, I had myself an temperature-controlled SMD reflow oven. There's plenty of videos and tutorials available on how to build one, and all I can say is that it works great! No reason to go spend several thousand bucks on a fancy oven, when you can build one yourself for much, much less.</p>
<h3>Connectors, Colors, Compromises and Mishaps</h3>
<p>Tools and skills in hand, the actual work on designing the board flowed great. There's been quite a few iterations. I always ended up wanting to just improve that last little thing, but even though it's dragged out the process a bit, I think it has paid of in the end. There's also been a few compromises. I initially promised that the finished boards would be with a black solderscreen finish. Well, I will have to take that one back. I did make a small batch of black modems, but the quality is just not as good as with the normal green mask, which lead to me having to manually fix little errors on about 50% of the boards. The silkscreen (the text on the board) also had this strange habit of turning pink when reflow-soldered on the black boards. Apparently <a href="http://forum.pjrc.com/threads/24950-Teensy-3-1-Changes-To-Green-PCB" target="_blank" rel="noopener noreferrer">I'm not the first one to come to this conclusion</a>. Oh well, even though the black boards looked really cool, I hope you'll agree that the quality is more important! I might go with another fancy color in the future, if I can find a PCB manufacturer that can do them in good quality, but for now, green it is!</p>
<p><img src="../images/silkscreen-1.jpg" /></p>
<p>I would also never have imagined how much of the design process is taken up looking for components! You have&nbsp;<em>no idea</em> how much time I have spent looking at different connectors, finding just the right ones, ordering some to test, only to find out they didn't live up to my expectations. Try again! There's an ocean of different connectors out there, and quite frankly many&nbsp;of them are crap! The one's I ended up going with are not. They're low profile, so they don't take up much vertical space, but they still have a nice gripping action when inserting a pin or jumper cable in them, and they look good as well!</p>
<p>Also, on another strange note, the connectors have ended up being&nbsp;some of the most expensive components of the board, taking up roughly 30% of the total cost of the modem! I wouldn't have guessed beforehand. And no, I didn't just buy the most expensive ones I could find. They're not the cheapest ones either, but proper connectors are apparently just expensive! I had to settle for a price for the modem a bit higher than the previous version, to not drive myself out of business. MicroModem is still the cheapest full-featured TNC/AFSK1200 Modem on the market though, so I think it's a still a pretty good deal! There will be a cased version of the modem as well, but I won't have time to finish the design until after the holidays.</p>
<p><img src="../images/A3-1-1024x692.jpg" /></p>
<p>In the department of compromises, I had to sack the ADC-reference detect feature. As you might know, I had earlier promised an "auto-detect" feature for detecting whether the modem's ADC was running from a 5V or a 3.3V reference. In the end I was not able to implement this in a satisfactorily reliable way. You want this feature to work&nbsp;<em>every</em> time, not just 99.999% of the times, and unfortunately I could not get to the level of confidence that I wanted, so I ended up deciding that it was better to simply offer different firmware builds, one for 5V and one for 3.3V, and include easy switches in the source code, so you can select it yourself if you're brewing your own firmware. It might not be as slick and cool, but it's safe and reliable.</p>
<h3>The Great Code Cleansing</h3>
<p>As you might now, I have been in the process of rewriting the entire codebase for the APRS-oriented firmware, MicroAPRS. Why be so mad when the existing firmware had just gotten to a point you could call "feature-complete"?! Well, mostly because I like flexible, and the way the firmware had developed was anything else than flexible. When I started writing it, I based it on the BertOS SDK, because it has a lot of really nice features and shortcuts for developers. Like not having to write your own serial driver, which is really nice! But it also carries a lot of bloat and ugly staticness, and made the firmware about as portable as a pint of syrup in a shoe.</p>
<p>One of my goals with MicroAPRS is to offer a codebase that can compile on many different MCUs, not just the 328p. This was not really going to work with BertOS, so I decided to do the right thing, and start over before it was too late. The results are now in, and I'm glad I did it! Resource usage, both in terms of flash and RAM is almost&nbsp;<em>halved</em>. That's some pretty big savings on a small processor! And this has also allowed me to fulfill another goal: creating an <a title="LibAPRS" href="http://unsigned.io/libaprs/">APRS library for the Arduino IDE</a>.</p>
<p>You can now create your own APRS firmwares for MicroModem, right from the comfort of the Arduino IDE. Also, as a small teaser, I can say that I have an unreleased version that runs on the ATmega1284p. More on this in the future though, I'm not going to go into detail with it here.</p>
<h3>Ready to go</h3>
<p>In conclusion, I also want to say a huge thanks to all of you who have helped out with ideas, found bugs, made great suggestions, and made awesome things based on MicroModem! This is really what makes it so much fun to design a product like this! I hope all of you will come to enjoy using the new MicroModem as much as I did designing it!</p>
<p>I have a small batch of modems ready to ship out now, and will have many more available after the holidays. Thanks for the fun ride so far!</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,44 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Digipeater Firmware | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Digipeater Firmware">
<meta name="description" content="There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected.">
<meta property="og:description" content="There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected.">
<meta property="og:image" content="https://unsigned.io/images/DSC00540-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2015_05_21_digipeater-firmware.html">
<meta property="og:title" content="Digipeater Firmware">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2015_05_21_digipeater-firmware.html">
<meta name="twitter:title" content="Digipeater Firmware">
<meta name="twitter:description" content="There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected.">
<meta name="twitter:image" content="https://unsigned.io/images/DSC00540-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2015-05-21</div>
<h1>Digipeater Firmware</h1>
<p>There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected. You can grab the sources from the <a href="https://github.com/markqvist/MicroDigi">MicroDigi GitHub repository</a>.</p>
<p>The firmware should still be considered beta quality, and there might be bugs here and there, so watch out! You will also need to configure and compile this yourself. To do so, set your callsign and SSID settings in the "config.h" file. There is also other settings you can configure, such as path clamping and whether to operate as FILL-IN digi or a regular WIDEn-N digi.</p>
<p>Please report any bugs you find, and also let me know of feature requests!</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,46 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>A New Board Joins the Family | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="A New Board Joins the Family">
<meta name="description" content="This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more.">
<meta property="og:description" content="This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more.">
<meta property="og:image" content="https://unsigned.io/images/20180406_152450-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_04_06_a-new-board-joins-the-family.html">
<meta property="og:title" content="A New Board Joins the Family">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_04_06_a-new-board-joins-the-family.html">
<meta name="twitter:title" content="A New Board Joins the Family">
<meta name="twitter:description" content="This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more.">
<meta name="twitter:image" content="https://unsigned.io/images/20180406_152450-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-04-06</div>
<h1>A new board joins the family</h1>
<p>Say hello to <strong>Unduino1284p</strong>! This mini-sized Arduino-compatible MCU board is really compact but still very powerful, and most important of all, super easy to use. Sporting the ATmega1284p processor, it offers lots of IO pins, 16 kilobytes of RAM, 128 kilobytes of flash, high-precision ADCs, and much more. It is USB-powered, and connects directly to a host over USB for programming and serial communication. It measures less than 5x3 centimeters.</p>
<p><img src="../images/20180406_152450-1.jpg"/></p>
<p>It's truly a great board in a form factor that will fit into almost any project. It is also easy to place it in a breadboard for development. All pins of the ATmega1284p are broken out on the board.</p>
<p>I'm currently testing the latest revision of the design, and so far it is looking like everything is going to check out, which means that these should be available in my shop in a week or two. If you have any questions, post them in the comments!</p>
<p>You can read <a href="../unduino1284p">more about Unduino on this page</a>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,54 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>APRS over LoRa with RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="APRS over LoRa with RNode">
<meta name="description" content="One of the very convenient features of RNode is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software.">
<meta property="og:description" content="One of the very convenient features of RNode is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software.">
<meta property="og:image" content="https://unsigned.io/images/LoRa_APRS-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_06_29_aprs-over-lora-with-rnode.html">
<meta property="og:title" content="APRS over LoRa with RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_06_29_aprs-over-lora-with-rnode.html">
<meta name="twitter:title" content="APRS over LoRa with RNode">
<meta name="twitter:description" content="One of the very convenient features of RNode is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software.">
<meta name="twitter:image" content="https://unsigned.io/images/LoRa_APRS-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-06-29</div>
<h1>APRS over LoRa with RNode</h1>
<p>One of the very convenient features of <a title="RNode" href="../rnode" target="_blank">RNode</a> is the ability to use it as a fully integrated TNC and data radio, in one compact device. In it's KISS-compatible TNC mode, RNode can be used with more or less any amateur radio packet software. Arguably, APRS is the most popular amateur radio packet application currently, and a great way to experiment with the capabilities of the device.</p>
<p>You can use RNodes with just a small antenna attached directly to the SMA antenna port, but for this experiment, I wanted to try using them with external antennas connected.</p>
<p>I used the <a href="https://unsigned.io/rnodeconf">RNode Configuration Utility</a> to put two RNodes into TNC mode. I set the frequency to 433.7 MHz, and output power to 25mW. I configured the LoRa parameters to yield an on-air bitrate of 1.76 kbps, slightly higher than the 1.2 kbps normally used for APRS, but still in the same ballpark. RNode supports bitrates of up to 21.88 kbps, by the way. Here's the complete command I used to configure the RNodes:</p>
<pre><code>./rnodeconf /dev/ttyUSB0 -T --freq 433700000 --bw 125000 --txp 14 --sf 9 --cr 5
</code></pre>
<p>After configuring the devices, I hooked one up via USB to a computer at home with Xastir installed. I connected the antenna port to the feedline of a 430 MHz vertical antenna I have mounted outside the house.</p>
<p><img class="aligncenter size-large wp-image-882" src="../images/20180629_150717-1-1024x484.jpg" alt="20180629_150717" width="100%" /></p>
<p>The other one I attached to a laptop in my car (also running Xastir), and put a small magmount antenna on the roof. The larger antenna is connected to the mobile radio mounted in the car.</p>
<p><img class="aligncenter size-large wp-image-884" src="../images/20180629_200132-1024x548.jpg" alt="20180629_200132" width="100%" /></p>
<p><img class="aligncenter size-large wp-image-883" src="../images/20180629_162614-1-1024x575.jpg" alt="20180629_162614" width="100%" /></p>
<p>After that I went for a little drive to try out the setup. I keep being impressed by the range these devices offer at such a low power output.</p>
<p>The sensitivity of these things is just amazing. The farthest I went on this drive was 8 kilometers away, and the packets were still picked up fine by the receiving RNode, even though they were being transmitted from behind quite a few buildings, forests and hills. On the first part of the drive, you can see that there is quite some distance between the position updates, which was because I had set Xastir to query the GPS too slowly, so packets were not sent very often. On the last part, updates are quicker.</p>
<p>I actually think LoRa has a lot of potential for APRS networks. Being able to work below the noise floor, and utilising very low power output, LoRa APRS could even coexist with voice channels. If you're interested in getting started with LoRa, I think setting up a couple of APRS stations with RNodes is definitely a great and fun project! I'm definitely looking forward to experimenting more with this, and testing the limits of the concept.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,85 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>15 kilometre LoRa SSH link with RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="15 kilometre LoRa SSH link with RNode">
<meta name="description" content="In the last post, I looked at running APRS over LoRa using two RNodes. For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres.">
<meta property="og:description" content="In the last post, I looked at running APRS over LoRa using two RNodes. For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres.">
<meta property="og:image" content="https://unsigned.io/images/20180630_133650-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_06_30_15-kilometre-ssh-link-with-rnode.html">
<meta property="og:title" content="15 kilometre LoRa SSH link with RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_06_30_15-kilometre-ssh-link-with-rnode.html">
<meta name="twitter:title" content="15 kilometre LoRa SSH link with RNode">
<meta name="twitter:description" content="In the last post, I looked at running APRS over LoRa using two RNodes. For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres.">
<meta name="twitter:image" content="https://unsigned.io/images/20180630_133650-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-06-30</div>
<h1>15 kilometre LoRa SSH link with RNode</h1>
<p>In <a href="https://unsigned.io/aprs-over-lora-with-rnode/" title="APRS over LoRa with RNode">the last post</a>, I looked at running APRS over LoRa using two <a href="https://unsigned.io/rnode/" title="RNode">RNodes</a>. APRS is a relatively simple application, where data is mostly flowing from mobile stations, beaconing their position to fixed stations (which may in turn rebroadcast these beacons). As such, the system is largely unidirectional, and no fast-switching bi-directional communication takes places. As such, APRS is not very demanding from a hardware or software standpoint to support.</p>
<p>For this test, I wanted to try something that would push the RNodes a bit more. I decided I'd try to see if I could create a useable SSH link over a distance of 15 kilometres, with just two RNodes, and no intermediaries. I scouted out a location with a distance of 15 kilometers to my home station, and found a pretty good spot. The total distance is actually 15.75 kilometres.</p>
<p><img src="../images/link_ssh-1024x726.png"/></p>
<p>The terrain profile for the RF path is absolutely not ideal. To be honest, I was doubting it would work at all, with those hills in between, but I wanted to give it a try either way. As I said, I wanted to push the limits of these things a bit. Sometimes, you get positively surprised though!</p>
<p><img src="../images/profile-0904_nofresnel-1.png"/>
<br/><br/></p>
<hr />
<center>***Note from the future***</center>
<p>The next part of this article talks about how to acheive the IP setup using <code>ax25-utils</code>, which has now disappeared from several distros.</p>
<p>It is now much easier to do this using the <code>tncattach</code> program, please see the <a href="https://unsigned.io/ethernet-and-ip-over-packet-radio-tncs">Ethernet and IP over Packet Radio TNCs with tncattach</a> post for a guide on how to use <code>tncattach</code> instead of using the old <code>ax25-utils</code> and <code>kissattach</code>.
<br/><br/></p>
<hr />
<p><br/>
To use SSH, we need IP. Luckily it's easy to set up an RNode as a generic network card. Under Linux, you will need a few packages. If you haven't already got them, use your package manager to install the following packages:</p>
<p><code>sudo apt install ax25-apps ax25-tools</code></p>
<p>You should also use the <a href="https://github.com/markqvist/rnodeconfigutil" rel="noopener noreferrer" target="_blank">RNode Config Utility</a> to put the RNodes into TNC mode. The command I used in this case was:</p>
<p><code>./rnodeconf /dev/ttyUSB0 -T --freq 433700000 --bw 125000 --txp 14 --sf 8 --cr 6</code></p>
<p>The above setup yields an on-air bitrate of 2.6 kbps. It's a bit low for interactive full-screen apps (unless you're the patient type), but works fine for simple stuff. At bitrates from about 5.7 kbps, interactive apps like <strong>htop</strong> or <strong>nano</strong> starts to work better.</p>
<p>With packages installed and RNodes configured, you will need to edit the <strong>/etc/ax25/axports</strong> file and add an interface for your RNode. Add a line like the following. Replace <strong>MYCALL</strong> with the callsign of your station. The <strong>1152000</strong> is the serial baud rate, <strong>484</strong> is the MTU, and <strong>5</strong> is the packet window. You can experiment with different window sizes, but don't change the MTU, it is intentionally set at that value (even though it might seem strange if you're used to "normal" ethernet).</p>
<p><code>rnode MYCALL 115200 484 5 RNode interface</code></p>
<p>After you've added the line to the configuration file, you're ready to bring up the interface. Use a command like the following. Remember to change <strong>/dev/ttyUSB0</strong> to whatever serial port the RNode is connected to. Also change the IP address to whatever you want it to be.</p>
<p><code>sudo kissattach /dev/ttyUSB0 rnode 10.189.77.12</code></p>
<p>Repeat the setup on the other computer, and make sure to set an IP address in the same subnet, so that the two hosts can communicate with each other. If the <strong>kissattach</strong> command completes successfully, you should be able to see the configured interface with <strong>ifconfig</strong>. Check that each host can ping each other to verify that everything is set up correctly!</p>
<pre><code>$ ifconfig ax0
ax0: flags=67&lt;up,broadcast,running&gt; mtu 484
inet 10.189.77.12 netmask 255.255.255.0 broadcast 10.255.255.255
ax25 OZ7TMD-4 txqueuelen 10 (AMPR AX.25)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>At this point I connected one RNode to an omnidirectional Diamond X200 antenna outside my house, and packed the other one along with a laptop and drove off. The antenna I used this time around was the Diamond NR770 that I've got mounted on my car. Here it is, with a view towards the home station. Somewhere, almost 16 kilometers in that general direction is another RNode listening for a signal.</p>
<p><img src="../images/20180630_133650-1024x659.jpg"/></p>
<p>So lets get started! To test whether there was any kind of connection, I tried pinging the other node. Success! I got ICMP replies immediately. Or, almost immediately. With a round-trip time of about 880ms, it is slow, but still totally useable for our purpose. At the higher bitrates, RTT is much more comfortable. At 21.8 kbps for example, RTT is about 170ms. Reminds me of the early days of 3G.</p>
<p><img src="../images/rnping-1-1024x576.png"/></p>
<p>After that I simply ran <strong>ssh -v 10.189.77.12</strong>, with the -v (verbose) flag so I could more closely see what was going on while it was connecting. After about 40 seconds of connection setup and key exchanges, I was greeted by the login prompt.</p>
<p><img src="../images/login-1-1024x576.png"/></p>
<p>Enter password, and there you go, logged in to the other box remotely from 15.75 kilometres away, using only two devices and 25mW of transmit power. Pretty fun stuff! As said earlier, full-screen interactive programs were too slow to be practical on just 2.7kbps, but the command line and simple stuff is fine.</p>
<p><img src="../images/ping-1-1024x576.png"/></p>
<p>I stayed connected for about 10 minutes and played around, and the connection was stable and functional during that time. I later tried faster bitrates at shorter distances, and at the higher bitrates, like 21.8 kbps, everything is very useable, and even full screen apps are comfortable enough to use.</p>
<p>Here's a <a href="https://youtu.be/IDjnK5Pp3hk">short video showing the entire connection and login process</a>. Admittedly, it is not very exciting, but it does show exactly how SSH works over a 2.7 kbps link :)</p>
<p><small><em>The astute reader will probably notice that I am a ham radio operator, and that I've used a ham frequency for this. As is tradition, I am sure someone will point out, that encryption is a no-no over ham radio frequencies. This is not the case where I live, so even heavily encrypted things like SSH are perfectly fine in ham radio here.</em></small></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,43 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>More I/O for RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="More I/O for RNode ">
<meta name="description" content="You asked for it, here it is! RNodes are now shipping with more I/O options. There's now a total of 17 multi-purpose pins available on the RNode board. Have a look at the following diagram for an overview.">
<meta property="og:description" content="You asked for it, here it is! RNodes are now shipping with more I/O options. There's now a total of 17 multi-purpose pins available on the RNode board. Have a look at the following diagram for an overview.">
<meta property="og:image" content="https://unsigned.io/images/Pinout_post-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2018_12_17_more-i-o-for-rnode.html">
<meta property="og:title" content="More I/O for RNode ">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2018_12_17_more-i-o-for-rnode.html">
<meta name="twitter:title" content="More I/O for RNode ">
<meta name="twitter:description" content="You asked for it, here it is! RNodes are now shipping with more I/O options. There's now a total of 17 multi-purpose pins available on the RNode board. Have a look at the following diagram for an overview.">
<meta name="twitter:image" content="https://unsigned.io/images/Pinout_post-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-12-17</div>
<h1>More I/O for RNode</h1>
<p>You asked for it, here it is! RNodes are now shipping with more I/O options. There's now a total of 17 multi-purpose pins available on the RNode board. Have a look at the following diagram for an overview.</p>
<p><img src="../images/Pinout-1-1024x998.png"/></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,53 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Introducing OpenModem | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Introducing OpenModem">
<meta name="description" content="Today, I am very happy to announce the availability of OpenModem, the successor to the popular MicroModem project. Six years ago, I started work on the MicroModem project, and it has since matured into an solid, stable and field-proven solution for packet radio communication.">
<meta property="og:description" content="Today, I am very happy to announce the availability of OpenModem, the successor to the popular MicroModem project. Six years ago, I started work on the MicroModem project, and it has since matured into an solid, stable and field-proven solution for packet radio communication.">
<meta property="og:image" content="https://unsigned.io/images/openmodem_post-400x275.jpeg">
<meta property="og:url" content="https://unsigned.io/articles/2020_05_01_introducing-openmodem.html">
<meta property="og:title" content="Introducing OpenModem">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2020_05_01_introducing-openmodem.html">
<meta name="twitter:title" content="Introducing OpenModem">
<meta name="twitter:description" content="Today, I am very happy to announce the availability of OpenModem, the successor to the popular MicroModem project. Six years ago, I started work on the MicroModem project, and it has since matured into an solid, stable and field-proven solution for packet radio communication.">
<meta name="twitter:image" content="https://unsigned.io/images/openmodem_post-400x275.jpeg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2020-05-01</div>
<h1>Introducing OpenModem</h1>
<p>Today, I am very happy to announce the availability of <a href="https://unsigned.io/openmodem/">OpenModem</a>, the successor to the popular <a href="https://unsigned.io/micromodem/">MicroModem</a> project. Six years ago, I started work on the MicroModem project, and it has since matured into an solid, stable and field-proven solution for packet radio communication.</p>
<p><img src="../images/IMG_2388-2-1024x772.jpeg"/></p>
<p>OpenModem inherits this legacy of stability and focus on quality of implementation, both in hardware and software, while adding many new features and possibilities. As has always been the case, the hardware is produced and tested in my workshop here in Denmark. That means I can assure the quality of every single unit leaving my shop.</p>
<p>The firmware for OpenModem is a direct continuation of the MicroModem line of firmwares, and thus inherits the proven stability, but has now been spun off to a unified project as the <a href="https://unsigned.io/open-modem-firmware/">Open Modem Firmware</a>. It provides an exciting new platform to build packet radio applications on in the future. The base firmware now targets a more powerful microcontroller, which gives extra memory and program space for features that were not possible in the previous iteration.</p>
<p><img src="../images/OpenModem_pinout-1024x884.jpg"/></p>
<p>Going forward, it is my intention to develop and maintain the Open Modem Firmware, and release regular improvements and feature additions to it. It is my hope that this can happen in cooperation with the rest of the packet radio community, and as always I am very interested to hear your ideas and thoughts about what the capabilities of OpenModem should be in the future.</p>
<p>Rather than repeat myself here, I'd like to direct you to the <a href="https://unsigned.io/openmodem/">OpenModem page</a>, and also the <a href="https://unsigned.io/open-modem-firmware/">Open Modem Firmware page</a> to read all about the new OpenModem. There's many new features, and it's easier than ever to get up and running on packet radio with OpenModem. If you've got any questions, please get in touch via mail or leave a comment here!</p>
<p>The release of OpenModem will also mark the discontinuation of MicroModem. I will not be producing any more MicroModems, and the MicroModem firmwares will not be developed further.</p>
<p>It's a bit of a sentimental moment for me to say those words, but I truly feel it will be the best way to go forward. The MicroModem firmwares are essentially feature-complete, and take more or less full advantage of the hardware they were built for. With more than six years of development and testing, they also offer rock-solid stability, and modems built on the MicroModem design are known to run for years and years on end without issues.</p>
<p>While I will not be producing more MicroModems or developing the firmware further, all resources for MicroModem, including software, schematics, source-code and build info will be kept available for existing installations, and for any users that still want to build their own MicroModems. If you want to build your own AFSK1200 modem, MicroModem is still a very viable option, since it is easy to build, stable and very well documented.</p>
<p>Thanks to everyone who has helped out my projects and supported me on this very interesting journey so far.</p>
<p>Goodbye MicroModem, hello OpenModem!</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,66 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>RNode With Anything | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="RNode With Anything">
<meta name="description" content="Well, maybe not anything, but let's see if we can get close. RNode is now a multiplatform firmware! That means it is possible to make and deploy RNodes for use with Reticulum, or any other software usable with RNodes, with very little effort, and very low cost. Read on to find out how.">
<meta property="og:description" content="Well, maybe not anything, but let's see if we can get close. RNode is now a multiplatform firmware! That means it is possible to make and deploy RNodes for use with Reticulum, or any other software usable with RNodes, with very little effort, and very low cost. Read on to find out how.">
<meta property="og:image" content="https://unsigned.io/images/rnode_multiplatform_1920-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2022_01_27_rnode-with-anything.html">
<meta property="og:title" content="RNode With Anything">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2022_01_27_rnode-with-anything.html">
<meta name="twitter:title" content="RNode With Anything">
<meta name="twitter:description" content="Well, maybe not anything, but let's see if we can get close. RNode is now a multiplatform firmware! That means it is possible to make and deploy RNodes for use with Reticulum, or any other software usable with RNodes, with very little effort, and very low cost. Read on to find out how.">
<meta name="twitter:image" content="https://unsigned.io/images/rnode_multiplatform_1920-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-01-27</div>
<h1>RNode With Anything</h1>
<p>Well, maybe not <em>anything</em>, but let's see if we can get close. <em>RNode is now a multiplatform firmware!</em> </p>
<p>That means it is possible to make and deploy RNodes for use with <a href="https://reticulum.network">Reticulum</a> (or any other software usable with RNodes) with very little effort, and very low cost. Read on to find out how.</p>
<p><img alt="Collection of RNodes of different types" src="../images/rnode_multiplatform_1920-1024x767.jpg" />
<em>What does all these devices have in common? They are all RNodes!</em></p>
<p>Until now there has basically only been two options for using a LoRa based radios as interfaces for <a href="https://reticulum.network">Reticulum</a>: Buying a completed RNode from my shop, or building your own from a suitable MCU and LoRa transceiver module. That is all going to change now, making RNodes and Reticulum much more accessible, to a much wider crowd.</p>
<p>Recently, I have been hard at work upgrading the codebase for the RNode Firmware to support multiple processor architectures and board platforms. This means, that starting from now, you will be able to make a bunch of <a href="https://unsigned.io/rnode">RNodes</a> in about 5 minutes, by repurposing any of a wide range of commercially available boards and modules you probably already have in a drawer somewhere.</p>
<p>With the <a href="https://unsigned.io/rnodeconf">automated install and configuration tools</a> I have released, you will be able to churn out RNodes for friends and family like there is no tomorrow, from many of the hundreds of thousands of LoRa dev boards available in circulation today. There is even a friendly guide helping you install the right firmware for your devices:</p>
<p><img alt="" src="../images/install_term-1024x768.jpeg" />
<em>The start of the autoinstall guide, while installing the firmware on a LoRa32 device</em></p>
<p>And I will continue adding support for more boards by popular demand. For a tutorial on how to actually do this, read the <a href="https://unsigned.io/how-to-make-your-own-rnodes/">How To Make Your Own RNodes</a> post or the <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">Installing RNode Firmware on Supported Devices</a> post, depending on the hardware you have available. At the time of writing, the autoinstall procedure supports the following boards:</p>
<ul>
<li>Original RNodes</li>
<li>LilyGO T-Beam v1.1 devices and clones/rebrands</li>
<li>LilyGO LoRa32 v2.0 devices and clones/rebrands</li>
<li>LilyGO LoRa32 v2.1 devices and clones</li>
<li>Homemade RNodes based on ATmega1284P boards</li>
<li>Homemade RNodes based on ATmega2560 boards</li>
<li>Homemade RNodes based on Adafruit Feather ESP32 (HUZZAH32) boards</li>
<li>Homemade RNodes based on generic ESP32 boards</li>
</ul>
<p>So, <em>why on Earth would I do something like this?</em> Isn't this going to completely undercut my own business of manufacturing and selling hardware? Well, yes it is, I don't think there is any way around that. The <a href="https://unsigned.io/shop/product/rnode/">RNodes</a> I have been selling come with a much higher price tag than a no-brand LoRa board from one of the usual vendors or straight from Shenzen.</p>
<p>You do get a lot of build quality, reliability, careful testing, better RF performance, extended operating ranges, low power consumption and support from a real human being (me!) for those extra coins, but for most people, the cheaper option is, in most cases, realistically the better one, since you can often get three or four cheap devices for the price of one original <a href="https://unsigned.io/rnode">RNode</a>.</p>
<p>So did I just ruin my entire business model? Yes. Am I quite the <em>entrepreneur</em> or what?! I made this decision, and put in the effort to execute it (adding multiplatform support to the entire ecosystem of software was no weekend project), because I ultimately think that the availability of these tools for more people is a higher value than my own commercial interests.</p>
<p>It is my hope, that with time, I can sustain my professional work solely from voluntary donations towards the free and open source communications systems that I design, implement and make available. Such a situation would allow me to focus intensively on my goal of realising completely Free, Secure and Uncensorable, effective Off-the-Grid communications systems deployable by anyone, anywhere in the world.</p>
<p>And if you are one of the many people that have bought and supported my hardware, firmware and software projects throughout the year, I offer you my heartfelt appreciation. I could not have gotten here without you, and you are part of the reason that this is all possible now. Thank you.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,54 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Surveillance and Your Soul, or Why Privacy Is Essential | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Surveillance and Your Soul, or Why Privacy Is Essential">
<meta name="description" content="When pointing out the importance of privacy, a common rebuttal is "Well, I don't have anything to hide, so I don't care". This is a very grave misunderstanding. You do have something to hide. Something very important. Your soul.">
<meta property="og:description" content="When pointing out the importance of privacy, a common rebuttal is "Well, I don't have anything to hide, so I don't care". This is a very grave misunderstanding. You do have something to hide. Something very important. Your soul.">
<meta property="og:image" content="https://unsigned.io/images/facial_mesh-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2022_02_02_surveillance-and-your-soul-or-why-privacy-is-essential.html">
<meta property="og:title" content="Surveillance and Your Soul, or Why Privacy Is Essential">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2022_02_02_surveillance-and-your-soul-or-why-privacy-is-essential.html">
<meta name="twitter:title" content="Surveillance and Your Soul, or Why Privacy Is Essential">
<meta name="twitter:description" content="When pointing out the importance of privacy, a common rebuttal is "Well, I don't have anything to hide, so I don't care". This is a very grave misunderstanding. You do have something to hide. Something very important. Your soul.">
<meta name="twitter:image" content="https://unsigned.io/images/facial_mesh-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-02-02</div>
<h1>Surveillance and Your Soul, or Why Privacy Is Essential</h1>
<p>When pointing out the importance of privacy, a common rebuttal is "Well, I don't have anything to hide, so I don't care". This is a very grave misunderstanding. You do have something to hide. Something very important. Your soul.</p>
<p>The human mind and soul is a formidable thing, paradoxically powerful and fragile at the same time. A human being can be deprived of a surprising number of things, and still develop and prosper, but some human prerequisites are so essential that we will surely degenerate into malice without them. One of these is connection. <em>Genuine</em> connection to other human beings.</p>
<p>When opening up to the possibility of connection with others, we make ourselves vulnerable. To connect is to allow yourself to be seen, truly. This baring of ourselves is at the core of establishing trust, and trust underlies all connection. To shed your armor and let your own vulnerability be known to the other is a powerful gesture.</p>
<p>It is a leap of faith into the possibility of a shared reality. It is a risk every time, and exactly because of this, we prove our commitment by, at least temporarily, staking a part of our own security in the other. It is a brilliant and beautiful behavior, and we know it by heart because it is utterly essential to our individual and collective survival. It is at the core of voluntary unity and association. And without that - <em>divided</em> - we fall.</p>
<p>We also know intuitively all the subtle signs and signals that tell us when it is safe enough to engage in this behavior, and when it is not. Our attentiveness to these signals is razor sharp, and swift is their regulation of our behavior. This is a <em>survival instinct</em> after all.</p>
<p>A great number of different things will signal to us that it might very well equate to suicide to drop our defenses and make bare a piece of our soul. One of the most powerful danger signals would be the presence of the <em>veiled observer</em>: A third party that does not disclose their person, cannot be held accountable, and as such obviously does not stake any human commitment.</p>
<p>We know immediately and intuitively the danger. Information gained from our vulnerable state by the observer can be used to do great harm against us. In fact this, our intuition will tell us, is most likely the exact intent of the observer peering from the shadows, hence we wisely raise defenses, putting our soul and vulnerabilities back into hiding - back into protection. And thus, any real connection becomes impossible for the time.</p>
<p>If we wish to allow for human connection once more, we must escape to somewhere else. We must place ourselves and the people with whom we want to build trust and connection, within measures of protection: A place that allows in the others that are willing to participate in the reciprocal dance of trust, vulnerability, connection and human development, while keeping the veiled exploiters out. Only in such a place can human beings develop and manifest connection, truth and love.</p>
<p>Privacy, fundamentally, <em>is this place</em>.</p>
<p>Without privacy, human connection is impossible. Without human connection, we will degenerate into malevolence. We will die - and a prolonged, terrible and gruesome death it will be.</p>
<p>As a civilization, we have already walked too far down the path leading to this reality, and <strong>we are all responsible if we comply with its implementation</strong>. Digital surveillance is intruding into depths of our private lives unthinkable even a decade ago. Governments are eagerly pursuing the criminalization of end-to-end encryption, and attempting to mandate all communications providers to surveil human communication with an AI-supervised hotline directly to the police apparatus.</p>
<p>This is not the beginning of the end. We are already halfway there, and we must act <strong>now</strong>. The dismantling of privacy is an existential threat to civilization and to human prosperity.</p>
<p>You may believe you have nothing to hide, but you cannot hide from the reality that you have everything to loose: Every connection to everyone you have ever loved and cared about.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,97 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>From Here to There, or: Walls Have Ears | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="From Here to There, or: Walls Have Ears">
<meta name="description" content="Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.">
<meta property="og:description" content="Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.">
<meta property="og:image" content="https://unsigned.io/images/Thai-coup-detat-2014-social-media-banner-02-e1648895946118-400x275.jpeg">
<meta property="og:url" content="https://unsigned.io/articles/2022_04_02_From_Here_to_There.html">
<meta property="og:title" content="From Here to There, or: Walls Have Ears">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2022_04_02_From_Here_to_There.html">
<meta name="twitter:title" content="From Here to There, or: Walls Have Ears">
<meta name="twitter:description" content="Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.">
<meta name="twitter:image" content="https://unsigned.io/images/Thai-coup-detat-2014-social-media-banner-02-e1648895946118-400x275.jpeg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-04-02</div>
<h1>From Here to There, or: Walls Have Ears</h1>
<p>Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.</p>
<p><img class="article_photo" src="../images/Thai-coup-detat-2014-social-media-banner-02-e1648895946118.jpeg"/>
<em>2014 banner in Bangkok threatening inhabitants that they can be jailed for "sharing" or "liking" on social media. Image credit <a href="https://commons.wikimedia.org/wiki/User:Pratyeka">Pratyek</a>.</em></p>
<p>The battle for the Internet has been long and ardous, and recently, the interests that want to turn it into a hyperdimensional panopticon, taking center-stage in the societal control complex, have been rapidly gaining strides.</p>
<h2>Original Intent</h2>
<p>The primary functional purpose of the Internet was originally intended to be a mechanisms for establishment of <em>end-to-end</em> connectivity for information transfer. Any given two endpoints connected to the Internet should be able to connect bi-laterally and directly to each other using unique addresses. In this model <em>any</em> one peer can reach <em>any</em> other peer in the network.</p>
<p>Today, from the strange place we have arrived at, the guarantee of end-to-end connectivity might <em>seem</em> like an unneccessary complication. In reality, a global network guaranteeing end-to-end connectivity for all would have meant a much more elegant and simple implementation, than the current situation of an increasingly technically patched and fragmented Internet.</p>
<h2>The Way Things are Going</h2>
<p><em>Or, why we need End-to-End Connectivity, not just End-to-End Encryption.</em></p>
<p>The creation of any sort of private, human-friendly or freedom-enhancing system <em>requires</em> the inclusion of end-to-end connectivity as a fundamental principle. Unfortunately, much of the Internet is currently being transformed into a <em>content-delivery</em> service, more akin to <em>Television On Steroids</em>.</p>
<p>This very unfortunate turn of events, partly pushed by state and government control agendas, and partly pushed by cost-cutting efforts from Internet service providers, coupled with the huge uptake in consumer acceptance of <em>just-good-enough</em> mobile LTE and 5G Internet access, has led to a situation where most of the current Internet users actually do not have real Internet access, but a watered down, consumption-oriented pseudo-service.</p>
<p>Why is it almost impossible to implement human-oriented, freedom-enhancing services on this platform? Because all services, that don't just seek to shove pre-determined information through the neural pathways of its users, but seeks to extend the users voice and agency over the Internet, must provide a <em>centralised relay</em> that allow the user to do so. In common terms, we call this a <em>server</em>, or for very large system, such as an email-provider, or something like Facebook, it might be an entire data-center full of servers. Or a network of data-centers spanning the globe.</p>
<p>Any service or application that want to <em>enable interaction</em> between users needs to provide infrastructure to do so, and in the current state of the Internet, since end-to-end connectivity has been effectively destroyed, the <strong>only</strong> way to do so is by using centralised relays.</p>
<p>No matter how big or small the centralised relay infrastructure is, it creates the same problem, or the same <em>grand oppertunity</em>, if you look at it from the ever-gluttonous perspective of the societal control complex. A central point of attack now exists, and it is easily exploited.</p>
<p>Because the central relay has been made an artificial neccessity, it is now a trivial matter to obtain any information about any person who uses the infrastructure. Should any person dare stick their head out too far, it is also easy to simply remove the person by the push of a button, and further to directly view who the person shared information and ideas with and target these people for retaliations or removal as well.</p>
<p>End-to-End Encryption helps defend against these threats, but only barely. It is a sort of last desperate hold the common human has on the rope that is dangling them over the abyss of a perfectly implemented total control society. As long as information and communication has to travel through pre-defined centralised relay points, it is perfectly trivial for the control complex to single out any person, solely by the patterns and metadata of their activity, even if the contents of their activities were <em>completely</em> encrypted (which it never is, the internet was simply not designed like this).</p>
<p>In reality the line between content and metadata is much fuzzier than most people think, and for a sufficiently sophisticated actor (read: anyone with a room full of computers), what we call "metadata" is plenty. Metadata <em>is</em> data. Especially when allowed into the pathways of machine learning and AI systems.</p>
<h2>The Solution</h2>
<p>What we need is not just better and more complete encryption, we need it to be coupled with the original intention of the Internet: End-to-End Connectivity for <em>every single human being on the planet</em>.</p>
<p>Without end-to-end connectivity, human beings will be forever forced to associate and interact through <em>arbiters</em> chosen by the most powerful. Such an arrangement is not free association. It is <strong>insidious control</strong>, that will allow itself to seep through every crevasse it finds until it <em>engulfs all aspect of life</em>.</p>
<p>If end-to-end connectivity is restored and guaranteed for all, the need for centralised relays, or <em>servers</em>, evaporates. The infrastructure needed for enabling human expression and sharing over the internet can be implemented as open-ended <em>protocols</em> and <em>software</em>, running on the devices of the people using the platforms and services, instead of physical hardware having to exist at fixed points in space and time, that are easily targeted and exploited.</p>
<p>This idea is not science-fiction. We are already, right now, at the point of sufficient compute power, bandwidth and storage capability, that even modest smartphones, when connected through end-to-end networks and cryptographic protocols, has more than enough resources to replace literally <em>all</em> current services being provided on the Internet. From banking to instant messaging to video streaming. One great example of this is <a href="https://scuttlebutt.nz/">Secure Scuttlebutt</a>, which implements a full and feature-rich social networking platform, completely as a cryptographic protocol, instead of a service that user will inevitably pay for with their privacy and data.</p>
<p>The artificial requirement of centralized relays is currently the most fundamental control axis in the restraint of free human association and interaction. If universal end-to-end connectivity is restored, this control axis is obliterated, and the machinery of dominion will spin apart by its own inertia.</p>
<h3>A Failed Hope</h3>
<p>A fundamental factor in the current failure of end-to-end connectivity on the Internet has been the exhaustion of the public IPv4 address space. This exhaustion has been completely predictable for several decades. Let that sink in for a moment.</p>
<p>The proposed solution of adopting and migrating to the next generation of the Internet Protocol - IPv6 - could, <em>in theory</em>, solve the situation once and for all. The IPv6 address space is large enough that every particle in the universe could each be assigned a multitude of addresses.</p>
<p>So far, the uptake and <a href="https://www.google.com/intl/en/ipv6/statistics.html">deployment of IPv6</a> from Internet service providers have been <em>abysmally slow</em>, with availability for residential Internet users only growing a few percentage points every year. The problem here is, that unless a service as IPv6 is <em>almost universally</em> available, it cannot really be relied upon at all. If you can only count on having proper IPv6 connectivity 50% of the time, it is of little use for anyone building services and systems that need to work <em>all the time</em>, as is required by a society that is so fundamentally entwined in its digital connectivity. That is the simple reason that practically <em>all</em> services still have to rely on IPv4.</p>
<h3>Conditions of the Race</h3>
<p>Unless things change significantly, we are likely to wait for several decades before enough users have access to IPv6 for it to make true end-to-end connectivity possible.</p>
<p>While we keep our hands folded for the sworn "official" technological update to the Internet, the societal control complex will have plenty of time to implement the so-called "legal" measures needed to ensure that they can enforce centralised relaying of all communication and human interaction, and that they will never have to give it up again, once implemented. Don't be fooled: This is not a theoretical threat. It <a href="https://www.eff.org/deeplinks/2020/10/orders-top-eus-timetable-dismantling-end-end-encryption">is</a> <a href="https://protonmail.com/blog/eu-attack-on-encryption/">happening</a> <a href="https://cyberlaw.stanford.edu/blog/2020/06/theres-now-even-worse-anti-encryption-bill-earn-it-doesnt-make-earn-it-bill-ok">right</a> <a href="https://protonmail.com/blog/joint-statement-eu-encryption/">now</a>, and it <em>will drastically affect your life in less than a decade</em>.</p>
<ul>
<li><a href="https://www.eff.org/deeplinks/2020/10/orders-top-eus-timetable-dismantling-end-end-encryption">EFF: The EUs Timetable for Dismantling End-to-End Encryption</a></li>
<li><a href="https://cyberlaw.stanford.edu/blog/2020/06/theres-now-even-worse-anti-encryption-bill-earn-it-doesnt-make-earn-it-bill-ok">Stanford CIS: There's Now an Even Worse Anti-Encryption Bill Than EARN IT</a></li>
<li><a href="https://protonmail.com/blog/eu-attack-on-encryption/">ProtonMail: EUs Attack on Encryption</a></li>
<li><a href="https://protonmail.com/blog/joint-statement-eu-encryption/">Threema, Tresorit, Tutanota &amp; ProtonMail: Joint Statement on EU Anti-Privacy Shift</a></li>
</ul>
<p>The legalistic motions being made now are ensuring a strong foundation for the rapidly approaching criminalization of peer-to-peer communication and expression. <em>Peer-to-peer</em> is not some distant technological jargon. In case we forgot, it literally means: <em>one human to another human, with no intermediaries</em>. Please stop for a moment and allow that to sink in. The scope is as unfathomable as it is horrifying. Our species evolved on that premise. And because of that, our survival depends on it. It has been a fundamental axiom of <em>a quarter million years</em> of human life. The <em>criminalization</em> of unmonitored human-to-human interaction will, in the <strong>most uncomfortably literal</strong> sense, <em>bring hell to Earth</em>.</p>
<p>While these motions are being arranged in relative obscurity, <em>billions</em> of people around the globe are (by their own will, or by pressure from externalities of work, health and current societal issues) migrating more and more of their lifes and social spheres into structures, that exist only in the realms of digital computing machines.</p>
<p>There is nothing <em>inherently</em> bad in this migration, were it not for the dysfunction and direction of development facing the <em>medium</em> these computing machines are connected together by. If the substrate supporting the lands, that billions of people are migrating into is, quite literally, being transformed into the soils of hell, we are now witnessing something very troubling unfold.</p>
<h3>The Fall of Politics</h3>
<p>There is no denying that the odds are stacked against us quite severely at this point. Personally, I don't stake any faith in the effectiveness of classical political <em>resistance and change</em> at this point. The <em>sheer inertia</em> pent up in the ongoing implementation of the societal control complex is inevitably going to completely steam-roll any gathering of humans raising banners and singing protest, with no legislator even <em>feigning</em> to care in the slightest anymore.</p>
<p>I don't say this lightly, or as a morbid joke. To experience this as what the claimed "Democratic Civilization of the West" has come to, is truly painful and saddening beyond compare to me. I don't say this to discourage protest either. Quite on the contrary, one can only respect and commend the efforts of those who organise and effectuate such protest. But at this point, we should not excercise protest as a call to our leaders. That will be a call in vain, and a waste of the precious few resources we have.</p>
<p>If protest is to be an effective tool, let us use it as a call to ourselves: A call to rise in recognition of each other as fellows and peers with a multitude of views, ideas and inclinations, that can create a new foundation for us all to stand on, when allowed to mix and clash freely within a Free and Open Civilization, rather than being confined to the controlled and monitored dystopia that is currently being built around us. Let's rather march to show anyone that might be watching in quiet trepidation, that we are still here, that we will keep creating and building. That we will not be stopped and that they are welcome to join us.</p>
<p>Once a certain amount of water has filled the hull, there really is no salvaging a sinking vessel. For some, upholding the belief that the ship is proud and unsinkable may be so important, that they simply choose to go down with it. Others will realise that there is enough resources around to construct a new vessel, jump ship and sail on. The choice must ultimately be an individual one, but I will certainly, and although politely, <em>most pressingly</em> invite you to join us over here on the barge. It might not yet be as impressive as the massive steel and glass collosus you currently occupy, <em>but your socks are already wet</em>.</p>
<h2>We Are Here</h2>
<p>We are not a figment of someones imagination, nor are our motivations a story that can be dismissed as fanciful ideas. We might still be dispersed and outnumbered. But we are here. We are building a Distributed Parallel Civilization, a global cooperative system without nations, societal control or centralised power. Here, the structures and boundaries of the old world is becoming increasingly irrelevant. Being outspoken about this has always been dangerous, especially in the light of the increasing application of force against us, deployed by the control complex. It is soon time we raise up, stand by our goals, and start building beacons to guide others.</p>
<p>As more and more walk back out of the control complex, we will need to provide an inspiring place to go, and at <em>larger and larger</em> scale. We already have most of the tools we need to ensure this, but a few are still lacking. I believe the most important of these tools right now is a flexible global communication network ensuring end-to-end-connectivity and complete initiator anonymity of it's users. If we can put that in place, free human expression and association becomes near unstoppable.</p>
<p>To realise this, we will need to leverage all the resources and capabilities currently available to us, but it is in no way out of reach, and incredible progress has already been made. We are closer than ever, but we still have monumental tasks ahead of us. If you have any ways of contributing to this endeavour, <em>please</em> join the effort.</p>
<p>Even in its currently fragmented, controlled and censored state, the Internet still offers an invaluable stepping stone that can help turn the tide of the efforts against freedom and autonomy. Just as the first pioneers of digital information sharing, armed only with modems and the simplest of computers, created completely autonomous networks of association and peer-to-peer exchange, by commandeering the telephone network of copper wires circling the globe, we too can co-opt the Internet for the same purpose.</p>
<h3>Carrier Has Arrived</h3>
<p>Instead of relying on the Internet itself to provide the communication and association infrastructure we need, we can view it simply as an underlying carrier mechanisms, on which we can build human-oriented and freedom-enhancing <em>overlay networks</em>. With time, these networks can be gradually migrated to physical carrier mechanisms that are more closely aligned with the goals of the overlay networks themselves.</p>
<p>Several such overlay networks already exist, and are reaching better and better levels of stability and maturity. Outstanding examples are <a href="https://geti2p.net/">I2P</a> and <a href="https://yggdrasil-network.github.io">Yggdrasil</a>. Without projects like these, it would be practically impossible to communicate freely over the Internet today. The efforts of the developers, and all the people volunteering to provide infrastructure and bandwidth for the networks are directly holding back the door of free communication from slamming shut in our face. A moment of gratitude to them is in order.</p>
<p>It is also of great importance, that we seek to develop protocols and mechanisms for building physical mesh networks, that can span vast geographical areas, and that the tools for doing so are placed directly into the hands of anyone who see it fit to build these networks. Without such an effort, our communications infrastructure (even if it runs entirely in private overlay networks) will always be at the mercy of the societal control complex. The power to simply disconnect the entire civilian population of an area from the Internet is readily available, and have been excercised many times.</p>
<p>We don't just need one big network, built as an overlay on the Internet, we need a multitude, and we need to connect them in a myriad ways. We need <em>thousands of networks without kill-switches and control mechanisms</em>, and we need to bind them together, both over the Internet, around it and outside of it. We need to give people the tools to build their own networks, anytime and anywhere, and to connect them together as they see fit, without arbiters, gatekeepers or external control.</p>
<p>Enabling such capabilities for anyone is the focus and motivation of my own work on the <a href="https://reticulum.network">Reticulum Networking Stack</a>. While it is still in its infancy, it is showing promise, and is already being used to solve real-world problems in novel ways. I am now quite certain that it can mature into the powerful tool that I envision it to become. It will certainly not be the whole of the solution, but I believe it can be part of it.</p>
<p>Whoever you are, or wherever your inclinations or interests direct you, I am almost certain that you, and those dear to you, stand to benefit from the continued existence of the technologies and possibilities I discuss here. If you have the skills and time, or even just the silghtest will, please join the efforts in ensuring Free and Open Communications for everyone. Help by providing infrastructure and bandwidth, help by testing new software and hardware, help by coding, or just as important: Help by spreading awareness. The more people are aware of the real situation, the harder it becomes to accelerate the deployment of the control structures. If we can slow the spread of control, we can win. Not by wasting our precious resources in a war with a collosus, but by creating a better society, a Free and Open Civilization, where the collosus is irrelevant.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,193 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>LoRa bitrate calculator and understanding LoRa parameters | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="LoRa bitrate calculator and understanding LoRa parameters">
<meta name="description" content="It can be pretty useful to know how LoRa parameters influence data rate and range, for example when configuring your RNode. In this post I'll go over the basic concepts needed to understand the different LoRa parameters, and how they affect range and data rate.">
<meta property="og:description" content="It can be pretty useful to know how LoRa parameters influence data rate and range, for example when configuring your RNode. In this post I'll go over the basic concepts needed to understand the different LoRa parameters, and how they affect range and data rate.">
<meta property="og:image" content="https://unsigned.io/images/P1070354-1-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2022_05_05_understanding-lora-parameters.html">
<meta property="og:title" content="LoRa bitrate calculator and understanding LoRa parameters">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2022_05_05_understanding-lora-parameters.html">
<meta name="twitter:title" content="LoRa bitrate calculator and understanding LoRa parameters">
<meta name="twitter:description" content="It can be pretty useful to know how LoRa parameters influence data rate and range, for example when configuring your RNode. In this post I'll go over the basic concepts needed to understand the different LoRa parameters, and how they affect range and data rate.">
<meta name="twitter:image" content="https://unsigned.io/images/P1070354-1-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>LoRa Bitrate &amp; Sensitivity Calculator</h1>
<p><strong><em>And how to understand LoRa parameters</em></strong></p>
<p>It can be pretty useful to know how LoRa parameters influence data rate and range, for example when configuring your <a href="https://unsigned.io/rnode/">RNode</a>. In this post I'll go over the basic concepts needed to understand the different LoRa parameters, and how they affect range and data rate.</p>
<p>If you just want to know what your on-air bitrate will be for a certain set of parameters, you can use the following calculator to input the parameters, and see the resulting on-air bitrate. If you want to understand how and why the parameters affect the modulation, read on!</p>
<hr>
<center>
<table id="loracalc">
<tbody>
<tr>
<td><label for="bw">Bandwidth</label></td>
<td class="lcfield"><select id="bw">
<option value="subghz" disabled="true">Sub GHz</option>
<option value="7800">7.8 KHz</option>
<option value="10400">10.4 KHz</option>
<option value="15600">15.6 KHz</option>
<option value="20800">20.8 KHz</option>
<option value="31250">31.25 KHz</option>
<option value="41700">41.7 KHz</option>
<option value="62500">62.5 KHz</option>
<option value="125000">125 KHz</option>
<option value="250000">250 KHz</option>
<option value="500000">500 KHz</option>
<option value="mw" disabled="true">Above 2.4 GHz</option>
<option value="203125">203.125 KHz</option>
<option value="406250">406.25 KHz</option>
<option value="812500">812.5 KHz</option>
<option value="1625000">1625 KHz</option>
</select></td>
</tr>
<tr>
<td><label for="sf">Spreading Factor</label></td>
<td class="lcfield"><select id="sf">
<option value="5">5</option>
<option value="6">6</option>
<option value="7" selected="selected">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select></td>
</tr>
<tr>
<td><label for="cr">Coding Rate</label></td>
<td class="lcfield"><select id="cr">
<option value="1">4:5</option>
<option value="2">4:6</option>
<option value="3">4:7</option>
<option value="4">4:8</option>
</select></td>
</tr>
<tr>
<td><label for="nf">Transmit Power</label></td>
<td class="lcfield"><input id="tx" type="text" value="17"><span style="margin-left:-2.9em;padding-top: 9px;display: inline-block;">dBm</span></td>
</tr>
<tr>
<td><label for="nf">Antenna Gain</label></td>
<td class="lcfield"><input id="ag" type="text" value="0"><span style="margin-left:-2.35em;padding-top: 9px;display: inline-block;">dBi</span></td>
</tr>
<tr>
<td><label for="nf">Noise Figure</label></td>
<td class="lcfield"><input id="nf" type="text" value="6"><span style="margin-left:-2.2em;padding-top: 9px;display: inline-block;">dB</span></td>
</tr>
<tr>
<td><label for="sn">Sensitivity</label></td>
<td class="lcfield"><input id="sn" type="text"></td>
</tr>
<tr>
<td><label for="dr">Data Rate</label></td>
<td class="lcfield"><input id="dr" type="text"></td>
</tr>
<tr>
<td><label for="dr">Link Budget</label></td>
<td class="lcfield"><input id="lb" type="text"></td>
</tr>
</tbody>
</table>
</center>
<hr>
<p>When setting up a LoRa transceiver, you will not only need to know what frequency it should transmit on, and what the output power should be, but also three other parameters, that will drastically change how the transceiver operates. These parameters are:</p>
<ul>
<li>Bandwidth</li>
<li>Spreading Factor</li>
<li>Coding Rate</li>
</ul>
<p>LoRa is a very flexible modulation scheme, that can provide relatively fast data transfers up to 203 kbit/s. Conversely, the parameters can be configured in a way that will result in a very low data rate, all the way down to a mere 11 <i>bits</i> per second. This will in turn result in a large processing gain for the receiver, and therefore much longer range of the transmission.</p>
<p>In this post I will focus on how the parameters affect data rate, and not go into the specific processing gain calculations for various LoRa configurations. As a rule of thumb, you can expect the range to increase as the data rate is lowered.</p>
<p>LoRa modulation can be configured to use variety of different radio frequency bandwidths. Most commonly, a modulation scheme will occupy a more or less set bandwidth of radio spectrum, which is a result of the modulation technique used, and the rate at which information is transferred.</p>
<p>Since LoRa is a <a href="https://en.wikipedia.org/wiki/Chirp_spread_spectrum"><i>chirp spread spectrum</i></a> modulation scheme, it intentionally spreads out the signal over a wider bandwidth than would strictly be necessary to transmit the information. The technique offers better noise immunity in the frequency domain, and is especially useful when transmitting with low output power.</p>
<p>LoRa can be configured to use bandwidths in pre-determined steps from 7.8 KHz to 500 KHz in the sub-gigahertz bands, and from 250 KHz to 1.6 MHz in the 2.4 GHz band. Generally speaking, choosing a narrower bandwidth will result in a slower transfer rate, but improved range. Choosing a wider bandwidth will result in an increased data rate, but a shorter range.</p>
<p>The chirp spread spectrum scheme employed by LoRa spreads out each bit of payload data over multiple <a href="https://en.wikipedia.org/wiki/Chirp_spread_spectrum">symbols</a>. This can improve noise immunity in the time-domain, and also incurs a processing gain for the receiver. The LoRa <i>spreading factor</i> is the parameter that controls how spread out in time each data bit is. If a higher spreading factor is selected, each payload data bit will be spread out over more symbols. LoRa can be configured for spreading factors between 5 and 12, although only 6 through 12 are accessible in the sub-gigahertz band, and 6 often requires a TCXO to be stable.</p>
<p>Where the <i>bandwidth</i> and <i>spreading factor</i> controls physical parameters of the modulation scheme, and thus can result in significant processing gains and range improvements, the LoRa <i>coding rate</i> essentially controls the amount of <i>Forward Error Correction</i> that is added to the payload data. As such, a higher coding rate will not increase range, but will make a link <i>more reliable</i> if interference is present. As one would expect, it also comes at the cost of decreasing the data rate. LoRa can be configured for four different coding rates.</p>
<p>The coding rate describes the <i>ratio</i> of actual data to error-correcting data added. In choosing the LoRa coding rate, it is important to consider whether it's necessary to permanently employ a high coding rate, with subsequent loss of data rate, or whether it is more efficient over-all to allow for the occasional dropped packet due to interference.</p>
<p>Since the coding rate does not modify the physical parameters of the modulation, two (or more) LoRa transceivers configured with different coding rates can still decode each others signals. This might be useful if a receiver is located in an area with high amounts of interference, but the other end of the link is not. In such a case, the two transceivers can be configured with asymmetric coding rates, such that optimal transfer rates can be achieved, even though interference levels vary at the different sites.</p>
<script type="text/javascript" src="../scripts/jquery.js"></script>
<script type="text/javascript">
jQuery(document).ready( function () {
if (document.getElementById("bw")) {
document.getElementById("bw").onchange = calc_rate;
document.getElementById("sf").onchange = calc_rate;
document.getElementById("cr").onchange = calc_rate;
document.getElementById("nf").onchange = calc_rate;
document.getElementById("nf").onblur = calc_rate;
document.getElementById("ag").onblur = calc_rate;
document.getElementById("tx").onblur = calc_rate;
calc_rate();
}
})
function calc_rate() {
sfn = [];
sfn[5] = -2.5;
sfn[6] = -5;
sfn[7] = -7.5;
sfn[8] = -10;
sfn[9] = -12.5;
sfn[10] = -15;
sfn[11] = -17.5;
sfn[12] = -20;
bw = parseInt(document.getElementById("bw").value);
sf = parseInt(document.getElementById("sf").value);
cr = parseInt(document.getElementById("cr").value);
nf = parseInt(document.getElementById("nf").value);
ag = parseInt(document.getElementById("ag").value);
tx = parseInt(document.getElementById("tx").value);
//console.log(bw);
//console.log(sf);
//console.log(cr);
dr = sf * ( (4/(4+cr)) / (Math.pow(2, sf)/(bw/1000)) ) * 1000
if (bw == 203125 || bw == 406250 || bw > 500000) {
sen = -165.6 + 10* Math.log10(bw) + nf + sfn[sf];
} else {
sen = -174 + 10* Math.log10(bw) + nf + sfn[sf];
}
lb = ag+tx-sen;
if (dr < 1000) {
document.getElementById("dr").value = String(dr.toFixed(0)) + " bps";
} else {
dr /= 1000;
document.getElementById("dr").value = String(dr.toFixed(2)) + " kbps";
}
document.getElementById("sn").value = String(sen.toFixed(1)) + " dBm";
document.getElementById("lb").value = String(lb.toFixed(1)) + " dB";
}
</script>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,86 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>The Future of RNode: A New Model | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="The Future of RNode: A New Model">
<meta name="description" content="Over the course of the last six months, so much has happened with the entire ecosystem surrounding Reticulum, and a significant part of those improvements have come from the expansion of the RNode system.">
<meta property="og:description" content="Over the course of the last six months, so much has happened with the entire ecosystem surrounding Reticulum, and a significant part of those improvements have come from the expansion of the RNode system.">
<meta property="og:image" content="https://unsigned.io/images/0_ft-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2022_06_27_The_Future_of_RNode.html">
<meta property="og:title" content="The Future of RNode: A New Model">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2022_06_27_The_Future_of_RNode.html">
<meta name="twitter:title" content="The Future of RNode: A New Model">
<meta name="twitter:description" content="Over the course of the last six months, so much has happened with the entire ecosystem surrounding Reticulum, and a significant part of those improvements have come from the expansion of the RNode system.">
<meta name="twitter:image" content="https://unsigned.io/images/0_ft-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-06-27</div>
<h1>The Future of RNode: A New Model</h1>
<p>Over the course of the last six months, so much has happened with the entire ecosystem surrounding Reticulum, and a significant part of those improvements have come from the expansion of the RNode system. While it was <a href="https://unsigned.io/rnode/">originally designed</a> as a singular open source hardware device, the <a href="https://unsigned.io/rnode-with-anything/">recent work</a> has opened up RNode as a general-purpose, portable, low-power and long-range digital radio transceiver, that can be <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">easily created</a> from a growing number of <a href="https://unsigned.io/rnode_firmware/#supported-hardware">supported boards</a> and components.</p>
<p><img alt="RNode Prototype" src="../images/0-1024x573.jpg" /></p>
<p>For RNode to be a truly useful platform, and ultimately a valuable tool in the hands of users, it needs to be as universally accessible as possible, and it needs to be able to adapt to a wide range of environments and situations.</p>
<h2>Global Supply Systems, Global Problems</h2>
<p>Recently there has been a large uptick in interest in the RNode platform. People want to use the devices in a variety of different scenarios, either within the <a href="https://reticulum.network">Reticulum</a> ecosystem, or in other contexts. When I originally designed RNode, I decided to use extremely well-proven components, with a global production demand of many millions of units per year. My rationale was that RNode would exist on a very stable hardware foundation, and the supply of all necessary components would be ensured for many years. That rationale turned out to be slightly naive, in the shining light of hindsight.</p>
<p>Enter the unknown waters of global semiconductor supply collapse, and the original RNode hardware design became practically impossible to produce, since several key components are simply unavailable, and are not expected to ship until 2024. I've had to reserve the last small amount of component and completed unit stock I have on hand, for customers who absolutely need the original design due to integration constraints and similar situations.</p>
<p>Such a situation is completely unsustainable, and directly contrary to the goal of making RNodes widely accessible all over the world. To place the entire responsibility and availability of the platform in one place, and hinge the availability, of what is intended to be a general-purpose tool, on one manufacturer is just a fragile system. And if there is one thing we do not need any more of at this point in time, it is fragile systems with single points of failure.</p>
<p>There is really only one sustainable solution to that problem, and that is to create an <em>easily-implementable</em> platform for <em>completely distributed and decentralized production</em> of RNodes by <em>anyone</em> who wishes to do so, personally or commercially. So that is what I started working on. </p>
<p>This approach, on the other hand, also means completely giving up control over what I had planned to be the primary source of revenue for my work in this entire endeavor, which could be viewed as a bit of an unsettling proposition, especially for some hypothetical person that might have spent several thousand hours creating an ecosystem of tools and technologies.</p>
<p>I did, of course, have to do a bit of soul-searching to appreciate this decision, but as with many other things in life, the choice was probably already set out by myself long ago. At least, it is pretty clear from a personally detached perspective what the right decision is here.</p>
<h2>The New RNode</h2>
<p>RNode has always been a completely open platform. But until now, it has not been very easy to get started producing the units at any sort of scale, simply because it would require a lot of effort to bootstrap the process. It is a non-trivial time and resource investment to route and produce PCBs, source components, organise assembly, manage firmware flashing, testing, case design, and all the other tasks it requires to actually build and ship a working product. That meant that practically all RNodes produced came from my workshop. Going forward, that is going to change significantly.</p>
<p>For truly distributed production and distribution systems to be effective and to succeed, it needs to be both easy and low-cost to get started producing units, even at very low volumes. This lower risk and startup cost to practically zero, which means the barrier to entry is effectively removed. It also has the potential to create a very resilient global production system for RNodes.</p>
<p>That is why there is not really such a thing as <em>The</em> New RNode. The new RNodes will be the ones that all kinds of different entities and individuals will produce, sell, distribute, trade and deploy. This is all made possible by the new v2.x branch of the RNode Firmware, and the related build and deployment tools. The primary development focus of this new branch of the RNode Firmware is to widen hardware support to many different kinds of transceiver chips (SX1262, SX1280 at first, nRF chips and more later), and many kinds of development boards, while also making it very easy to design and build RNodes based on completely custom PCB designs.</p>
<p>I will still be producing and selling my own particular flavor of RNodes in a limited quantity, but I will focus my effort towards providing support and help for those wanting to build and distribute the hardware, and most importantly of all, I will focus on developing and maintaining the firmware and software ecosystem, and to make sure the necessary tools are kept sharp and available. From a utilitarian perspective, I think this is the very best way to make use of everyone's time and efforts.</p>
<p>To provide an example of the kinds of RNodes you can easily build using the RNode Firmware v2.x platform, here is a prototype of the RNode I will be offering soon:</p>
<p><img alt="RNode Prototype" src="../images/rnodev2proto-1024x760.jpg" /></p>
<p>This particular device uses a modified LoRa development board, plus a few extra components, all neatly fitted in a 3D-printed case. I'd like to highlight some of the new things that are possible with devices like this, that run the v2.x firmware:</p>
<ul>
<li>Much easier SD-card based configuration process, that does not need any special software, and allows configuring everything with a simple text editor. This can also be used to provision many RNodes easily with the same SD card.</li>
<li>Still has full compatibility with <code>rnodeconf</code>, since this might be easier to use in some batch processes.</li>
<li>Can be used with Android devices over Bluetooth and WiFi.</li>
<li>Support for a much wider variety of LoRa and other transceiver chips.</li>
<li>Support for running transceiver ICs in G/M/FSK and other available modes.</li>
<li>Support for using ESP-Now and other direct WiFi modes.</li>
<li>Support for using wired mediums (RS232, RS484, CAN-BUS and similar)</li>
<li>Supports multiple transceivers at the same time, for example using LoRa and ESP-Now at the same time.</li>
<li>Much easier setup for connecting to Reticulum. When a user connects a v2.x RNode, Reticulum will automatically detect and use all available transceivers (wireless and/or wired) on the RNode according to the configuration stored on the RNode.</li>
<li>Fully backwards compatible with software written for v1.x RNodes, like LoRaMon.</li>
<li>OLED display support for status and user notifications.</li>
<li>Single-pin RGB LED support for status and user notifications.</li>
<li>Support for battery powered RNodes, battery level and charge status detection</li>
<li>Remote repeater functionality for use with Reticulum, either single-frequency or seperate uplink and downlink frequencies by connecting two RNodes. No computers or Linux SBCs needed for this.</li>
<li>LXMF message caching. Let a battery powered RNode receive your messages and decrypt and read them later on your phone.</li>
<li>Support for running <strong>μRNS</strong>, a microcontroller-targeted Reticulum implementation, completely on-device.</li>
</ul>
<p>The new firmware follows a modular approach lots of different hardware can be supported, dynamically detected and activated. Not all features will be implemented and available at the initial v2.0 release. I will prioritize getting a stable and functional version out there first, and add the more advanced features incrementally. Most likely the LXMF, μRNS and repeater functionality will be left out initially, and obviously not all transceiver ICs will be supported initially, but will be added according to demand.</p>
<p>The v1.x branch will remain available and usable forever, and all tools and software will continue to support RNodes based on it. It is also important to note here that v1.x and v2.x based RNodes will be completely interoperable. The goal is to create a completely interoperable ecosystem where devices from different manufacturers can all communicate with each other. The v2.x firmware line is the key to that, and I am really, really looking forward to getting it into your hands. I think this will be a really useful step forward in the continued evolution of the ecosystem.</p>
<h2>Cost and Revenue Model</h2>
<p>The v1.x firmware line has always been completely free, both in terms of cost and freedom of use and modifications. In this spirit, the v2.x line will remain so for all personal, educational and non-profit purposes. Anyone will be able to create their own v2 RNodes, with <em>full functionality</em> and <em>no limitations</em>. For commercial use, for example if you build and sell RNodes, or use RNodes in a profit-generating setting, I will charge a small per-device fee for the firmware.</p>
<p>I have decided <strong>not</strong> to rely on limitations and crippleware to enforce this. In fact, there will be no enforcing, apart from a simple message to users. I will instead trust you all to do the right thing here. This also means that I will never become a single point of failure in the ecosystem, and should I disappear, RNodes will not. So if you <em>really</em>, <em>actually</em>, need to steal the firmware for some purpose that you deem important enough, and profit from it without sharing some of that back to the community, that choice is open for you to make.</p>
<p>Buying the firmware from me will come with a lot of valuable perks though, such as access to CAD design files and STLs for cases, PCB assembly and manufacturing contacts, plus support, help and cooperation from me in your projects. Buying the firmware from me also means I will add you to the official list of suppliers if you want this, and include official support and recognition for your devices in all related tools and programs.</p>
<p>Choosing to do things this way has been a leap of faith, but I believe it will work out for the benefit of everyone, and hopefully help the entire ecosystem, and all of us to prosper.</p>
<p>While I am working as efficiently on preparing all of this as I possibly can, it will still be a little while before everything is ready. If you already know that you want to participate in this endeavor, either by building or distributing RNodes, please get in touch with me over LXMF at the address:</p>
<p><code>8dd57a738226809646089335a6b03695</code></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,59 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Thanks For All The Support This Year | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Thanks For All The Support This Year">
<meta name="description" content="Once again, a whole year has come and gone, and a new chapter is on the horizon. Sincere thanks to everyone who helped and supported all the projects around Reticulum. We've come a long way, and we're just getting started.">
<meta property="og:description" content="Once again, a whole year has come and gone, and a new chapter is on the horizon. Sincere thanks to everyone who helped and supported all the projects around Reticulum. We've come a long way, and we're just getting started.">
<meta property="og:image" content="https://unsigned.io/images/pe2_t.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2023_01_14_Thanks.html">
<meta property="og:title" content="Thanks For All The Support This Year">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_01_14_Thanks.html">
<meta name="twitter:title" content="Thanks For All The Support This Year">
<meta name="twitter:description" content="Once again, a whole year has come and gone, and a new chapter is on the horizon. Sincere thanks to everyone who helped and supported all the projects around Reticulum. We've come a long way, and we're just getting started.">
<meta name="twitter:image" content="https://unsigned.io/images/pe2_t.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2023-01-14</div>
<h1>Thanks For All The Support This Year</h1>
<p>Once again, a whole year has come and gone, and a new chapter is on the horizon. The year we called 2022 was certainly an interesting one. While governments around the world have raced each other in the warm-up rounds for implementing the most Orwellian control and surveillance measures, there is also a lot to be thankful for. I could fill up this post with all the bad things that happened in 2022, but I will save those for later, and instead focus here on all that which I am thankful for.</p>
<h2>You Made It Work</h2>
<p>First of all, thank you so very much to everyone who supported my work, the <a href="https://reticulum.network">Reticulum</a> project, development of <a href="../rnode/">open comms hardware</a> and the budding ecosystem of user-facing applications built with Reticulum.</p>
<p>So many people have helped with donations, both monetary and in hardware and equipment for testing and development, contributed time and work to improve code, documentation and resources, promoted the project, and have provided translation of essential material into several languages.</p>
<p>A few times, individuals made contributions that literally made the difference for me being able to continue working completely dedicated to Reticulum and related projects.</p>
<p>All of this has been so important in bringing the entire Reticulum project to where it is now, and we've come so far. I cannot state it too many times: Thank you so very much, to everyone who has contributed. This is what makes it all possible, and I could never have done any of this without your help.</p>
<p>For all of this support and belief in the vision of a free and open communications ecosystem, I am eternally grateful. Thank you for making it all happen.</p>
<h2>An Evolving Ecosystem</h2>
<p>And <em>a lot</em> has happened. Reticulum itself has seen <a href="https://github.com/markqvist/Reticulum/blob/master/Changelog.md">26 releases</a> this year, with major improvements in all areas of the <a href="https://github.com/markqvist/reticulum">reference implementation</a>. Various programs built on Reticulum have also seen major improvements.</p>
<p>It's been a bit of a wild ride, with some of the auxillary projects around Reticulum going from barely usable proof-of-concepts, to powerful and resilient communications tools, especially in situations with non-existing or damaged infrastructure, and impossibility of Internet access.</p>
<p>One of the achivements, that I am most relieved is now deployed into the world, is the new <a href="../rnode/">RNode</a> ecosystem, which has seen it evolve from a singular device, to a incredibly flexible multiplatform tool for creating self-replicatable, free and open communications devices.</p>
<p>Every <a href="../rnode/">RNode</a> deployed from here on includes all the information, tools, software and source-code neccessary to replicate the system accross space and time, in a on-board repository called the <a href="../rnode_bootstrap_console/">RNode Bootstrap Console</a>.</p>
<p>Seeing the community around Reticulum grow, and meeting all of the new people that have gotten involved has also been a real pleasure, and something I value a lot. I hope you will all stick around, and that many more will join our project, and help shape the vision.</p>
<h2>Moving Forward</h2>
<p>With a new year laid out ahead of us, there's plenty of work to do. For myself, most of that will initially focus on improving the documentation, accessibiilty and educational resources around Reticulum, to make it as easy as possible for developers to start building new systems on Reticulum.</p>
<p>More detailed information is already available in the <a href="https://github.com/markqvist/Reticulum/blob/master/Roadmap.md">Reticulum Roadmap</a>, and over the next couple of weeks, I will be sharing a lot more information about where I envision us taking the project in the near, mid- and long-term future.</p>
<p>If you're curious about joining the efforts, please do not hesitate, and join us already! There is so much work to do, and we are only just getting started.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,99 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>The New RNode Ecosystem Is Here | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="The New RNode Ecosystem Is Here">
<meta name="description" content="This release marks a milestone in the continued development of the RNode ecosystem. Getting all the last puzzle pieces into place has been quite a ride, and it's amazing to finally have it all reach this point.">
<meta property="og:description" content="This release marks a milestone in the continued development of the RNode ecosystem. Getting all the last puzzle pieces into place has been quite a ride, and it's amazing to finally have it all reach this point.">
<meta property="og:image" content="https://unsigned.io/images/ph_new_rn_ecosys.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_01_16_The_New_RNode_Ecosystem_Is_Here.html">
<meta property="og:title" content="The New RNode Ecosystem Is Here">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_01_16_The_New_RNode_Ecosystem_Is_Here.html">
<meta name="twitter:title" content="The New RNode Ecosystem Is Here">
<meta name="twitter:description" content="This release marks a milestone in the continued development of the RNode ecosystem. Getting all the last puzzle pieces into place has been quite a ride, and it's amazing to finally have it all reach this point.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_new_rn_ecosys.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2023-01-16</div>
<h1>The New RNode Ecosystem Is Here</h1>
<p><em>See <a href="../rnode/">this page</a> for a more in-depth overview of what an RNode is, and what you can do with it</em></p>
<p>For the last couple of weeks, I've been on the finishing sprint of the new <a href="../rnode/">RNode</a> releases. Getting all the last puzzle pieces into place has been quite a ride, and it's such a relief to finally have it all reach this point. Finally, everyone can - both literally and metaphorically - get their hands on all the new stuff.</p>
<p><img alt="A handheld RNode" src="../images/p_new_rn_ecosys.webp" /></p>
<center>*One of the RNodes created with the new build system*</center>
<p>There's a lot to unwrap here, so this will not be a particularly short post. I'll do my best to be concise, though, which also means that I won't delve into <em>all</em> the details here. Instead, I've sprinkled links to dig deeper in all the relevant places. Ready? Let's go!</p>
<h2>A Soft(ware) Revolution</h2>
<p>This release marks quite a milestone in the continued development of the RNode concept. What started, almost five years ago, as a single open source communications hardware device, with an open source and hackable firmware, has now developed into a multiplatform ecosystem for <em>creating</em> all kinds of communications devices.</p>
<p>Back at the beginning, anyone could, in <em>theory</em>, build their own RNodes by following my first design, but it was pretty involved, unless you were used to making firmware modifications, PCB routing and assembling boards with lots of SMD components.</p>
<p>How things have changed for the better! Making your own RNode in its simplest form (basic, but fully functional), is now a simple matter of getting one of the many <a href="../rnode_firmware/#supported">supported boards</a> and running the <code>rnodeconf</code> autoinstaller.</p>
<p>At this point, the RNode system is primarily <em>software</em>, which <em>transforms</em> different kinds of available hardware devices into functional, physical RNodes, which can then be used to solve a wide range of communications tasks. Such RNodes can be modified and built to suit the specific time, locale and environment they need to exist in. I really hope to see a variety of different RNode designs from the community in the time to come.</p>
<h2>A Friendlier Experience</h2>
<p>Over the last couple of months, the <a href="../rnode_firmware/">RNode Firmware</a> has seen some important improvements to general usability and user-friendliness:</p>
<ul>
<li>The amount of supported boards and platforms were significantly expanded</li>
<li>RNode gained OLED display support with an informative user interface, both for boards with a built-in display, and for externally connected displays</li>
<li>Bluetooth connectivity was added</li>
<li>Drivers for using RGB LEDs for status indications were added</li>
<li>Bootstrapping new devices was made much easier</li>
<li>The firmware update process was greatly improved</li>
<li>The driving of the transceiver chips was tuned and improved</li>
</ul>
<h2>Reinventable To Fit Your Needs</h2>
<p>The first design for a complete RNode, that I have released based on this new system, is the <a href="../guides/2023_01_14_Making_A_Handheld_RNode.html">Handheld RNode</a> model (it's the one pictured above). It's really practical, incredibly flexible and useful, and it even looks great too. You can <a href="../guides/2023_01_14_Making_A_Handheld_RNode.html">build it yourself</a> or buy a <a href="https://unsigned.io/shop/product/handheld-rnode/">finished unit</a> from my shop.</p>
<p>A really neat part of the new concept is, that you can even <a href="../sell_rnodes.html">build and sell</a> this design yourself if you want to. If there's interest I could also offer kits with the necessary parts for self-assembly. Let me know if that is something you'd like to see!</p>
<p>The new modular and flexible approach to making RNodes, makes it very easy to design different kinds of units for different purposes. Over the next months, I will be releasing several additional RNode designs for the community to use and build upon. The first of these will be:</p>
<ul>
<li>An outdoor-mountable RNode suitable for access point operation, and remote, autonomous installation. It will feature a weatherproof housing, and ability to house high-capacity batteries, as well as options for solar charging.</li>
<li>A sleek wall-mountable indoor access point RNode model, suitable for permanent installation indoors in a tidy manner.</li>
</ul>
<p>If you have your own ideas of what a useful RNode model would be, I hope that you will make your design a reality and share it with the community!</p>
<h2>From Every Seed, A New Forest</h2>
<p>Every time a new RNode is created, the installation tools also download a special repository onto it. This repository is the <a href="../rnode_bootstrap_console/">RNode Bootstrap Console</a>, which contains a copy of all the tools, information and software necessary to make more RNodes. It is stored right inside that RNode, accessible at any time.</p>
<p><img alt="The RNode Bootstrap Console being accessed from a tablet" src="../images/p_console.webp" /></p>
<p>You can try browsing a <a href="../rnode_bootstrap_console/">demo of the RNode Bootstrap Console</a> online, but for a quick overview, here is a list of things currently included in the repository:</p>
<ul>
<li>Complete build guides for making new RNodes</li>
<li>3D-printable object files for creating the necessary parts to manufacture RNodes</li>
<li>All the software necessary for installing and managing new and existing RNodes</li>
<li>The source code for the <a href="../rnode_firmware/">RNode Firmware</a></li>
<li>The updated <a href="../software/RNode_Configuration_Utility.html">RNode Configuration Utility</a>, which now includes the ability to extract binary firmware archives from existing RNodes, to use for installating new, or updating existing RNodes. This is super useful in situations where there is no Internet access to download firmware updates.</li>
<li>Installable packages, including source code, for the following software:<ul>
<li>The <a href="https://reticulum.network">Reticulum Network Stack</a>, and all of it's included utilities</li>
<li><a href="../software/Nomad_Network.html">Nomad Network</a></li>
<li><a href="../software/LXMF.html">LXMF</a></li>
<li>The <a href="../software/tncattach.html">tncattach</a> utility</li>
</ul>
</li>
<li>A variety of useful guides and tutorials</li>
<li>A complete copy of the <a href="https://reticulum.network/manual/">Reticulum Manual</a></li>
<li>A complete copy of the <a href="https://reticulum.network/">Reticulum website</a></li>
</ul>
<p>Fitting all of this information in the tiny flash-memory of a small, low-power embedded device was an interesting challenge. It's basically an entire system for bootstrapping encrypted, self-configuring and authority-less communications networks, squeezed into the memory space of a <em>floppy disk</em>.</p>
<p>Since version <code>1.55</code> of the <a href="../rnode_firmware/">RNode Firmware</a> was released, the <code>rnodeconf</code> autoinstaller and firmware updater has been automatically adding the bootstrap console to every RNode on autoinstall or firmware update. This means there's already a lot of RNodes out there with the bootstrap console available, and you might already have it.</p>
<p>If you don't already have the bootstrap console on your RNode, you will get it automatically as soon as you <a href="../guides/2023_01_15_Getting_The_New_Bootstrap_Console_Onto_Your_RNode.html">update the firmware</a> to at least version <code>1.55</code>.</p>
<h2>Thank You</h2>
<p>To everyone who have contributed to the project, both in terms of donations, writing code, testing everything, sharing ideas and feedback, and not least believing in the project and offering encouragement, thank you so very much. I am truly grateful that I have been able to guide this project to the point we're at now.</p>
<p>Let's make this the beginning of an even more interesting chapter, than what has already been.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,346 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Abstractions Set In Granite | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:image" content="https://unsigned.io/images/asig_post.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta name="twitter:title" content="Abstractions Set In Granite">
<meta name="twitter:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta name="twitter:image" content="https://unsigned.io/images/asig_post.webp">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
//tex2jax: {inlineMath: [['$','$'], ['\(','\)']]}
tex2jax: {inlineMath: [['$','$']]}
});
</script>
<script type="text/javascript" async src="../scripts/mathjax/MathJax.js?config=TeX-AMS_CHTML"></script>
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2023-03-18 7:37:03</div>
<h2>Update: September 16th, 2025</h2>
<p><strong>I was wrong here!</strong> High-precision artefacts, and the Radial Traversal Pattern revisited:</p>
<p>When originally released, this article proposed embedded patterns and mathematical ratios in the most precise of the supposedly ancient Egyptian artefacts in the private collection of Adam Young (now running the company "Artifact Foundation"). However, recently <a href="https://arcsci.org/articles/revisiting_old_findings.html">this article on ArcSci.org</a> has refuted some of these claims, while confirming others. </p>
<p>While the discovery of the embedded $\pi$ and $\varphi$ ratios have now been convincingly substatiated, the existence of the Radial Traversal Pattern has been comprehensively, unequivocally and <strong>definitively</strong> refuted and dismissed. The proposed pattern <em>was</em> indeed a confirmation trap fluke - unquantifiable <em>even</em> within the extraordinary precision envelope of the object. I applaud the comprehensive, rigorous and on-point analysis, and I completely accept the refutation as valid.</p>
<p>This changes the probability calculation of this object substantially.</p>
<p>Back in 2023, I initially witheld judgement as to authenticity of the PV001 object. With the limited information available, I found it impossible to ascertain its authenticity, but simply shared my findings with the clear belief that it was important to investigate it further.</p>
<p>But given the overall picture of everything we now know, and the demonstrably horrible track-record of the "Artifact Foundation", I cannot escape openly stating my current personal opinion, as to the authenticity of this "artefact":</p>
<ul>
<li>The object itself, or at least its current form, is <strong>definitely</strong> not 5,000 years old.</li>
<li>It is either a modern replica, contemporary piece, or:</li>
<li>It was acquired as an ancient article, but later reworked to achieve its extraordinary qualities and features.</li>
</ul>
<p>For transparency and the full history of everything, I will not make corrections in the original article, but instead include this preface so it is clear what can be considered valid observations and what cannot.</p>
<hr />
<h2>Introduction</h2>
<p>This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, released on February 19th, 2023, by the team at <a href="https://unchartedx.com/site/2023/02/19/new-video-updates-to-the-vase-scan-responses-and-the-stl-file/">unchartedx.com</a>. For an introduction to the object itself, and some more context around how it was digitised, please see the first few paragraphs of my <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial analysis</a>.</p>
<p><img alt="Illustration 0" src="../images/a1_plate_0.webp" /></p>
<h3>Authors</h3>
<p>This article is written by Mark Qvist. The analysis and modelling work required to produce it has been the product of a joint effort between myself, and another engineer. For professional reasons, she currently wishes to remain unnamed. All mentions of "we" in this article refer to us as the authors. Whenever the <em>I</em> pronoun is found, it is used to signify an opinion, observation or conclusion made by myself alone.</p>
<h3>Preface</h3>
<p>Since getting access to the data, we have worked to gain a better understanding of this remarkable object, and we have been making some significant headway.</p>
<p>There is still much to learn, but we would like to share what we know so far. We could in no way have anticipated what came to light in this investigation, and just how extraordinary this object is.</p>
<p>While we cannot yet make any <em>direct</em> conclusions, as to who made this object, or when it was created, we now at least know a great deal more about the capabilities of the creators of the object.</p>
<p>This is a <em>long</em> article. If you want to ascertain wheter it is worth your time, you can skip ahead and read the conclusions first, which I am sure will catch your attention, if it wasn't already focused. If you have the patience though, I will recommend taking everything in its laid out order; there is a lot to unpack here.</p>
<h3>Some Math Included</h3>
<p>We will be using some mathematics to illustrate various points, but we have strived to keep it as simple to follow as possible. With a basic understanding of geometry and algebra, it should be possible to follow most of it. There will be a few sections where the equations get a little more involved. This is necessary to show that our model is valid, but these sections are not essential to the overall understanding of the article.</p>
<p>We will do our best to make the main points stand out even for those not interested in the math and equations. So if those parts doesn't mean anything to you, feel free to skip them.</p>
<p>In this article, we use <em>radians</em>, since it is a <em>universal</em> way to describe angles. Radians are based on the fundamental ratio between the radius and circumference of circle, whereas degrees is just an arbitrary subdivision of a circle into 360 pieces. As such, it is not based on any fundamental mathematical ratios or constants, and not really useful in an analysis such as this. Radians are useful because they show the underlying mathematical relations more clearly.</p>
<p>Radians may lead to some unease, if you are not familiar with them. Fear not, though! It is actually simpler, and much more intuitive than using degrees. All you need to know is that there is $2\times\pi$ radians in a circle, and $\pi$ radians in a triangle. For example, a $45^\circ$ angle is $\pi \over 4$ radians. You can describe any angle by simple fractions of $\pi$.</p>
<h2>Methodology</h2>
<p>This section will describe the methodology we employed while working with the object, and offer some context to the choices we made in analysing it, and in our design reconstruction.</p>
<h3>Initial Findings</h3>
<p>Shortly after the scan data of the granite artefact was released, I carried out an <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial geometrical analysis</a> of the object. This analysis showed very high levels of geometrical alignment in the object, even between exterior and interior features, as well as specific and consistent choices of angles and dimensional ratios.</p>
<p>These findings very clearly demonstrated, that there was a <em>design</em> behind the finished artefact, and that it did not just randomly appear, out of some intuitively guided fabrication process.</p>
<h3>Units, Measures &amp; Notes</h3>
<p>In this article, absolute measurements are given in <em>millimeters</em> ($mm$) or <em>micrometers</em> ($\mu m$), unless otherwise noted. Angles are specified in radians. All measurements mentioned here, have been taken on the high-resolution mesh data from the structured-light scan of the object.</p>
<p>Measurements were made in the application <em>Blender</em>, and parametric CAD models were created using <em>OpenSCAD</em>. The SCAD source code for our model is <a href="https://unsigned.io/dl/artefact_reconstruction.scad">available for download here</a>. We dimensioned the object in millimeters, and performed measurements by meticulously aligning measurement tools to vertices and polygonal plane intersections. For larger features we measured by manually working towards a best-fit placement of a measurement primitive, by the minimisation of the integral of the amplitudes of deviation over the measured feature.</p>
<p>All graphics and CAD renders presented in this article are ortographic projections. A simulated texture and lighting model has been applied in the renders, to make it easier to visually distinguish curvature and features of the object. This simulated texture is for illustrative purposes, and does not represent the real surface appearance of the object.</p>
<h3>Motivations For This Work</h3>
<p>The initial findings established the motivation for exploring the object more deeply. The approach taken in this work, has been to attempt to create a mathematically consistent and self-constrained model, that could describe all major features of the physical object.</p>
<p>It has been our theory, that if such a model indeed exists, and can be shown to map well to the actual object, it could allow us to learn a lot more about what processes and principles the designers of the object had access to, and what knowledge they held. By analysing the <em>simplest</em> way to create a satisfactory design for the object, we can get a good idea about the <em>minimum</em> levels of capabilities the designers must have had.</p>
<p>While I am currently the one collating our findings in this article, the work has been a shared effort, and is comprised of the input of a group of people. Without that, we would not have gotten as far in our understanding, as we are now.</p>
<h3>Constrained Design Hypothesis</h3>
<p>When designing an object, be that functional or purely aesthetic, one can take a multitude of approaches. It is of course possible for the designer to simply place various features of an object intuitively, without any underlying rules, constraints or principles, but practically all great design, art and architecture follow sets of internally consistent principles.</p>
<p>Various systems of design principles have been known since antiquity, and when beauty, completeness and harmony in form is experienced, it is often exactly because of the skillfull application of such principles. From the preliminary analysis of the object, we deemed it warranted to investigate whether such a set of principles had been employed in its creation, and if so, to what extent.</p>
<p>An important data point, that can be extracted through this approach, is the degree to which different design patterns are locked together to form <em>constraints</em>. In design work, such constraints are commonly used to define various aspects of the individual features, that make up the finished object.</p>
<p>If we can recreate the object from a relatively simple set of design primitives and constraints, which exhibit low degrees of interrelation, or if indeed no such relations even exist, and all features appear intuitively or randomly placed, this would indicate an object of a relatively low level of design complexity, or one that could have been made entirely from an intuitive process.</p>
<p>Contrarily, if we consistently see features defined by complex interrelations between different principles, this indicates a high level of design complexity, and that a higher level of abstraction was needed; not only in creating the design, but also in transferring it through the production method, to the finished object itself.</p>
<h3>The Parametric Model</h3>
<p>To explore what kinds of design principles were used in the creation of the object, we started out by measuring and mapping as many features of the object as possible, and looking for repeating patterns of placement and dimensioning, and repeating or mathematically significant ratios.</p>
<p>While we initially did not understand the underlying principles of what we found, it was clear that patterns and persistent ratios were present in overwhelming abundance throughout the object. Not only were they present, but they exhibited such a high degree of regularity, that we suspected them to be derived from well-defined mathematical formulae.</p>
<p>This led us to attempting something, that really should not have been possible, when dealing with a supposedly ancient artefact, made from granite, of all things: We decided to experimentally build a CAD model that would exclusively use mathematical concepts to dimension and place the features of the object, and use no tuning or arbitrary positional adjustments. All features should be placed and dimensioned by interrelation to each other.</p>
<p>We also limited the initial margin-of-error tolerance of the model to $75~\mu m$, in terms of how well it should map to the features of the actual object. This margin-of-error tolerance was, amongst other criteria, used to discern whether an attempted modelling of a particular feature should be considered for inclusion in the model, or rejected.</p>
<p><strong>I find it timely to stress how completely ludicrous this actually is</strong>. We are dealing with a stone vessel of supposed ancient origin, and are now proposing, that a purely mathematical CAD model, should somehow map to the actual object within a tolerance of less than 75 <em>thousands</em> of a <em>millimeter</em>.</p>
<p>Yet, I will let the results speak for themselves. Additionally, the CAD model, and all of its constituent equations, are available for verification, for anyone interested in doing so.</p>
<h2>Abstractions Set In Stone</h2>
<p>To arrive at a high-level understanding of how the object is defined, we will first look at some primary principles used in the design, and then describe how they are interrelated to create various features of the object.</p>
<h3>The Radial Traversal Pattern</h3>
<p>The most widely used primitive in the object is the circle. Circles, or arcs thereof, are used to define most of the features of the object, and <strong>all</strong> circular features in the object have radii that are interrelated with incredible consistency and precision.</p>
<p>There is, in fact, one single and elegant equation governing the dimensioning of almost all circles utilised in the design. The few circles not following this pattern have been specifically chosen to display some very significant numbers, which we will get to shortly. But for now, let's look at the radii-determining equation:</p>
<p>
<script type="math/tex; mode=display"> R(n) = \left({\sqrt 6 \over 2}\right)^n </script>
With this equation, we can generate all the relevant radii for shaping the object. We can more easily understand how this equation works, by looking at it geometrically.</p>
<p>Already in our early investigation, we noticed that many features seemed to be related to a certain geometric construction of unit circles, known as <em>The Flower of Life</em>. We also noticed that not just one, but several, of such grids were used. The above equation is the most simple description of how these grids interrelate to each other.</p>
<p>Let's look at two of these interrelated grids, composed of $R(3)$ and $R(4)$ circles. It is important to note, that there is no arbitrary decisions applied to these grids by us. Both their dimensions and positioning, in relation to each other, are determined by the above equation (and we shall see exactly how shortly). With these two grids, we can already define several features of the object:</p>
<p><img alt="Illustration 1" src="../images/a1_plate_1.webp" /></p>
<ul>
<li><strong>A</strong>: The top of the object (<em>deviation: $7~\mu m$</em>)</li>
<li><strong>B</strong>: The maximum extent of the curved part of the upper body (<em>deviation: $13~\mu m$</em>)</li>
<li><strong>C</strong>: The maximum diameter of the body curvature (<em>deviation: $72~\mu m$</em>)</li>
<li><strong>D</strong>: The maximum diameter of the internal cavity (<em>deviation: $161~\mu m$</em>)</li>
<li><strong>E</strong>: The bottom of the object (<em>accurate deviation indeterminable due to irregularity of scan data at lower terminus</em>)</li>
</ul>
<p>The design of the object ascends and descends to and from the various sizes of these <em>Flower of Life</em> grids, by using an elegant geometrical construction:</p>
<ul>
<li>Let us select two of intersection points (<strong>A</strong>) in the $R(3)$ pattern, separated by $1 \over 3$ of a full circle.</li>
<li>We now extend a line from each point, with an angle of ${\pi \over 4}~radians$ ($45 ^\circ$).</li>
<li>At the point where these intersect (<strong>B</strong>), we create the center of a new circle, and extend its radius to one of the first two points.</li>
</ul>
<p><img alt="Illustration 2A" src="../images/a1_plate_2a.webp" /></p>
<p>The ratio between the radii of the two circles is now $\sqrt 6 \over 2$. To clearly see why this is, we can place the following triangles in the construction:</p>
<p><img alt="Illustration 2B" src="../images/a1_plate_2_construction.webp" /></p>
<p>Since these two triangles share one equal side, we can use that to show the ratio:</p>
<p>
<script type="math/tex; mode=display">{ \sqrt(2) \over 2 } \times R = {\sqrt(3) \over 2} \times r \implies \sqrt(2) \times R = \sqrt(3) \times r \implies</script>
<script type="math/tex; mode=display">{R \over r} = {\sqrt(3) \over \sqrt(2)} = {\sqrt({3 \over 2})} = {\sqrt 6 \over 2}</script>
By the continuation of this pattern, we arrive at the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and thus the radii used in the object can be created:</p>
<p><img alt="Illustration 4A" src="../images/a1_plate_4.webp" /></p>
<p>Since this pattern is used extensively in the object, we will refer to this radial traversal function as $R(n)$ in the rest of this article.</p>
<p>With this elegant construction, we can account for the majority of the circular features in the object. All of the circles created with this function map to the actual radii of the features of the object with incredible precision.</p>
<p>For each of the radii marked in the graphic below, we found the place where the object deviated <em>the most</em>, from the mathematically pure representation of the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and collated these statistics across all observed radii:</p>
<ul>
<li>Minimal radial deviation is $3~\mu m$</li>
<li>Maximal radial deviaton is $68~\mu m$</li>
<li>Mean radial deviation is $16.25~\mu m$</li>
<li>Median radial deviation is $9~\mu m$</li>
</ul>
<p>Please note, that most radii (even those exhibiting local deviations above the mean) have areas that are, in any meaningful sense of the word, perfect. In many places, the deviation is so small, that we cannot say with certainty whether the deviation is due to "imperfections" in the object, or inaccuracies in the scan. All radii in the following illustration are generated by the $R(n)$ function, and are therefore tightly interrelated:</p>
<p><img alt="Illustration 4B" src="../images/a1_plate_4b_montage.webp" /></p>
<p>To see this level of <em>consistency</em> of precision across just two or three different radii, created from a purely mathematical function, would be astonishing. To see it <em>completely consistently</em>, to <em>microscopic precision</em>, across $12$ different radii, measuring from just $1.1~mm$, up to $42.2~mm$, in a granite artefact, is more or less unfathomable.</p>
<h3>The 1-Radian Arc</h3>
<p>In addition to the radial traversal pattern, we have identified another recurring design principle. The extension of arcs of exactly $1$ radian, locked into configuration with circles created from the radial traversal function, is also used to construct several features of the object.</p>
<p>The part of the body above the handles is composed of two primary regions. The region immediately above the handles exhibits a slight curvature, while the upper region is perfectly conical. This configuration of features can be defined by extending an arc of exactly $1$ radian so that the arc intersects with the $R(3)$ circle defining the maximum extents of the upper body curvature.</p>
<p><img alt="Illustration 5" src="../images/a1_plate_5.webp" /></p>
<p>Placing the arc, so that its lines are tangent to the $R(3)$ circle, perfectly maps the conical region (<strong>A</strong>). And by its intersection with the circle, also marks the point (<strong>B</strong>) where the curved region and conical region meet. The maximum deviation of the conical region from the $1$ radian angle is a mere $37~\mu m$.</p>
<p>As we will see later, this $1$ radian arc is also used to position and dimension the handles.</p>
<h3>Incorporation of π</h3>
<p>The $R(n)$ function, discussed above, still leaves a few circular features unaccounted for, so let us explore how these were dimensioned. The opening into the internal cavity of the object has an interesting feature, in that it tapers slightly inward to a point, and then slightly outward again, before blending with the rest of the internal cavity.</p>
<p>Even this extremely delicate feature is perfectly described by the curvature of an $R(6)$ circle. Though the curvature is very slight, it is sufficient to create a clearly defined minimum for the internal radius of the opening $(Ri)$. Likewise, an external maximum diameter $(Do)$ is clearly definable from the curvature on the lip exterior.</p>
<p><img alt="Illustration 6" src="../images/a1_plate_6.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Ri} = { 58.9322 \over 18.7391 } = 3.14488 \approx \pi</script>
<script type="math/tex; mode=display">\Delta = \left({{Do \over Ri} \over \pi} - 1\right) \times 100 = 0.1046\%</script>
</p>
<p>As we can see, the difference between the ratio existing in the physical object, and a perfect representation of $\pi$ is less than $0.11\%$. In such a small object, this equates to a real-world deviation of approximately $32~\mu m$. This finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>. Furthermore, Marián Marčiš <a href="https://twitter.com/mariusderomanu3/status/1633564138772332549">has also found preliminary evidence</a> of the same ratio incorporated in an object currently displayed at the Cario Museum.</p>
<blockquote>
<p><strong>Here is an experiment to do at home:</strong> Try setting a variable gauge to a gap of $32~\mu m$. You will hardly be able to see <em>light</em> pass through that slit. A human hair is twice as thick as the deviation of the $\pi$ ratio in the object. Even calling this an "imperfection" would seem just <em>slightly</em> arrogant.</p>
</blockquote>
<p>The creators of this object inscribed $\pi$ to perfection at the <em>microscopic scale</em>, in one of the hardest and most difficult materials to work with. I remain doubtful, that it would even be possible to replicate this result with modern CNC machinery.</p>
<h3>Incorporation of The Golden Ratio</h3>
<p>In a similar fashion to the use of $\pi$ above, the golden ratio has also been incorporated in the design of the object. The ratio between the diameter of the narrowest part of the exterior neck $(Dn)$, and the inner radius $(Ri)$ is $\varphi^2$.</p>
<p><img alt="Illustration 7" src="../images/a1_plate_7.webp" /></p>
<p>
<script type="math/tex; mode=display">{Dn \over Ri} = { 49.024 \over 18.7391 } = 2.61613 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left({{Dn \over Ri} \over \varphi^2} - 1\right) \times 100 = 0.072\%</script>
</p>
<p>Again we see a level of precision, that I have a hard time describing with words, so I will let the calculations speak for themselves. In the physical object, this <em>absolutely miniscule</em> deviation from <em>mathematically perfect</em> equates to approximately $20~\mu m$. As with the incorporation of $\pi$, this finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>.</p>
<h3>A Gift From The Past</h3>
<p>We also find the golden ratio encoded in the ratio between the outer diameter of the lip $(Do)$ and the radius of the foot $(Rf)$:</p>
<p><img alt="Illustration 8" src="../images/a1_plate_8.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Rf} = { 58.9322 \over 22.5299 } = 2.615733 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left(1-{{Do \over Rf} \over \varphi^2} \right) \times 100 = 0.088\%</script>
The deviation in absolute measurements here is approximately $35~\mu m$.</p>
<p>As a sort of mathematical gift, the designers of the object placed a double equivalence here: Since $Do$ is already produced by $\pi$, the radius of the foot can be more purely described as $Rf = {Ri \times \pi \over \varphi^2}$. Because this creates an equivalence between all four measures, established by fundamental mathematical concepts, the following should be a reasonable extension:</p>
<p>
<script type="math/tex; mode=display">Do = {Ri \times \pi} ~~\land~~ Dn = Ri \times\varphi^2 ~~ \land ~~ Rf = {Ri \times \pi \over \varphi^2}</script>
<script type="math/tex; mode=display">Ri = 1 ~~ \implies ~~ {Do = \pi} ~~ \land ~~ {Dn = \varphi^2} ~~ \land ~~ {Rf = {\pi \over \varphi^2}}</script>
<script type="math/tex; mode=display">\therefore</script>
<script type="math/tex; mode=display">1 = Ri</script>
</p>
<p>I really cannot imagine a more elegant and beautiful way to establish and communicate a base unit of measure. Whoever created this fascinating object wanted us to know what their measurement system looked like, and here it is. Set in stone, in the universal language of mathematics, and preserved through the ages. Absolutely incredible.</p>
<p>Since we do not currently have any better designation, we will refer to the unit of measure used in the design as $U$ (<em>Units</em>). According to our measurements, an approximation to this unit of measure could be:</p>
<p>
<script type="math/tex; mode=display">1~U \approx 18.739~mm</script>
Since we have observed dimensional deviations of between $20\mu m$ and $32\mu m$ in the measurements used to arrive at this number, we do not recommend using the above approximation as a basis for reference outside of this article.</p>
<p>We do, however, see an interesting corellation in this number. The approximation we have arrived at is just a mere $2.07\mu m$ (less than the scan accuracy) away from <em>exactly</em> matching the wavelength of an eloctromagnetic wave, with a frequency of $16~GHz$, propagating in vacuum:</p>
<p>
<script type="math/tex; mode=display">{c \over f} = {299,792,458~m/s \over 16,000,000,000~Hz} = 18.737028625~mm</script>
</p>
<p>We believe this establishes a more clear common reference, since $1~U$ can elegantly be defined as a simple subdivison of the speed of light in a vacuum.</p>
<p>For the purpose of having a shared reference, and thus the ability to talk about this unit without undue confusion, we would like to humbly propose its <em>provisional</em> definition based on the above ratio:</p>
<p>
<script type="math/tex; mode=display">1~U = 18.737028625~mm</script>
</p>
<h3>Original Dimensions Revealed</h3>
<p>With the above information, we are now able to see what the dimension of this object would really have looked like to its creators. Millimeters have a hard time conveying any meaning here, but once we view the dimensions in $U$, we are treated to a very different, and beautiful picture:</p>
<table>
<thead>
<tr>
<th>Dimension</th>
<th>$U$</th>
<th>$mm$</th>
</tr>
</thead>
<tbody>
<tr>
<td>Opening Radius</td>
<td>$1$</td>
<td>$~18.74$</td>
</tr>
<tr>
<td>Height</td>
<td>$32 \over 5$</td>
<td>$~119.9$</td>
</tr>
<tr>
<td>Width</td>
<td>$9 \over 2$</td>
<td>$~84.3$</td>
</tr>
<tr>
<td>Width at Handles</td>
<td>$46 \over 9$</td>
<td>$~95.7$</td>
</tr>
<tr>
<td>Max Lip Diameter</td>
<td>$\pi$</td>
<td>$~58.9$</td>
</tr>
<tr>
<td>Min Neck Diameter</td>
<td>$\varphi^2$</td>
<td>$~49.0$</td>
</tr>
<tr>
<td>Foot Radius</td>
<td>${\pi \over \varphi^2}$</td>
<td>$~22.5$</td>
</tr>
</tbody>
</table>
<h3>Placing The Handles</h3>
<p>In this section, we will show how the handles are created. The mathematics needed for this willl get a little more complex, and may not be interesting for everyone. However, we believe it is very important to account for this construction clearly, since it shows with undeniable clarity, just how complex and interrelated the design of the object is, and we want to present the mathematics as a concrete proof for this.</p>
<p>If you are not interested in the equations, you can skip to immediately after the vector construction, where we will return to talking about what it means, in plain english.</p>
<p>The geometry of the handles is constructed from an interaction between two of the 1 radian arcs, introduced earlier. The first of these arcs is extended from the center intersection point of the R(3) Flower Of Life grid:</p>
<p><img alt="Illustration 9" src="../images/a1_plate_9.webp" /></p>
<p>The second is created by constructing a $1$ radian arc, that is tangent to the upper circle in the $R(4)$ Flower Of Life grid:</p>
<p><img alt="Illustration 10" src="../images/a1_plate_10.webp" /></p>
<p>With these two arcs defined (originating from the $R(3)$ and $R(4)$ Flower Of Life grids), and an $R(-4)$ circle, we now have all the constraints necessary to construct the geometry of the handles, which can be expressed as a polar vector, $V_h$:</p>
<p><img alt="Illustration 11" src="../images/a1_plate_11.webp" /></p>
<p>
<script type="math/tex; mode=display">V_h = \begin{bmatrix} \ell \cr \theta \end{bmatrix}</script>
</p>
<center><i>Where</i></center>
<p>
<script type="math/tex; mode=display">\theta = {1 \over 2}~~~\land~~~\ell = {{{R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)} \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2}) + {{R(-4)} \over {sin({\pi \over 2}-1)}}</script>
</p>
<center><i>Because</i></center>
<p>
<script type="math/tex; mode=display">d = {1 \over 2} \times R(3) + {\sqrt(3) \over 2} \times R(3)~~\land~~ y = {R(4) \over \sin({1 \over 2})} \implies a = y - d \implies</script>
<script type="math/tex; mode=display">a = {R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)</script>
<script type="math/tex; mode=display">\ell_1 = {a \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2})~~\land~~l_2 = {{R(-4)} \over {sin({\pi \over 2}-1)}} \implies \ell = \ell_1 + \ell_2</script>
<br/><br/>
The remaining features of the handles are accounted for as follows:</p>
<ul>
<li>The angle of the straight part of the lower section of the handle is defined by the first $1$ radian arc, and is thus $\frac{1}{2}$ radian.</li>
<li>The curvature blending the straight part of the lower section of the handle to the body is defined by an arc of an $R(-13)$ circle. The $1 \over 2$ radian angle is tangent to this circle.</li>
<li>As best as we can currently tell, the straight part of the upper section of the handle has been intentionally configured to an angle of $\varphi \over 10$ radians.</li>
<li>The curvature blending the straight part of the upper section of the handle to the body is defined by an arc of an $R(-12)$ circle. The $\varphi \over 10$ radian angle is tangent to this circle.</li>
<li>An astute observer will notice that a very small outward anomaly ($\sim0.3~mm$) exists on the upper handle curvature. This feature is accurately accounted for, by adding a slightly offset $R(-5)$ circle to the geometry.</li>
</ul>
<p>We have <strong>not</strong> been able to simplify this construction any further than the above, and believe it is most likely the optimal configuration for creating the handles, in terms of simplicity. The implications of this are <strong>substantial</strong>.</p>
<p>The physical geometry, that we observe in the finished object, is <em>essentially created as the solution to a highly interrelated set of equations</em>, that span the entire object, in multiple dimensions and configuration spaces.</p>
<p>We consider it highly likely that the <em>entire object</em> can indeed be represented as <strong>a single equation</strong>.</p>
<h2>Conclusions</h2>
<p>It is our conviction that our current model demonstrates, with overwhelming certainty, that a high degree of sophisticated design principles, and intricately interlinked relations and design constraints are present in the object.</p>
<p>While we cannot tell with certainty, if the way that we have <em>described</em> the design exactly matches that of the original creators, we are confident that our reverse-engineered model does indeed represent the <em>actual</em> mathematics, interrelations and constraints present in the original design.</p>
<p>While there is still much to learn about this fascinating artefact, the knowledge and data we already have, allows us to draw some conclusions with confidence.</p>
<h3>On Chance Occurrence</h3>
<p>Could an object like this simply have been a chance happening? A rare coincidence of random alignment?</p>
<p>No. Proposing that would be completely magical and superstitious thinking.</p>
<p>Maintaining absolute precision and consistency by chance, between all the interlinked systems present in the object, is - simply put - an impossibility. Waking up one morning, with an entirely new universe sprouting from quantum fluctuations in your left nostril, would be a significantly more likely event.</p>
<p>It might be possible, by <em>extreme luck</em> to have an object randomly show the value of $\pi$ or $\varphi$ somewhere, but remember that <em>all</em> systems in this object are <em>tightly interrelated</em>! Changing one parameter would throw <strong>everything</strong> else off. Here, at least 15 levels of interrelation exists, and they are all precisely in harmony, down to microscopic scales.</p>
<p>This object was meticulously and carefully designed by a human being, with incredible levels of skill, insight and artistry. Of that, there can currently be no doubt.</p>
<h3>Required Design Capabilities</h3>
<p>What kind of system would have been necessary to represent the abstract design of the object, before its manufacture? Could the object have been designed by analogue means, for example as a drawing on paper, which was then used to guide the manufacture?</p>
<p>To attempt a satisfactory answer to this question, we will need to carefully consider a multitude of factors. A future article will delve into the full depth, that this question deserves, but we feel that our initial conclusions on the matter still bear touching upon here, even if only briefly.</p>
<p>When looking at the <em>scales</em> across which precision was maintained in this object, some interesting problems arise. The smallest radii - identified so far - in the object are only around $1 mm$, but they scale perfectly, through the radial traversal function, with precision in the micrometers, to even the largest radii in the object (of around $63mm$).</p>
<p>Carrying out this sort of scaling on any kind of analogue medium, would introduce errors immediately, that would only accumulate over successive radial traversals. Even our modern, finely tipped drawing tools, working on the smoothest of paper would create <em>errors</em> close to the <em>full radii</em> of some of these circles and features.</p>
<p>To account and control for such errors, the designer would have to scale up the blueprint to proportions of <em>at least</em> several meters, which of course just raises further questions of how to transfer it back down again, to the decidedly <em>petite</em> dimensions of the actual object.</p>
<p>Perhaps the most plausible way to represent this object on an analogue medium, would be to describe it geometrically and mathematically. This is decidedly possible, and one could even make sketches along the way, to show an <em>approximation</em> of the final design. Our civilization has known about the required mathematics to do this since approximately 500 CE.</p>
<p>But being faced with the prospect of then transferring this design through a manufacturing process, to a physical object, we are put squarely back to the starting point, since we now need to produce <em>some sort</em> of analogue template that can guide or control the manufacturing process.</p>
<p>While the point I will now make certainly necessitates a full, and very formal substantiation, I feel it would simply be cowardly of me, not to bring this argument to its logical conclusion, and stand by where the evidence and logic leads.</p>
<p><strong>As far as we know, no human beings, trained animals or naturally occurring phenomenae, modern or ancient, take mathematical formulae and equations as input, and produce lathe-operating motions as outputs.</strong></p>
<p>For all of the knowledge and insights we have accumulated over the ages, we know of exactly one, and <strong>only</strong> one <em>category</em> of things capable of such behaviour: The kind of thing, that we refer to as a <em>turing machine</em>. A device capable of taking input, holding state, performing operations on held states, according to pre-determined principles, and producing output.</p>
<p>They come in many shapes and sizes, and can be constructed mechanically, electronically and even pneumatically or hydraulically. And you are most likely using one right now, to read this article.</p>
<p><em>We</em> call this class of device <em>a computer</em>, and no plausible way of representing, operating on, or manufacturing the design of this artefact exists, without having access to one such.</p>
<h3>Required Manufacturing Capabilities</h3>
<p>When comparing the output of our generative model to the physical object, we can begin to get some rough insights into the fabrication capabilities of the creators of the object. From only looking at the observable facts, we can conclude the following:</p>
<ul>
<li>Since we have no known records of, or even ideas about, how an additive manufacturing process with granite could work, we are assuming a subtractive process (for example cutting, carving, grinding, ablating, and so on).</li>
<li>The creators of the object were able to consistently hold tolerances of around $30\mu m$ for subtractive processes in granite. In many places we see tolerances of less than $10\mu m$.</li>
<li>Tools used to substract material from the granite blank must have been held at incredibly high levels of axial stability to reach these tolerances.<ul>
<li>Technologically, this is <strong>only</strong> possible to achieve with ultra smooth and precise rods, bearings, ball-screws and similar mechanisms.</li>
</ul>
</li>
<li>Incredibly precise guiding mechanisms <strong>must</strong> have been employed to to control the substractive process, since the finished object conforms to the abstract design to microscopic levels of precision.<ul>
<li>Again, this <strong>absolutely requires</strong> mechanical technology of ultra high quality, rivalling or surpassing what we are able to produce today.</li>
</ul>
</li>
<li>We can observe no perceivable loss in calibration or positioning across curves of different radii, or their positional interrelation to each other, which most likely means that the creators of the object were able to machine it in a <em>single pass</em>, or could somehow carry out tool-changes with practically no loss of positional calibration.</li>
<li>The placement of the exterior features of the object, and the maintenance of precision across the areas between the handles means, that a simple rotational process would have been insufficient to produce the geometry we see.<ul>
<li>The most simple manufacturing process we have been able to come up with for the object, would require 5 axis of freedom in the system guiding the subtractive tool.</li>
</ul>
</li>
</ul>
<h3>Conclusions In Summary</h3>
<p>Based on the best understanding we currently have of the object, and on the knowledge of normal fundamental limits of physics and laws of nature, we have to conclude:</p>
<ul>
<li>That this object was fabricated on a highly sophisticated subtractive manufacturing system, from a solid piece of granite.</li>
<li>That the manufacturing system would require, <em>at the very least</em>, sophisticated mechanical technology and high-precision components.</li>
<li>That the manufacturing system would necessarily have been guided by an automated control system, which could read the design as input, and produce the required motions as output.</li>
<li>That a turing machine, of considerable sophistication, would most likely have been employed to create and operate on the design, and to finally transfer it to the manufacturing system.</li>
</ul>
<p>There is no way, in which we can attribute the production of this artefact, to anyone who do not possess, <em>at minimum</em>, the level of technological sophistication and capabilities mentioned above. This raises some very interesting questions regarding the origin of the object, which we hope to be able to explore in future work.</p>
<h3>Future Work</h3>
<p>We hope that a number of similar objects (of which there are thousands, in museums around the world) can be scanned with the same, or better, scanning technology, so that a body of work can be built up around the analysis of these remarkable artefacts.</p>
<p>With the analytical tools and technologies we have available today, we stand at the beginning of a new era of inquiry into our past and shared heritage. I can imagine few things more valuable, than deepening the understanding of our collective origins, as a species, and as individuals.</p>
<p>Only by open, critical and honest scientific inquiry, working from first principles anchored in concrete and verifiable data, can the deepest and most obscured echoes of our shared past be brought into the light of day once more.</p>
<p>We must allow the observable facts, the <em>givens</em> that we have, to speak <strong>without prior interpretation</strong>, even if the conclusions risk temporarily upsetting a prior understanding.</p>
<p>In the scientific endeavour, <strong>all</strong> theories are provisional, and must yield when a simpler one, that better fits the evidence, can be constructed. If this fundamental tenet ceases to hold primacy, science ceases to be science, and instead degrades into dogma.</p>
<p><br/><center><big><big><big><big>𓏜 𓂭</big></big></big></big></center></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,59 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Common Questions About Reticulum, And Their Answers | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Common Questions About Reticulum, And Their Answers">
<meta name="description" content="This article will answer some of the most common and frequently asked questions about Reticulum and related tools.">
<meta property="og:description" content="This article will answer some of the most common and frequently asked questions about Reticulum and related tools.">
<meta property="og:image" content="https://unsigned.io/images/ret_faq_post.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_05_05_Common_Questions_About_Reticulum.html">
<meta property="og:title" content="Common Questions About Reticulum, And Their Answers">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_05_05_Common_Questions_About_Reticulum.html">
<meta name="twitter:title" content="Common Questions About Reticulum, And Their Answers">
<meta name="twitter:description" content="This article will answer some of the most common and frequently asked questions about Reticulum and related tools.">
<meta name="twitter:image" content="https://unsigned.io/images/ret_faq_post.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h2>Questions &amp; Answers</h2>
<p>This article will answer some of the most common and frequently asked questions about Reticulum and related tools.</p>
<ul>
<li><strong>What are the system requirements for running Reticulum?</strong><br />
Practically any system that can run Python3 can also run Reticulum. Any computer made since the early 2000's should work, provided it has a reasonably up-to-date operating system installed. Even low-power embedded devices with 256 megabytes of RAM will run Reticulum.</li>
<li><strong>Does Reticulum work without the Internet?</strong><br />
Yes. Reticulum <em>is</em> itself both a networking, and an inter-net protocol. A key difference between Reticulum and IPv4/v6, however, is that Reticulum does not require any central coordination or authority to work. As soon as two devices running Reticulum can talk to each other, they form a network. That network can dynamically grow to planetary-scale nets, split up, re-connect and heal in any number of ways, while still continuing to function. As long as there is <em>some sort of physical way</em> for two or more devices to communicate, Reticulum will allow them to form a secure and reliable network.</li>
<li><strong>Who owns and controls the addresses I use on a Reticulum network?</strong><br />
You do. Every address is in complete ownership and control of the person that created it.</li>
<li><strong>If nobody centrally controls the addresses, will my address still be globally reachable?</strong><br />
Yes. Reticulum ensures end-to-end connectivity. All addresses are globally and directly reachable. Reticulum has no concept of "private address spaces" and NAT, as you might be suffering from with IPv4.</li>
<li><strong>Is communication over Reticulum encrypted?</strong><br />
Yes. All traffic is end-to-end encrypted. Reticulum <em>is fundamentally unable to route unencrypted traffic</em>. Links established over Reticulum networks offer forward secrecy, by using ephemeral encryption keys. </li>
<li><strong>Could you build a global Internet with Reticulum instead of IP?</strong><br />
Yes. In theory this is completely possible, but it will take a lot of refinement, development, hardware support and adoption to transition the global base-layer for communication to Reticulum. Please <a href="../contribute.html">help us</a> towards this goal! </li>
<li><strong>Is Reticulum as fast and optimised as my favorite TCP/IP stack?</strong><br />
Currently not, but we are working towards being much faster than IP. The primary focus of Reticulum has been to build an understandable and well-documented <em>reference implementation</em>, that works exceptionally well over medium-bandwidth to extremely low-bandwidth forms of communication. This focus is very valuable, since it allows people to build secure communications networks that span vast areas, with very simple hardware, and very little cost.</li>
<li><strong>Who created all of this?</strong><br />
The Reticulum protocol, and the RNode system was created by <a href="../contact.html">Mark Qvist</a>, of <a href="https://unsigned.io">unsigned.io</a>.</li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,55 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>The Reticulum API Is Complete | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="The Reticulum API Is Complete">
<meta name="description" content="It's been quite a ride to get here, and it would not have been possible without the many contributions from the community. The Reticulum API is fully implemented.">
<meta property="og:description" content="It's been quite a ride to get here, and it would not have been possible without the many contributions from the community. The Reticulum API is fully implemented.">
<meta property="og:image" content="https://unsigned.io/images/rlphm.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_06_03_The_Reticulum_API_Is_Complete.html">
<meta property="og:title" content="The Reticulum API Is Complete">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_06_03_The_Reticulum_API_Is_Complete.html">
<meta name="twitter:title" content="The Reticulum API Is Complete">
<meta name="twitter:description" content="It's been quite a ride to get here, and it would not have been possible without the many contributions from the community. The Reticulum API is fully implemented.">
<meta name="twitter:image" content="https://unsigned.io/images/rlphm.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>The Reticulum API Is Complete</h1>
<p>Over the course of the last six months - and in addition to a few major feature additions - a lot of polishing work, bugfixing and quality improvements have gone into the <a href="https://github.com/markqvist/reticulum">reference implementation</a> of <a href="https://reticulum.network/">Reticulum</a>.</p>
<p>It's been quite a ride to get here, and it took far more work, dilligence and persistence than I had ever imagined. It also would not have been possible without the many contributions from the community, both in terms of code, bugfixes, error reporting, donations, ideas, testing and everything else that has been generously given to the project. I am so grateful for everyone that has shared the vision of Reticulum, and helped make it a reality.</p>
<p>What started out as a pretty far-out idea, almost ten years ago, has now been realised to the point of proving itself to be a solid and functional system, build on a sound conceptual framework. For the first time, a realistic alternative to the ubiquity of the TCP/IP stack is within reach, and IP is no longer <em>The</em> Internet Protocol, but <em>a</em> protocol for inter-networking, with Reticulum being a possible alternative.</p>
<p><img alt="Image" src="../images/rlphm.webp" /></p>
<p>Will a global internet powered primarily by Reticulum ever become a reality? I have absolutely no idea. Functionally, it <em>could</em> happen. In time, and when a variety of native code implementations exist, Reticulum can essentially be deployed as a software update to the existing terrestrial internet, and exist alongside the old IP-based applications and systems.</p>
<p>In the long term, I truly believe that an internet running Reticulum is a better internet. Better in the terms of individual and collective human freedom, agency and prosperity, and in respect for human-centered values. The protocol stack that powers the current internet has inherent problems that can <em>never</em> be solved in-place, and the only long-term solution is to replace it. Reticulum offers a sensible and realistic path to that.</p>
<p>How, when - or indeed <em>if</em> - that happens, however, is currently not something I will concern myself with much. Reticulum already has so many use-cases and problems that it solves <em>right now</em>, that I think it is much more valuable to focus on those in the short to medium term, and that is where I will continously place my efforts.</p>
<p>But don't mistake it: Reticulum was designed from the beginning to potentially power everything from the smallest network of just a couple of low-power devices, to an interplanetary network spanning the entire solar system, with many billions of active endpoints, all operating in unison even in a dynamic and ever-changing topography. Reticulum is currently the <em>only</em> communications technology that even comes close to allowing something like this.</p>
<p>That I can finally say "The Reticulum API is complete" is a relief. I feel now, that what I set out to do, almost a decade ago, has been completed. I know there's a number of you that have been <strong>very patiently</strong> waiting for the time to start building other implementations of Reticulum, in other programming languages, and tailored for specific system types, and finally, that time is now.</p>
<p>In accordance with this, I will also take on a more passive and supportive role in the time ahead, focusing more on supporting the activities of anyone that builds out the Reticulum ecosystem, and on maintaining and improving the qualities of the Reticulum reference implementation. Who knows, maybe I will even have time to write some of the fun programs I always dreamed of making with Reticulum? Either way, the time to start building on and around Reticulum is now. Go for it!</p>
<p>And let me just send a shout-out of amazement and support to those who could not <em>quite</em> wait, and just went ahead and started Reticulum implementations in <a href="https://github.com/faragher/RNS_CS_Dev">C#</a> and <a href="https://github.com/sergst83/reticulum-network-stack/tree/master/src/main/java/io/reticulum">Java</a> already. That's awesome.</p>
<p>I also want to say a particular thanks to all of you who helped contribute code and bugfixes in this last stretch of development, and <strong>especially</strong> to <a href="https://github.com/acehoss">acehoss</a> for his invaluable and substantial contributions of the <code>Channel</code> and <code>Buffer</code> implementations, and his amazing work in bringing the Reticulum ecosystem our very own version of <code>ssh</code>, running purely over Reticulum: the <a href="https://github.com/acehoss/rnsh">rnsh</a> program (which even works well over <em>very</em> low-bandwidth links).</p>
<p>Also thanks to everyone running nodes and hubs on the Reticulum testnet. I am so delighted and grateful to see all the nodes connected, and exploring all the interesting things that people are building with <a href="https://unsigned.io/nomadnet">NomadNet</a> and <a href="https://unsigned.io/lxmf">LXMF</a> is awesome.</p>
<p>Thank you <strong>everyone</strong>, for the ride so far! Both to all the supporters, and also to all of you who critisized the very idea, said it couldn't be done, and that I was mad. I can't wait to see where we take it from here!</p>
<p>Maybe, just <em>maybe</em>, we will one day have a universal and uncensorable communications fabric spanning our solar system, ensuring full reachability, connectivity, anonymity and security for <em>everyone</em>. Reticulum is a first tiny step in that direction, and I am grateful and proud to have been a part of that.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,114 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Are We There Yet? | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Are We There Yet?">
<meta name="description" content="Wow, long time without a post. I wanted to share some important information about the immediate and long-term future of Reticulum and other projects.">
<meta property="og:description" content="Wow, long time without a post. I wanted to share some important information about the immediate and long-term future of Reticulum and other projects.">
<meta property="og:image" content="https://unsigned.io/images/ph_td.webp">
<meta property="og:url" content="https://unsigned.io/articles/2024_05_16_Are_We_There_Yet.html">
<meta property="og:title" content="Are We There Yet?">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2024_05_16_Are_We_There_Yet.html">
<meta name="twitter:title" content="Are We There Yet?">
<meta name="twitter:description" content="Wow, long time without a post. I wanted to share some important information about the immediate and long-term future of Reticulum and other projects.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_td.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><p><em>I've never written or shared personal things here before, but this will be an exception. There will be some very important announcements about the software that I maintain later in this post. If you want to skip the personal backstory, and go straight to that part, you can go directly to the section titled <a href="#future">Looking to the Future</a>.</em></p>
<h3>Where All Of This Came From</h3>
<p>In reality, it all started a lot earlier, but that's a story for another time. Five years ago, something important happened for me, and for the development of Reticulum: I decided to close my business and sell my house. Up until then, I had been running a small IT service and hosting business, and a Wireless Internet Service Provider in a rural area. Work like that had been a large part of my life since I was sixteen years old, and in almost all ways, I enjoyed it very much. All those years in the industry gave me plenty of interesting projects and challenges to work on, and I learned so much.</p>
<p>But life, circumstances and relationships change, and back then, I was realising, that opportunities for following my real passions and interests were not really going to develop any further, if I kept doing the same things I had always been doing.</p>
<p>What I really wanted to do, was to work on the different open-source projects I had already been putting my passion and efforts into for some time, next to my primary professional functions. Increasing personal and family responsibilities also meant it was quite clear, that if I tried to keep everything going, I would not be able to juggle all the balls I wanted to keep afloat - at least not in a very elegant and productive manner.</p>
<p>So something had to give way. It was definitely not going to be the people that I cared about, and giving up my true passions without affording them a proper try seemed like a horrible path too.</p>
<p><img alt="My old office" src="../images/office.webp" /></p>
<center>*This was my office. I built it as part of my small business, and in-between my professional work, Reticulum started it's life here - but finishing Reticulum would mean leaving it behind and going on the road instead.*</center>
<p>A lot of my identity and feelings of accomplishment were bound up in my business, so it was definitely not an easy choice, and one that required several months of deliberation. But in the end, ending my business was the only meaningful way to make room for even more important things. So that is what I did, and during the course of about a year, I winded down the business, helped customers move on, and dismantled or gave away infrastructure and equipment to other local organisations and small businesses that could make meaningful use of it.</p>
<p>Deliberately deconstructing everything I had spent so many years building up was a poignant process to say the least. When I finally powered down the last of the servers, and disconnect the last fibre-optic cables from their terminals, it was the strangest feeling of both sadness and the excitement of freedom.</p>
<p>No longer having any dependable basis for income, I would need to significantly downscale my life to accomodate a much lower ceiling for living expenses. I put up my house for sale, and started researching how I could best stretch the surplus of funds, that I projected the house sale would yield. I decided on moving into a caravan, and going to places where living expenses would be as low as possible.</p>
<p><img alt="Моstar, Herzegovina" src="../images/mostar.webp" /></p>
<center>*Моstar, Hercegovina. Living small and cheap doesn't have to be boring, when you can go to places like this.*</center>
<p>When the house finally did sell, it yielded less than I had hoped. But I still had enough to live simply, but comfortably for a few years focusing solely on what I wanted most: Developing Reticulum and its related tools and programs to a fully functional state, and contribute it to the pool of shared human technology as free and open-source software.</p>
<p>And that's how a 12 acre property and a farmhouse I had spent years renovating and rebuilding was swapped for a 15m<sup>2</sup> caravan (and later an even smaller camper van). To some, that may seems like a horrible change for the worse, but it was one of the best things that ever happened to me, and having had the time and freedom to focus almost exclusively on the things I love creating for several years now, has been such a joy, and immensely satisfying. Mind you, it's been really difficult too at times, but it's been more than worth it.</p>
<p><a name="a-fork-in-the-road"></a></p>
<h3>A Fork In The Road</h3>
<p>Many thousands of commits, and in aggregate, several hundred releases later the whole ecosystem of software and hardware that is sprouting around <a href="https://reticulum.network">Reticulum</a> has grown and developed so much. While choosing to downscale my life and focus on this work was definitely the springboard and a primary enabler of all of this, there is no way I could have carried it all out without all of the support I've received - both from family, friends and strangers.</p>
<p>A very deep and special thanks is also owed to one particular person close to me, that supported and encouraged this endeavour from the very start, understood the importance, listened to my mad ramblings and waving of paper sketches for hours on end, and never doubted it could be done. Without this support, Reticulum would never have existed.</p>
<p>But ultimately, one mad hatter can only go so far, and I'm thankful there is now a community of users and contributors growing around Reticulum, comprising a wide variety of different people, worldviews and skillsets. The support and help you have provided to the project really allowed me to stretch the limited resources I've had, into something I had never dared to count on. I am so grateful for this. Thank you to all of you.</p>
<p>It's especially wild to see that most of the code added over the last couple of months actually wasn't written by me, but by community contributors! Especially the <a href="../rnode_firmware/">RNode Firmware</a> has seen huge improvements by the hands of the community. <a href="https://github.com/markqvist/Reticulum/wiki/Awesome-Reticulum#non-reference-and-wip-reticulum-implementations">New implementations</a> of the Reticulum protocol is in the works by community members, along with new applications and systems being created with Reticulum, including a brand new <a href="../lxmf/">LXMF</a> client, called <a href="https://github.com/liamcottle/reticulum-meshchat">MeshChat</a>. You're all friggin' awesome!</p>
<p>From the very beginning, I was conscious about trying to attract the right kind of people to the project: People that would find Reticulum interesting enough to figure out a lot of the technical details themselves, and in turn learn and internalise how Reticulum works, and the thoughts and ideas behind it. I believe that such a process leads to a feeling of shared ownership, and that was ultimately what I aimed for. Shared ownership is the only true basis for community. Honestly, I had absolutely no idea whether what I was doing in that department was right, but it seems like it worked, because all of you that did show up are pretty awesome, and I'm so happy to have met you.</p>
<p>While I have been working towards - and hoping - that this day would come, it's ironically also something I have been absoutely fearing. This is because it's something that puts me completely outside of my optimal skillset, and into waters that are exceedingly challenging for me.</p>
<p>Give me an immensely complex problem, that I can dedicate uninterrupted focus to for months at a time, and I will thrive - and maybe even come up with something rather brilliant. Demand that I work on something that requires constant multitasking and context-switching, and you shall observe me degenerate into a cognitively deficient, non-verbal state in no time at all (I'm not even being hyperbolic here, it's actually <strong>exactly</strong> what happens).</p>
<p>Unfortunately, managing several active open source projects, many emails and messages every day, from all kinds of people asking good and interesting questions, thinking about and designing solutions to the core problems of the projects, integrating feedback and ideas, providing directions and answers to the community, testing and debugging hardware and software on a multitude of platforms, reviewing pull requests, triaging issues and potential bugs, all while trying to live on a shoestring budget, while still being a decent, continually growing and learning human being, is exactly the kind of hyper-multitasking that I completely fail at.</p>
<p>I do best when I have the time to stare uninterrupted at trees and mountains for extended periods of time while thinking deeply, and then sitting down for 16 hours straight to put those thoughts into either code, equations or words without interruptions.</p>
<p>If you've been here a while, you have probably noticed that if I have anything to say, it tends to be rather... <em>verbose</em>. Case in point; this post. Often, it also completely eschews certain traditionally expected subtleties or considerations.</p>
<p>Once upon a time, in an earlier part of my life, I thought that such attributes were merely <em>proclivities</em>; something that could be molded away with practice and perseverance, without damaging the qualities, skills and capabilities in me that actually bring me meaning and joy. This is not possible, of course.</p>
<p>I run on a slightly different hardware platform than the majority of people: I'm <a href="https://www.youtube.com/watch?v=80_ATHp6xPg">autistic</a>. And while that means I have quite the mental elasticity in some areas, I've learned to accept that it also comes with inabilities, challenges and sometimes just plainly hilarious differences to most people. Like that one time, where I got so excited over a new antenna that I broke one of my toes.</p>
<p><img alt="The X700 Incident" src="../images/x700_incident.jpg" /></p>
<p>Notice how that very nice <a href="https://diamondantenna.net/x700hna.html">Diamond X700HNA</a> is <em>in my hand</em>, not on a mast. Notice also the bags of frozen beans on my right foot. Well, I find antennas quite exciting. I'm a grown man, but when I get excited about something, I get a very strong urge to jump over stuff. Problem is, I also often forget how terrible my proprioception is, which makes attempts at ninja-vaulting over stuff a pretty bad idea. Result: Broken toe, and no antenna mounting that day. I have a lot of stories like that, but I'll try not to digress further.</p>
<p>Being autistic is one of the things I absolutely love about being alive. It defines a lot of who I am, and I'd never want it any other way. But it really does neccessitate accepting that there are certain things I am not just "a bit challenged" in. I may be able to do <em>some</em> of them short-term, but in the long run, they are not challenges, but <strong>hard inabilities</strong>.</p>
<p>Such inabilities and seemingly difficult "proclivities" are just as much fundamental points in the overall lattice of a being, as the ones that are perceived as productive and wanted. Since they are all constituents of the overall structure of a person, you can't hammer any of them out. Try, and you'll just end up shattering the entire crystal into thousands of little shards. All still of the same making, but now disjointed.</p>
<p>There's areas where I excel, and areas where I absolutely do not. I have really enjoyed, and now very much treasure the last five years, and all the great stuff we've managed to put together. Through building all of this, things have once again changed, and that means it's also time for some changes for me, personally.</p>
<p><a name="future"></a></p>
<h3>Looking To The Future</h3>
<p>If you read the personal context above, you can probably imagine that some of the most important changes to my future work on Reticulum will center on tightening focus, and prioritising depth rather than breadth. I will go into more details about all of that shortly, but first there is another very important aspect that I would like to make clear to all of you - the financial situation of my continued work on Reticulum. </p>
<p>When I dedicated myself primarily to developing Reticulum and the surrounding ecosystem, I also dedicated a specific amount of financial resources to do this. With lots of help and support along the way, I've been able to stretch those resources farther than I had dared to count on. Nothing lasts forever though, and they have now been exhausted. This means, that going forward, substantial and focused work on Reticulum and related software from my part, will require funding in one form or another. If you can provide me with a hut in the mountains, and a steady supply of risotto and carbonated water, and the occasional glass of whiskey, that may just work out.</p>
<p>Joking aside, though, the immediate protocol for acheiving this will be to collect all incoming donations into pools that can be used to fund meaningful periods of focused work. As mentioned above, I work most efficiently when I do not have to context switch often, which means I will target funding work into chunks of a month at a time (or longer if possible).</p>
<p>A more long-term and stable solution for funding Reticulum development is something that I am still looking into. This is an area, where I will most likely need help, since my skills in the domain of asking charities and foundations for project funding are practically non-existent. I've tried, and I failed.</p>
<p>There are parts of Reticulum and related systems that are so interesting and satisfying for me to work on, that I am very likely to continue doing that in my free time as well. But it will be handled exactly as that, something I do in my free time. For the next long while, the things I really want to focus on will be primarily invisible to the community, and it's likely to be a while before I announce any of it. I really need to retire a bit to the periphery, and work on some of the long-term fundamentals, that I haven't really talked about anywhere yet, so that is what I'll do - for my own satisfaction and in a slower pace.</p>
<p>Most of the various packages and programs I maintain will continue to be maintained by me, but for some of them, I am actively encouraging the community to take a larger degree of ownership and development. I think this will be interesting and beneficial for everyone, so let's have a look at the specifics.</p>
<h4>RNS</h4>
<p>While I will continue to maintain and publish Reticulum, the release cycle will now slow down considerably. I actually find it to be a really good time for this to happen, and the release frequency has been pretty hectic over the last two years.</p>
<p>The core <code>rns</code> package has reached a high level of stability, maturity and functionality, and the API is fully implemented and functional. Slowing down the release cycle will allow potential pull requests, bug reports and community feedback to accumulate into masses of work that can be dealt with more efficiently over funded periods of focused work, thus freeing up time and resources for me.</p>
<p>Slowing down the release cycle will also allow greater insight into what the community and users actually need most, and will allow other implementations to more easily catch up to feature and API parity with the reference implementation, and for documentation and tutorials to be produced.</p>
<p>I will release version <code>0.7.5</code> of the Reticulum shortly, this will be the last release in a while. After this release, the codebase can now be considered stable. Any critical bugs and security issues will of course be fixed and have updated releases issued immediately, but apart from that, new releases will be scheduled into targeted blocks of work.</p>
<h4>LXMF</h4>
<p>While I had hoped to implement the last big features of LXMF that I initially planned - group messaging, content destinations and a particular security-related feature - I didn't manage this within the time and resources I had available.</p>
<p>I'm very confident that it will happen down the road, but it will take some time for me to get there. Securing significant funding could greatly speed up this.</p>
<p>I will still release security and bugfix releases to LXMF, but other than that, the release cycle will slow down considerably too. LXMF is something I <strong>really</strong> look forward to putting more time and effort into, but realistically, it will have to wait a bit.</p>
<h4>RNode Firmware</h4>
<p>I will release an update to the RNode Firmware shortly that will incorporate recent pull requests and improvements from the community, along with a few additions of my own. From here on, I encourage and ask the community to fork and take over the continued development and maintenance of the RNode Firmware.</p>
<p>I will of course still keep my version of the repository and firmware releases up and available as a stable reference. But it's my hope that the community will create a fork and organise around it to make it even better and more functional than what we've achieved together so far.</p>
<p>So much great development has been happening from the community, and I believe letting you all take it completely in the directions you want will be the best course of action overall. There's lots of features that people want, and lots of potential for improvement. Giving this to the community will free up time and resources for me, and more options will make RNodes even better.</p>
<p>If any critical bugs or issues are discovered in this regard, I will backport them to the firmware fork that I maintain, but other than that, it's in your hands now. I put so much love and care into RNode, please take good care of it!</p>
<h4>Nomad Network</h4>
<p>When I started creating Nomad Network, my main goal was to create a basic communication and information-sharing system that could be easily deployed in adverse scenarios, such as natural disasters, humanitarian efforts, zero-infrastructure areas and off-grid communities. Something that would allow 80% of the bare-necessity utility value of an Internet connection, in only 1% of the equipment and bandwidth envelope. Something that could be set up and operated with very few resources, and still provide meaningful communication to a community.</p>
<p>Within that framework, Nomad Network is complete, and I am very satisfied with how it has turned out. It's a strange piece of software, for sure, and I absolutely love it. There's so much more that could be done with it, so much potential in all kinds of weird and wonderful directions, but those will be for all of you to decide.</p>
<p>My secondary goal when creating it was for it to serve as an example of what you can do with Reticulum, so I hope you will use it that way. Use it, build on it, modify it, extend it. Personally, it's been great to see how <a href="https://github.com/liamcottle">Liam Cottle</a> already incorporated a nomadnet page viewer into the <a href="https://github.com/liamcottle/reticulum-webchat">Reticulum Webchat</a> client.</p>
<p>Going forward, I may or may not publish new versions of <code>nomadnet</code>. I honestly don't know. It's one of my beloved little pet projects, and I may well fall into a strange mood one day and work on it for two months straight. Or not. Who knows?</p>
<h4>Sideband</h4>
<p>The mobile and desktop LXMF client and extensible telemetry-multitool <em>Sideband</em> is another program I wrote partly as an example of what you can do with Reticulum. But more pertinently, I wrote it because it was exactly the kind of program that I needed and wanted to use on a daily basis.</p>
<p>I know a lot of people have found it idiosyncratic in many ways, and a lot have found it great. For a few individuals, it has apparently been a strange enough experience that they had to send me honest-to-goodness hate-mail and threats about it. That was <strong>not</strong> something I expected, but at least it provided a laugh and a head-scratch.</p>
<p>Sideband was definitely <strong>never</strong> intended to be a "product" for any kind of mass audience. For the people who get it, I hope they will continue to use it, or use it as an example of how to build something even better. For the people who don't get it, I hope it will serve as an inspiration to build something they like better.</p>
<p>I will continue to work on and update Sideband when I find it interesting and amusing. In many ways, Sideband is "my own personal Reticulum project", and I intend to keep on tinkering with it. It will definitely keep on being idiosyncratic and packed, that's how I like it.</p>
<h3>Wrapping Things Up</h3>
<p>This has been a long and dense post. There was a lot to communicate, and I hope that I've managed to keep the important information accessible, while still providing additional context for those that are interested in the background and reasons for everything. I think sharing a bit more of what has motivated me in all of this, and how I think and see things will be useful going forward.</p>
<p>Coming to the conclusions here took a lot of turning over in my head. In the end, my primary goal is to create the best possibilities for the project and community going forward, while also still respecting my own skills, challenges and best interests. The path outlined above is the best I've been able to come up with.</p>
<p>I'd really love to hear what all of you think about this, how <em>you</em> see the future of Reticulum, and whether you think these choices will continue to move things in a positive direction for everyone.</p>
<p>Once again, thanks for everything so far.</p>
<p><img alt="The Dome" src="../images/the_dome.webp" /></p>
<center>*For now, I think I'll go and take it easy for a while, and visit some of the places and people that I love.<br/>If you know where this place is, maybe I'll see you there in August.*</center>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,60 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Going Fast and Slow | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Going Fast and Slow">
<meta name="description" content="Where we are, and where we're going, in terms of Reticulum performance and scalability, and some new experimental features.">
<meta property="og:description" content="Where we are, and where we're going, in terms of Reticulum performance and scalability, and some new experimental features.">
<meta property="og:image" content="https://unsigned.io/images/ph_perf.webp">
<meta property="og:url" content="https://unsigned.io/articles/2025_02_24_Going_Fast_and_Slow.html">
<meta property="og:title" content="Going Fast and Slow">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2025_02_24_Going_Fast_and_Slow.html">
<meta name="twitter:title" content="Going Fast and Slow">
<meta name="twitter:description" content="Where we are, and where we're going, in terms of Reticulum performance and scalability, and some new experimental features.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_perf.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h3>Experimental Performance Features</h3>
<p>In the latest commits to <a href="https://github.com/markqvist/reticulum">master</a> (version <code>0.9.3</code>) of RNS, there's a few interesting (and pretty experimental) features that I think some people might want to play around with already, even though it hasn't been released yet.</p>
<p>First of all, a long-standing <code>TODO</code> has been implemented in <strong>AutoInterface</strong>, which will now sub-interface each discovered Ethernet/WiFi peer for much better performance and path discovery. <strong>AutoInterface</strong> now also supports dynamic link MTU discovery. These updates improve performance significantly.</p>
<p>Most "experimentally", and perhaps most interestingly, RNS now includes an optional shim for on-demand transpilation of the entire RNS implementation to C, and then compiling that to machine-local object code at run-time. If requested, this happens dynamically at daemon initialisation via Cython (and only once, of course, if no locally compiled version exists already).</p>
<p>The on-demand compilation step, by itself, provides an instant performance increase of around 2x in the Reticulum transport core, cutting per-packet processing time approximately in half, due to the much decreased need for context switches between the Python VM and C-based backend. Notably, this is <strong><em>without</em></strong> any of the many potential optimisations added yet, such as static typing of variables in the transport core, object property slotting, logic vectorisation and so on.</p>
<p>These optimisations, together with link MTU discovery now pushes the Reticulum transport core packet processing above 1.4 gigabits per second on my (relatively modest) test hardware, while still running on <em>a single CPU core</em>.</p>
<h3>Faster Snake, Faster</h3>
<p>I've never really expanded much on how I envision the path to <em>truly</em> massive scalability for Reticulum before, and understandably most of the community has been focusing efforts in this regard on the tried-and-true approach of developing parallel implementations of Reticulum in compiled languages such as C, Rust or Go. That approach is something I very much support and value, and even a necessary one for wider availability and adoption, so please keep up the good work! But, it is not the area I will be focusing my own efforts on, and there's some interesting, but non-obvious reasons for that, so it's probably time to expand a bit on that.</p>
<p>One of the most critical components in the continued evolution of Reticulum right now, is keeping the reference implementation readable, understandable, accessible and auditable. Without those qualities present, creating alternative implementations - and systems on top of Reticulum - are just too tall an order to expect anyone to care about. At the same time, Reticulum targets very demanding requirements, both in terms of security, privacy and performance (both in the context of very fast links and <em>very</em> slow links). Actually resolving those requirements into a real, functional system is <em>bizarrely complex</em>, to say the least, and honestly I do occasionally wonder how I even got this far.</p>
<p>From the outside, it's understandably difficult to appreciate just how much design, testing, re-evaluation, validation and implementation work it has taken to get to the point we're at now. It's taken me ten years, and let's just say that it truly has been a <em>bizzarely complex</em> journey. For solving tasks like this, a high-level language like Python is an absolutely excellent tool, and had I started out in C (even though that is my personal "favourite language"), I don't think I'd have succeeded.</p>
<h3>Scaling, Massively</h3>
<p>Before discussing any further, I should clarify what <em>massive scalability</em> actually entails in regards to Reticulum. The current implementation is capable of handling throughputs in excess of 1 Gbps, which is definitely "good enough" for the foreseeable future. But down the line, and in the relatively near future, I think we need to start moving the target to transport capabilities of 100+ Gbps and network depths of millions (or even billions) of active endpoints.</p>
<p>There's a common misconception that Python is "slow", whatever is meant by that. From a more nuanced perspective, that assumption is incorrect. What <em>can</em> cause significant performance penalties in Python are the <em>context switches</em> between the Python byte-code VM and native machine code. But as I've already hinted at, those can be eliminated almost entirely by using the Python source code as a blueprint for deterministically generating machine-code, that run at native speeds. I'd estimate that simply implementing static typing, property slotting and locking the memory structures for various lookup tables will provide a further 30-50x increase in performance.</p>
<p>With the recent release of Python 3.13, we're also finally starting to be see the end of the notorious Global Interpreter Lock, allowing us true multi-core concurrency, and this along with the new Python JIT will speed up things even further.</p>
<p>But going beyond that, we're going to start needing to get a little <em>creative</em>. It's well-known that the TCP/IP stack is <em>fast</em>, but one of the primary reasons that this holds true in practical reality is a little less well-known.</p>
<p>On commercially available IP routers, be that consumer products or ISP-scale hardware, almost all of the packet processing <em>doesn't actually occur on the CPU</em>, but is hardware accelerated on custom ASICs, embedded in the router chipset. If you've ever tried bonding IP interfaces or inserting software based VPNs in your routing path on systems that provide no hardware acceleration for those operations, you will have seen your previous line-rates drop to significantly less impressive numbers.</p>
<p>There's not any real possibility of hardware vendors starting to design, fab and ship Reticulum-specific acceleration ASICs any time soon, so we can't rely on that approach. What we can rely on instead, is another type of general-purpose parallelisation solution, that has seen massive improvements in the recent years, and which is now more or less ubiquitous in all compute devices, the GPU. Even mobile chipsets and embedded SBCs include capable GPUs with quite ample memory and shader core counts.</p>
<p>By leveraging existing, general-purpose acceleration frameworks (such as OpenCL or Vulkan Compute), a truly general-purpose Reticulum packet-processing accelerator can be designed and deployed on <em>more or less any existing system</em>, essentially for free - at least in the sense that no new hardware has to be invented.</p>
<p>If active path tables and other transport-essential data structures are shipped off to GPU memory, and the internal states of the Reticulum transport core is made completely vectorisable, packet processing can truly be <em>massively</em> parallelised. The transport logic was already designed with such vectorisation in mind, but of course it will take some work to get there.</p>
<p>The beauty of this approach is that it will still work on any type of CPU as well, even if no acceleration hardware is present on the system. This allows for a single implementation that will dynamically adapt to whatever resources are available on the system, from a single-core SBC, to an accelerated core transport node capable of handling tens of millions of packets per second.</p>
<p>While all of this is immensely interesting, and something I'd love to sink myself into right now, realistically it's still something a ways off into the future, since there's plenty of other important work to do first. Still, I thought it would be good to share some of thoughts that form the basis of the current optimisation work, and where it is ultimately going.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,571 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>The End Is Nigh, For The Beta Days | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="The End Is Nigh, For The Beta Days">
<meta name="description" content="This post marks the beginning of the end for the beta phase of Reticulum, and describes the immediate future and priorities.">
<meta property="og:description" content="This post marks the beginning of the end for the beta phase of Reticulum, and describes the immediate future and priorities.">
<meta property="og:image" content="https://unsigned.io/images/ph_sl.webp">
<meta property="og:url" content="https://unsigned.io/articles/2025_05_09_The_End_Is_Nigh_For_The_Beta_Days.html">
<meta property="og:title" content="The End Is Nigh, For The Beta Days">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2025_05_09_The_End_Is_Nigh_For_The_Beta_Days.html">
<meta name="twitter:title" content="The End Is Nigh, For The Beta Days">
<meta name="twitter:description" content="This post marks the beginning of the end for the beta phase of Reticulum, and describes the immediate future and priorities.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_sl.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h3>One Year Over</h3>
<p>Today, I've released version <code>0.9.5</code> of Reticulum. This marks the beginning of the very final stretch for the beta phase of Reticulum. About a year ago, I wrote <a href="../articles/2024_05_16_Are_We_There_Yet.html">a post</a> talking about the status of Reticulum, the journey so far, how my work on Reticulum was funded, and my thoughts about the future of the project. If you haven't already read it, I encourage you to do so, since it provides necessary context for this post.</p>
<p>Back then, I also announced that the amount of resources I had allocated to developing Reticulum full-time had been exhausted, and that some sort of sustainable funding would need to be acquired if I were to continue to work full-time on Reticulum in the same manner I had done for the past four years.</p>
<p>That <em>did</em> initially increase the amount of donations a bit, but currently, the recurring donations total €96 per month, and I have received on average €320 per month in community donations for this past year, with most stemming from single donations. I appreciate all of this so much, and I am very grateful to each and everyone who has believed enough in this to contribute. Thank you so much!</p>
<center><img src="../images/ph_sl.webp" style="margin-top:12px; margin-bottom: 2px;"/></center>
<p>Realistically though, this is not a sustainable way to live, and the primary reason I was able to squeeze in another full year of work, improvements and fast-paced updates was:</p>
<p><strong>1)</strong> Almost inconceivable patience and support from my family and close friends who, for some reason, decided to bear with me for another year, and make sure I was able to carry out the work. I couldn't have done it without this.</p>
<p><strong>2)</strong> One single individual who came forward and covered most of my costs for this time. If you're reading this, thank you. It made all of the below possible, and I hope you find it valuable and worthwhile, in the context of what has been achieved.</p>
<p>The overall result is that version <code>1.0.0</code> of Reticulum is now closer than ever, and on the horizon for release this year, most likely in July. It's about time. Reticulum has been in beta for <em>four years</em>, and the project has benefited tremendously from this approach. But it already is (and for a long time has been) much more stable, functional and full-featured than other projects covering just parts of what Reticulum provides, and it even does it in much more general-purpose and robust ways.</p>
<p>To complete the final stretch though, I will have to be realistic about a few things. But before going into details on those, let's have a look at what one year of work on Reticulum has actually yielded.</p>
<h3>One Year Of Progress</h3>
<p>In the previous status post, I said that I would focus more tightly on the core parts of the project, which is what I really excel at, and that is what I have tried to do. I think the results speak for themselves.</p>
<p>I won't go into a free-form description of every single thing that has been accomplished, since that would make this a very long post, but just a few of the highlights include:</p>
<ul>
<li>Massive performance and memory optimizations</li>
<li>Much faster I/O backend</li>
<li>Significantly expanded hardware support</li>
<li>Complete interface modularity</li>
<li>Migrating to AES-256 encryption for all communication</li>
<li>A new real-time voice protocol for Reticulum</li>
<li>Much higher capacity for LXMF propagation networks</li>
<li>Significant improvements to overall usability and utilities</li>
<li>A long list of bugs fixed, and real-world usability improvements</li>
</ul>
<p>I want to point out, that much of this stuff is not just "writing the code". An equal amount of time, if not more, goes into the design and especially testing and verification of everything implemented. A testament to that is how stable and reliable Reticulum already is.</p>
<p>To get an idea of the scope of work carried out in this past year, please expand this aggregated changelog of work, and just give it a quick glance:</p>
<details>
<summary>Changelog</summary>
<ul><li>RNS</li>
<ul>
<li>Significantly improved memory utilisation, thread count and performance on nodes with many interfaces or clients</li>
<li>Switched local instance communication to run over abstract domain sockets on Linux and Android</li>
<li>Switched instance IPC to run over abstract domain sockets on Linux and Android</li>
<li>Added support for AES-256 as the default link and packet encryption mode</li>
<li>Added kernel event based I/O backend on Linux and Android</li>
<li>Added fast BackboneInterface type</li>
<li>Added support for XIAO-ESP32S3 to rnodeconf</li>
<li>Added interactive shell option to rnsd</li>
<li>Added API option to search for identity by identity hash</li>
<li>Added option to run TCP and Backbone interfaces in AP mode</li>
<li>Added dynamic link keepalive and timeout calculation</li>
<li>Added ability to efficiently transfer files as responses in the Request API</li>
<li>Added ability to include metadata on Resource transfers</li>
<li>Added option to specify Resource auto-compression limits</li>
<li>Added option to specify Request response auto-compression limits</li>
<li>Added allow overwrite option to rncp</li>
<li>Added support for AES-256 mode to links and packets</li>
<li>Added dynamic link mode support</li>
<li>Added get_mode() method to link API</li>
<li>Added instance_name option and description to default config file</li>
<li>Improved RNodeMultiInterface host communications specification</li>
<li>Improved rncp statistics output</li>
<li>Improved link and reverse-table culling</li>
<li>Improved hardware MTU auto-configuration</li>
<li>Improved handling of file transfers using the Resource API</li>
<li>Improved Resource transfer memory consumption</li>
<li>Improved memory consumption of applications connected to a shared instance</li>
<li>Improved ratchet persist reliability if Reticulum is force killed while persisting ratchets</li>
<li>Improved rncp memory consumption for large files</li>
<li>Fixed an occasional I/O thread hang on instance shutdown, that would result in an error printed to the console</li>
<li>Fixed announce handlers not triggering after shared instance disappearance</li>
<li>Fixed various minor interface logging inconsistencies</li>
<li>Fixed various minor interface checking inconsistencies</li>
<li>Fixed interface string representation for some interfaces</li>
<li>Fixed instance name config option being overwritten if option was not last in section</li>
<li>Fixed unhandled potential exception on fast-flapping BackboneInterface connections</li>
<li>Updated internal configobj implementation</li>
<li>Refactored various parts of the transport core code</li>
<li>Swicthed to using internal netinfo implementation instead of including full ifaddr library</li>
<li>Cleaned out unneeded dependencies</li>
<li>Enabled link MTU discovery by default</li>
<li>Added on-demand object code compilation and loader shim</li>
<li>Added link API methods</li>
<li>Added child interface spawning for AutoInterface</li>
<li>Fixed corrupt ratchet files not being removed on maintenance cleaning</li>
<li>Fixed rnid not waiting for announce timebase tick before announcing</li>
<li>Fixed missing RX/TX bytes statistics assignment</li>
<li>Fixed potential daemon thread IO buffer deadlock on externally mediated shutdown signal</li>
<li>Fixed missing check for path announce emission timestamp in lower hop-count announce processing</li>
<li>Added resource reject signalling</li>
<li>Added error reporting on configured radio parameter mismatch on Android</li>
<li>Improved thread configuration for transport core threads</li>
<li>Updated examples</li>
<li>Added MTU autoconfiguration on interfaces that support higher MTUs</li>
<li>Added link MTU autodiscovery and path clamping</li>
<li>Added dynamic SDU calculations based on link MTU to Resource, Channel and Buffer</li>
<li>Added resource EIFR continuity to split resource handling</li>
<li>Added interference status to RNodeInterface</li>
<li>Fixed a display bug in rnstatus</li>
<li>Added live traffic stats to rnstatus</li>
<li>Added T3S3 support to rnodeconf</li>
<li>Added Heltec T114 support to rnodeconf</li>
<li>Added LilyGO T-Echo support to rnodeconf</li>
<li>Added option to print device configuration to rnodeconf</li>
<li>Improved CPU utilisation and memory consumption</li>
<li>Improved rnsd restart time on systems with many interfaces</li>
<li>Improved rncp status output</li>
<li>Improved packet filter performance</li>
<li>Improved interface detachment handling</li>
<li>Improved resource transfer timing and performance</li>
<li>Improved Transport core efficiency</li>
<li>Improved reliability of ratchet reloads if I/O conflicts occur</li>
<li>Improved logging</li>
<li>Improved built-in profiler</li>
<li>Fixed a potential deadlock in logging</li>
<li>Fixed time formatters not handling negative times</li>
<li>Updated example code</li>
<li>Added noise floor output to rnstatus for supported interfaces</li>
<li>Added channel noise floor and CSMA parameter reporting to RNodeInterface</li>
<li>Added ability to set display rotation in rnodeconf</li>
<li>Added ability to configure interference avoidance to rnodeconf</li>
<li>Fixed missing console image install on Heltec V3 in rnodeconf</li>
<li>Allow announce handlers to receive announce packet hash</li>
<li>Fix packet RSSI/SNR/Q cache not being available on standalone instances</li>
<li>Added support for packaging RNS to OpenWRT</li>
<li>Added ability to run rnstatus as application-local imported module</li>
<li>Added ability to reflect RNS log output to app-internal log handler callback</li>
<li>Added display read functionality to RNodeInterface</li>
<li>Fixed a regression in RNodeMultiInterface caused by earlier refactoring</li>
<li>Imrpoved documentation</li>
<li>Added ability to load and configure custom, user-supplied interfaces</li>
<li>Added IPv6 support to TCPClientInterface and TCPServerInterface</li>
<li>Added an init option to the API for requiring an existing shared instance</li>
<li>Changed rnstatus behaviour to only show status if Reticulum is already running</li>
<li>Fixed KISSInterface beacon length for compatibility with software modems</li>
<li>Fixed interface client count sometimes reporting incorrect values on TCP and I2P interfaces</li>
<li>Refactored and improved interface initialisation and configuration handling</li>
<li>Refactored interface code to be more consistent</li>
<li>Refactored various deprecated references and names</li>
<li>Updated documentation and manual</li>
<li>Fixed missing close of file handles</li>
<li>Fixed invalid values returned from get_snr() and get_q() physical layer stats API functions</li>
<li>Improved RNode BLE reconnection realiability</li>
<li>Added RNode battery state to rnstatus output</li>
<li>Fixed resource transfer hanging for a long time over slow links if proof packet is lost</li>
<li>Fixed missing import on Android</li>
<li>Fixed a bug in resource transfer progress calculations</li>
<li>Added physical layer transfer rate output option to rncp</li>
<li>Added save directory option to rncp</li>
<li>Improved path handling for the fetch-jail option of of rncp</li>
<li>Added error detection for modem communication timeouts on connected RNode devices</li>
<li>Added support for T-Beam Supreme devices to rnodeconf</li>
<li>Added support for T3S3 devices to rnodeconf</li>
<li>Added support for T-Deck devices to rnodeconf</li>
<li>Added support for new hardware error codes from connected RNodes</li>
<li>Added the ability to control the display on nRF52-based RNodes</li>
<li>Improved resource transfers over very slow links, by adding more suitable MAX_WINDOW cap if link speed is continously below threshold.</li>
<li>Improved rnodeconf flashing so manual resets for some devices are no longer required</li>
<li>Added edge case handling for receiving a link proof after the link had timed out and been closed, but before it having been purged from active links table</li>
<li>Updated supported hardware section of the manual with new boards</li>
<li>Tuned path request timing for roaming instances</li>
<li>Fixed a bug that caused RNS to fail to initialise in Termux on Android</li>
<li>Fixed a bug in RNodeInterface firmware version comparison</li>
<li>Fixed a bug in the serial framing of RNodeMultiInterface</li>
<li>Fixed a bug in sub-interface spawning of RNodeMultiInterface</li>
<li>Added Bluetooth Low Energy support to RNodeInterface</li>
<li>Added RNode battery information to rnstatus output</li>
<li>Added display blanking configuration to rnodeconf</li>
<li>Added NeoPixel intensity configuration to rnodeconf</li>
<li>Added additional information to interface statistics</li>
<li>Updated documentation</li>
<li>Added handling of a transport edge-case</li>
<li>Added interface prioritisation according to reported bitrate</li>
<li>Added support for openCom XL to rnodeconf</li>
<li>Added performance profiler to built-in debugging tools</li>
<li>Tuned link traffic timeouts</li>
<li>Fixed a module import error in AX25KissInterface</li>
<li>Fixed a missing exception on erroneous destination initialisation</li>
<li>Added key ratchet rotation and signalling</li>
<li>Added ratchet API to documentation</li>
<li>Added initial support for flashing T-Echo devices to rnodeconf</li>
<li>Added remote management config options to example config</li>
<li>Added automtic integration tests to source repository</li>
<li>Fixed a regression that caused RNS not to work on Python versions lower than 3.10</li>
<li>Fixed missing establishment_rate property init on Link objects</li>
<li>Added support for RNode Multi interfaces</li>
<li>Added initial support for remote management of Reticulum instances</li>
<li>Improved resource transfer performance for large resources</li>
<li>Improved path rediscovery in topologies with roaming transport nodes</li>
<li>Fixed incorrect TX power limit on Android RNode interfaces</li>
<li>Added ability to fetch remote files to rncp</li>
<li>Added fetch request jail option to rncp</li>
<li>Improved rncp status display output</li>
<li>Added link table statistics to rnstatus</li>
<li>Fixed rnstatus JSON output bug when IFAC was enabled on an interface</li>
<li>Added remote instance interface status to rnstatus</li>
<li>Added ability to query path- and rate-tables on remote instances with rnpath</li>
<li>Added JSON output option to rnpath utility</li>
<li>Added max hops filter to rnpath path-table out</li>
<li>Added link age getter to API</li>
<li>Added request concluded status to API</li>
<li>Fixed invalid resource progress reported in some cases</li>
<li>Fixed rnodeconf failure to set firmware hash for NRF52 boards on macOS</li>
<li>Fixed broken --rom command line option in rnodeconf</li>
<li>Fixed various typos in documentation</li>
<li>Updated documentation with new API functions and features</li>
<li>Added support for AutoInterface on Windows</li>
<li>Added support for recursive path resolution for clients on roaming-mode interfaces</li>
<li>Added RAK4631 support to rnodeconf</li>
<li>Added LilyGO T3S3 support to rnodeconf</li>
<li>Added ability to get target and calculated hashes via rnodeconf</li>
<li>Fixed DTR timing making flashing fail on Windows in rnodeconf</li>
<li>Fixed various output and menu bugs in rnodeconf</li>
<li>Added support for flashing and autoinstalling Heltec V3 boards to rnodeconf</li>
<li>Added custom EEPROM bootstrapping capabilities to rnodeconf</li>
<li>Added ability to load identities from file to Echo and Link examples</li>
<li>Added ability to specify multicast address type in AutoInterface configuration</li>
<li>Added link getter to resource advertisement class</li>
<li>Improved path response logic and timing</li>
<li>Improved path request timing</li>
<li>Fixed a bug in Link Request proof delivery on unknown hop count paths</li>
<li>Fixed broken link packet routing in topologies where transport packets leak to non-intended instances in the link chain</li>
<li>Fixed typos in documentation</li>
</ul>
<li>LXMF</li>
<ul>
<li>Improved memory consumption for propagation nodes</li>
<li>Improved propagation node sync efficiency by sorting peers according to STR</li>
<li>Improved handling of message queues for peers with low transfer limits</li>
<li>Redesigned peer rotation to be much faster and more responsive to real-time network conditions</li>
<li>Added ability to cancel outbound messages</li>
<li>Added message rejection signalling if message exceeds transfer limit</li>
<li>Added sync transfer rate to propagation node peer stats</li>
<li>Added handling of corrupted transient ID cache</li>
<li>Added ability to configure static peers</li>
<li>Added ability to specify maximum number of peers</li>
<li>Added lxmd status query API function</li>
<li>Fixed a potential division by zero bug</li>
<li>Added options to the default configuration file</li>
<li>Added message ingest API option</li>
<li>Improved duplicate message detection over longer timeframes</li>
<li>Added propagation node announce data validation to announce handler</li>
<li>Fixed missing byteorder argument on stamp value calculation</li>
<li>Fixed incorrect progress value on path waiting for outbound messages</li>
<li>Fixed a bug in inbound ticket cleaning</li>
<li>Fixed a bug that could cause propagation node peer destinations to be created before identity was resolved</li>
<li>Fixed a bug that could cause existing propagation node links to be torn down if the propagation node address was updated with the same address</li>
<li>Improved opportunistic delivery performance</li>
<li>Added path rediscovery during opportunistic delivery if path fails</li>
<li>Added backchannel delivery over already established links</li>
<li>Improved opportunistic delivery logic and performance</li>
<li>Improved logging</li>
<li>Fixed a bug in the stamp cost extractor function</li>
<li>Fixed a bug that would prevent running multiple LXMRouter instances within the same program.</li>
<li>Enabled Reticulum key ratchets for LXMF</li>
<li>Added stamp generation, validation and automatic signalling</li>
<li>Added delivery ticket functionality, for allowing trusted senders to bypass stamp requirements</li>
<li>Fixed a bug in opportunistic delivery queue processing</li>
<li>Updated LXMF fields</li>
<li>Updated field specification</li>
<li>Added fields custom data types, as well as for development, testing and debugging</li>
<li>Added audio mode specifications for audio fields</li>
<li>Fixed a bug that sometimes caused delivery proofs to be sent too late</li>
</ul>
<li>LXST</li>
<ul>
<li>Designed and implemented Lightweight Extensible Signals Transport, a secure general-purpose, real-time audio and signals transport protocol for Reticulum, allowing developers to easily create secure telephony, audio and voice communications systems</li>
</ul>
<li>RNode Firmware</li>
<ul>
<li>Added support for SeeedStudio XIAO-ESP32S3</li>
<li>Added support for Heltec T114</li>
<li>Added support for LilyGO T-Echo</li>
<li>Added support for Heltec T114</li>
<li>Added support for LilyGO T3S3 SX1280 with PA</li>
<li>Added support for Heltec32 V3 boards</li>
<li>Added support for LilyGO T3 boards with TCXO</li>
<li>Added support for T-Beam Supreme devices</li>
<li>Added support for T3S3 devices with SX127x and SX126x modems</li>
<li>Added support for T-Deck devices</li>
<li>Added battery status reporting over BLE</li>
<li>Added battery monitoring on T3S3</li>
<li>Added ability to configure display rotation</li>
<li>Added ability to configure interference avoidance</li>
<li>Added noise-floor monitoring and reporting to host</li>
<li>Added ability to specify per-board transceiver OCP limit</li>
<li>Added support for flashing T3S3 boards</li>
<li>Improved CSMA perfomance and packet handling</li>
<li>Improved BLE pairing on ESP32 boards</li>
<li>Improved BLE pairing on nRF boards</li>
<li>Improved display handling on Heltec T114</li>
<li>Added signalling of detected interference to the host</li>
<li>Implemented a fix for an intermittent hardware bug in SX126x and SX128x transceiver chips that caused interference avoidance and RSSI detection to hang</li>
<li>Added "Missing Config" graphic instead of "Hardware Failure"</li>
<li>Fixed single-byte configuration changes not being saved on nRF-based boards</li>
<li>Reworked preamble and slot timing calculations</li>
<li>Improved BLE reliability on RAK4631</li>
<li>Fixed a firmware provisioning bug on RAK4631</li>
<li>Improves BLE on RAK4631</li>
<li>Adds graceful BLE disconnect on device sleep</li>
<li>Fixes intermittent packet corruption on RAK4631</li>
<li>Fixes incorrect preamble calculation on SX1280</li>
<li>Improves CSMA parameters and P-curve</li>
<li>Updated console image to include latest packages</li>
<li>Fixed display sleep on T3S3</li>
<li>Improved BLE pairing</li>
<li>Added RAK4631 firmware to build artifacts</li>
<li>Added display support on RAK4631 devices</li>
<li>Added indication of outgoing packets to waterfall display</li>
<li>Added user button input handling to all devices with a built-in user button</li>
<li>Added free memory monitoring and indication to connected host device on low memory</li>
<li>Improved inbound packet handling on ESP32 and nRF52 devices, fixing a potential packet corruption bug</li>
<li>Improved flashing procedure for devices with CDC serial drivers, so manual resets and bootloader modes are no longer necessary to flash and update</li>
<li>Added support for Bluetooth Low Energy connections on supported devices</li>
<li>Added input button actions for boards with a built-in button.</li>
<li>Added battery status and bootstrap console support to Heltec V3 boards</li>
<li>Added ability to configure NeoPixel intensity from rnodeconf</li>
<li>Added ability to configure display blanking timeout from rnodeconf</li>
<li>Updated makefile to use specific version of ESP-IDF</li>
<li>Improved battery calculations on devices without dedicated PMU</li>
<li>Fixed display intensity configuration regression</li>
<li>Fixed ESP32 bluetooth RX and TX buffers</li>
<li>Added deep sleep support on T3S3</li>
<li>Various quality updates for nRF / RAK4631</li>
<li>Fixed a bug with antenna switch utilisation on RAK4631</li>
<li>Updated console image to include latest packages</li>
<li>Added button input and deep sleep for supported boards</li>
<li>Fixed TRX switch pin init for SX1280 chips</li>
<li>Use hardware RNG for CSMA r-value seed on ESP32</li>
</ul>
<li>Sideband</li>
<ul>
<li>Added the ability to make and receive LXST voice calls</li>
<li>Added basic voice call UI</li>
<li>Added option to configure audio devices for LXST voice calls</li>
<li>Added option to block non-trusted callers</li>
<li>Added support for sharing any file type as attachment on Android</li>
<li>Added link stats to object details</li>
<li>Added a BME280 telemetry plugin example</li>
<li>Added button on Android to quickly go to full RNS interface status</li>
<li>Improved map initialisation time</li>
<li>Fixed audio messages sometimes inadverdently playing on swipe back on Android</li>
<li>Fixed an intermittent error on telemetry plugin initialisation</li>
<li>Added ability to export telemetry to MQTT brokers</li>
<li>Added MQTT renderers for all telemetry types</li>
<li>Added LXMF Propagation Node statistics sensor type to Telemeter</li>
<li>Added RNS Transport statistics sensor type to Telemeter</li>
<li>Added Connection Map sensor type to Telemeter</li>
<li>Added periodic cleaning of old telemetry data from the database</li>
<li>Improved the overall performance and reliability of the telemetry engine</li>
<li>Improved markdown rendering</li>
<li>Updated plugin examples</li>
<li>Fixed a bug that would cause the announce stream to stop working due to missing signal icon specification</li>
<li>Added ability to cancel outgoing messages</li>
<li>Added ability to render messages formatted with markdown</li>
<li>Added ability to compose messages with markdown</li>
<li>Added ability to query peer telemetry from the map by right-clicking on the peer</li>
<li>Added auto-switching of message mode on attachment</li>
<li>Added indication if receiver rejects message</li>
<li>Added support for SX1280 bandwidth options to RNode configuration</li>
<li>Added ability to launch RNode flasher directly from utilities</li>
<li>Added error message display if the configured RNode parameters were not validated by the radio</li>
<li>Improved BBCode markup rendering</li>
<li>Improved UI feedback when adding attachments</li>
<li>Improved notification formatting</li>
<li>Updated RNode flasher to latest version</li>
<li>Fixed formatting of repository server URLs when device has multiple IP addresses</li>
<li>Fixed a stray newline character in repo URLs</li>
<li>Fixed a bug that caused invalid SSL certificate generation on Android</li>
<li>Fixed a bug that caused invalid GPS data struct packing in some situations</li>
<li>Fixed a bug in propagation node detection in daemon mode</li>
<li>Fixed a bug that caused attachment names not to display while sending</li>
<li>Added Liam Cottle's RNode flasher to the internal repository</li>
<li>Updated message color scheme for better readability and theme consistency</li>
<li>Added option to switch back to classic message colors</li>
<li>Updated theme and user interface defaults for new installations</li>
<li>Added signal stats to the announce stream (if available from interface)</li>
<li>Added ability to render rich markup in messages</li>
<li>Added BBCode syntax for formatting</li>
<li>Ability to render simple graphics and layouts with monospaced and terminal fonts</li>
<li>Ability to use all glyphs and icons included in Nerd Fonts</li>
<li>Added per-object live-tracking mode for telemetry-enabled peers</li>
<li>Added ability to add any number of interfaces via the Advanced RNS Configuration option</li>
<li>Added Utilities section</li>
<li>Added full rnstatus output to utilities</li>
<li>Added a log viewer to utilities</li>
<li>Added RNode flasher to utilities</li>
<li>Added advanced RNS configuration to utilities</li>
<li>Added support for the repository server on desktop operating systems</li>
<li>Added RNode firmwares to the repository content updater</li>
<li>Added serving the repository over HTTPS, with a self-signed certificate</li>
<li>Fixed desktop entry icon reference for Raspberry Pi OS</li>
<li>Added ability to add message attachments from sharing intent on Android</li>
<li>Added ability to add message attachments with drag-and-drop on desktop</li>
<li>Added user interface scaling option</li>
<li>Various minor UI tweaks and improvements</li>
<li>Updated RNS and LXMF to latest versions</li>
<li>Fixed a bug causing a completely black user interface after resume on Android</li>
<li>Fixed incorrect stamp cost display in announce stream</li>
<li>Fixed incorrect GPS speed being reported to the telemetry engine</li>
<li>Fixed stamp generation status not being displayed correctly in some cases</li>
<li>Added support for connecting to RNodes over BLE</li>
<li>Added RNode battery info to connectivity status dialog</li>
<li>Fixed a bug in service/frontend communication on Android</li>
<li>Fixed invalid automatic telemetry request scheduling timebase</li>
<li>Added option to use high-quality voice for PTT</li>
<li>Improved notification handling</li>
<li>Tapping notifications on Android now goes directly to the relevant conversation</li>
<li>Allow predictive text input on Android by default</li>
<li>Added option to block predictive text input</li>
<li>Automatically ask user for background service permission on Android</li>
<li>Fixed notifications not appearing on some Android versions</li>
<li>Fixed file and image attachments not working on Android 10</li>
<li>Added automatic path rediscovery during opportunistic delivery if a path fails</li>
<li>Fixed notifications not being displayed on some devices</li>
<li>Significantly improved message delivery performance and efficiency</li>
<li>Send messages opportunistically if destination ratchets are available</li>
<li>Added delivery method icons to message view</li>
<li>Improved announce details display</li>
<li>Improved feedback when closing app on desktop</li>
<li>Various UI improvements</li>
<li>Tuned announce intervals</li>
<li>Dispatch messages via background service on Android</li>
<li>Fixed a bug that caused undecodable messages to fail conversation loading</li>
<li>Added configuration option for ignoring messages with invalid stamps</li>
<li>Added outbound stamp cost handling and generation</li>
<li>Added inbound stamp cost settings to preferences</li>
<li>Added message details dialog</li>
<li>Added message encryption information to message details</li>
<li>Added ratchet information to object details</li>
<li>Added stamp cost information to object details</li>
<li>Added delivery ticket information to object details</li>
<li>Sideband will now automatically include delivery tickets to trusted peers</li>
<li>Fixed dialog sizing on mobile devices</li>
<li>Fixed a bug that caused attempted notification delivery when running in daemon mode</li>
<li>Fixed a bug that caused PTT button not to be hidden on conversations with PTT disabled</li>
<li>Fixed a bug in periodic random announce interval calculation</li>
<li>Added outbound stamp cost handling and generation</li>
<li>Added inbound stamp cost settings to preferences</li>
<li>Added message details dialog</li>
<li>Added message encryption information to message details</li>
<li>Added ratchet information to object details</li>
<li>Added stamp cost information to object details</li>
<li>Added delivery ticket information to object details</li>
<li>Sideband will now automatically include delivery tickets to trusted peers</li>
<li>Fixed dialog sizing on mobile devices</li>
<li>Fixed a bug that caused attempted notification delivery when running in daemon mode</li>
<li>Fixed a bug that caused PTT button not to be hidden on conversations with PTT disabled</li>
<li>Fixed a bug in periodic random announce interval calculation</li>
<li>Added inbound PTT audio queue</li>
<li>Added PTT playback block when recording a message</li>
<li>Added PTT activation by space key</li>
<li>Added battery temperature to telemetry</li>
<li>Improved database transaction concurrency handling on Android</li>
<li>Added PTT mode for audio messages</li>
<li>Added command-line options to import and export Sideband settings for changing configuration on daemon-mode Sideband instances</li>
<li>Improved telemetry processing and sending</li>
<li>Improved notification handling</li>
<li>Fixed a bug that would sometimes cause scheduled telemetry to be delayed</li>
<li>Fixed Sideband not detecting RAK4631-based boards over USB</li>
<li>Fixed Sideband not detecting LilyGO T3S3 boards over USB</li>
<li>Added Linux desktop integration regardless of installation source</li>
<li>Added install instructions for Raspberry Pi</li>
<li>Updated installation instructions for some platforms</li>
<li>Updated dependencies to mitigate numpy/codec2 incompatibilities</li>
<li>Fixed error display and audio player on missing codec2 library</li>
<li>Fixed various minor audio bugs</li>
<li>Fixed an invalid import bug</li>
<li>Fixed invalid category in desktop entry</li>
<li>Added Objects & Devices view</li>
<li>Added audio messaging in Codec2 and Opus encoding (currently supported on Linux and Android 10 and above)</li>
<li>Improved emoji support</li>
<li>Added keyboard shortcuts and documented them in the guide</li>
<li>Added CPU, storage and RAM sensors to telemetry system</li>
<li>Added tank sensor type to telemetry system</li>
<li>Added fuel level sensor type to telemetry system</li>
<li>Added proximity, gravity, magnetics and angular velocity to telemetry system</li>
<li>Added custom sensors to telemetry system</li>
<li>Updated telemetry plugin examples</li>
<li>Added audio processing subsystem on supported platforms</li>
<li>Improved system and navigation bar handling on Android</li>
<li>Improved functionality of cross-platform device API handling</li>
<li>Improved message display on attachment-only messages</li>
<li>Improved Preferences screen layout</li>
<li>Updated build system to target newer Android SDK</li>
<li>Fixed a bug that could cause the Send button to not work</li>
<li>Fixed LXMF delivery limits not getting applied until after app restart</li>
<li>Fixed a bug that would allow empty commands to be sent</li>
<li>Added desktop and application launcher integration on Linux</li>
<li>Added ability to focus message input field by pressing tab</li>
<li>Added network stats to object details</li>
<li>Improved example plugins</li>
<li>Linux GPSd plugin now retains location even when some fields are occassionally missing</li>
<li>Fixed bugs that caused routing and path request issues over shared radio mediums</li>
</ul>
</ul>
</details>
<h3>A Realistic Path Forward</h3>
<p>There are technical features, that I very much personally wished to be part of the first production release of Reticulum, such as full network-wide multicast support, anonymous destination proxies and a comprehensive and developer-oriented application framework full of examples and basic projects to build your own protocols and applications on. The manual and documentation, while already quite comprehensive, could also benefit from updates and additions in many sections.</p>
<p>All of these are nice and valuable to have, but to be honest, a few of them were mostly included on my wish-list because they are very cool and incredibly interesting to experiment with from a networking perspective. But in terms of actual utility value, right now, they are not very important. Having a stable, functional and complete reference release of Reticulum is a lot more pressing, even though it's hard to resist the constant temptation of adding more advanced features. As such, I think this is the most sensible way forward.</p>
<p>Reticulum <code>1.0.0</code> will release with the general structure, feature set and API of version <code>0.9.6</code> (which will be the release migrating completely to AES-256 by default). That will be the last release before <code>1.0.0</code> to add any changes to general functionality, the wire format or the API. The core functionality, routing, API and security architecture is now in-place, fully implemented and very well tested in real-world usage. Any potential subsequent releases until <code>1.0.0</code> will solely be maintenance and bugfix releases.</p>
<p>Once the <code>1.0.0</code> release has happened, additional advanced features can be worked on, at a more considered pace. Realistically, these things will take significant time and resources to implement and test sufficiently, and the project should not be held up in waiting for that, since they do not offer a lot of important value right now.</p>
<p>In this context, I'd like to address a misconception that I've seen pop up a few times, namely that LXMF group messaging support will require native multicast to be implemented in Reticulum. This is not the case, and the current working design I have for LXMF group messaging functionality does not rely on multicast support, even though it will definitely benefit from it, once it is available.</p>
<h3>Potential Knows No Limits, Resources Are Always Finite</h3>
<p>Ideas are a dime a dozen, while keeping the right ones, and throwing out the rest, is an uncertain art. From there, the rest is "just" the grind to actually <em>get things done</em>, and persist until they work reliably. The idea behind Reticulum - <em>a truly distributed, secure and universal communications layer</em> - is not new. It has existed in some shape or form at least since the very early days of the current Internet, and several exploratory efforts have attempted to capture this foundational idea into workable form.</p>
<p>Of course, Reticulum itself is also such an <em>attempt</em> at realizing a deeper idea. I don't know if it will succeed, or fall short in some unexpected way. But at least it knows what foundational substance it is aiming for. For me personally, this idea started taking residence in my mind around 2011, developed into the first early prototypes and explorations in 2013 and 2014, and in 2016 finally saw the beginning of an earnest and dedicated implementation I could believe in. Then, I held my nose and jumped.</p>
<p>From the beginning, Reticulum has been a long-term project, and still very much is. In many ways, what happens in the next year or two is not as important as what happens in the next ten or twenty, and that is the timescales I usually try to think in when making decisions about it.</p>
<p>For good reasons, it's pretty hard to understand, from first glance, just how much work, and how much of my life I personally put into making Reticulum a reality, and for it to not just remain an idea in a drawer. For context, here's a breakdown of additions made to the Reticulum repository, by contributor:</p>
<center><img src="../images/gs.png" width="66%" style="margin-top:12px; margin-bottom: 2px;"/></center>
<p>This is only the core Reticulum reference implementation repository, and does not include any of the auxiliary projects, protocols or clients that I have been the primary implementer of. Of all additions to the code, I committed <strong>97.9%</strong>. The second and third most active contributors come in at <strong>0.87%</strong> and <strong>0.75%</strong>, respectively. The remaining <strong>0.48%</strong> are accounted for by 31 other contributors.</p>
<p>I'm definitely not displaying this to make anyone's contributions seem small, <strong>because they are not</strong>. Everything has been important, and very much so. I'm trying to illustrate that this was a project that required almost <em>fourteen years</em> of deliberation and constant engagement in some form to realize, and that I personally took on the brunt of that work, risking more or less everything and going it alone, with the very real possibility that it might just be a complete flop. It still <em>might</em> of course, although I don't really think so anymore.</p>
<p>Fourteen years of engagement with any kind of project will take its toll on anyone. Especially so, when a substantial part of that required sacrificing a lot of important things to make it happen, living under uncertain conditions, and sometimes putting myself under much higher loads than was kind. To put it simply, I'm exhausted, and I need to recover. That will mean cutting away the things that are most taxing for me, and keeping only the things that are most important.</p>
<p>Before going into what that means, I'll just need to get the following out of the way. If it doesn't apply to you, please disregard, but some of you guys are really not very good at respecting the rather clear request to <em>not</em> email, message or call me privately with technical questions, support or help requests about Reticulum. As I've said before, you will not receive an answer, as there is literally no point in doing so.</p>
<p>Any questions can be much better answered on the various publicly accessible channels, where other people will also have the opportunity to benefit from the answers in the future (and people won't have to answer the same questions again and again). I'm not saying this to be mean or annoying, but simply because anything else is counter-productive to <em>everyone</em>.</p>
<p>There's some great and very knowledgeable people in the Reticulum community, who are incredibly helpful and well-informed about how everything works, and the service they have performed here is invaluable. To those people: You know who you are, and holy crap, you've saved my sanity more times than I can count. So, if you're new here: Use these amazing people, and help each other. And <em>please</em>: Treat everyone kindly and with respect, because everyone helping you is doing this out of their own time and good hearts.</p>
<h3>A Line In The Sand</h3>
<p>Reading this, some might be inclined to think I won't be working much on Reticulum for the foreseeable future. That would be an incorrect assumption. I don't think I <em>can</em> stop working on it. But I will do this in my own time, at my own pace, according to the right way. As I write this, I can hear the thunder rolling in the distance, out in the mountains. I miss that. I miss being there with my family, and it's been way too long now.</p>
<p>There are people in my live that have given me so much, and waited so patiently for me. I don't want to keep them waiting any longer. One thing I've learned from this whole mad and exciting adventure, and already wrote a bit about in <a href="../articles/2024_05_16_Are_We_There_Yet.html">the previous post</a>, is that there's things I excel at, and things I don't.</p>
<p>Participating actively in a large online community, and interacting with a lot of different people over the Internet all the time is one of the things that drain me. I've tried, and accepted defeat. I'm simply <a href="../articles/2024_05_16_Are_We_There_Yet.html#a-fork-in-the-road">not wired for it</a>, and there is no changing that.</p>
<p>So, that kind of interaction is the first thing that will have to go, unfortunately. It's often been fun, but it's too much. For now, expect that I will not interact very much, if at all with the wider community. I still like you, I just need some peace in my head. With time, I think this will allow me to recover to a point where I can keep track of things from the sideline, and collect all kinds of questions and information requirements from the community into more generalized, long-form responses, documentation updates and code examples that will be beneficial to everyone. But don't expect that to happen in the near future at all, it won't. I'm out. I'm off on the zip-lines, baby.</p>
<p>Likewise, anything that is not related to the final stretch of getting Reticulum <code>1.0.0</code> complete and released will simply be put on hold for now, until I am fully ready to dedicate myself to it, and have some kind of financial means to dedicate to the work.</p>
<p>I've deliberated quite a bit about whether I should say this, since I'd hate being seen as seeking pity. But ultimately, it feels right to just be open about it, since it's also a large part of what I've dealt with for the last years. I live with a physical condition that causes me progressively worsening pain in more or less half of my body. Quite ironically, but unsurprisingly, sitting in front of a computer and working for 12 hours straight makes it a lot worse. I've stretched this <em>way</em> further than I should have, but all in all, it was probably worth it. We ain't come this far just to give up on the finish line. But I won't stretch it any further than this. It's time to heal a bit now.</p>
<p>When <code>1.0.0</code> is out, I am going to take a long break from everything. I'll go bury myself in sand and hug trees for a year straight or something. Eat cake in a bathtub. Slice all my bread with a katana. Dress up as Salvador Dalí and sing Inuit folk songs. That sorta thing. That should also provide some time to potentially collect donations for meaningful periods of focused work. Let's see what happens.</p>
<p>Hopefully, I'll find myself back in a place, sooner rather than later, where my reality looks more like it did a few years ago. Not being completely exhausted and in constant pain, but more like this:</p>
<p><img alt="Image" src="../images/psl0846.webp" /></p>
<center>That's the kind of place I need to find again, and if I do, I'll come back better than before. As Jung said:</center>
<center>*"What you deny submits you, what you accept transforms you."*</center>
<p><br/><br/></p>
<center>Just remember: *"So long"* isn't a goodbye. But just *how* long before we'll meet again, I don't know. Till' then:</center>
<center>Take good care of everything, and especially each other.<br/><br/>♥️</center>
<p><br/><br/>
<em>PS: You've got this. Almost everything is ready now. It may not be perfect, it never will be, but it's more than good enough to build on. <b>Don't wait for permission</b>. Go build something - <b>now</b> - that helps people, something that grants a bit more freedom to someone, something that lets people communicate and associate freely without being manipulated, monitored or turned into assets by corrupt corporations and governments:</em></p>
<p><em>Something that creates a new place to stand, and to plant ideas and real human exchanges.</em></p>
<p><em>Reticulum is Unstoppable Networks For The People. That means <b>the people</b> need to build those networks and the applications running on them. That's not my job, <b>it's yours</b>. Don't wait for a corporation or someone else to do it for you! Don't wait for someone to write a story about it! Don't just stare into space and imagine it! <b>Do it</b>. Forget about the odds, and especially the profits. There are none, and in the end, even the thought of them is pointless.</em></p>
<p><em>If you want freedom in the world, build it. If you want rights for people, grant them. Don't expect <b>anyone</b> else to do it. Do it yourself, or as a group. Doesn't matter. </em><em>Just do it</em><em>.</em></p>
<p><em>It was never the point for me to provide a complete solution to everything, and nobody should wait for that. My goal was to provide a set of tools that could build any kind of communications system, while protecting the sovereignty, dignity and humanity of its users. I also tried very hard to design that tool, such that those building would be required to think outside of the tiny box, which has created many of the limitations we currently face.</em></p>
<p><em>Forget what you know about "servers" and "clients", about "OSI models" and RFCs. You're not in Kansas anymore. Start from scratch, and take this in your hands as something that doesn't demand a particular way of working. If you try to squeeze it into what you already know about networked systems, nothing will make sense, and you might as well use it as a paperweight. Try to see it with clear eyes, and you'll get it. Once you do, you'll have something that is very easy to build some amazing things with.</em>
<br/><br/></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,47 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Board support in Arduino IDE | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Board support in Arduino IDE">
<meta name="description" content="It's now easy to add support for all unsigned.io boards in the Arduino IDE! This guide shows you how.">
<meta property="og:description" content="It's now easy to add support for all unsigned.io boards in the Arduino IDE! This guide shows you how.">
<meta property="og:image" content="https://unsigned.io/images/arduino_logo-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2018_04_06_board-support-in-arduino-ide.html">
<meta property="og:title" content="Board support in Arduino IDE">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2018_04_06_board-support-in-arduino-ide.html">
<meta name="twitter:title" content="Board support in Arduino IDE">
<meta name="twitter:description" content="It's now easy to add support for all unsigned.io boards in the Arduino IDE! This guide shows you how.">
<meta name="twitter:image" content="https://unsigned.io/images/arduino_logo-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-04-06</div>
<h1>Board support in Arduino IDE</h1>
<p>It's now easy to add support for all unsigned.io boards in the Arduino IDE! Just go to preferences in Arduino, and under "Additional Boards Manager URLs", add the following URL:</p>
<p><code>http://unsigned.io/arduino/package_unsignedio_UnsignedBoards_index.json</code></p>
<p>If you already have other URLs, separate them with commas. You can now go into "Board Manager", scroll down and install "UnsignedBoards". That's it! The Arduino IDE now has native support for all unsigned.io boards.</p>
<p>Adding the boards to the Arduino IDE in this way also includes any libraries that you might need to use, like LibAPRS and LibRNode.
The library will be updated when new boards are released.</p>
<p>The board support files are based partly on <a href="https://github.com/MCUdude/MightyCore" rel="noopener noreferrer" target="_blank">MightyCore</a> by <a href="https://github.com/MCUdude" rel="noopener noreferrer" target="_blank">MCUDude</a>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,58 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Contact | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Contact">
<meta name="description" content="Contact page at unsigned.io">
<meta property="og:description" content="Contact page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/contact.html">
<meta property="og:title" content="Contact">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/contact.html">
<meta name="twitter:title" content="Contact">
<meta name="twitter:description" content="Contact page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>Contact Me</h1>
<blockquote>
<p>The convoluted wording of legalisms grew up around the necessity to hide from ourselves the violence we intend toward each other.<br/><br/>Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. You have done violence to him, consumed his energy.<br/><br/><span style="font-style:normal;font-size:0.85em;display:block;text-align:left;"><b>- Frank Herbert, <i>Dune Messiah</i></b></span></p>
</blockquote>
<p>I receive a lot of messages and mails, and while I'd like to answer every one of them in full, this is just not possible within the time I have available.</p>
<p>If you have any general questions or comments about any of the projects I maintain, I encourage you to post it in one of the following places:</p>
<ul>
<li>The <a href="https://github.com/markqvist/Reticulum/discussions">discussion forum</a> on GitHub</li>
<li>The <a href="#reticulum:matrix.org">Reticulum Matrix Channel</a> at <code>#reticulum:matrix.org</code></li>
</ul>
<p>Do <strong>not</strong> send me help or support requests directly. They will not be answered. Instead, please use the public forums and channels for this.</p>
<p>I currently don't do any kind of public appearances or speaks.</p>
<p>For business and licensing inquiries, or if you have something really interesting you want to tell me, you can use one of the following methods, in order of preference:</p>
<ul>
<li>LXMF at <code>8dd57a738226809646089335a6b03695</code></li>
<li>Matrix using <code>@unsignedmark:matrix.org</code></li>
<li>Email by using the address mark at unsigned dot io</li>
</ul>
<center>`3502`</center>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

58
docs/contact.html Normal file
View file

@ -0,0 +1,58 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
<meta charset="utf-8"/>
<title>Contact | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Contact">
<meta name="description" content="Contact page at unsigned.io">
<meta property="og:description" content="Contact page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/contact.html">
<meta property="og:title" content="Contact">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/contact.html">
<meta name="twitter:title" content="Contact">
<meta name="twitter:description" content="Contact page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="index.html">Home</a> | <a href="log.html">Log</a> | <a href="guides.html">Guides</a> | <a href="software/index.html">Software</a> | <a href="hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="shop.html">Shop</a> | <a href="contact.html">Contact Me</a> | <a href="donate.html">Donate</a></span></p>
</center><hr><h1>Contact Me</h1>
<blockquote>
<p>The convoluted wording of legalisms grew up around the necessity to hide from ourselves the violence we intend toward each other.<br/><br/>Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. You have done violence to him, consumed his energy.<br/><br/><span style="font-style:normal;font-size:0.85em;display:block;text-align:left;"><b>- Frank Herbert, <i>Dune Messiah</i></b></span></p>
</blockquote>
<p>I receive a lot of messages and mails, and while I'd like to answer every one of them in full, this is just not possible within the time I have available.</p>
<p>If you have any general questions or comments about any of the projects I maintain, I encourage you to post it in one of the following places:</p>
<ul>
<li>The <a href="https://github.com/markqvist/Reticulum/discussions">discussion forum</a> on GitHub</li>
<li>The <a href="#reticulum:matrix.org">Reticulum Matrix Channel</a> at <code>#reticulum:matrix.org</code></li>
</ul>
<p>Do <strong>not</strong> send me help or support requests directly. They will not be answered. Instead, please use the public forums and channels for this.</p>
<p>I currently don't do any kind of public appearances or speaks.</p>
<p>For business and licensing inquiries, or if you have something really interesting you want to tell me, you can use one of the following methods, in order of preference:</p>
<ul>
<li>LXMF at <code>8dd57a738226809646089335a6b03695</code></li>
<li>Matrix using <code>@unsignedmark:matrix.org</code></li>
<li>Email by using the address mark at unsigned dot io</li>
</ul>
<center>`3502`</center>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

58
docs/contact/index.html Normal file
View file

@ -0,0 +1,58 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Contact | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Contact">
<meta name="description" content="Contact page at unsigned.io">
<meta property="og:description" content="Contact page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/contact.html">
<meta property="og:title" content="Contact">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/contact.html">
<meta name="twitter:title" content="Contact">
<meta name="twitter:description" content="Contact page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>Contact Me</h1>
<blockquote>
<p>The convoluted wording of legalisms grew up around the necessity to hide from ourselves the violence we intend toward each other.<br/><br/>Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. You have done violence to him, consumed his energy.<br/><br/><span style="font-style:normal;font-size:0.85em;display:block;text-align:left;"><b>- Frank Herbert, <i>Dune Messiah</i></b></span></p>
</blockquote>
<p>I receive a lot of messages and mails, and while I'd like to answer every one of them in full, this is just not possible within the time I have available.</p>
<p>If you have any general questions or comments about any of the projects I maintain, I encourage you to post it in one of the following places:</p>
<ul>
<li>The <a href="https://github.com/markqvist/Reticulum/discussions">discussion forum</a> on GitHub</li>
<li>The <a href="#reticulum:matrix.org">Reticulum Matrix Channel</a> at <code>#reticulum:matrix.org</code></li>
</ul>
<p>Do <strong>not</strong> send me help or support requests directly. They will not be answered. Instead, please use the public forums and channels for this.</p>
<p>I currently don't do any kind of public appearances or speaks.</p>
<p>For business and licensing inquiries, or if you have something really interesting you want to tell me, you can use one of the following methods, in order of preference:</p>
<ul>
<li>LXMF at <code>8dd57a738226809646089335a6b03695</code></li>
<li>Matrix using <code>@unsignedmark:matrix.org</code></li>
<li>Email by using the address mark at unsigned dot io</li>
</ul>
<center>`3502`</center>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

1
docs/css/.htaccess Normal file
View file

@ -0,0 +1 @@
Header set Cache-Control "max-age=86400, public"

1023
docs/css/water.css Normal file

File diff suppressed because it is too large Load diff

BIN
docs/css/yond.woff2 Normal file

Binary file not shown.

View file

@ -0,0 +1,44 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Digipeater Firmware | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Digipeater Firmware">
<meta name="description" content="There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected.">
<meta property="og:description" content="There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected.">
<meta property="og:image" content="https://unsigned.io/images/DSC00540-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/articles/2015_05_21_digipeater-firmware.html">
<meta property="og:title" content="Digipeater Firmware">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2015_05_21_digipeater-firmware.html">
<meta name="twitter:title" content="Digipeater Firmware">
<meta name="twitter:description" content="There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected.">
<meta name="twitter:image" content="https://unsigned.io/images/DSC00540-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2015-05-21</div>
<h1>Digipeater Firmware</h1>
<p>There is now a standalone APRS digipeater firmware available for MicroModem! This means you can now use MicroModem as a digipeater without any computer or other host equipment connected. You can grab the sources from the <a href="https://github.com/markqvist/MicroDigi">MicroDigi GitHub repository</a>.</p>
<p>The firmware should still be considered beta quality, and there might be bugs here and there, so watch out! You will also need to configure and compile this yourself. To do so, set your callsign and SSID settings in the "config.h" file. There is also other settings you can configure, such as path clamping and whether to operate as FILL-IN digi or a regular WIDEn-N digi.</p>
<p>Please report any bugs you find, and also let me know of feature requests!</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

57
docs/donate.html Normal file
View file

@ -0,0 +1,57 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
<meta charset="utf-8"/>
<title>Donate | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Donate">
<meta name="description" content="Donate page at unsigned.io">
<meta property="og:description" content="Donate page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/donate.html">
<meta property="og:title" content="Donate">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/donate.html">
<meta name="twitter:title" content="Donate">
<meta name="twitter:description" content="Donate page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="index.html">Home</a> | <a href="log.html">Log</a> | <a href="guides.html">Guides</a> | <a href="software/index.html">Software</a> | <a href="hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="shop.html">Shop</a> | <a href="contact.html">Contact Me</a> | <a href="donate.html">Donate</a></span></p>
</center><hr><h1>Support My Work</h1>
<p>You can help support the continued development of open, free and private communications systems by donating via one of the following channels:</p>
<ul>
<li>Monero<br/>
<code>84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w</code>
<br/><br/></li>
<li>Bitcoin<br/>
<code>bc1p4a6axuvl7n9hpapfj8sv5reqj8kz6uxa67d5en70vzrttj0fmcusgxsfk5</code>
<br/><br/></li>
<li>Ethereum<br/>
<code>0xae89F3B94fC4AD6563F0864a55F9a697a90261ff</code>
<br/><br/></li>
<li>Liberapay<br/>
<a href="https://liberapay.com/Reticulum/"><code>https://liberapay.com/Reticulum/</code></a>
<br/><br/></li>
<li>Ko-Fi<br/>
<a href="https://ko-fi.com/markqvist"><code>https://ko-fi.com/markqvist</code></a></li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

57
docs/donate/index.html Normal file
View file

@ -0,0 +1,57 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Donate | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Donate">
<meta name="description" content="Donate page at unsigned.io">
<meta property="og:description" content="Donate page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/donate.html">
<meta property="og:title" content="Donate">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/donate.html">
<meta name="twitter:title" content="Donate">
<meta name="twitter:description" content="Donate page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>Support My Work</h1>
<p>You can help support the continued development of open, free and private communications systems by donating via one of the following channels:</p>
<ul>
<li>Monero<br/>
<code>84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w</code>
<br/><br/></li>
<li>Bitcoin<br/>
<code>bc1p4a6axuvl7n9hpapfj8sv5reqj8kz6uxa67d5en70vzrttj0fmcusgxsfk5</code>
<br/><br/></li>
<li>Ethereum<br/>
<code>0xae89F3B94fC4AD6563F0864a55F9a697a90261ff</code>
<br/><br/></li>
<li>Liberapay<br/>
<a href="https://liberapay.com/Reticulum/"><code>https://liberapay.com/Reticulum/</code></a>
<br/><br/></li>
<li>Ko-Fi<br/>
<a href="https://ko-fi.com/markqvist"><code>https://ko-fi.com/markqvist</code></a></li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,115 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Ethernet and IP over Packet Radio TNCs with tncattach | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Ethernet and IP over Packet Radio TNCs with tncattach">
<meta name="description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta property="og:description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta property="og:image" content="https://unsigned.io/images/tncattach-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2020_05_27_ethernet-and-ip-over-packet-radio-tncs.html">
<meta property="og:title" content="Ethernet and IP over Packet Radio TNCs with tncattach">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2020_05_27_ethernet-and-ip-over-packet-radio-tncs.html">
<meta name="twitter:title" content="Ethernet and IP over Packet Radio TNCs with tncattach">
<meta name="twitter:description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta name="twitter:image" content="https://unsigned.io/images/tncattach-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-01-25</div>
<h1>Ethernet and IP over Packet Radio TNCs with tncattach</h1>
<p><em>If you just want the most minimal-effort setup guide on how to run ethernet and IP over packet radio TNCs, skip down to the section: "One to Many, Many to One".</em></p>
<h3>The Old Ways</h3>
<p>Running IP applications over packet radio TNCs and similar hardware has traditionally been possible, albeit in a somewhat limited form, using the Linux AX.25 kernel modules and utilities like <code>kissattach</code>. Recent bugs have prevented this method from working correctly in new versions of Debian (and derivatives), and there is even a <a href="https://lists.debian.org/debian-hams/2019/07/msg00032.html" target="_blank" rel="noopener noreferrer">discussion about removing kernel AX.25 support altogether</a>.</p>
<p>While the <a href="https://unsigned.io/using-rnode-as-a-lora-based-wireless-nic/" target="_blank" rel="noopener noreferrer">kissattach method of IP</a> networking over packet radio traditionally worked relatively well, it also has the drawback of having to encapsulate everything in AX.25 frames, and thus not supporting standard ethernet, while incurring overhead that is entirely unnecessary for IP networking.</p>
<h3>A Cleaner Solution</h3>
<p>With all that in mind, I found it was probably time to offer an alternative, so I wrote <a href="https://unsigned.io/tncattach/">tncattach</a>. It's a small program that replaces the functionality from kissattach, and doesn't require any special kernel modules.</p>
<p>With <code>tncattach</code> you can attach any KISS-compatible TNC as a fully ethernet-compatible network interface in Linux. It also supports more "lightweight" tunnel interfaces, for point-to-point links (where you don't need the overhead of ethernet). And it of course fully supports both <a href="https://unsigned.io/rnode/">RNode</a> and <a href="https://unsigned.io/openmodem/">OpenModem</a>.</p>
<p>After writing <code>tncattach</code>, I optimised the buffering and queues in the device firmwares, so be sure to update your RNode to at least version 1.16, and your OpenModem to version 1.05 or above for the best results.</p>
<p><img src="../images/tncattach.jpg"/></p>
<h3>Creating an interface with tncattach</h3>
<p>To create an interface with tncattach, you will first need to download the program to your system. Please read <a href="https://github.com/markqvist/tncattach">the download and install instructions here</a>.</p>
<p>For the sake of this tutorial, we will go through creating two different setups, first a point-to-point link between two devices, and next a point-to-multipoint setup that can support many individual devices communicating on the same channel.</p>
<p>The <code>tncattach</code> program offers a range of options to be given on the command line, and I'd suggest you read about them by entering the command:</p>
<p><code>tncattach --help</code></p>
<p>I won't go over them all here, but I will explain the importance of some of them as we move through the tutorial.</p>
<p>It's also worth noting, that if you are using tncattach with <a href="https://unsigned.io/rnode/">RNodes</a>, you should put them into TNC mode with the <a href="https://github.com/markqvist/rnodeconfigutil/" target="_blank" rel="noopener noreferrer">rnodeconf</a> program <em>before</em> running tncattach, as tncattach will not configure radio parameters, but expects the hardware to be ready to receive and transmit when it attaches.</p>
<h3>Point-to-Point Links</h3>
<p>For <code>tncattach</code> to create an interface, it needs to know at minimum what serial port the TNC is connected to, and what the baud-rate of the port is. For the rest of this tutorial, I will assume that a TNC is connected to each system, and available on serial port /dev/ttyUSB0, using a baud-rate of 115200. A minimal command for achieving this could look like:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200</code></p>
<p>Which will create and bring up a point-to-point interface on our system:</p>
<pre><code>$ ifconfig
tnc0: flags=337&amp;lt;UP,POINTOPOINT,RUNNING,PROMISC&amp;gt; mtu 329
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>Great! We actually have a usable, although unconfigured interface. In most cases, we probably want to specify a few options, though. Let's enable the built-in IPv6 filter, so we don't spam the channel with router solicitations and similar, and also tell <code>tncattach</code> that we will manually bring up the interface after creation, which is useful when making point-to-point links.</p>
<p>The default MTU of 329 bytes should work on almost all TNCs, but in most cases it can be increased. Let's assume the connected TNC is an OpenModem, which supports an MTU of 576 bytes. We need to subtract any framing overhead from that, since that is the raw packet MTU of the device. For <code>tncattach</code> point-to-point interface the framing overhead is 4 bytes. For ethernet interfaces it is usually 18 bytes, but can be as high as 22, if you want to support VLAN tagging. So as a rule of thumb, subtract 4 bytes for point-to-point links and 22 bytes for ethernet links from the TNCs MTU. Aplpying this, we get an mtu of 572 bytes for OpenModem.</p>
<p>As a last consideration, we'll tell <code>tncattach</code> to daemonize it's process after creating the interface, so it will run in the background as a system process. This is achieved with the <code>-d</code> switch.</p>
<p>We can now put the above considerations together into the following command:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d --noipv6 --noup --mtu 572</code></p>
<p>This will create the interface <code>tnc0</code> as a point-to-point interface, but it will not yet be active. We'll configure the point-to-point link with 10.0.0.1 being the local IP address, and 10.0.0.2 being the remote address, and bring the interface up:</p>
<p><code>sudo ifconfig tnc0 10.0.0.1 pointopoint 10.0.0.2</code></p>
<p>The interface is now up and running, and ready to communicate with the remote end:</p>
<pre><code>$ ifconfig
tnc0: flags=4305&amp;lt;UP,POINTOPOINT,RUNNING,NOARP,MULTICAST&amp;gt; mtu 496
inet 10.0.0.1 netmask 255.255.255.255 destination 10.0.0.2
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>On the remote system, the configuration commands would be similar, with only the order of IP-addresses changed:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d --noipv6 --noup --mtu 572&lt;br /&gt;sudo ifconfig tnc0 10.0.0.2 pointopoint 10.0.0.1</code></p>
<p>In the next example, we'll setup a network that can support many devices communicating with each other on the same channel, using ethernet, which is suprisingly much simpler than point-to-point links.</p>
<h3>One to Many, Many to One</h3>
<p>Let's assume that we have 10 TNC devices, all connected to the same radio channel, and we want everyone to be able to talk to everyone else. Setting up point-to-point links between everyone will get tedious very fast, so let's use something else: Ethernet.</p>
<p>Setting up ethernet devices with <a href="https://unsigned.io/tncattach/">tncattach</a> is a surprisingly simple one-liner. Assuming we are still using OpenModems, and considering the MTU calculations from above, we can bring up an interface and configure it with the following command:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d -e --noipv6 --mtu 554 --ipv4 10.91.0.1/24</code></p>
<p>The interface will now be created, have an IPv4 address configured and brought up. In this case we use the <code>-e</code> switch to specify we want a full ethernet device, not just a point-to-point link. We also use the <code>--ipv4</code> switch to specify what IPv4 address the interface should be assigned. Please that you must supply addresses complete with a subnet mask in CIDR notation for the <code>--ipv4</code> switch (hence the <em>/24</em> at the end).</p>
<p>The interface is now up and running, and ready for use:</p>
<pre><code>$ ifconfig
tnc0: flags=611&amp;lt;UP,BROADCAST,NOTRAILERS,RUNNING,ALLMULTI&amp;gt; mtu 554
inet 10.91.0.1 netmask 255.255.255.0 broadcast 10.91.0.255
ether 62:2a:60:89:a2:3a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>Repeat the same command on any other hosts, replacing the IP address with a unique address in the same subnet for every system, and every system can now talk to everyone else.</p>
<p>Since this is ethernet, you could easily set up a DHCP server on one system, and have that assign IP-addresses, instead of manually specifying them on each system. Or do anything you would normally be able to, really.</p>
<h3>Notes on MTU</h3>
<p>The MTU that is set with <code>tncattach</code> is the MTU for the <em>kernel networking interface</em>. That is, it is the MTU for the interface you see when you type for example <code>ifconfig tnc0</code>. The MTU value set here tells the kernel how many bytes of payload data can be squeezed into a <em>single physical-layer packet</em>.</p>
<p>This value should not be set to the direct physical layer MTU of the TNC device! For example, even though OpenModem supports an MTU of 576 bytes, and RNode supports an MTU of 500 bytes, you need to take into account the overhead of any link-layer protocol that is transported with <code>tncattach</code>.</p>
<p>In practical terms, this means that if you just want to use point-to-point IP links with <code>tncattach</code>, the overhead will be 4 bytes. For full ethernet, the overhead will usually be 18 bytes, but if you also need to support 802.11q VLAN tags, it will be 22 bytes. You need to subtract this overhead from the device MTU and pass that value to <code>tncattach</code>.</p>
<p>For OpenModem, correct MTU values to use with <code>tncattach</code> would be 572, 558 and 554 respectively, for point-to-point IP links, Ethernet and Ethernet with VLAN tags.</p>
<p>For RNode, correct MTU values to use with <code>tncattach</code> would be 496, 482 and 478 respectively, for point-to-point IP links, Ethernet and Ethernet with VLAN tags.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,97 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>From Here to There, or: Walls Have Ears | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="From Here to There, or: Walls Have Ears">
<meta name="description" content="Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.">
<meta property="og:description" content="Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.">
<meta property="og:image" content="https://unsigned.io/images/Thai-coup-detat-2014-social-media-banner-02-e1648895946118-400x275.jpeg">
<meta property="og:url" content="https://unsigned.io/articles/2022_04_02_From_Here_to_There.html">
<meta property="og:title" content="From Here to There, or: Walls Have Ears">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2022_04_02_From_Here_to_There.html">
<meta name="twitter:title" content="From Here to There, or: Walls Have Ears">
<meta name="twitter:description" content="Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.">
<meta name="twitter:image" content="https://unsigned.io/images/Thai-coup-detat-2014-social-media-banner-02-e1648895946118-400x275.jpeg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-04-02</div>
<h1>From Here to There, or: Walls Have Ears</h1>
<p>Once the centerpiece in the hopes of a free and prosperous world, the Internet is currently undergoing significant mutations towards a consumption-oriented content delivery system, rather than the Peer-to-Peer network it was intended to be.</p>
<p><img class="article_photo" src="../images/Thai-coup-detat-2014-social-media-banner-02-e1648895946118.jpeg"/>
<em>2014 banner in Bangkok threatening inhabitants that they can be jailed for "sharing" or "liking" on social media. Image credit <a href="https://commons.wikimedia.org/wiki/User:Pratyeka">Pratyek</a>.</em></p>
<p>The battle for the Internet has been long and ardous, and recently, the interests that want to turn it into a hyperdimensional panopticon, taking center-stage in the societal control complex, have been rapidly gaining strides.</p>
<h2>Original Intent</h2>
<p>The primary functional purpose of the Internet was originally intended to be a mechanisms for establishment of <em>end-to-end</em> connectivity for information transfer. Any given two endpoints connected to the Internet should be able to connect bi-laterally and directly to each other using unique addresses. In this model <em>any</em> one peer can reach <em>any</em> other peer in the network.</p>
<p>Today, from the strange place we have arrived at, the guarantee of end-to-end connectivity might <em>seem</em> like an unneccessary complication. In reality, a global network guaranteeing end-to-end connectivity for all would have meant a much more elegant and simple implementation, than the current situation of an increasingly technically patched and fragmented Internet.</p>
<h2>The Way Things are Going</h2>
<p><em>Or, why we need End-to-End Connectivity, not just End-to-End Encryption.</em></p>
<p>The creation of any sort of private, human-friendly or freedom-enhancing system <em>requires</em> the inclusion of end-to-end connectivity as a fundamental principle. Unfortunately, much of the Internet is currently being transformed into a <em>content-delivery</em> service, more akin to <em>Television On Steroids</em>.</p>
<p>This very unfortunate turn of events, partly pushed by state and government control agendas, and partly pushed by cost-cutting efforts from Internet service providers, coupled with the huge uptake in consumer acceptance of <em>just-good-enough</em> mobile LTE and 5G Internet access, has led to a situation where most of the current Internet users actually do not have real Internet access, but a watered down, consumption-oriented pseudo-service.</p>
<p>Why is it almost impossible to implement human-oriented, freedom-enhancing services on this platform? Because all services, that don't just seek to shove pre-determined information through the neural pathways of its users, but seeks to extend the users voice and agency over the Internet, must provide a <em>centralised relay</em> that allow the user to do so. In common terms, we call this a <em>server</em>, or for very large system, such as an email-provider, or something like Facebook, it might be an entire data-center full of servers. Or a network of data-centers spanning the globe.</p>
<p>Any service or application that want to <em>enable interaction</em> between users needs to provide infrastructure to do so, and in the current state of the Internet, since end-to-end connectivity has been effectively destroyed, the <strong>only</strong> way to do so is by using centralised relays.</p>
<p>No matter how big or small the centralised relay infrastructure is, it creates the same problem, or the same <em>grand oppertunity</em>, if you look at it from the ever-gluttonous perspective of the societal control complex. A central point of attack now exists, and it is easily exploited.</p>
<p>Because the central relay has been made an artificial neccessity, it is now a trivial matter to obtain any information about any person who uses the infrastructure. Should any person dare stick their head out too far, it is also easy to simply remove the person by the push of a button, and further to directly view who the person shared information and ideas with and target these people for retaliations or removal as well.</p>
<p>End-to-End Encryption helps defend against these threats, but only barely. It is a sort of last desperate hold the common human has on the rope that is dangling them over the abyss of a perfectly implemented total control society. As long as information and communication has to travel through pre-defined centralised relay points, it is perfectly trivial for the control complex to single out any person, solely by the patterns and metadata of their activity, even if the contents of their activities were <em>completely</em> encrypted (which it never is, the internet was simply not designed like this).</p>
<p>In reality the line between content and metadata is much fuzzier than most people think, and for a sufficiently sophisticated actor (read: anyone with a room full of computers), what we call "metadata" is plenty. Metadata <em>is</em> data. Especially when allowed into the pathways of machine learning and AI systems.</p>
<h2>The Solution</h2>
<p>What we need is not just better and more complete encryption, we need it to be coupled with the original intention of the Internet: End-to-End Connectivity for <em>every single human being on the planet</em>.</p>
<p>Without end-to-end connectivity, human beings will be forever forced to associate and interact through <em>arbiters</em> chosen by the most powerful. Such an arrangement is not free association. It is <strong>insidious control</strong>, that will allow itself to seep through every crevasse it finds until it <em>engulfs all aspect of life</em>.</p>
<p>If end-to-end connectivity is restored and guaranteed for all, the need for centralised relays, or <em>servers</em>, evaporates. The infrastructure needed for enabling human expression and sharing over the internet can be implemented as open-ended <em>protocols</em> and <em>software</em>, running on the devices of the people using the platforms and services, instead of physical hardware having to exist at fixed points in space and time, that are easily targeted and exploited.</p>
<p>This idea is not science-fiction. We are already, right now, at the point of sufficient compute power, bandwidth and storage capability, that even modest smartphones, when connected through end-to-end networks and cryptographic protocols, has more than enough resources to replace literally <em>all</em> current services being provided on the Internet. From banking to instant messaging to video streaming. One great example of this is <a href="https://scuttlebutt.nz/">Secure Scuttlebutt</a>, which implements a full and feature-rich social networking platform, completely as a cryptographic protocol, instead of a service that user will inevitably pay for with their privacy and data.</p>
<p>The artificial requirement of centralized relays is currently the most fundamental control axis in the restraint of free human association and interaction. If universal end-to-end connectivity is restored, this control axis is obliterated, and the machinery of dominion will spin apart by its own inertia.</p>
<h3>A Failed Hope</h3>
<p>A fundamental factor in the current failure of end-to-end connectivity on the Internet has been the exhaustion of the public IPv4 address space. This exhaustion has been completely predictable for several decades. Let that sink in for a moment.</p>
<p>The proposed solution of adopting and migrating to the next generation of the Internet Protocol - IPv6 - could, <em>in theory</em>, solve the situation once and for all. The IPv6 address space is large enough that every particle in the universe could each be assigned a multitude of addresses.</p>
<p>So far, the uptake and <a href="https://www.google.com/intl/en/ipv6/statistics.html">deployment of IPv6</a> from Internet service providers have been <em>abysmally slow</em>, with availability for residential Internet users only growing a few percentage points every year. The problem here is, that unless a service as IPv6 is <em>almost universally</em> available, it cannot really be relied upon at all. If you can only count on having proper IPv6 connectivity 50% of the time, it is of little use for anyone building services and systems that need to work <em>all the time</em>, as is required by a society that is so fundamentally entwined in its digital connectivity. That is the simple reason that practically <em>all</em> services still have to rely on IPv4.</p>
<h3>Conditions of the Race</h3>
<p>Unless things change significantly, we are likely to wait for several decades before enough users have access to IPv6 for it to make true end-to-end connectivity possible.</p>
<p>While we keep our hands folded for the sworn "official" technological update to the Internet, the societal control complex will have plenty of time to implement the so-called "legal" measures needed to ensure that they can enforce centralised relaying of all communication and human interaction, and that they will never have to give it up again, once implemented. Don't be fooled: This is not a theoretical threat. It <a href="https://www.eff.org/deeplinks/2020/10/orders-top-eus-timetable-dismantling-end-end-encryption">is</a> <a href="https://protonmail.com/blog/eu-attack-on-encryption/">happening</a> <a href="https://cyberlaw.stanford.edu/blog/2020/06/theres-now-even-worse-anti-encryption-bill-earn-it-doesnt-make-earn-it-bill-ok">right</a> <a href="https://protonmail.com/blog/joint-statement-eu-encryption/">now</a>, and it <em>will drastically affect your life in less than a decade</em>.</p>
<ul>
<li><a href="https://www.eff.org/deeplinks/2020/10/orders-top-eus-timetable-dismantling-end-end-encryption">EFF: The EUs Timetable for Dismantling End-to-End Encryption</a></li>
<li><a href="https://cyberlaw.stanford.edu/blog/2020/06/theres-now-even-worse-anti-encryption-bill-earn-it-doesnt-make-earn-it-bill-ok">Stanford CIS: There's Now an Even Worse Anti-Encryption Bill Than EARN IT</a></li>
<li><a href="https://protonmail.com/blog/eu-attack-on-encryption/">ProtonMail: EUs Attack on Encryption</a></li>
<li><a href="https://protonmail.com/blog/joint-statement-eu-encryption/">Threema, Tresorit, Tutanota &amp; ProtonMail: Joint Statement on EU Anti-Privacy Shift</a></li>
</ul>
<p>The legalistic motions being made now are ensuring a strong foundation for the rapidly approaching criminalization of peer-to-peer communication and expression. <em>Peer-to-peer</em> is not some distant technological jargon. In case we forgot, it literally means: <em>one human to another human, with no intermediaries</em>. Please stop for a moment and allow that to sink in. The scope is as unfathomable as it is horrifying. Our species evolved on that premise. And because of that, our survival depends on it. It has been a fundamental axiom of <em>a quarter million years</em> of human life. The <em>criminalization</em> of unmonitored human-to-human interaction will, in the <strong>most uncomfortably literal</strong> sense, <em>bring hell to Earth</em>.</p>
<p>While these motions are being arranged in relative obscurity, <em>billions</em> of people around the globe are (by their own will, or by pressure from externalities of work, health and current societal issues) migrating more and more of their lifes and social spheres into structures, that exist only in the realms of digital computing machines.</p>
<p>There is nothing <em>inherently</em> bad in this migration, were it not for the dysfunction and direction of development facing the <em>medium</em> these computing machines are connected together by. If the substrate supporting the lands, that billions of people are migrating into is, quite literally, being transformed into the soils of hell, we are now witnessing something very troubling unfold.</p>
<h3>The Fall of Politics</h3>
<p>There is no denying that the odds are stacked against us quite severely at this point. Personally, I don't stake any faith in the effectiveness of classical political <em>resistance and change</em> at this point. The <em>sheer inertia</em> pent up in the ongoing implementation of the societal control complex is inevitably going to completely steam-roll any gathering of humans raising banners and singing protest, with no legislator even <em>feigning</em> to care in the slightest anymore.</p>
<p>I don't say this lightly, or as a morbid joke. To experience this as what the claimed "Democratic Civilization of the West" has come to, is truly painful and saddening beyond compare to me. I don't say this to discourage protest either. Quite on the contrary, one can only respect and commend the efforts of those who organise and effectuate such protest. But at this point, we should not excercise protest as a call to our leaders. That will be a call in vain, and a waste of the precious few resources we have.</p>
<p>If protest is to be an effective tool, let us use it as a call to ourselves: A call to rise in recognition of each other as fellows and peers with a multitude of views, ideas and inclinations, that can create a new foundation for us all to stand on, when allowed to mix and clash freely within a Free and Open Civilization, rather than being confined to the controlled and monitored dystopia that is currently being built around us. Let's rather march to show anyone that might be watching in quiet trepidation, that we are still here, that we will keep creating and building. That we will not be stopped and that they are welcome to join us.</p>
<p>Once a certain amount of water has filled the hull, there really is no salvaging a sinking vessel. For some, upholding the belief that the ship is proud and unsinkable may be so important, that they simply choose to go down with it. Others will realise that there is enough resources around to construct a new vessel, jump ship and sail on. The choice must ultimately be an individual one, but I will certainly, and although politely, <em>most pressingly</em> invite you to join us over here on the barge. It might not yet be as impressive as the massive steel and glass collosus you currently occupy, <em>but your socks are already wet</em>.</p>
<h2>We Are Here</h2>
<p>We are not a figment of someones imagination, nor are our motivations a story that can be dismissed as fanciful ideas. We might still be dispersed and outnumbered. But we are here. We are building a Distributed Parallel Civilization, a global cooperative system without nations, societal control or centralised power. Here, the structures and boundaries of the old world is becoming increasingly irrelevant. Being outspoken about this has always been dangerous, especially in the light of the increasing application of force against us, deployed by the control complex. It is soon time we raise up, stand by our goals, and start building beacons to guide others.</p>
<p>As more and more walk back out of the control complex, we will need to provide an inspiring place to go, and at <em>larger and larger</em> scale. We already have most of the tools we need to ensure this, but a few are still lacking. I believe the most important of these tools right now is a flexible global communication network ensuring end-to-end-connectivity and complete initiator anonymity of it's users. If we can put that in place, free human expression and association becomes near unstoppable.</p>
<p>To realise this, we will need to leverage all the resources and capabilities currently available to us, but it is in no way out of reach, and incredible progress has already been made. We are closer than ever, but we still have monumental tasks ahead of us. If you have any ways of contributing to this endeavour, <em>please</em> join the effort.</p>
<p>Even in its currently fragmented, controlled and censored state, the Internet still offers an invaluable stepping stone that can help turn the tide of the efforts against freedom and autonomy. Just as the first pioneers of digital information sharing, armed only with modems and the simplest of computers, created completely autonomous networks of association and peer-to-peer exchange, by commandeering the telephone network of copper wires circling the globe, we too can co-opt the Internet for the same purpose.</p>
<h3>Carrier Has Arrived</h3>
<p>Instead of relying on the Internet itself to provide the communication and association infrastructure we need, we can view it simply as an underlying carrier mechanisms, on which we can build human-oriented and freedom-enhancing <em>overlay networks</em>. With time, these networks can be gradually migrated to physical carrier mechanisms that are more closely aligned with the goals of the overlay networks themselves.</p>
<p>Several such overlay networks already exist, and are reaching better and better levels of stability and maturity. Outstanding examples are <a href="https://geti2p.net/">I2P</a> and <a href="https://yggdrasil-network.github.io">Yggdrasil</a>. Without projects like these, it would be practically impossible to communicate freely over the Internet today. The efforts of the developers, and all the people volunteering to provide infrastructure and bandwidth for the networks are directly holding back the door of free communication from slamming shut in our face. A moment of gratitude to them is in order.</p>
<p>It is also of great importance, that we seek to develop protocols and mechanisms for building physical mesh networks, that can span vast geographical areas, and that the tools for doing so are placed directly into the hands of anyone who see it fit to build these networks. Without such an effort, our communications infrastructure (even if it runs entirely in private overlay networks) will always be at the mercy of the societal control complex. The power to simply disconnect the entire civilian population of an area from the Internet is readily available, and have been excercised many times.</p>
<p>We don't just need one big network, built as an overlay on the Internet, we need a multitude, and we need to connect them in a myriad ways. We need <em>thousands of networks without kill-switches and control mechanisms</em>, and we need to bind them together, both over the Internet, around it and outside of it. We need to give people the tools to build their own networks, anytime and anywhere, and to connect them together as they see fit, without arbiters, gatekeepers or external control.</p>
<p>Enabling such capabilities for anyone is the focus and motivation of my own work on the <a href="https://reticulum.network">Reticulum Networking Stack</a>. While it is still in its infancy, it is showing promise, and is already being used to solve real-world problems in novel ways. I am now quite certain that it can mature into the powerful tool that I envision it to become. It will certainly not be the whole of the solution, but I believe it can be part of it.</p>
<p>Whoever you are, or wherever your inclinations or interests direct you, I am almost certain that you, and those dear to you, stand to benefit from the continued existence of the technologies and possibilities I discuss here. If you have the skills and time, or even just the silghtest will, please join the efforts in ensuring Free and Open Communications for everyone. Help by providing infrastructure and bandwidth, help by testing new software and hardware, help by coding, or just as important: Help by spreading awareness. The more people are aware of the real situation, the harder it becomes to accelerate the deployment of the control structures. If we can slow the spread of control, we can win. Not by wasting our precious resources in a war with a collosus, but by creating a better society, a Free and Open Civilization, where the collosus is irrelevant.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

1
docs/gfx/.htaccess Normal file
View file

@ -0,0 +1 @@
Header set Cache-Control "max-age=86400, public"

BIN
docs/gfx/donate_btc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
docs/gfx/donate_eth.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
docs/gfx/donate_xmr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
docs/gfx/icon.kra Normal file

Binary file not shown.

BIN
docs/gfx/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
docs/gfx/unsigned_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
docs/gfx/unsigned_logo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -0,0 +1,346 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Abstractions Set In Granite | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:image" content="https://unsigned.io/images/asig_post.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta name="twitter:title" content="Abstractions Set In Granite">
<meta name="twitter:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta name="twitter:image" content="https://unsigned.io/images/asig_post.webp">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
//tex2jax: {inlineMath: [['$','$'], ['\(','\)']]}
tex2jax: {inlineMath: [['$','$']]}
});
</script>
<script type="text/javascript" async src="../scripts/mathjax/MathJax.js?config=TeX-AMS_CHTML"></script>
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2023-03-18 7:37:03</div>
<h2>Update: September 16th, 2025</h2>
<p><strong>I was wrong here!</strong> High-precision artefacts, and the Radial Traversal Pattern revisited:</p>
<p>When originally released, this article proposed embedded patterns and mathematical ratios in the most precise of the supposedly ancient Egyptian artefacts in the private collection of Adam Young (now running the company "Artifact Foundation"). However, recently <a href="https://arcsci.org/articles/revisiting_old_findings.html">this article on ArcSci.org</a> has refuted some of these claims, while confirming others. </p>
<p>While the discovery of the embedded $\pi$ and $\varphi$ ratios have now been convincingly substatiated, the existence of the Radial Traversal Pattern has been comprehensively, unequivocally and <strong>definitively</strong> refuted and dismissed. The proposed pattern <em>was</em> indeed a confirmation trap fluke - unquantifiable <em>even</em> within the extraordinary precision envelope of the object. I applaud the comprehensive, rigorous and on-point analysis, and I completely accept the refutation as valid.</p>
<p>This changes the probability calculation of this object substantially.</p>
<p>Back in 2023, I initially witheld judgement as to authenticity of the PV001 object. With the limited information available, I found it impossible to ascertain its authenticity, but simply shared my findings with the clear belief that it was important to investigate it further.</p>
<p>But given the overall picture of everything we now know, and the demonstrably horrible track-record of the "Artifact Foundation", I cannot escape openly stating my current personal opinion, as to the authenticity of this "artefact":</p>
<ul>
<li>The object itself, or at least its current form, is <strong>definitely</strong> not 5,000 years old.</li>
<li>It is either a modern replica, contemporary piece, or:</li>
<li>It was acquired as an ancient article, but later reworked to achieve its extraordinary qualities and features.</li>
</ul>
<p>For transparency and the full history of everything, I will not make corrections in the original article, but instead include this preface so it is clear what can be considered valid observations and what cannot.</p>
<hr />
<h2>Introduction</h2>
<p>This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, released on February 19th, 2023, by the team at <a href="https://unchartedx.com/site/2023/02/19/new-video-updates-to-the-vase-scan-responses-and-the-stl-file/">unchartedx.com</a>. For an introduction to the object itself, and some more context around how it was digitised, please see the first few paragraphs of my <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial analysis</a>.</p>
<p><img alt="Illustration 0" src="../images/a1_plate_0.webp" /></p>
<h3>Authors</h3>
<p>This article is written by Mark Qvist. The analysis and modelling work required to produce it has been the product of a joint effort between myself, and another engineer. For professional reasons, she currently wishes to remain unnamed. All mentions of "we" in this article refer to us as the authors. Whenever the <em>I</em> pronoun is found, it is used to signify an opinion, observation or conclusion made by myself alone.</p>
<h3>Preface</h3>
<p>Since getting access to the data, we have worked to gain a better understanding of this remarkable object, and we have been making some significant headway.</p>
<p>There is still much to learn, but we would like to share what we know so far. We could in no way have anticipated what came to light in this investigation, and just how extraordinary this object is.</p>
<p>While we cannot yet make any <em>direct</em> conclusions, as to who made this object, or when it was created, we now at least know a great deal more about the capabilities of the creators of the object.</p>
<p>This is a <em>long</em> article. If you want to ascertain wheter it is worth your time, you can skip ahead and read the conclusions first, which I am sure will catch your attention, if it wasn't already focused. If you have the patience though, I will recommend taking everything in its laid out order; there is a lot to unpack here.</p>
<h3>Some Math Included</h3>
<p>We will be using some mathematics to illustrate various points, but we have strived to keep it as simple to follow as possible. With a basic understanding of geometry and algebra, it should be possible to follow most of it. There will be a few sections where the equations get a little more involved. This is necessary to show that our model is valid, but these sections are not essential to the overall understanding of the article.</p>
<p>We will do our best to make the main points stand out even for those not interested in the math and equations. So if those parts doesn't mean anything to you, feel free to skip them.</p>
<p>In this article, we use <em>radians</em>, since it is a <em>universal</em> way to describe angles. Radians are based on the fundamental ratio between the radius and circumference of circle, whereas degrees is just an arbitrary subdivision of a circle into 360 pieces. As such, it is not based on any fundamental mathematical ratios or constants, and not really useful in an analysis such as this. Radians are useful because they show the underlying mathematical relations more clearly.</p>
<p>Radians may lead to some unease, if you are not familiar with them. Fear not, though! It is actually simpler, and much more intuitive than using degrees. All you need to know is that there is $2\times\pi$ radians in a circle, and $\pi$ radians in a triangle. For example, a $45^\circ$ angle is $\pi \over 4$ radians. You can describe any angle by simple fractions of $\pi$.</p>
<h2>Methodology</h2>
<p>This section will describe the methodology we employed while working with the object, and offer some context to the choices we made in analysing it, and in our design reconstruction.</p>
<h3>Initial Findings</h3>
<p>Shortly after the scan data of the granite artefact was released, I carried out an <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial geometrical analysis</a> of the object. This analysis showed very high levels of geometrical alignment in the object, even between exterior and interior features, as well as specific and consistent choices of angles and dimensional ratios.</p>
<p>These findings very clearly demonstrated, that there was a <em>design</em> behind the finished artefact, and that it did not just randomly appear, out of some intuitively guided fabrication process.</p>
<h3>Units, Measures &amp; Notes</h3>
<p>In this article, absolute measurements are given in <em>millimeters</em> ($mm$) or <em>micrometers</em> ($\mu m$), unless otherwise noted. Angles are specified in radians. All measurements mentioned here, have been taken on the high-resolution mesh data from the structured-light scan of the object.</p>
<p>Measurements were made in the application <em>Blender</em>, and parametric CAD models were created using <em>OpenSCAD</em>. The SCAD source code for our model is <a href="https://unsigned.io/dl/artefact_reconstruction.scad">available for download here</a>. We dimensioned the object in millimeters, and performed measurements by meticulously aligning measurement tools to vertices and polygonal plane intersections. For larger features we measured by manually working towards a best-fit placement of a measurement primitive, by the minimisation of the integral of the amplitudes of deviation over the measured feature.</p>
<p>All graphics and CAD renders presented in this article are ortographic projections. A simulated texture and lighting model has been applied in the renders, to make it easier to visually distinguish curvature and features of the object. This simulated texture is for illustrative purposes, and does not represent the real surface appearance of the object.</p>
<h3>Motivations For This Work</h3>
<p>The initial findings established the motivation for exploring the object more deeply. The approach taken in this work, has been to attempt to create a mathematically consistent and self-constrained model, that could describe all major features of the physical object.</p>
<p>It has been our theory, that if such a model indeed exists, and can be shown to map well to the actual object, it could allow us to learn a lot more about what processes and principles the designers of the object had access to, and what knowledge they held. By analysing the <em>simplest</em> way to create a satisfactory design for the object, we can get a good idea about the <em>minimum</em> levels of capabilities the designers must have had.</p>
<p>While I am currently the one collating our findings in this article, the work has been a shared effort, and is comprised of the input of a group of people. Without that, we would not have gotten as far in our understanding, as we are now.</p>
<h3>Constrained Design Hypothesis</h3>
<p>When designing an object, be that functional or purely aesthetic, one can take a multitude of approaches. It is of course possible for the designer to simply place various features of an object intuitively, without any underlying rules, constraints or principles, but practically all great design, art and architecture follow sets of internally consistent principles.</p>
<p>Various systems of design principles have been known since antiquity, and when beauty, completeness and harmony in form is experienced, it is often exactly because of the skillfull application of such principles. From the preliminary analysis of the object, we deemed it warranted to investigate whether such a set of principles had been employed in its creation, and if so, to what extent.</p>
<p>An important data point, that can be extracted through this approach, is the degree to which different design patterns are locked together to form <em>constraints</em>. In design work, such constraints are commonly used to define various aspects of the individual features, that make up the finished object.</p>
<p>If we can recreate the object from a relatively simple set of design primitives and constraints, which exhibit low degrees of interrelation, or if indeed no such relations even exist, and all features appear intuitively or randomly placed, this would indicate an object of a relatively low level of design complexity, or one that could have been made entirely from an intuitive process.</p>
<p>Contrarily, if we consistently see features defined by complex interrelations between different principles, this indicates a high level of design complexity, and that a higher level of abstraction was needed; not only in creating the design, but also in transferring it through the production method, to the finished object itself.</p>
<h3>The Parametric Model</h3>
<p>To explore what kinds of design principles were used in the creation of the object, we started out by measuring and mapping as many features of the object as possible, and looking for repeating patterns of placement and dimensioning, and repeating or mathematically significant ratios.</p>
<p>While we initially did not understand the underlying principles of what we found, it was clear that patterns and persistent ratios were present in overwhelming abundance throughout the object. Not only were they present, but they exhibited such a high degree of regularity, that we suspected them to be derived from well-defined mathematical formulae.</p>
<p>This led us to attempting something, that really should not have been possible, when dealing with a supposedly ancient artefact, made from granite, of all things: We decided to experimentally build a CAD model that would exclusively use mathematical concepts to dimension and place the features of the object, and use no tuning or arbitrary positional adjustments. All features should be placed and dimensioned by interrelation to each other.</p>
<p>We also limited the initial margin-of-error tolerance of the model to $75~\mu m$, in terms of how well it should map to the features of the actual object. This margin-of-error tolerance was, amongst other criteria, used to discern whether an attempted modelling of a particular feature should be considered for inclusion in the model, or rejected.</p>
<p><strong>I find it timely to stress how completely ludicrous this actually is</strong>. We are dealing with a stone vessel of supposed ancient origin, and are now proposing, that a purely mathematical CAD model, should somehow map to the actual object within a tolerance of less than 75 <em>thousands</em> of a <em>millimeter</em>.</p>
<p>Yet, I will let the results speak for themselves. Additionally, the CAD model, and all of its constituent equations, are available for verification, for anyone interested in doing so.</p>
<h2>Abstractions Set In Stone</h2>
<p>To arrive at a high-level understanding of how the object is defined, we will first look at some primary principles used in the design, and then describe how they are interrelated to create various features of the object.</p>
<h3>The Radial Traversal Pattern</h3>
<p>The most widely used primitive in the object is the circle. Circles, or arcs thereof, are used to define most of the features of the object, and <strong>all</strong> circular features in the object have radii that are interrelated with incredible consistency and precision.</p>
<p>There is, in fact, one single and elegant equation governing the dimensioning of almost all circles utilised in the design. The few circles not following this pattern have been specifically chosen to display some very significant numbers, which we will get to shortly. But for now, let's look at the radii-determining equation:</p>
<p>
<script type="math/tex; mode=display"> R(n) = \left({\sqrt 6 \over 2}\right)^n </script>
With this equation, we can generate all the relevant radii for shaping the object. We can more easily understand how this equation works, by looking at it geometrically.</p>
<p>Already in our early investigation, we noticed that many features seemed to be related to a certain geometric construction of unit circles, known as <em>The Flower of Life</em>. We also noticed that not just one, but several, of such grids were used. The above equation is the most simple description of how these grids interrelate to each other.</p>
<p>Let's look at two of these interrelated grids, composed of $R(3)$ and $R(4)$ circles. It is important to note, that there is no arbitrary decisions applied to these grids by us. Both their dimensions and positioning, in relation to each other, are determined by the above equation (and we shall see exactly how shortly). With these two grids, we can already define several features of the object:</p>
<p><img alt="Illustration 1" src="../images/a1_plate_1.webp" /></p>
<ul>
<li><strong>A</strong>: The top of the object (<em>deviation: $7~\mu m$</em>)</li>
<li><strong>B</strong>: The maximum extent of the curved part of the upper body (<em>deviation: $13~\mu m$</em>)</li>
<li><strong>C</strong>: The maximum diameter of the body curvature (<em>deviation: $72~\mu m$</em>)</li>
<li><strong>D</strong>: The maximum diameter of the internal cavity (<em>deviation: $161~\mu m$</em>)</li>
<li><strong>E</strong>: The bottom of the object (<em>accurate deviation indeterminable due to irregularity of scan data at lower terminus</em>)</li>
</ul>
<p>The design of the object ascends and descends to and from the various sizes of these <em>Flower of Life</em> grids, by using an elegant geometrical construction:</p>
<ul>
<li>Let us select two of intersection points (<strong>A</strong>) in the $R(3)$ pattern, separated by $1 \over 3$ of a full circle.</li>
<li>We now extend a line from each point, with an angle of ${\pi \over 4}~radians$ ($45 ^\circ$).</li>
<li>At the point where these intersect (<strong>B</strong>), we create the center of a new circle, and extend its radius to one of the first two points.</li>
</ul>
<p><img alt="Illustration 2A" src="../images/a1_plate_2a.webp" /></p>
<p>The ratio between the radii of the two circles is now $\sqrt 6 \over 2$. To clearly see why this is, we can place the following triangles in the construction:</p>
<p><img alt="Illustration 2B" src="../images/a1_plate_2_construction.webp" /></p>
<p>Since these two triangles share one equal side, we can use that to show the ratio:</p>
<p>
<script type="math/tex; mode=display">{ \sqrt(2) \over 2 } \times R = {\sqrt(3) \over 2} \times r \implies \sqrt(2) \times R = \sqrt(3) \times r \implies</script>
<script type="math/tex; mode=display">{R \over r} = {\sqrt(3) \over \sqrt(2)} = {\sqrt({3 \over 2})} = {\sqrt 6 \over 2}</script>
By the continuation of this pattern, we arrive at the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and thus the radii used in the object can be created:</p>
<p><img alt="Illustration 4A" src="../images/a1_plate_4.webp" /></p>
<p>Since this pattern is used extensively in the object, we will refer to this radial traversal function as $R(n)$ in the rest of this article.</p>
<p>With this elegant construction, we can account for the majority of the circular features in the object. All of the circles created with this function map to the actual radii of the features of the object with incredible precision.</p>
<p>For each of the radii marked in the graphic below, we found the place where the object deviated <em>the most</em>, from the mathematically pure representation of the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and collated these statistics across all observed radii:</p>
<ul>
<li>Minimal radial deviation is $3~\mu m$</li>
<li>Maximal radial deviaton is $68~\mu m$</li>
<li>Mean radial deviation is $16.25~\mu m$</li>
<li>Median radial deviation is $9~\mu m$</li>
</ul>
<p>Please note, that most radii (even those exhibiting local deviations above the mean) have areas that are, in any meaningful sense of the word, perfect. In many places, the deviation is so small, that we cannot say with certainty whether the deviation is due to "imperfections" in the object, or inaccuracies in the scan. All radii in the following illustration are generated by the $R(n)$ function, and are therefore tightly interrelated:</p>
<p><img alt="Illustration 4B" src="../images/a1_plate_4b_montage.webp" /></p>
<p>To see this level of <em>consistency</em> of precision across just two or three different radii, created from a purely mathematical function, would be astonishing. To see it <em>completely consistently</em>, to <em>microscopic precision</em>, across $12$ different radii, measuring from just $1.1~mm$, up to $42.2~mm$, in a granite artefact, is more or less unfathomable.</p>
<h3>The 1-Radian Arc</h3>
<p>In addition to the radial traversal pattern, we have identified another recurring design principle. The extension of arcs of exactly $1$ radian, locked into configuration with circles created from the radial traversal function, is also used to construct several features of the object.</p>
<p>The part of the body above the handles is composed of two primary regions. The region immediately above the handles exhibits a slight curvature, while the upper region is perfectly conical. This configuration of features can be defined by extending an arc of exactly $1$ radian so that the arc intersects with the $R(3)$ circle defining the maximum extents of the upper body curvature.</p>
<p><img alt="Illustration 5" src="../images/a1_plate_5.webp" /></p>
<p>Placing the arc, so that its lines are tangent to the $R(3)$ circle, perfectly maps the conical region (<strong>A</strong>). And by its intersection with the circle, also marks the point (<strong>B</strong>) where the curved region and conical region meet. The maximum deviation of the conical region from the $1$ radian angle is a mere $37~\mu m$.</p>
<p>As we will see later, this $1$ radian arc is also used to position and dimension the handles.</p>
<h3>Incorporation of π</h3>
<p>The $R(n)$ function, discussed above, still leaves a few circular features unaccounted for, so let us explore how these were dimensioned. The opening into the internal cavity of the object has an interesting feature, in that it tapers slightly inward to a point, and then slightly outward again, before blending with the rest of the internal cavity.</p>
<p>Even this extremely delicate feature is perfectly described by the curvature of an $R(6)$ circle. Though the curvature is very slight, it is sufficient to create a clearly defined minimum for the internal radius of the opening $(Ri)$. Likewise, an external maximum diameter $(Do)$ is clearly definable from the curvature on the lip exterior.</p>
<p><img alt="Illustration 6" src="../images/a1_plate_6.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Ri} = { 58.9322 \over 18.7391 } = 3.14488 \approx \pi</script>
<script type="math/tex; mode=display">\Delta = \left({{Do \over Ri} \over \pi} - 1\right) \times 100 = 0.1046\%</script>
</p>
<p>As we can see, the difference between the ratio existing in the physical object, and a perfect representation of $\pi$ is less than $0.11\%$. In such a small object, this equates to a real-world deviation of approximately $32~\mu m$. This finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>. Furthermore, Marián Marčiš <a href="https://twitter.com/mariusderomanu3/status/1633564138772332549">has also found preliminary evidence</a> of the same ratio incorporated in an object currently displayed at the Cario Museum.</p>
<blockquote>
<p><strong>Here is an experiment to do at home:</strong> Try setting a variable gauge to a gap of $32~\mu m$. You will hardly be able to see <em>light</em> pass through that slit. A human hair is twice as thick as the deviation of the $\pi$ ratio in the object. Even calling this an "imperfection" would seem just <em>slightly</em> arrogant.</p>
</blockquote>
<p>The creators of this object inscribed $\pi$ to perfection at the <em>microscopic scale</em>, in one of the hardest and most difficult materials to work with. I remain doubtful, that it would even be possible to replicate this result with modern CNC machinery.</p>
<h3>Incorporation of The Golden Ratio</h3>
<p>In a similar fashion to the use of $\pi$ above, the golden ratio has also been incorporated in the design of the object. The ratio between the diameter of the narrowest part of the exterior neck $(Dn)$, and the inner radius $(Ri)$ is $\varphi^2$.</p>
<p><img alt="Illustration 7" src="../images/a1_plate_7.webp" /></p>
<p>
<script type="math/tex; mode=display">{Dn \over Ri} = { 49.024 \over 18.7391 } = 2.61613 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left({{Dn \over Ri} \over \varphi^2} - 1\right) \times 100 = 0.072\%</script>
</p>
<p>Again we see a level of precision, that I have a hard time describing with words, so I will let the calculations speak for themselves. In the physical object, this <em>absolutely miniscule</em> deviation from <em>mathematically perfect</em> equates to approximately $20~\mu m$. As with the incorporation of $\pi$, this finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>.</p>
<h3>A Gift From The Past</h3>
<p>We also find the golden ratio encoded in the ratio between the outer diameter of the lip $(Do)$ and the radius of the foot $(Rf)$:</p>
<p><img alt="Illustration 8" src="../images/a1_plate_8.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Rf} = { 58.9322 \over 22.5299 } = 2.615733 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left(1-{{Do \over Rf} \over \varphi^2} \right) \times 100 = 0.088\%</script>
The deviation in absolute measurements here is approximately $35~\mu m$.</p>
<p>As a sort of mathematical gift, the designers of the object placed a double equivalence here: Since $Do$ is already produced by $\pi$, the radius of the foot can be more purely described as $Rf = {Ri \times \pi \over \varphi^2}$. Because this creates an equivalence between all four measures, established by fundamental mathematical concepts, the following should be a reasonable extension:</p>
<p>
<script type="math/tex; mode=display">Do = {Ri \times \pi} ~~\land~~ Dn = Ri \times\varphi^2 ~~ \land ~~ Rf = {Ri \times \pi \over \varphi^2}</script>
<script type="math/tex; mode=display">Ri = 1 ~~ \implies ~~ {Do = \pi} ~~ \land ~~ {Dn = \varphi^2} ~~ \land ~~ {Rf = {\pi \over \varphi^2}}</script>
<script type="math/tex; mode=display">\therefore</script>
<script type="math/tex; mode=display">1 = Ri</script>
</p>
<p>I really cannot imagine a more elegant and beautiful way to establish and communicate a base unit of measure. Whoever created this fascinating object wanted us to know what their measurement system looked like, and here it is. Set in stone, in the universal language of mathematics, and preserved through the ages. Absolutely incredible.</p>
<p>Since we do not currently have any better designation, we will refer to the unit of measure used in the design as $U$ (<em>Units</em>). According to our measurements, an approximation to this unit of measure could be:</p>
<p>
<script type="math/tex; mode=display">1~U \approx 18.739~mm</script>
Since we have observed dimensional deviations of between $20\mu m$ and $32\mu m$ in the measurements used to arrive at this number, we do not recommend using the above approximation as a basis for reference outside of this article.</p>
<p>We do, however, see an interesting corellation in this number. The approximation we have arrived at is just a mere $2.07\mu m$ (less than the scan accuracy) away from <em>exactly</em> matching the wavelength of an eloctromagnetic wave, with a frequency of $16~GHz$, propagating in vacuum:</p>
<p>
<script type="math/tex; mode=display">{c \over f} = {299,792,458~m/s \over 16,000,000,000~Hz} = 18.737028625~mm</script>
</p>
<p>We believe this establishes a more clear common reference, since $1~U$ can elegantly be defined as a simple subdivison of the speed of light in a vacuum.</p>
<p>For the purpose of having a shared reference, and thus the ability to talk about this unit without undue confusion, we would like to humbly propose its <em>provisional</em> definition based on the above ratio:</p>
<p>
<script type="math/tex; mode=display">1~U = 18.737028625~mm</script>
</p>
<h3>Original Dimensions Revealed</h3>
<p>With the above information, we are now able to see what the dimension of this object would really have looked like to its creators. Millimeters have a hard time conveying any meaning here, but once we view the dimensions in $U$, we are treated to a very different, and beautiful picture:</p>
<table>
<thead>
<tr>
<th>Dimension</th>
<th>$U$</th>
<th>$mm$</th>
</tr>
</thead>
<tbody>
<tr>
<td>Opening Radius</td>
<td>$1$</td>
<td>$~18.74$</td>
</tr>
<tr>
<td>Height</td>
<td>$32 \over 5$</td>
<td>$~119.9$</td>
</tr>
<tr>
<td>Width</td>
<td>$9 \over 2$</td>
<td>$~84.3$</td>
</tr>
<tr>
<td>Width at Handles</td>
<td>$46 \over 9$</td>
<td>$~95.7$</td>
</tr>
<tr>
<td>Max Lip Diameter</td>
<td>$\pi$</td>
<td>$~58.9$</td>
</tr>
<tr>
<td>Min Neck Diameter</td>
<td>$\varphi^2$</td>
<td>$~49.0$</td>
</tr>
<tr>
<td>Foot Radius</td>
<td>${\pi \over \varphi^2}$</td>
<td>$~22.5$</td>
</tr>
</tbody>
</table>
<h3>Placing The Handles</h3>
<p>In this section, we will show how the handles are created. The mathematics needed for this willl get a little more complex, and may not be interesting for everyone. However, we believe it is very important to account for this construction clearly, since it shows with undeniable clarity, just how complex and interrelated the design of the object is, and we want to present the mathematics as a concrete proof for this.</p>
<p>If you are not interested in the equations, you can skip to immediately after the vector construction, where we will return to talking about what it means, in plain english.</p>
<p>The geometry of the handles is constructed from an interaction between two of the 1 radian arcs, introduced earlier. The first of these arcs is extended from the center intersection point of the R(3) Flower Of Life grid:</p>
<p><img alt="Illustration 9" src="../images/a1_plate_9.webp" /></p>
<p>The second is created by constructing a $1$ radian arc, that is tangent to the upper circle in the $R(4)$ Flower Of Life grid:</p>
<p><img alt="Illustration 10" src="../images/a1_plate_10.webp" /></p>
<p>With these two arcs defined (originating from the $R(3)$ and $R(4)$ Flower Of Life grids), and an $R(-4)$ circle, we now have all the constraints necessary to construct the geometry of the handles, which can be expressed as a polar vector, $V_h$:</p>
<p><img alt="Illustration 11" src="../images/a1_plate_11.webp" /></p>
<p>
<script type="math/tex; mode=display">V_h = \begin{bmatrix} \ell \cr \theta \end{bmatrix}</script>
</p>
<center><i>Where</i></center>
<p>
<script type="math/tex; mode=display">\theta = {1 \over 2}~~~\land~~~\ell = {{{R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)} \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2}) + {{R(-4)} \over {sin({\pi \over 2}-1)}}</script>
</p>
<center><i>Because</i></center>
<p>
<script type="math/tex; mode=display">d = {1 \over 2} \times R(3) + {\sqrt(3) \over 2} \times R(3)~~\land~~ y = {R(4) \over \sin({1 \over 2})} \implies a = y - d \implies</script>
<script type="math/tex; mode=display">a = {R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)</script>
<script type="math/tex; mode=display">\ell_1 = {a \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2})~~\land~~l_2 = {{R(-4)} \over {sin({\pi \over 2}-1)}} \implies \ell = \ell_1 + \ell_2</script>
<br/><br/>
The remaining features of the handles are accounted for as follows:</p>
<ul>
<li>The angle of the straight part of the lower section of the handle is defined by the first $1$ radian arc, and is thus $\frac{1}{2}$ radian.</li>
<li>The curvature blending the straight part of the lower section of the handle to the body is defined by an arc of an $R(-13)$ circle. The $1 \over 2$ radian angle is tangent to this circle.</li>
<li>As best as we can currently tell, the straight part of the upper section of the handle has been intentionally configured to an angle of $\varphi \over 10$ radians.</li>
<li>The curvature blending the straight part of the upper section of the handle to the body is defined by an arc of an $R(-12)$ circle. The $\varphi \over 10$ radian angle is tangent to this circle.</li>
<li>An astute observer will notice that a very small outward anomaly ($\sim0.3~mm$) exists on the upper handle curvature. This feature is accurately accounted for, by adding a slightly offset $R(-5)$ circle to the geometry.</li>
</ul>
<p>We have <strong>not</strong> been able to simplify this construction any further than the above, and believe it is most likely the optimal configuration for creating the handles, in terms of simplicity. The implications of this are <strong>substantial</strong>.</p>
<p>The physical geometry, that we observe in the finished object, is <em>essentially created as the solution to a highly interrelated set of equations</em>, that span the entire object, in multiple dimensions and configuration spaces.</p>
<p>We consider it highly likely that the <em>entire object</em> can indeed be represented as <strong>a single equation</strong>.</p>
<h2>Conclusions</h2>
<p>It is our conviction that our current model demonstrates, with overwhelming certainty, that a high degree of sophisticated design principles, and intricately interlinked relations and design constraints are present in the object.</p>
<p>While we cannot tell with certainty, if the way that we have <em>described</em> the design exactly matches that of the original creators, we are confident that our reverse-engineered model does indeed represent the <em>actual</em> mathematics, interrelations and constraints present in the original design.</p>
<p>While there is still much to learn about this fascinating artefact, the knowledge and data we already have, allows us to draw some conclusions with confidence.</p>
<h3>On Chance Occurrence</h3>
<p>Could an object like this simply have been a chance happening? A rare coincidence of random alignment?</p>
<p>No. Proposing that would be completely magical and superstitious thinking.</p>
<p>Maintaining absolute precision and consistency by chance, between all the interlinked systems present in the object, is - simply put - an impossibility. Waking up one morning, with an entirely new universe sprouting from quantum fluctuations in your left nostril, would be a significantly more likely event.</p>
<p>It might be possible, by <em>extreme luck</em> to have an object randomly show the value of $\pi$ or $\varphi$ somewhere, but remember that <em>all</em> systems in this object are <em>tightly interrelated</em>! Changing one parameter would throw <strong>everything</strong> else off. Here, at least 15 levels of interrelation exists, and they are all precisely in harmony, down to microscopic scales.</p>
<p>This object was meticulously and carefully designed by a human being, with incredible levels of skill, insight and artistry. Of that, there can currently be no doubt.</p>
<h3>Required Design Capabilities</h3>
<p>What kind of system would have been necessary to represent the abstract design of the object, before its manufacture? Could the object have been designed by analogue means, for example as a drawing on paper, which was then used to guide the manufacture?</p>
<p>To attempt a satisfactory answer to this question, we will need to carefully consider a multitude of factors. A future article will delve into the full depth, that this question deserves, but we feel that our initial conclusions on the matter still bear touching upon here, even if only briefly.</p>
<p>When looking at the <em>scales</em> across which precision was maintained in this object, some interesting problems arise. The smallest radii - identified so far - in the object are only around $1 mm$, but they scale perfectly, through the radial traversal function, with precision in the micrometers, to even the largest radii in the object (of around $63mm$).</p>
<p>Carrying out this sort of scaling on any kind of analogue medium, would introduce errors immediately, that would only accumulate over successive radial traversals. Even our modern, finely tipped drawing tools, working on the smoothest of paper would create <em>errors</em> close to the <em>full radii</em> of some of these circles and features.</p>
<p>To account and control for such errors, the designer would have to scale up the blueprint to proportions of <em>at least</em> several meters, which of course just raises further questions of how to transfer it back down again, to the decidedly <em>petite</em> dimensions of the actual object.</p>
<p>Perhaps the most plausible way to represent this object on an analogue medium, would be to describe it geometrically and mathematically. This is decidedly possible, and one could even make sketches along the way, to show an <em>approximation</em> of the final design. Our civilization has known about the required mathematics to do this since approximately 500 CE.</p>
<p>But being faced with the prospect of then transferring this design through a manufacturing process, to a physical object, we are put squarely back to the starting point, since we now need to produce <em>some sort</em> of analogue template that can guide or control the manufacturing process.</p>
<p>While the point I will now make certainly necessitates a full, and very formal substantiation, I feel it would simply be cowardly of me, not to bring this argument to its logical conclusion, and stand by where the evidence and logic leads.</p>
<p><strong>As far as we know, no human beings, trained animals or naturally occurring phenomenae, modern or ancient, take mathematical formulae and equations as input, and produce lathe-operating motions as outputs.</strong></p>
<p>For all of the knowledge and insights we have accumulated over the ages, we know of exactly one, and <strong>only</strong> one <em>category</em> of things capable of such behaviour: The kind of thing, that we refer to as a <em>turing machine</em>. A device capable of taking input, holding state, performing operations on held states, according to pre-determined principles, and producing output.</p>
<p>They come in many shapes and sizes, and can be constructed mechanically, electronically and even pneumatically or hydraulically. And you are most likely using one right now, to read this article.</p>
<p><em>We</em> call this class of device <em>a computer</em>, and no plausible way of representing, operating on, or manufacturing the design of this artefact exists, without having access to one such.</p>
<h3>Required Manufacturing Capabilities</h3>
<p>When comparing the output of our generative model to the physical object, we can begin to get some rough insights into the fabrication capabilities of the creators of the object. From only looking at the observable facts, we can conclude the following:</p>
<ul>
<li>Since we have no known records of, or even ideas about, how an additive manufacturing process with granite could work, we are assuming a subtractive process (for example cutting, carving, grinding, ablating, and so on).</li>
<li>The creators of the object were able to consistently hold tolerances of around $30\mu m$ for subtractive processes in granite. In many places we see tolerances of less than $10\mu m$.</li>
<li>Tools used to substract material from the granite blank must have been held at incredibly high levels of axial stability to reach these tolerances.<ul>
<li>Technologically, this is <strong>only</strong> possible to achieve with ultra smooth and precise rods, bearings, ball-screws and similar mechanisms.</li>
</ul>
</li>
<li>Incredibly precise guiding mechanisms <strong>must</strong> have been employed to to control the substractive process, since the finished object conforms to the abstract design to microscopic levels of precision.<ul>
<li>Again, this <strong>absolutely requires</strong> mechanical technology of ultra high quality, rivalling or surpassing what we are able to produce today.</li>
</ul>
</li>
<li>We can observe no perceivable loss in calibration or positioning across curves of different radii, or their positional interrelation to each other, which most likely means that the creators of the object were able to machine it in a <em>single pass</em>, or could somehow carry out tool-changes with practically no loss of positional calibration.</li>
<li>The placement of the exterior features of the object, and the maintenance of precision across the areas between the handles means, that a simple rotational process would have been insufficient to produce the geometry we see.<ul>
<li>The most simple manufacturing process we have been able to come up with for the object, would require 5 axis of freedom in the system guiding the subtractive tool.</li>
</ul>
</li>
</ul>
<h3>Conclusions In Summary</h3>
<p>Based on the best understanding we currently have of the object, and on the knowledge of normal fundamental limits of physics and laws of nature, we have to conclude:</p>
<ul>
<li>That this object was fabricated on a highly sophisticated subtractive manufacturing system, from a solid piece of granite.</li>
<li>That the manufacturing system would require, <em>at the very least</em>, sophisticated mechanical technology and high-precision components.</li>
<li>That the manufacturing system would necessarily have been guided by an automated control system, which could read the design as input, and produce the required motions as output.</li>
<li>That a turing machine, of considerable sophistication, would most likely have been employed to create and operate on the design, and to finally transfer it to the manufacturing system.</li>
</ul>
<p>There is no way, in which we can attribute the production of this artefact, to anyone who do not possess, <em>at minimum</em>, the level of technological sophistication and capabilities mentioned above. This raises some very interesting questions regarding the origin of the object, which we hope to be able to explore in future work.</p>
<h3>Future Work</h3>
<p>We hope that a number of similar objects (of which there are thousands, in museums around the world) can be scanned with the same, or better, scanning technology, so that a body of work can be built up around the analysis of these remarkable artefacts.</p>
<p>With the analytical tools and technologies we have available today, we stand at the beginning of a new era of inquiry into our past and shared heritage. I can imagine few things more valuable, than deepening the understanding of our collective origins, as a species, and as individuals.</p>
<p>Only by open, critical and honest scientific inquiry, working from first principles anchored in concrete and verifiable data, can the deepest and most obscured echoes of our shared past be brought into the light of day once more.</p>
<p>We must allow the observable facts, the <em>givens</em> that we have, to speak <strong>without prior interpretation</strong>, even if the conclusions risk temporarily upsetting a prior understanding.</p>
<p>In the scientific endeavour, <strong>all</strong> theories are provisional, and must yield when a simpler one, that better fits the evidence, can be constructed. If this fundamental tenet ceases to hold primacy, science ceases to be science, and instead degrades into dogma.</p>
<p><br/><center><big><big><big><big>𓏜 𓂭</big></big></big></big></center></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,346 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Abstractions Set In Granite | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta property="og:image" content="https://unsigned.io/images/asig_post.webp">
<meta property="og:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta property="og:title" content="Abstractions Set In Granite">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/articles/2023_03_17_Abstractions_Set_In_Granite.html">
<meta name="twitter:title" content="Abstractions Set In Granite">
<meta name="twitter:description" content="This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, our CAD reconstruction, and some remarkable insights into the design of the object.">
<meta name="twitter:image" content="https://unsigned.io/images/asig_post.webp">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
//tex2jax: {inlineMath: [['$','$'], ['\(','\)']]}
tex2jax: {inlineMath: [['$','$']]}
});
</script>
<script type="text/javascript" async src="../scripts/mathjax/MathJax.js?config=TeX-AMS_CHTML"></script>
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2023-03-18 7:37:03</div>
<h2>Update: September 16th, 2025</h2>
<p><strong>I was wrong here!</strong> High-precision artefacts, and the Radial Traversal Pattern revisited:</p>
<p>When originally released, this article proposed embedded patterns and mathematical ratios in the most precise of the supposedly ancient Egyptian artefacts in the private collection of Adam Young (now running the company "Artifact Foundation"). However, recently <a href="https://arcsci.org/articles/revisiting_old_findings.html">this article on ArcSci.org</a> has refuted some of these claims, while confirming others. </p>
<p>While the discovery of the embedded $\pi$ and $\varphi$ ratios have now been convincingly substatiated, the existence of the Radial Traversal Pattern has been comprehensively, unequivocally and <strong>definitively</strong> refuted and dismissed. The proposed pattern <em>was</em> indeed a confirmation trap fluke - unquantifiable <em>even</em> within the extraordinary precision envelope of the object. I applaud the comprehensive, rigorous and on-point analysis, and I completely accept the refutation as valid.</p>
<p>This changes the probability calculation of this object substantially.</p>
<p>Back in 2023, I initially witheld judgement as to authenticity of the PV001 object. With the limited information available, I found it impossible to ascertain its authenticity, but simply shared my findings with the clear belief that it was important to investigate it further.</p>
<p>But given the overall picture of everything we now know, and the demonstrably horrible track-record of the "Artifact Foundation", I cannot escape openly stating my current personal opinion, as to the authenticity of this "artefact":</p>
<ul>
<li>The object itself, or at least its current form, is <strong>definitely</strong> not 5,000 years old.</li>
<li>It is either a modern replica, contemporary piece, or:</li>
<li>It was acquired as an ancient article, but later reworked to achieve its extraordinary qualities and features.</li>
</ul>
<p>For transparency and the full history of everything, I will not make corrections in the original article, but instead include this preface so it is clear what can be considered valid observations and what cannot.</p>
<hr />
<h2>Introduction</h2>
<p>This article will describe the preliminary results of our ongoing analysis of the Granite Artefact scan data, released on February 19th, 2023, by the team at <a href="https://unchartedx.com/site/2023/02/19/new-video-updates-to-the-vase-scan-responses-and-the-stl-file/">unchartedx.com</a>. For an introduction to the object itself, and some more context around how it was digitised, please see the first few paragraphs of my <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial analysis</a>.</p>
<p><img alt="Illustration 0" src="../images/a1_plate_0.webp" /></p>
<h3>Authors</h3>
<p>This article is written by Mark Qvist. The analysis and modelling work required to produce it has been the product of a joint effort between myself, and another engineer. For professional reasons, she currently wishes to remain unnamed. All mentions of "we" in this article refer to us as the authors. Whenever the <em>I</em> pronoun is found, it is used to signify an opinion, observation or conclusion made by myself alone.</p>
<h3>Preface</h3>
<p>Since getting access to the data, we have worked to gain a better understanding of this remarkable object, and we have been making some significant headway.</p>
<p>There is still much to learn, but we would like to share what we know so far. We could in no way have anticipated what came to light in this investigation, and just how extraordinary this object is.</p>
<p>While we cannot yet make any <em>direct</em> conclusions, as to who made this object, or when it was created, we now at least know a great deal more about the capabilities of the creators of the object.</p>
<p>This is a <em>long</em> article. If you want to ascertain wheter it is worth your time, you can skip ahead and read the conclusions first, which I am sure will catch your attention, if it wasn't already focused. If you have the patience though, I will recommend taking everything in its laid out order; there is a lot to unpack here.</p>
<h3>Some Math Included</h3>
<p>We will be using some mathematics to illustrate various points, but we have strived to keep it as simple to follow as possible. With a basic understanding of geometry and algebra, it should be possible to follow most of it. There will be a few sections where the equations get a little more involved. This is necessary to show that our model is valid, but these sections are not essential to the overall understanding of the article.</p>
<p>We will do our best to make the main points stand out even for those not interested in the math and equations. So if those parts doesn't mean anything to you, feel free to skip them.</p>
<p>In this article, we use <em>radians</em>, since it is a <em>universal</em> way to describe angles. Radians are based on the fundamental ratio between the radius and circumference of circle, whereas degrees is just an arbitrary subdivision of a circle into 360 pieces. As such, it is not based on any fundamental mathematical ratios or constants, and not really useful in an analysis such as this. Radians are useful because they show the underlying mathematical relations more clearly.</p>
<p>Radians may lead to some unease, if you are not familiar with them. Fear not, though! It is actually simpler, and much more intuitive than using degrees. All you need to know is that there is $2\times\pi$ radians in a circle, and $\pi$ radians in a triangle. For example, a $45^\circ$ angle is $\pi \over 4$ radians. You can describe any angle by simple fractions of $\pi$.</p>
<h2>Methodology</h2>
<p>This section will describe the methodology we employed while working with the object, and offer some context to the choices we made in analysing it, and in our design reconstruction.</p>
<h3>Initial Findings</h3>
<p>Shortly after the scan data of the granite artefact was released, I carried out an <a href="https://unsigned.io/log/2023_02_24_Initial_Geometric_Analysis_of_the_Pre_Dynastic_Vase.html">initial geometrical analysis</a> of the object. This analysis showed very high levels of geometrical alignment in the object, even between exterior and interior features, as well as specific and consistent choices of angles and dimensional ratios.</p>
<p>These findings very clearly demonstrated, that there was a <em>design</em> behind the finished artefact, and that it did not just randomly appear, out of some intuitively guided fabrication process.</p>
<h3>Units, Measures &amp; Notes</h3>
<p>In this article, absolute measurements are given in <em>millimeters</em> ($mm$) or <em>micrometers</em> ($\mu m$), unless otherwise noted. Angles are specified in radians. All measurements mentioned here, have been taken on the high-resolution mesh data from the structured-light scan of the object.</p>
<p>Measurements were made in the application <em>Blender</em>, and parametric CAD models were created using <em>OpenSCAD</em>. The SCAD source code for our model is <a href="https://unsigned.io/dl/artefact_reconstruction.scad">available for download here</a>. We dimensioned the object in millimeters, and performed measurements by meticulously aligning measurement tools to vertices and polygonal plane intersections. For larger features we measured by manually working towards a best-fit placement of a measurement primitive, by the minimisation of the integral of the amplitudes of deviation over the measured feature.</p>
<p>All graphics and CAD renders presented in this article are ortographic projections. A simulated texture and lighting model has been applied in the renders, to make it easier to visually distinguish curvature and features of the object. This simulated texture is for illustrative purposes, and does not represent the real surface appearance of the object.</p>
<h3>Motivations For This Work</h3>
<p>The initial findings established the motivation for exploring the object more deeply. The approach taken in this work, has been to attempt to create a mathematically consistent and self-constrained model, that could describe all major features of the physical object.</p>
<p>It has been our theory, that if such a model indeed exists, and can be shown to map well to the actual object, it could allow us to learn a lot more about what processes and principles the designers of the object had access to, and what knowledge they held. By analysing the <em>simplest</em> way to create a satisfactory design for the object, we can get a good idea about the <em>minimum</em> levels of capabilities the designers must have had.</p>
<p>While I am currently the one collating our findings in this article, the work has been a shared effort, and is comprised of the input of a group of people. Without that, we would not have gotten as far in our understanding, as we are now.</p>
<h3>Constrained Design Hypothesis</h3>
<p>When designing an object, be that functional or purely aesthetic, one can take a multitude of approaches. It is of course possible for the designer to simply place various features of an object intuitively, without any underlying rules, constraints or principles, but practically all great design, art and architecture follow sets of internally consistent principles.</p>
<p>Various systems of design principles have been known since antiquity, and when beauty, completeness and harmony in form is experienced, it is often exactly because of the skillfull application of such principles. From the preliminary analysis of the object, we deemed it warranted to investigate whether such a set of principles had been employed in its creation, and if so, to what extent.</p>
<p>An important data point, that can be extracted through this approach, is the degree to which different design patterns are locked together to form <em>constraints</em>. In design work, such constraints are commonly used to define various aspects of the individual features, that make up the finished object.</p>
<p>If we can recreate the object from a relatively simple set of design primitives and constraints, which exhibit low degrees of interrelation, or if indeed no such relations even exist, and all features appear intuitively or randomly placed, this would indicate an object of a relatively low level of design complexity, or one that could have been made entirely from an intuitive process.</p>
<p>Contrarily, if we consistently see features defined by complex interrelations between different principles, this indicates a high level of design complexity, and that a higher level of abstraction was needed; not only in creating the design, but also in transferring it through the production method, to the finished object itself.</p>
<h3>The Parametric Model</h3>
<p>To explore what kinds of design principles were used in the creation of the object, we started out by measuring and mapping as many features of the object as possible, and looking for repeating patterns of placement and dimensioning, and repeating or mathematically significant ratios.</p>
<p>While we initially did not understand the underlying principles of what we found, it was clear that patterns and persistent ratios were present in overwhelming abundance throughout the object. Not only were they present, but they exhibited such a high degree of regularity, that we suspected them to be derived from well-defined mathematical formulae.</p>
<p>This led us to attempting something, that really should not have been possible, when dealing with a supposedly ancient artefact, made from granite, of all things: We decided to experimentally build a CAD model that would exclusively use mathematical concepts to dimension and place the features of the object, and use no tuning or arbitrary positional adjustments. All features should be placed and dimensioned by interrelation to each other.</p>
<p>We also limited the initial margin-of-error tolerance of the model to $75~\mu m$, in terms of how well it should map to the features of the actual object. This margin-of-error tolerance was, amongst other criteria, used to discern whether an attempted modelling of a particular feature should be considered for inclusion in the model, or rejected.</p>
<p><strong>I find it timely to stress how completely ludicrous this actually is</strong>. We are dealing with a stone vessel of supposed ancient origin, and are now proposing, that a purely mathematical CAD model, should somehow map to the actual object within a tolerance of less than 75 <em>thousands</em> of a <em>millimeter</em>.</p>
<p>Yet, I will let the results speak for themselves. Additionally, the CAD model, and all of its constituent equations, are available for verification, for anyone interested in doing so.</p>
<h2>Abstractions Set In Stone</h2>
<p>To arrive at a high-level understanding of how the object is defined, we will first look at some primary principles used in the design, and then describe how they are interrelated to create various features of the object.</p>
<h3>The Radial Traversal Pattern</h3>
<p>The most widely used primitive in the object is the circle. Circles, or arcs thereof, are used to define most of the features of the object, and <strong>all</strong> circular features in the object have radii that are interrelated with incredible consistency and precision.</p>
<p>There is, in fact, one single and elegant equation governing the dimensioning of almost all circles utilised in the design. The few circles not following this pattern have been specifically chosen to display some very significant numbers, which we will get to shortly. But for now, let's look at the radii-determining equation:</p>
<p>
<script type="math/tex; mode=display"> R(n) = \left({\sqrt 6 \over 2}\right)^n </script>
With this equation, we can generate all the relevant radii for shaping the object. We can more easily understand how this equation works, by looking at it geometrically.</p>
<p>Already in our early investigation, we noticed that many features seemed to be related to a certain geometric construction of unit circles, known as <em>The Flower of Life</em>. We also noticed that not just one, but several, of such grids were used. The above equation is the most simple description of how these grids interrelate to each other.</p>
<p>Let's look at two of these interrelated grids, composed of $R(3)$ and $R(4)$ circles. It is important to note, that there is no arbitrary decisions applied to these grids by us. Both their dimensions and positioning, in relation to each other, are determined by the above equation (and we shall see exactly how shortly). With these two grids, we can already define several features of the object:</p>
<p><img alt="Illustration 1" src="../images/a1_plate_1.webp" /></p>
<ul>
<li><strong>A</strong>: The top of the object (<em>deviation: $7~\mu m$</em>)</li>
<li><strong>B</strong>: The maximum extent of the curved part of the upper body (<em>deviation: $13~\mu m$</em>)</li>
<li><strong>C</strong>: The maximum diameter of the body curvature (<em>deviation: $72~\mu m$</em>)</li>
<li><strong>D</strong>: The maximum diameter of the internal cavity (<em>deviation: $161~\mu m$</em>)</li>
<li><strong>E</strong>: The bottom of the object (<em>accurate deviation indeterminable due to irregularity of scan data at lower terminus</em>)</li>
</ul>
<p>The design of the object ascends and descends to and from the various sizes of these <em>Flower of Life</em> grids, by using an elegant geometrical construction:</p>
<ul>
<li>Let us select two of intersection points (<strong>A</strong>) in the $R(3)$ pattern, separated by $1 \over 3$ of a full circle.</li>
<li>We now extend a line from each point, with an angle of ${\pi \over 4}~radians$ ($45 ^\circ$).</li>
<li>At the point where these intersect (<strong>B</strong>), we create the center of a new circle, and extend its radius to one of the first two points.</li>
</ul>
<p><img alt="Illustration 2A" src="../images/a1_plate_2a.webp" /></p>
<p>The ratio between the radii of the two circles is now $\sqrt 6 \over 2$. To clearly see why this is, we can place the following triangles in the construction:</p>
<p><img alt="Illustration 2B" src="../images/a1_plate_2_construction.webp" /></p>
<p>Since these two triangles share one equal side, we can use that to show the ratio:</p>
<p>
<script type="math/tex; mode=display">{ \sqrt(2) \over 2 } \times R = {\sqrt(3) \over 2} \times r \implies \sqrt(2) \times R = \sqrt(3) \times r \implies</script>
<script type="math/tex; mode=display">{R \over r} = {\sqrt(3) \over \sqrt(2)} = {\sqrt({3 \over 2})} = {\sqrt 6 \over 2}</script>
By the continuation of this pattern, we arrive at the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and thus the radii used in the object can be created:</p>
<p><img alt="Illustration 4A" src="../images/a1_plate_4.webp" /></p>
<p>Since this pattern is used extensively in the object, we will refer to this radial traversal function as $R(n)$ in the rest of this article.</p>
<p>With this elegant construction, we can account for the majority of the circular features in the object. All of the circles created with this function map to the actual radii of the features of the object with incredible precision.</p>
<p>For each of the radii marked in the graphic below, we found the place where the object deviated <em>the most</em>, from the mathematically pure representation of the $R(n) = \left({\sqrt 6 \over 2}\right)^n$ function, and collated these statistics across all observed radii:</p>
<ul>
<li>Minimal radial deviation is $3~\mu m$</li>
<li>Maximal radial deviaton is $68~\mu m$</li>
<li>Mean radial deviation is $16.25~\mu m$</li>
<li>Median radial deviation is $9~\mu m$</li>
</ul>
<p>Please note, that most radii (even those exhibiting local deviations above the mean) have areas that are, in any meaningful sense of the word, perfect. In many places, the deviation is so small, that we cannot say with certainty whether the deviation is due to "imperfections" in the object, or inaccuracies in the scan. All radii in the following illustration are generated by the $R(n)$ function, and are therefore tightly interrelated:</p>
<p><img alt="Illustration 4B" src="../images/a1_plate_4b_montage.webp" /></p>
<p>To see this level of <em>consistency</em> of precision across just two or three different radii, created from a purely mathematical function, would be astonishing. To see it <em>completely consistently</em>, to <em>microscopic precision</em>, across $12$ different radii, measuring from just $1.1~mm$, up to $42.2~mm$, in a granite artefact, is more or less unfathomable.</p>
<h3>The 1-Radian Arc</h3>
<p>In addition to the radial traversal pattern, we have identified another recurring design principle. The extension of arcs of exactly $1$ radian, locked into configuration with circles created from the radial traversal function, is also used to construct several features of the object.</p>
<p>The part of the body above the handles is composed of two primary regions. The region immediately above the handles exhibits a slight curvature, while the upper region is perfectly conical. This configuration of features can be defined by extending an arc of exactly $1$ radian so that the arc intersects with the $R(3)$ circle defining the maximum extents of the upper body curvature.</p>
<p><img alt="Illustration 5" src="../images/a1_plate_5.webp" /></p>
<p>Placing the arc, so that its lines are tangent to the $R(3)$ circle, perfectly maps the conical region (<strong>A</strong>). And by its intersection with the circle, also marks the point (<strong>B</strong>) where the curved region and conical region meet. The maximum deviation of the conical region from the $1$ radian angle is a mere $37~\mu m$.</p>
<p>As we will see later, this $1$ radian arc is also used to position and dimension the handles.</p>
<h3>Incorporation of π</h3>
<p>The $R(n)$ function, discussed above, still leaves a few circular features unaccounted for, so let us explore how these were dimensioned. The opening into the internal cavity of the object has an interesting feature, in that it tapers slightly inward to a point, and then slightly outward again, before blending with the rest of the internal cavity.</p>
<p>Even this extremely delicate feature is perfectly described by the curvature of an $R(6)$ circle. Though the curvature is very slight, it is sufficient to create a clearly defined minimum for the internal radius of the opening $(Ri)$. Likewise, an external maximum diameter $(Do)$ is clearly definable from the curvature on the lip exterior.</p>
<p><img alt="Illustration 6" src="../images/a1_plate_6.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Ri} = { 58.9322 \over 18.7391 } = 3.14488 \approx \pi</script>
<script type="math/tex; mode=display">\Delta = \left({{Do \over Ri} \over \pi} - 1\right) \times 100 = 0.1046\%</script>
</p>
<p>As we can see, the difference between the ratio existing in the physical object, and a perfect representation of $\pi$ is less than $0.11\%$. In such a small object, this equates to a real-world deviation of approximately $32~\mu m$. This finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>. Furthermore, Marián Marčiš <a href="https://twitter.com/mariusderomanu3/status/1633564138772332549">has also found preliminary evidence</a> of the same ratio incorporated in an object currently displayed at the Cario Museum.</p>
<blockquote>
<p><strong>Here is an experiment to do at home:</strong> Try setting a variable gauge to a gap of $32~\mu m$. You will hardly be able to see <em>light</em> pass through that slit. A human hair is twice as thick as the deviation of the $\pi$ ratio in the object. Even calling this an "imperfection" would seem just <em>slightly</em> arrogant.</p>
</blockquote>
<p>The creators of this object inscribed $\pi$ to perfection at the <em>microscopic scale</em>, in one of the hardest and most difficult materials to work with. I remain doubtful, that it would even be possible to replicate this result with modern CNC machinery.</p>
<h3>Incorporation of The Golden Ratio</h3>
<p>In a similar fashion to the use of $\pi$ above, the golden ratio has also been incorporated in the design of the object. The ratio between the diameter of the narrowest part of the exterior neck $(Dn)$, and the inner radius $(Ri)$ is $\varphi^2$.</p>
<p><img alt="Illustration 7" src="../images/a1_plate_7.webp" /></p>
<p>
<script type="math/tex; mode=display">{Dn \over Ri} = { 49.024 \over 18.7391 } = 2.61613 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left({{Dn \over Ri} \over \varphi^2} - 1\right) \times 100 = 0.072\%</script>
</p>
<p>Again we see a level of precision, that I have a hard time describing with words, so I will let the calculations speak for themselves. In the physical object, this <em>absolutely miniscule</em> deviation from <em>mathematically perfect</em> equates to approximately $20~\mu m$. As with the incorporation of $\pi$, this finding is also in agreement with observations made by <a href="https://twitter.com/mariusderomanu3/status/1634588712804786176">Marián Marčiš</a>.</p>
<h3>A Gift From The Past</h3>
<p>We also find the golden ratio encoded in the ratio between the outer diameter of the lip $(Do)$ and the radius of the foot $(Rf)$:</p>
<p><img alt="Illustration 8" src="../images/a1_plate_8.webp" /></p>
<p>
<script type="math/tex; mode=display">{Do \over Rf} = { 58.9322 \over 22.5299 } = 2.615733 \approx \varphi^2 </script>
<script type="math/tex; mode=display">\Delta = \left(1-{{Do \over Rf} \over \varphi^2} \right) \times 100 = 0.088\%</script>
The deviation in absolute measurements here is approximately $35~\mu m$.</p>
<p>As a sort of mathematical gift, the designers of the object placed a double equivalence here: Since $Do$ is already produced by $\pi$, the radius of the foot can be more purely described as $Rf = {Ri \times \pi \over \varphi^2}$. Because this creates an equivalence between all four measures, established by fundamental mathematical concepts, the following should be a reasonable extension:</p>
<p>
<script type="math/tex; mode=display">Do = {Ri \times \pi} ~~\land~~ Dn = Ri \times\varphi^2 ~~ \land ~~ Rf = {Ri \times \pi \over \varphi^2}</script>
<script type="math/tex; mode=display">Ri = 1 ~~ \implies ~~ {Do = \pi} ~~ \land ~~ {Dn = \varphi^2} ~~ \land ~~ {Rf = {\pi \over \varphi^2}}</script>
<script type="math/tex; mode=display">\therefore</script>
<script type="math/tex; mode=display">1 = Ri</script>
</p>
<p>I really cannot imagine a more elegant and beautiful way to establish and communicate a base unit of measure. Whoever created this fascinating object wanted us to know what their measurement system looked like, and here it is. Set in stone, in the universal language of mathematics, and preserved through the ages. Absolutely incredible.</p>
<p>Since we do not currently have any better designation, we will refer to the unit of measure used in the design as $U$ (<em>Units</em>). According to our measurements, an approximation to this unit of measure could be:</p>
<p>
<script type="math/tex; mode=display">1~U \approx 18.739~mm</script>
Since we have observed dimensional deviations of between $20\mu m$ and $32\mu m$ in the measurements used to arrive at this number, we do not recommend using the above approximation as a basis for reference outside of this article.</p>
<p>We do, however, see an interesting corellation in this number. The approximation we have arrived at is just a mere $2.07\mu m$ (less than the scan accuracy) away from <em>exactly</em> matching the wavelength of an eloctromagnetic wave, with a frequency of $16~GHz$, propagating in vacuum:</p>
<p>
<script type="math/tex; mode=display">{c \over f} = {299,792,458~m/s \over 16,000,000,000~Hz} = 18.737028625~mm</script>
</p>
<p>We believe this establishes a more clear common reference, since $1~U$ can elegantly be defined as a simple subdivison of the speed of light in a vacuum.</p>
<p>For the purpose of having a shared reference, and thus the ability to talk about this unit without undue confusion, we would like to humbly propose its <em>provisional</em> definition based on the above ratio:</p>
<p>
<script type="math/tex; mode=display">1~U = 18.737028625~mm</script>
</p>
<h3>Original Dimensions Revealed</h3>
<p>With the above information, we are now able to see what the dimension of this object would really have looked like to its creators. Millimeters have a hard time conveying any meaning here, but once we view the dimensions in $U$, we are treated to a very different, and beautiful picture:</p>
<table>
<thead>
<tr>
<th>Dimension</th>
<th>$U$</th>
<th>$mm$</th>
</tr>
</thead>
<tbody>
<tr>
<td>Opening Radius</td>
<td>$1$</td>
<td>$~18.74$</td>
</tr>
<tr>
<td>Height</td>
<td>$32 \over 5$</td>
<td>$~119.9$</td>
</tr>
<tr>
<td>Width</td>
<td>$9 \over 2$</td>
<td>$~84.3$</td>
</tr>
<tr>
<td>Width at Handles</td>
<td>$46 \over 9$</td>
<td>$~95.7$</td>
</tr>
<tr>
<td>Max Lip Diameter</td>
<td>$\pi$</td>
<td>$~58.9$</td>
</tr>
<tr>
<td>Min Neck Diameter</td>
<td>$\varphi^2$</td>
<td>$~49.0$</td>
</tr>
<tr>
<td>Foot Radius</td>
<td>${\pi \over \varphi^2}$</td>
<td>$~22.5$</td>
</tr>
</tbody>
</table>
<h3>Placing The Handles</h3>
<p>In this section, we will show how the handles are created. The mathematics needed for this willl get a little more complex, and may not be interesting for everyone. However, we believe it is very important to account for this construction clearly, since it shows with undeniable clarity, just how complex and interrelated the design of the object is, and we want to present the mathematics as a concrete proof for this.</p>
<p>If you are not interested in the equations, you can skip to immediately after the vector construction, where we will return to talking about what it means, in plain english.</p>
<p>The geometry of the handles is constructed from an interaction between two of the 1 radian arcs, introduced earlier. The first of these arcs is extended from the center intersection point of the R(3) Flower Of Life grid:</p>
<p><img alt="Illustration 9" src="../images/a1_plate_9.webp" /></p>
<p>The second is created by constructing a $1$ radian arc, that is tangent to the upper circle in the $R(4)$ Flower Of Life grid:</p>
<p><img alt="Illustration 10" src="../images/a1_plate_10.webp" /></p>
<p>With these two arcs defined (originating from the $R(3)$ and $R(4)$ Flower Of Life grids), and an $R(-4)$ circle, we now have all the constraints necessary to construct the geometry of the handles, which can be expressed as a polar vector, $V_h$:</p>
<p><img alt="Illustration 11" src="../images/a1_plate_11.webp" /></p>
<p>
<script type="math/tex; mode=display">V_h = \begin{bmatrix} \ell \cr \theta \end{bmatrix}</script>
</p>
<center><i>Where</i></center>
<p>
<script type="math/tex; mode=display">\theta = {1 \over 2}~~~\land~~~\ell = {{{R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)} \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2}) + {{R(-4)} \over {sin({\pi \over 2}-1)}}</script>
</p>
<center><i>Because</i></center>
<p>
<script type="math/tex; mode=display">d = {1 \over 2} \times R(3) + {\sqrt(3) \over 2} \times R(3)~~\land~~ y = {R(4) \over \sin({1 \over 2})} \implies a = y - d \implies</script>
<script type="math/tex; mode=display">a = {R(4) \over sin({1 \over 2})} - \left({{1 \over 2}\times R(3)} + {\sqrt(3) \over 2}\times R(3)\right)</script>
<script type="math/tex; mode=display">\ell_1 = {a \over {sin({\pi \over 2}-1)}} \times sin({\pi \over 2}+{1 \over 2})~~\land~~l_2 = {{R(-4)} \over {sin({\pi \over 2}-1)}} \implies \ell = \ell_1 + \ell_2</script>
<br/><br/>
The remaining features of the handles are accounted for as follows:</p>
<ul>
<li>The angle of the straight part of the lower section of the handle is defined by the first $1$ radian arc, and is thus $\frac{1}{2}$ radian.</li>
<li>The curvature blending the straight part of the lower section of the handle to the body is defined by an arc of an $R(-13)$ circle. The $1 \over 2$ radian angle is tangent to this circle.</li>
<li>As best as we can currently tell, the straight part of the upper section of the handle has been intentionally configured to an angle of $\varphi \over 10$ radians.</li>
<li>The curvature blending the straight part of the upper section of the handle to the body is defined by an arc of an $R(-12)$ circle. The $\varphi \over 10$ radian angle is tangent to this circle.</li>
<li>An astute observer will notice that a very small outward anomaly ($\sim0.3~mm$) exists on the upper handle curvature. This feature is accurately accounted for, by adding a slightly offset $R(-5)$ circle to the geometry.</li>
</ul>
<p>We have <strong>not</strong> been able to simplify this construction any further than the above, and believe it is most likely the optimal configuration for creating the handles, in terms of simplicity. The implications of this are <strong>substantial</strong>.</p>
<p>The physical geometry, that we observe in the finished object, is <em>essentially created as the solution to a highly interrelated set of equations</em>, that span the entire object, in multiple dimensions and configuration spaces.</p>
<p>We consider it highly likely that the <em>entire object</em> can indeed be represented as <strong>a single equation</strong>.</p>
<h2>Conclusions</h2>
<p>It is our conviction that our current model demonstrates, with overwhelming certainty, that a high degree of sophisticated design principles, and intricately interlinked relations and design constraints are present in the object.</p>
<p>While we cannot tell with certainty, if the way that we have <em>described</em> the design exactly matches that of the original creators, we are confident that our reverse-engineered model does indeed represent the <em>actual</em> mathematics, interrelations and constraints present in the original design.</p>
<p>While there is still much to learn about this fascinating artefact, the knowledge and data we already have, allows us to draw some conclusions with confidence.</p>
<h3>On Chance Occurrence</h3>
<p>Could an object like this simply have been a chance happening? A rare coincidence of random alignment?</p>
<p>No. Proposing that would be completely magical and superstitious thinking.</p>
<p>Maintaining absolute precision and consistency by chance, between all the interlinked systems present in the object, is - simply put - an impossibility. Waking up one morning, with an entirely new universe sprouting from quantum fluctuations in your left nostril, would be a significantly more likely event.</p>
<p>It might be possible, by <em>extreme luck</em> to have an object randomly show the value of $\pi$ or $\varphi$ somewhere, but remember that <em>all</em> systems in this object are <em>tightly interrelated</em>! Changing one parameter would throw <strong>everything</strong> else off. Here, at least 15 levels of interrelation exists, and they are all precisely in harmony, down to microscopic scales.</p>
<p>This object was meticulously and carefully designed by a human being, with incredible levels of skill, insight and artistry. Of that, there can currently be no doubt.</p>
<h3>Required Design Capabilities</h3>
<p>What kind of system would have been necessary to represent the abstract design of the object, before its manufacture? Could the object have been designed by analogue means, for example as a drawing on paper, which was then used to guide the manufacture?</p>
<p>To attempt a satisfactory answer to this question, we will need to carefully consider a multitude of factors. A future article will delve into the full depth, that this question deserves, but we feel that our initial conclusions on the matter still bear touching upon here, even if only briefly.</p>
<p>When looking at the <em>scales</em> across which precision was maintained in this object, some interesting problems arise. The smallest radii - identified so far - in the object are only around $1 mm$, but they scale perfectly, through the radial traversal function, with precision in the micrometers, to even the largest radii in the object (of around $63mm$).</p>
<p>Carrying out this sort of scaling on any kind of analogue medium, would introduce errors immediately, that would only accumulate over successive radial traversals. Even our modern, finely tipped drawing tools, working on the smoothest of paper would create <em>errors</em> close to the <em>full radii</em> of some of these circles and features.</p>
<p>To account and control for such errors, the designer would have to scale up the blueprint to proportions of <em>at least</em> several meters, which of course just raises further questions of how to transfer it back down again, to the decidedly <em>petite</em> dimensions of the actual object.</p>
<p>Perhaps the most plausible way to represent this object on an analogue medium, would be to describe it geometrically and mathematically. This is decidedly possible, and one could even make sketches along the way, to show an <em>approximation</em> of the final design. Our civilization has known about the required mathematics to do this since approximately 500 CE.</p>
<p>But being faced with the prospect of then transferring this design through a manufacturing process, to a physical object, we are put squarely back to the starting point, since we now need to produce <em>some sort</em> of analogue template that can guide or control the manufacturing process.</p>
<p>While the point I will now make certainly necessitates a full, and very formal substantiation, I feel it would simply be cowardly of me, not to bring this argument to its logical conclusion, and stand by where the evidence and logic leads.</p>
<p><strong>As far as we know, no human beings, trained animals or naturally occurring phenomenae, modern or ancient, take mathematical formulae and equations as input, and produce lathe-operating motions as outputs.</strong></p>
<p>For all of the knowledge and insights we have accumulated over the ages, we know of exactly one, and <strong>only</strong> one <em>category</em> of things capable of such behaviour: The kind of thing, that we refer to as a <em>turing machine</em>. A device capable of taking input, holding state, performing operations on held states, according to pre-determined principles, and producing output.</p>
<p>They come in many shapes and sizes, and can be constructed mechanically, electronically and even pneumatically or hydraulically. And you are most likely using one right now, to read this article.</p>
<p><em>We</em> call this class of device <em>a computer</em>, and no plausible way of representing, operating on, or manufacturing the design of this artefact exists, without having access to one such.</p>
<h3>Required Manufacturing Capabilities</h3>
<p>When comparing the output of our generative model to the physical object, we can begin to get some rough insights into the fabrication capabilities of the creators of the object. From only looking at the observable facts, we can conclude the following:</p>
<ul>
<li>Since we have no known records of, or even ideas about, how an additive manufacturing process with granite could work, we are assuming a subtractive process (for example cutting, carving, grinding, ablating, and so on).</li>
<li>The creators of the object were able to consistently hold tolerances of around $30\mu m$ for subtractive processes in granite. In many places we see tolerances of less than $10\mu m$.</li>
<li>Tools used to substract material from the granite blank must have been held at incredibly high levels of axial stability to reach these tolerances.<ul>
<li>Technologically, this is <strong>only</strong> possible to achieve with ultra smooth and precise rods, bearings, ball-screws and similar mechanisms.</li>
</ul>
</li>
<li>Incredibly precise guiding mechanisms <strong>must</strong> have been employed to to control the substractive process, since the finished object conforms to the abstract design to microscopic levels of precision.<ul>
<li>Again, this <strong>absolutely requires</strong> mechanical technology of ultra high quality, rivalling or surpassing what we are able to produce today.</li>
</ul>
</li>
<li>We can observe no perceivable loss in calibration or positioning across curves of different radii, or their positional interrelation to each other, which most likely means that the creators of the object were able to machine it in a <em>single pass</em>, or could somehow carry out tool-changes with practically no loss of positional calibration.</li>
<li>The placement of the exterior features of the object, and the maintenance of precision across the areas between the handles means, that a simple rotational process would have been insufficient to produce the geometry we see.<ul>
<li>The most simple manufacturing process we have been able to come up with for the object, would require 5 axis of freedom in the system guiding the subtractive tool.</li>
</ul>
</li>
</ul>
<h3>Conclusions In Summary</h3>
<p>Based on the best understanding we currently have of the object, and on the knowledge of normal fundamental limits of physics and laws of nature, we have to conclude:</p>
<ul>
<li>That this object was fabricated on a highly sophisticated subtractive manufacturing system, from a solid piece of granite.</li>
<li>That the manufacturing system would require, <em>at the very least</em>, sophisticated mechanical technology and high-precision components.</li>
<li>That the manufacturing system would necessarily have been guided by an automated control system, which could read the design as input, and produce the required motions as output.</li>
<li>That a turing machine, of considerable sophistication, would most likely have been employed to create and operate on the design, and to finally transfer it to the manufacturing system.</li>
</ul>
<p>There is no way, in which we can attribute the production of this artefact, to anyone who do not possess, <em>at minimum</em>, the level of technological sophistication and capabilities mentioned above. This raises some very interesting questions regarding the origin of the object, which we hope to be able to explore in future work.</p>
<h3>Future Work</h3>
<p>We hope that a number of similar objects (of which there are thousands, in museums around the world) can be scanned with the same, or better, scanning technology, so that a body of work can be built up around the analysis of these remarkable artefacts.</p>
<p>With the analytical tools and technologies we have available today, we stand at the beginning of a new era of inquiry into our past and shared heritage. I can imagine few things more valuable, than deepening the understanding of our collective origins, as a species, and as individuals.</p>
<p>Only by open, critical and honest scientific inquiry, working from first principles anchored in concrete and verifiable data, can the deepest and most obscured echoes of our shared past be brought into the light of day once more.</p>
<p>We must allow the observable facts, the <em>givens</em> that we have, to speak <strong>without prior interpretation</strong>, even if the conclusions risk temporarily upsetting a prior understanding.</p>
<p>In the scientific endeavour, <strong>all</strong> theories are provisional, and must yield when a simpler one, that better fits the evidence, can be constructed. If this fundamental tenet ceases to hold primacy, science ceases to be science, and instead degrades into dogma.</p>
<p><br/><center><big><big><big><big>𓏜 𓂭</big></big></big></big></center></p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

41
docs/guides.html Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,46 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Using KISS settings in Xastir | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Using KISS settings in Xastir">
<meta name="description" content="The MicroAPRS firmware for MicroModem supports changing AX.25 settings like preamble length, TX tail and others via the KISS protocol, so the host program can easily set these parameters.">
<meta property="og:description" content="The MicroAPRS firmware for MicroModem supports changing AX.25 settings like preamble length, TX tail and others via the KISS protocol, so the host program can easily set these parameters.">
<meta property="og:image" content="https://unsigned.io/images/disable_reset-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2018_03_28_using-kiss-settings-in-xastir.html">
<meta property="og:title" content="Using KISS settings in Xastir">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2018_03_28_using-kiss-settings-in-xastir.html">
<meta name="twitter:title" content="Using KISS settings in Xastir">
<meta name="twitter:description" content="The MicroAPRS firmware for MicroModem supports changing AX.25 settings like preamble length, TX tail and others via the KISS protocol, so the host program can easily set these parameters.">
<meta name="twitter:image" content="https://unsigned.io/images/disable_reset-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-03-28</div>
<h1>Using KISS settings in Xastir</h1>
<p>The MicroAPRS firmware for MicroModem supports changing AX.25 settings like preamble length, TX tail and others via the KISS protocol, so the host program can easily set these parameters. Unfortunately some programs, Xastir in particular, will send a reset to the modem when opening the serial port, and then immediately send the configuration commands.</p>
<p>If your modem is using a bootloader (which allows it to be programmed via avrdude and the Arduino IDE over USB), these configuration commands will end up being read by the bootloader as the modem is starting up, instead of being read by the MicroAPRS firmware, and thus resulting in the parameters never getting set.</p>
<p>Luckily, there is a simple fix for this, if your host program does not allow disabling the resetting. You can simply connect a small resistor between the "VCC" and "DTR" pins on the modem, a value around 100 ohms should do. In this picture I used an 80 ohm resistor.</p>
<p><img src="../images/disable_reset-1.jpg"/></p>
<p>When the resistor is connected, the reset line cannot be activated, and the modem will thus not be rebooted by the host. It's important to note that you will need to take out the resistor if you want to flash another firmware onto the modem, since the flashing process requires a reset signal to be sent to the processor.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,47 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Board support in Arduino IDE | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Board support in Arduino IDE">
<meta name="description" content="It's now easy to add support for all unsigned.io boards in the Arduino IDE! This guide shows you how.">
<meta property="og:description" content="It's now easy to add support for all unsigned.io boards in the Arduino IDE! This guide shows you how.">
<meta property="og:image" content="https://unsigned.io/images/arduino_logo-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2018_04_06_board-support-in-arduino-ide.html">
<meta property="og:title" content="Board support in Arduino IDE">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2018_04_06_board-support-in-arduino-ide.html">
<meta name="twitter:title" content="Board support in Arduino IDE">
<meta name="twitter:description" content="It's now easy to add support for all unsigned.io boards in the Arduino IDE! This guide shows you how.">
<meta name="twitter:image" content="https://unsigned.io/images/arduino_logo-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-04-06</div>
<h1>Board support in Arduino IDE</h1>
<p>It's now easy to add support for all unsigned.io boards in the Arduino IDE! Just go to preferences in Arduino, and under "Additional Boards Manager URLs", add the following URL:</p>
<p><code>http://unsigned.io/arduino/package_unsignedio_UnsignedBoards_index.json</code></p>
<p>If you already have other URLs, separate them with commas. You can now go into "Board Manager", scroll down and install "UnsignedBoards". That's it! The Arduino IDE now has native support for all unsigned.io boards.</p>
<p>Adding the boards to the Arduino IDE in this way also includes any libraries that you might need to use, like LibAPRS and LibRNode.
The library will be updated when new boards are released.</p>
<p>The board support files are based partly on <a href="https://github.com/MCUdude/MightyCore" rel="noopener noreferrer" target="_blank">MightyCore</a> by <a href="https://github.com/MCUdude" rel="noopener noreferrer" target="_blank">MCUDude</a>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,59 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>IP over LoRa: RNode as a wireless NIC | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="IP over LoRa: RNode as a wireless NIC">
<meta name="description" content="While LoRa was not as such designed as an underlying physical layer for IP-based communications, it's still possible to do exactly that. A very handy feature of RNode is that you can attach it to your computer, Rasbperry Pi, or similar, as a generic network interface.">
<meta property="og:description" content="While LoRa was not as such designed as an underlying physical layer for IP-based communications, it's still possible to do exactly that. A very handy feature of RNode is that you can attach it to your computer, Rasbperry Pi, or similar, as a generic network interface.">
<meta property="og:image" content="https://unsigned.io/images/20180701_182856-1-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2018_07_01_using-rnode-as-a-lora-based-wireless-nic.html">
<meta property="og:title" content="IP over LoRa: RNode as a wireless NIC">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2018_07_01_using-rnode-as-a-lora-based-wireless-nic.html">
<meta name="twitter:title" content="IP over LoRa: RNode as a wireless NIC">
<meta name="twitter:description" content="While LoRa was not as such designed as an underlying physical layer for IP-based communications, it's still possible to do exactly that. A very handy feature of RNode is that you can attach it to your computer, Rasbperry Pi, or similar, as a generic network interface.">
<meta name="twitter:image" content="https://unsigned.io/images/20180701_182856-1-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-07-01</div>
<h1>IP over LoRa: Using RNode as a wireless NIC</h1>
<p><em>This post was updated in August 2020 to reflect the now preferred method of using tncattach instead of the old ax-utils tools.</em></p>
<h3>IP over LoRa? Absolutely!</h3>
<p>While LoRa was not as such designed as an underlying physical layer for IP-based communications, it's still possible to do exactly that.</p>
<p>A very handy feature of <a href="https://unsigned.io/rnode/" target="_blank" rel="noopener noreferrer">RNode</a> is that you can attach it to your computer, Rasbperry Pi, or similar, as a generic network interface. It's probably the easiest way to run IP, TCP, UDP and whatever you might fancy over LoRa. As such, you can run more or less any networked application over LoRa.</p>
<p>To do so, you will need to use the <a href="https://unsigned.io/tncattach/">tncattach</a> program I wrote for this purpose. First download and install the program, for this refer to the current installation instructions on <a href="https://github.com/markqvist/tncattach" target="_blank" rel="noopener noreferrer">the tncattach GitHub page</a>.</p>
<p>When tncattach is installed, you must then use the <a href="https://unsigned.io/rnodeconf">RNode Config Utility</a> to put your RNode into TNC mode. Here's an example command:</p>
<p><code>./rnodeconf /dev/ttyUSB0 -T --freq 867000000 --bw 250000 --txp 14 --sf 7 --cr 5</code></p>
<p>The above setup yields an on-air bitrate of 10.9 kbps, and will prepare the device to be used as a generic network adapter. Please make sure to configure a frequency, bandwidth and output power that is suitable for the jurisdiction you are in.</p>
<p>When the RNode has been put into TNC mode, you simply need to run the <code>tncattach</code> program with the options you need to bring up the networking interface. For a complete guide on how to use <code>tncattach</code>, please see <a href="https://unsigned.io/ethernet-and-ip-over-packet-radio-tncs/">this post on the subject</a>.</p>
<p>Generally speaking, a command like the following will create a full ethernet-compatible networking interface with the connected RNode, bring it up and configure an IP address:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d -e -n -m 478 -i 10.99.0.1/24</code></p>
<p>That's it! You now have a wireless Ethernet and IP interface using LoRa modulation up and running!</p>
<h3>Notes on MTU</h3>
<p>The MTU that is set with <code>tncattach</code> is the MTU for the <em>kernel networking interface</em>. That is, it is the MTU for the interface you see when you type for example <code>ifconfig tnc0</code>. The MTU value set here tells the kernel how many bytes of payload data can be squeezed into a <em>single physical-layer packet</em>.</p>
<p>This value should not be set to the direct physical layer MTU of the TNC device! For example, even though OpenModem supports an MTU of 576 bytes, and RNode supports an MTU of 500 bytes, you need to take into account the overhead of any link-layer protocol that is transported with <code>tncattach</code>.</p>
<p>In practical terms, this means that if you just want to use point-to-point IP links with <code>tncattach</code>, the overhead will be 4 bytes. For full ethernet, the overhead will usually be 18 bytes, but if you also need to support 802.11q VLAN tags, it will be 22 bytes. You need to subtract this overhead from the device MTU and pass that value to <code>tncattach</code>.</p>
<p>For OpenModem, correct MTU values to use with <code>tncattach</code> would be 572, 558 and 554 respectively, for point-to-point IP links, Ethernet and Ethernet with VLAN tags.
For RNode, correct MTU values to use with <code>tncattach</code> would be 496, 482 and 478 respectively, for point-to-point IP links, Ethernet and Ethernet with VLAN tags.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,86 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>LoRa packet sniffing with RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="LoRa packet sniffing with RNode">
<meta name="description" content="In the last post, we looked at creating a 15.75 kilometre SSH link with two RNodes acting as wireless network cards. Today, we're going to be a bit more passive. Using just a single RNode, we'll put the device into promiscuous mode to sniff LoRa packets and dump them to a computer.">
<meta property="og:description" content="In the last post, we looked at creating a 15.75 kilometre SSH link with two RNodes acting as wireless network cards. Today, we're going to be a bit more passive. Using just a single RNode, we'll put the device into promiscuous mode to sniff LoRa packets and dump them to a computer.">
<meta property="og:image" content="https://unsigned.io/images/P1060538-1-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2018_07_02_lora-packet-sniffing-with-rnode.html">
<meta property="og:title" content="LoRa packet sniffing with RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2018_07_02_lora-packet-sniffing-with-rnode.html">
<meta name="twitter:title" content="LoRa packet sniffing with RNode">
<meta name="twitter:description" content="In the last post, we looked at creating a 15.75 kilometre SSH link with two RNodes acting as wireless network cards. Today, we're going to be a bit more passive. Using just a single RNode, we'll put the device into promiscuous mode to sniff LoRa packets and dump them to a computer.">
<meta name="twitter:image" content="https://unsigned.io/images/P1060538-1-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2018-07-02</div>
<h1>LoRa packet sniffing with RNode</h1>
<p>In <a title="15 kilometre LoRa SSH link with RNode" href="https://unsigned.io/15-kilometre-ssh-link-with-rnode/">the last post</a>, we looked at creating a 15.75 kilometre SSH link with two <a title="IP over LoRa: Using RNode as a wireless NIC" href="https://unsigned.io/using-rnode-as-a-lora-based-wireless-nic/">RNodes acting as wireless network cards</a>. Today, we're going to be a bit more passive. Using just a single <a title="RNode" href="https://unsigned.io/rnode/">RNode</a>, we'll put the device into promiscuous mode to sniff LoRa packets and dump them to a computer.</p>
<p>For this to work, the RNode must be in host-controlled mode. This is the default, but if you have been following along with the previous examples, now is a good time to use the <a href="https://unsigned.io/rnodeconf">RNode Config Utility</a> to put the device back into host-controlled mode. Remember to replace <code>/dev/ttyUSB0</code> with the serial port your device is attached to.</p>
<p><code>rnodeconf /dev/ttyUSB0 -N</code></p>
<p>The device is now ready to listen for packets! We'll use a program made specifically for this purpose, called LoRaMon. If you already have Python3 and pip installed, you can install LoRaMon very easily with pip:</p>
<p><code>pip install loramon</code></p>
<p>You can also clone it directly from my GitHub repository if you prefer that:</p>
<p><code>git clone https://github.com/markqvist/LoRaMon.git</code></p>
<p>Once you've got it installed, you can run <code>loramon</code> without any arguments to display the usage information.</p>
<pre><code>usage: loramon [-h] [-C] [-H] [-W directory] [--freq Hz] [--bw Hz]
[--txp dBm] [--sf factor] [--cr rate]
[--implicit length]
[port]
LoRa packet sniffer for RNode hardware.
positional arguments:
port Serial port where RNode is attached
options:
-h, --help show this help message and exit
-C, --console Print captured packets to the console
-H, --hex Print out packets as hexadecimal
-W directory Write captured packets to a directory
--freq Hz Frequency in Hz
--bw Hz Bandwidth in Hz
--txp dBm TX power in dBm
--sf factor Spreading factor
--cr rate Coding rate
--implicit length Packet length in implicit header mode
</code></pre>
<p>As you can see, we'll need to specify the serial port the RNode is connected to, and what frequency we will listen on, as well as which LoRa parameters we are using. It's worth noting that the coding rate (--cr flag) is primarily used to specify the coding rate if LoRaMon is used to <em>inject</em> packets. RNode will pick up packets with any coding rate, but will send them out as specified by the parameter.</p>
<p>So let's make LoRaMon listen on 868.1 MHz, with a 125 KHz bandwidth, and spreading factor 7. We just set the coding rate to the default of 5. I'll also make LoRaMon dump packets to the directory "loracapture" by using the -W flag:</p>
<p><code>./loramon /dev/ttyUSB0 -C -W loracapture --freq 868100000 --bw 125000 --sf 7 --cr 5</code></p>
<p>You should see something similar to this:</p>
<pre><code>[2018-07-01 21:13:59] Opening serial port /dev/tty.usbserial-DN03E0FS...
[2018-07-01 21:14:02] RNode connected
[2018-07-01 21:14:02] Firmware version: 1.06
[2018-07-01 21:14:02] Radio reporting frequency is 868.1 MHz
[2018-07-01 21:14:02] Radio reporting bandwidth is 125.0 KHz
[2018-07-01 21:14:02] Radio reporting TX power is 2 dBm
[2018-07-01 21:14:02] Radio reporting spreading factor is 7
[2018-07-01 21:14:02] Radio reporting coding rate is 5
[2018-07-01 21:14:02] RNode in LoRa promiscuous mode and listening
</code></pre>
<p>That's it! The RNode is now in promiscuous mode, and sniffing out LoRa packets. All captured packets will be dumped to the console, and also written to the specified directory.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,52 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Using RNodes With Amateur Radio Software | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Using RNodes With Amateur Radio Software">
<meta name="description" content="If you want to use an RNode with amateur radio applications, like APRS or a packet radio BBS, you will need to put the device into TNC Mode. In this mode, an RNode will behave exactly like a KISS-compatible TNC, which will make it usable with any amateur radio software.">
<meta property="og:description" content="If you want to use an RNode with amateur radio applications, like APRS or a packet radio BBS, you will need to put the device into TNC Mode. In this mode, an RNode will behave exactly like a KISS-compatible TNC, which will make it usable with any amateur radio software.">
<meta property="og:image" content="https://unsigned.io/images/xastir2-e1643321757361-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2020_05_03_using_rnodes_with_amateur_radio_software.html">
<meta property="og:title" content="Using RNodes With Amateur Radio Software">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2020_05_03_using_rnodes_with_amateur_radio_software.html">
<meta name="twitter:title" content="Using RNodes With Amateur Radio Software">
<meta name="twitter:description" content="If you want to use an RNode with amateur radio applications, like APRS or a packet radio BBS, you will need to put the device into TNC Mode. In this mode, an RNode will behave exactly like a KISS-compatible TNC, which will make it usable with any amateur radio software.">
<meta name="twitter:image" content="https://unsigned.io/images/xastir2-e1643321757361-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2020-05-03</div>
<h1>Using RNodes With Amateur Radio Software</h1>
<p>If you want to use an <a href="https://unsigned.io/rnode/">RNode</a> with amateur radio applications, like <a href="https://unsigned.io/aprs-over-lora-with-rnode/">APRS</a> or a packet radio BBS, you will need to put the device into <em>TNC Mode</em>. In this mode, an RNode will behave exactly like a KISS-compatible TNC, which will make it usable with any amateur radio software that can talk to a KISS TNC over a serial port.</p>
<p>Whether you RNode is <a href="https://unsigned.io/shop/product/rnode/">bought from my shop</a>, <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">made from a compatible LoRa board</a> or <a href="https://unsigned.io/how-to-make-your-own-rnodes/">built by yourself</a>, you can use the <a href="https://unsigned.io/rnodeconf">RNode Configuration Utility</a> to change settings on your device, including putting it into TNC mode.</p>
<p>The easiest way to install <code>rnodeconf</code> on your system is by installing the <code>rns</code> package using <code>pip</code>. You probably already have <code>python</code> and <code>pip</code> installed if you use a relatively recent version of Linux or macOS. If not, go and install Python 3 now. When that is done, you can simply install <code>rnodeconf</code> by opening up a terminal and typing:</p>
<pre><code>pip install rns
</code></pre>
<p>After a few seconds, the program should be installed and ready to use. If this is the very first time you are installing something with <code>pip</code>, you might need to close your terminal and open it again, or in some cases restart your computer, before the <code>rnodeconf</code> command becomes available.</p>
<p>With the <code>rnodeconf</code> program installed, you can put your RNode into TNC mode simply by entering the command:</p>
<pre><code>rnodeconf -T /dev/ttyUSB0
</code></pre>
<p>Remember to replace <code>/dev/ttyUSB0</code> with the actual port your RNode is connected to. The program will now ask you for the channel configuration parameters, like frequency, bandwidth, transmission power and so on. It is also possible to specify all the parameters at once on the command line, see the <code>rnodeconf --help</code> for information on how to do this.</p>
<p>That's all there is to it! Your RNode is now configured in TNC mode, and ready for use with amateur radio applications.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,115 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Ethernet and IP over Packet Radio TNCs with tncattach | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Ethernet and IP over Packet Radio TNCs with tncattach">
<meta name="description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta property="og:description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta property="og:image" content="https://unsigned.io/images/tncattach-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2020_05_27_ethernet-and-ip-over-packet-radio-tncs.html">
<meta property="og:title" content="Ethernet and IP over Packet Radio TNCs with tncattach">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2020_05_27_ethernet-and-ip-over-packet-radio-tncs.html">
<meta name="twitter:title" content="Ethernet and IP over Packet Radio TNCs with tncattach">
<meta name="twitter:description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta name="twitter:image" content="https://unsigned.io/images/tncattach-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-01-25</div>
<h1>Ethernet and IP over Packet Radio TNCs with tncattach</h1>
<p><em>If you just want the most minimal-effort setup guide on how to run ethernet and IP over packet radio TNCs, skip down to the section: "One to Many, Many to One".</em></p>
<h3>The Old Ways</h3>
<p>Running IP applications over packet radio TNCs and similar hardware has traditionally been possible, albeit in a somewhat limited form, using the Linux AX.25 kernel modules and utilities like <code>kissattach</code>. Recent bugs have prevented this method from working correctly in new versions of Debian (and derivatives), and there is even a <a href="https://lists.debian.org/debian-hams/2019/07/msg00032.html" target="_blank" rel="noopener noreferrer">discussion about removing kernel AX.25 support altogether</a>.</p>
<p>While the <a href="https://unsigned.io/using-rnode-as-a-lora-based-wireless-nic/" target="_blank" rel="noopener noreferrer">kissattach method of IP</a> networking over packet radio traditionally worked relatively well, it also has the drawback of having to encapsulate everything in AX.25 frames, and thus not supporting standard ethernet, while incurring overhead that is entirely unnecessary for IP networking.</p>
<h3>A Cleaner Solution</h3>
<p>With all that in mind, I found it was probably time to offer an alternative, so I wrote <a href="https://unsigned.io/tncattach/">tncattach</a>. It's a small program that replaces the functionality from kissattach, and doesn't require any special kernel modules.</p>
<p>With <code>tncattach</code> you can attach any KISS-compatible TNC as a fully ethernet-compatible network interface in Linux. It also supports more "lightweight" tunnel interfaces, for point-to-point links (where you don't need the overhead of ethernet). And it of course fully supports both <a href="https://unsigned.io/rnode/">RNode</a> and <a href="https://unsigned.io/openmodem/">OpenModem</a>.</p>
<p>After writing <code>tncattach</code>, I optimised the buffering and queues in the device firmwares, so be sure to update your RNode to at least version 1.16, and your OpenModem to version 1.05 or above for the best results.</p>
<p><img src="../images/tncattach.jpg"/></p>
<h3>Creating an interface with tncattach</h3>
<p>To create an interface with tncattach, you will first need to download the program to your system. Please read <a href="https://github.com/markqvist/tncattach">the download and install instructions here</a>.</p>
<p>For the sake of this tutorial, we will go through creating two different setups, first a point-to-point link between two devices, and next a point-to-multipoint setup that can support many individual devices communicating on the same channel.</p>
<p>The <code>tncattach</code> program offers a range of options to be given on the command line, and I'd suggest you read about them by entering the command:</p>
<p><code>tncattach --help</code></p>
<p>I won't go over them all here, but I will explain the importance of some of them as we move through the tutorial.</p>
<p>It's also worth noting, that if you are using tncattach with <a href="https://unsigned.io/rnode/">RNodes</a>, you should put them into TNC mode with the <a href="https://github.com/markqvist/rnodeconfigutil/" target="_blank" rel="noopener noreferrer">rnodeconf</a> program <em>before</em> running tncattach, as tncattach will not configure radio parameters, but expects the hardware to be ready to receive and transmit when it attaches.</p>
<h3>Point-to-Point Links</h3>
<p>For <code>tncattach</code> to create an interface, it needs to know at minimum what serial port the TNC is connected to, and what the baud-rate of the port is. For the rest of this tutorial, I will assume that a TNC is connected to each system, and available on serial port /dev/ttyUSB0, using a baud-rate of 115200. A minimal command for achieving this could look like:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200</code></p>
<p>Which will create and bring up a point-to-point interface on our system:</p>
<pre><code>$ ifconfig
tnc0: flags=337&amp;lt;UP,POINTOPOINT,RUNNING,PROMISC&amp;gt; mtu 329
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>Great! We actually have a usable, although unconfigured interface. In most cases, we probably want to specify a few options, though. Let's enable the built-in IPv6 filter, so we don't spam the channel with router solicitations and similar, and also tell <code>tncattach</code> that we will manually bring up the interface after creation, which is useful when making point-to-point links.</p>
<p>The default MTU of 329 bytes should work on almost all TNCs, but in most cases it can be increased. Let's assume the connected TNC is an OpenModem, which supports an MTU of 576 bytes. We need to subtract any framing overhead from that, since that is the raw packet MTU of the device. For <code>tncattach</code> point-to-point interface the framing overhead is 4 bytes. For ethernet interfaces it is usually 18 bytes, but can be as high as 22, if you want to support VLAN tagging. So as a rule of thumb, subtract 4 bytes for point-to-point links and 22 bytes for ethernet links from the TNCs MTU. Aplpying this, we get an mtu of 572 bytes for OpenModem.</p>
<p>As a last consideration, we'll tell <code>tncattach</code> to daemonize it's process after creating the interface, so it will run in the background as a system process. This is achieved with the <code>-d</code> switch.</p>
<p>We can now put the above considerations together into the following command:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d --noipv6 --noup --mtu 572</code></p>
<p>This will create the interface <code>tnc0</code> as a point-to-point interface, but it will not yet be active. We'll configure the point-to-point link with 10.0.0.1 being the local IP address, and 10.0.0.2 being the remote address, and bring the interface up:</p>
<p><code>sudo ifconfig tnc0 10.0.0.1 pointopoint 10.0.0.2</code></p>
<p>The interface is now up and running, and ready to communicate with the remote end:</p>
<pre><code>$ ifconfig
tnc0: flags=4305&amp;lt;UP,POINTOPOINT,RUNNING,NOARP,MULTICAST&amp;gt; mtu 496
inet 10.0.0.1 netmask 255.255.255.255 destination 10.0.0.2
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>On the remote system, the configuration commands would be similar, with only the order of IP-addresses changed:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d --noipv6 --noup --mtu 572&lt;br /&gt;sudo ifconfig tnc0 10.0.0.2 pointopoint 10.0.0.1</code></p>
<p>In the next example, we'll setup a network that can support many devices communicating with each other on the same channel, using ethernet, which is suprisingly much simpler than point-to-point links.</p>
<h3>One to Many, Many to One</h3>
<p>Let's assume that we have 10 TNC devices, all connected to the same radio channel, and we want everyone to be able to talk to everyone else. Setting up point-to-point links between everyone will get tedious very fast, so let's use something else: Ethernet.</p>
<p>Setting up ethernet devices with <a href="https://unsigned.io/tncattach/">tncattach</a> is a surprisingly simple one-liner. Assuming we are still using OpenModems, and considering the MTU calculations from above, we can bring up an interface and configure it with the following command:</p>
<p><code>sudo tncattach /dev/ttyUSB0 115200 -d -e --noipv6 --mtu 554 --ipv4 10.91.0.1/24</code></p>
<p>The interface will now be created, have an IPv4 address configured and brought up. In this case we use the <code>-e</code> switch to specify we want a full ethernet device, not just a point-to-point link. We also use the <code>--ipv4</code> switch to specify what IPv4 address the interface should be assigned. Please that you must supply addresses complete with a subnet mask in CIDR notation for the <code>--ipv4</code> switch (hence the <em>/24</em> at the end).</p>
<p>The interface is now up and running, and ready for use:</p>
<pre><code>$ ifconfig
tnc0: flags=611&amp;lt;UP,BROADCAST,NOTRAILERS,RUNNING,ALLMULTI&amp;gt; mtu 554
inet 10.91.0.1 netmask 255.255.255.0 broadcast 10.91.0.255
ether 62:2a:60:89:a2:3a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
</code></pre>
<p>Repeat the same command on any other hosts, replacing the IP address with a unique address in the same subnet for every system, and every system can now talk to everyone else.</p>
<p>Since this is ethernet, you could easily set up a DHCP server on one system, and have that assign IP-addresses, instead of manually specifying them on each system. Or do anything you would normally be able to, really.</p>
<h3>Notes on MTU</h3>
<p>The MTU that is set with <code>tncattach</code> is the MTU for the <em>kernel networking interface</em>. That is, it is the MTU for the interface you see when you type for example <code>ifconfig tnc0</code>. The MTU value set here tells the kernel how many bytes of payload data can be squeezed into a <em>single physical-layer packet</em>.</p>
<p>This value should not be set to the direct physical layer MTU of the TNC device! For example, even though OpenModem supports an MTU of 576 bytes, and RNode supports an MTU of 500 bytes, you need to take into account the overhead of any link-layer protocol that is transported with <code>tncattach</code>.</p>
<p>In practical terms, this means that if you just want to use point-to-point IP links with <code>tncattach</code>, the overhead will be 4 bytes. For full ethernet, the overhead will usually be 18 bytes, but if you also need to support 802.11q VLAN tags, it will be 22 bytes. You need to subtract this overhead from the device MTU and pass that value to <code>tncattach</code>.</p>
<p>For OpenModem, correct MTU values to use with <code>tncattach</code> would be 572, 558 and 554 respectively, for point-to-point IP links, Ethernet and Ethernet with VLAN tags.</p>
<p>For RNode, correct MTU values to use with <code>tncattach</code> would be 496, 482 and 478 respectively, for point-to-point IP links, Ethernet and Ethernet with VLAN tags.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,107 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Installing RNode Firmware on Supported Devices | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Installing RNode Firmware on Supported Devices">
<meta name="description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta property="og:description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta property="og:image" content="https://unsigned.io/images/a801c7a0-b75b-48c5-8ce7-8cb07012fc96-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2022_01_25_installing-rnode-firmware-on-supported-devices.html">
<meta property="og:title" content="Installing RNode Firmware on Supported Devices">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2022_01_25_installing-rnode-firmware-on-supported-devices.html">
<meta name="twitter:title" content="Installing RNode Firmware on Supported Devices">
<meta name="twitter:description" content="If you have a T-Beam or LoRa32 device handy, it is very easy to get it set up for all the things that the RNode firmware allows you to do.">
<meta name="twitter:image" content="https://unsigned.io/images/a801c7a0-b75b-48c5-8ce7-8cb07012fc96-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-01-25</div>
<h1>Installing RNode Firmware on Supported Devices</h1>
<p>Do you have one of the devices available that the RNode Firmware supports? In that case, it is very easy to turn it into a working RNode by using the <code>rnodeconf</code> autoinstaller.</p>
<p>With the firmware installed, you can use your newly created RNode as:</p>
<ul>
<li>A <a href="https://markqvist.github.io/Reticulum/manual/interfaces.html#rnode-lora-interface">LoRa interface for Reticulum</a></li>
<li>A LoRa packet sniffer with <a href="https://unsigned.io/loramon/">LoRaMon</a></li>
<li>A Linux network interface using the <a href="https://unsigned.io/tncattach/">tncattach program</a></li>
<li>A LoRa-based TNC for almost any amateur radio packet application</li>
</ul>
<p>So let's get started! You will need either a <strong>LilyGO T-Beam v1.1</strong>, a <strong>LilyGO LoRa32 v2.0</strong>, a <strong>LilyGO LoRa32 v2.1</strong> or a <strong>Heltec LoRa32 v2</strong> device. More supported devices are added regularly, so it might be useful to check the latest <a href="https://unsigned.io/rnode_firmware/#supported-hardware">list of supported devices</a> as well.</p>
<p>It is currently recommended to use one of the following devices: A <strong>LilyGO LoRa32 v2.1</strong> (also known as <strong>TTGO T3 v1.6.1</strong>) or a <strong>LilyGO T-Beam v1.1</strong>.</p>
<p><img alt="Compatible LoRa devices" src="../images/a801c7a0-b75b-48c5-8ce7-8cb07012fc96-1024x768.jpg" />
<em>Some of the device types compatible with this installation guide</em></p>
<h2>Device Variations</h2>
<p>Devices come with a variety of different LoRa transceiver ICs. Currently devices with an <strong>SX1276</strong> or <strong>SX1278</strong>, <strong>SX1262</strong>, <strong>SX1268</strong> or <strong>SX1280</strong> chip are supported.</p>
<blockquote>
<p><strong>Beware!</strong> Some devices, like the T-Beam, use SiLabs USB chips. These may need <a href="https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers">additional drivers</a> to work well on macOS and Windows. Linux usually has up-to-date drivers pre-installed. The SiLabs driver may also experience conflicts with earlier, pre-installed versions of the driver, causing a <em>resource busy</em> error, which can be fixed by <a href="https://community.platformio.org/t/mac-usb-port-detected-but-won-t-upload/20663/2">removing the old driver</a>.</p>
</blockquote>
<h2>Preparations</h2>
<p>To get started, you will need to download at least version 2.1.0 of the <a href="https://unsigned.io/rnodeconf">RNode Configuration Utility</a>. The easiest way by far is to simply install it with <code>pip</code>, if you already have that installed on your system (if not, go install <code>python</code> and <code>python-pip</code> now, it will come in handy later).</p>
<p>The <code>rnodeconf</code> program is part of the <code>rns</code> package. To install it, open up a terminal and type:</p>
<pre><code>pip install rns
</code></pre>
<p>After a few seconds, you should have <code>rnodeconf</code> installed and ready to go. If this is the very first time you install something with <code>pip</code>, you might need to close your terminal and open it again (or in some cases even reboot your computer), for the <code>rnodeconf</code> command to become available.</p>
<p>We are now ready to start installing the firmware. To install the RNode firmware on your devices, run the RNode autoinstaller using this command:</p>
<h2>Install The Firmware</h2>
<pre><code class="language-txt">rnodeconf --autoinstall
</code></pre>
<p>The installer will now ask you to insert the device you want to set up, scan for connected serial ports, and ask you a number of questions regarding the device. When it has the information it needs, it will install the correct firmware and configure the necessary parameters in the device EEPROM for it to function properly.</p>
<p>If the install goes well, you will be greated with a success message telling you that your device is now ready.</p>
<h2>Verify Installation</h2>
<p>To confirm everything is OK, you can query the device info with:</p>
<pre><code class="language-txt">rnodeconf --info /dev/ttyUSB0
</code></pre>
<p>Remember to replace <code>/dev/ttyUSB0</code> with the actual port the installer used in the previous step. You should now see <code>rnodeconf</code> connect to your device and show something like this:</p>
<pre><code class="language-txt">[20:11:22] Opening serial port /dev/ttyUSB0...
[20:11:25] Device connected
[20:11:25] Current firmware version: 1.26
[20:11:25] Reading EEPROM...
[20:11:25] EEPROM checksum correct
[20:11:25] Device signature validated
[20:11:25]
[20:11:25] Device info:
[20:11:25] Product : LilyGO LoRa32 v2.0 850 - 950 MHz (b0:b8:36)
[20:11:25] Device signature : Validated - Local signature
[20:11:25] Firmware version : 1.26
[20:11:25] Hardware revision : 1
[20:11:25] Serial number : 00:00:00:02
[20:11:25] Frequency range : 850.0 MHz - 950.0 MHz
[20:11:25] Max TX power : 17 dBm
[20:11:25] Manufactured : 2022-01-27 20:10:32
[20:11:25] Device mode : Normal (host-controlled)
</code></pre>
<p>On the hardware side, you should see the status LED flashing briefly approximately every 2 seconds. If all of the above checks out, congratulations! Your RNode is now ready to use. If your device has a display, it should also come alive and show you various information related to the device state.</p>
<p>If you want to use it with <a href="https://reticulum.network">Reticulum</a>, <a href="https://unsigned.io/nomadnet">Nomad Network</a>, <a href="https://unsigned.io/loramon">LoRaMon</a>, or other such applications, leave it in the default <code>Normal (host-controlled)</code> mode.</p>
<p>If you want to use it with legacy amateur radio applications that work with KISS TNCs, you should <a href="https://unsigned.io/using-an-rnode-with-amateur-radio-software/">set it up in TNC mode</a>.</p>
<h2>External Display &amp; LEDs</h2>
<p>If you are using a <strong>T-Beam</strong> device, you can connect an external <strong>SSD1306</strong> OLED display using the following setup:</p>
<ul>
<li>Connect display <strong>GND</strong> to T-Beam <strong>GND</strong></li>
<li>Connect display <strong>Vin</strong> to suitable power-supplying pin on the T-Beam</li>
<li>Connect display <strong>RST</strong> to T-Beam <strong>Pin 13</strong></li>
<li>Connect display <strong>I2C CLK</strong> to T-Beam <strong>SCL</strong> / <strong>Pin 22</strong></li>
<li>Connect display <strong>I2C DATA</strong> to T-Beam <strong>SDA</strong> / <strong>Pin 21</strong></li>
</ul>
<p>If the display does not turn on after powering up the device, it may be using a non-standard I2C address. You can set a custom I2C address for the display using the <code>rnodeconf</code> program with the <code>--display-addr</code> option.</p>
<p>On <strong>T-Beam</strong> devices, you can also connect external RX/TX LEDs to <strong>Pin 2</strong> and <strong>Pin 4</strong>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,121 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>How To Make Your Own RNodes | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="How To Make Your Own RNodes">
<meta name="description" content="This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a commercially purchased board.">
<meta property="og:description" content="This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a commercially purchased board.">
<meta property="og:image" content="https://unsigned.io/images/e4261dcb-49e5-4cd3-856e-c44fb7522b32-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2022_01_26_how-to-make-your-own-rnodes.html">
<meta property="og:title" content="How To Make Your Own RNodes">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2022_01_26_how-to-make-your-own-rnodes.html">
<meta name="twitter:title" content="How To Make Your Own RNodes">
<meta name="twitter:description" content="This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a commercially purchased board.">
<meta name="twitter:image" content="https://unsigned.io/images/e4261dcb-49e5-4cd3-856e-c44fb7522b32-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-01-26</div>
<h1>How To Make Your Own RNodes</h1>
<p>This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a purchased device.</p>
<p>Once you have learned the put together a custom RNode with your own choice of components, you can use these skills to create your own RNode designs from scratch, using either a custom-designed PCB, or simply by mounting your choice of modules in a enclosure or case.</p>
<p>If you haven't already, you migh also want to check out how to <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">install the RNode firmware directly on pre-made LoRa development boards</a>.</p>
<p><img alt="A Homemade RNode" src="../images/e4261dcb-49e5-4cd3-856e-c44fb7522b32-1024x768.jpg" />
<em>A homemade RNode, based on an ESP32 board and a transceiver module, ready for use</em></p>
<p>Since there is not <em>one right way</em> to cut this pie, this article will probably not give the <em>exact</em> steps for the combination of components you choose, but will instead attempt to provide you with the information you need to build RNodes from a wide variety of microcontroller boards and LoRa modules. Generally speaking, you will need three things to construct a working RNode:</p>
<ul>
<li>A supported microcontroller board</li>
<li>A supported transceiver module</li>
<li>A way to mount and connect the two</li>
</ul>
<h3>Preparing the Hardware</h3>
<p>Currently, the RNode firmware supports a variety of different microcontrollers, and more are being added regurlarly. That means that there is a <em>lot</em> of boards to choose from. You can probably use most boards that are based on either the <strong>ATmega1284P</strong>, <strong>ATmega2560</strong> or <strong>ESP32</strong> microcontrollers. Regarding microcontroller boards there is a few key points to take note of:</p>
<ul>
<li>You will need to connect the transceiver module over the SPI bus. This means that the board should have SPI pins for exposed for you to connect to. UART-only modules will <strong>not</strong> work.</li>
<li>Logic voltage levels must match the transceiver module you are using, or you will have to add a voltage level converter in between the two devices, that is fast enough for the clock of the SPI bus (usually 8 or 10MHz). I recommend using a microcontroller and transceiver module with matching logic levels. Most will be 3.3 volts.</li>
<li>Apart from the SPI pins for <em>clock</em>, <em>chip select</em>, <em>MOSI</em> and <em>MISO</em>, you will also need an output pin for a <em>reset</em> line to the transceiver module, and one <strong>interrupt-capable</strong> input pin for the interrupt signal from the transceiver module. Almost all boards should have plenty of IO available for this, but you might as well make sure before ordering anything.</li>
<li>You need to choose a board that can provide enough power on it's internal regulators to power the transceiver module while it is transmitting. This can draw quite a bit of power, and some boards only have very small 3.3v regulators, which will not cut it while driving the transmitter at full tilt.</li>
</ul>
<p>Regarding the LoRa transceiver module, there is going to be an almost overwhelming amount of options to choose from. To narrow it down, here are the essential characteristics to look for:</p>
<ul>
<li>The RNode firmware needs a module based on the <strong>Semtech SX1276</strong>, <strong>Semtech SX1278</strong>, <strong>SX1262</strong>, <strong>SX1268</strong> and <strong>SX1280</strong> LoRa transceiver ICs. These come in several different variants, for all frequency bands from about 150 MHz to 2500 MHz.</li>
<li>The module <em>must</em> expose the direct SPI bus to the transceiver chip. UART based modules that add their own communications layer will not work.</li>
<li>The module must also expose the <em>reset</em> line of the chip, and provide the <strong>DIO0</strong> (or other relevant) interrupt signal <em>from</em> the chip.</li>
<li>As mentioned above, the module must be logic-level compatible with the microcontroller you are using, unless you want to add a level-shifter. Resistor divider arrays will most likely not work here, due to the bus speeds required.</li>
</ul>
<p>Keeping those things in mind, you should be able to select a suitable combination of microcontroller board and transceiver module.</p>
<h3>Assembling the RNode</h3>
<p>Ok, having gone through the endless combinations and selected a board and a module, you are actually almost done. Connecting the devices together is pretty simple, and should only take a few minutes. I recommend that you place both devices in a solderless breadboard initially, to make sure everything is working as expected. Once you have a working setup, you can make it more durable and permanent by soldering it to a prototyping board, and connecting permanent lines between the devices.</p>
<p>In the photo above I used an Adafruit Feather ESP32 board and a ModTronix inAir4 module. That will result in an RNode suitable for the 420 MHz to 520 MHz range. To complete the device I did the following:</p>
<ol>
<li>Connect the GND pin of the microcontroller board to the GND rail of the breadboard.</li>
<li>Connect the GND pin of the transceiver module to the GND rail of the breadboard.</li>
<li>Connect the 3.3 volt output line of the microcontroller board to the V_IN pin of the transceiver module.</li>
<li>Connect the <em>chip select</em> pin of the microcontroller board to the <em>chip select</em> pin of the transceiver module.</li>
<li>Connect the <em>SPI clock</em> pin of the microcontroller board to the <em>SPI clock</em> pin of the transceiver module.</li>
<li>Connect the <em>MOSI</em> pin of microcontroller board to the <em>MOSI</em> pin of the transceiver module.</li>
<li>Connect the <em>MISO</em> pin of the microcontroller board to the <em>MISO</em> pin of the transceiver module.</li>
<li>Connect the <em>transceiver reset</em> pin of the microcontroller board to the <em>reset</em> pin of the transceiver module.</li>
<li>Connect the <em>DIO0</em> pin of the transceiver module to the <em>DIO0 interrupt pin</em> of the microcontroller board.</li>
<li>You can optionally connect transmit and receiver LEDs to the corresponding pins of the microcontroller board.</li>
</ol>
<p>The pin layouts of your transceiver module and microcontroller board will vary, but you can look up the correct pin assignments for your processor type and board layout in the <a href="https://github.com/markqvist/RNode_Firmware/blob/master/Config.h">Config.h</a> file of the <a href="https://unsigned.io/rnode_firmware">RNode Firmware</a>.</p>
<h3>Loading the Firmware</h3>
<p>Once the hardware is assembled, you are ready to load the firmware onto the board and configure the configuration parameters in the boards EEPROM. Luckily, this process is completely automated by the <a href="https://markqvist.github.io/Reticulum/manual/using.html#the-rnodeconf-utility">RNode Configuration Utility</a>. To prepare for loading the firmware, make sure that <code>python</code> and <code>pip</code> is installed on your system, then install the <code>rns</code> package (which includes the <code>rnodeconf</code> program) by issuing the command:</p>
<pre><code class="language-txt">pip install rns
</code></pre>
<p>If installation goes well, you can now move on to the next step.</p>
<blockquote>
<p><em>Take Care</em>: A LoRa transceiver module <strong>must</strong> be connected to the board for the firmware to start and accept commands. If the firmware does not verify that the correct transceiver is available on the SPI bus, execution is stopped, and the board will not accept commands. If you find the board unresponsive after installing the firmware, or EEPROM configuration fails, double-check your transceiver module wiring!</p>
</blockquote>
<p>Having double-checked that everything is connected correctly, it is time to power up the board and install the firmware. Run the <code>rnodeconf</code> autoinstaller by executing the command:</p>
<pre><code class="language-txt">rnodeconf --autoinstall
</code></pre>
<p>The installer will now ask you to insert the device you want to set up, scan for connected serial ports, and ask you a number of questions regarding the device. When it has the information it needs, it will install the correct firmware and configure the necessary parameters in the device EEPROM for it to function properly.</p>
<p>If the install goes well, you will be greated with a success message telling you that your device is now ready. To confirm everything is OK, you can query the device info with:</p>
<pre><code class="language-txt">rnodeconf --info /dev/ttyUSB0
</code></pre>
<p>Remember to replace <code>/dev/ttyUSB0</code> with the actual port the installer used in the previous step. You should now see <code>rnodeconf</code> connect to your device and show something like this:</p>
<pre><code class="language-txt">[2022-01-27 20:11:22] Opening serial port /dev/ttyUSB0...
[2022-01-27 20:11:25] Device connected
[2022-01-27 20:11:25] Current firmware version: 1.26
[2022-01-27 20:11:25] Reading EEPROM...
[2022-01-27 20:11:25] EEPROM checksum correct
[2022-01-27 20:11:25] Device signature validated
[2022-01-27 20:11:25]
[2022-01-27 20:11:25] Device info:
[2022-01-27 20:11:25] Product : LilyGO LoRa32 v2.0 850 - 950 MHz (b0:b8:36)
[2022-01-27 20:11:25] Device signature : Validated - Local signature
[2022-01-27 20:11:25] Firmware version : 1.26
[2022-01-27 20:11:25] Hardware revision : 1
[2022-01-27 20:11:25] Serial number : 00:00:00:02
[2022-01-27 20:11:25] Frequency range : 850.0 MHz - 950.0 MHz
[2022-01-27 20:11:25] Max TX power : 17 dBm
[2022-01-27 20:11:25] Manufactured : 2022-01-27 20:10:32
[2022-01-27 20:11:25] Device mode : Normal (host-controlled)
</code></pre>
<p>On the hardware side, you should see the status LED flashing briefly approximately every 2 seconds. If all of the above checks out, congratulations! Your RNode is now ready to use.</p>
<p>If you want to use it with <a href="https://reticulum.network">Reticulum</a>, <a href="https://unsigned.io/nomadnet">Nomad Network</a>, <a href="https://unsigned.io/loramon">LoRaMon</a>, or other such applications, leave it in the default <code>Normal (host-controlled)</code> mode.</p>
<p>If you want to use it with legacy amateur radio applications that work with KISS TNCs, you should <a href="https://unsigned.io/using-an-rnode-with-amateur-radio-software/">set it up in TNC mode</a>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,204 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Private, Secure and Uncensorable Messaging Over a LoRa Mesh | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Private, Secure and Uncensorable Messaging Over a LoRa Mesh">
<meta name="description" content="Or: How to set up a completely private, independent and encrypted communication system in half an hour, using stuff you can buy for under $100.">
<meta property="og:description" content="Or: How to set up a completely private, independent and encrypted communication system in half an hour, using stuff you can buy for under $100.">
<meta property="og:image" content="https://unsigned.io/images/Private_Comms-400x275.jpeg">
<meta property="og:url" content="https://unsigned.io/guides/2022_03_26_private-messaging-over-lora.html">
<meta property="og:title" content="Private, Secure and Uncensorable Messaging Over a LoRa Mesh">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2022_03_26_private-messaging-over-lora.html">
<meta name="twitter:title" content="Private, Secure and Uncensorable Messaging Over a LoRa Mesh">
<meta name="twitter:description" content="Or: How to set up a completely private, independent and encrypted communication system in half an hour, using stuff you can buy for under $100.">
<meta name="twitter:image" content="https://unsigned.io/images/Private_Comms-400x275.jpeg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-03-26</div>
<h1>Private, Secure and Uncensorable Messaging Over a LoRa Mesh</h1>
<p><em>Or: How to set up a completely private, independent and encrypted communication system in half an hour, using stuff you can buy for under $100.</em></p>
<p><img alt="" src="../images/Private_Comms-1024x705.jpeg" /></p>
<p>In this post, we will explore how two people, Alice and Bob, can set up a LoRa mesh communication system for their use that has the following characteristics:</p>
<ul>
<li>Allows both real-time and asynchronous text message communication between Alice and Bob.</li>
<li>Works <em>completely</em> indpendently of any infrastructure outside the control of Alice and Bob. Even if the Internet, cellular networks and the power grid fails, Alice and Bob must still be able to communicate.</li>
<li>Is completely private and outside the reach of automated surveillance, and does not reveal any identifying information about Alice or Bob, nor any contents of or information about their conversations.</li>
</ul>
<p>In later parts of this series, we will expand the system to provide these oppertunities to an entire community, and add other mediums like Packet Radio, but for now we will focus on learning the basics by just establishing a Free Communications System between Alice and Bob.</p>
<p>To accomplish this, we will be building a small and simple system based on freely available and Open Source software. To realise our system we will need the following components:</p>
<ul>
<li>A networking system that can function reliably and efficiently even without any functional Internet infrastructure available. This will be provided by <a href="https://reticulum.network">Reticulum</a>.</li>
<li>Software that Alice and Bob can interact with on their computers and mobile devices to actually communicate with each other. This will be provided by the programs <a href="https://unsigned.io/nomadnet">Nomad Network</a> and <a href="https://unsigned.io/sideband">Sideband</a>.</li>
<li>Radio hardware that Reticulum can use to cover the 7 kilometer distance between Bobs apartment and Alices house. This will be provided by installing the <a href="https://unsigned.io/rnode_firmware">RNode Firmware</a> on a couple of small LoRa radio modules that can be purchased cheaply off Amazon or similar online vendors.</li>
</ul>
<p>As you might have already guessed, the "magic glue" that acutally makes this entire system possible is <a href="https://reticulum.network/">Reticulum</a>.</p>
<p>Reticulum is a complete networking stack that was designed to handle challenging situations and requirements like this. Reticulum is an incredibly flexible networking platform, that can use almost anything as a carrier for digital information transfer, and it can automatically form secure mesh networks with very minimal resources, infrastructure and setup.</p>
<p>Please do keep in mind though, that at the time of writing this, Reticulum is still in beta. There might be bugs and security issues that have not yet been discovered. You can keep up with such things, and get updates on the general development and releases, over on the <a href="https://github.com/markqvist/reticulum">Reticulum GitHub page</a>.</p>
<p>The user-facing software that Alice and Bob will be installing already includes Reticulum, so there is no complicated installation and configuration setups, and getting everything up and running will be quite simple. The requirements are also very minimal, and everything can run on hardware they already have available, be that an old computer, a Raspberry Pi, or an Android phone.</p>
<p>Let's get started.</p>
<h1>LoRa Radio Setup</h1>
<p>The first step is to get the LoRa radios prepared and installed. I have written in more length and details about these subjects in other posts on this site (<a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">Installing RNode Firmware on Supported Devices</a> and <a href="https://unsigned.io/how-to-make-your-own-rnodes/">How To Make Your Own RNodes</a>), so this article will just quickly guide you through the basics required to get up and running. For much more information, read the above articles.</p>
<p>First of all, Alice and Bob need to get a compatible piece of radio hardware to use. Had they been living closer to each other, they might have just been able to use WiFi, but they need to cover a distance of more than 7 kilometers, so they decide to go with a couple of LoRa radios.</p>
<p>They take a look at the RNode Firmware <a href="https://unsigned.io/rnode_firmware/#supported-hardware">Supported Devices List</a> , and decide to go with a couple of LilyGO T-Beam devices. They could have also used others, and they don't need to choose the same device, as long as they are within the same frequency range, all compatible devices work with Reticulum and can communicate with each other, as soon as the RNode Firmware has been installed on them.</p>
<p><img alt="" src="../images/lora_rnodes.jpeg" /></p>
<p>Once the devices arrive, it is time to get the firmware installed. For this they will need a computer running some sort of Linux. Alice has a computer with Ubuntu installed, so they decide to use that. Since Python3 came installed as standard with the OS, Alice can go ahead and install the RNode configuration program by simply opening a terminal and typing:</p>
<pre><code>pip install rns
</code></pre>
<p>The above command installs the RNS package, which includes the <code>rnodeconf</code> program they need to flash the LoRa radios with the right firmware. If for some reason Python3 had not already been installed on Alices computer, she would have had to install it first with the command <code>sudo apt install python3 python3-pip</code>.</p>
<p>Now that the firmware installer is ready, it is time to actually get the firmware on to the devices. Alice launches the installer with the following command:</p>
<pre><code>rnodeconf --autoinstall
</code></pre>
<p>After this she is greated with an interactive guide that asks a few questions about the device type, grabs the latest firmware files, and installs them onto the device. After repeating with the second device, that is all there is to it, and the LoRa radios are now ready for use with Reticulum.</p>
<h1>Installation at Alices House</h1>
<p>To get a better signal, Alice mounts her LoRa radio in the attic of her house. She then runs a USB cable from the mounting location to the computer she wants to use for messaging, and plugs the cable into the computer. The LoRa radio is now directly connected to her computer via USB, and receives power from it when the computer is on.</p>
<p>At her computer (running Ubuntu Linux), she installs the Nomad Network program by entering the following command in a terminal:</p>
<pre><code>pip install nomadnet
</code></pre>
<p>After a few seconds, Nomad Network and Reticulum is installed and ready to use. She can now run the Nomad Network client by entering the following command:</p>
<pre><code>nomadnet
</code></pre>
<p>All required directories and configuration files will now be created, and the client will start up. After a few seconds, Alice will be greeted with a screen like this:</p>
<p><img alt="" src="../images/nomadnet_init-1024x640.jpg" /></p>
<p>Confirming that everything is installed and working, it is time to add the LoRa radio as an interface that Reticulum can use. To do this, she opens up the Reticulum configuration file (located at <code>˜/.reticulum/config</code>) in a text editor.</p>
<p>By referring to the <a href="https://markqvist.github.io/Reticulum/manual/interfaces.html#rnode-lora-interface">RNode LoRa Interface</a> section of the <a href="https://markqvist.github.io/Reticulum/manual/">Reticulum Manual</a>, she can just copy-and-paste in a new configuration section for the interface, and edit the radio parameters to her requirements. She ends up with a configuration file that looks like this in it's entirity:</p>
<pre><code>[reticulum]
enable_transport = False
share_instance = Yes
shared_instance_port = 37428
instance_control_port = 37429
panic_on_interface_error = No
[logging]
loglevel = 4
[interfaces]
[[Default Interface]]
type = AutoInterface
interface_enabled = True
[[RNode LoRa Interface]]
type = RNodeInterface
interface_enabled = True
port = /dev/ttyUSB0
frequency = 867200000
bandwidth = 125000
txpower = 7
spreadingfactor = 8
codingrate = 5
</code></pre>
<p><em>Please note that the assignment and use of radio frequency spectrum is completely outside the scope of this exploratory post. Laws and regulations about spectrum use vary greatly around the world, and you will have to do your own research for what frequencies and modes you can use in your location, and what licenses, if any, are required for any given use case.</em></p>
<p>Alice can now start the Nomad Network client again, and this time around it will initialise and use the LoRa radio installed in her attic. Having completed Alices part of the setup, lets move on to Bobs apartment.</p>
<h1>Installation at Bobs Apartment</h1>
<p>Bob likes his messaging to happen on a handy device like a phone, so he decides to go with the <a href="https://unsigned.io/sideband">Sideband</a> app instead of Nomad Network. He goes to the <a href="https://github.com/markqvist/Sideband/releases/latest">download page</a> and installs the APK on his Android phone. He now needs a way to connect to the LoRa radio already running at Alices house to establish communication.</p>
<p>Since he doesn't want to walk around with the LoRa radio constantly dangling by a USB cable from his phone, he decides to set up a Reticulum gateway in his apartment using a Raspberry Pi he had lying around. The RNode LoRa radio will connect via USB to the Raspberry Pi, and the Raspberry Pi will be connected to the WiFi network in his apartment.</p>
<p>This way, any device on his WiFi network (including his Android phone) will be able to route information through the LoRa radio as well. Reticulum takes care of everything automatically, and there is no need to configure addresses, subnet, routing rules or anything.</p>
<p>Both his WiFi router and the Rasperry Pi is powered by a small battery system, so even if the power goes out, the system will be able to stay on for several days on the battery, and indefinitely if he props up a solar panel on his balcony.</p>
<p>Bob installs a fresh copy of Raspberry Pi OS on the small computer, and in the terminal issues the following command to install Reticulum:</p>
<pre><code>pip install rns
</code></pre>
<p>In this case, Bob will not be running any user-facing software on the Raspberry Pi itself, so instead he starts Reticulum as a service, by running the <code>rnsd</code> program, to check that everything installed correctly:</p>
<pre><code>rnsd
</code></pre>
<p>After a moment, the following output is shown from the <code>rnsd</code> program, signalling that everything is working properly, but that a new, default configuration file has just been created:</p>
<pre><code>[2022-03-26 17:14:05] [Notice] Could not load config file, creating default configuration file...
[2022-03-26 17:14:05] [Notice] Default config file created. Make any necessary changes in /home/bob/.reticulum/config and restart Reticulum if needed.
[2022-03-26 17:14:09] [Notice] Started rnsd version 0.3.3
</code></pre>
<p>Bob terminates the <code>rnsd</code> program, and then connects the LoRa radio to the Raspberry Pi with a USB cable. Since he doesn't have any particular access to the roof or attic of the building, he just sticky-tapes the LoRa radio to a window facing in the general direction of Alices house.</p>
<p>He then proceeds to add the same interface configuration to his Reticulum configuration file as Alice did, so that the radio parameters of their respective LoRa radios match each other.</p>
<p>To allow other devices on his network to route through his new Reticulum gateway, he also adds the line <code>enable_transport = yes</code> to his Reticulum config file, so the file in it's entirity looks like this:</p>
<pre><code>[reticulum]
enable_transport = Yes
share_instance = Yes
shared_instance_port = 37428
instance_control_port = 37429
panic_on_interface_error = No
[logging]
loglevel = 4
[interfaces]
[[Default Interface]]
type = AutoInterface
interface_enabled = True
[[RNode LoRa Interface]]
type = RNodeInterface
interface_enabled = True
port = /dev/ttyUSB0
frequency = 867200000
bandwidth = 125000
txpower = 7
spreadingfactor = 8
codingrate = 5
</code></pre>
<p>After starting the program again, this time using <code>rnsd -vvv</code> to get more verbose output, he can now see that the LoRa radio is correctly configured and used by Reticulum:</p>
<pre><code>[2022-03-26 18:17:43] [Debug] Bringing up system interfaces...
[2022-03-26 18:17:43] [Verbose] AutoInterface[Default Interface] discovering peers for 1.8 seconds...
[2022-03-26 18:17:45] [Notice] Opening serial port /dev/ttyUSB0...
[2022-03-26 18:17:47] [Notice] Serial port /dev/ttyUSB0 is now open
[2022-03-26 18:17:47] [Verbose] Configuring RNode interface...
[2022-03-26 18:17:47] [Verbose] Wating for radio configuration validation for RNodeInterface[RNode LoRa Interface]...
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting frequency is 867.2 MHz
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting bandwidth is 125 KHz
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting TX power is 7 dBm
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting spreading factor is 8
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting coding rate is 5
[2022-03-26 18:17:47] [Verbose] RNodeInterface[RNode LoRa Interface] On-air bitrate is now 3.1 kbps
[2022-03-26 18:17:47] [Notice] RNodeInterface[RNode LoRa Interface] is configured and powered up
[2022-03-26 18:17:48] [Debug] System interfaces are ready
[2022-03-26 18:17:48] [Verbose] Configuration loaded from /home/bob/.reticulum/config
[2022-03-26 18:17:50] [Verbose] Loaded 0 path table entries from storage
[2022-03-26 18:17:50] [Verbose] Loaded 0 tunnel table entries from storage
[2022-03-26 18:17:50] [Verbose] Transport instance &lt;a5dc367015b30f2d7b59&gt; started
[2022-03-26 18:17:50] [Notice] Started rnsd version 0.3.3
</code></pre>
<p>Everything is ready, and when Bob launches the Sideband appplication on his phone, Alice and him will now be able to communicate securely and independently of any other infrastructure.</p>
<h1>Communication</h1>
<p>Both the <a href="https://unsigned.io/nomadnet">Nomad Network</a> program and the <a href="https://unsigned.io/sideband">Sideband</a> application use a cryptographic message delivery system named <a href="https://unsigned.io/lxmf">LXMF</a>, that in turn uses Reticulum for encryption and privacy guarantees. Both Nomad Network and Sideband are <em>LXMF clients</em>.</p>
<p>Much like many different e-mail clients exist, so can many different LXMF clients, and they can all communicate with each other, which is why Alice and Bob can message each other even though they prefer to use very different kinds of user-facing software.</p>
<p>An LXMF addresses consist of 32 hexadecimal characters, and are usually encapsulated in single angle quotation marks like this: <code>&lt;9824f6367015b30f2d7b8a24bc6205d7&gt;</code>.</p>
<p>Nobody controls the allocation of addresses, and since the address space is so huge, and governed by cryptographic principles, you can create as many or as few adresses as you need.</p>
<p>Since you can just create them with freely avaible software, and without any sort of permission from anyone, they are never linked to any personally identifiable information either. They are completely and truly anonymous from the beginning, and you control how much or how little of your identity you associate with them.</p>
<p>For an LXMF address to be reachable for direct-delivery instant messaging on a Reticulum network, it must announce it's public keys on the network. Both Sideband and Nomad Network allows you to send an announce on the network, and both programs can be configured to do so automatically when they start. If you only want to use the system for "email-style" communication (via LXMF propagation nodes), you don't <em>need</em> to send any announces on the network, but to learn how it all works, it is a good idea to just set the programs to automatically announce at start up.</p>
<p>To make sure his public cryptographic key is known by the network, Bob taps the <strong>Announce</strong> button in the Sideband app:</p>
<center><p><img src="../images/1_announce-e1648319612571.png"/></p></center>
<p>After a few seconds, Bobs announce shows up in the <strong>Announce Stream</strong> section of the Nomad Network program on Alices computer:</p>
<center><p><img src="../images/nomadnet_announce-1024x640.jpg"/></p></center>
<p>Using the received announce, Alice starts a conversation with Bob. Either one of them could also have started the conversation by manually typing in the others LXMF address in their program, but in many cases it can be convenient to use the announces. Now that everything is ready, they exchange a few messages to test the system. On Bobs Android phone, this looks like this:</p>
<center><p><img style="max-width: 100%; width: 400px;" src="../images/3_conv.png"/></p></center>
<p>And on Alices computer running Nomad Network, it looks like this:</p>
<center><p><img src="../images/nomadnet_conv-1024x640.jpg"/></p></center>
<p>Although pretty useful, what we have explored here does not even begin to scratch the surface of what is possible with Reticulum and associated software. I hope you will find yourself inspired to explore and read deeper into the documentation and available software.</p>
<p>In the next parts of this series, we will explore how to add more features to the system, such as offline message delivery, expanding the system to allow communication for a larger number of people, bridging isolated networks over both the Internet and the Invisible Internet (I2P), using Reticulum over Packet Radio, and using LoRa interfaces diretcly on Android devices.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,187 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Build Recipe: Make A Handheld RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Build Recipe: Make A Handheld RNode">
<meta name="description" content="This RNode is suitable for mobile and handheld operation, and offers both wireless and wired connectivity to host devices. A good all-round unit. It is also suitable for permanent installation indoors.">
<meta property="og:description" content="This RNode is suitable for mobile and handheld operation, and offers both wireless and wired connectivity to host devices. A good all-round unit. It is also suitable for permanent installation indoors.">
<meta property="og:image" content="https://unsigned.io/images/ph_handheld_rnode.webp">
<meta property="og:url" content="https://unsigned.io/guides/2023_01_14_Making_A_Handheld_RNode.html">
<meta property="og:title" content="Build Recipe: Make A Handheld RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2023_01_14_Making_A_Handheld_RNode.html">
<meta name="twitter:title" content="Build Recipe: Make A Handheld RNode">
<meta name="twitter:description" content="This RNode is suitable for mobile and handheld operation, and offers both wireless and wired connectivity to host devices. A good all-round unit. It is also suitable for permanent installation indoors.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_handheld_rnode.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h2>Build Recipe: Handheld RNode</h2>
<p>This build recipe will help you create an RNode that is suitable for mobile and handheld operation, and offers both wireless and wired connectivity to host devices. It is also useful for permanent installation indoors, or even outdoors, as long as it is protected from water ingress and direct sunlight.</p>
<p>Depending on the board you use, it will offer a workable frequency range between <strong>420 and 520 MHz</strong>, or <strong>820 and 1020 MHz</strong>, and a maximum TX power of <strong>17 dBm</strong> (50 mW).</p>
<p><img alt="Handheld RNode dimensions" src="../images/rnv21_dims.webp" style="width: 100%;"/></p>
<h3>Table of Contents</h3>
<ol>
<li><a href="#prep">Preparation</a></li>
<li><a href="#devboard">Supported Boards</a></li>
<li><a href="#materials">Materials</a></li>
<li><a href="#parts">Print Parts</a></li>
<li><a href="#tools">Install Tools</a></li>
<li><a href="#firmware">Firmware Setup</a></li>
<li><a href="#assembly">Assembly</a>
<br/><br/></li>
</ol>
<h3><a name="prep"></a>Step 1: Preparation</h3>
<p>When you have completed this recipe, you will end up with a fully-featured RNode device, similar to the one pictured below. To make it as easy as possible to complete this guide, make sure to read it all in its entirity <em>before</em> starting. I also recommend you familiarise yourself with the required materials, and the software tools needed for the setup.</p>
<p><img alt="Completed Handheld RNode" src="../images/rnv21_1.webp" style="width: 100%;"/></p>
<center>*A completed Handheld RNode*</center>
<p>To complete this build recipe, you will need access to the following items:</p>
<ul>
<li>A computer with a functional operating system, such as Linux, BSD or macOS</li>
<li>One of the <a href="#devboard">supported development boards</a> for this recipe</li>
<li>A suitable USB cable for connecting the development board to your computer</li>
<li>A 3D printer and the necessary amount of material for printing the <a href="#parts">device parts</a></li>
<li>6 pieces of M2x6mm screws to assemble the case</li>
<li>A suitable antenna</li>
<li>An optional NeoPixel RGB LED</li>
<li>An optional <a href="#battery">battery</a><ul>
<li>This build can use any single-cell (3.7v) lithium battery with a 1.25mm JST connector, provided it will fit in the case. Please see <a href="#battery">this section</a> for details on battery sizes.</li>
</ul>
</li>
</ul>
<h3><a name="devboard"></a>Step 2: Supported Development Boards</h3>
<p>This RNode design is using a <strong>LilyGO LoRa32 v2.1</strong> board, in either the <strong>433 MHz</strong>, <strong>868 MHz</strong>, <strong>915 MHz</strong> or <strong>923 MHz</strong> variants. It seems that the 868, 915 and 923 MHz variants are in fact completely identical, and all offer a frequency range between 820 and 1020 MHz. The 433MHz variants offer a frequency range between 420 and 520 MHz.</p>
<p>These boards are also sold under many different "brand" names other than LilyGO, but using the images below, you should be able to identify the correct ones.</p>
<p>It is easiest to obtain the version of the board with an <strong>u.FL</strong> (sometimes also labeled <em>IPX</em> or <em>IPEX</em>) antenna connector, instead of the <strong>SMA</strong> connector. This version comes with an SMA to u.FL pigtail, which is installed into the 3D-printed case. If it is not possible to obtain this version, you can use the one with an <strong>SMA</strong> connector, either as is, or by removing the <strong>SMA</strong> connector, and using the on-board <strong>u.FL</strong> connector instead.</p>
<p>If you do not wish to use the 3D-printable case included in this guide, it does not matter which version you get. There is <strong>no functional difference</strong> between the boards with <strong>SMA</strong> and <strong>u.FL</strong> connectors.</p>
<p><img alt="Compatible board" src="../images/bg1sb.webp" style="width: 100%;"/></p>
<center>*The correct board version for this RNode build recipe*</center>
<p>If you want to use the case provided for this build guide, and you have the version with an <em>SMA</em> connector, you will have to desolder the <strong>SMA</strong> connector, and activate the <em>u.FL</em> connector instead (it's already installed on all the boards, just not activated on the <strong>SMA</strong> connector versions).</p>
<p>To activate the <strong>u.FL</strong> connector, you will just have to "rotate" the small resistor next to the antenna connectors by 90 degrees, so it "points" at the connector you wish to use.</p>
<p>Please note that the "resistor" is actually just a zero-ohm jumper. If you don't feel like fiddling around with small components, you can simply remove it, and bridge the relevant gap with a blob of solder.</p>
<p>Refer to the following two pictures to locate the resistor that needs moving:</p>
<p><img alt="Before desoldering" src="../images/bg1ds1.webp" style="width: 48.7%; margin-right:1%;"/>
<img alt="After desoldering" src="../images/bg1ds2.webp" style="width: 48.7%; margin-left: 1%;"/></p>
<center>*Before and after removing the SMA connector and moving the resistor*</center>
<p>You will also need to dismount the OLED display from the small acrylic riser on the board, and unscrew and discard the riser. Be careful not to damage the display or ribbon cable while doing this. The OLED display will be mounted directly into a matching slot in the 3D-printed case.</p>
<p>As before, if you do not want to use the 3D printed case supplied here, it's probably much easier to keep the display on the board, and you can simply skip this step.</p>
<h3><a name="materials"></a>Step 3: Obtain Materials</h3>
<p>In addition to the board, you will need a few other components to build this RNode.</p>
<ul>
<li>A suitable <strong>antenna</strong>. Most boards purchased online include a passable antenna, but you may want to upgrade it to a better one.</li>
<li>6 pieces of <strong>M2x6mm screws</strong> for assembling the case. Can be bought in most hardware stores or from online vendors.</li>
<li>An optional <strong>NeoPixel RGB LED</strong> for displaying status, and TX/RX activity. If you do not want to add this, it can simply be omitted.<ul>
<li>The easiest way is to use the PCB-mounted NeoPixel "mini-buttons" manufactured by <a href="https://www.adafruit.com/product/1612">adafruit.com</a>. These fit exactly into the slot in the mounting position in the 3D-printed case, and are easy to connect cables to.</li>
</ul>
</li>
<li>An optional <strong>lithium-polymer battery</strong><a name="battery"></a>.<ul>
<li>This RNode supports <strong>3.7v</strong>, <strong>single-cell</strong> LiPo batteries with a <strong>1.25mm JST connector</strong></li>
<li>The standard case can fit up to a 700mAh LP602248 battery<ul>
<li>Maximum battery dimensions for this case is 50mm x 25mm x 6mm</li>
</ul>
</li>
<li>There is a larger bottom casing available that fits 1100mAh batteries<ul>
<li>Maximum battery dimensions for this case is 50mm x 25mm x 12mm</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3><a name="parts"></a>Step 4: 3D Print Parts</h3>
<p>To complete the build of this RNode, you will need to 3D-print the parts for the casing. Download, extract and slice the STL files from the <a href="../3d/Handheld_RNode_Parts.7z">parts package</a> in your preferred software.</p>
<ul>
<li>Two of the parts are LED light-guides, and should be printed in a semi-translucent material:<ul>
<li>The <code>LED_Window.stl</code> file is a light-guide for the NeoPixel LED, mounted in the circular cutout at the top of the device.</li>
<li>The <code>LED_Guide.stl</code> file is a light-guide for the power and charging LEDs, mounted in the rectangular grove at the bottom of the device.</li>
</ul>
</li>
<li>The rest of the parts can be printed in any material, but for durability and heat-resistance, PETG is recommended.<ul>
<li>The <code>Power_Switch.stl</code> file is a small power-switch slider, mounted in the matching grove on the bottom-left of the device.</li>
<li>The <code>Case_Top.stl</code> file is the top shell of the case. It holds the OLED display and NeoPixel RGB LED, and mounts to the bottom shell of the case with 6 M2 screws. The screw holes in both the top and bottom shells of the case are dimensioned to be self-threading when screws are inserted for the first time. Do not over-tighten.</li>
<li>The <code>Case_Bottom_Small_Battery.stl</code> file is the default bottom shell of the case. It holds batteries up to approximately 700mAh.</li>
<li>The <code>Case_Bottom_Large_Battery.stl</code> file is an alternative bottom shell for the case. It holds batteries up to approximately 1100mAh.</li>
<li>The <code>Case_Bottom_No_Battery.stl</code> file is an alternative bottom shell for the case. It does not have space for a battery, but results in a very compact device.</li>
<li>The <code>Case_Battery_Door.stl</code> file is the door for the battery compartment of the device. It snap-fits tightly into place in the bottom shell, and features a small slot for opening with a flathead screwdriver or similar.</li>
</ul>
</li>
</ul>
<p>All files are dimensioned to fit together perfectly without any scaling on a well-tuned 3D-printer.</p>
<p>The recommended layer height for all files is 0.15mm for FDM printers.</p>
<h3><a name="tools"></a>Step 5: Install Tools</h3>
<p>To install and configure the RNode Firmware on the device, you will need to install the <code>rnodeconf</code> program on your computer. This is included in the <code>rns</code> package, that can be installed using the <code>pip</code> package manager:</p>
<pre><code class="language-text">pip install rns
</code></pre>
<p>When the <code>rnodeconf</code> program is installed, you can continue to the next step.</p>
<h3><a name="firmware"></a>Step 6: Firmware Setup</h3>
<p>Once the <code>rnodeconf</code> program is installed, we will use it to install the RNode Firmware on your device, and do the initial provisioning of configuration parameters. This process can be completed automatically, by using the auto-installer. Run the <code>rnodeconf</code> auto-installer with the following command:</p>
<pre><code>rnodeconf --autoinstall
</code></pre>
<ol>
<li>The program will ask you to connect your device to an USB-port on your computer. Do so, and hit enter.</li>
<li>Select the serial port the device is connected as.</li>
<li>You will now be asked what device this is, select the option <strong>A Specific Kind of RNode</strong>.</li>
<li>The installer will ask you what model your device is. Select the <strong>Handheld RNode v2.x</strong> option that matches the frequency band of your device.</li>
<li>The installer will display a summary of your choices. If you are satisfied, confirm your selection.</li>
<li>The installer will now automatically install and configure the firmware and prepare the device for use.</li>
</ol>
<blockquote>
<p><strong>Please Note!</strong> If you are connected to the Internet while installing, the autoinstaller will automatically download any needed firmware files to a local cache before installing.</p>
<p>If you do not have an active Internet connection while installing, you can extract and use the firmware from this device instead. This will <strong>only</strong> work if you are building the same type of RNode as the device you are extracting from, as the firmware has to match the targeted board and hardware configuration.</p>
</blockquote>
<p>If you need to extract the firmware from an existing RNode, run the following command:</p>
<pre><code>rnodeconf --extract
</code></pre>
<p>If <code>rnodeconf</code> finds a working RNode, it will extract and save the firmware from the device for later use. You can then run the auto-installer with the <code>--use-extracted</code> option to use the locally extracted file:</p>
<pre><code>rnodeconf --autoinstall --use-extracted
</code></pre>
<p>This also works for updating the firmware on existing RNodes, so you can extract a newer firmware from one RNode, and deploy it onto other RNodes using the same method. Just use the <code>--update</code> option instead of <code>--autoinstall</code>.</p>
<h3><a name="assembly"></a>Step 7: Assembly</h3>
<p>With the firmware installed and configured, and the case parts printed, it's time to put it all together.</p>
<ol>
<li>Insert the <strong>SMA to u.FL</strong> pigtail adatper into the matching <strong>slot</strong> in the top part of the bottom shell. Make sure it lines up with the internal hex-nut cut-out in the bottom shell, as the hex nut of the adapter will get pulled into this cut-out, and thereby self-lock, when an antenna is connected. You can optionally mount a locking nut on the exterior thread of the SMA connector when the case has been completely assembled.</li>
<li>Thread the cable of the <strong>SMA to u.FL</strong> pigtail adapter into the matching grove, and run it out of the bottom opening.</li>
<li>Mount the <strong>power-switch slider</strong> into the matching slot, in the bottom-left part of the bottom shell.</li>
<li>With the SMA connector and power switch mounted, slide the <strong>board</strong> into the bottom shell, such that the <strong>power switch</strong> of the <strong>board</strong> mates with the slot in the already installed power-switch slider. Click the <strong>board</strong> into place in the bottom shell.</li>
<li>Optionally mount the <strong>NeoPixel LED</strong>:<ul>
<li>Measure out cables that matches lenghts between the NeoPixel mounting slot, and the corresponding pins on the board.</li>
<li>Solder the <strong>V+</strong>, <strong>GND</strong> and <strong>DATA</strong> cables to the NeoPixel.</li>
<li>Solder the <strong>V+</strong> cable to the <strong>3.3v</strong> pin on the board.</li>
<li>Solder the <strong>GND</strong> cable to the <strong>GND</strong> pin on the board.</li>
<li>Solder the <strong>DATA</strong> cable to <strong>IO Pin 12</strong> on the board.</li>
<li>Mount the <strong>NeoPixel</strong> in the circular slot in the top part of the top shell.</li>
</ul>
</li>
<li>Carefully mount the OLED display in the rectangular slot in the middle part of the top shell.</li>
<li>While ensuring that all internal cables stay within their routing groves, place the <strong>top shell</strong> on top of the <strong>bottom shell</strong>, making sure that the screw-mounting holes line up.</li>
<li>Mount the 6 <strong>M2x6mm screws</strong> into the mounting holes, until the two shells of the case are tightly and securely connected.</li>
<li>Flip over the device.</li>
<li>Connect the male <strong>u.FL</strong> connector to the female <strong>u.FL</strong> socket on the <strong>board</strong>.</li>
<li>Optionally, connect the male JST connector of the <strong>battery</strong> to the female JST connector on the <strong>board</strong>.</li>
<li>Fit the <strong>battery door</strong> into place.</li>
</ol>
<p>Congratulations, Your Handheld RNode is now complete!</p>
<p>Flip the power switch, and start using it!</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,57 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>How To Get The New Bootstrap Console Onto Your RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="How To Get The New Bootstrap Console Onto Your RNode">
<meta name="description" content="If you've already created RNodes before the release of the bootstrap console, this guide will show you how to get them updated.">
<meta property="og:description" content="If you've already created RNodes before the release of the bootstrap console, this guide will show you how to get them updated.">
<meta property="og:image" content="https://unsigned.io/images/ph_console.webp">
<meta property="og:url" content="https://unsigned.io/guides/2023_01_15_Getting_The_New_Bootstrap_Console_Onto_Your_RNode.html">
<meta property="og:title" content="How To Get The New Bootstrap Console Onto Your RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2023_01_15_Getting_The_New_Bootstrap_Console_Onto_Your_RNode.html">
<meta name="twitter:title" content="How To Get The New Bootstrap Console Onto Your RNode">
<meta name="twitter:description" content="If you've already created RNodes before the release of the bootstrap console, this guide will show you how to get them updated.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_console.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h2>How To Get The New Bootstrap Console Onto Your RNode</h2>
<p>If you've already created a number of <a href="../rnode/">RNodes</a>, and did so before the version <code>1.55</code> release of the <a href="../rnode_firmware/">RNode Firmware</a>, you probably want to make sure that you get the newly released <a href="../rnode_bootstrap_console/">RNode Bootstrap Console</a> onto them as well.</p>
<p>Doing so is very easy: You just need to update them with the <a href="../software/RNode_Configuration_Utility.html">RNode Configuration Utility</a>. Make sure that the installed <code>rnodeconf</code> program is at least version <code>2.1.0</code>. If it is not, it won't be able to install the version <code>1.55</code> update of the firmware.</p>
<p>The <code>rnodeconf</code> program is included in the <code>rns</code> package, so to update to the latest version, just update the <code>rns</code> package:</p>
<pre><code class="language-sh">pip install rns --upgrade
</code></pre>
<p>After you've installed the latest version of <code>rnodeconf</code>, you can update the firmware on your devices. Connect one to a USB-port on your computer and run:</p>
<pre><code class="language-sh">rnodeconf --update /dev/ttyUSB0
</code></pre>
<p>Make sure to replace <code>/dev/ttyUSB0</code> with the port your RNode is actually connected to. The program will now identify the model of your RNode, download the correct firmware update, and install it on the device.</p>
<p><img alt="The RNode Bootstrap Console being accessed from a tablet" src="../images/p_console.webp" /></p>
<p>When the installation is finished, the device should show version <code>1.55</code> on its display. You can now activate the <a href="../rnode_bootstrap_console/">RNode Bootstrap Console</a> by doing the following:</p>
<ul>
<li>Make sure the device is powered on</li>
<li>Press the reset button</li>
<li>Within approximately 1 second (when the "Device Starting" banner is displayed), press the reset button again</li>
<li>The RNode will now boot into <strong>Bootstrap Console Mode</strong>, and serve a WiFi access point. Connect to this access point, and point a browser to <a href="http://10.0.0.1/">10.0.0.1</a>. You are now connected to the <a href="../rnode_bootstrap_console/">RNode Bootstrap Console</a>, running directly on your RNode.</li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,73 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>RNode Bluetooth Setup for Sideband on Android | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="RNode Bluetooth Setup for Sideband on Android">
<meta name="description" content="This short guide outlines details how to set up an RNode for use with the Sideband application on Android devices.">
<meta property="og:description" content="This short guide outlines details how to set up an RNode for use with the Sideband application on Android devices.">
<meta property="og:image" content="https://unsigned.io/images/ph_sbbt.webp">
<meta property="og:url" content="https://unsigned.io/guides/2023_01_19_RNode_Bluetooth_Setup_In_Sideband_On_Android.html">
<meta property="og:title" content="RNode Bluetooth Setup for Sideband on Android">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2023_01_19_RNode_Bluetooth_Setup_In_Sideband_On_Android.html">
<meta name="twitter:title" content="RNode Bluetooth Setup for Sideband on Android">
<meta name="twitter:description" content="This short guide outlines details how to set up an RNode for use with the Sideband application on Android devices.">
<meta name="twitter:image" content="https://unsigned.io/images/ph_sbbt.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h2>RNode Bluetooth Setup for Sideband on Android</h2>
<p>This short guide will outline all the necessary steps on how to set up an RNode, for use with the Sideband application on Android devices.</p>
<p><img alt="" src="../images/pi_sbbt.webp" /></p>
<h2>Initial Setup &amp; Bluetooth Pairing</h2>
<p>To use an RNode over Bluetooth with an Android device, a normal Bluetooth pairing must be performed between the devices first. Here is the correct procedure:</p>
<ul>
<li>Connect the RNode to your Android device over USB. Wait for the Android permission dialog to appear, and grant Sideband the USB permission for the port. If this permission is not granted <em>to Sideband specifically</em>, the Sideband app will not be able to talk to the port.</li>
<li>By default, Bluetooth is powered off on an RNode. If you have not already turned on Bluetooth on your RNode, do the following:<ul>
<li>In the Sideband app, go to <strong>Hardware</strong> &gt; <strong>RNode</strong> and press the <strong>Enable Bluetooth</strong> button. The Bluetooth symbol on the RNode display should now become active.</li>
<li>Then press the <strong>Start Pairing Mode</strong> button. The Bluetooth symbol should change to indicate that the RNode is now in pairing mode.</li>
</ul>
</li>
<li>You can now perform a normal Bluetooth pairing between the RNode and your device:<ul>
<li>Go to the Bluetooth settings of your Android device and start pairing a new device. The RNode should be discovered, and when you select it for pairing, the RNode will display it's pairing code on the display. Verify that the code matches and accept the pairing from your Android device.</li>
<li>The pairing procedure is now done, and Sideband will be able to use the RNode.</li>
</ul>
</li>
<li>Make sure to grant Sideband permission to connect to Bluetooth devices when prompted. If you accidentially deny the required permissions, you might have to manually enable them in the settings of your device.</li>
<li>You do not need to manually connect the RNode in the Bluetooth settings of your device when you need to use it. Sideband will initiate the Bluetooth connection itself when it wants to use the RNode.</li>
</ul>
<h2>Setup in Sideband</h2>
<p>To use the paired RNode in Sideband, the following steps must be carried out:</p>
<ul>
<li>Go to <strong>Hardware</strong> &gt; <strong>RNode</strong> and make sure that valid radio parameters have been configured. The app provides sensible defaults for most parameters, but you will at least have to specify a valid frequency for the device.</li>
<li>Make sure that the <strong>Connect via Bluetooth</strong> checkbox is turned on.</li>
<li>If your device uses <strong>BLE</strong> instead of classic Bluetooth, check the <strong>Device requires BLE</strong> option.</li>
<li>Go to the <strong>Connectivity</strong> part of the program and make sure that the <strong>Connect via RNode</strong> checkbox is turned on. You can optionally specify IFAC parameters for your network here.</li>
<li>Shut down Sideband completely (Menu &gt; Shutdown) and restart it. You should now see Sideband starting and connecting to your RNode.</li>
<li>In the <strong>Connectivity Status</strong> dialog, you should be able to see the RNode listed as <em>on-air</em>.</li>
</ul>
<p>That's all there is to it. Once pairing has been completed, and the RNode interface in Sideband has been enabled, it will be connected and used whenever the RNode is powered on and within range.</p>
<p>To temporarily disable the Sideband app from using the RNode, you can go into the <strong>Hardware</strong> &gt; <strong>RNode</strong> Section of the program, and disable the <strong>Connect via Bluetooth</strong> option. This change does not require a program restart to take effect.</p>
<p>It is also worth noting, that the 1.x versions of the firmware only allows <em>one</em> host connection at a time. You cannot be connected to both USB/Serial from a computer, and Bluetooth from another device at the same time. The RNode will switch the host connection to only use <strong>one</strong> at a time.</p>
<p>If using the device over Bluetooth, just give it power, either via the USB port or a battery, but don't connect to it over USB or serial. You can plug it into a computer USB port just fine, but don't open it with <code>rnsd</code> or anything else.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

41
docs/guides/index.html Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,142 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>MicroModem | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="MicroModem">
<meta name="description" content="MicroModem page at unsigned.io">
<meta property="og:description" content="MicroModem page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/hardware/MicroModem.html">
<meta property="og:title" content="MicroModem">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/MicroModem.html">
<meta name="twitter:title" content="MicroModem">
<meta name="twitter:description" content="MicroModem page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>MicroModem</h1>
<p><em><strong>- Important info!</strong></em></p>
<p><em>MicroModem is now discontinued, and I will not be producing any more units for sale. All information on this page is historical and for reference purposes.</em></p>
<p><em>If you want a complete, pre-built unit, please <a href="https://unsigned.io/openmodem/">have a look at OpenModem instead</a>. It offers a much more powerful feature-set, is easier to use, and is the platform I will be developing in the future.</em></p>
<p><em>While I will not be producing more MicroModems or developing the firmware further, all resources for MicroModem, including software, schematics, build info and source-code will be kept available for existing installations, and for any users that still want to build their own MicroModems.</em></p>
<p><em>If you want to build your own AFSK1200 modem, MicroModem is still a very viable option, since it is easy to build, and very well documented. It is also incredibly stable, with many units in the field running for years at a time without issues.</em></p>
<h3>What is it?</h3>
<p><img style="float: left; margin-right: 1.5em;" src="../images/P1060545-300x225.jpg" /> MicroModem is an open-source implementation of a 1200-baud <a title="Wikipedia AFSK" href="http://en.wikipedia.org/wiki/Frequency-shift_keying#Audio_FSK" target="_blank" rel="noopener noreferrer">AFSK</a> / <a title="Bell 202" href="http://en.wikipedia.org/wiki/Bell_202_modem" target="_blank" rel="noopener noreferrer">Bell 202</a> modem on the popular ATmega328p microprocessor. MicroModem can be used for things like ham radio APRS, AX.25, TCP/IP over SLIP, experimentation with mesh-networks, long-range wireless communication with sensors (Or friends! Or strangers!). It basically comes in two flavors: Prebuilt or DIY.</p>
<p>It is simple enough that, if you have some basic electronics experience, you can understand and build it yourself with a few components and an Arduino. You can also get a more advanced and prebuilt, fully tested MicroModem directly from me. I manufacture them personally, to the highest quality.</p>
<p>Please note that the resources listed here for building your own MicroModem are for an earlier, more simple version, than the one I currently offer for sale. While the two modems are functionally identical, the version I offer for sale has some technical refinements, and is implemented as an integrated board with MCU, USB and everything on one board, measuring only 3x5 cm.</p>
<h3>Can I buy it?</h3>
<p>Yes! If you don't feel like building it yourself, I sell a completed version flashed with the firmware of your choice, fully tested and ready to go. Just visit <a title="Shop" href="http://unsigned.io/shop/">my shop</a> and browse through the options! Buying the modem from me helps me fund continued development of the firmware and hardware.</p>
<h3>Resources</h3>
<ul>
<li>Download <a title="Manual" href="https://unsigned.io/shop/wp-content/uploads/2018/04/MicroModem_Manual_v3-1.pdf" target="_blank" rel="noopener noreferrer">user manual</a></li>
<li>Download <a title="Overview" href="https://unsigned.io/shop/wp-content/uploads/2014/12/BoardOverview-1-1.pdf" target="_blank" rel="noopener noreferrer">board overview</a></li>
<li>Download <a title="Schematic" href="https://unsigned.io/shop/wp-content/uploads/2014/12/Schematic-1.pdf" target="_blank" rel="noopener noreferrer">schematic PDF</a> / <a title="Schematic" href="http://unsigned.io/shop/wp-content/uploads/2014/12/Schematic.sch" target="_blank" rel="noopener noreferrer">eagle</a></li>
</ul>
<h3>Firmware downloads</h3>
<p>There's currently several different pre-compiled firmwares available for MicroModem. Take your pick, download, flash and enjoy! If you have the old version of the hardware, select the <em>5V reference</em> build of your chosen version. If you have the new hardware version (greater than 2.0 printed on the PCB), select the <em>3.3V reference</em> build.</p>
<ul>
<li>MicroAPRS KISS firmware: <a href="https://github.com/markqvist/MicroAPRS/raw/master/precompiled/microaprs-3v-kiss-latest.hex">Download Latest Version</a></li>
<li>MicroAPRS SimpleSerial firmware: <a href="https://github.com/markqvist/MicroAPRS/raw/master/precompiled/microaprs-3v-ss-latest.hex">Download Latest Version</a> / <a href="https://unsigned.io/shop/wp-content/uploads/2014/11/Usage-1.pdf">SimpleSerial commands reference</a></li>
<li>MicroModemGP KISS firmware: <a href="https://github.com/markqvist/MicroModemGP/raw/master/precompiled/MicroModemGP-kiss.hex" target="_blank" rel="noopener noreferrer">Download Latest Version</a></li>
<li>MicroModemGP direct serial firmware: <a href="https://github.com/markqvist/MicroModemGP/raw/master/precompiled/MicroModemGP-direct.hex" target="_blank" rel="noopener noreferrer">Download Latest Version</a></li>
</ul>
<p>You can flash the firmware with avrdude or similar programs. Using avrdude, the command would look something like:</p>
<p><code>avrdude -p m328p -c arduino -P /dev/ttyUSB0 -b 115200 -U flash:w:MicroAPRS.hex</code></p>
<p>If you use Windows, and want a GUI flashing program, you might want to take a look at XLoader.</p>
<h3>Specifications</h3>
<p>Here's a list of specifications for the version I offer for sale. If you have any other questions regarding specs, just send me an email, or ask in a comment on this page.</p>
<ul>
<li>ATmega328p @ <strong>16MHz</strong> (2<strong>KB</strong> RAM / <strong>32KB</strong> flash)</li>
<li>Powered from <strong>USB</strong> or external regulated <strong>5V</strong> source</li>
<li><strong>51mA</strong> idle power consumption</li>
<li>Operating range: -<strong>20°C</strong> to <strong>70°C</strong> (non-condensing)</li>
<li>Great demodulator performance, decodes <strong>~900</strong> packets from the TNC Test CD</li>
<li>Modulated analog output level adjustable from approximately <strong>15mV to 1.5V</strong> peak-to-peak</li>
<li>Minimum analog input level for good decode is about<strong> 100mV</strong> peak-to-peak</li>
<li>ADC running on <strong>3.3v reference</strong></li>
<li>Arduino compatible (You can program the board from the <strong>Arduino IDE</strong>, over USB)</li>
<li><strong>Connectors:</strong>
<ul>
<li>USB <strong>Mini-B</strong> (USB-powered)</li>
<li>Audio out (modulator output)</li>
<li>Audio in (demodulator input)</li>
<li>Ground x2</li>
<li>VCC (5V) x2</li>
<li><strong>3.3V output</strong> (Max current 50mA)</li>
<li>PTT_V+ (for Kenwood style PTT)</li>
<li>PTT (logic level PTT signal)</li>
<li>UART - RX / TX (Arduino pins D0 &amp; D1)</li>
<li>I2C - SCL / SDA (Arduino pins A4 &amp; A5)</li>
<li>SPI
<ul>
<li>SCLK (Arduino pin D11)</li>
<li>MISO (Arduino pin D12)</li>
<li>MOSI (Arduino pin D13)</li>
<li>DTR (Reset pin)</li>
</ul>
</li>
</ul>
</li>
<li><strong>Flexible firmware support</strong>, use one of the provided firmwares, or create your own!
<ul>
<li>APRS KISS</li>
<li>APRS SimpleSerial</li>
<li>MicroModemGP KISS</li>
<li>MicroModemGP Direct Serial</li>
</ul>
</li>
<li>Arduino <strong>APRS library available</strong>, create your own APRS firmwares easily!</li>
<li>All firmwares are Open Source, and <a href="https://github.com/markqvist/MicroAPRS" target="_blank" rel="noopener noreferrer">available on GitHub</a></li>
<li>Hardware design is Open Source, and <a href="https://github.com/markqvist/MicroModem/tree/master/Design" target="_blank" rel="noopener noreferrer">available on GitHub</a></li>
</ul>
<h3>How do I build it myself?</h3>
<p>If you want to build MicroModem yourself, you should have a look at the <a href="http://github.com/markqvist/MicroModem">GitHub repository for MicroModem</a>. It contains all the source-code, schematics, PCB layout, documentation and everything you need to get started. If you're not familiar with GitHub and just want to get going, here's the basic resources:</p>
<ul>
<li><a title="Schematic" href="https://unsigned.io/shop/wp-content/uploads/2014/11/Schematic-1.pdf">Schematic</a></li>
<li><a title="Quickstart" href="https://unsigned.io/shop/wp-content/uploads/2014/11/Quickstart-1.pdf">Quickstart Guide</a> (with assembly notes)</li>
<li><a title="PCB" href="https://unsigned.io/shop/wp-content/uploads/2014/11/Modem_rev_a1-1.pdf">PCB Layout</a></li>
<li>General purpose firmware
<ul>
<li>Download for direct serial connection: <a href="https://github.com/markqvist/MicroModemGP/raw/master/precompiled/MicroModemGP-3v-direct.hex" target="_blank" rel="noopener noreferrer">3.3v ADC reference</a> / <a href="https://github.com/markqvist/MicroModemGP/raw/master/precompiled/MicroModemGP-5v-direct.hex" target="_blank" rel="noopener noreferrer">5v ADC reference</a></li>
<li>Download for KISS serial connection: <a href="https://github.com/markqvist/MicroModemGP/raw/master/precompiled/MicroModemGP-3v-kiss.hex" target="_blank" rel="noopener noreferrer">3.3v ADC reference</a> / <a href="https://raw.githubusercontent.com/markqvist/MicroModemGP/master/precompiled/MicroModemGP-5v-kiss.hex" target="_blank" rel="noopener noreferrer">5v ADC reference</a></li>
</ul>
</li>
<li>If you want to use this for APRS, take a look at <a title="MicroAPRS" href="http://unsigned.io/microaprs/">MicroAPRS</a>, the APRS firmware for MicroModem</li>
</ul>
<h3>The general-purpose firmware</h3>
<p>The <a href="https://github.com/markqvist/MicroModemGP">MicroModemGP firmware</a> is ideal if you want to build your own applications running over radio, or just want to experiment. It lets you send packets over almost any radio with up to 792 bytes of data per packet. This means you can also use SLIP to use the modem as an TCP/IP interface. The MicroModemGP firmware features forward error correction (12,8-hamming code), 12-byte interleaving, and CRC checksumming on all packets. It should be easy to expand the protocol to support addressing and routing, encryption, or whatever you find useful. If you have a cool idea but arent sure how to go about it, let me know and I will try and help! The protocol was written as an example of how to implement a basic protocol with error correction.</p>
<p>Dont expect live video-streaming and rocking out to DI.fm over this though. This is only 1.2 kilobits per second. Loading <a title="Hackaday Retro" href="http://retro.hackaday.com/" target="_blank" rel="noopener noreferrer">Hackaday Retro</a> took around 15 minutes when I tried. If youre not using TCP/IP you will have better throughput than that though. But TCP/IP works fine for very simple synchroneous-style connections (like: connect to server -&gt; send request -&gt; wait for response -&gt; send another request -&gt; receive another response -&gt; disconnect). Anything complicated, and you will get a lot of packet loss!</p>
<h3>Other Notes</h3>
<p>I designed MicroModem to be as simple an introduction to digital wireless communication as possible, while still being very flexible and functional. Micromodem will let you learn the basics in how to build digital wireless systems from scratch, and also offer an interesting platform to build further projects on. I hope you will find it educational and useful!</p>
<p>The source code for the modem firmware is very heavily commented, and should be easy to understand. In fact there is more comments than actual code most places. Some of the concepts can be a little daunting just from looking at the code, but it is actually all quite simple, when taken one step at a time. If you have any questions, drop me a comment here and I will try to help out.</p>
<h3>Connecting to a Radio</h3>
<p>You will need to connect the <strong>Audio In</strong> port of the modem to the speaker output of your radio, and the <strong>Audio Out</strong> port of the modem to the input of your radio. Most handheld radios will need microphone level audio on the input port, otherwise the transmitted audio will distort, making packets hard to decode. You should also also connect GND from your radio (usually the GND pin of the speaker jack) to the <strong>GND</strong> port of the modem.</p>
<p>The PTT circuit works by closing a switch (using a MOSFET) between the PTT+ and PTT_GND pins. Most Kenwood-style handhelds will have +3v on the ground pin of the MIC jack, that will trigger PTT when connected to the ground pin on the SPK jack. The PTT connector supplies a logic-level PTT signal. If you can trigger your radios PTT like this, use this connector instead.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,123 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>OpenModem | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="OpenModem">
<meta name="description" content="OpenModem page at unsigned.io">
<meta property="og:description" content="OpenModem page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/hardware/OpenModem.html">
<meta property="og:title" content="OpenModem">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/OpenModem.html">
<meta name="twitter:title" content="OpenModem">
<meta name="twitter:description" content="OpenModem page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>OpenModem</h1>
<p><img style="float: right; margin-left: 1.5em;" src="../images/IMG_2388-2-300x226.jpeg"/>OpenModem is a very flexible and open packet radio modem and TNC. It is built on the proven reliability and performance of the MicroModem platform, but updated with all-round better components, a better DAC and ADC, a faster processor, and a much more powerful firmware, capable of many features that were simply not possible in the limited space of the previous iteration. New expansion ports for GPS, Bluetooth and SD cards have also been added.</p>
<p>OpenModem supports both standard 1200-baud operation, but also 300-baud operation for HF packet, and experimental 2400-baud operation.</p>
<p>OpenModem can handle large packets. With its MTU of 576 bytes and very large packet buffer, it can handle practically any packet radio software in existence. It also makes it possible to use the modem as a generic IP network interface in Linux.</p>
<p><img style="float: left; margin-right: 1.5em;" src="../images/IMG_2380-300x225.jpeg"/> OpenModem can be powered directly from wide range of supplies, so now you can operate an OpenModem from 12v lead-acid batteries, LiPo-batteries, USB power, a DC power supply and much more. The case has all connectors available on the back, and includes slots for mounting an SMA connector for external GPS-antennas, and a AUX-port for user I/O.</p>
<p>It's also easier than ever to connect your radio, with the onboard 4-pole standard 3.5mm jack connector (the black connector to the right of the USB connector in the above photo).</p>
<p>An improved PTT circuit lets you select the PTT style of your radio with an onboard jumper switch, and can match virtually any radio - no more fiddling around with cumbersome external PTT circuits, even for handhelds that use in-line PTT switching like some Yaesu handhelds.</p>
<p>And of course, it is still 100% Open Source, both hardware and software. The only one of its kind on the market today, OpenModem lets you inspect, learn from and modify any part of its design and workings, both hardware and software, and everything is well documented.</p>
<p><img src="../images/OpenModem_pinout-1024x884.jpg"/></p>
<p>While OpenModem works out of the box as a powerful modem and KISS-compatible TNC, it is also fully Arduino-compatible. That means you can easily reprogram the modem from the Arduino IDE. Take a look at <a href="https://unsigned.io/board-support-in-arduino-ide/">this page</a> for info on easily adding the unsigned.io boards to your Arduino IDE.</p>
<p>All the features and settings of the modem can be configured through an intuitive and simple graphical desktop application, that works on both Linux, Mac and Windows.</p>
<p><img src="../images/openmodem_2-1024x812.png"/></p>
<p>Optionally, OpenModem supports strong AES-128 encryption directly in-modem for private communication links. That's a first for a packet-radio TNC, and it's also the only open-source radio modem in existence that supports strong encryption. It's easy to enable and configure encryption with the configuration program.</p>
<p>OpenModem also adds support for logging packet radio traffic to an SD card in industry-standard PCAP format, so now you can log and inspect AX.25 traffic in WireShark.</p>
<p>In short, OpenModem is an incredibly flexible and well-performing radio modem and TNC. But it's also a platform for building, experimenting and learning about data transmission and packet radio.</p>
<p>It's also a perfect modem for running <a href="https://reticulum.network">Reticulum</a> over 1200-baud packet radio.</p>
<h3>Can I buy it?</h3>
<p>Yes, you can purchase it directly from <a href="https://unsigned.io/shop/product/openmodem/">my shop</a>. I ship worldwide, and you will receive your OpenModem completely assembled, in a neat and practical case, and ready to use.</p>
<p><img src="../images/IMG_2383-1024x768.jpeg"/></p>
<p>You will need to supply your own USB-cable and a cable for connecting the modem to your radio or other equipment. If you don't have one already, see the "Connecting to a radio" section of the user manual for instructions.</p>
<h3>Need something specific?</h3>
<p>OpenModem is a very flexible platform, and I offer programming and system design services to create custom solutions. Just get in touch over email and let me know what you need.</p>
<h3>Resources &amp; Downloads</h3>
<ul>
<li><a href="https://github.com/markqvist/OpenModem/raw/master/documentation/OpenModem_Manual.pdf">Download the user manual</a></li>
<li>Get the firmware <a href="https://github.com/markqvist/OpenModem">source-code on GitHub</a></li>
<li>Get the <a href="https://github.com/markqvist/OpenModem/tree/master/documentation">schematics and design files on GitHub</a></li>
<li>Download the configuration utility:
<ul>
<li><a href="https://unsigned.io/dl/OpenModemConfig_MacOS.zip">For MacOS</a></li>
<li><a href="https://unsigned.io/dl/openmodemconfig.rar">For Windows</a></li>
<li><a href="https://github.com/markqvist/openmodemconfigutil">For Linux and Raspberry Pi</a></li>
</ul>
</li>
<li><a href="https://github.com/markqvist/OpenModem/releases/" target="_blank" rel="noopener noreferrer">Download the latest firmware release here</a></li>
<li><a href="https://unsigned.io/ethernet-and-ip-over-packet-radio-tncs/" target="_blank" rel="noopener noreferrer">Use OpenModem as an ethernet adapter</a></li>
<li>Hardware Expansions:
<ul>
<li><a href="https://www.adafruit.com/product/746">Compatible GPS Module</a></li>
<li><a href="https://www.adafruit.com/product/851">Compatible GPS SMA connector</a></li>
<li><a href="https://www.adafruit.com/product/2479">Compatible Bluetooth LE Module</a></li>
</ul>
</li>
</ul>
<h3>Specifications</h3>
<p>Here's a list of specifications for OpenModem. If you have any other questions regarding specs, just send me an email, or ask in a comment on this page.</p>
<ul>
<li>ATmega1284p @ <strong>20MHz</strong> (<strong>16KB</strong> RAM / <strong>128KB</strong> flash)</li>
<li>Can be powered from a DC source of <strong>5V</strong> to <strong>16V</strong></li>
<li>Fully <strong>KISS-compatible</strong> TNC</li>
<li><strong>Adjustable</strong> input and output <strong>gain</strong></li>
<li>User-friendly <strong>graphical configuration program</strong></li>
<li><strong>Low power</strong> consumption: ~<strong>31mA</strong> at 5V</li>
<li>Large <strong>MTU</strong> of <strong>576 bytes</strong></li>
<li>Large packet buffer supports complex packet applications</li>
<li>Operating range: -<strong>20°C</strong> to <strong>70°C</strong> (non-condensing)</li>
<li>Great demodulator performance, decodes <strong>~900</strong> packets from the TNC Test CD</li>
<li>Arduino compatible (You can program the board from the <strong>Arduino IDE</strong>, over USB)</li>
<li>Packet logging in WireShark-compatible format</li>
<li>Optional AES-128 encryption</li>
<li>Green / Red / Blue / Orange status LEDs for Status, Com, RX and TX</li>
<li><strong>Connectors:</strong>
<ul>
<li>USB <strong>Mini-B</strong> (USB-powered)</li>
<li>3.5mm TRRS jack for
<ul>
<li>Analog input</li>
<li>Analog output</li>
<li>PTT</li>
<li>Ground</li>
</ul>
</li>
<li>MicroSD card slot</li>
<li>GPS expansion port</li>
<li>Bluetooth LE expansion port</li>
<li>Voltage input (5-18V)</li>
<li>Two ground pins</li>
<li>Regulated 5V output</li>
<li>SPI</li>
<li>Four general-purpose user I/O pins</li>
</ul>
</li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,282 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="unsigned.io">
<meta name="description" content="unsigned.io">
<meta property="og:description" content="unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/hardware/Original_RNode.html">
<meta property="og:title" content="unsigned.io">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/Original_RNode.html">
<meta name="twitter:title" content="unsigned.io">
<meta name="twitter:description" content="unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>The First RNode Design</h1>
<p><em>This is an archived page detailing the original, first version of the RNode design. For the latest version, please see the <a href="../hardware/RNode.html">RNode</a> page.</em></p>
<p>An RNode is an integrated, long-range data-radio that uses raw LoRa modulation in a variety of frequency bands. You can think of it as a general-purpose LoRa-based network card for your computer or mobile device. It connects to a host via USB, UART serial, Bluetooth or WiFi. It can also be programmed for independent operation. In short: A swiss army-knife of a LoRa-based communication device.</p>
<p>You can <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">turn different kinds of LoRa development boards into an RNode</a>, <a href="https://unsigned.io/how-to-make-your-own-rnodes/">build one yourself</a>, or <a href="https://unsigned.io/shop/product/rnode/">buy a ready-to-use version</a> from my shop. Self-built versions, and RNodes repurposed from other LoRa dev boards will be functionally identical, but may come in many different shapes and sizes, and have different pin layouts. Most of the details on this page concern the original RNode design, but will also be applicable to any other type of RNode.</p>
<p><img src="../images/P1070329-1024x731.jpg"></p>
<p>An RNode can functions as a:</p>
<ul>
<li>Network interface adapter for <a href="https://reticulum.network/">Reticulum</a></li>
<li>LoRa development board</li>
<li><a href="https://unsigned.io/rnodeconf" target="_blank" rel="noopener noreferrer">LoRa-based KISS-compatible amateur radio TNC</a></li>
<li><a href="https://unsigned.io/loramon" target="_blank" rel="noopener noreferrer">Packet sniffer</a> for LoRa networks</li>
<li>flexible platform for experiementing with LoRa technology</li>
<li>LoRa interface for any device with a USB or serial port</li>
<li><a href="https://unsigned.io/ethernet-and-ip-over-packet-radio-tncs/" target="_blank" rel="noopener noreferrer">LoRA-based network interface</a> for Ethernet and IP over LoRa</li>
<li>General-purpose long-range data radio</li>
</ul>
<p>RNode is controlled by a powerful ATmega1284p MCU, and is fully Arduino compatible. You can use the included firmware, or it can be programmed any way you like, either from the Arduino IDE, or using any of the available tools for AVR development. The included firmware can also be edited and compiled directly from the Arduino IDE.</p>
<p>For adding RNode to your Arduino environment, please see <a title="Board support in Arduino IDE" href="https://unsigned.io/board-support-in-arduino-ide/" target="_blank" rel="noopener noreferrer">this post</a>.
For configuring an RNode, please have a look at the <a href="https://unsigned.io/rnodeconf" target="_blank" rel="noopener noreferrer">RNode Config Utility</a>.</p>
<h3>Specifications</h3>
<ul>
<li>High-quality LoRa module with genuine <b>Semtech SX1276 chip</b></li>
<li>Powered by an ATmega1284p MCU clocked at <b>16 MHz</b></li>
<li><b>128</b> kilobytes of <b>flash</b></li>
<li><b>16</b> kilobytes of <b>RAM</b></li>
<li>Large payloads with a packet <strong>MTU of 500 bytes</strong></li>
<li>Up to <b>17 dBm</b> continuous TX output in 820-1020 MHz</li>
<li>Up to <b>14 dBm</b> continuous TX output in 410-525 MHz</li>
<li>Sensitivity down to <b>-139 dBm</b></li>
<li>Data rates ranging from <strong>20 bps to 21.88 kbps</strong></li>
<li><b>Mini-USB</b> connector</li>
<li><b>SMA</b> antenna connector</li>
<li>Fully <strong>programmable</strong></li>
<li><strong>Arduino</strong> compatible</li>
<li><strong>Open source</strong> firmware and config util</li>
<li>17 <strong>multi-purpose IO ports</strong> available
<ul>
<li>All ports can be used as digital inputs or outputs</li>
<li>5 ports can be used as analog inputs</li>
<li>An extra UART serial port is available on two of the pins</li>
<li>I2C port</li>
<li>Two PWM outputs are available</li>
<li>JTAG port available</li>
</ul>
</li>
<li>Operating range: <strong>-20°C to 60°C</strong> (non-condensing)</li>
<li><strong>23.3 mA</strong> idle power consumption</li>
</ul>
<h3>Frequency Bands</h3>
<p>RNode can operate in the following two frequency bands:</p>
<ul>
<li>410 - 525 MHz</li>
<li>820 - 1020 MHz</li>
</ul>
<p>Custom made or RNodes made from repurposed boards may be able to utilise other frquency bands depending on their transceiver setups.</p>
<h3>Operating Modes</h3>
<p>RNode can operate in two modes, host-controlled (default) and TNC mode:</p>
<ul>
<li>When RNode is in host-controlled mode, it will stay in standby when powered on, until the host specifies frequency, bandwidth, transmit power and other required parameters. In host-controlled mode, promiscuous mode can be activated to sniff any LoRa frames on the specified channel configuration.</li>
<li>When RNode is in TNC mode, it will configure itself on powerup and enable the radio immediately. This mode can be enabled by using the configuration utility (the utility will guide you through the settings if you don't specify them directly). This is useful for using RNode as an amateur radio TNC with any legacy packet radio applications.</li>
</ul>
<h3>Resources and Downloads</h3>
<ul>
<li><a href="https://github.com/markqvist/RNode_Firmware/raw/master/Documentation/RNode_Manual.pdf" target="_blank" rel="noopener noreferrer">User manual</a></li>
<li><a href="https://unsigned.io/rnodeconf">Download configuration utility</a></li>
<li><a href="https://unsigned.io/rnodeconf" target="_blank" rel="noopener noreferrer">Configuration utility documentation and source</a></li>
<li><a href="https://unsigned.io/rnode_firmware" target="_blank" rel="noopener noreferrer">Firmware downloads and source code</a></li>
<li><a href="https://unsigned.io/loramon" target="_blank" rel="noopener noreferrer">LoRa packet sniffer program for RNode</a></li>
<li><a href="https://github.com/markqvist/RNode_Firmware/tree/master/Libraries" target="_blank" rel="noopener noreferrer">Programming examples</a></li>
<li><a href="https://github.com/markqvist/RNode_Firmware/tree/master/Schematics" target="_blank" rel="noopener noreferrer">Schematics and design files</a></li>
<li><a href="https://unsigned.io/board-support-in-arduino-ide/" target="_blank" rel="noopener noreferrer">Adding RNode to the Arduino IDE</a></li>
</ul>
<h3>Examples and Learning Resources</h3>
<p>If you want some inspiration to get started with RNode, have a look at the following examples. Most of them contain step-by-step instructions on how to do them yourself.</p>
<ul>
<li><a href="https://unsigned.io/using-an-rnode-with-amateur-radio-software/">Using RNodes With Amateur Radio Software</a></li>
<li><a title="15 kilometre LoRa SSH link with RNode" href="https://unsigned.io/15-kilometre-ssh-link-with-rnode/" target="_blank" rel="noopener noreferrer">Super long distance SSH link</a></li>
<li><a title="IP over LoRa: Using RNode as a wireless NIC" href="https://unsigned.io/using-rnode-as-a-lora-based-wireless-nic/" target="_blank" rel="noopener noreferrer">RNode as wireless network card</a></li>
<li><a title="APRS over LoRa with RNode" href="https://unsigned.io/aprs-over-lora-with-rnode/" target="_blank" rel="noopener noreferrer">APRS over LoRa</a></li>
<li><a href="https://unsigned.io/lora-packet-sniffing-with-rnode" target="_blank" rel="noopener noreferrer">LoRa packet sniffing</a></li>
</ul>
<h3>Pinout and Overview</h3>
<p><img src="../images/Pinout-1-1024x998.png"></p>
<h3>Programming Interface</h3>
<p>Using the <a href="https://github.com/markqvist/RNode_Firmware/tree/master/Libraries" target="_blank" rel="noopener noreferrer">included libraries</a>, it's easy to use RNode in your software. Here's a Python example:</p>
<pre><code class="language-python">from RNode import RNodeInterface
def gotPacket(data, rnode):
print &quot;Received a packet: &quot;+data
rnode = RNodeInterface(
callback = gotPacket,
name = &quot;My RNode&quot;,
port = &quot;/dev/ttyUSB0&quot;,
frequency = 868000000,
bandwidth = 125000,
txpower = 2,
sf = 7,
cr = 5,
loglevel = RNodeInterface.LOG_DEBUG)
rnode.send(&quot;Hello World!&quot;)
</code></pre>
<h3>USB and Serial Protocol</h3>
<p>You can communicate with RNode either via the on-board USB connector, or using the serial pins on the board (labeled RX0 and TX0). RNode uses a standard FTDI USB chip, so it works out of the box without additional drivers in most operating systems.</p>
<p>All communications to and from the board uses <a href="https://en.wikipedia.org/wiki/KISS_(TNC)" target="_blank" rel="noopener noreferrer">KISS framing</a> with a custom command set. RNode also does not use HDLC ports in the command byte, and as such uses the full 8 bits of the command byte is available for the actual command. Please see table below for supported commands.</p>
<table>
<thead>
<tr>
<th>Command</th>
<th>Byte</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data frame</td>
<td>0x00</td>
<td>A data packet to or from the device</td>
</tr>
<tr>
<td>Frequency</td>
<td>0x01</td>
<td>Sets or queries the frequency</td>
</tr>
<tr>
<td>Bandwidth</td>
<td>0x02</td>
<td>Sets or queries the bandwidth</td>
</tr>
<tr>
<td>TX Power</td>
<td>0x03</td>
<td>Sets or queries the TX power</td>
</tr>
<tr>
<td>Spreading Factor</td>
<td>0x04</td>
<td>Sets or queries the spreading factor</td>
</tr>
<tr>
<td>Coding Rate</td>
<td>0x05</td>
<td>Sets or queries the coding rate</td>
</tr>
<tr>
<td>Radio State</td>
<td>0x06</td>
<td>Sets or queries radio state</td>
</tr>
<tr>
<td>Radio Lock</td>
<td>0x07</td>
<td>Sets or queries the radio lock</td>
</tr>
<tr>
<td>Device Detect</td>
<td>0x08</td>
<td>Probe command for device detection</td>
</tr>
<tr>
<td>Promiscuous</td>
<td>0x0E</td>
<td>Sets or queries promiscuous mode</td>
</tr>
<tr>
<td>Ready</td>
<td>0x0F</td>
<td>Flow control command indicating ready for TX</td>
</tr>
<tr>
<td>RX Stats</td>
<td>0x21</td>
<td>Queries received bytes</td>
</tr>
<tr>
<td>TX Stats</td>
<td>0x22</td>
<td>Queries transmitted bytes</td>
</tr>
<tr>
<td>Last RSSI</td>
<td>0x23</td>
<td>Indicates RSSI of last packet received</td>
</tr>
<tr>
<td>Blink</td>
<td>0x30</td>
<td>Blinks LEDs</td>
</tr>
<tr>
<td>Random</td>
<td>0x40</td>
<td>Queries for a random number</td>
</tr>
<tr>
<td>Firmware Version</td>
<td>0x50</td>
<td>Queries for installed firmware version</td>
</tr>
<tr>
<td>ROM Read</td>
<td>0x51</td>
<td>Read EEPROM byte</td>
</tr>
<tr>
<td>ROM Write</td>
<td>0x52</td>
<td>Write EEPROM byte</td>
</tr>
<tr>
<td>TNC Mode</td>
<td>0x53</td>
<td>Enables TNC mode</td>
</tr>
<tr>
<td>Normal Mode</td>
<td>0x54</td>
<td>Enables host-controlled mode</td>
</tr>
<tr>
<td>ROM Erase</td>
<td>0x59</td>
<td>Completely erases EEPROM</td>
</tr>
<tr>
<td>Error</td>
<td>0x90</td>
<td>Indicates an error</td>
</tr>
</tbody>
</table>
<h3>A few notes on the EEPROM</h3>
<p>As a completely open device, RNode does not block you from modifying the EEPROM contents, which specifies things like radio parameters, serial number, manufacture date and similar. But please be aware that doing so might render the device inoperable or burn out the radio. Before making any modifications, please make sure to create a backup of the EEPROM.</p>
<p>RNode includes a cryptographic signature of the EEPROM contents, which validates all the information stored within it. You will not be able to re-create a valid signature if you erase it! Without this signature, the board will still function, but warranty will be void. If you upload your own programs or alternative firmwares to RNode, you should make sure that they don't write to the last 200 bytes of EEPROM. You can back up your EEPROM with the config utility.</p>
<h3>How do I get it?</h3>
<p>You can <a title="RNode" href="https://unsigned.io/shop/product/rnode/">buy one from my shop</a>, or make it yourself. Using the <a href="https://github.com/markqvist/RNode_Firmware/tree/master/Schematics" target="_blank" rel="noopener noreferrer">circuit design files</a>, it is possible to build a fully functional RNode on a breadboard. See the following articles for more info on how to easily make your own RNodes from common boards:</p>
<ul>
<li><a href="https://unsigned.io/rnode-with-anything/">RNode With Anything</a></li>
<li><a href="https://unsigned.io/installing-rnode-firmware-on-t-beam-and-lora32-devices/">Installing RNode Firmware on T-Beam and LoRa32 Devices</a></li>
<li><a href="https://unsigned.io/how-to-make-your-own-rnodes/">How To Make Your Own RNodes</a></li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

97
docs/hardware/RNode.html Normal file
View file

@ -0,0 +1,97 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>RNode | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="RNode">
<meta name="description" content="An RNode is an open, free and unrestricted digital radio transceiver, that is easy to replicate across space and time. It enables anyone to send and receive any kind of data over both short and very long distances.">
<meta property="og:description" content="An RNode is an open, free and unrestricted digital radio transceiver, that is easy to replicate across space and time. It enables anyone to send and receive any kind of data over both short and very long distances.">
<meta property="og:image" content="https://unsigned.io/images/rnv21_bgp.webp">
<meta property="og:url" content="https://unsigned.io/hardware/RNode.html">
<meta property="og:title" content="RNode">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/RNode.html">
<meta name="twitter:title" content="RNode">
<meta name="twitter:description" content="An RNode is an open, free and unrestricted digital radio transceiver, that is easy to replicate across space and time. It enables anyone to send and receive any kind of data over both short and very long distances.">
<meta name="twitter:image" content="https://unsigned.io/images/rnv21_bgp.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>RNode</h1>
<p>An RNode is an open, free and unrestricted digital radio transceiver. It enables anyone to send and receive any kind of data over both short and very long distances. RNodes can be used with many different kinds of programs and systems, but they are especially well suited for use with the cryptographic networking stack <a href="https://reticulum.network">Reticulum</a>.</p>
<p>RNode is not a product, and not any <em>one</em> specific device in particular. It is a system that is easy to replicate across space and time, which produces highly functional communications tools. At the heart of this system is the <a href="/rnode_firmware/">RNode Firmware</a> and the setup and installation tools included in <a href="/reticulum/">Reticulum</a>.</p>
<p>The entire RNode and Reticulum system is designed to respect user autonomy and empower individuals and communities to protect their sovereignty, privacy and ability to communicate and exchange data and ideas freely.</p>
<p><img src="../images/rnv21_bgp.webp"></p>
<center>*An RNode made from readily available and cheap parts, in a durable 3D printed case*</center>
<p>The RNode system is primarily software, which <em>transforms</em> different kinds of available hardware devices into functional, physical RNodes, which can then be used to solve a wide range of communications tasks. Such RNodes can be modified and built to suit the specific time, locale and environment they need to exist in.</p>
<h2>One Tool, Many Uses</h2>
<p>The RNode design is meant to flexible and hackable. At it's core, it is a low-power, but extremely long-range digital radio transceiver. Coupled with Reticulum, it provides encrypted and secure communications.</p>
<p>Depeding on configuration, it can be used for local networking purposes, or to send messages and data over very long distances. Once you have an RNode, there is a wide variety of possible uses:</p>
<ul>
<li>As a network adapter for <a href="https://reticulum.network">Reticulum</a></li>
<li>Secure messaging using <a href="../software/Sideband.html">Sideband</a></li>
<li>Information sharing and communication using <a href="../software/Nomad_Network.html">Nomad Network</a></li>
<li>LoRa-based <a href="../guides/2020_05_03_using_rnodes_with_amateur_radio_software.html">KISS-compatible amateur radio TNC</a></li>
<li>LoRa development platform</li>
<li><a href="../software/LoRaMon.html">Packet sniffer</a> for LoRa networks</li>
<li>Long range <a href="../guides/2020_05_27_ethernet-and-ip-over-packet-radio-tncs.html">Ethernet and IP network interface</a> on Linux</li>
<li>As a general-purpose long-range data radio</li>
</ul>
<h2>A Self-Replicating System</h2>
<p>If you notice the presence of a circularity in the naming of the system as a whole, and the physical devices, it is no coincidence. Every RNode contains the seeds necessary to reproduce the system, the <a href="/rnode_bootstrap_console/">RNode Bootstrap Console</a>, which is hosted locally on every RNode, and can be activated and accesses at any time - no Internet required.</p>
<p>The designs, guides and software stored within allows users to create more RNodes, and even to bootstrap entire communications networks, completely independently of existing infrastructure, or in situations where infrastructure has become unreliable or is broken.</p>
<p><img alt="RNode" src="../images/126dcfe92fb7.webp" /></p>
<center>*Where there is no Internet, RNodes will still communicate*</center>
<p>The production of one particular RNode device is not an end, but the potential starting point of a new branch of devices on the tree of the RNode system as a whole.</p>
<p>This tree fits into the larger biome of Free &amp; Open Communications Systems, which I hope that you - by using communications tools like RNode - will help grow and prosper.</p>
<h2>Types &amp; Performance</h2>
<p>RNodes can be made in many different configurations, and can use many different radio bands, but they will generally operate in the <strong>433 MHz</strong>, <strong>868 MHz</strong>, <strong>915 MHZ</strong> and <strong>2.4 GHz</strong> bands. They will usually offer configurable on-air data speeds between just a <strong>few hundred bits per second</strong>, up to <strong>a couple of megabits per second</strong>.</p>
<p>The RNode system has been designed to allow reliable systems for basic human communications, over very wide areas, while using very little power, being cheap to build, free to operate, and near impossible to censor.</p>
<p>While <strong>speeds are lower</strong> than WiFi, typical communication <strong>ranges are many times higher</strong>. Several kilometers can be acheived with usable bitrates, even in urban areas, and over <strong>100 kilometers</strong> can be achieved in line-of-sight conditions.</p>
<h2>Getting &amp; Creating RNodes</h2>
<p>If you already know someone who makes RNodes, ask them to help you build one. If not, you can learn how to put one together with relative ease.</p>
<p>This site contains a number of guides and resources that will teach you how. Here's some good starting points:</p>
<ul>
<li>Create a <a href="../guides/2022_01_25_installing-rnode-firmware-on-supported-devices.html">basic RNode from readily available development boards</a></li>
<li>Follow a complete build recipe for <a href="../guides/2023_01_14_Making_A_Handheld_RNode.html">making a handheld RNode</a>, like the one pictured above</li>
<li>Learn the basics on how to <a href="../guides/2022_01_26_how-to-make-your-own-rnodes.html">create and build your own RNode designs</a> from scratch</li>
<li>Once you've got the hang of it, start building RNodes for your community, or <a href="../sell_rnodes.html">even for selling them</a></li>
</ul>
<p>If you would rather just buy a pre-made unit, you can visit <a href="https://unsigned.io/shop">my shop</a> and purchase my particular version of the <a href="https://unsigned.io/shop/handheld-rnode/">Handheld RNode</a>, which I can assure you is made to the highest quality, and with a lot of care.</p>
<h2>Support RNode Development</h2>
<p>You can help support the continued development of open, free and private communications systems by donating via one of the following channels:</p>
<ul>
<li>Monero<br/>
<code>84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w</code>
<br/><br/></li>
<li>Ethereum<br/>
<code>0xFDabC71AC4c0C78C95aDDDe3B4FA19d6273c5E73</code>
<br/><br/></li>
<li>Bitcoin<br/>
<code>35G9uWVzrpJJibzUwpNUQGQNFzLirhrYAH</code>
<br/><br/></li>
<li>Ko-Fi<br/>
<a href="https://ko-fi.com/markqvist"><code>https://ko-fi.com/markqvist</code></a></li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,63 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Unduino1284p | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Unduino1284p">
<meta name="description" content="Unduino1284p page at unsigned.io">
<meta property="og:description" content="Unduino1284p page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/hardware/Unduino1284p.html">
<meta property="og:title" content="Unduino1284p">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/Unduino1284p.html">
<meta name="twitter:title" content="Unduino1284p">
<meta name="twitter:description" content="Unduino1284p page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>Unduino1284p</h1>
<p>Unduino1284p is an Arduino-compatible development, prototyping and control board featuring the powerful ATmega1284p MCU and onboard USB-to-serial converter, in a very small (but still breadboard-friendly) form-factor. The board is directly programmable from within the Arduino IDE, or using avr-gcc tools.</p>
<p><img src="../images/20180406_152450-1-1024x576.jpg"/></p>
<h3>Specifications</h3>
<ul>
<li>ATmega1284p MCU clocked at 16 MHz</li>
<li>16 KB of RAM</li>
<li>128 KB of flash</li>
<li>4KB EEPROM</li>
<li>All MCU pins broken out on board</li>
<li>On-board USB-to-serial converter (FT230XS)</li>
<li>USB Mini-B connector</li>
<li>Dimensions: 43 x 24 mm</li>
<li>3.3v output (max 50mA)</li>
</ul>
<h3>Pin Layout</h3>
<p>The Arduino core for Unduino1284p is based on <a href="https://github.com/MCUdude/MightyCore">MightyCore</a> by <a href="https://github.com/MCUdude">MCUDude</a>, and follows the same pin mapping. Native port descriptions are printed on the bottom of the board. The following pinout also displays the mapping to Arduino pins, and the most commonly used extra functions of the various pins.</p>
<p><img src="../images/Unduino_pinout-1024x1002.jpg"/></p>
<h3>Adding Unduino to the Arduino IDE</h3>
<p>I provide a board support package that automatically adds support for all Unsigned.io boards to the Arduino IDE. Please <a href="https://unsigned.io/board-support-in-arduino-ide/">read this post</a> for instructions on how to add it.</p>
<h3>Getting one</h3>
<p>You can purchase the Unduino1284p <a href="https://unsigned.io/shop/product/unduino/">from my shop</a>. I ship worldwide.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

49
docs/hardware/index.html Normal file
View file

@ -0,0 +1,49 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>Hardware | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Hardware">
<meta name="description" content="Hardware page at unsigned.io">
<meta property="og:description" content="Hardware page at unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/hardware/index.html">
<meta property="og:title" content="Hardware">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/index.html">
<meta name="twitter:title" content="Hardware">
<meta name="twitter:description" content="Hardware page at unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>Hardware</h1>
<p>I am actively developing and maintaining a variety of hardware related to Free &amp; Open Communications Systems. The following list serves as an entry point to further explore these efforts.</p>
<ul>
<li><a href="RNode.html">RNode</a> is a flexible, highly modifiable, self-replicating system for creating free and unrestricted digital radio transceivers, that respects user autonomy and privacy, and can be used for a variety of purposes.</li>
<li><a href="OpenModem.html">OpenModem</a> is a very flexible and open-source packet radio modem and TNC. It is built on the proven reliability and performance of the MicroModem platform, but updated with all-round better components, a better DAC and ADC, a faster processor, and a much more powerful firmware.</li>
<li><a href="Original_RNode.html">The Original RNode Design</a> details the operation and functionality of the initial version of the RNode concept, the LoRa based open-source communications utility.</li>
<li><a href="Unduino1284p.html">Unduino1284p</a> is an Arduino-compatible development, prototyping and control board featuring the powerful ATmega1284p MCU and onboard USB-to-serial converter, in a very small (but still breadboard-friendly) form-factor. The board is directly programmable from within the Arduino IDE, and using avr-gcc tools.</li>
<li><a href="MicroModem.html">MicroModem</a> is an open-source implementation of a 1200-baud AFSK / Bell 202 modem on the popular ATmega328p microprocessor.</li>
</ul>
<p>If any of these projects have been helpful to you or your community, please <a href="../donate.html">donate</a> to help keep this work alive and available.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

View file

@ -0,0 +1,121 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>How To Make Your Own RNodes | unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="How To Make Your Own RNodes">
<meta name="description" content="This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a commercially purchased board.">
<meta property="og:description" content="This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a commercially purchased board.">
<meta property="og:image" content="https://unsigned.io/images/e4261dcb-49e5-4cd3-856e-c44fb7522b32-400x275.jpg">
<meta property="og:url" content="https://unsigned.io/guides/2022_01_26_how-to-make-your-own-rnodes.html">
<meta property="og:title" content="How To Make Your Own RNodes">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/guides/2022_01_26_how-to-make-your-own-rnodes.html">
<meta name="twitter:title" content="How To Make Your Own RNodes">
<meta name="twitter:description" content="This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a commercially purchased board.">
<meta name="twitter:image" content="https://unsigned.io/images/e4261dcb-49e5-4cd3-856e-c44fb7522b32-400x275.jpg">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><div class="article_date">2022-01-26</div>
<h1>How To Make Your Own RNodes</h1>
<p>This article will outline the general process, and provide the information you need, for building your own RNode from a few basic modules. The RNode will be functionally identical to a purchased device.</p>
<p>Once you have learned the put together a custom RNode with your own choice of components, you can use these skills to create your own RNode designs from scratch, using either a custom-designed PCB, or simply by mounting your choice of modules in a enclosure or case.</p>
<p>If you haven't already, you migh also want to check out how to <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">install the RNode firmware directly on pre-made LoRa development boards</a>.</p>
<p><img alt="A Homemade RNode" src="../images/e4261dcb-49e5-4cd3-856e-c44fb7522b32-1024x768.jpg" />
<em>A homemade RNode, based on an ESP32 board and a transceiver module, ready for use</em></p>
<p>Since there is not <em>one right way</em> to cut this pie, this article will probably not give the <em>exact</em> steps for the combination of components you choose, but will instead attempt to provide you with the information you need to build RNodes from a wide variety of microcontroller boards and LoRa modules. Generally speaking, you will need three things to construct a working RNode:</p>
<ul>
<li>A supported microcontroller board</li>
<li>A supported transceiver module</li>
<li>A way to mount and connect the two</li>
</ul>
<h3>Preparing the Hardware</h3>
<p>Currently, the RNode firmware supports a variety of different microcontrollers, and more are being added regurlarly. That means that there is a <em>lot</em> of boards to choose from. You can probably use most boards that are based on either the <strong>ATmega1284P</strong>, <strong>ATmega2560</strong> or <strong>ESP32</strong> microcontrollers. Regarding microcontroller boards there is a few key points to take note of:</p>
<ul>
<li>You will need to connect the transceiver module over the SPI bus. This means that the board should have SPI pins for exposed for you to connect to. UART-only modules will <strong>not</strong> work.</li>
<li>Logic voltage levels must match the transceiver module you are using, or you will have to add a voltage level converter in between the two devices, that is fast enough for the clock of the SPI bus (usually 8 or 10MHz). I recommend using a microcontroller and transceiver module with matching logic levels. Most will be 3.3 volts.</li>
<li>Apart from the SPI pins for <em>clock</em>, <em>chip select</em>, <em>MOSI</em> and <em>MISO</em>, you will also need an output pin for a <em>reset</em> line to the transceiver module, and one <strong>interrupt-capable</strong> input pin for the interrupt signal from the transceiver module. Almost all boards should have plenty of IO available for this, but you might as well make sure before ordering anything.</li>
<li>You need to choose a board that can provide enough power on it's internal regulators to power the transceiver module while it is transmitting. This can draw quite a bit of power, and some boards only have very small 3.3v regulators, which will not cut it while driving the transmitter at full tilt.</li>
</ul>
<p>Regarding the LoRa transceiver module, there is going to be an almost overwhelming amount of options to choose from. To narrow it down, here are the essential characteristics to look for:</p>
<ul>
<li>The RNode firmware needs a module based on the <strong>Semtech SX1276</strong>, <strong>Semtech SX1278</strong>, <strong>SX1262</strong>, <strong>SX1268</strong> and <strong>SX1280</strong> LoRa transceiver ICs. These come in several different variants, for all frequency bands from about 150 MHz to 2500 MHz.</li>
<li>The module <em>must</em> expose the direct SPI bus to the transceiver chip. UART based modules that add their own communications layer will not work.</li>
<li>The module must also expose the <em>reset</em> line of the chip, and provide the <strong>DIO0</strong> (or other relevant) interrupt signal <em>from</em> the chip.</li>
<li>As mentioned above, the module must be logic-level compatible with the microcontroller you are using, unless you want to add a level-shifter. Resistor divider arrays will most likely not work here, due to the bus speeds required.</li>
</ul>
<p>Keeping those things in mind, you should be able to select a suitable combination of microcontroller board and transceiver module.</p>
<h3>Assembling the RNode</h3>
<p>Ok, having gone through the endless combinations and selected a board and a module, you are actually almost done. Connecting the devices together is pretty simple, and should only take a few minutes. I recommend that you place both devices in a solderless breadboard initially, to make sure everything is working as expected. Once you have a working setup, you can make it more durable and permanent by soldering it to a prototyping board, and connecting permanent lines between the devices.</p>
<p>In the photo above I used an Adafruit Feather ESP32 board and a ModTronix inAir4 module. That will result in an RNode suitable for the 420 MHz to 520 MHz range. To complete the device I did the following:</p>
<ol>
<li>Connect the GND pin of the microcontroller board to the GND rail of the breadboard.</li>
<li>Connect the GND pin of the transceiver module to the GND rail of the breadboard.</li>
<li>Connect the 3.3 volt output line of the microcontroller board to the V_IN pin of the transceiver module.</li>
<li>Connect the <em>chip select</em> pin of the microcontroller board to the <em>chip select</em> pin of the transceiver module.</li>
<li>Connect the <em>SPI clock</em> pin of the microcontroller board to the <em>SPI clock</em> pin of the transceiver module.</li>
<li>Connect the <em>MOSI</em> pin of microcontroller board to the <em>MOSI</em> pin of the transceiver module.</li>
<li>Connect the <em>MISO</em> pin of the microcontroller board to the <em>MISO</em> pin of the transceiver module.</li>
<li>Connect the <em>transceiver reset</em> pin of the microcontroller board to the <em>reset</em> pin of the transceiver module.</li>
<li>Connect the <em>DIO0</em> pin of the transceiver module to the <em>DIO0 interrupt pin</em> of the microcontroller board.</li>
<li>You can optionally connect transmit and receiver LEDs to the corresponding pins of the microcontroller board.</li>
</ol>
<p>The pin layouts of your transceiver module and microcontroller board will vary, but you can look up the correct pin assignments for your processor type and board layout in the <a href="https://github.com/markqvist/RNode_Firmware/blob/master/Config.h">Config.h</a> file of the <a href="https://unsigned.io/rnode_firmware">RNode Firmware</a>.</p>
<h3>Loading the Firmware</h3>
<p>Once the hardware is assembled, you are ready to load the firmware onto the board and configure the configuration parameters in the boards EEPROM. Luckily, this process is completely automated by the <a href="https://markqvist.github.io/Reticulum/manual/using.html#the-rnodeconf-utility">RNode Configuration Utility</a>. To prepare for loading the firmware, make sure that <code>python</code> and <code>pip</code> is installed on your system, then install the <code>rns</code> package (which includes the <code>rnodeconf</code> program) by issuing the command:</p>
<pre><code class="language-txt">pip install rns
</code></pre>
<p>If installation goes well, you can now move on to the next step.</p>
<blockquote>
<p><em>Take Care</em>: A LoRa transceiver module <strong>must</strong> be connected to the board for the firmware to start and accept commands. If the firmware does not verify that the correct transceiver is available on the SPI bus, execution is stopped, and the board will not accept commands. If you find the board unresponsive after installing the firmware, or EEPROM configuration fails, double-check your transceiver module wiring!</p>
</blockquote>
<p>Having double-checked that everything is connected correctly, it is time to power up the board and install the firmware. Run the <code>rnodeconf</code> autoinstaller by executing the command:</p>
<pre><code class="language-txt">rnodeconf --autoinstall
</code></pre>
<p>The installer will now ask you to insert the device you want to set up, scan for connected serial ports, and ask you a number of questions regarding the device. When it has the information it needs, it will install the correct firmware and configure the necessary parameters in the device EEPROM for it to function properly.</p>
<p>If the install goes well, you will be greated with a success message telling you that your device is now ready. To confirm everything is OK, you can query the device info with:</p>
<pre><code class="language-txt">rnodeconf --info /dev/ttyUSB0
</code></pre>
<p>Remember to replace <code>/dev/ttyUSB0</code> with the actual port the installer used in the previous step. You should now see <code>rnodeconf</code> connect to your device and show something like this:</p>
<pre><code class="language-txt">[2022-01-27 20:11:22] Opening serial port /dev/ttyUSB0...
[2022-01-27 20:11:25] Device connected
[2022-01-27 20:11:25] Current firmware version: 1.26
[2022-01-27 20:11:25] Reading EEPROM...
[2022-01-27 20:11:25] EEPROM checksum correct
[2022-01-27 20:11:25] Device signature validated
[2022-01-27 20:11:25]
[2022-01-27 20:11:25] Device info:
[2022-01-27 20:11:25] Product : LilyGO LoRa32 v2.0 850 - 950 MHz (b0:b8:36)
[2022-01-27 20:11:25] Device signature : Validated - Local signature
[2022-01-27 20:11:25] Firmware version : 1.26
[2022-01-27 20:11:25] Hardware revision : 1
[2022-01-27 20:11:25] Serial number : 00:00:00:02
[2022-01-27 20:11:25] Frequency range : 850.0 MHz - 950.0 MHz
[2022-01-27 20:11:25] Max TX power : 17 dBm
[2022-01-27 20:11:25] Manufactured : 2022-01-27 20:10:32
[2022-01-27 20:11:25] Device mode : Normal (host-controlled)
</code></pre>
<p>On the hardware side, you should see the status LED flashing briefly approximately every 2 seconds. If all of the above checks out, congratulations! Your RNode is now ready to use.</p>
<p>If you want to use it with <a href="https://reticulum.network">Reticulum</a>, <a href="https://unsigned.io/nomadnet">Nomad Network</a>, <a href="https://unsigned.io/loramon">LoRaMon</a>, or other such applications, leave it in the default <code>Normal (host-controlled)</code> mode.</p>
<p>If you want to use it with legacy amateur radio applications that work with KISS TNCs, you should <a href="https://unsigned.io/using-an-rnode-with-amateur-radio-software/">set it up in TNC mode</a>.</p>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>

1
docs/images/.htaccess Normal file
View file

@ -0,0 +1 @@
Header set Cache-Control "max-age=86400, public"

BIN
docs/images/0-1024x573.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/images/3_conv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
docs/images/A1-1024x731.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Some files were not shown because too many files have changed in this diff Show more