Thursday, April 30, 2015

Plural Acronyms - Grave Accent

Ever put a CD into your DVD player? Email QA for a TPS report on UAT for the TTP project? Submit PII over a secure WIFI network using PKE over WEP? These are called acronyms; our entire language is riddled with them, and a new one seems to pop up every day.

Generally they're both useful and easy to apply, except in one particular situation, which is the subject of this blog post: the plural form.

Let's assume that the acronym you're using is a noun (recall: that's a person, place, or thing :), and you have greater than one of said noun. What is the correct grammatical representation?

For example, let's say that you bought three albums in the form of compact discs: one Forever Changes CD by Arthur Lee and Love, one Master of Reality CD by Black Sabbath, and one Rush CD by Rush (which happen to be three of my favorites--how I miss the days of albums!). You are now the proud owner of three compact discs, or three CD-ees?.

How do we pluralize this little linguistical phenomena?

1. Use an apostrophe

The old-school way of pluralizing an acronym is to use an apostrophe. When I was in middle school, my 6th grade teacher, Mrs. Weis, told me that the following was correct:

--> I own over 500 CD's

This seems a bit, well, weird. An apostrophe-s is normally used as a possessive or a contraction. As a possessive you might say, "That is Jim's hat;" as a contraction, "He's got great taste in hats."

2. Append an "s"

The new-school answer is to append a solitary "s" to the acronym, like so:

--> I own over 500 CDs

This is equally weird, for a different reason: Those capital letters mixed with that lower-case "s" looks like a camel-case gone wrong. Phonetically speaking, "CD" is normal pronounced "cee-dee," and there's a temptation here to say "cee-dee-ess," when we really want "cee-dees."

Additionally, if an acronym ends a vowel, it's unclear whether it's a pluralized acronym, or a typo. For example, imagine the Housing Authority abbreviated as "HA." We thus have:

--> Nationwide HAs reporting problems.

Is this the word "Has" with a typo? The intended meaning is that Housing Authorities, nationwide, are reporting problems, but this could also be read that something nationwide "Has" reporting problems.

In light of these observations, I hereby propose use of the grave accent to pluralize acronyms:

--> I own over 500 CD`s

The grave accent--despite being conveniently located on the upper-left of a standard English keyboard, has little (if any) use in the English language. Elsewhere, such as in Portuguese, it enjoys a more prominent role; however, here in English, it is in a sad state of disuse. If interested, check the wiki page for "grave accent."

Anyway, IMNSHO, the grave accent is a perfect fit for pluralizing abbreviations. It neatly sidesteps both of the above problems, while clearly conveying the intended meaning: pluralization!

OMG. WTH? LOL!

Keith Miklas ~kjm~

Tuesday, September 9, 2014

Apple Special Event Livestream Fail September 9th 2014

AN OPEN LETTER TO APPLE CEO TIM COOK REGARDING APPLE'S SEPTEMBER 9TH SPECIAL EVENT LIVESTREAM

Dear Tim,

On behalf of every sweat-drenched IT person bewildered by their circumstances in front of a sellout crowd today, I would like to sincerely thank you for giving us our most stressful day of the year.

Please allow me to provide a little context. Today, I wore the hat of the IT guy in charge of setting up your livestream for our workgroup. I had everyone primed and ready for a great afternoon. After a month of hype, expectations were high, and I was not about to dump on this. The meeting invite was sent out a week ahead of time. I had the conference room reserved, my laptop charged up, and even brought my wireless hub in case the corporate network was too bogged down. I logged in early, just to be sure that I got a connection. I shepherded my whole workgroup up to the 19th floor, and had them all skip lunch and bring it to the event.

"Looking good," thought I, until the livestream started.

Circa-1978 colorbars on the screen, with an obscure message about a Truck. Looped pans of the audience. Freezing, latency, and a melting-screen pattern to rival any UIViewController transition. Error messages that I could no longer connect to the server. Most disturbing: a mysterious overdub of a Chinese translation in the audio.

As I frantically swapped cables, refreshed Safari, and reset my wifi connection in an effort to make it work, I couldn't help but note of the comments of my belovedly patient and understanding coworkers. You may find some of these amusing:

- "Well, this is a bust."
- "I'm never coming to another one of your meetings."
- "Hey! I can actually understand some of that Chinese!"
- "Learn how to run a meeting."
- "Can we spoof the user agent string and run it in Chrome?"
- "This was pretty much the worst meeting I've ever attended"

Perhaps the most painful was from my Boss:

"Did you accidently click on the Chinese version of the livestream, and leave it running in another tab?"

No, Boss, I did not. Unconvinced, he whipped out his iPad, logged in, and only after there encountering the same Chinese overdub did he believe me. (At least I could breathe a sigh of relief--so flustered was I at the time that for a moment there I wondered if I _had_ somehow found the Chinese version...)

Anyway, twenty minutes later, after ripping apart and repeatedly reconnecting every cabled device in the room, collaborating with the other techs that inevitably want to lend a hand, I finally capitulated. I suggested that we adjourn for the day--a suggestion warmly seconded by everyone in attendance.

As children, we develop coping mechanisms for things beyond our control. Sometimes, as an adult, we need to reach back and lean on them to get through a particularly rough day. This afternoon I left the building, went to a diner, and got a chocolate milkshake. It made me feel a lot better.

Upon return to my desk, wits somewhat collected, I started to wonder. "What the heck just happened?" I thought to myself. "That was the worst meeting of my life!" A quick Google search revealed that I was not alone. I'm sure you've seen the tweets, news, blog posts, and other stories, so I won't repeat them here, but suffice to say that a lot of IT people took a beating today.

Sad to say, in the heat of the livestream issues, I have only a vague idea of what was released today. I'm trying to muster the courage to pull up the saved video, but I'm not sure if I want to re-live that meeting again. I might stick with reading an news article.

In closing, I have one request: please make the livestream work next time.

With all the love in the world,
Keith Miklas

p.s. I can't help but feel for the guy who had to tell you about this. Here's how I imagine the conversation went:

TIM: "Hey Person-In-Charge-Of-The-Livestream!"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: Hi Tim.
TIM: "What an exciting day!"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: Yes. Exciting.
TIM: "How did the livestream come out! I can't wait to see it!"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: Uh... well... we've got good news and bad news."
TIM: "I'll take the bad news first. Business before pleasure! Ha ha :)."
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: Ok, so, where to begin..."
TIM: "At the beginning!"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: So, there were a few glitches, especially with the audio"
TIM: "Feedback on the mic? That happens sometimes."
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "No."
TIM: "Was it crackling again? Sometimes that happens if it brushes against my clothes."
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "No."
TIM: "Did I breathe into the mic? I hate when people do that on conference calls. I always tell them to either go on mute, or stop breathing! Ha ha :)"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "No."
TIM: "So what was it?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: Um... so... apparently there was a Chinese translation included in the livestream."
TIM: "Well, of course, for our Chinese audience."
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: Well, yes, that would be a good thing.
TIM: "We're an international corporation, and in over 100 countries! We have to accommodate non-English speakers."
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: True; however, in this case, it was playing at the same time that you were talking."
TIM: "What?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "While you were talking, there was a Chinese person talking."
TIM: "At the same time?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "Yes."
TIM: "While I was talking?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "Yes."
TIM: "You mean like when you're watching a video, and another video ad starts playing, and it's annoying as heck?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "Yes."
TIM: "What was the scope? Just in China, I hope!"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "No."
TIM: "Everywhere?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "Yes."
TIM: "Worldwide?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "Worldwide."
TIM: "Would you mind stepping into my office for a moment?"
PERSON-IN-CHARGE-OF-THE-LIVESTREAM: "Sure, I still have to tell you about the melting screen..."
TIM: "Melting screen!?"
###

Wednesday, April 2, 2014

okCupid: Stop Using JavaScript! - Brendan Eich - FireFox Boycott

Recently there's been a "firestorm" regarding the promotion of Brendan Eich to CEO of Mozilla. Based on a donation to oppose Prop 8, okCupid boycotted the use of FireFox.

Well, okCupid, with all due respect, to be consistent, you should probably stop using JavaScript as well, because Mr. Eich created JavaScript.

Using developer tools to inspect the okCupid site, you'll see the "all.js" file being loaded--snippet below. See all those "var" and "function" and "try" and other statements? That's all JavaScript--created by Mr. Eich. None of this would make sense without his pioneering work.
https://connect.facebook.net/en_US/all.js

If okCupid is so adamant about opposing Mr. Eich regarding his views, why don't they be consistent, and pull this file--and all JavaScript--from their site?

In my professional opinion, okCupid would go down like a lead balloon if this was done.

Which leaves okCupid in a precarious position: boycotting the man who created the code that drives their site! Looks like, although they disagree with his personal views, they'll happily take his work, and use it for their benefit.

If they had any guts at all, they'd also pull the JavaScript from their site.

okCupid obviously does not understand the incredible contribution that this man has made to the Internet. Mr. Eich created JavaScript, the code that practically all Web sites use today. It is the language that Chrome, Safari, Internet Explorer, FireFox, Opera, and all mobile browsers use to display web sites, _including okCupid_. In addition, FireFox is shining star of open source software. They compete with Apple, Microsoft, and Google, on a shoestring budget, fueled mostly by the generosity of the open-source community.

In sum, before you boycott FireFox and Mr. Eich, you should be fully prepared to cease and desist the use of JavaScript on your site.

Sincerely,
Keith Miklas

p.s. Also, most disturbing is that, as we can see from the code below, you are using FaceBook's code. Has FaceBook also approved this move?

~~~ SAMPLE JAVASCRIPT FROM OKCUPID ~~~~~~~~~~~~~ /*1396448873,172653591,JIT Construction: v1188627,en_US*/ /** * Copyright Facebook Inc. * * Licensed under the Apache License, Version 2.0 * http://www.apache.org/licenses/LICENSE-2.0 */ try {window.FB || (function(window) { var self = window, document = window.document; var setTimeout = window.setTimeout, setInterval = window.setInterval;var __DEV__ = 0; function emptyFunction() {}; var __w, __t; __t=function(a){return a[0];};__w=function(a){return a;}; var require,__d;(function(a){var b={},c={},d=['global','require','requireDynamic','requireLazy','module','exports'];require=function(e,f){if(c.hasOwnProperty(e))return c[e];if(!b.hasOwnProperty(e)){if(f)return null;throw new Error('Module '+e+' has not been defined');}var g=b[e],h=g.deps,i=h.length,j,k=[];for(var l=0;l

Monday, December 9, 2013

Windows 8 Upgrade - Blown Speaker Warning - Beware 100% Volume Setting!!!

Beware, my friends, of the volume setting following a Windows 8 upgrade. It will be cranked up to 100%. Should you have speakers plugged in through the headphone jack, they will receive a nasty blast of juice, and you may end up like me: with some beautiful, expensive, and BLOWN speakers.

Here's the story. I had a nice pair of Martin Logan bookshelf speakers--which retail for about USD$250 each--plugged into through the headphone jack via a Y-cable split out to RCA connectors into an old garage-sale receiver. I was having some problems with my W8 laptop, and so did a system restore.

Following the upgrade, I pulled up Pandora for some tunes, as I'd done a thousand times in the past. Little did I know that the volume had been cranked up to 100%! I innocently pressed the "Play" button, and was greeted with a massive blast of sound that rattled my eardrums. Surprised and shocked, I fumbled for a few seconds until I realized what had happened and found the pause button. After adjusting volume levels, and playing again, I sadly realized that this blast had shredded the tweeters in my beloved speakers.

Needless to say, this saddens me greatly, as I sit here and listen to my speakers hiss and crackle out Enya's lovely voice.

The volume was also set to 100% recent upgrade to v8.1, which prompted my post. I was ready this time, and had my receiver turned off--not that it mattered because my speakers were already blown--but I was annoyed to see that it had happened again, and thought that I might save another my pain.

I will spare you the rant about about usability testing of Windows releases.

Given the gravity of the situation, I deem the CAPS LOCK necessary, as it may spare you the cost of some high-end speakers:

DISCONNECT YOUR SPEAKERS BEFORE UPGRADING OR RESTORING A WINDOWS 8 MACHINE. CHECK YOUR VOLUME LEVELS BEFORE RECONNECTING.

Everlasting Love,
Keith :^)

Tuesday, April 23, 2013

JavaScript: A Beautiful Language

JavaScript! Perhaps the most misunderstood computer language, so few truly understand its enormous expressive power. Unlike Java, C, C#, and many others, it is, at heart, a functional language. Sadly, this is an endless source of frustration for so many programmers. They pound away with an imperative style, in a language based on lambda calculus, forever hammering square pegs into round holes. Only when JavaScript's functional nature is grasped can its beauty truly be appreciated, and the road to mastery begin.

Keith Miklas
4/23/2013
~kjm~

All Rights Reserved.

Sunday, April 14, 2013

Apps are Evil! Ten reasons to Beware of Apps.

Although there are some great apps out there, many things can be accomplished through a Web page. Why install a native app and waste resources on your device when your mobile browser is more than adequate? Here's a list of reasons why you should hesitate before hitting that "install" button.

1. Apps start themselves. Ever look in your device's task manager and see apps running that you haven't started and don't need running? With some, this even occurs on a reboot, and there's no easy way to stop it. The result is wasted resources on your device, and some unwanted side effects, as you'll see in the next points.

2. Apps don't respect your privacy. They report your usage habits back to The Mothership(s).

3. Running apps burn up your battery. Wondering why your battery life stinks? Perhaps you've got a dozen or more apps chugging through your charge.

4. Apps eat up memory. Running apps will eat up your valuable memory space.

5. Apps have bugs. Developers, especially those under heavy pressure to get something published, will sometimes push a pretty buggy app out there, and this can cause problems on your device. For example, ever leave your phone on for a few days, only to find that it's almost totally unresponsive? Look in your task manager and find that your memory is almost completely used up? These are memory leaks from buggy apps.

6. Apps slow down your device. If we add up points 1-5, we have a rather irritating situation: unwanted, unneeded, and buggy apps, starting themselves, reporting data back to their respective Motherships, burning up your battery, and wasting your memory.

Often this is all happening without your knowledge, desire, and consent. In addition to a host of privacy issues, this can slow your phone to a snail's pace. Without rooting your phone--which may void your warranty--you're pretty much stuck with these apps and their lousy behavior. Adding insult to injury, as you'll see in the following points, there's not much that you can do to put a stop to this--despite the fact that you're paying big bucks for your device and service.

7. Some apps don't remove well. If you were an app writer, would you be overly concerned about burning time and money to make sure that the uninstall passes the "white glove" test? You're losing the user as a customer anyway, right? Sometimes the "remove app" software is not that well-written, and in addition, Web beacons can be intentionally left behind to track your usage habits, even when an app is removed.

8. Some apps can't be removed. There's a disturbing new trend for apps: no uninstall option. Similar to the bloatware that ships with some phones, once you install it, it's yours, 'till death do you part.

9. Some apps can't be stopped. In some operating systems there was an an option to kill an app, or at least force it to stop. In later devices, this option is not available, and there's no way to stop some apps from running.

With points 7-9 we've moved from insulting to unconscionable.

Finally, perhaps the most compelling point...

10. Apps cost. Why pay for an app when you can probably find the same functionality for free on the Web?

My advice? Install all the best browsers on your phone, including Opera, FireFox, and Dolphin. Keep them updated, and use them to accomplish as much as possible through Web apps. In addition to neatly sidestepping the issues listed above, you also retain far more control over your device. You can close the browser window of the offending page, set browser privacy and reporting settings, and even kill the whole browser if pages aren't cooperating.

Install an app only if it's really good, is from a trusted entity, or offers an exceptional service. Do as much as possible within your favorite browser, and install apps as a last resort. If a native app is needed, do your homework, research those that meet your needs, read the reviews, and only install those that are highly rated.

Yours truly,
Keith Miklas ~kjm~
keith@sexydevelopment.com

Copyright © 2013. All rights reserved.

Tuesday, October 16, 2012

Web Apps vs. Native Apps

What will happen in the future? How will Native Apps fare against Web Apps? As a consumer, which should you use? As an investor, which should you build? As a developer, which languages should you learn?

In my professional opinion, Web Apps will become the standard, while Native Apps will become specialized. As a professional associate succinctly summed up, "Native apps scare me!"

(Before we go on to the reasons why, let me first take a moment to define a "Web App" as a mobile Web application that runs directly in a browser when one visits a site. Think of opening your favorite mobile Web browser, going to angrybirds.com, and just playing the game there. A "Native App" has the same functionality, but you have to go into your App Store, Google Play Store, etc., and install the Angry Birds app to play. You then get a cute little icon that you can tap to open the App in your device.)

Without further ado, here are the reasons why Web Apps will win over Native Apps:

1. DEVELOPMENT COST. To create a native app, developers need to write it in Objective C for iOS users (iPhone, iPad, iPod), Java for Android users (Android, Blackberry, Kindle, Palm...), and C# ("C Sharp") for Windows Phone users. This generally means three different development teams, and three times the cost.

EDIT: Noteworthy here are services that wrap HTML5/JavaScript Web Apps for the different platforms (such as PhoneGap), but at the time of this post, they still have some work to do.

2. JAVASCRIPT. Long considered a second-class citizen to C, C++, Java, and the other "real" programming languages, JavaScript has won out as the language of the Web. It beat out Java, Flash, and Silverlight as the front-end langage, and is here to stay. Any language that tries to take the belt will NOT be accepted by the competition (Google to find out what Microsoft said about Google Dart, and I will leave it as an exercise for the reader to speculate as to what Google will soon say about Microsoft Typescript).

In addition to powering traditional Web sites and Web Apps, JavaScript's tentacles have now reached into the server-side! From a client-server perspective, with the introduction of Nodejs, one can easily create a Web server with JavaScript. In addition, all the social media sites (Facebook, YouTube, LinkedIn, Pinterest, etc.) use JavaScript to power their pages. There's even a couple of JavaScript-based databases in the works out there, that store base tables as JSON objects. In sum, JavaScript claims an unprecedented enterprise-wide solution: Web pages, Web Apps, client-side scripts, server-side scripts, and social media!

From an investment perspective, JavaScript has a large community of programmers. It's easier and cheaper to find a JavaScript coder than an Objective C, Java, or C# person.

I've even considered changing my title from "Front-End Web Developer" or "Web Developer" to "JavaScript Developer."

3. APPS BLOAT YOUR PHONE AND CAN'T BE REMOVED. Think of the bloatware that AT&T ships with their phones. More than dozen programs that do little more than eat up memory and slow down my phone. Only a true n00b would pay $10/month for AT&T Navigator when Google Navigator is available for free. Adding insult to injury, you _can't_ uninstall some of these apps without rooting your device! I installed the Facebook app (for the last time in my life). It does not work, and freezes when I try to use it for Facebook, but is exceptionally good at starting itself and reporting usage data back on me. It cannot be removed, and will not die; I'm stuck with it--and all of its inherent privacy concerns--for good.

4. APPS START THEMSELVES AND DO STUFF IN THE BACKGROUND. Ever wonder why you have five bars and your phone is hanging while you try and load a Web page? There's a bunch of apps doing stuff that eats up your memory, slows down your phone, and clogs up your bandwidth. Often, they're reporting usage data about you back to the mother ship--even when you're not using the app, and didn't even start it. Very frustrating, especially when you're trying to quickly pull up a train schedule to find track information and you've only got minutes to spare.

5. APPS HAVE BUGS. As a professional Web Developer, my code never contains bugs, but I find bugs in other peoples' code all the time. Although their icons look sleek and beautiful on those super-high resolution screens, behind them often lurks some code that's buggy as a woodpile. This translates to slow page loads, freezing phones that need a reboot, and other performance issues.

6. RED TAPE. It's easier to get married and divorced than to get your code into the Apple App Store. It can take years, and you have to play by their rules. They censor apps that conflict with their business model--notice how all the Apps to turn your phone into a WiFi hotspot are strangely missing in action. Alternatively, on a browser-based platform, content can be made available immediately, simply by publishing to your Web server.

7. UPDATES. Web Apps do not require you to install updates. The provider simply updates the content. Just go to the site, dump your cache, and you've got the latest.

All this being said, the one big advantage that Native Apps is that it's easier to charge for them. You can give the consumer a trial version for free, and charge for the full version. Of course, from the consumer's perspective, this is most definitely _not_ an advantage!

Native Apps do have their place. In some circumstances, you really do want a Native App, such as when information must be available when a signal is not. But generally, my advice is to focus your investment on a great Web App.

Sincerely,
Keith :^)
~kjm~
keithjmiklas@gmail.com


Keith Miklas is a professional JavaScript developer at a large corporation.
All rights reserved by Keith Miklas. May not be reproduced without expressed written consent.