All Things Techie With Huge, Unstructured, Intuitive Leaps

Hidden Information in Digital Photographs

I am truly amazed at the amount of hidden information in a digital photograph compared to a silver print.  This holds true, even for actual silver emulsion photographs that have been digitized.  I will show you what I mean.

I was perusing the online obits from my hometown, and came upon the photograph below.
It was taken during World War II which was some 70 years ago now.  The fellow pictured above as a young seaman had just died at a ripe old age.  The photograph above, is a hand-colored black and white photograph.

I wanted to see how much digital information that I could extract, so I threw away all of the color information.  This is what the original photograph would have looked like (below).

Now, there were various grades of photographic paper and various types of printing-out emulsions.  Some papers were very contrasty and some were warm.  For hand coloring, the photo would be printed on a paper that wasn't light and warm, as below.  Then it was hand colored to look like the top picture.

So the hand colored photo was digitized and put online.  I decided to see what color information was still to be had.  I fed it into photoshop and adjusted the color and output levels automatically from the menu.  I was stunned at what came out, pictured below.
There was still enough color information in the digitized photo to look like a modern shot.  I am sure that the owners of the picture would be amazed to see their departed relative's pic in technicolor, compared to the limpid print on the obituary.

As a former owner of a darkroom, all that I can say, is that I am now a huge believer in digital photography and photoshop.

Newest Form of Spam Virus Injection-- The Vanity Spam

The latest form of spam with the intent to put a virus on my machine is the vanity spam.  They think that I am vain enough to have my name in a fake who's who.  Read it and weep:

JT Richards
To Me
Nov 22

As you are more than likely aware, you were recently selected 
for inclusion in the new 2013 edition of the Who's Who Among 
Executives and Professionals.

Despite our efforts, we have not yet received confirmation of 
your biographical profile, and are reaching out to you again 
in an effort to do so.

Click here to verify and confirm your profile

The tradition of the Who's Who reaches back more than 
100 years to a time when the prestigious and accomplished 
were featured in a yearly publication that defined high society.

Today, the Who's Who provides a useful resource where business 
professionals, academics, and Executives are both recognized for 
their achievements and provided with an unparalleled networking 
resource. Using our database, you can make global contacts, 
discuss current events and happenings with your peers, and 
establish yourself as either a mentor to aspiring professionals or 
further your business network.

Our goal is to seek out the premier executives and professionals 
throughout the world. There is absolutely no cost or obligation 
for your biographical profile. Simply click this link to fill out 
the appropriate biographical fields.


JT Richards
Managing Director
Who's Who Among Executives and Professionals

To change your communication options please click this link 
or write to:

3635 S. Fort Apache Rd, Suite 200 - 637
Las Vegas, NV 89147

The Virus Domain where the mail comes from is  There is no website.  The address that is listed is for a U-Haul truck rental.

Needless to say, that if you get one of these, don't click any of the links.

Blogger -- Image Upload Headaches with Google Chrome

I rarely shut my laptop down.  I have two versions of Eclipse running on it (one to run a Tomcat project) and one purely for Android that uses some of the Tomcat capabilities.  In addition, it acts as a MySQL server, and I read email and post to Twitter, and monitor various websites all at the same time.

A couple of days ago, Google Blogger image upload stopped working.  I couldn't upload an image to my blog.  Instead of the file selection box to pick an image from my computer, it says "In order to select an image from your online storage, please sign in".  I figured, what the heck, I will re-sign in with my Google credentials and see what happens.

 When I try to sign in, I get:
There was an error!
The feature you requested is currently unavailable. Please try again later.

I figured that this was a temporary thing.  I set it aside and for two days nada.  I finally decided to solve this this morning.  I shut down Chrome and restarted.  Nothing.  I rebooted the laptop.  Nothing.

I started Chrome, went to the three parallel bars in the corner, the menu and selected:

Tools > Clear Browsing Data
I cleared all of the browsing data, shut down Chrome, re-started it,
I then went to Settings and the content settings and enabled third party cookies.
 After all of that, it started to work again.  I can now upload images from my computer.

Hope this helps someone.

Nigerian Spammers Now Using RapidShare

RapidShare is now the spam platform of choice for Nigerian and African scam artists.  I had never heard of RapidShare so I went to their website:

Our Offer - simply smart

Whether you are at home, on the move or at work. It is now easier than ever to store, share and secure your data with RapidShare.
Being headquartered in Switzerland guarantees the highest data security and independence from foreign service providers.

The reason that I went to their website was that I got this email, and it wasn't in my spam folder:

Sonia Abdul invites you to access the following file via RapidShare:
Message from Sonia Abdul:
Hello Friend

I am an Investor looking for patner. My name is Sonia,I need your collaboration in a partnership business in your country under your control as my business manager. I have $6.700.000 as my capital money,please for more details about this partnership investment contact me at my personal email

Yours faithful, Sonia Abdul ( )Hello Friend

I am an Investor looking for patner. My name is Sonia,I need your collaboration in a partnership business in your country under your control as my business manager. I have $6.700.000 as my capital money,please for more details about this partnership investment contact me at my personal email

Yours faithful, Sonia Abdul ( )
Now it is easier than ever to store, share, send and secure your data with RapidShare. RapidShare provides you with high-capacity, fail-safe servers. This enables you to access your favourite music, images and videos via the internet anywhere. RapidShare helps you stay organized - at home, on the move or at work.
Your RapidShare Team

There was a clickable link to access the file. Yeah right. 

I have some advice for  Your landing page said that 198,000 users used RapidShare yesterday.  I bet you that up to 99% of that traffic was for spam, or illegal distribution of music, videos and other IP and copyright infringement material, if traditional numbers for spam hold up.   You simply have no way of knowing, but I can garner an inkling of it, since I am the recipient of spam from your platform.

Tech Support Story

User: My usual password is not working suddenly. Why?

Tech Support: Your password has expired -- you must register a new one.

User: Why do I need a new one as that one was working fine?

Tech Support: You must get a new one as they automatically expire every 30 days.

User: Can I use the old one and just reregister it?

Tech Support: No, you must get a new one.

User: I don't want a new one as that is one more thing for me to remember.

Tech Support: Sorry, you must get a new one.

User: OK, roses

Tech Support: Sorry you must use more letters.

User: pretty roses

Tech Support: You must use at least one number.

User: 1 pretty rose

Tech Support: You cannot use blank spaces.

User: 1prettyrose

Tech Support: You must use additional letters.

User: 1fuckingprettyrose

Tech Support: You must use at least one capital letter.

User: 1FUCKINGprettyrose

Tech Support: You cannot use more than one capital letter in a row.

User: 1Fuckingprettyrose

Tech Support: You must use additional letters.

User: 1Fuckingprettyroseshovedupyourassifyoudon'tgivemeaccessrightfuckingnow

Tech Support: Sorry, that password is already being used.

Are You Too Old For IT? Repost From Information Week

Are You Too Old For IT? (via InformationWeek)
Ageism might be a taboo topic among employers, but veteran IT pros say it's very much an industry reality. It is illegal for employers to base hiring and firing decisions on a person's age. Explicit discrimination can be tricky to prove, however, and…

For the full post (this post is not a complete article) :

For all of you Apple Developers out there

Just got this note from Apple:

iOS 7.1 beta now available.

iOS 7.1 beta and Xcode 5.1 Developer Preview are available on the iOS Dev Center. Download these new releases today and test your existing apps for compatibility
Sign in to the iOS Dev Center

Using the Android Simulator Webview, with Localhost and Apache Tomcat

Okay, let's suppose that you are developing an Android app with server support.  Let's suppose that you are using the server to securely access a database and you are using JSPs to do it, since Android is Java and you know Java.  So using Tomcat (what else) to serve up the JSPs, you want to do the development running Tomcat on your computer.  When you fire up your simulator to test the webview app and try to access the web url using http://localhost:8080, nothing happens.

Why?  Because the simulator is using localhost. doesn't work either.  The simulator acts as a router, so if you want to access http://localhost:8080/index.jsp the way that you would do it in a browser, the URL host in the activity has to appear as as the IP address.  So in the above example, you would use

If you are like me, you have a separate Eclipse for Android development.  You can either start Tomcat using the service control panel, or you can invoke both the Android Eclipse SDK and the JSP Eclipse SDK.  I don't try to combine the two with two separate projects just for simplicity sake.

And that brings us to last item of integrating webview with an Android app.  Suppose you have a webview page and you want to trigger an activity with a URL instead of going to another JSP.  Easy peasy.

In your activity where your webview is, find the following bit of code:

WebView webview = (WebView) findViewById(;
        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return true;

This is a standard bit of code for displaying a URL from a web server in webview.  To make a url do an activity, you modify it easily.  The first thing that you do, is that you signal an activity in the URL.  One way is to construct the url like:   <a href="app://signal_activity">

Then modify the above method to catch that string:

 WebView webview = (WebView) findViewById(;
       webview.setWebViewClient(new WebViewClient() {
           public boolean shouldOverrideUrlLoading(WebView view, String url) {
              // view.loadUrl(url);
            if (url.contains("app://signal_activity")){
                   //trigger an Android action...,

               return true;
            return super.shouldOverrideUrlLoading(view, url); 

There you go -- everything that you need to know to (1) use your local machine as the web server (2) use Tomcat to serve up the web stuff for the Android web view (3) use your Android simulator with your local machine and (4) integrate web pages with Android activities.

Hope this helps.

New XCode Seed Available for Apple Developers

New Xcode Download Available
Xcode 5.0.2 GM Seed
This is a pre-release version
 of the complete Xcode developer toolset
 for Mac, iPhone, iPod touch,
and iPad. It includes the iOS 7.0.3 SDK
 and OS X 10.9 SDK. Xcode 5
 requires OS X 10.8.4 or later.

Just got this notice this evening in my mailbox.  New version of XCode available for download.

Another Google Software Bug on Blogger

I like the Google Blogger platform, but as smart as the geeks at Google are, it is somewhat gratifying to see that even the mighty Google has software bugs.  It makes me feel downright self-righteous and happy when I discover a Google Software bug, because I know that I am not alone in creating bugs.

I haven't posted here for 4 days, because I have been busy, and then this blogging platform has been hit by a bug.  I try to upload a picture from my computer to my blog, and I get this black window saying "In order to select an item from your online storage, please sign in".  WTF?  Who said anything about online storage.  I want to upload a pic from my computer.

Nothing seems to fix it but waiting it out under some brainiac at Google finds out that their precious software isn't working as it should.

Sometimes it takes awhile.  The only cure is to wait it out until Google fixes it.

DiscountApp Browser Hijack

It all started out when I noticed that there was a space on my Twitter homepage between the header and the top of the browser.  I could see more of my background image, and the side panel with my stats was much lower.  I initially thought that it was some weird Twitter thing.  It became supremely annoying.

Then I noticed that there was a little link in the space.  It was obvious that an ad was not rendering.  I thought that perhaps Twitter was going the ad placement route in advance of their IPO.

But there was another funny as well.  YouTube kept auto refreshing and I had these black patches of ads not rendering.  It was time to investigate.

I went back to Twitter and clicked on the little barely visible link, and was taken to the discountApp site.  There they explained that they were a browser extension, and they delivered ads not associated with the site.  I clicked on my Chrome Settings, found Tools, and then my Extensions, and sure enough they embedded a browser extension without my knowledge.  I deep-sixed it.  Quite frankly they were:
Scum-sucking Browser Hijackers
They had wombat piss for brains.
Total Scum of the Earth.

Can you tell that I was mad.  Let me tell you, this is one startup doomed to failure with unethical practices like that.  So if you are wondering what the big space is on your twitter page or why youtube keeps flashing black, it is because of that web STD called discountApp.

Google Chrome Pages Unresponsive Problem

Chrome has lost its shine for me.  I just wasted a few hours trying to get my wife's machine running.  She is not a heavy internet user and uses it primarily for email, the odd Skype chat and streaming a radio station.  So yesterday, Chrome started to misbehave.  It simply wouldn't work.  The picture above showed with the message:

The following page(s) have become unresponsive.  You can wait for them to become responsive or kill them.

So what to do.  At first I thought it was the machine.  It is an old one with Vista and Celeron processor.  I ran a registry cleaner.  I cleaned out the cache and cookies.  When that didn't work, I uninstalled Chrome, and re-installed.  Then it wouldn't even start.  I uninstalled it again, and ran the best virus and malware program that I have.  It ran all night.  Nada.  The machine was clean.

I tried Internet Explorer.  It worked just fine and relatively fast.  I suspected that Google made an update to Chrome.  I spent an hour or two Googling.  A Google site suggested that I navigate to %LOCALAPPDATA%\Google\Chrome\User Data\  and change Default folder name to backup Default.  Nothing.

Another suggestion was to append --no-sandbox in the shortcut panel to the command line.  Nada again.

I was just about to give up, when I tried this one last thing:

  • Right click google chrome shortcut.
  • Click on properties menu itme.
  • Click shortcut tab in the opened panel.
  • add this in target destination --disable-hang-monitor
to make it look like this:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-hang-monitor

This made Google Chrome work again.  But it sure took the shine off of Chrome for me.

Android Device Not Visible In Eclipse using USB cable

I wanted to connect a Galaxy Tablet by Samsung to my Eclipse Android SDK with the USB cable.  I downloaded the appropriate drivers, followed all of the instructions including setting the tablet in Application debug mode, and still nothing.  Nada! Zilch!  I thought that maybe I had the wrong driver, so I uninstalled the driver, went to the Samsung site, and got the driver again and installed it.  Nothing!  Crapola!

I have more than one Android app on the go, because the app that I am developing is quite complex, so I prototype each function as a separate project to make sure that I have the Java code right.  I went to another project and look at the run configs, and I could see the device in the run configuration menu.  It ran perfectly.  So, WTH?

After much wailing and gnashing of teeth, I decided to examine LogCat very closely.  It said it couldn't find a compatible minimum SDK version device attached.  Well, I did know where it was specified and that was in the AndroidManifest.xml.  So I went there and sure enough, I had accidentally changed the minSdkVersion to 17, instead of 8.  The 17 number was for the targetSdkVersion.

        android:targetSdkVersion="17" />

When I changed the minSdkVersion back to 8, I could see the USB connected device.

Hope this helps someone.

Windows 7, Build 7600, This Copy of Windows is not genuine

I have a Windows 7 laptop.  Generally I am pretty pleased with it.  Not as pleased as XP, but much more pleased than that claptrap piece of junk called Vista.  Windows 7 still craps out occasionally, but a reboot (sometimes removing the batteries to do so) fixes whatever ails it.  However, I got a shocker the other day.  After re-booting, it told me that my copy of Windows was not genuine.  Windows 7, Build 7600, This Copy of Windows is not genuine.  What the hell?

Well it turned out that the fix was relatively easy, but still disconcerting.  Click on the start menu. Open up All Programs > Accessories.  Right click on Command Prompt and click on Run As Administrator.

In the command window, type in:  slmgr -rearm

That should fix it.  Another reason to think that Microsoft is a buggy piece of crap.

Really Bummed Over Disk Corruption, MacBook Pro

So what I thought was my lovely MacBook Pro, is just another stinking piece of silicon.  While using Safari, noticed that when you put the cursor on the desktop, you continuous got the spinny colored wheel.  Safari stopped responding   I shut down and when I re-started, the damn thing wouldn't boot.  I got the white screen and the Apple logo, and the gray spinny thing, but no boot.

I booted in single user mode (command + S) and got a shell.  I typed in the fsck command (fsck -fy) and it blithely told me that the hard disk could not be repaired.  Reason:  Keys were out of order.  I could traverse the file directory, and my work was all there (/Volumes/Macintosh HD/ and then to the users directory and my name).

No problem, I shut down, and started the Disk Recovery Boot sector (restart while holding down command + R).  I started the disk utilities, and was quite certain that disk utilities First Aid would fix it.  I scanned the disk and sure enough, it told me that I needed to hit repair because the B-Tree was corrupt and keys were out of order.  I eagerly hit the Repair Disk button and that was the beginning of several wasted hours.  It couldn't fix the disk.  The utility does let you download a n

What to do.  I have an external hard drive, essentially doing nothing.  So, what I was going to do, is just copy the files that I wanted to an external drive.  Well, you can't mount external drives in single user mode.
 I reformatted it with same Disk Utilities and did a raw copy by dragging the Macintosh HD dead disk into the source and dragging the newly formatted disk into the target.  It copied.  Great! - now I had copy of my work (and the entire Mac hard drive -- it was a bit external drive).  The next step was open a terminal in the Disk Recovery Boot mode.  My plan was to copy the files that I need from the external disk /Volumes/nameOfExternalDisk to another disk for my archives.  The terminal could see and mount the other disk, but I couldn't mount the copy of the disk that I had just raw copied on the hard drive.

Well, I know how to force mount, so I did a df and the missing disk was /dev/disk2.  After creating a mount point, I issued a mount, and Voila -- disk utilities now saw it as a mounted disk.  Unfortunately the terminal in /Volumes/mountPoint didn't.  I ran the repair disk a few million times, all to no avail.

Then I had the bright idea of blowing back the mounted external image on the mac hard drive.  Maybe it would fix something.  It didn't.  However in single user mode, the data was all there.  The disconcerting factor was that I had blown it back from a 3 TB external hard drive, and now Disk Utilities thought that there was three terabytes on my Mac hard drive.  There isn't.  Single User mode still lets me explore and look at my data from the terminal, but like a super autistic kid, the data won't come out.

Someone suggested Disk Warrior.  They say it works magic.  This was my first foray into Mac and initially I was very very pleased with the experience.  I am totally soured on it now.  My mistake was thinking that I wouldn't have to back up my dev on the Mac until I was finished.  It was a new Mac, and they don't go kaput in the first few months.  The real piss-off, is that the Mac engineers aren't as smart as the Disk Warrior guys, and that the inbred Mac Disk Utilities aren't as smart as Disk Warrior.  If Steve Jobs were alive, I could taunt him and it would be fixed.  Now I just rant in my blog.

Western Digital SmartWare Review

My very first 1 Terrabyte External Storage disk drive was a Western Digital.  That was many moons ago.  I was pleased with the price, the performance and even the ruggedness.  It is a bit clunky in design, but when I accidentally dropped it and cracked a bit of the plastic, my heart sank.  That was several years ago.  I plugged it back in, and it works fine to this day.

So I go to my local Future Shop and see a Western Digital 3 Terabyte drive for $129.  I snap it up.  It still has the same clunky design, but hey three terabytes for just over a hundred bucks -- such a deal!  I love Moores Law.

I unpacked it and it said that there was automagic backup software called SmartWare.  It would take all of the work of backups out of my hands.  I thought "what the heck" and installed it.  I was impressed that it started classifying my half terabyte laptop disk, and five hours later, it was all classified and backed up.  No big whoop.  I started the backup before going to bed at the crack of dawn.

Well sir or madam, when I next rebooted the computer, it was excruciating slow to boot. It was excruciating slow to kick Skype (I manage a coding team remotely).  Opening a spreadsheet was slow.  I thought WTF - the only thing that changed was the addition of the SmartWare.  I checked to make sure that I hadn't picked up a virus or bot.  I was clean so it had to be the backup software.

I uninstalled and my computer returned to normal speed.  I haven't decided whether to do the backups manually from now or, or to install and uninstall it after backups.  I am inclined to go manual, because another weird thing happened after the uninstall, but that is a different blog entry.  Later.

When Yahoo is in doubt, it copies Google

 (Doesn't Yahoo Mail look suspiciously like Google's Gmail below?)

When Marissa Mayer was hired to turn around Yahoo, one of the first things that she did (other than whelping some progeny) was to bring in all of the remote workers.  That was supposed to be a big turnaround move.

Apparently the next step is to re-face Yahoo mail which happened recently.  So they copied the highly successful Gmail.  If it wasn't for the branding, you couldn't tell the difference, other than the colors are reversed - white for messages and light blue for background and vice versa.

So how much are they paying Ms. Mayer.  I am sure that I could have done the same with half of her salary.  All right you Yahoos, get yer fat-ass derrieres back in the office and lets copy Google.  Hey, I could be an extremely high paid tech exec.

Imitation is the sincerest form of flattery, but it also could be the final form of desperation.  You can quote me on that.

Pithy Bits: What is Traffic Faking?

Pithy Bits: What is Traffic Faking?: Question:  What is Traffic Faking? Answer:  Traffic Faking is the newest form of spamming.  It is very clever, because it is indirect.  Traffic fakes use software to make fake hits on your website.  No particular articles are called, just the domain name of your website.  Almost anyone can get a website these days and if it is from Google or another company that provides analytics, you can see the traffic fakers URL.  Out of curiosity, you click on it.  And bingo, you have just created more traffic for the spam website and made it work.

Message To Samsung

Attention Samsung.  You make a great Galaxy tablet.  Your products are good.  Your accessories SUCK!  I visited 6 stores trying to get a replacement USB cable (30 pin proprietary) for the Galaxy Tablet.  Wasted almost a whole day and still no cable.  Have to buy it online.

That begs the question -- why are your cables so flimsy.  Mine broke where the wire connects to the connector and it shorted and melted.  I was talking to a store clerk and his did the same on his cell phone.  Surely if we can put a man on the moon 40 years ago, you can make a cable that lasts for more than 2 years.

There are very few stores that carry your proprietary cable and it is really pissing me off.  If you seriously want to challenge Apple and the iPad you would make the things ubiquitous.

Rant over.

Samsung Galaxy ~ usb device not recognized

Normally, I just plug in a Samsung Galaxy tablet into the USB port and it pops open an Explorer Window and I have my way with it.  Then something changed.  I plugged in the old tablet, and it gave me an error - usb device not recognized.  It opened a system window showing me all of the possible USB ports, etc, and the top entry was the unrecognized device.

I plugged and unplugged, and tried it again.  Same deal.  Finally, I just clicked on the device in the USB system window, and it opened and I could do stuff again.

Hope this helps someone.

(BTW - its a laptop with Windows 7.  Can't say what would happen with Windows 8.)

Is Android Safer Than iOS for Mobile Banking?

First of all, total disclosure:  I am a registered Apple, Android and Nokia developer.  I have no real preferences.  There are good and bad points for all platforms.  This article is my opinion only.

The Android OS is developed using Java, an interpreted language that runs on a virtual machine within the mobile device.  In spite of the wide array of Android devices they all run Java Virtual Machines with their standard Java runtimes.  They are far more vulnerable for exploits for several reasons.  Here are a few.

A Java exploit could be used that is intrinsic to the development libraries.  (Libraries are mini-programs that execute functions like creating an encrypted tunnel to the banking server, and another is used to connect to the account database.)  Exploits utilizing the core libraries are easier to surreptitiously embed on Android, because Android can load programs from email, attachments or pernicious websites without the convoluted encryption process that Apple uses through iTunes.  iOS like iPad and iPhone will not accept binary executables unless they come from iTunes or a corporate server having an encryption certificate certified by Apple that is iTunes compatible.  Unless an iPhone is "jail broke" (illegally altered), you cannot just load any old program on it.

It is technically much harder to get an exploit to be seen and executed by the iOS than by Android.

Many development frameworks are cross-platform that work on iPhone, Android and Blackberry.  They are actually kludges (the deus ex machina of programming if you will), in the fact that each of these devices has a browser widget.   All browser widgets will execute javascript code, so they use that to emulate a native running app (ie with the intervention of a browser widget).  Browser widgets (a browser widget is a window that behaves and operates like a web browser, but doesn't look like one) can do a lot of things including uploading and downloading dangerous files.  The Apple browser widget is more crippled than the Android ones ( because of Apple's operating system is akin deranged control freak marital partner that watches everything that you do and doesn't permit basic functions like using the browser to upload pictures through the browser to a web page.  You need Apple's intermediate app to do that which they vent.

So, all in all, Apple is still safer than Android. Using their native Objective C language with the XCode development environment, it is the rocket science of app design, and coding exploits is an incredible difficult thing to do with Apple.  Whereas with the Android development system, it is fairly easy to find java keylogger libraries on the internet and deploy them on an Android mobile device in a surreptitious manner.

Having said all of this, I am a firm believer that mobile banking can be quite safe.  What has not flown, is the NFC or Near Field Communications (tap 'n go chips) which is being taken off many mobile devices because they are very easy to exploit.

The Seven Deadly Sins That Startups Commit

I got to thinking about the startups that I was involved with, and what went wrong when they failed.  I am an analyst by nature, so I did a postmortem on all of my startup failures.  Here are some nuggets from those postmortems outlining mistakes made.

1) Just because it is a neat idea, employs the latest technology and nobody is doing it, doesn't mean that customers will want to pay money for it.  Your startup product must have a distinct value proposition to its users.

2) No matter how much money will be saved by your product, it won't sell unless people want to use it.  People want to use products that fit into existing processes in their businesses or lives.  If it doesn't fit, then it won't be a commercial success.

3) Then there is "Lipstick on a Pig".  Oftentimes when our product was not adopted, we sat around the table and decided that we needed a sexier feature, or an edgier look and feel, or the latest in a UX consultant to come and do a new design for us.  You can't put lipstick on a pig to dress it up and sell it.  Customers will see through that.  If they don't use your barebones product, they are not going use one dressed up with new features or a snazzier look.  There is way too much emphasis on Look and Feel and looking sharp and UIX and UX and all of the buzzwords that bring in consulting money.  The ultimate success of an app is shown by Google which is simple, clean and beautiful, and would never pass design review with these so-called UIX experts.

4) That brings us to minimum viable product.  You have to have something that people are willing to use, willing to buy, and willing to share with their friends.  Too often we have built apps that everyone said was good and no one used them.  We then decided that perhaps we needed more lipstick on the pig.  If that didn't work, then we decided that we needed to shave the pig and sell it as something else.  All the while, we never had a minimum viable product.

5) We never had a feedback loop.  When someone bought our product and never used it extensively, we did go back and ask for feedback, but we never really listened to our customers.  When they would bring up objections like "It takes up too much time to use" we thought that they were just making excuses.  We never modified the app to fit their time constraints and their business.  The correct methodology is to embed someone with an early adopter and keep adapting until they used it, loved it and shared it among peer businesses.  We never did that.

6) Before you go and build something and a business around it, you should be able to pre-sell it.  It should be that good of an idea.  You should be able to articulate the value proposition in ten seconds.  The value proposition should include savings in both time and money and/or ease of doing business which is time and money.

7) You should be culturally appropriate to your customer base.  We had a designer create wire frames for an app that was aimed at 50 year old, non-computer literate business owners.  He designed it like a social media app with gaming, individual photos, reputation scores and the latest in device integration on smart phones.  No fifty year old, computer illiterate is going to upload his pic to a business app that is supposed to help him make money.  They don't give a damn about being 5 Star users and they don't react to gamification the way that millenials do.  Their favorite device is the Blackberry with the full QWERTY keyboard.

So there is the seven deadly sins of startups.  How do you know if you have a viable product? Simple.  It will be a product that people will want to use.  If you get widespread usage, you will find a way to monetize it later.  Usage is the key indicator of success.

Android Issue: I/Choreographer (xxxxx): Skipped 60 frames! The application may be doing too much work on its main thread.

So I was developing an Android app.  I created my View Group and my View. In an activity class, I had a method to fetch some data and display it.   In that method, using the view as an argument,  I instantiated a new intent, with the Context and the custom new Activity class as parameters of the constructor. Then I fetched some data, and using the Intent android.content.Intent.putExtra(String name, String value), I added fetched data to the intent. Good to go, right?

I started the emulator, and nothing, except in the LogCat, I kept getting :

Application:  MyApp
Tag: Coreographer
Text:   Skipped 60 frames!  The application may be doing too much work on its main thread

WTF.  I went over the code three or four times.  I fixed things that didn't need fixing.  I cast about all over, and then it finally struck me.  I forgot to start the activity,  so I added this line to the method at the very end:


And my so-called life was functional again.  Hope this helps someone.

Best Free AVI to DVD Software Reviews

I have this .avi video that I created by stitching together music and still videos.  I wanted to put it into a DVD format so that friends and relatives could play it on their TV without any computer knowledge.  The .avi video is almost 20 minutes in length, clocking in at over 700 MB, so I couldn't upload it to a high-res video site like Vimeo which restricts video file sizes to 500MB if you don't have their premium package.

There are a whole pile of free AVI to DVD software packages.  I picked the first one from Google, and it turned out to be and the program is called AviToDVDfree.  It was easy to use and intuitive, and the bonus feature was that it not only converted but burned it to disc at the same time.  I was amazed at how fast it took.  However, there was a gotchya.  I took the DVD to the television set.  There was an older DVD player there.  About 4 minutes into the DVD, it got stuck and wouldn't advance.  I was able to hit fast forward, and after skipping about ten seconds, it played again.  However, the same thing happened at the thirteen minute mark.  It got gonged and I went looking for another package.

I downloaded freevideostodvd by KoyoteSoft.  I fed in the avi, and the thing blew it.  It threw an exception saying that there wasn't enough room on the disc to burn the DVD.  Since I had previously burned a DVD with the same file, I knew that this was BS.  I tried again, and this time it just mysteriously quit with no message.  I gonged it and moved on.

The third package that I downloaded was AVI2DVD by Trust FM @
I was a little disconcerted because it wanted to download all of these filters and codecs.  I checked them out and one of them was from sourceforge, so I knew that it was legit.  The program is massively localized, meaning that it operates in a whole variety of languages.  Plus it invokes .bat files so windows open and close.  It took a fair bit of time to process and it didn't burn the .iso file to my DVD drive.  However, I opened the temp folder, right clicked on the iso file and it invoked the disc burning utility that came with my laptop, and Bob's your Uncle.  It worked perfectly.  It is the one that I recommend for quality, convenience and just plain works every time.

Hope this helps.

More Spammer Scumbags

(click on pic for larger image)

Spammers are having a more difficult time and have to get creative.  Spam filters are becoming more effective.  Numerous blogs and websites expose spammers, and lately Google has stopped showing keywords which hinders spammers.

Of course you still have the totally dumb assholes who harvest email addresses and send you spam.  Those,  you know, are the rank amateurs and the dumbasses actually think that it is a legitimate business practice.  Some of these jokers even claim that they are internet marketing experts.

I have lately seen upping the game in combining traffic fakers with directed spam.  Case in point.  A new entity of scumbag spammer emerged called  They traffic fake to blogs (if you don't know what traffic faking is, just scroll down a bit on this blog for articles and explanations).  But get this.  In the past traffic fakers got you as a web master to click on their links for everything from fake Viagra to online courses.

The traffic fakers of the past were shotgunning spam hoping some of it would stick.  These guys have a semi-official sounding name and their spam is directed at you as a web master, hoping that you will buy their pathetic solutions to supposedly increase your traffic and business. Caveat Emptor.

Up Trends, Down Trends, New Trends

I have been cognizant of a few trends lately based on how often I run into them, or don't.  So today's entry is short and sweet.


in the UIX field - watch for Cards
in the Gaming field - watch for Steam OS
for Search - Google Hummingbird
for Mobile -  Everything !!

Weakening Trends:


Social Trends Rising:

Speaking Welsh
Cultural Granularity

Each of these needs its own article, and as soon as I get to writing one for each, I will post them here.

Java Networking

I have this issue where I need to know the IP address or some identifying part of a computer.  Using Java, I came across the class of  Since there may be several LAN adapters on a computer, I wanted to find a single identifying feature that could be used to positively identify who sent something.

I implemented the following code to see what comes out of it:

String ip;
   try {
       Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
       while (interfaces.hasMoreElements()) {
           NetworkInterface iface = interfaces.nextElement();
           // filters out and inactive interfaces
           if (iface.isLoopback() || !iface.isUp())
           System.out.println("HW" + iface.getHardwareAddress());

           Enumeration<InetAddress> addresses = iface.getInetAddresses();
           while(addresses.hasMoreElements()) {
               InetAddress addr = addresses.nextElement();
               ip = addr.getHostAddress();
               System.out.println(iface.getDisplayName() + " " + ip);
   } catch (SocketException e) {
       throw new RuntimeException(e);

The very first thing that comes back out of this piece of code is very, very interesting.  It returns the name of the LAN network adapter that was actively used.  Concatenated to that was the byte fe80: which identifies the IPV6 and the unique MAC Address of that computer.  Here's the interesting bit -- immediately preceding the fe80 is the name of the SSID that is being used.  This not only reveals the computer MAC address but also the network (and the place of the network) that is connected to.

Hope this helps someone.

A Couple of MySQL Tips - Join on Three Tables and Select Results into a File

These are a couple of things that I had to do with a mysql database lately and I thought that I would pass on these tips.

We were debugging a problem where certain data elements were dimensioned across three tables.  While debugging program logic, we wanted to see the data aggregated by the common column across all three tables.  Here is the basic sql statement to do that:

SELECT * (or any number of columns separated by commas) FROM table1 join table2 ON table1.primarykey = table2.foreignkey
join table3 ON table2.primarykey = table3.foreignkey;

OK, so once you do that, you want to put it into a separate file so that you can ftp it from the server to the dev platform to analyze the data.  Here is how you select results into a file:

SELECT * (or any number of columns separated by commas) FROM table1 INTO OUTFILE '/tmp/table1.txt';

Hope this helps someone.

The Dark Side of Big Data

There is a dark side to big data.  It is personal privacy.  There are obvious privacy risks for the accidental or intended disclosure of collected "hard", personal data, but to my way of thinking the real danger is from derived or predictive data using mathematical constructs like Bayesian Inference and other tools.  Using large datasets, these tools are melded into business intelligence cubes that work wonders in improving the bottom line, but violate privacy in a fundamental way in the sense that they are predicting human behaviors based on inferential probability, that may have a large degree of error in individual cases, yet are useful enough on a macro scale to improve the bottom line.  A good example of this are credit scores.  Just because 80 percent of people employing action A with action B tend to default on loans 55 percent more than people who do not exhibit those behaviors, doesn't mean that the entire population demographic will default, yet they are judged as if they all will.

The real danger of this predictive stuff comes from aggregators who combine predictive data with actual personal data and sell it to other companies.  Judgements will made that may be untrue, but may result in denial of things like college entrance, handgun ownership, club memberships, professional certifications, career choices (suppose that you are of a certain height and the data says that people of that height do not do well in a particular professional sport.  Yet we all know stories of the little guy who could.) and other life events where some sort of body has authority over certain aspects of our lives. 

One of the current thrusts of Big Data, is to find non-intuitive behavioral predictors.  For example we have heard of Target Department Stores sending pregnancy coupons to a 15 year old girl.  Her parents threw a fit, until they discovered that their daughter was actually pregnant.  Target figured it out using probabilities and finding a correlation of beauty products and vitamins leading to buying pregnancy stuff five months later in a certain demographic.  Supermarkets have long known to put beer and diapers together on a Saturday, and it results in a large increase in sales. (Wife sends hubby to store for diapers, but the big game will be on later on in the weekend and the hubbies buddies are coming over.)  All this is fine and dandy because it happens on an anonymous level, but when this sort of predictive stuff is applied with identifying data, it could become dangerous.

What is a CIO or CTO to do?  To my way of thinking, the chief responsibility is to management, shareholders and the bottom line, and not to the privacy of the masses.  Business is the last venue of civilized men for uncivilized warfare, and as a result, I am predicting a further erosion of privacy from Big Data.  It is a force majeure, an unstoppable tsunami of assaults against our privacy that will rival any effort of the NSA or any other organization intent on cataloging the behaviors of the masses.

Form not visible in task bar

When you support old code, you get a lot of surprises and you learn a lot of things.  I had a client tell me that one of the forms windows written in Visual Studio with C# needed its own window.  I didn't understand what he meant.  He kept saying that when he switched between apps, he couldn't find a certain form on the C# app.  When pressed further as to the problem, it turned out that when he hovered over the app in the task bar, if he had different forms open, one was not visible in the task bar.  This required some investigation.

As it turns out, there is a Form property which is a boolean.  It is called Form.ShowInTaskbar.

So when I added the following line to the constructor, everything was fixed:

this.ShowInTaskbar = true;

I still don't know what was turning it off, but the explicit assignment fixed the problem.

Hope this helps someone.

Five Common Mistakes That Cause a Web Design Project To Fail

Here are 5 common mistakes that cause website design to go off the rails and the project to fail in its intentions, goals and objectives:

1) Not hiring brand designers to develop the image, brand and message.   When you give this job to the  web developers instead of hiring communications and marketing experts, you are on the road to failure with your website.  Web design and branding are two different skill sets.

2) The same goes for content written by the web developers.  Content should always be written by subject matter experts.

3) Trying to be hip or cutting edge where it is not called for.  If you are appealing to a conservative audience, you do not want your website to look like it is a advertisement for Grand Theft Auto.  A culturally inappropriate website design  destroys your value proposition and loses customers.

4) Features that don't work.  This is my biggest pet peeve.  I went to the Home Depot website and searched for reverse osmosis filters.  I knew that they had them, I just wanted to do a price comparison.  The on-site search engine gave me results for everything but that.  I finally gave up.

5) No story boards or navigation planning.  Do an ad hoc websites results in spaghetti navigation.  To logically get your message across, you must have a logical plan instead of links that take you everywhere that distract the reader from your value proposition and buy message.  Excess linking and navigation dead ends just make the surfer hit the home button and leave your page quickly.

The goals and objectives of your web design should be stated clearly before any design work is done.  From those, you create a requirements document and a brand design.  The next step is the coding and then the quality control should happen before your website goes live.

SWT Dialog To Front

I am working in org.eclipse.swt Java.  I create a dialog box.  The app was full screen and I didn't have any minimize corners on the screen.  I created a password dialog with code using the following:

PasswordDialog dialog = new PasswordDialog(new Shell());

When I ran the code, the main window was up front the the dialog was behind it. I knew this because the only way that I could see it, was with a task manager.

What to do?  I searched for a .toFront() method to no avail.  Finally I happened on the SWT.ON_TOP integer to use in the constructor, like this:

PasswordDialog dialog = new PasswordDialog(new Shell(SWT.ON_TOP));

Worked like a charm.  Hope this helps someone.

Java SWT Dialog won't open

I created a jface dialog with SWT.  When I tried to run it, everything was fine until I called a "".

I got the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/commands/common/EventManager

The fix was simple.  I went to this website:

and I downloaded the commands.jar.


download :

md5 hash : e762e07da9f9b4937d119c9800598a8f
size : 103384 bytes

I added the jar to the project and worked like a charm.  Hope this helps someone.

Samsung Galaxy Tablet Won't Turn Off, Won't Turn Off, Charging Icon Shown

I had the Samsung Galaxy tablet hooked up to the charger and plugged into the wall.  Left it there for a day or two.  Went to use it today.  It wouldn't turn off.  It wouldn't turn on.  Nothing. Nada.  All that the screen showed, was the charging view or charging icon.  But it was stuck.  It looked like the tablet was hung.

Obviously pressing the power switch didn't work.  I googled but nothing jumped out at me.  I pressed the power button and huge volume button next to the power button, and held them down for 10 seconds.  To my surprise, the charging icon disappeared.

Then I pressed the power button again and held it momentarily.  The thing booted.

I hope this helps someone.

C# .NET Textbox GotFocus Event

When one Googles to find out sample code for a C# .Net textbox gotFocus() event, the first few search results are not that explicit.  So without further ado, here is a sample:

In the Form_Load method:

textBox2.GotFocus += new System.EventHandler(this.textBox2_GotFocus);

And then in the body of the form class you create this method:

private void textBox2_GotFocus(Object sender, EventArgs e)
          //  do something here

Hope this helps someone.

Google Blogger Problem: You have logged out from another location. Do you want to log in again

Today, I had difficulty with my blogs and Google Blogger.  I would click on a blog to edit a comment that I received and from my Blogger dashboard, the page would load, but after the header I would get this error:

You have logged out from another location. Do you want to log in again

When I clicked yes, it opened a new window, and I got the same deal, all the while saying that I was logged in, but the popup box telling me that I wasn't.  My google account at YouTube worked and my Gmail worked, so it was a head-scratcher.

 After searching fruitlessly to report this to Google, I found that there is no direct way to contact Google by email.  After a long more useless link clicking, I came upon the Blogger forum.  It turns out that I was not alone.

Yesterday, the community forum guy from Google said to log in using httpS at  I kept missing the httpS and just tried logging in using http.  ie go to and log in.  I did and all was working again after trying intermittently all day.  What a royal pain.

So, do a secure login with https at  It works, because I am posting this now and I couldn't get to my blogs at all today.

Hope this helps. seems to be down

Hmmm, something is not right with twitpic.  Yesterday, I uploaded a pic to Twitter, and it didn't automagically update my tweets.  I deleted it from twitpic, tried it again and it worked.  However the media thumbnail doesn't appear on twitter homepage.  Today, I went to do the same thing, upload a pic, and I got this error.  Something seems to be wrong with twitpic.

Killing Application With Escape Key in .NET C#

So, you are a C# weenie and you want to kill your Forms Application by hitting the escape key.  It's as easy as pie.

In the forms load method, put in the following two lines:

this.KeyPreview = true;
this.KeyDown += new KeyEventHandler(Form1_KeyDown);

Then create the KeyDown method:

private void Form1_KeyDown(object sender, KeyEventArgs e)
             if (e.KeyCode == Keys.Escape)

Hope this helps.

Download jfaces jar

So, I write some code in Java SWT and I need a dialog.  The quickest one is a jfaces implementation.  I pop the code in, and Eclipse can't find the import.  It doesn't have the class, and it can't auto import.  What to do? Obviously I am missing a jar.  I google "download jfaces jar".  Nada.  No separate download.

I find it in the plugins directory of my Eclipse plug-ins folder in my Programs folder.  Quel surprise!  There is no independent download of the jfaces jar.  It is bundled with the latest Eclipse download.  My version of the "found" jfaces jar was org.eclipse.jface_3.8.101-v20120817-083647.jar.

Hope this helps someone.

Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access

So you are getting your feet wet with Java SWT and you are having trouble updating your UI while you are doing some heavy processing.  Perhaps you have an intensive task like monitoring a stock quote and then updating the UI.  Either it plain doesn't work, or you keep getting the error:  Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access

Googling sometimes is not very helpful with this.

Obviously the way to work it, is to not put the intensive task in the main thread of the program.  That way you will never get an interrupt vector to update the UI.  So how do you do it?  I put the heavy duty processing task in a button, and kick a separate, non-UI thread to do the work.  Then at the point that you need to update the UI, kick a UI thread to do the update.  Here is a code snippet:

Button button1 = new Button(shell, SWT.PUSH);
button1.setBounds(220, third, 200, 50);
button1.setText("Do Work");
button1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// Kick a thread that has nothing to do with the display
     Runnable runnable = new Runnable() {
         public void run() {
           for (int i = 0; i < 10; i++) {
             try {
             } catch (InterruptedException e) {

                      // this will print to the console, because the UI display thread is not involved

                      //Now get the UI thread to update the label 
                      display.asyncExec (new Runnable () {
                    public void run () {
       new Thread(runnable).start();

Hope this helps someone.