I’ve finally been forced to accept the new interface in Gmail.
What I hate is the vertical bar on the far left. It extends the entire height of the window, though there’s nothing on it beyond the four options displayed here, Mail, Chat, Spaces, and Meet. There’s also a hamburger menu at the top which claims to hide the main menu. It hides the Gmail labels pane instead of whatever the leftmost pane is called. There’s also a vertical bar on the far right that allows me to jump to Calendars, Keep, Tasks, or Contacts. The right bar can be minimized. It seems to me that the items on the left belong on the right along with the other apps, taking up less screen space.
I know that this is not likely to make any difference, but sometimes it’s important to let off steam at decisions out of your control.
USB HUB input D+/D- pogo pin: for Raspberry Pi Zero/Zero W MicroUSB connector: for other Raspberry Pi boards or PC
Pogo pin power supply 5V: connects to 5V pin of Zero/Zero W, up to 2A current GND: connects to GND pin of Zero/Zero W
USB extended ports USB1~USB2: USB-A connectors USB3: solder pad
SIM card slot supports 1.8V/3V SIM card
3.5mm earphone/mic jack
MAIN antenna connector
AUX auxiliary antenna connector
GNSS antenna connector
Network status indicator
I’m using Google Fi Unlimited Plus as my network on my phone right now, and one of its features is the ability to have multiple data only devices using part of your data allocation. That makes experimentation with a device like this fairly easy as I was able to order a data sim from Google and put it in the device and it just worked.
I’d never heard of pogo pins before. These are spring loaded contacts that line up with pads on the Raspberry Pi Zero to make electrical contact. They worked the first time I screwed everything together, but when I took it apart and put it back together a second time the board wasn’t recognized. I removed power, pushed down the pins with some tweezers, restored power, and the board was recognized again.
wim@WimPiZeroWCamera:~ $ lsusb
Bus 001 Device 003: ID 1e0e:9001 Qualcomm / Option
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wim@WimPiZeroWCamera:~ $ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 1, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 3, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 4, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 5, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
wim@WimPiZeroWCamera:~ $ sudo apt install libqmi-utils udhcpc ifmetric
I went through the test commands from Jeff Geerling’s post related to QMI Mode setup, then created a config file for my wwan0 interface:
iface wwan0 inet manual
pre-up ifconfig wwan0 down
pre-up echo Y > /sys/class/net/wwan0/qmi/raw_ip
pre-up for _ in $(seq 1 10); do /usr/bin/test -c /dev/cdc-wdm0 && break; /bin/sleep 1; done
pre-up for _ in $(seq 1 10); do /usr/bin/qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength && break; /bin/sleep 1; done
pre-up sudo qmicli -p -d /dev/cdc-wdm0 --device-open-net='net-raw-ip|net-no-qos-header' --wds-start-network="apn='h2g2',ip-type=4" --client-no-release-cid
pre-up udhcpc -i wwan0
pre-up /usr/sbin/ifmetric wwan0 400
post-down /usr/bin/qmi-network /dev/cdc-wdm0 stop
You can see in the image above that my Wi-Fi network is running IPv6 and the default ping uses that interface, while specifying the wwan0 interface causes the traffic to travel a different path.
wim@WimPiZeroWCamera:~ $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:7c:6a:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.53/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
valid_lft 10482sec preferred_lft 9132sec
inet6 2604:4080:1304:8010:8a38:1e12:3b21:5443/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 24sec preferred_lft 14sec
inet6 fe80::ea0d:3fe8:b6c4:da64/64 scope link
valid_lft forever preferred_lft forever
3: wwan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
inet 18.104.22.168/26 scope global wwan0
valid_lft forever preferred_lft forever
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-signal-info
sudo qmi-network /dev/cdc-wdm0 status
sudo qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status[/dev/cdc-wdm0] Successfully got signal info
RSSI: '-74 dBm'
RSRQ: '-12 dB'
RSRP: '-102 dBm'
SNR: '4.4 dB'
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength
[/dev/cdc-wdm0] Successfully got signal strength
Network 'lte': '-74 dBm'
Network 'lte': '-74 dBm'
Network 'lte': '-2.5 dBm'
IO: '-106 dBm'
SINR (8): '9.0 dB'
Network 'lte': '-12 dB'
Network 'lte': '4.4 dB'
Network 'lte': '-102 dBm'
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-home-network
[/dev/cdc-wdm0] Successfully got home network:
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-serving-system
[/dev/cdc-wdm0] Successfully got serving system:
Registration state: 'registered'
Selected network: '3gpp'
Radio interfaces: '1'
Roaming status: 'off'
Data service capabilities: '1'
Roaming indicators: '1'
: 'off' (lte)
3GPP time zone offset: '-420' minutes
3GPP daylight saving time adjustment: '1' hours
3GPP location area code: '65534'
3GPP cell ID: '45023373'
HDR Status: 'none'
HDR Hybrid: 'no'
LTE tracking area code: '11316'
Full operator code info:
MNC with PCS digit: 'yes'
wim@WimPiZeroWCamera:~ $ sudo qmi-network /dev/cdc-wdm0 status
Profile at '/etc/qmi-network.conf' not found...
Getting status with 'qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status '...
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status
[/dev/cdc-wdm0] Connection status: 'connected'
I’m still quite happy that I moved to using google domains and its email forwarding feature. I believe my move is simpler to maintain in the long term, as long as google continues to allow email forwarding as part of their domains service.
I think it was in 2007 that I moved my email from a private server running smtp to Google Suite. I was got in with the free version at the time and have been able to keep using it without paying anything.
Google recently announced that they would be discontinuing the free plan for G Suite, and I had to decide whether to pay for an upgraded version or migrate to something else. I only have two users configured in my account for G Suite. Each G Suite account included 15GB of storage.
Several years ago when I was close to the 15GB limit. I decided to migrate to using my gmail.com account as my primary login and add storage to it instead of adding storage to my wimsworld.com account. I used an open source program called GMailBackup http://www.gmail-backup.com/download to backup all of my email including the labels from my G Suite account and import it to my GMail.com account. I then configured my wimsworld.com account to forward all the mail directly to my gmail.com account. That mostly worked well, though for some reason the G Suite account spam filter ran before forwarding mail to GMail.com. That meant I needed to periodically login to the G Suite account to check and make sure nothing important got stuffed in its spam folder.
Google initially declared that the free G Suite would be expiring in May, and have since extended the deadline to June, but I needed to get it dealt with before it became too time sensitive.
After looking at several alternatives, I came across the recent exit from beta for Google Domains. One of the features that Google Domains offers is email forwarding for the domain, which allowed me to forward the wimsworld.com email address to my gmail.com address directly. Since my gmail.com address was already configured to be able to send mail as my wimsworld.com address via the google smtp servers, the switch was almost transparent, and now all the spam catching is done in a single account.
I’d been hosting my DNS records for wimsworld.com on GoDaddy.com along with having periodic renewals of the domain name through them. Every year I’d go through the hassle of looking for discount codes and making sure I wasn’t upsold on more services that GoDaddy sells. Moving my domain to Google I was able to find an introductory code to reduce the price slightly while extending my domain by another year. The process cost me a total of $12 plus tax.
I’d downloaded my DNS records from GoDaddy before starting anything, to make sure I didn’t lose any data. Then I went to https://domains.google.com/ and initiated the transfer of the domain to google. I had browser windows open to both sites at the same time so I could accelerate the domain transfer by confirming what I was doing on both sites. The transfer moved the DNS records to google’s DNS servers and modified the SOA records, while keeping a few of my custom DNS records, including the MX records I had to deliver email to the G Suite mail servers.
Domains let me set up email forwarding, even though it won’t be active because of the existing MX records which knew that it was configured for G Suite. There was this big orange button to disable Google Workspace and enable forwarding. I was worried that it would actually disable to G Suite, so made sure I was logged in to the G Suite console and everything was prepared for cancellation before I hit the button. When I finally hit the button, it only modified the DNS records so to use the google domains email forwarding system and didn’t touch my G Suite status.
After configuring everything in domains, and seeing that it all appeared to work correctly with my gmail.com login, I still waited one more day before I cancelled my G Suite subscription.
The google domains email forwarding allows you to configure forwarding of specific email addresses to different accounts, and allows a significant number of rules to be set up. It also allows using wildcard forwarding to forward mail. On my wimsworld.com address, I’m using wildcard forwarding for all of the possible accounts to my gmail account. I’ve got other personal domains set up that needed email forwarding to multiple people, and have been able to set specific addresses be forwarded to specific recipients, and a wildcard to forward any other mail to me. I like the wildcard as a catch all for mail that I may have forgotten I was using.
Google Domains has a few other features that are interesting that may get a separate write up if I have time. Dynamic DNS Hosts and DNSSec are available without extra costs. I’m already using two different free dynamic DNS services but may investigate this as I believe it would work directly with my domain name instead of using a CNAME forwarding scheme.
Google Chrome recently added a tab search button to the title bar. When it was first enabled, it was possible to disable by going to chrome://flags and finding Enable Tab Search and changing it to Disabled.
A quick search of google will find multiple examples of how to disable it. Unfortunately in more recent versions of the browser, it no longer seems to be an available flag to disable.
I realized that my big issue with the drop down menu is it’s location, which Google has located on the left near the minimize button. Google has chosen to not have the traditional windows system menu on the left side of the title bar. The left side would be an ideal location for the tab management button.
After getting the video files from my dashcam strung together at high speed I realized I was just as interested in the GPS data that was stored in .info files alongside each .mp4 file.
Some digging around in forums led me to believe that the files were fairly simple comma separated files with the headers working out to be Datetime, Latitude, Longitude, FixType, SatCount, Altitude, SpeedKph, Heading, AccelerometerX, AccelerometerY, AccelerometerZ. The Datetime field is it’s own special format, but easy enough to interpret.
Because I’ve written a GPS data app in the past, I’d learned how to write Keyhole Markup Language (KML) files, as well as learning to use ZIP routines to package them into KMZ files. My original code had hard coded the KML tags because I didn’t want to rely on an external library requirement on a limited platform. In re-using the code I updated to use the XMLLite API. Microsoft may be discontinuing support for this API as well, but at least now it’s still included with current operating systems. The advantage of using the XML API to create the XML is knowing that all of the tags are properly and consistently formed and closed. A secondary feature was that it made it much simpler to explore different data formatting options for the folders in the KML structure.
I worked on the basic idea that the most interesting data from the source files was based on speed and altitude. Then I broke the data into segments by the day, so if I store multiple days worth of files the kml will automatically have reasonable breaks in it. I create a Placemark that includes a LineString with all the GPS coordinates for the day. I calculate the distance by multiplying the reported speed by the time between points.
The calculated distance isn’t as accurate as I’d like, but the code I had from years ago didn’t seem to get more accurate distances. My web references from years ago no longer work, which is the frustrating thing about pointing to documentation on the web. The code I’d used years before was used in a bicycle gps program, which meant that the speeds were slower and the distance traveled between points may have been smaller. The data the ROAV is writing to the log file may not have as many significant digits as the raw data available from the the GPS chip itself.
I create three more Placemarks for each day, each with a simple Point defined. Max Speed, Max Altitude, and Min Altitude. Each of those data points is selected from a simple scan of the input data.
By creating a large KML file and then converting it to a KMZ, it becomes a manageable size. KMZ files load into google earth significantly faster then KML files. One of the interesting things that you can do in Google Earth is display the elevation profile of a path.
On this day you can see that I started at just under 4500 feet, drove over 6000 feet, then down to 1733 feet before ending the day near 2500 feet. When playing with the desktop app, you can drag a marker along the path and it will coordinate a marker along the elevation profile.
I’ve added this code to my ROAV-Concat program, as well as parameters that can tell the program to not output KML or MP4. this allows me to run the program and just generate the KMZ or MP4 file, though beyond during debugging I can’t think of a reason I’d not want both files generated.
I’m hoping that understanding all of this data will allow me to generate text to overlay the video with GPS data beyond what was embedded by the original dashcam.
Google reader has been my primary method of keeping up with technological changes over the past few years. I’ve liked the cloud based system that I can read from my laptop, desktop, or tablet, and it will keep track of what I’e read so I don’t have to read the same thing multiple times.
In the early days of the internet, I used usenet news feeds and an nntp reader to keep up with what was going on around the world and with various programming projects. A decade after Usenet died under its own weight Google Reader made RSS a usable replacement for me.
Google reader announced they were shutting down after July 1st, and they followed through with it.
I’ve tried out Feedly, Digg, and looked at several more. I decided to go with InoReader because while it only has a cloud based interface, it is most similar to the quick method I’ve been used to for reading my news.
Feedly has a really nice iPad app that syncs with their system. Digg has an iPad app, but it requires iOS6, which I’ve delayed installing, and I’ve not seen it in use yet.
I’m certain that Google exiting the RSS reader market has increased the innovation in RSS Readers, and may create a revitalization of the technology in general.