Wednesday, March 14, 2018
Tuesday, March 13, 2018
A Powerful Scene at the US Capital
My brother caught this stunning picture of the #notonemore monument on the lawn of the Capital. It shows a slice of the 7,000 shoes that were on display, each one representing one of the 7,000 lives lost since the Newtown shooting.
While this display is only 10 minutes from my house, I wasn't able to make it out today to catch it in person. So a huge thanks David for being my eyes. So well done!
Monday, March 12, 2018
So Useful: Yet Another Mail Merge
If you use Gmail and Google Sheets, you need to know about Yet Another Mail Merge (YAMM). This plugin allows you to draft an e-mail in Gmail, and send it out to recipients in a spreadsheet. The e-mail contains tokens which correspond to the headings in your spreadsheet. Basically, it does what Old School mail merge used to do with Word and Excel, minus the joy of stuffing envelopes.
I'm working on a project for shul, and I wanted to send a reminder out to the participants that entries were due in a week. I could have sent a mass e-mail by including everyone in the BCC header, but using YAMM is a far better solution. The obvious advantage is that I can personalize the e-mail, including specific details about each person's piece of the project (which is already being tracked in a spreadsheet). YAMM also reports on who has opened and replied to the e-mail, which is an unexpected bonus.
Here's a crude example of how YAMM works:
Step 1: Draft an e-mail
Step 2: Organize your data
Step 3: Merge and send out the e-mails

At times, nothing beats a specialized e-mail platform like MailChimp or evite. But when you've got a job too small or specialized for these services, and too cumbersome to handle manually, YAMM is the way to go. Try it, and I'm sure you'll add it to your toolbox.
Here's a video tutorial to get you started:
Friday, March 09, 2018
Managing Multiple Android Devices for the Lazy and Impatient
Recall that I've got a handful of Android devices that need to be configured, and not enough time and patience to do so. I progress on this challenge by writing a shell script around adb that pulls down, pushes up and deletes the apps from a phone.
While this allows me to install and uninstall apps in bulk, it doesn't account for app settings. In my case, settings are key because I need to lock down these devices to insure they remain in content creation mode only (Sorry, no YouTube or Fruit Ninja here). Previously, the ability to lock out apps was provided by Apex Launcher; a slick app, but one that was both too complex and not bullet proof enough for my needs.
I was able to solve both my configuration problem and improve the launcher experience by taking advantage of two new facilities.
First, on the master phone, I installed Kids Place - Parental Control. This is a far simpler launcher than Apex, and is a natural fit my use case. Kids Place is one of many launchers that provide a very simple user experience on the front end, while letting the parent configure the available apps on the back-end. What makes it unique is that the free version is fully functional and doesn't display ads. The pro version offers some nice to haves such as controlling the time of day the device is available and allowing you to put a custom photo in the background. But for my purposes, these features aren't needed and the free version is ideal.
Next, I took advantage of the backup ability that adb offers. This can be configured to not only grab the app files, like I had previously rigged up, but also grabs the apps settings. This command line does the trick for me:
adb backup -shared -nosystem -all -apk -f master.ab
The nosystem flag insures that only the add-on app configurations are stored in my master snapshot. The apk flag insures that the backup contains the app itself, which makes for easy device restoration.
Once I have my master backup, I can use 'abb restore' to create a cloned.
adb restore master.ab
The process isn't perfect. For example, it take a few screen presses to complete. But it's far simpler than having to hand-configure device after device. Once the restore is done, and the Kids Place launcher is activated, I've got a neat clone of my master device:
This looks to be the Android Enterprise Device Management strategy I was originally after. I can install and configure apps on one device, and painlessly replicate this effort to its siblings.
Bonus Pro Tip: The backup file generated above can be unpacked with this one liner:
( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 ../non_system.ab ) | tar -xvf -
This allows you to get a behind the scenes look at the data your phone is storing; something that is surprisingly difficult to do. (It's your phone after all, yet Android permissions work tirelessly to avoid giving you access)
Thursday, March 08, 2018
Around Town
Wednesday, March 07, 2018
An Accidental Possibles Bag
How we managed to accumulate so many reusable shopping bags I'm not sure, but currently I've got quite the heap of them. As an experiment, I thought I would try re-using one of the bags as a source of fabric for a sewing project. I grabbed a Walmart bag, cut it apart and went to work.
Ultimately, the project was a bust. But, as I was cleaning up, I found myself looking at a scrap of fabric. It seemed just the right dimensions to turn into a big 'ol pocket. I added a belt loop, sewed it together, and voila! I had a crude possibles bag:



The dimensions are roughly 5" wide, 9" deep. My first thought was that it would be an ideal trail snack bag. As far as I'm concerned, you can never have quick enough access to M&M's. I didn't really think this through, so the bag had no way to close it. Given how deep it is, however, I'm not convinced this matters.
After experimenting with uses for the bag, I decided to make a version with a closure. Velcro would have been the obvious choice. However, I'm not a huge fan of how loud Velcro can be, and besides, I didn't have any on hand. What I did have was a bunch of magnets. So today, I made version 2.0 of my Possibles Bag, with magnets sewed in place to keep the bag closed.



The magnets seem to be doing the job well, though time will tell if they're clever or annoying.
As for using reusable bags as a source for fabric, this is already known to work. My little project only further adds to the evidence. The Walmart bag material is incredibly lightweight and seems durable (the no-closure bag weighs less than ½ an ounce!). The original bag was heat sealed, rather than sewn. So perhaps sewing this fabric was a bad idea, but still, it seems to be holding. I've got some really heavy duty Trader Joe's bags that I think I may experiment with in the future.
Here's one more action shot of the project:

Tuesday, March 06, 2018
Review: To Siri with Love: A Mother, Her Autistic Son, and the Kindness of Machines
In To Siri with Love: A Mother, Her Autistic Son and the Kindness of Machines Judith Newman manages to take an incredibly difficult topic and turn it into an entertaining, can't-put-down book.
I recall vaguely having heard a segment on NPR or the like about a mom heaping praise on Siri. The idea was that her autistic child could engage with Siri in a way that was both novel and educational. Siri had unlimited patience to talk about any topic, and has a primitive set of manners that helped her son gently learn hard to grasp social lessons. When I saw To Siri with Love on the bookshelf at the library I thought it must be the same story teller, so I picked up the book.
I'm certainly glad I did.
The vast majority of the book has nothing to do with Siri or any other tech. It's a mother's story of her raising twin boys, one of which is autistic. The whole emotional spectrum is here: from joy and boundless pride, to fear and absolute frustration. For those of us peeking in on this world from the outside, I'm thankful that Newman took the time to show us the full range. As I was reading the book, I found myself at times cringing internally, knowing that Newman would almost certainly take flak for being so open. What Mom wants to admit that her son has limitations, much less limitations that make him less able to function in society.
Mostly, I'm thankful to Newman for helping further fill in a picture of what it must be like to live with or even be, autistic. If we didn't understand what it meant to be blind, we'd consider those without sight clumsy, lazy, disinterested in learning and perhaps just dumb. But once we understand they simply can't see the obstacles in front of them, our perspective vastly shifts and we find that blind people are capable of everything a seeing individual is. Newman describes a sort of social and emotional blindness in her son that leaves us quick to judge him as things he isn't. Yet, once we understand his limitations how he's different, we can see he's so much more than we imagined.
Of course, I recognize how important it is to take this as a sample size of 1, with a condition that is still far from well understood. So yeah, don't read the book and think: "OK, now I get autism." But still, getting a view into Newman's son's life, with all his struggles and successes is invaluable. And there's plenty of humor and wit to keep the book moving.
Update: As is my habit, after posting this I went over to Amazon to peek at the reviews. I like to hold off on reading reviews until after I've posted my own comments so I'm not too skewed by anything I read there.
At first I saw that the book had 99 reviews and was rated 4 1/2 stars. Huh, I thought, people liked this book. And then I started reading. Ouch.
As I suspected, many were not amused with Newman's book and leveled quite a few charges at her. Some I agree with, some I don't. Here are some of the biggies.
She massively and hurtfully violated the privacy of her child, which is inexcusable. I appreciate this charge, but ultimately don't think it's a deal breaker. Yes, she's putting her entire family on display, but I think there's a purpose there that may allow the ends to justify the means. I think it's noteworthy that she doesn't just expose her autistic son's life, opting to share dirt on everyone. With that said, I'd be downright mortified if my Mom published a tell all of my birth to Bar Mitzvah.
Her consideration of sterilizing her son falls somewhere between troubling and demonic. This I agree with. I suppose I can appreciate her sharing her deepest thoughts, even if they seem wrong headed. Ultimately, it's the book itself and her own words that seem to show just how wrong it is to make this medical decision for her child. She herself says that 'delays' are just that, 'delays.' So deciding that your child should go the rest of his life without the option of having children just seems wrong.
She doesn't love her son. She wishes her son wasn't autistic. She likes her neurotypical son better. I'm not buying these arguments. Yes, she's open about the challenges of raising her child. And what parent wouldn't want their child to have an easier life? If my Mom could have waved a magic wand and made me less socially awkward, a better reader and not have dyslexia, she would have done so. But just like my Mom accepted and loved me, for me, so do I get the sense does Newman and her child.
I appreciate the individuals who took time to write extensive reviews on the book. A number of the reviews are written by folks who identify as autistic. I can only imagine what it must be like to have a book that seems written about you, but gets it so wrong.
So here's the thing: read the book, then go read the reviews, then go continue to be open minded and learn more.
Monday, March 05, 2018
Hiking Maryland Heights: The Overdue Sequel
Nearly 12 years ago we hiked Loudoun Heights, which is located near Harpers Ferry. Only recently did I discover that across the river was an equally impressive and similarly named hike: Maryland Heights. It took us over a decade, but this past weekend, we finally knocked out this companion hike.
Maryland Heights promised views and civil war remnants, and delivered on both of these. We started the hike in Harpers Ferry, which meant we got to walk across the very cool foot bridge, and then made our way down the C&O canal a bit to the trail entrance. From there it was a slog up hill, but one totally worth it. We stopped at various annotated sites to try to imagine the troop activities and infrastructure that was in place during the Civil War.
Every time I felt a bit winded, I imagined the herculean effort it would take to drag the massive guns and ammunition into position. Consider the 9,700lb(!!) Dahlgren gun that was positioned on the top ridge of the mountain. Each round it fired weighed nearly 100lbs and had a range of 2 miles. That's a lot of schlepping.
The stone fort and surrounding walls are in pretty good shape considering they're left to the mercy of the elements and hikers. The view from the cliffs, however, has to be the true highlight. It's like you've been scaled down to HO size and been dropped into a picturesque train model. The view into Harpers Ferry from the cliffs is just too perfect.
We finished up our hike at around 3pm and the crowds still seemed to only be growing. I can't imagine how overrun this hike is on a warm Spring day. It's no surprise this is a popular destination, so keep that in mind when scheduling this hike.
We finished up our hike in Harpers Ferry and spent some time trying to soak in the local history, of which there is an obscene amount to digest. I'm sure I was taught the details of John Brown's Raid at Harpers Ferry, but re-reading them, I'm left with only more questions. Was his violence based campaign just? Was he a hero or a terrorist? Was his action a spark that led to a greater good? Was it OK for figures like Emerson and Thoreau to gloss over Brown's violence and portray him as a martyr?
So many questions and so few answers. I think a quote from this article, penned a few days after John Brown's raid, bears repeating:
Never before was such an uproar raised by twenty men as by Old Brown and his confederates in this deplorable affair.
There will be enough to heap excoriation on-the memory of these mistaken men. We leave this work to the fit hands and tongues of those who regard the fundamental axioms of the Declaration of Independence as "glittering generalities."
Believing that the way to Universal Emancipation lies not through insurrection, civil war and bloodshed, but through peace, discussion, and the quiet diffusion of sentiments of humanity and justice, we deeply regret this outbreak; but remembering that, if their fault was grievous, grievously have they answered it, we will not, by one reproachful word, disturb the bloody shroud wherein John Brown and his compatriots are sleeping. They dared and died for what they felt to be the right, though in a manner which seems to us fatally wrong. Let their epitaphs remain unwritten until the not distant day. When no slave shall clank his chains in the shades of Monticello or by the graves of Mount Vernon.
History, views and a delightful day in the woods. What more could you ask for?!






















Thursday, March 01, 2018
Android Enterprise Device Management for the tiny, broke and geeky enterprise
I'm tackling the next challenge in my makePad experiment: working with multiple devices. The devices were easy enough to come by. I simply ordered 3 more BLU Advance 4.0 phones from Amazon. What I'm not looking forward to is configuring three new devices by hand.
And let's say I do manage to put up with the hassle of manually installing and customizing each phone. What happens when I want to make a change and experiment with a new configuration? I've now got to repeat the process again. No thank you.
A little research told me that what I wanted was an Enterprise Device Management Solution. That way, I could manage the phones in a bulk fashion. But even the name sounds complex and expensive. And researching a few platforms bore this out. I needed something simpler, but yet still effective at working with multiple devices.
As I poked around the web, I rediscovered something: the Android developer tool adb has capability to install and uninstall apps from the command line. Not only that, but you can query the packages installed on a phone and even download the APKs for apps installed on the phone. All without root access.
This was encouraging: what I lacked in enterprise funding and staff I could make up for in dev skills. Using this knowledge about adb, I went ahead and built andappsnap, a tool for pushing and pulling snapshots of apps to and from Android devices. Here's how it works.
Step 1. Plug in the master phone, that is, the one with the apps you want to deploy to the rest of the devices.
Step 2. Run andappsnap:
andappsnap -c pull -d makepad-20180301
This command will pull all the 3rd party apps off of the master device and store them in a directory named makepad-20180301. In this directory is a file named apps.index which lists all of the apps that were captured.
Step 3. Unplug the master phone and plug in device to be configured.
Step 4. Run andappsnap:
andappsnap -c push -d makepad-20180301
Every app listed in apps.index will be installed on the device.
Step 5. Repeat steps 3 and 4 until all the devices have all the apps installed on them.
I also implemented andappsnap -c nuke which removes all third party apps on a phone. Yes, this command is dangerous. It will gladly remove every app on your 'master' phone without hesitation. But heck, the whole process is dangerous. So yeah, be careful.
andappsnap is little more than a basic shell wrapper around adb and the Android command pm. pm is an especially frustrating command to use because it lists a number of interesting operations it claims to do. Though without having root access, these operations fail. So I was truly surprised that my push and pull process worked so smoothly. The fact that I can keep around a snapshot of makepad apps and easily deploy different configurations is a surprising bonus.
Automatically installing apps on the device is a great first step in configuring my makepads in bulk. However, it's just that, a first step. There are other device setup tasks I'd like to tackle, such as configuring the launcher and disabling apps like YouTube and Chrome. Though for now, I plan to celebrate my victory over the manual app installation process and tackle those concerns later.






