Technology related blog with posts on iPhone, iPad, Flex, Java and various other things that cross my path.
Sunday, February 21, 2016
Surface Book First Impression
Friday, February 19, 2016
Downgrade Flash Player in Google Chrome
Time to Downgrade
In a post earlier this week, Flash Problems, I talked about an issue I ran into with a recent Flash Player update that caused problems in the application I work on. After tracking down the problematic code I was able to fix it to get around the problem so going forward things should be fine. However, since it is an enterprise application that is installed and maintained by the user I can’t just push a patch out to a web server and move on to the next fire. The bug will only affect users with the latest version of Flash Player, 20.0.0.306, in the past that may not be a big deal because most users wouldn’t install every update that was released, but since Flash has had so many security vulnerabilities it is more likely people will have the latest version.Google Chrome and Flash Player
In the case of Google Chrome though the user being up to date is almost a certainty, because not only does it ship with its own Flash Player, but there is no way via settings to disable Flash Player updates or switch to a different Flash Player version. Don’t get me wrong I think this is great, users should have the most up to date version with all the latest security vulnerabilities patched. If Flash Player didn’t have so many problems it probably wouldn’t have found itself so tightly constrained. Over the last couple years Chrome has slowly removed support for NPAPI plugins in favor of PPAPI, because the latter sandboxes the plugin and makes it more secure. It had been possible to install an NPAPI Flash Player from Adobe onto a system and then disable the built in Chrome Flash Player for purposes of testing or downgrading, you could even enable and disable the different versions of Flash Player from the plugins settings page. However, with the removal of NPAPI support this is no longer an option, which I found out yesterday. The Adobe instructions for installing an alternate version of Flash Player are outdated and still reference the old way. One thing that has changed over the last year is that Adobe now ships a PPAPI version of Flash Player for Chromium browsers, this was the key to solving my problem. I knew that the developers of Chrome may not want other developers to install an NPAPI Flash Player, but they would definitely allow the installation of an older version of a PPAPI Flash Player. They know we gotta debug issues in old versions of Flash Player somehow. Here are those instructionsDowngrade Steps
Download Installer
First you will need to download the installer for the old version of Flash Player you want to use.- All previous version of Flash Player can be found at Flash Player Old Versions Download site
- You can find the zip files for the versions in the Flash Player Archives section
- Download the version you want to your desktop
Uninstall Flash Player
In order to downgrade Flash Player you must first uninstall any newer versions.- Close any web browsers open on your system
- Extract the contents of the zip file.
- In the extracted folder, navigate to the folder that doesn’t have “debug” in the name it will contain all the installers and the uninstaller.
- Double-click the uninstaller that ends with win.exe. You will be prompte to uninstall the current version of Flash Player for all browsers.
- Click Start in the pop up
- When it is complete click Done to dismiss the pop up
Install Flash Player for Google Chrome
After Flash Player has been uninstalled, you will need to install the Pepper (PPAPI) Flash Player.- Navigate to the folder where you ran the uninstaller
- Run the Pepper installer which is the one that ends with WinPep.exe to install Flash Player for Google Chrome. Flash Player will be installed at the operating system level and will be separate from the version installed with Google Chrome.
- Accept the license agreement
- Click Install to start the installation
- After the installation is done select the Never Check for Updates options and click Done to close the installer
Disable the Chrome Flash Player
Now that you have installed the PPAPI Flash Player into Windows you have to disable the Flash Player that is included in Google Chrome. This is done via a command line argument when launching Google Chrome- Right click on the icon used to launch Google Chrome
- Select the Properties option to view the properties for the Shortcut
- Go to the Shortcut tab in the properties view
- In the Target field add
–disable-bundled-ppapi-flashafter the closing double quote that wraps the path to chrome.exe. The new value for the target field should be something like this“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” -disable-bundled-ppapi-flash - Click OK to save the changes
Verify Installed version
Repeat the initial instructions to verify that the version of Flash Player is now correct in your browser- Open up Google Chrome using the shortcut
- Go to chrome://plugins
- Expand the Details link at the top right corner to see the details of all the plugins
- Look at the Flash Player version it should now have a location that points to the Windows Flash Player rather than a Flash Player inside the Google Chrome installation directory.
Monday, February 15, 2016
Flash Problems
Works for Me
Last week I received an email from a QA resource who was getting an error in the Flash Player debugger when performing a very basic action in our Flash application. I quickly looked at the stack trace he provided and tried to reproduce the issue without much luck. I didn’t think anything of it since sometimes QA environments have been known to be suspect.
Fast forward a week and I was pulled into an urgent customer issue, where they were seeing the application become unresponsive when performing some very basic tasks. I logged into the system, where the error was occurring, using IE 11 which has a debugger version of Flash Player and everything worked fine. I then tried it out with Chrome and was easily able to reproduce the issue, same thing with Firefox. I then tried the same thing on a local developer build and got the same results, at first glance there seemed to be a problem with the debugger version of Flash Player. It seemed odd, but they are slightly different versions of Flash Player and it wouldn’t be unheard of.
I spent the next several hours trying pinpoint the issue using Flash Builder and Google Chrome. I was able to comment out some code to make the issue go away, but it wasn’t immediately obvious where things were going wrong. I then remembered that my debugger version of Flash Player was several versions older than the auto updated version in Chrome, version 17 vs version 20. I upgraded the Flash version in IE up to the last release from February 9th, not coincidentally this was the day before the customer saw the issue. To my surprise I was able to reproduce the error and since I was using the debugger version of Flash was shown a stack trace which led me directly to the problem.
The Error
ArgumentError: Error #1508: The value specified for argument RectangleObject is invalid.
at flash.display::DisplayObject/set scrollRect()
at spark.components.supportClasses::GroupBase/set scrollRect()
at spark.components::Group/set scrollRect()
at spark.layouts.supportClasses::LayoutBase/updateScrollRect()
at spark.layouts.supportClasses::LayoutBase/scrollPositionChanged()
at spark.layouts.supportClasses::LayoutBase/set horizontalScrollPosition()
at spark.layouts.supportClasses::LayoutBase/set horizontalScrollPosition()
at spark.components.supportClasses::GroupBase/set horizontalScrollPosition()
at spark.components.supportClasses::GroupBase/set horizontalScrollPosition()
The error was occurring when we were setting the horizontalScrollPosition on a scroller to a very large number (int.MAX_VALUE to be exact). Now I know using this value is not a good idea and should be a red flag, but Flash Player had been okay with it up until the latest version. I installed the version from late January and didn’t have a problem, so it was tied directly to version 20.0.0.306. I looked at the release notes from Adobe, but nothing jumped out at me. It looks like for some reason they added some new validation for the Rectangle object that is passed into DisplayObject.scrollRect() to now throw an error. Of course since Flash Player is closed software I will never know what the limits are for the horizontal scroll position.
The Fix
Since I knew what was going on I was quickly able to commit a fix, which now sets the scroll position to the width of the viewport rather than the maximum integer value. However, the code fix wasn’t going to help the version of the software that had already been released. Since Flash has had so many security problems most browsers now will automatically update, which is why this happened in the first place. The workaround is to uninstall the current version and downgrade to the previous version and shut off automatic updates. In the case of Chrome it is not possible to shut off automatic updates for the Flash Player included with the browser, instead you have to install a separate install of Flash Player, disable the default and enable the new install.
Thursday, February 4, 2016
Functional Decomposition for Kids
He then turned to me and said, "If I press undo lots of times can I get back to the code without the function?"
I replied, "Yes you can do that, but why would you want to do that?"
He responded, "Because it looks like I did more work this way."
Saturday, January 16, 2016
Apple Product Naming Over the Last 10 Years
iPhone
The original iPhone was followed by the iPhone 3G, because of support for 3G cellular networks, which interestingly also has caused some people to refer to the original iPhone as the iPhone 2G. After that was the iPhone 3GS, followed by the fourth release, the iPhone 4. It was the third form factor, but fourth phone model. Since then the pattern of incrementing the number for each new form factor and adding an S for the intermediate years. In 2013, the newest phone was named iPhone 5S, but another new C designation was added for the new colorful iPhone 5C, which had all of the internals of the iPhone 5, but had a polycarbonate case. It isn't clear why the new phone was released, perhaps to differentiate it more from the S model or maybe to try and add more demand for the year old model by making it seem "new". In 2014, a new form factor was introduced with the expected increment in the number, however a new larger screen became available adding the new + identifier, for the iPhone 6+. Most recently in 2015 the introduction of the iPhone 6S and iPhone 6S+ continued the tradition of using the S identifier for the second year of the same form factor. However, unlike last time a new C model was not introduced along side the S model and instead the iPhone 6 remained available.| Generation | Marketing Name | Alt. Names |
|---|---|---|
| 1 | iPhone | iPhone 2G |
| 2 | iPhone 3G | |
| 3 | iPhone 3G S | |
| 4 | iPhone 4 | |
| 5 | iPhone 4 S | |
| 6 | iPhone 5 | |
| 7 | iPhone 5 S | |
| 8 | iPhone 6 | |
| 9 | iPhone 6 S |
iPad
The original iPad was followed by the iPad 2 in March 2011. So far so good, right? The following year a new iPad was announced with the same form factor, but a new retina display. Apple referred to this model as "new iPad", however most people refer to it as the iPad 3 or 3rd generation using the old iPod naming convention. A short seven months later Apple announced the next iteration of the iPad, which was marketed as "iPad with Retina Display". The form factor remained the same as its predecessor, this version was also referred to as iPad 4 or 4th generation. At the same event Apple also announced a new smaller iPad called the iPad Mini, similar to the branding used on the first smaller iPod Mini. In 2013, a new thinner form factor with a smaller bezel was introduced with a new name, the iPad Air. The Air name had been used for the ultra portable line of MacBooks first introduced in 2008, which were much smaller than the existing MacBook and MacBook Pro models. The overall size of the device was noticeably smaller compared to the previous models, which may be the reason for the new naming convention. At the same event in 2013 the new "iPad Mini with Retina Display" was announced as the successor to the iPad Mini. The following year the iPad Air 2 and iPad Mini 3 were announced, while the form factors were the same as the previous generation the internals were upgraded. At this time the previous generation iPad Mini with Retina Display"" was given a new designation of iPad Mini 2. In September 2014, Apple announced the highly anticipated iPad Pro with a new 12" screen. At this point Apple seems to have settled on using Mini, Air and Pro as the names for the different screen sizes, they then just stick a number on the end based on which generation of the current name.| Generation | Marketing Name | Alt. Names |
|---|---|---|
| 1 | iPad | |
| 2 | iPad 2 | |
| 3 | new iPad | iPad 3, 3rd Generation |
| 4 | iPad with Retina Display | iPad 4, 4th Generation |
| 5 | iPad Air | |
| 6 | iPad Air 2 |
MacBook
I could go over the many various names for Apple laptops over the years, PowerBooks, iBooks and MacBooks, but this will focus on the MacBook. The first MacBook was the MacBook Pro announced in January of 2006. The polycarbonate MacBook was announced the following May. These two were updated once or twice a year until January 2008 when the new thinner MacBook Air was announced.Going forward the three different lines have been maintained with the MacBook Air being the smallest model, the MacBook Pro being larget more performing model and the MacBook being the same size as the MacBook Pro, but cheaper and less powerful. In 2012, things changed a little with the introduction of the Retina Display on the MacBook Pro, as these were rolled out there was a choice between the MacBook Pro and the MacBook Pro with Retina Display. At some point the MacBook disappeared and the MacBook Pro 13" was added. Most recently in 2015, the new MacBook with Retina Display, was released, which is actually smaller than the MacBook Air. Unlike iPhones and iPads the various MacBooks of the same line are differentiated using the date they were initially released.
The Apple Devices
The other devices I will mention are the Apple TV and Apple Watch. Both of these start with Apple, well technically there name starts with the Apple logo. The Apple TV was originally introduced as iTV, but was changed before it shipped. It has had a few different iterations, but generally it is just referred to using an understood "generation" nomenclature. The Apple Watch is still on the first generation, so whether it gets the numbered system like the iPhone and iPad or if it just gets the generally accepted "generation" nomenclature hasn't been determined yet.In Conclusion
It is often confusing and not logical the way these various products have been named, but I think it is bound to happen in an industry where it is difficult to foresee how a product category may change. It is also hard to judge some of these names without knowing what products are to come. I think some of the naming has to do with the target consumer and market. The phones are much more mainstream and they need a clear naming convention so the average consumer can figure out the difference between the various models.As for the use of Apple in the front of Apple Watch, I think this is the new direction and if they could go back in time I think the iPhone would have been named Apple Phone. The i naming thing seems so dated and has also opened up a pandora's box for third party companies naming their stuff with the i prefix. Using the Apple prefix also prevents any trademark issues like they experienced with the iPhone.
Finally, I am really interested to see when they decide to drop the numbering scheme from the iPhone and iPad names. It will sound completely ridiculous when they release the iPhone 11 or iPad Mini 14. I wonder if by then the products will be so mature that it will be released in a similar to manner as the MacBook, with random releases every year having only minor performance improvements with major form factor changes every 4-5 years.
UPDATE: After more consideration I wonder if the numbering scheme is also a result of how the specs of the mobile devices are somewhat obfuscated from consumers. If you try to buy a MacBook Pro they don't break them down into different numbers even when there are a couple generations available, instead we can rely on the old processor speed, storage, memory and display quality properties to pick the device that is right for you. Perhaps it is just another side effect of the simplification of computing devices, if the operating system is going to be easier to use than it only makes sense that buying one should be less confusing too.
Friday, January 8, 2016
Bad Default Program for CMD and Bat Files
Monday, November 16, 2015
For the Love of Pod-casts
An ATP Mention
The last six months of so have brought a major change to my life, it all started when my good friend Alex (@alexredsox) posted a tweet about a mention he got on the Accidental Tech Podcast. At the time I saw it, quickly listened to his moment in the sun and then continued moving down my Twitter feed. It would take me about six months to fully appreciate why he was so excited about being referenced on a podcast.
My Podcast
I had been aware of podcasts for quite a while, including the production of my own podcast called "Keeg's World", which was a companion to my LiveJournal back at the turn of the century. I attempted to start the one guy talking to himself show, but it didn't really pan out and only lasted a few episodes. I never really checked out any other podcasts, probably because it required so much leg work to the iPod up to date. I was also very excited to be listening to music during my commute into Boston on my fancy new 3rd generation iPod
My other love besides music has been the Howard Stern show. I have been a listener since the late 1990's and continue to listen today on Sirius/XM. Say what you will about him and his sometimes controversial show segments, but I find him to be an amazing entertainer. His ability to know exactly what his audience will find entertaining is amazing, he somehow puts himself in the position of the listeners and can immediately tell if something is entertaining or not. He is the greatest interviewer I have ever heard, because he goes beyond the standard questions and digs deeper with people. You can have little or no interest in somebody, and after a short 90 minutes you can't wait to buy their album or see their new movie. My favorite part of the show is usually the beginning of the show, because it is just Howard talking about his everyday life. Some mornings it is a lengthy discussion about his evening at home and other times he might talk about a dinner he had with his parents. The first hour of the show never fails to keep me entertained, because it is just a couple of people talking about nothing in particular.
A New Interest
Fast forward to the Spring of 2015 and something changed, I can't say for sure what triggered the interest, but I started listening to a couple podcasts. Right around the time the Apple Watch was released I checked out either the iMore show or The Talk Show. I was hooked right away, because I found people that talked about something I was passionate about, Apple. I quickly consumed these podcasts each week and then the cross pollination began. First, Rene Ritchie mentioned another show he was on called, Debug. I checked it out and added it to my growing list.
It wasn't long before I found the Accidental Tech Podcast(ATP) again. I loved the banter between the guys and how they discussed all facets of technology, it was nice to also hear them go back and forth on various topics. I was especially intrigued by John Siracusa, his quick wit, knowlege and critical perspective on all the things really spoke to me. I had to know more so I delved into the archives of the old 5x5 podcast network and found the 100 episode run of Hypercritical Naturally I started at episode 1 and started to learn more about Mr. Siracusa. Luckily around that time he started Reconcilable Differences with Merlin Mann, which really dove into the mind of Mr. Hypercritical.
I cruised a long with a nice set of shows for a few months and was able to keep up with the new episodes, thanks to Overcast and its Smart Speed feature. I learned that September is a ridiculous month as all the podcasts first predict what Apple will announce, discuss what Apple announced and finally try out the products Apple released.
Hello Internet
Right around this time on The Talk Show Episode 132 with Marco Arment they kept talking about a show called Hello Internet, I hadn't heard of it before, but when John Gruber and Marco Arment recommend something (both Howard Stern fans I believe) you should go listen to it. They couldn't have been more right!!
The fun thing about podcasts is that you can pick and choose the order in which you listen to the shows. In the case of Hello Internet I decided to listen to the first several episodes to learn the full story of CGP Grey and Brady Haran and their little podcasts of two guys talking. I was immediately hooked. The balance between their personalities is perfect, very much like the perfect balance found on ATP between Marco, Casey and John. The added bonus for me was that it was not a technology podcast, so my wife enjoyed listening too. Of course being a completionist and once again being intrigued by one of the hosts, in this case CGP Grey, I sought out more information and found the Cortex. I was fortunate enough to find this early enough that I was able to complete the entire backlog in a few weeks time.
Conclusion
So why did I make this post about podcasts I like? A couple weeks ago I came to a realization that finding podcasts was bittersweet for me. It has been great finding people in the world that care about the same things as me like, Apple, technology, work styles, etc.. However, it also made me realize I don't have people in my everyday life with the same interests. OK that is not entirely true since there is one guy at work with the same views, but he doesn't share the same love of podcasting. It might be time to start my own podcasting network so I can find others with similar interests.
Other Subscribed Podcasts
Here are some other podcasts I didn't mention above, but subscribe to.
