The eli4d Gazette – Issue 030


Issue 030: 2017-05-24

Tech Pick

Last week an article sparked quite a bit of (justifiable) backlash against a SaaS company called Firebase. While Firebase did eventually respond to Home Automation’s protest about a %7,000 cost increase, this incident serves as an important reminder of the dangers of tying one’s business to any SaaS provider.

A few points from the article best summarize these dangers:

  1. They changed how they report their bandwidth usage, increasing our bill by 7,000% without any change to our actual usage. After years of using the service.
  2. No warning or message was sent out that this was being done — we only got notified once they were planning to shut down our app completely.
  3. Their profiling tools do not show the increased usage. You can only see it by looking at your massively increased bill.

So please, I beg of you…learn from our embarrassing and now dooming mistake:

  • Always build your architecture in a way that will avoid becoming trapped into a specific service. Build your application in a way that swapping one service for another is as simple as possible.
  • Always keep in mind that the services you use can change at any moment and put you in a situation where you don’t have options if you aren’t careful.
  • Whenever possible, rely on your own infrastructure. The SaaS model seems attractive to both Startups and Service Providers…. but in the end, its the Startup that gets bitten by it and the providers that make the real money.
  • Always heavily consider open source alternatives (something which didn’t exist for Firebase at the time but now alternatives like Horizon and Backendless exist, for example).

Media Pick

The Changelog podcast had an excellent episode covering the origin and usage of Kubernetes. I notated the interesting spots of this episode.


Thoughts? Feedback? Let me know: @eli4d on Twitter


JavaScript Specifics for the “Where do I go from here?” Question

This article is a continuation of the “Where do I go from here?” article with a focus on JavaScript (this is a frequent question I get from the students in my ‘Beginning Programming with JavaScript’ class ). If you haven’t read the previously mentioned article – you should do that first since it sets up the context for what I’m going to say here.

The usual disclaimer applies. This is going to be an evolving post because everything changes in software all of the time. Feel free to contact me with any questions, suggestions, and feedback.

Assuming that you are pursuing project focused learning here are some JavaScript related ideas/approaches.

The ‘no-frills’ project iteration

I suggest that your first iteration of the project use the JavaScript concepts that you just learned. This means using the JavaScript that you know right now. This no-frills iterations will help you understand the essence of your project.

You can continue with plain old JavaScript and an expansion of the ToDo project that we started in class. Or you can choose your own project. As you can tell based on my other article I’m a big proponent of choosing your own project – something that scratches your own (software) itch.

The ‘I must pursue the latest and greatest’ JavaScript ____ \ ____

Many feel that the pace of change in JavaScript (more specifically – the frameworks and approaches to JavaScript) is a never-ending race. It can feel like you’re Charlie Brown, the football is the current must-use/best/must-have JavaScript related technology, and Lucie is that ‘other’ developer who surfs on the bleeding edge with full understanding and a new Medium article about the best framework/approach/’awesomeness’ that you are not using:

This sort of view is known as “JavaScript Fatigue”, and it connects with the two views of JavaScript. The first is that “JavaScript is great!” and the second is that “JavaScript is a mess!” (the State of JavaScript Survey shows this quite nicely on its front page).

The long and short of it is that there is no magic bullet in terms of programming language, frameworks, and technologies. What’s popular today may be gone tomorrow. JavaScript has gotten large enough that you can pick something and specialize in it.

So pick whatever piques your interest. And if you don’t want to pick, then pick a project that interests you and start coding it in plain JavaScript.

There’s a great Theodore Roosevelt quote that applies to decision making:

“In any moment of decision, the best thing you can do is the right thing. The next best thing is the wrong thing. The worst thing you can do is nothing.”

What about bootcamps?

Programming bootcamps are a huge topic that is beyond the scope of this post. Some minimal suggestions:

  1. Figure out if you are the type of personality that would work well in a bootcamp (are you the type that jumps into a cold pool of water or do you slowy wade in?).

  2. They tend to be a large commitment in terms of both cost and time.

  3. Do your research very very carefully since there are lots of questionable ones out there.

  4. If you are seriously considering a bootcamp, you should try your hand with a free one called Free Code Camp. See how well you can commit to daily and weekly work.

I know of 2 students who went to bootcamps for a career change. They completed the bootcamps successfully and did the career change that they wanted. They also found out that the grass wasn’t greener on the other side. One thing about both of these individuals is that they were driven and would have succeeded even if they didn’t go through a bootcamp. In their case the bootcamps accelerated a trajectory that they were already on.

Additional resources

Conclusion

The JavaScript universe is huge. It’s a big mess of awesome. I think Steve Jobs said it best:

stay hungry, stay foolish


Thoughts? Feedback? Let me know: @eli4d


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:

What is THE canonical place for your ‘stuff’?

One of my favorite question to ask people is: “where do you store your photos – the ones that are on your phone right now?” One of my co-workers recently responded with “on the cloud…I think”. Now this was for photos of course, but it made me think of the rest of my “stuff.” For the intentional information that I send out to the world – where does that gets stored? If I tweet, then Twitter holds my posts. If I blog, then WordPress holds my posts. If I use Facebook then Facebook holds my posts (and my social graphs, and my personal information like my phone number).

I’ve been trying to answer the “what’s my canonical source of information?” question. If Twitter or Facebook were to go away tomorrow – what would happen to all of my posts…all of my ‘stuff’? While my posts may not be valuable to anyone else, they are certainly valuable to me, so I can’t rely on any publication platform that can change its rules of publication or disappear at any time (besides storing my information in a proprietary or questionably exportable way).

In a recent episode of the Post Status podcast the ‘canonical’ issue came up. The theme of the episode was about WordPress mobile apps, and this issue was a somewhat indirect result of Brian suggesting that he would want like to see an opinionated mobile app that allows his WordPress site to be the canonical source of all the information that he publishes. In other words, when he posts pictures on his WordPress site, then they automatically get posted to Instagram (based on some criteria of course), or when he posts a bite-sized post on his site then that shows up on Twitter, and so on.

While Joe suggested that the WordPress REST API would be the key to creating such an app, the key issue would still be keeping up with new social media apps (i.e. publication platforms) and whatever new developments occur around the process of publishing one’s information. Furthermore, there is also the issue of platforms like Snapchat where you can’t post your video from another service to Snapchat – you need to user their app to do so.

The pragmatic approach to this canonical issue is coming to it from the other side. Rather than find or create the one application that rules all current and future publishing platforms, it makes more sense to use services that push your information from the publishing platforms of your choice to your canonical source. While IFTTT and Zapier are proprietary in their own way, their goals are to provide connection points between various platforms (in a more narrow sense this also applies to Buffer).

So rather than going from WordPress outwards, I’ve used IFTTT to push my published information to my WordPress blog. As an example, for Twitter posts the “Post my tweets to my WordPress blog” recipe has been very useful as has the “Sending a new tweet with a certain hashtag creates a post on your WordPress blog” recipe.

Because WordPress is an open platform – I can easily export all of my content to a format that can be easily parsed by another system. This openness makes WordPress a great canonical source. Is it the perfect place? Probably not, but it’s the best solution that I have found so far.

If you have a better solution or approach to this issue – please let me know via Twitter (@eli4d).

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)

Finding the 4Runner Framework

I’ve been thinking about web application frameworks. These days we are both blessed (and perhaps cursed at times) with a richness of choice. This abundance reminds me of a scene from Moscow on the Hudson where the main character (Vladimir Ivanoff played by the amazing Robin Williams) goes to a regular American supermarket isle for coffee and has a mental breakdown due to the vast choices on the shelves. He’s a Russian defector that had only one coffee choice in Communist Russia, and now there’s just too many options.

So how does one avoid the analysis-by-paralysis break down that vast choice of frameworks present? One approach is to use a logical approach choosing something that is “boring, old, and popular”. This approach is perfectly reasonable for a work related project. But what about a personal project or experiment – how do you choose a framework to learn for that? It has to be something that gives you some spark of excitement – doesn’t it?

The main Ruby on Rails page speaks of “optimizing for programmer happiness.” I love the “optimizing” part since it makes sure to remind you that you’re speaking to a rationally focused audience. But what is “programmer happiness” and how can a framework provide this? Or better said, how can I recognize that a framework has this very personal component for me – this elusive feeling thing called ‘happiness’?

For me as an engineer, the term “happiness” is a bit too fuzzy and perhaps that is the case because I’m in “feeling” territory rather than “thinking.” How do I identify this feeling, this joy component that the RoR page speaks of?

There was a moment a few days ago where my car, my 4Runner, provided the answer (yes – I know – I suppose that it is a guy thing to find an answer in a car).

So it all starts with my history of cars. My first car was a Chevy Chevette that I bought using some very hard earned paperboy money. The Chevette was a somewhat terrible piece of crap that leaked rainwater into the driver side compartment. The final act of Chevette crappiness came in the form of the engine seizing at highway speeds. So if there were a “car owner happiness” scale – it would have been a -5 (on a scale from 0 to 5).

After the Chevette, there was a cavalcade of cars including a Chevy Malibu (my last American car) that bled to death when its transmission case cracked during a nasty East Coast winter storm. Then there was the Honda Civic (super-reliable but blah), the Acura Integra (super-reliable and slightly less blah on the joy/happiness scale), a used Isuzu Trooper (the SUV equivalent of the Chevette in terms of reliability and crappiness…I had weekly visits to the mechanic with this 4WD disaster), a very used Lexus ES 300 (engine blew up a year after purchase; it had an amazingly smooth ride but everything on that car cost 4 times as much as a regular Toyota) and finally the 4Runner.

I bought the 4Runner with one hundred and thirty thousand miles, and it has served me well for almost a decade. The one mistake that I made was not getting four-wheel-drive, but that’s on me, not the car.

For the past few days, I’ve had to switch cars with my wife due to a home renovation project. She has a zippy Prius that can run circles around the 4Runner in terms of maneuverability and fuel economy.

So there’s this one day when I come home and see the 4Runner on the driveway. There’s this momentary internal (nice) sigh with this “I really like this car” feeling. I look at it, and I see this “real life” version of a toy car that I used to play with as a child. And at this joyous point, I remind myself that this car is mine. It’s this odd momentary joy that is hard to put into words.

I think that when I look for a web framework for personal projects, I need to find the sigh…I really like this framework feeling. This is programmer happiness and joy – isn’t it? Now this is not to say that my 4Runner doesn’t have issues (like the lack of the 4-wheel-drive and all the bumps and scratches of a used car) but that joy…that joy is still there when I step back and take a look at this vehicle. I need to find a similar vehicle for code – a vehicle that gives me the same feeling as the 4Runner.

I need to find my 4Runner of frameworks.

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.