<html><head></head><body><div class="ydp1040fed3yahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px;"><div></div>
<div dir="ltr" data-setdir="false">You know, if we are even going to consider a totally different protocol, we probably should look at the lower levels of the protocol stack, too. Instead of using Bell 202 modem tones (just because the chips were readily available in 1990), we should look at carrying the bits of the message with something more tolerant. That's why my other unrelated experiment was using frames encoded as whole bytes in PSK1000R (not Varicode), so I'd have forward error correction at the modem level, plus checksums in the frames sent over the modem (in case the error exceeded what FEC could handle). And I'm sure the technology for software modems can do better than PSK1000R (heck, fldigi has 2xPSK1000R, and I'm sure there are other more resilient modem protocols that don't stumble into patent-encumbered technology (i.e., Robust-Packet). Olivia 64-2K, anybody? :-) On the other hand, we still need to keep Aloha circles in mind to keep from overwhelming the channel.<br></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">And we've already run into issues with AX.25 version 2.2, now that some countries are issuing 7-character callsigns.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">So if we're still going to try shoving SA/COP data through a limited-bandwidth voice transceiver, let's be open-minded about it.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Now, what about getting back to maintaining what we already have and love/hate, which is APRS As She Is Written?</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Andrew, KA2DDO<br></div><div><br></div>
</div><div id="ydp28552ed3yahoo_quoted_5266246638" class="ydp28552ed3yahoo_quoted">
<div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
<div>
On Saturday, February 12, 2022, 08:17:37 PM EST, Heikki Hannikainen <hessu@hes.iki.fi> wrote:
</div>
<div><br></div>
<div><br></div>
<div><div dir="ltr">On Sat, 12 Feb 2022, Lynn W Deffenbaugh (Mr) wrote:<br clear="none"><br clear="none">> I'm only going to weigh in on protobufs with a single comment: Non-readable <br clear="none">> by mere humans therefore harder to diagnose for non-technical users.<br clear="none"><br clear="none">I find non-technical regular users have difficulties with the plain APRS <br clear="none">formats and they often find them equally unreadable. :)<br clear="none"><br clear="none">> Oh, and picture just how mangled a protobuf would be if someone is running <br clear="none">> PassAll in their TNC or has bit-errors being introduced by RFI along their <br clear="none">> serial cable.<br clear="none"><br clear="none">The results would be surprisingly similar with protobuf and any APRS <br clear="none">format.<br clear="none"><br clear="none">If it's no longer a valid protobuf message (missing/invalid field tags or <br clear="none">such), the parser says "I can't parse this message" and gives up, <br clear="none">returning an error message. With single-byte corruptions this happens <br clear="none">quite often. If bytes are removed from the middle, decoding usually fails <br clear="none">cleanly with an error message. If the end of a packet goes missing <br clear="none">altogether, and the truncation point is at a field boundary, it may <br clear="none">successfully decode fields which appeared before the truncation. But, for <br clear="none">example, the comment text field always seems to come out completely, or <br clear="none">not at all, even though it is encoded in the end of the message and <br clear="none">truncation is likely to happen within that long field.<br clear="none"><br clear="none">If corruption happens within the middle of some field data (some bytes <br clear="none">within a coordinate get swapped, for example), invalid values come out, <br clear="none">just like in any other format, since there's no error detection on this <br clear="none">layer. This is also easy to test with some random corruptions. I added a <br clear="none">2-liner to replace a random byte, and a whole packet decoder with error <br clear="none">handling:<br clear="none"><br clear="none"><a shape="rect" href="https://github.com/hessu/aprs-protobuf-test/blob/master/test_corruption.py" rel="nofollow" target="_blank">https://github.com/hessu/aprs-protobuf-test/blob/master/test_corruption.py</a><br clear="none"><br clear="none">If corruption lands on the protobuf delimiters (quite often), the decode <br clear="none">step fails like it preferably should:<br clear="none"><br clear="none">$ python3 test_corruption.py<br clear="none">Protobuf: b'\n\x0f\rj\xa6pB\x15T\xae\xc1A\x18y <br clear="none">\x8e\x02\x12\x02/>\x18\xa1\xa1\xa1\x90\x06R\x17Hessu, <a shape="rect" href="https://aprs.fi/'" rel="nofollow" target="_blank">https://aprs.fi/'</a><br clear="none">Len: 52<br clear="none"><br clear="none">Failed to decode: Error parsing message<br clear="none"><br clear="none"><br clear="none">If corruption happens to land within the comment field (quite often, <br clear="none">since the field is long), comment is corrupted:<br clear="none"><br clear="none">Decoded: position {<br clear="none"> latitude: 60.162513732910156<br clear="none"> longitude: 24.210121154785156<br clear="none"> speed: 121<br clear="none"> course: 270<br clear="none">}<br clear="none">symbol: "/>"<br clear="none">timestamp: 1644712184<br clear="none">comment: "Hes\245u, <a shape="rect" href="https://aprs.fi/" rel="nofollow" target="_blank">https://aprs.fi/</a>"<br clear="none"><br clear="none"><br clear="none">If corruption happens to land within coordinates, the value may be a <br clear="none">little bit off (in the low bits of the 32-bit float), or it may be *very* <br clear="none">badly off, like this:<br clear="none"><br clear="none">Decoded: position {<br clear="none"> latitude: 1.1586878672781997e-32<br clear="none"> longitude: 24.210121154785156<br clear="none"> speed: 121<br clear="none"> course: 270<br clear="none">}<br clear="none">symbol: "/>"<br clear="none">timestamp: 1644712235<br clear="none">comment: "Hessu, <a shape="rect" href="https://aprs.fi/" rel="nofollow" target="_blank">https://aprs.fi/</a>"<br clear="none"><br clear="none"><br clear="none">All in all, not very different from what happens with APRS encodings. If <br clear="none">corruption needs to be detected, a little CRC in the end (outside the <br clear="none">protobuf chunk) would do wonders - with a little additional overhead one <br clear="none">more problem would be avoided.<br clear="none"><br clear="none">Again, this is just food for thought and not a practical proposal for <br clear="none">something that should or could be done with APRS at this time. I <br clear="none">understand it's not feasible, but please try to keep an open mind and see <br clear="none">the good sides of such an approach! :)<div class="ydp28552ed3yqt8468453693" id="ydp28552ed3yqtfd41508"><br clear="none"><br clear="none"> - Hessu</div></div><div class="ydp28552ed3yqt8468453693" id="ydp28552ed3yqtfd63102">_______________________________________________<br clear="none">aprssig mailing list<br clear="none"><a shape="rect" href="mailto:aprssig@lists.tapr.org" rel="nofollow" target="_blank">aprssig@lists.tapr.org</a><br clear="none"><a shape="rect" href="http://lists.tapr.org/mailman/listinfo/aprssig_lists.tapr.org" rel="nofollow" target="_blank">http://lists.tapr.org/mailman/listinfo/aprssig_lists.tapr.org</a><br clear="none"></div></div>
</div>
</div></body></html>