Friday, December 19, 2014

CLI to Google Calendar

After a few weeks of missing my old cli access to Google Calendar, and pushing the Try It! button with no success (yes, I customized it, but no, what I tried didn't work for me), I went looking (again) for another tool.

Hurrah! Look to gcalcli!

First I tried "pip install gcalcli; pip install vobject parsedatetime" but "which gcalcli" came up empty. I read the log file mentioned at the end of the pip install, ran a search on the most obvious error message, and re-ran it with sudo. Now it's working! I recommend "gcalcli list" to start.

The command I expect to use most often is

gcalcli --calendar 'Calendar' --title 'what is it' --where there --when '12/19/2014 10:00 PM' --duration 60 --description 'yay for description field finally!' add --details url
, and next
gcalcli quick 'quick add' --details url
(possibly). I have always wanted to be able to populate the description from the command line, but APIv2 only supported what's in Quick Add. Now that I've got another easy tool, I can forgive APIv3 for moving my cheese since it supports a feature I wanted.

Now if you'll excuse me, I need to pound on this new command line tool ...

Update: Oh, it works so well! I start at Spot the Station, I remove the irrelevant lines (too early, too short, or too low) with PrintWhatYouLike, and then I copy the remaining (relevant) lines.

That then becomes the starting point to fun with regular expressions! Although pbpaste is a Mac OS X tool hailing back to the NeXT days, Linux has tools like xsel and xclip that I hope are roughly equivalent.

clear; pbpaste | awk -F $'\t' '{ print "gcalcli --calendar \"Calendar Name\" --title \"ISS sighting\" --where \"Durham, NC\" --reminder 20 --when \""$1"\" --duration "$2" --description \""$3" max elevation, "$4" approach, "$5" depart\" add --details url" }' | sed 's/\ min\ /\ /g;s/\ above/°\ above/g'; echo

I like to glance at the commands before running them, just to be sure I haven't made some hideous formatting error about to be replicated at the speed of automation, and I like to check at least one of the resulting URIs to be sure the calendar entry survived the transfer. So far, so great!

Friday, December 5, 2014

TIL: Tube Wraps

I looked at these reindeer printable wraps for tp tubes for a minute before running to the bathroom to test my idea. (That's where I could find an empty tp tube, of course!) I measured it, then tested against another brand that of course had slightly different measurements so your mileage may vary.


You do need to be lucky on the intersection of paper sizes (US Letter in my case) and tube sizes, but today I learned you can get four tp tube wraps on a single sheet of paper! I'm thinking of printing some faces, and letting my young artist color to his heart's content! Then my young builder can assemble the village, and peace will reign while they are happily decorating.

Thursday, December 4, 2014

Bumps on the Arduino

So it hasn't been smooth sailing since I installed the Arduino libraries. This is why I was taking baby steps.

I followed the Adafruit directions for the HTU21D temperature and humidity sensor, and got ... nothing. Really nothing. One of my desperate ideas was to look for other libraries. I found SparkFun's HTU21D library, complete with a tutorial. The difference between the two libraries is that SparkFun has two error codes, 998 if sensor is not detected, and 999 if CRC is bad. I saw a whole lot of 998, and that was very helpful. No one likes to hit an error condition, but do you know what's worse? An error condition without an error message somewhere! I removed the Ethernet shield from the system. I ran Blink again just to be sure of my baseline. I ran a lot of continuity tests. (Tip: I always need at least one multimeter with the audible continuity feature.) I read the example code comment "use inline 330 ohm resistor if your board is 5V" and added resistors because my Nano is a 5V board. (Sadly, I didn't have any 330Ω resistors in my supplies. I did have a bag of 120Ω resistors from a long time ago, to use as signal terminators.) I ran even more continuity tests. I checked the 3V3 output voltage (3.28V) and the data line resistances (both about 360Ω). I think it's a dead sensor, possibly zotted before I added the inline resistors.

So, on to the ENC28J60 Ethernet shield for Nano. Again, the sample code didn't work. I tried EchoServer and TcpServer. I modified the example code to use a valid legacy IPv4 address (I decided the first test could be IPv4, even if my end goal is not to use legacy) on my home network, but I couldn't ping it, and I couldn't telnet to port 1000 on it. Additionally, my router didn't have a complete entry for it in its ARP table. Also, the link lights on the shield were off far more often than on. I ended up re-cabling everything in my computer room, both to simplify cables and connections, and to move the little unmanaged switch for extra ports to my desk so I could watch its blinking lights as well. Based on the indicators (no link lights on the ethernet shield, no link lights on the little switch, and no ARP entry on the router), I have to think this one is also dead. However, I also need to test this suggestion before giving up.

Yes, I think it's rather odd that two out of three components aren't working, and the two peripherals at that. It's possible that I need to work on some intermediate steps, to learn more about Arduino. Gee, more tinkering ...

Sunday, November 30, 2014

Google Calendar Sadness

I had been looking up ISS passes then adding to Google Calendar using the command line for a long time, but the last time I tried, it wouldn't work. After a quick search, that's because Google Calendar API v2 was deprecated on November 17, 2014. (I bet that's when my default calendar colors changed to garish, too.) There's one newer version of gdata-python-client than what I have installed, but since it was released more than a year before the the deprecation date, I doubt it uses APIv3.

From the look of the new client libraries, it's no longer as simple as google calendar add --cal Calendar "Event 11/17/2014 at 2:00 PM in Location" now. Very sad. I miss simplicity.

So, to replace just that command functionality, I guess I'll read about inserting events. sigh

Monday, November 24, 2014

Arduino Libraries

The next baby step with my Arduino is to load libraries into the IDE. (Yes, baby steps. It's easier for me to do in a short time that isn't as busy, and it's less likely that I'll get frustrated.) The directions to load Arduino libraries look easy enough.

The library for the HTU21D is linked with the directions, another easy step.

And then, despite trying to keep it simple, I thought that first library was so easy, let me add the library for the ENC28J60 Ethernet. Alas, that was a rabbit hole! Here is my saga.

ENC28J60 and Arduino: a history, with an eye to IPv6 support

My journey starts here with Reflective Heat:

The official Arduino Ethernet Shield is based on the WizNet 5100 chip, which implements the IPv4 protocol stack in silicon. As a consequence, the Arduino Ethernet Shield cannot be used to implement an IPv6 stack.

Most people use the ENC28J60 in place of the WizNet 5100, either for its low cost, or because I wanted IPv6 support. And now I step through a littered history.

EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE, from Jean-Claude Wippler. Adapted and extended from code written by Guido Socher and Pascal Stang ... but I don't see IPv6!

Back to Reflective Heat. The RHT IPv6 library for Arduino is based on the work of Pascal Stang, Xing Yu, and Guido Socher for EtherShield and IPv6EtherShield from Günther Hoelzl. And I note:

The earlier ipv6etherhield developed by Guenther Hoelzl was tested but found to be unstable and would not compile on the most recent versions of the Arduino Integrated Development Environment (IDE).
However, I'm a bit nervous about the RHT offering because it only discusses Arduino UNO and Mega, and I have the Nano. So I thought I'd keep looking. Apparently I don't know enough to stay away from rabbit holes!

Hey, I found a list of Arduino IPv6 library choices and Telecom Bretagne is newer! but I don't want a wireless sensor network because wireless isn't as reliable as wired Ethernet. There are directions but for wireless, so I continue to look.

I found a blog with a whole category for Arduino and this Ethernet! but no IPv6 when I searched the blog.

So once again, I found myself back at the beginning, reading about Contiki's μIPv6 stack ported for 1-wire (original site appears to be offline now), but wrong microcontroller and wrong sensor family. However, μIP will appear again, with better luck next time.

The first two libraries at Tweaking4All also lack visible IPv6 support, but discuss the same problem of having a Nano instead of an UNO or a Mega (same concern I had with RHT!). The first set is ETHER_28J60 + EtherShield (from Jose Muanis Castro; mentioned by RHT); the second one is EtherCard (mentioned above). However, the third library looks like a winner! Do I see a nod to μIP? ... drumroll please ...

UIPEthernet has some IPv6! although with a gotcha noted. But I'm reminding myself that my small goal tonight is to load libraries, just the libraries, and not to discover what might be broken later. There are examples to test first!

There are some posts about which CS (chip select) pin to use for various configurations. I like this post because it shows where to change the underlying code if you don't want to re-wire.

Tuesday, November 18, 2014

Getting Started with Arduino

After my first attempt, I can say that getting started with Arduino is almost as easy as the directions! I have an Arduino Nano v3.0 with ENC28J60 ethernet shield and HTU21D temperature and humidity sensor module. But for reference, I did need to download drivers at Step 3, just not the FTDI driver mentioned. I needed to install a PL2303 driver for OS X 10.7 "Lion". There are many other PL2303 driver choices, too: from Prolific itself, on a plugable list, and from mac-usb-serial.

My first swing at it didn't work (no blinking light, but instead an upload error). That problem turned out to be that I had plugged everything into my oldest (and smallest) breadboard. The blink program successfully uploaded and worked with just Nano, and with Nano+Ethernet, so I only had to remove that breadboard to get it working. The first troubleshooting tip I tried was "Try uploading with nothing connected to the board (apart from the USB cable, of course)." Yay, that was it!

I consider my toes dipped in the water!

Thursday, June 5, 2014


Sunday night, while getting my boys cycled through the bath (one at a time due to Karston's toe surgery; he didn't want to take any chances) and getting all of us ready for Monday and oh-my-goodness-how-did-it-get-this-late, I had the thought, "I don't have time for dinner." Not merely was I thinking I didn't have enough time for a healthy dinner that I prepared, I was thinking I didn't have time for any dinner.

Screeeeech! Stop! Put on the brakes!

I may think some silly things, but I'd like to think that I can notice some of it, and improve.

So I thought about the problem while eating a big green salad (luckily that's my favorite food!) that I threw together quickly. In fact, I made two salads so I could chop up the whole head of lettuce. What I do in the late afternoon is fix dinner for my boys, and then fix dinner for myself. Especially when I'm not sure what I want, that can take some time. So I came up with a new plan: I'll eat leftovers for dinner, and then fix something tasty for the next meal(s). I don't have to rush with that meal preparation because I will have just eaten.

And that's what I did last night. I ate the other salad I made, and then I roasted a pan of vegetables (zucchini, mushrooms, onions, and red and yellow bell peppers with a little olive oil and salt). The only drawback is that I made the kitchen smell so good, I want to stay up and eat! Luckily I was too tired to eat, so I went to bed instead.