How to Research and Vote on California Propositions

Overview

California is ‘blessed’ with tons and tons of propositions that are on the upcoming November ballot besides the usual election craziness.

In this article, I cover my way of quickly sorting through the propositions and the way best to vote for me. The usual disclaimers apply. This is my approach based on a bit of cynicism and a bit of practicality. I hope you find it useful.

The Problem

For the past few months, my mailbox has been inundated with oversized postcards that yell in my face “VOTE YES FOR PROPOSITION 314” followed immediately by another postcard with a “VOTE NO FOR PROPOSITION 314”. All of these commercials try to take advantage of basic human biases (such as “don’t tell me what to do,” and “I know how to manage money better than the politicians,” etc…).

The one commonality across all of these propositions is the money that backs them up. My rather simplistic theory is to follow the money. If I like the funders of the ‘yes’ side of a proposition (and by like – I mean that the funder(s) are aligned with my values or at least some of my values), then I vote ‘yes.’ If I’m more in line with ‘no’ side – then it’s a ‘no.’ The approach is simple but the key question is where to get the data in a form that makes it clear and quick to understand a proposition’s goal and its backers.

The Approach

My first stop is my favorite search engine Duckduckgo (I know – a ridiculous name for an amazing resource).

In this section, I go over the top 3 results and the best one that worked for me

The Approach

1. http://www.followthemoney.org is too national

www.followthemoney.org is a beautiful site. While California is part of the site, this resource is targeted at a more national level.

www.followthemoney.org is too national

2. The calvoter.org site is pragmatic

The calvoter.org site slaps you awake with a bright yellow coloration while providing some pragmatic information. Scrolling down a bit leads you to a “follow the money” section. The ‘top donors‘ and ‘total amounts‘ links seem promising and lead to official state of California pages with money information. The problem is that those state pages don’t give much context beyond the numbers. These links are useful for more details about proposition backers/opponents and I use them after getting some context for a proposition (see below).

The calvoter.org site is pragmatic

3. Hitting the ‘follow the money’ jackpot with calmatters.org

The third time may be the charm in this case with the calmatters.org. The site is a nonprofit and nonpartisan site that hits the key issues of each proposition. See the ‘Example Walkthrough’ (below) for how I use it.

Hitting the 'follow the money' jackpot with calmatters.org

Example Walkthrough

In this section, I learn about Proposition 51 through the calmatters.org and top donors sites and make my voting choice accordingly.

1. It sounds good

My first impression is that it sounds good. What could be bad about “school constructions”? I have a child, and I want schools to be constructed and/or refurbished.

Thinking: Yep – I definitely want this!

It sounds good

2. Give me more info

Continuing on https://calmatters.org/proposition/proposition-51-school-construction-bonds/ – there’s a good summary of what Prop 51 is about.

Interesting – 9 billion dollars in bonds and almost 9 billion dollars in interest.

Give me more info

3. Supporters versus Opponents

Interesting sets of supporters and opponents. Eleven million dollars have been spent on this by the supporters though the chart doesn’t tell us who (we’ll come back to that through the top donor sites).

Ummm…I like Jerry Brown for the most part – why is he against this?

Supporters versus Opponents

4. The “More information” section links out to supporters and opponents.

This is a nice section that links to various sites for both the proponents and opponents of Proposition 51.

The "More information" section links out to supporters and opponents.

5. Why is Jerry Brown against it?

Following the Los Angeles Times link (http://www.latimes.com/local/education/la-me-pol-sac-jerry-brown-school-bond-20160212-story.html) from the above step. Brown is saying that this effort will promote more building in affluent areas while providing less to low-income communities. At the same time – the legislature is practicing ‘stagnation’ when it comes to this issue.

So the choice is: builder/developer motivated agenda to increase their revenues or stagnation via the legislature’s indecision and inaction 😦 .

Why is Jerry Brown against it?

6. Getting more details about donors from the state’s top ten donor site

The top ten donor site has much more detail about actual donors. The highest donor is “Coalition for Adequate School Housing Issues Committee” followed by the building industry association. Who is this “Coalition for Adequate School Housing Issues Committee”? It’s a somewhat obscure name that just reinforces Prop 51’s topic – “School Housing” (i.e. school construction). Clicking the link on this coalition leads us to more contribution details from the state’s site.

Getting more details about donors from the state's top ten donor site

7. Details about “Coalition for Adequate School Housing Issues Committee” – 1

Top level page of the state’s information about this coalition. The “Historical names for this committee” is also interesting. If I get minimal information from this page, then I can check out the propositions from the historical section to see the topics/issues that this organization supported. The “Late and $5000+ Contributions Received” option seems very interesting – let’s select that.

Details about "Coalition for Adequate School Housing Issues Committee" - 1

8. Details about “Coalition for Adequate School Housing Issues Committee” – 2

I sure wish I could see only the $5000+ rather than the ‘late’ contributions. This would be easier to do through Excel but time is short and there are many more propositions to go through. There are some people in education that are contributing, and there are lots of construction, architecture, and property management firms.

Details about "Coalition for Adequate School Housing Issues Committee" - 2

9. How to vote on Prop 51?

My rapid research provides the following considerations about Proposition 51:

  • For the most part it seems like it is supported by companies that are associated with construction (like architecture firms, property management firms, etc..). Businesses don’t usually invest in something unless there is a significant upside. So there’s 9 billion dollars worth of upside for a 10 million dollar investment with the state paying 9 billion in interest (and by ‘state’ I mean the taxpayers of California). Do I trust these companies? Are they aligned with the communities in my area?
  • Jerry Brown is against this proposition. He claims that it will help builders and take away from poor communities. This gives me significant pause.

Conclusion

California is a state of sunshine and propositions. There are 15 more propositions to go beyond Prop 51 (sheesh). Mailers and TV commercials are useless when it comes to understanding propositions and are no different than car commercials (though I have to say that I like car commercials better). They tug on psychology and emotion to get the voter to react with a ‘yes’ or a ‘no’. I’ve tried to figure some rapid way to understand the issues, and I’ve written it in this post. Hopefully, it helps you.

If you have any feedback or a better way to figure out California’s propositions – let me know via Twitter (@eli4d) or Snapchat (eli4dcom).

Key links in this post:

How to Fill your Emergency Information on your iPhone

Overview

In this article, I cover the super-easy way to fill out your emergency information on your iPhone.

Why should you do this? The smartphone has become the device that can do the functionality of many other devices including the medical ID bracelet.

Note: These instructions are for iOS 9, but they should apply to later versions of the iPhone’s operating system.

Photo credit: https://www.medicalert.org/importance-of-medical-ids

Overview

It began with a PSA on the Security Now podcast

The importance of this issue came up on my radar through episode 578 of the Security Now podcast. Steve’s PSA announcement caught my attention especially when I realized that I completely ignored the importance of the emergency contact information in iOS’s Health app.

It began with a PSA on the Security Now podcast

The nitty gritty of how to quickly set the emergency contact information

1. Search for the ‘Health’ app on your iPhone

Go to the search prompt by either swiping from left to right until you get to the screen shown below or swipe downwards from any screen. Then open the Health app.

Search for the 'Health' app on your iPhone

2. Select the “Medical ID” (1) menu at the bottom and then select ‘Edit’ (2)

Select the "Medical ID" (1) menu at the bottom and then select 'Edit' (2)

3. Add whatever medical information you are comfortable with

Keep in mind that this emergency information can be seen by anyone that has physical possession of your phone without the to unlock it. Whether it’s an emergency responder, a nosey co-worker, or a thief – this information will be visible to anyone that can touch your iPhone.

Note: Even if you feel uncomfortable with putting any personal information at all you should at least put 2 emergency contacts.

Add whatever medical information you are comfortable with

4. Add contacts, blood type, etc…

The contacts are pulled from your iPhone’s Contacts app, so it’s a simple selection process.

Add contacts, blood type, etc...

5. Testing how the emergency information

Now you are going to see how your emergency information looks to a first responder (or your nosey co-worker or a thief).

Activate the lock screen on your phone. The easiest way is to press the on/off button. Then select the ‘Emergency’ word at the bottom of the screen.

Testing how the emergency information

6. Now select “Medical ID”

Now select "Medical ID"

7. Now you can see the medical ID information that emergency personnel would see

Now you exactly see what a first responder (or your nosey co-worker or a thief) would see. Notice that your phone can be used to call your emergency contacts immediately.

Questions to consider:

  • Are you comfortable with the displayed information?
  • If you are not comfortable with this info, then what is the minimum information that you could put here which would still help you or your loved one in an emergency? (think serious emergency where you or your loved one is unconscious)

Now you can see the medical ID information that emergency personnel would see

Conclusion

While you have to weigh the privacy options of posting your stats and medical information – it’s important to be deliberate and to have basic information on your iPhone as well as your loved one’s iPhone. You don’t want to be going through the “I should’ve, could’ve, would’ve dance” during or after an emergency.

If you found this post useful let me know via Twitter (@eli4d) or Snapchat (eli4dcom). Note that I’m experimenting with snapchat.

A Beginner’s Guide to How to Fly a Drone by a Beginner (with some specific instructions for LaTrax’s Alias drone)

Overview

Towards the end of last year I walked into my local Hobby People shop to find a drone. I walked out with the LaTrax Alias drone (they said it was awesome and they had a sale and I’m a sucker for a sale and a great piece of equipment).

In this article I cover some things that I learned on how to start and how to fly the Alias. I goofed up and mis-remembered the drone arming procedures many times (choosing to just “do it” rather than check YouTube). Luckily the fine folks at Hobby People helped me out every time (shout out to Mike and Richard). While there are tons of resources about drone flying, these are just some things I learned that may be helpful to someone who wants to just get going with a drone.

Alias What?

In case you wondering – no I’m not talking about Jennifer Garner’s character from Alias the TV show. I’m talking about the Alias quad-copter from LaTrax.

Alias What?

Support from LaTrax

LaTrax has a great deal of support for the Alias:

In spite of the videos and PDFs I had a heck of a time connecting the remote to the Alias (which had more to do with me rather than LaTrax’s instructions). Luckily the Hobby People folks were very (very) patient with me. This is one of the reasons why buying a drone from a local bricks-and-mortar shop makes sense, besides the fact that the there is very little pricing when compared to online.

How to Arm the Alias

‘Arming’ a drone refers to the process of connecting the remote to the drone. The Alias (like most drones) begins in a disarmed state. In other words, it doesn’t connect to the remote without specific user interaction. Otherwise, you might accidentally tap the remote and the drone would go flying haphazardly into your neighbor’s Bob yard and then Bob would claim it’s his drone and…well anyway.

The video explaining arming

LaTrax’s drone arming video is very useful in this respect. It’s good to start with this video. However, there is a subtlety in how you click on the throttle stick (which I’ll explain in the next step).

The video explaining arming

The subtlety of arming using the throttle stick

So as the video shows you pull down the throttle stick and then you “quickly press and release the throttle stick”. My problem was that I would press and hold the throttle stick and then this would cause the numbers on the remote to flash and go into its option setting mode. Additionally, this mode can cause the drone/remote to be unbound (the very opposite of what I was trying to do).

So what the heck does “quickly press and release” mean? Think of the volume buttons on your iPhone (or iPad). When you press the button to raise the volume by just one bar (so you’re quickly pressing the button on/off) – that’s the exact same action with the throttle stick. Another analogy – a letter on a keyboard – think of how you press a letter (quickly) on/off with no hesitations – this is the same thing.

The subtlety of arming using the throttle stick

What happens if you end up in the options mode

When I over-pressed the throttle stick (and it would go into its option setting mode), I would typically end up pressing anything else that I could find on the remote. This is definitely the wrong thing to do (but it seems really like the right thing when you’re following the “just fly already” mentality). If you end up in the options mode, then its best to turn off the remote and turn it back on and try again (flight stick down and then a quick push/release).

A note about binding/unbinding

If you press the throttle stick incorrectly enough times your drone may become unbound. So lets quickly cover this:

“Binding” is the process of making the controller (i.e. your remote) “talk” to the drone. Typically the drone (like the Alias) is bound to the remote but you cannot control the drone with the remote unless the drone is “armed” (per above steps). “Re-binding” is the process of re-connecting the drone and the remote so that they can talk to each other. Every drone will have it’s own re-binding procedure.

In the case of the Alias the rebinding procedure is as follows:

  1. Hold both throttle and flight stick at the same time until you hear a beeping sound and see options on the LCD screen of the remote.
  2. Tap the throttle stick to go through the different selection options until you see the ‘reset’ option (i.e. the word ‘reset’ on the LCD screen).
  3. Then you hold both sticks to selected and the remote/drone will reset and re-bind.

Note: I will have a link here to a video where Richard from the Hobby People will show how to do this (this is a todo on my side).

Because you’re not sensitive you need a hula hoop (i.e. how to practice flying a drone)

Why you’re not sensitive

OK – so I don’t know if you’re really sensitive/empathic/understand but when it comes to drone flying that doesn’t matter. What matters is your ability to use the remote in a way that doesn’t cause your drone to crash or fly away in a haphazard way. Initially, when you try to use the remote to control your control of the throttle and flight sticks will be out-of-whack.

Let me give you a gas/brake pedal analogy (the usual disclaimer applies – do not try this: at home, in your garage, on the road, etc…). Let’s say you’ve had the unfortunate circumstance of hurting your right foot (like fracturing your foot while walking off a curb because you were reading a for-sale sales flyer…but I digress). And you have to drive somewhere. So you get into your car and you have the brilliant thought “no problem – I can use my left foot for the gas/brake pedal”. So you put your car in drive (in a safe situation) and as the car begins to drift forward, you attempt to gently press the brake with your left foot. So what happens?

What happens is that you will stomp that brake pedal in the same way that Godzilla crushes cars with his feet. Your brain will tell your left foot to gently/slowly press the pedal but your left foot will be completely mis-synchronized with that request. Your left foot will Mr. Hyde to your right foot’s Dr. Jekyll. At this point you’ll realize that the sensitivity of your left foot is vastly different from your right foot and that it’s time to call Uber or Lyft.

This sort of brain/body sensitivity is what I’m referring to in terms of the drone’s remote control usage.

Photo credit: https://flic.kr/p/dDTryr

Why you're not sensitive

What you should NOT do first time with your drone

LaTrax has a video called “Episode 1 Making your First Flight”. In it they place the Alias in an open area (a good idea) and then they just start to fly it around (their flight expert John is flying it around…sheesh – what’s the point of having an expert fly the dang thing when a beginner is watching the video?). John flies the Alias perfectly because he has the sensitivity to do so but mere beginner mortals do not have this ability yet.

Note: the arming and positioning portions of the video are spot-on so the video is worth watching.

What you should NOT do first time with your drone

What you should do (in my opinion) – Step 1 – Get a Hula Hoop

First step is get a hula hoop. A small one is perfect but a large one is good too.

Note 1: Mike from the Hobby People shop told me about this approach to learning.

Note 2: A cat is not necessary for this step.

Photo Credit: https://flic.kr/p/5d1dxu

What you should do (in my opinion) - Step 1 - Get a Hula Hoop

What you should do (in my opinion) – Step 2 – Find an enclosed structure and put the hula hoop down

Find an enclosed structure. Maybe a small room in a home or even a garage. The key of course is that you don’t want anything breakable (just in case your drone or better said your control of the drone goes crazy).

Put the hula hoop in the middle of the room and put the drone in the middle of the hula hoop. Then step away.

What you should do (in my opinion) – Step 3 – Practice Hovering – Phase 1

The first step is to practice hovering. You want to practice hovering the drone at about 3 to 5 feet off the ground. The reason for this height is that you want to prevent the rotor updraft from causing stability issues (i.e. drone rotors push lots of air downards and hovering below 3 feet causes you to ‘fight’ the drone to keep it stable at a hovering position).

The practice steps:

  1. Drone in center of hula hoop.
  2. Blue LED pointing towards you and red/colored rotors away from you (in the case of the Alias).
  3. Use the throttle stick to lift the drone 5 feet off the ground.
  4. Use the throttle stick to bring the drone back into the middle of the hula hoop (you should not be using the flight stick at all if possible).
  5. Keep practicing steps 3 and 4.

Note: If the drone drifts while hovering and you’re not touching the flight stick, then you’ll need to bring it to a Hobby People type of shop for adjustment.

What you should do (in my opinion) – Step 4 – Practice Hovering – Phase 2

Once you feel comfortable with hovering you’re ready for the next exciting phase: step away further from the drone (a few feet back) and practice the same hovering steps again (from phase 1).

You may be wondering why you need to practice hovering again. The issue you’re addressing is one of perception and control. The further you are from the drone (both on a horizontal and vertical axis) the more different your perception and therefore the more different your control. What you’re practicing is getting a feel for controlling the drone from a distance and that’s very important when you fly it at much higher heights than 5 feet.

What you should do (in my opinion) – Step 5 – Practice the drone version of touch-and-go

At this point you’ll be practicing a drone version of touch-and-go. Here’s how to do it:

  1. Take off from the center of the hola-hoop.
  2. Go to the right and touch down outside of the hula hoop.
  3. Hover back to 5 feet and fly back to the center of the hula hoop.
  4. Touch back down in the center of the hula hoop.
  5. Do steps 1 to 4 by going to the left.
  6. Do steps 1 to 4 by going to the back.
  7. Do steps 1 to 4 by going forward (without hitting yourself 🙂 ).

What you should do (in my opinion) – Step 6

There is no step 6 and there is no spoon. If you’ve passed your drone sensitivity training then you’re ready for the great outdoors.

If you have an Alias then check out LaTrax’s YouTube channel for how to do flips, rolls and other awesome things.

Have fun and good luck!

Some additional information regarding drone training for kids

There are lots of (crappy) drones for kids. They’re cute and small and they breakdown really quickly. My wife bought one of these tiny disasters for our son during a trip and one of the motors quit fairly early and then the drone was useless and the boy was very frustrated.

I asked the Hobby People people on the best way to teach a pre-schooler to fly a drone. Richard had suggested that I get prop guards for the Alias. More importantly, he indicated that he could adjust the remote control (takes about an hour) so that the Alias control reactions are much slower. In this way, my pre-schooler can learn to fly the drone without destroying himself, the cat, the house, and the drone. He offered to do this adjustment (no charge) and I will take him up on it in the near future (have I said how much I like local hobby shops such as the Hobby People?).

If you’re interested in a post about pre-schooler drone training/flying – let me know via @eli4d.

Conclusion

While your impulse may be to fly that drone as soon as you unwrap the box, it is best to practice just a little bit.

That’s it. That’s the very little I know about drones. Hopefully you found it useful.

I welcome feedback at @eli4d.

Review and Usage Steps of a Favorite Mac App – GrandPerspective

What is it?

GrandPerspective is a wonderful tiny disk utility that shows you in a graphical way disk usage so you can deal with the large files/folders that take up space. Below is the description the app store. It is well worth the $1.99 that the author is charging. You can certainly find it for ‘free’ but why not pay for an app that costs less than a small cup of Peet’s regular coffee.

What is it?

Why should you use it?

I recently started a ‘small’ project around cleaning my digital landfill of files and folders. My goal is to get a decent backup strategy that starts with my most important files (family pictures and videos) and continues with less valuable files/folders. In my pursuit of the 3-2-1 backup I needed to examine my polluted Dropbox folder for large files/folders to make a determination if they were garbage or useful data that I wanted to keep (I plan to detail my approach in a future post or course…but first I need to get through this exhausting cleaning).

How to use it?

So let’s get to it – how do you use GrandPerspective?

Note: this will be a quick walk-through of this software. If you want more detailed usage information – check out GrandPerspective’s Help (per the image below).

How to use it?

Go to the app store and get it

You can get it from here: https://itunes.apple.com/us/app/grandperspective/id1111570163?mt=12. Believe me when I say that it’s a bargain for $1.99.

Launch GrandPerspective

When you first launch GrandPerspective, you will be greeted with a small welcome window. It will look like the following image except that there won’t be any locations in the ‘Repeat a recent scan’ section.

Choose the “Scan Other Folder” button.

Launch GrandPerspective

Choose the folder that you want to scan

In my case, I chose my ‘Dropbox’ folder, but you can choose any folder you wish. Then press the ‘Scan’ button.

Choose the folder that you want to scan

GrandPerspective will QUICKLY scan your folder and produce a tree map

The program is amazingly quick at scanning a folder of any size. The result is a tree map that looks like one of those quilts with different squares and colors.

GrandPerspective will QUICKLY scan your folder and produce a tree map

Moving your mouse across the treemap shows you files/folder sizes

GrandPerspective has amazing file resolution in terms of the mapping between squares and files and folders.

When you move your mouse, you will see a large border that points to a top level directory (1). Within this block, you’ll see sub-folders that are delineated by different colors (2).

In the example below the mouse cursor is within a gold block (3). This particular block is a large file whose size is 1.24 GB. Relative to other files/folders – this particular file is HUGE. Let’s take a more careful look at this file.

Moving your mouse across the treemap shows you files/folder sizes

Getting more detail on the file – 1

In the image below – I expanded the GrandPerspective window so that it shows the full path to my large file (notice my mouse cursor is on the gold block as mentioned above). The information bar at the bottom of the screen shows me the exact path and file name. As I look at this file, I remember that this large file is a ScreenFlow file of a screencast answer to a student’s JavaScript question.

Let’s look at even more detail of the file by right-clicking on it.

Getting more detail on the file - 1

Getting more detail on the file – 2

When I right click on the gold block (my ScreenFlow file) I have three choices:

  • “Reveal in Finder” (the one that I choose): opens the Finder to the location of the specified file/folder
  • “Open with Finder”: opens the file with whatever application is the default. In other words, select this option for my ScreenFlow file opens the file directly in ScreenFlow.
  • “Copy path”: Copies the path that is shown at the bottom part of the screen.

I’ve chosen the “Reveal in Finder” option.

Getting more detail on the file - 2

Getting more detail on the file – 3

GrandPerspective now opens the folder that contains my chosen file (the gold block from the above picture), and it conveniently highlights the file.

At this point I can choose whether I want to keep it, toss it or move it somewhere else.

Getting more detail on the file - 3

Where to go next – lots of different options

GrandPerspective has many options, but the above steps are the basics. You can delete files/folders with it too, but I would suggest doing this within the Finder, so you’re sure of what you’re doing. To get details about additional features – check the Help menu or the GrandPerspective site.

Where to go next - lots of different options

Who is it made by?

I always like to know a software creator’s background because it typically reflects in the DNA of the software.

GrandPerspective is made by Erwin Bonsma who seems to be very awesome. I know – you’re wondering how I could know that. Well – check out his home page for some neat visual work. You can clearly tell that this guy loves to work with visual things (puzzles, animations, 3D printing, and software) and it reflects in the simplicity and power of GrandPerspective.

Some other places that Erwin frequents (based on links from his home page):

Who is it made by?

Should you buy it?

The short answer: YES! (if you need to find space in your digital landfill known as your hard disk)

The long answer: Probably. It’s a nicely artisan-ish made app that does one thing very well. It is also very (very) reasonably priced.

Student Question – JavaScript Array Usage and How to Accidentally Use it as an Associative Array

Overview

In this article, I cover a question that I got from one my students in a JavaScript course that I teach at Stanford Continuing Studies. Monkey patching lies at the core of JavaScript’s DNA and this question/answer is fundamentally about the positive and negative sides of monkey patching.

The Question

The question that came up was regarding JavaScript’s Array object. It is important to remember that the ancestor of the Array is the Object and that JavaScript only has five primitive data types and one complex data type (i.e. object type).

Question phrased by student

The question that came in from the Lab 6 instructions for my class.

Question phrased by student

Clarification of Question – Does debugger show what student is claiming?

The debugger confirms the student’s question. Notice:

(1) We are indeed dealing with an Array

(2) But the length of the array is 0

(3) And yet it contains two items – “w1”, and “w2”

The student question is entirely valid – how can we have an array with 0 elements that has two elements in it (i.e. “w1” and “w2”)?

So Array is acting like an associative array not a typical array data structure.

Clarification of Question - Does debugger show what student is claiming?

Clarification of question – lab section

The question is about the use of the Array (by virtue of [] initialization). Then the use of the Element id

Clarification of question - lab section

Answer

Let’s verify – is the Element’s ID a string?

According to MDN, it is. And indeed for this code “w1” and “w2” are the element’s ID.

Let's verify - is the Element's ID a string?

So what’s going on – part 1

Let’s re-look at MDN’s Array documentation (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).

(I highly recommend reading the whole **description). Initially, there is usage information, and then there is the description part which includes a very interesting beginning (the “Arrays are **list-like objects“). Notice the “Some people think…” part. It refers to this article: http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/ (well worth a read too).

So what's going on - part 1

So what’s going on – part 2

Here is my description of what’s going on: so we are creating a variable that’s going to reference an Array object. The Array object is a descendent of the JavaScript Object (granddaddy of all objects in JavaScript). So this means that we can add properties to the Array object by using [ ]. In effect, we’re monkey patching the Array object to act as a regular Object (since it really is an Object).

So what’s going on – part 3 – simple code example

Let’s simplify this issue through some simple test code. Notice:

  • We’re creating an Array object
  • We’re calling it with the dot notation – just like we would access any property on an object.

So what's going on - part 3 - simple code example

So what’s going on – part 3 – simple code example

The result is that the Array itself is empty (i.e. there are no index based elements). But the Array object has been monkey patched to have the string1 and string2 properties.

So what's going on - part 3 - simple code example

So what’s going on – part 3 – simple code example

Debugger confirms the behavior experienced by the student. There’s an empty array that contains new properties within it.

So what's going on - part 3 - simple code example

Lastly…

Should I have used an Array for the lab exercise? Probably not. It would have been better if I had used a plain JavaScript object. This was a neat (and hopefully instructive) catch by one of my students.

Conclusion

My hope is that this article has been useful to learners of JavaScript (besides my students). Sometimes JavaScript feels like you’re running around with a magic wand and sometimes it feels like you’re running around with scissors. Both feelings are the result of JavaScript’s DNA: monkey patching.

A Tiny Little Privacy Hack for Grammarly

Remember your English teacher in high school?

Do your remember THAT English teacher in high school? Well, I remember THAT one. Her name was Miss Johnson (I’ve changed this name of course :-)). I don’t remember much of Miss Johnson’s teaching, but I do remember one incident when I accidentally called her “Mrs. Johnson”. After uttering those two words, time stopped, the clouds darkened, and Miss Johnson turned around and became Voldemort. She yelled at me with a quiet hissing tone – “IT’S MISS JOHNSON, NOT MRS. – IS THAT SO DIFFICULT TO UNDERSTAND?” She then turned back and continued with the lesson muttering some other words under her breath.

I may have forgotten my grammar and my English, but I never ever forgot to use ‘miss’ when addressing Miss Johnson.

You don’t need a Miss Johnson – you just need Grammarly

I LOVE Grammarly. It’s an excellent English teacher without the attitude and embarrassment of dealing with a Miss Johnson. While the Grammarly site (https://www.grammarly.com/) explains all of the features, I think that the Grammarly magic can best be summarized in 2 steps.

You don't need a Miss Johnson - you just need Grammarly

Grammarly Magic – 1

Here’s William Ernest Henley‘s poem Invictus. It is one of those gritty determination types of poem that has been inspirational (at times).

Getting back to Grammarly – so notice that Grammarly flagged a grammar issue. Now looking at this, you would think “well – even Word can do this” and I would answer with “Yes but WAIT TILL STEP 2.”

Grammarly Magic - 1

Grammarly Magic – 2

By choosing to expand the explanation card, you get to see the Grammarly magic. It’s Miss Johnson without the terror and attitude. Here we get to understand why Mr. Henley should have used a comma (now granted – it’s a poem, so in a sense it’s an ‘anything goes’ grammar stew). My point is that Grammarly teaches you about grammar usage using the best relevant examples i.e. your day-to-day writing.

Of course, you don’t have to expand that card, and you can just go based on whatever ‘sounds’ right. But there’s something educationally magical to have this card explain the problems with one’s writing. And if I learn what’s wrong with my writing, I can become a better writer. Grammarly gives you the gift of education without the high school English flashbacks of Miss Johnson. This gift makes Grammarly fantastic!

I have yet to encounter another web service that does such an amazing job at teaching without seeming to teach.

Grammarly Magic - 2

Houston – we have a teeny tiny privacy problem with Grammarly

So hopefully I’ve established how much I like the service. However, like all things on and off the web, Grammarly has an issue when it comes to privacy of information. I’ll explain the problem by covering:

  • The two methods which Grammarly uses to check your work
  • Some fatal privacy assumption that we all make

Then we’ll cover an easy solution for one of the privacy issues.

How Grammarly checks your work – Method 1

The first method is to type/copy your words into Grammarly’s editor. Grammarly checks your words and shows you the errors.

You can do this on Grammarly’s web application (at https://app.grammarly.com/)) or through a native application such as Grammarly’s native Mac application.

Questions to consider:

  • On the web application – where does Grammarly store your document?
  • On the native Mac application – where does Grammarly store your document?

How Grammarly checks your work - Method 1

How Grammarly checks your work – Method 2

In the second method, Grammarly checks your work within your web browser. In this case, you need to have Grammarly’s plug-in installed for your specific browser (there are plug-ins for all the major browsers). In the example below, I’m writing an email in Gmail and Grammarly does the checks right on the web page.

Note: As an aside, there are certain sites/conditions where Grammarly will not work. For example, Google drive is not supported at this point.

Question: So in this case – where does Grammarly store your document? Or does it even store your document at all when you’re in something like Gmail?

How Grammarly checks your work - Method 2

Where does your work reside after Grammarly checks it?

As mentioned in the previous steps, a fundamental question is where is your work/data when Grammarly checks it?

The answers are as follows:

  1. If you’re on Grammarly’s web application, then your document is in your Grammarly account. Makes sense – right?
  2. If you’re on a web page (like Gmail’s “Compose an email” page), then Grammarly checks the document, but it does not store your document in your Grammarly account as a ‘document.’
  3. If you’re in a native application (like Grammarly’s Mac client) then Grammarly stores your document on your Grammarly account on the web.

Where does your work reside after Grammarly checks it?

Fatal Privacy Issue – Grammarly’s Native Applications

It is the native application (like the Mac app) that is troublesome from a privacy perspective. After all, if it’s a native application, you would expect the app to save your document on your Mac. If you pursue this assumption, then you would think that using the native application would provide more privacy than any other approach, and you would be completely wrong.

You might be thinking “well that’s not a big deal – Grammarly’s native application is just a wrapper to the web application”. Unfortunately, it is somewhat of a big deal. Consider these scenarios:

  • You are writing a sensitive vendor contract or HR document.
  • You are writing a sensitive internal email to an employee.

There are lots of scenarios besides the above two. The point is that you would not want your document to be stored on Grammarly’s servers (i.e. by being a ‘document’ in your Grammarly account) for sensitive documents/information. Consequently, using Grammarly’s native application could be disastrous from a privacy perspective.

Houston – we have a solution

Grammarly’s browser plug-in provides the solution for our teeny tiny privacy issue. The on-the-web page check is the only Grammarly method that does not store anything in one’s Grammarly account.

Note: There is still a period of time when Grammarly’s web service has the data for the in-web-page checks. I checked with Grammarly’s support folks and found out that “User Data is stored on our servers for up to 14 days. After 14 days, deleted user content is completely removed from our servers.” So if you’re dealing with extremely sensitive information that shouldn’t leave the premises of your network, then you should skip Grammarly altogether. The solution I propose in this section prevents your document from being stored on the web application side as a document. Of course, the usual disclaimers apply regarding anything that I state in this article and throughout my site.

Special Thanks to Kasey and Christine from Grammarly’s Support Team

I’ve come across many support teams, and there’s this very fine line between a ‘just stop asking me questions’ curt response and a sincere, helpful response. Grammarly’s support team goes beyond the ‘curt’ approach, and I really appreciate it.

Kasey answered my questions about the browser plug-in while Christine answered my data retention questions.

Solution Approach

My initial approach to prevent Grammarly from storing my words as a document on my Grammarly web account was to create a simple page with a textarea and no submit button. All I wanted was that tiny little green Grammarly refresh icon to show up. But I got nothing. So I contacted Grammarly support.

Solution Approach

My question to Grammarly support

My question to Grammarly support

Grammarly support response regarding textarea

In relatively quick order the fantastic Kasey responded with the answer. The moment I read this, I did an immediate face-palm – of course it couldn’t see a local file. So I had to put my super simple page on a web server somewhere.

Grammarly support response regarding textarea

Where to store my super simple html file?

I could, of course, spin up a Digital Ocean* droplet, but that would be somewhat ridiculous for one html page (it would be the equivalent of swatting a mosquito with a hammer). My K.I.S.S. (Keep It Super Simple) choices were either an Amazon S3 bucket or GitHub Pages. I ended up going with the creation of a GitHub page.

Where to store my super simple html file?

Here are the steps to the solution

You can find my tiny little Grammarly hack page at http://eli4d.github.io/tiny-grammarly-hack.html. You can use my page or create your own and toss it on a web server.

The steps are as follows:

  1. Get an account on Grammarly (you can get a free one or a paid one – up to you)
  2. Pick your least used browser (in my case it was Safari):
  3. Whenever you want to check a document (text only), just copy and paste it into the textarea box and click on the little green Grammarly refresh icon.
  4. After fixes to your document, make sure to copy everything from the textarea box back to your document.

Using the above steps you can use Grammarly without worrying that a document will be created and stored in your Grammarly account.

A reminder: As mentioned above – this method does not prevent Grammarly from storing your data (even this temporary data). In fact, according to Grammarly support you must assume that even for this sort of temporary check, Grammarly’s servers will hold you words for 14 days. That’s a bit crazy from a privacy/security point of view but this retention time is up to Grammarly’s management.

Here are the steps to the solution

Conclusion

Is Grammarly’s service awesome? Absolutely. It’s like having a nice electronic version of your high school grammar teacher (like Miss Johnson) minus the meanness.

Is Grammarly private? It’s as private as any web application that’s on the Internet (my assumption of course because I have not seen any architecture/security documents about their infrastructure). The steps I provide in this article related to preventing Grammarly from storing your document in your Grammarly account. So if someone breaks into your account on Grammarly, they won’t see anything. On the other hand, if someone breaks into Grammarly’s servers, then they could potentially get to any in-line checked user documents (even if the document is not saved in your user account) because of Grammarly’s stated 14 day retention period.

Personally, I find Grammarly’s service to be invaluable. I get to explore the quirkiness of my writing in conjunction with the quirkiness of the English language, and I get to learn to write better.

(And in case you were wondering – yes – I did use Grammarly on this article, but I choose to ignore some suggested fixes and keep my quirkiness)

How to Reset a Mac OS X Application (ScreenFlow in this case)

Overview

This article covers how to do an application reset on ScreenFlow 5 on Mac OS X – Yosemite. It’s more of a reminder to myself but I’m documenting this in case it might help someone else.

The usual disclaimer applies here – I’m not responsible for any potential destruction that may occur on your machine if you follow any of this information.

It started with constant crashes of ScreenFlow 5.0.6

I’ve been working on creating videos for the online version of my Stanford Continuing Studies JavaScript class. I’ve been using ScreenFlow for quite a while because it’s awesome (i.e. intuitive and easy to use), or better said – it was awesome up to now 😦 .

So what happened? The long and short of it was that whenever I tried to smooth volume levels by checking the “Smooth Volume Levels” checkbox, the application would crash. Every stinking time – ScreenFlow 5.0.6 crashed.

It started with constant crashes of ScreenFlow 5

ScreenFlow’s fantastic crashing sequence

First I would get the problem report screen and I would click “Reopen”

First I would get the problem report screen and I would click "Reopen"

Then when ScreenFlow started up again I would get a Crash Reporter screen

I’ve seen this crash reporter screen over and over and over again. I’ve included my email with the report but I’ve heard nothing from Telestream. At this point, I’ve reached the conclusion that it’s an automated report that might go to Telestream but then again it might not (as in /dev/null on Telestream’s side).

Then when ScreenFlow started up again I would get a Crash Reporter screen

How The Omni Group deals with crashes

As a comparison of an app/company that approaches this correctly, when OmniFocus crashes (whether on Mac OS X or iOS) it generates a crash report that it sends via email. The Omni Group’s ticketing system responds with a ticket number and an explanation that this crash has been recorded in their system. As a user I feel that someone (perhaps Ken Case in cat form) will see this ticket via such an acknowledgment.

Image credit: https://imgflip.com/i/11b9de

How The Omni Group deals with crashes

I pointlessly attempt to submit a ticket to Telestream asking for crash resolution and a a download of an earlier version of ScreenFlow

I attempted to submit a ticket to Telestream through my registered user account but this didn’t work. Then I vented my frustration through Twitter (yes – I know – not constructive…though the crash logs are constructive – aren’t they…come on Telestream?).

I also ran ScreenFlow 5.0.2 and the same crash occurs over and over again. So a useful data point – it’s not the latest version that is problematic.

I pointlessly attempt to submit a ticket to Telestream asking for crash resolution and a a download of an earlier version of ScreenFlow

It’s time to work the problem

Maybe it’s my environment. Maybe it’s a recent Yosemite security update. Maybe it’s a solar flare. There are too many things that might have changed since the time when ScreenFlow was stable. So while I can’t track all the environmental/system changes from that point, I can at least clean up any plists, cache, and crash files related to ScreenFlow (this is the duct tape approach).

Image credit: https://barefootmeds.files.wordpress.com/2015/09/duct-tape-quote-from-the-martian-by-andy-weir.jpg

It's time to work the problem

How do I find all the setting/cache files related to ScreenFlow

I have a copy of CleanMyMac 2 and I run it to see what I get under the “uninstaller” option. When I click on the “Application Reset” button, CleanMyMac helpfully puts filled out checkboxes next to all settings/cache/crash files that are related to ScreenFlow but are not part of the ScreenFlow program. There’s a big “Reset” button at the bottom of CleanMyMac and I use it to delete all of these files.

How do I find all the setting/cache files related to ScreenFlow

I re-run ScreenFlow after the above “application reset”

OMG – smoothing volume levels works without a ScreenFlow crash…for a couple of videos.

I re-run ScreenFlow after the above "application reset"

After editing a few videos – the crashes recur

So this is an electronic duct tape solution but it works for now.

Image credit: https://s-media-cache-ak0.pinimg.com/236x/3f/36/7e/3f367e93c1dff96b17444d027a3989c6.jpg

After editing a few videos - the crashes recur

A teeny tiny problem with CleanMyMac 2

One problem with CleanMyMac is after deleting these files – CleanMyMac doesn’t refresh all of the ScreenFlow associated files so to see this again (so I can re-delete them) – I need to quit CleanMyMac and do it again whenever ScreenFlow begins to crash.

It would be great to script this up so I can run it as a bash alias. Luckily, CleanMyMac provides a very helpful way to find out the location of the specific folders/files.

A teeny tiny problem with CleanMyMac 2

The best-est bash alias ever

Ok – so it’s not the best because ScreenFlow values are hardcoded and bash is the shell equivalent of the Punisher (at times). But it’s good enough for now.

The best-est bash alias ever

Conclusion

Looking for instructions on Mac OS X app resets on duckduckgo and google doesn’t yield many useful results. CleanMyMac 2 is pretty good about showing application files that relate to cache, crash, and plists. Using these as a guideline it is fairly easy to create a bash alias to bring out a somewhat big duct-taped club for ScreenFlow’s settings and to deal with a recurring crash.