Sunday, September 20, 2020

Four Movies

You can unlock any door, if you only have the key. - Amulet (Secret of NIMH)

What are four movies from your childhood that you like more than anyone else? Or changed you? Or moved you?

I'm not sure how old I was when we rented The Secret of NIMH, but I remember being utterly entranced and scared by the movie. Like, "this is a grownup cartoon that somehow my parents are letting me watch!" I would tell all my friends about this amazing movie and none of them had seen it! I greatly look forward to showing this movie my munchkins.

I saw both Dragonslayer and Legend around the same time. I was already playing fantasy role playing games and highly entrenched in the fantasy drama and both of these led me to believe that made real movies for people like me. They were creepy, intense, scary, and even had some gory scenes. I loved them both.

I was a little older, maybe 7th grade, when I had friends recommending Monty Python's Holy Grail and somehow my parents rented this movie and let me and a friend watch it by ourselves. This movie was the most hilarious thing I had ever seen in my life. I opened the door to me for the concept of British comedy and I ate it up. I watched as much Montey Python as was available at the local rental store. I got the cassette tapes of all the shows for a birthday present. It was highly formative.

For the bonus, I was a freshman in high school when a friend loaned me a VHS with Akira on it. And I thought, "Yes! How do I find more of this?"

What is truly wonderful about this set of movies though, movies I like more than anyone else, is that if I look at my group of friends that has stuck with for the years... I'm not actually sure I do like any of these things more than them. They are a litmus test. If you like this, you will be my friend.

Wednesday, May 20, 2020

WWDC 2020 iPadOS Wishlist

The online-only virtual developer conference is just around the corner and I don’t feel like we’ve seen too many rumors. Here is my very simple very short wishlist for iPadOS.
1. Separate Apps On External Display - The foundation is all ready for this! I want to plug my iPadPro into an external 5K USB 3.1 display and then be able to have two apps on the iPad and two different apps on the external display for a total of four apps. The external display isn’t a touch screen, but that’s okay, because I can connect a keyboard and mouse to the iPad and use the new iOS pointer to manipulate the apps on the external display. We’re so close to this!
2. Web Meeting Camera in Background - If you’re in a web meeting (Zoom, WebEx, GTM) the iPad camera only works if the app is running foreground in full screen. If you switch your web meeting to split screen or put it in the slide over, your web meeting no longer has access to the camera. BOO! When I’m in a web meeting, I want the app to be in the slide over so I can multitask, but I do want to leave my camera running.
3. ReplayKit to share a specific app - If you’re in a web meeting (Zoom, WebEx, GTM) and you share you iPad screen, it shares the WHOLE screen. Generally I want to be able to share my browser app (Safari of Chrome) while still running Slack in split screen that is not shared so I can chat with my coworkers about the client we are presenting to.
That’s it! My short and simple wish list and I think the iPad would finally be the equivalent of working on my laptop. Huzzah!

Sunday, May 3, 2020

The Hassle and Joy of eBay

Six months after I created eBay, I started receiving a spate of complaints. Everyone was complaining about each other. - Pierre Omidyar
I'm getting more and more used to "renting" technology where I continually upgrade to the latest gadget and then sell the previous one. I do all of this through eBay, where I have yet to be taken advantage of, but it has been a big hassle. I wish this could be easier for me. I just recently sold off my 2018 iPad Pro, 2011 MacBook Air, and iPad mini 2. I thought I'd share the process.
The first thing I do is get the trade in value from somewhere reputable like Apple or Gazelle. What will Apple give me if I give my product back to them? Once I have that, I know what the minimum price is that I want from eBay (with some math). eBay is going to take a 10% fee for the item and then when I use PayPal, PayPal is going to take 2.9% fee (+ $0.30). So I'll take whatever price I was going to get from Apple, do the reverse math, and that will give me the starting bid price at eBay.
iPad Pro 2018? Apple will give me $480, so I need to sell that on eBay for $552 ( - $55.2 from eBay and -$16.31 from PayPal). I'll do the same thing for the MacBook Air and iPad mini 2.
eBay will not let you set a reserve price for free, which is why I use this as the starting bid price. eBay will also whine at you that you should set a lower starting bid price to attract more buyers, but just don't do that. Silly talk. Schedule your auction to be 7-days and to start on Sunday evening - I read this is the best and it makes sense to me. I end my auction at 5pm PST (8pm EST) as the time that seems to work well.
I currently also disable international sales - but that's just paranoia. I used to allow it and I've had items ship internationally without a problem, but I've already read horror stories about it.
Buy It Now price? Accept offers? I don't do either of these. I have never seen an offer come in that beat the final selling price. So while this might make sense from some items, it doesn't seem to be the right choice for electronics. Of course, just because your auction doesn't allow offers, this will not stop people from sending you messages asking you things like, "what is the lowest price you will accept for this?" Ignore those silly shenanigans. I used to reply, but I don't think there is a point now.
Once your item sells is where the fun begins. You need to follow the rules here. Wait for the payment to come through PayPal and ship to the address associated with the PayPal account. This is the easiest process and this is the process where eBay/PayPal will protect you if something crazy happens. What is, sadly, likely to happen is the buyer will try an convince you to do something else. They will suggest they have moved, please ship to a different address. They will suggest they can send you a check and avoid the PayPal overhead (2.9%). They will tell you they have already paid you (even though eBay does not confirm this) and demand you ship. DON'T SHIP. I don't know if this is a scam or not, but don't ship. Also, don't cancel. If you don't put up with the scam and the buyer suggests you cancel, don't. A cancelled transaction puts the ding against you. Let two days pass and file an "unpaid order" and eBay will refund you the fees.
So when this happens (it happened to me 2 times for the iPad Pro and 3 times for the MacBook Air) just relist your item on Tuesday with a 5-day auction for the next weekend. Repeat and relist.
The "best" scam that happened to me was my iPhoneX. Apple would buy it from me for $525 so I listed it for something like $600. First bid was $601 followed almost immediately by an $850 bid and then an $851 bid. WAHOO! Score. The week ticked by... and then at 4:59pm as the auction closed.... the $851 and $850 bid were cancelled and it sold to the $600 bid. Ha! Well played. I canceled the auction as "no longer have the product" and took the hit to my sellers reputation and just sent the phone back to Apple. But, seriously, well played. How is this scam not WAY more common?

Sunday, March 1, 2020

Four Formative Series

He does not despise real woods because he has read of enchanted woods: the reading makes all real woods a little enchanted. - CS Lewis (talking about J.R.R. Tolkien)
I found the time to read a lot growing up. Reading was my before-dinner ritual. Get home, finish homework, watch the Disney afternoon, read 1-2 hours until dinner. I read a lot of trash SciFi and Fantasy from the library, but I also ran across some series that stuck with me.
The Hobbit & The Lord of the Rings - It took me a very long time to make my way through this whole series. I read the hobbit in 6th grade and Fellowship in 7th, and then I kept getting distracted by other school books and then restarting Fellowship each summer. I finally finished Return of the King in my freshman year of college. Throughout middle school, high school, college, and a little beyond I played Middle Earth Role Playing (MERP) and have read more than a hundred supplemental books from ICE. ICE was always good at referencing and using source material and I felt wholly emerged in the world of Arda. I love the way Tolkien handles magic in his world. It’s not spell craft, but magic. I was enthralled by the moment Frodo reaches Amon Hen and sees the Barad-dûr. Sauron and Gandalf opposes one another in a magical battle over Frodo’s will. That scene, not of lightening bolts and fireballs, but of force of will, inspired almost all my renditions of magic when writing my own fantasy stories. Magic is expressed by a push against the wills of others and the forces of the world.
The Ender Series - Was Ender’s Game requires reading for little boys? I think we all read the first one, but I have gone on to read every single book in the Ender Series and Shadow Series. I loved Xenocide and Children of the Mind in a way that I rarely found others did. I am not sure those books would hold up to an adult rereading, but as a kid, the way they played with the concept of self was fascinating and inspiring. The hive mind of the formics was a cool concept, but even more when Ender becomes his own hive mind with his two created siblings. I was moved by Ender’s recreation of Peter and Valentine. Peter, whose memories are all sociopathic from Ender’s memory, even though he knows that Peter actually created the Hegemony and brought about world peace. Valentine, trapped as a young loving innocent child even though she knows that Valentine was instrumental in Peter’s world domination. Such and amazing mind game for a young kid to think about: what if your memory of yourself doesn’t reflect who you actually are?
Dragonlance - What different world building than LotR. I think I read everything that came out through high school and college. Dragonlance Legends was my favorite set and Raistlin was my favorite character (wasn’t he everyone’s?). This was the series that inspired me into thinking about every villain as the hero of their own story. Raistlin goes from neutral to evil, and ends with a minor redemption. To me, he was always the protagonist, and that greatly influenced my viewpoint of stories and life. To think that no one is trying to be evil, they are trying to do what they think is right. Even when they introduced Dalamar, in theory truly evil, he was also loyal and thoughtful to his friends. Yep, everyone is the hero.
Be an Intergalactic Spy - I would not describe this as a narratively rich series. When I first started to learn to program BASIC on the Apple ][e, CYOA was my inspiration for my first massive program called The Quest which started out as spaghetti code. It was full of GOTOs where one choice progressed the story and the other choice lead to The End. You know, just like a CYOA book. I vividly remember when I had the inspiration in game that choices wouldn’t end the story, but instead you could accumulate gold and then maybe buy a sword and that would let you get past a dragon and BOOM The Quest slowly turned into a full text-based adventure. As a kid, this was the natural progression of a program, but as an adult looking back that was the moment I understand what programming actually was. The Quest in BASIC is one of the few programs I lost over the years I wish I still had.
Honorable Mention, Hitchhikers Guide - I didn’t get the humor as a kid. I found it weird and fun, but not hilarious. It planted the seeds in my brain so that later on in my life as my I started to understand satire I would think back to parts of this book and just start laughing.

Saturday, February 8, 2020

Drobo Ragnarok

Innocence is a catalyst for magic. - Mary and the Witches Flower
I bought a Drobo way back in 2011 to move my content off my internal drive and move it onto beautiful attached storage. For the longest time my Drobo 2G was connected to my AirPort Extreme as an "AirDisk", a cool feature where the AirPort turned any drive into a NAS. Of course, Apple retired the AirPort Extreme so when I switched to Eero the Drobo moved to be attached storage to my server (a MacBook Air 2011). Then two things happened at the end of 2019. The first was I realized that my Drobo was connected via USB 1.1 (12 Mbps) and that it was the slowest link in the chain of streaming content off my Drobo to the various devices around the house (and over the internet!). The second was a red light of death! One of my 1TB drives failed, but truth be told, going 8 years before my first drive failure was pretty good. So I replaced the failed drive with a new Seagate, and after a 200 hour rebuild, everything was groovy.
But I knew the 2G Drobo was probably approaching Drobo Ragnarok. I started saving and this January the great Drobo Migration of 2020 began. You see, due to compatibility, I couldn't just move the Disk Pack from my Drobo 2G to my new, lovely, Drobo 5D3, instead I had to do a very very slow migration of content of moving the four drives out of the old Drobo (2TB, 2TB, 1TB, 1TB) into the new Drobo one drive at a time. It was like the riddle of how you get five people across the river that on the boat that only held two. The best way I've found to visual Drobo storage of BeyondRaid, is whatever your largest drive is will just be for the parity bit and gives you no storage.
Put a brand new drive in Drobo 5D3, then pop a drive out of Drobo 2G and copy 2GBs of data across. Once Drobo 5D3 was nearly full and Drobo 2G has rebalanced all the data... pop the next disk out of 2G into 5D3 and repeat. The transfer took place of the course of a week. I hadn't actually done a cloud backup of all this data for a while (though the photos are all uploaded to iCloud Photos).
Because of the lack of recent cloud backup, the constant drive failure during transfer was harrowing. With the new 5D3 I bought a SSD accelerator card which failed on Day #2. Okay, no biggie, return and get a replacement. All the data did transfer, though I hit a limit once where I had to toss a spare 500GB drive in the new Drobo temporarily. But then after all the data was copied to the 5D3 and it had all five drives in it, the red light of death!
I was somewhat nervous as I was a little delayed on having a real backup of everything. Drobo rebalanced to the remaining four drives, phew. This was a cool feature, I guess I should have expected, which is if there is enough space then Drobo will get all the data back into protected mode on the remaining drives. The drive I had bought back in November to replace that dead drive had died. Thanks to Amazon.com's extended holiday return period, I was able to replace that drive. So as I was waiting for that replacement from Amazon, ANOTHER RED LIGHT OF DEATH! Thankfully, because Drobo had rebalanced across the four good drives, I didn't loose any data.
Amazingly, Drobo rebalanced again to the remaining three drives I had. So in theory I could have lost one more drive and still been okay. Another drive from 2011 had failed. So I had to buy a new one from Amazon.com. For the record here were my drive failures over the course of three months:
  • November 2019 - a Western Digital Drive from 2011 failed, replaced with a Seagate
  • January 2020 - my Kingston SSD card failed 2 days after purchased, replaced with the same thing.
  • January 2020 - The Seagate Drive I bought in November 2019 failed. Replaced with a different Seagate.
  • January 2020 - Another Western Digital Drive from 2011 failed, replaced with a new Seagate.
So overall, I had two drives make it for 8 years and I had another two drives fail writhing a week to a few months. That is pretty standard. Drives either fail fast or fail at the end of their useful lifetime. Bless the Drobo. I had four drive failures over the course of 3 months (two of the in the same week!) and I didn't lose a byte of data. Now everything is on the great new beast!

Thursday, January 9, 2020

A Few Meeting Best Practices

People on the internet are just bad at arguing. - Marco Arment
You've probably been attending meetings since your first day at your very first job. It is very easy for a meeting to be a waste of time, but if you're in charge of a meeting get the basics right so it runs efficiently and is valuable for people. Hearing, "I like going to her meetings!" is such a great compliment.
Here are some planning and execution tactics for your meetings to help make them run great.

Plan for Your Meeting

A meeting runs well if you plan it to run well. If you skip the planning part then you have a cascading problem. So it all starts with the efficient and clear meeting invite. You've seen invites that look like this:
What's wrong with this invite? Really, just about everything.
  • The meeting name is unclear
  • The time of the meeting is wrong
  • The duration is 1 hour long, is that right?
  • The attendee list contains the CTO, is that appropriate?
  • There is no room reserved
  • There is no web meeting / dialin available
  • There is no goal for the meeting or agenda
Here is clear version of the same meeting. If you take the extra few minutes to do a strong invite then it will help the meeting kick off well.

Good Meeting Invite Guidelines

Always have an objective for you meeting. State the goal in the invite to the meeting and present it again when you kick off the meeting. If you reach your goal by the end of your meeting, than your meeting was a success. Your goal may be to disemenate information, gather information, reach a decision by consensus, reach a decision by driving a manager to make one, but your meeting DOES have a goal. If your meeting doesn't have a goal, cancel your meeting.
Optional invitations mean something and you should be conscious of using them. This optional invite information isn't always surfaced well to the person receiving the meeting, so I recommend calling out specifically in the description why optional people have been invited to give them more information about if they want to attend.
Always have an agenda. This is how you know if you have provided too much time for your meeting or not enough for you meeting. Often people will just plop 30m onto the calendar or 60m onto the calendar and assume it "feels" about right, but the agenda allows you to check this. Guess what, people are very happy about 20m and 45m meetings too. There is no reason to chunk it into 30m. Sometimes I imagine a world where the Outlook default meeting is 20m.
I recommend starting the meeting agenda with a 5m kickoff. A good kickoff should take about 1m, so this is buffer time where you can stall for 4m before kicking off the meeting for people running late, joining the dialing, grabbing coffee, etc. It's especially important if you work in a culture of back-to-back meetings.
End your meeting agenda with a 5m wrap-up and next steps. Similar to the kickoff, these should take about 1m to do, so it's a little extra buffer time. If your meeting doesn't need this buffer time you can ALWAYS end your meeting early.

Run Your Meeting

Do your best to get to you meeting room 5m BEFORE your meeting. This lets you see if people have hijacked your room (or if there is a meeting and your presence can add an urgency to ending) and lets you be polite about asking them to leave your room.
Once you're in your room (on your call), get all the technology working. Join a screen share, conference number, share the presentation, do what needs to be done. As people arrive, greet them, and let them know the meeting hasn't started yet.

Kick off the Meeting

Clearly state that you are kicking off the meeting, the goals of the meeting, and the agenda of the meeting.
If people need to be introduced, it is your job as the facilitator to introduce them. Don't make people sit through an around-the-horn as each person intros themselves. You invited them to the meeting, you should be able to say who they are, and why they are invited.

Take Notes

A key deliverable of any meeting is the meeting notes which should include: attendees, decisions, and next steps. Meetings for information gathering would also include the gathered info.
Take your notes "on the projector" or "in the screen share" so all the participants can see your notes. Public/shared note taking in a meeting is extremely powerful. When a key decision is made people will ask to make sure it is clearly written in the notes. When there is a next step, people will ask to have the next step added to the notes with an owner and due date. People will also not be concerned about having an open laptop to write their own notes, because they'll be confident you're capturing important items and this leads to stronger engagement.
You can also delegate note taking to another trusted attendee, but you are still facilitating the note taking and make sure they are capturing things correctly.

Facilitate the Conversation

If you have planned your meeting well, with a clear goal, the right participants, and the right agenda that drives to the goal then the main facilitation technique you need is to keep people on task. When someone starts down a rathole, it may be a valuable topic, but you need to point out that it will not lead towards the meeting goal and is not on the agenda and then create a next step in the meeting notes to address the topic after the meeting. "Your concern about the privacy policy is good, but not what we're trying to address. Let me assign you a next step to raise that concern to the project lead at the risk meeting."
You can find lots of advocate on verbal facilitation techniques, but my most used tools:
  • Reinforce agreements - When you hear people agree, say that you hear it, and capture it in notes as a decision
  • Make a proposal - often useful at a stalemate, "I'm going propose we capture this as an unresolved next step and move forward. Is that good?"
  • Include quiet members - You end the meeting, and then someone who didn't speak responds to the meeting notes with FUD. So during the meeting ask, "Lindsey, do you have any concerns with this process?"

Running Over

Don't let your meetings run over. You should know early on if you're lagging behind in your agenda. If unforeseen topics, risks, or other items keep you from meeting your goal within the time, capture the progress you've made and the next steps and end your meeting on time.

End the Meeting

At the end of the meeting, review the goal and confirm if you achieved it. Review all of the next steps to make sure the owners understand their tasks and when they are due. Then, declare the meeting over. Send the meeting notes out immediately through email (or Slack or whatever you use).

In Summary

  • Prep for you meetings: Goal, Agenda, Participants
  • Send a clear and complete meeting invite
  • Start your meeting on time
  • Facilitate the meeting following your agenda towards your goal
  • Take notes publicly and clearly during the meeting
  • Wrap up by revisiting the goal, reviewing next steps, and sending out meeting notes

One Final Thought

Don't force people to come to your meetings, they should come because the meeting provides value to them.
It's tough to manage the dreaded recurring status meeting or team meeting. You need to hone the format of this meeting until people get value from it and WANT to attend it. Some people might be better just emailing in their status and receiving the meeting notes. If that achieves the goal (share status updates) then that's fine.
Title Photo by Hunter Newton on Unsplash

Monday, January 6, 2020

On Air via HomeKit

I work remote from home and spend a large portion of my day in web meetings with my camera on so my coworkers can see into my home office. Mrs.Chaos frequently wants to wander into the office, but doesn't really want to do so during done of these video meetings and I've always wondered if I could create some sort of "On Air" so that when I'm in a video meeting, I could notify people outside of the office. I have finally jury-rigged something together to do it and it's a great testament to the future of home automation. I can't wait until we can use natural language to describe this, "Hey Siri, setup an automation so that when my work computer is in a web meeting the Eve Flare turns red and when the meeting is over it turns off again."
One of the good (and the bad) things about HomeKit is that I can't just use a script on my computer to fire events into HomeKit or to set scenes, only automations built inside the Home App can do this sort of thing by querying HomeKit accessories. So here was the process I went down to do this fun project:
  1. Write a script to check if it's working hours, than ssh'es to my work computer and tests if a video conference is on
  2. Use Homebridge to have a HomeKit Switch accessory that runs a shell script every 5 minutes
  3. Video conference means, "the switch is on" otherwise "the switch is off."
  4. Home Automation in the Home App so if the switch is controlled to "on" the light turns on, if it's controlled to "off" the light turns off.
The script was a tad trickier than I expected, but not especially difficult. Checking if an app is running, "GoToMeeting" or "zoom.us" or others is just a simple process check:
ps aux|more | grep "${processName}" | grep -v grep | wc -l
In this modern day of web meeting programs (Google Hangouts) how do you tell that is running? I had to determine if Chrome or Safari or Firefox had turned on the webcam. This is just a matter of using lsof to search fo VDC (Video Connection?). An interesting trick is that all the browsers automatically make a least one connection to VDC when they are running without using the camera, so they show two connections when the camera is going. Also, if you have another logged in user on your computer running Keybase, then the Keybase OS throws errors in lsof so I have route stderr to null.
lsof -n 2>/dev/null | grep -i "VDC" | grep -i "${processName}" | wc -l
Cool, right? So if the first command returns more than 1 result or the second command returns more then 2 results per process, there must be a web meeting running.
Homebridge is the gem of the HomeKit ecosystem for the hobbyist. It is a HomeKit hub written in node that can do anything a Node server can do, like call out to web apis or making internet requests. I have my WeMo, SamsungTVs, NetAtMo, Dropcams, and Connected by TCP lights all running inside of Homebridge and part of my HomeKit system, even though none of them support HomeKit.
For this setup I installed a package called cmdSwitch2 which shows up as a HomeKit switch and runs shell commands for "turn on," "turn off," and "get state." It will also poll the "get state" command on an interval, so I used to this to have it poll for a state every 5m. Just this easy:
{
  "platform": "cmdSwitch2",
  "name": "CMD Switch",
  "switches": [{
    "name" : "Web Meeting",
    "state_cmd": "webmeetingStatus.sh -r me@192.168.1.1:webmeetingStatus.sh",
    "polling": true,
    "interval": 300
   }]
}   
The final step of setting up the Home automation is done inside the Home app on iOS and it all "just works."