Wandering in San Diego

I have wanderlust but the Coronavirus lockdown is preventing me from traveling this year. It would be fun to dig out old photos and look back on my past travels. Let me start with one of my favorite cities: San Diego, California.

December 2011

My first time in San Diego was a road trip with a few Chinese students I met during my first days in Tucson. We visited SeaWord San Diego, where I enjoyed their famous Shamu show, in which I got splashed by the killer whales.

whale performance in SeaWorld San Diego, 2011-12-22

During the same trip, we also visited USS Midway Museum, an aircraft carrier docked in San Diego harbor. I learned how these little planes take off, and more importantly how they can land safely with the help of arresting gear.

NFD nightly packages

NDN Forwarding Daemon (NFD) is the reference implementation of Named Data Networking (NDN) forwarding plane. The software is continuously developed, but binary releases happen rather infrequently. Recently, I made a workflow to build NFD and related software automatically.

Download page: nfd-nightly.ndn.today

Instructions

Which platform should I choose?

  • The platform identifier has two parts: Linux distribution and CPU architecture. Both parts must match your machine.
  • Linux distribution:
    • bionic is Ubuntu 18.04.
    • buster is Debian 10. This includes Raspberry Pi OS.
  • CPU architecture:

Quarantine Foods

The year 2020 started normal. Every weekday, I go to office. Three times a week, I pump those muscles at the gym. Every four days, I visit the grocery store to pick up a loaf of bread, along with other ingredients. Every Friday evening, I have a video chat with my family.

🕒 12 Timezones Away — 3 Timezones Away — Oops, It's Here

The first sign of problem occurred on Chinese New Year's Day. Traditionally, my mother's extended family would have an annual gathering during the holidays. However, my mother informed me that their gathering has been canceled, because there's a Coronavirus outbreak in parts of China. I thought, well, this doesn't affect me, because I live in Maryland USA, 12 timezones away from China.

The next week, China entered a lock down due to the spreading virus. My father found himself relying more on grocery delivery services. A difference from what I observed in 2017 is that, the gated community is not allowing delivery persons to enter the neighborhood, and my father has to collect his deliveries at the neighborhood entrance. At the same time, I heard on Twitter that the Coronavirus has reached the Chinese community in Seattle, 3 timezones from me.

In early March, the Coronavirus reached Maryland. A week later, public schools are being closed. This is when things started to get serious.

Getting Started with NDNts in Node.js

This article shows how to get started with NDNts, Named Data Networking (NDN) libraries for the modern web. In particular, it demonstrates how to write a producer and a consumer application in Node.js using JavaScript programming language, and transmit a few Interest and Data packets via NFD forwarder on the local machine.

Prepare the System

This guide is written for Ubuntu 18.04 operating system. If you have a Windows PC, you can enable Windows Subsystem for Linux and install Ubuntu 18.04 from the Microsoft Store. If you have a Macbook or a Linux machine other than Ubuntu 18.04, you can install Vagrant, and create a virtual machine using bento/ubuntu-18.04 template. All steps below should be executed inside Ubuntu 18.04 environment.

To use NDNts, you must have Node.js. As of this writing, NDNts works best with Node.js 14.x, and you should install that version. The easiest way to install Node.js is through Node Version Manager (nvm). To install nvm and then install Node.js, type the following commands in Ubuntu 18.04 terminal:

$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
$ nvm install 14
Now using node v14.2.0 (npm v6.14.4)

Introducing NDNph and New Version of esp8266ndn

NDNph is my latest Named Data Networking (NDN) client library. This article gives an overview of this library.

History and Motivation

In 2016, I started esp8266ndn. It contains a copy of ndn-cpp-lite, UCLA REMAP's C++ library that does not use dynamic memory allocations. I then added integrations with ESP8266's network stack and crypto functions, making esp8266ndn the first NDN library that works on the ESP8266 microcontroller. Using this library, I built several projects, including a wearable jewelry and a call button. University of Memphis also deployed several sensor nodes using esp8266ndn.

Over the years, esp8266ndn gained many new features, and widened platform support to include ESP32 and nRF52. However, using ndn-cpp-lite as the core is becoming problematic:

  • New protocol features show up slowly, because ndn-cpp-lite author would not add a feature until ndn-cxx has it, and design discussions for ndn-cxx sometimes take several years.
  • There is no generic TLV encoder/decoder, making it difficult to support TLV structures in application layer.
  • ndn-cpp-lite is bloated with obsolete features, due to their backwards compatibility guarantees. Consequently, binary code size is unnecessarily large.
  • Although I can add patches to ndn-cpp-lite during importing into esp8266ndn, it has been difficult to test these patches. This isn't ndn-cpp-lite's fault, but is still an issue.

Thought Provoker #3

The title comes from a geocache named Thought Provoker #3. Inside the container there is a thought provoking question:

If you could travel across the United States of America (and had no other obligations, financial or time constraints) what mode of transportation would you use and why? Walk/run, ride a bike, ride a motorcycle, hitchhike, drive a car, drive a RV/motorhome, take trains, or something else?

Here are my answers.

First Choice: Geocaching Express 6000

The Geocaching Express 6000 GPS Receiver is a powerful GPS receiver, as shown in Geocaching International Film Festival (GIFF) 2019:

Geo-snatching

Geo-snatching is the act of finding loopholes instead of geocaches.

This includes:

  • armchair geocaching;
  • hacking your smartphone's location so you can log Adventure Labs or solve Whereigo cartridges without visiting the location;
  • logging an FTF on a friend's cache that you helped place;
  • finding your own caches by adopting it to a sock puppet account (aka rule 52612);
  • other general tomfoolery.

The term geo-snatching was invented by gsmX2 on this Facebook post. This article explains what geo-snatching or geosnatching means in geocaching, and how a geo-snatcher or geosnatcher differs from an honest geocacher. Content of this article does not necessarily reflect blog owner's views.

Introducing NDNts, Named Data Networking libraries for the Modern Web

I'm creating a new Named Data Networking (NDN) client library, NDNts. The initial NPM release, v0.0.20191223-beta.1, was uploaded yesterday. This article explains why I'm doing this, and why you should consider using my library.

Motivation

I've been developing Named Data Networking (NDN) for several years. Although my specialty is in the forwarding plane, I occasionally build NDN applications, such as a home surveillance camera. A common ingredient of every NDN application is some sort of client libraries, which provides APIs that allow the application to encode/decode NDN packets and communicate over NDN networks in accordance with the NDN protocol. One of these client libraries is the NDN Common Client Libraries (NDN-CCL), which provide a consistent API across several programming languages.

I adopted ndn-js, the JavaScript variant of NDN-CCL, in several projects, and was unhappy about it:

  • The API feels like Java, not JavaScript.
  • Callbacks everywhere, leading to callback hell.
  • The library inserts over 50 symbols to the browser's global scope, causing name conflicts.
  • All features are bundled into a single file that weighs over 500KB.
  • There's no unit testing for the most part, let alone continuous integration.

Bye, C.H.I.P

In 2015, I backed CHIP - The World's First Nine Dollar Computer on Kickstarter. Since then,

In 2018, Next Thing Co went out of business. Disappearing along with them is the software updates. Debian Buster was released in July 2019, but CHIPs are stuck with now two-generation old Debian Jessie, along with a 3-year-old Linux 4.4 kernel. Without software updates, running C.H.I.P computers on the Internet is increasingly risky.

This week, I have decided to sell my collection of C.H.I.P single board computers. They were sold for $77 (equals Kickstarter pricing) within two days of listing on eBay.

my C.H.I.P computers

Show Omega2 Battery Voltage in OpenWrt LuCI

Sometime ago, I bought an Onion Omega2 Pro and flashed it with OpenWrt 18.06. I plan to take my Omega on the road, so I installed a Li-Po battery on the device, so that it does not need to depend on USB power input. One big question is: what's the remaining power level?

Install power-dock2 to View Battery Voltage

The standalone Power Dock has a set of battery indicator LEDs that visually tells how much juice is left. However, the Omega2 Pro that I have does not have battery indicators. Instead, I need to use power-dock2 command to read battery level. Let me try it:

root@Omega2:~# power-dock2
-ash: power-dock2: not found

It does not work, because I flashed my Omega with OpenWrt 18.06, and power-dock2 command is not included in the standard OpenWrt distribution. The command comes from OnionIoT's OpenWrt feed (package source). I must add the OpenWrt feed before I can install the power-dock2 package.