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.
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.
- 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.
In 2015, I backed CHIP - The World's First Nine Dollar Computer on Kickstarter.
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.
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?
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:
-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
我在查询波特兰旅游信息时，找到了一个名叫“Shanghai Tunnels （上海隧道）”的旅游项目。
Geocaching.com's newest promotion, Mystery at the Museum, is online today.
To qualify for the first three souvenirs, you must find and log a number of geocaches, in a certain order.
Geocaching.com offers a filter function that shows which geocaches to find and log next.
However, it only allows me to select the clue tiers that I currently qualify for.
Since I haven't found any geocaches since the promotion started, I can only search for the Detective clue, but cannot search for any other clue types.
This is inconvenient for me, because I prefer to go geocaching offline.
I usually download a number of geocaches to my phone, go out to find them, and then log them at end of the day.
I want to be able to search for clue types beyond Detective, even if I don't currently qualify for them.
Then, I can go out, find enough geocaches to complete two or three souvenirs together, and then log them into the correct order.
I poked around the URI parameters in the address bar, and found two methods.
I thought I'd share them, in case anyone needs it.
My 7-day Oregon vacation is over.
It took even longer for me to blog about this experience:
- Planning and Departure explains why I chose Oregon, how I planned the trip, and a personal record I set on the departure day.
- GC12 and GC17 follows my adventure to Oregon's oldest geocache.
- Birthplace of Geocaching introduces a landmark that started one of my favorite sports.
- Hillsboro and Outlets tells how I met a Twitter friend in real life, how I contributed to American economy, and a painful DNF story.
- Eight Waterfalls, Two Beaches, and a Webcam takes me outdoors to the scenic Multnomah Falls recreation area.
- Portland calms me down in the peaceful Portland Japanese Garden, and gets me running around in Portland State University.
- Breakfast and Laundry Solutions discusses some logistic issues during my travels.
- GC16 in Molalla River makes me huff and puff in seek of a 19-year-old plastic jar.
- Oregon City lifts me up along the only vertical street in North America.
- Last Day brings me from the peak of Portland to the other side of the state line, and then back to the normal life.
My vacation did not have a planned day-to-day schedule, but adopted a semi-flexible strategy.
This differs from my previous vacations such as the Yuma Mega trip, where the planning covered exactly where to exit the highway and take a rest.
Being flexible allowed me to spontaneously decide where to go next, based on weather, mood, and other factors.
It enabled me to add destinations that I did not know before departure, such as Multnomah Falls and Oregon City, as well as fulfill friend's request of an IRL meet up.
This strategy did backfire once, when I went to a museum only to find it closed.
Eventually, my trip achieved an interleaved structure between rural and urban environments:
By the time I finished my Oregon City tour, I'm 22 miles from the Portland International Airport and I have 8 hours remaining before scheduled flight departure.
There are still places worth visiting.
Portland's Highest Point
Council Crest Park is the highest point in Portland at 327-meter elevation.
It is also the location of Portland's oldest geocache, hidden in February 2001.
The park was easy to locate.
The geocache, on the other hand, was difficult for me.
Its location is specified as a vector offset from the hilltop, at "185 meters in the direction of 285° from magnetic north".
I've seen "magnetic north" once and looked up some scientific references, but I don't know a practical way to convert magnetic north to true north that is accepted in mobile apps.
Driving around the highways south of Milwaukie, I repeatedly saw an End of Oregon Trail sign.
I vaguely remember having played a game called The Oregon Trail (paid link), but I don't know exactly what "Oregon Trail" is, so I looked it up.
Oregon Trail is a 2170-mile wagon route between Independence, MO and Oregon City, OR, traveled by some of the earlier pioneers that settled in the west.
Given its historic importance, after completing my geocaching mission, I decided to spend part of my last two days to visit Oregon City.
Elevator, Artwork, and Oddities
My evening tour of Oregon City was entirely guided by three geocaches:
My primary goal in Oregon is to find some of the world's oldest geocaches.
I've found GC12, GC17, and the Original Stash tribute early on, but there's one more: GC16, hidden in June 2000.
Wednesday, June 12, after a breakfast at Hitchin' Post, I started my quest into the BLM lands along Molalla River.
Just like other historical caches in Oregon, GC16 does not have parking coordinates in its listing.
Once again, Google Maps tells me that I can drive straight to it.
I know it can't be so easy, so I did my planning and identified two potential trailhead / parking locations:
- Annie's Cabin trailhead, N 45°01.015 W 122°29.001, 3.0 km hike.
- Hardy Creek trailhead, N 45°02.382 W 122°29.348, 2.3 km hike.
I looked over the "Old Oregon Coast Cache Access" document that I received at GEOregon event, and it suggests the first parking area.
I'd better listen.
It's a half-hour drive from Molalla on a wide, well-maintained road.
I saw several logging trucks passing by, which explain the necessity of good roads.