Tuesday, January 19, 2016

More than 110M People have already upgraded...

WOW!!!  According to the "ad-ware" pop-up message that seems to appear more and more frequently on my computers, more than 110 million people have upgraded to Windows 10...  and for FREE, none the less!!!

Did they do it on purpose?  Or...  did these people really look at what they were getting?

On a slight tangent...  Apparently in recent history an incorrect assumption was made somewhere in my cerebral cortex...  I assumed Windows was NOT "ad-ware".  I thought this was commercial software that was to be free from advertisements.  Oh, sure...  This COULD be construed as simply being a somewhat irritating upgrade message.  More that somewhat irritating at times perhaps.

And why would the tagline "More than 110 M people have already upgraded..." be a motivating factor for myself, a computing professional, to switch operating systems?  I am a critical thinker (most of the time),  and, as I get older, am gaining a slight disdain for rapid change.  Not long ago Windows XP was phased out.  Now...  I am being brow-beaten to upgrade my Windows 7 machines to Windows 10?

Seriously, 110 million people...  Let me see...


  • According to the Society of Thoracic Surgeons, about 1.1 billion people smoke cigarettes.
  • According to the Huffington Post, 70% of all men in the US, and 30% of all Women watch pornography.  That calculates to about 153 million people in the US.
  • According to About.com, there have been 700 million iPhones sold throughout the world.

No...  Number one, I am not going to take up smoking; Number two, porn is boring and I get more action that I can handle from my better half; and Number three, I like my Android phone.

And...  No, I am not upgrading to Windows 10 until I absolutely MUST.  Now...  Buzz Off, Microsoft!

**Microsoft, Windows, iPhone (etc...) are all owned by their respective owners...  I don't want them.

Friday, November 6, 2015

C# Background Workers Using Shared Memory

It doesn't happen often in my particular coding shop, but once in a rare while the requirement for different threads in a program to use a shared memory variable rears it's head.  It really isn't difficult to handle this requirement in C#; actually, it is surprisingly easy if you are careful to avoid deadlock situations,

The key to this solution is a simple static class:

using System;
using System.Collections.Generic;
using System.Text;

namespace ThreadCom
{
    static class StaticShare
    {
        public static object MsgLock = new object(); // Functions as a lock when accessing Messages.
        public static string Messages = ""; // This is what is shared and used in all threads of this sample program.
    }
}

Basically, this snippet of C# code creates a static class with two public properties: MsgLock and Messages.  MsgLock is used to control access to Messages; a string that contains the data shared among the different threads.  Remember, performance is important; keep the shared static variable terse and small.

Here is how a thread (specifically a BackgroundWorker) might use the StaticShare class to lock, access and change the shared data without causing noticeable contention or throwing exceptions:

                lock (StaticShare.MsgLock)
                {
                    ReportProgress(0, "From " + BWName + " -> " + StaticShare.Messages);
                    StaticShare.Messages = BWName + " current time: " + DateTime.Now.ToString();
                }

The first line locks MsgLock, or causes the thread to wait until another thread's lock is released.  The ReportProgress() line is a method belonging to a BackgroundWorker, that line, in this case is accessing our shared variable Messages.  The last line in the Lock() block assigns something to the shared variable.

One big caveat here...  Make the code within the lock() block short, concise, to the point and fast.  If the code there is time-consuming or performs poorly, the lock() could cause other threads to be blocked.

Remember...  thread blocking is not cool!

You can download the entire c# project from my Google Drive here.  Standard code disclaimer: This code is for education, information and perhaps a few laughs.  It may not be perfect but does demonstrate a valid implementation of using shared storage with a multi-threaded C# application.

-whew-

Tuesday, October 27, 2015

Goodbye Facebook

Yup...  See ya later.  Apparently the fine folks at the world's most prominent social media site don't believe I am who I say I am.  Fifteen years ago, if Facebook was around, I wouldn't have blamed them one bit for being a bit suspiscious; but now???  I am ME...  really!

But not according to Facebook.  Here's what their little help page shows me...

Why was my account disabled?

Your account was disabled for violating the Facebook Terms.

Our Policies

  • Your account must list your authentic name.
  • Personal accounts must represent individual people only. It's a violation of our policies to use a personal profile to represent anything other than yourself (ex: celebrities, pets, ideas, objects, etc.).
  • Impersonating anyone or anything is not allowed.
  • Maintaining multiple accounts is a violation of our policies.
  • Accounts created for the purpose of spamming or harassing others are strictly prohibited.
(The above is from the page at https://www.facebook.com/help/245058342280723)
Well... My name on Facebook was not EXACTLY my authentic name but close.  I mean, really...  how many people use their 'authentic name' on most internet sites?  Are they saying a person with a name like 'Josephina Hope-Rosetta Kellerman-Patrinskia' must use that exact name on Facebook?  Wouldn't 'Jose Kellerman' work just as fine, so long as the person isn't trying to be deceptive?

"Personal accounts must represent individual people," they state.  What about this profile? https://www.facebook.com/phillip.cat.31

My only activities over the last year have included interacting with my daughters and one or two friends.  How often?  Hell, I only logged onto Facebook maybe once a week.  Real life is where the fun is happening!

At any rate, now the fine folks at Facebook, according to the information at (https://www.facebook.com/help/contact/183000765122339) want me to scan and upload a government ID that contains my name and date of birth or name and a photo, or two non-governmental IDs that contain my name and date of birth or name and a photo, or some combination of different IDs...  Honestly, I didn't read much past the first two options.

Sure, they do state that things like Social Security Numbers, credit card numbers, etc...  should be covered up, blurred or otherwise obscured.

Still...  Facebook...  You just aren't that important.

Saturday, July 25, 2015

Apparently This Is a 'Thing'

Confirmed...  Watching videos on YouTube of other people play video games is indeed a 'thing'.  My daughter likes Markiplier and my other daughter's boyfriend likes to watch videos from some other guy.

Seriously...  Watching other people play video games???  An activity (if one can call it that) for those techno-geeks too lazy to watch golf!

Disclaimer: I love my daughters and their boyfriends are part of our family, no doubt.  My opinion stands...  too lazy to watch golf...  sometimes.  :-)

Thursday, July 16, 2015

Where DO All The Old Programmers Go???

My wife and I just happened to be doing a little shopping together last weekend in a little fabric store.  There by the front door was a moderately sized sign that advertised their "senior discount" program.  After a few moments, it hit my brain...  One more year and I could qualify!  I mean, 5% off is 5% off, but I sure as hell don't feel or act that old.

That little sign made me wonder...  What the hell does happen to older programmers?  Well, here's a few links that might explain where they go.  (and, no...  they don't dry up and evaporate, slowly curl up into the fetal position where they spend the rest of their lives or end up in rehab clinics for the chronically caffeine addicted.)

Where do all the programmers go?

Why aren't there a lot of old programmers at software companies?

A 55-Year-Old Developer Tells Us What It's Like To Face Homelessness In A Youth-Obsessed Silicon Valley

What happens to all the "old" programmers?

I've got about 20 years before retirement age...  One thing I can say at this point in my professional life...  Programming has never been, and never will be boring.

Monday, July 13, 2015

C# Battle - Dynamic Array -versus- Generic Collection

In a previous post I insinuated that using a dynamic array in C#, rather than a dynamic structure might show a certain lack of basic programming skills.  Well, after getting my daughter off to work early Saturday morning, a storm rolled in, throwing out my plans to perform a little yard maintenance.  So...  what to do?  How about a little computer play while drinking my morning coffee.

After all, drinking coffee while practicing my guitar has far too many times caused scares due to the possibility of spilled coffee!

So, I set out to prove that Dynamic Arrays are worse performers than Collections in C#.  Well...  For my tests, my presumptions were proven incorrect.  My little test showed that when loading image bitmaps from PNG files into a Dynamic Array, there is only a marginal difference loading into a C# Collection.

Machine Baseline...
CPU: Intel Core i3-3240 @ 3.4 GHz
RAM: 8GB
Windows Version: 7 Ultimate 64 bit.
Hard Drive: ADATA SP920 512MB SSD drive
Number of images to load: 9727
Image size: All are 640 x 480

Read on for the code and specific results...

Saturday, July 11, 2015

Basic Skills, Please People!

Please!!!

Programmers really should know the basics of a language and platform before coding something that is used in a production environment.  Knowing the cool tricks of a language is nice but not knowing how the basics work is just irritating.

Take for instance a little optimization I just finished...  A SQL query was returning about 800,000 rows where about 799,700 were duplicates.  Adding a distinct to the SQL made the page load about 80% faster.  Why did the programmer not use that distinct keyword???  Maybe because they didn't know the basics.  Maybe because the programmer was sloppy.  Maybe the programmer didn't completely understand what was requested.  Don't know.

Then, while looking at the rest of the code I saw several string arrays defined; arrays that, after populated, contained hundreds of items.  To build these arrays, Array.Resize was used to add items.  Now THAT just might be inefficient.  Array.Resize copies the entire array and adds another element.  The programmer probably should have used a List<> or some other dynamic structure.

Hmmm...  now I am curious...