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.

Introducing The eli4d Gazette

Hello Friend,

Welcome to Issue 1 of the eli4d Gazette. This will be my way to keep in touch with former students and new friends that I have made through eli4d.com. My intent is to keep this short and sweet and pick some interesting things related to tech and non-tech. This will be delivered every two weeks, and it may change to a weekly delivery depending on how it goes.

I value your time and attention and I hope you find this to be worth your time. If you are interested, you can subscribe through the following url: https://tinyletter.com/eli4d


The eli4d Gazette

Issue 001: March 16, 2016

Tech Pick (JavaScript related)

Brendan Eich, creator of JavaScript, discusses his view of JavaScript’s direction at the Fluent Conference (click the ‘x’ to get past the “you need to login screen”). His message is the same as other years – “don’t bet against JavaScript”, but this year he added WebAssembly to the betting phrase. Apparently Ash from Evil Dead is his spirit animal (so the programming approach of jumping into JS and ‘hacking’ is built into the language’s DNA :-O ). Is Brendan right about JavaScript future? Who knows? He’s a smart guy but JavaScript is out of his and anyone else’s direct control. The battle lines are certainly being drawn in the mobile space between web apps and native apps (so far native has trounced web in terms of performance).

Edu Pick

I tried to provide a comprehensive approach to picking server-side software through my “Using the Boring / Old / Popular (BOP) criteria for server side software evaluation” article. It was geared towards beginners (developers and those that need to pick server side technologies), since experienced devs will have a “gut feel” and wont need such a numerical approach.

Podcast Episode Pick

Eric Molinsky created an amazing episode called “Why They Fight” where he connects superhero battles to D&D character alignments. I know it sounds ridiculously geek but once you listen to this episode, you will never again look at TV/movie/story heros/villains in the same way. If you’re a writer, the character alignment table may give you a new twist/angle on how you view/build characters in your writing.

The Laravel Podcast Episode 42 and the Meaning of …

I really enjoyed last week’s Laravel Podcast episode 42. Now since it is episode number 42 – I expected it to contain the answer to the ultimate question of development.

Now when you listen to the episode, you might think that the ultimate question that’s being answered is “which is the best object relational mapping approach/pattern – ActiveRecord pattern or the Data Mapper pattern?”

Or perhaps the ultimate question that’s being answered is “Should the ‘Single Responsibility Principle’ be violated when it comes to ORMs?”

Of course you need to listen to episode 42 to make your own decision. Perhaps it’s all ORM drama and dogma that is just a mystery wrapped in a Twinkie.

Personally, I think that the ultimate question is “how should you approach feature creation when it comes to software development?” And the answer is stated at the 46th minute of episode 42 (if only it was the 42nd minute…it would have been perfect…it’s time to repeat ‘serenity now’^100 and come to terms with this lack of symmetry). So what is the answer is:

“Don’t do it until you need it.”

Sounds simple – doesn’t it?

Time Machine Slowdown Issue and Resolution

Problem:

Right after coming back from the holidays I noticed that my machine was completely unusable when Time Machine (TM) would run (on Yosemite). It was so bad that I would need to pull the external USB hard disk without ejecting any partitions (while cringing inside) to be able to get control of my machine.

My system’s specs: mid 2014 MacBook Pro 15″ with a 2.5 GHz i7 CPU running Yosemite.

Solution:

This solution worked for me but the usual disclaimers apply.

Initially, I ran TM overnight thinking it had to catch up on some holiday weeks that it missed in terms of backups. This assumption was wrong. When I looked at the 1 TB partition that I had made available for TM it had only 25 GB left. It seemed like TM was thrashing my whole machine in attempting to clean up old backups.

The next thing I did was to shut TM off so that I could use my system while figuring how to delete old backups off the TM partition. I first tried to delete individual backups and I found this Stack Exchange article to be extremely useful: http://apple.stackexchange.com/questions/39287/how-can-i-manually-delete-old-backups-to-free-space-for-time-machine.

I tried both the command line approach of deleting specific TM backups and I also used the TM interface. The biggest problem was that I couldn’t tell which backups were extremely large (running ‘du’ on the directories was useless due to permission issues and a long response time). Additionally, when I used the TM interface, it would block me from using my system for anything besides Time Machine (command line was much better). I then decided to delete all the backups using command line and I got tons of error -36 messages. So this didn’t work well.

My solution was the nuclear option – i.e. nuke the TM partition and start over:

  1. Shut off TM via system preference
  2. Disconnect TM partition via Finder
  3. Use Disk Utility to erase partition:
    • name it with current year so it’s different name than original
    • it will complain giving an error while it removes the encrypted partition that TM created
    • re-erase partition after the initial error so actual erasure occurs
  4. In TM system preference:
    • remove the old disk (you can’t do this until the partition is gone)
    • create new TM disk by selecting the new TM partition

This is probably old hat to experienced users of the Mac but it was new to me.

If you found this useful – let me know via @eli4d on Twitter