Wednesday, August 17, 2016

Webcollage bug/irritation repair

So, I am enjoying my little Linux build with that little AMD APU detailed in my last post...  Something is missing...  YES!  A good screensaver.

Oh...  Yes it has been a while since my last post, so what?  I've been boating and working on the house and generally enjoying the outdoors while the weather is agreeable.  So...  pfft...

Anyway, I installed the XScreenSaver package with several additional screensaver packages.  One looked intriguing...  webcollage by Jamie Zawinski.  Webcollage uses dictionary files (just lists of words) to seed simple searches on several internet search engines.  When the screen saver is activated, a random image (or part of an image) from a random webpage from the results of searching a random word is placed on a the screen like a collage, one image over the other.

Needless to say there is a lot of online bitching about this because quite simply, it can display porn and other NSFW images.  OK, so some people don't like it.  Personally, I find it intriguing.  But...  occasionally the following text would show up on the screen...  sometimes several times before a screen redraw covered the text:

Use of uninitialized value $vals in index at /usr/share/perl5/HTTP/Headers.pm line 264
Use of uninitialized value $vals in concatenation(.) or string at /usr/share/perl5/HTTP/Headers.pm line 267

After trying a few repairs to the webcollage Perl source, I just went into Headers.pm and fixed it there.  Here's the repair:

sub as_string
{
    my($self, $endl) = @_;
    $endl = "\n" unless defined $endl;

    my @result = ();
    for my $key (@{ $self->_sorted_field_names }) {
next if index($key, '_') == 0;
my $vals = $self->{$key};
if ( ref($vals) eq 'ARRAY' ) {
   for my $val (@$vals) {
my $field = $standard_case{$key} || $self->{'::std_case'}{$key} || $key;
$field =~ s/^://;
if ( index($val, "\n") >= 0 ) {
   $val = _process_newline($val, $endl);
}
push @result, $field . ': ' . $val;
   }
}
else {
          if ( defined $vals ) {
   my $field = $standard_case{$key} || $self->{'::std_case'}{$key} || $key;
   $field =~ s/^://;
   if ( index($vals, "\n") >= 0 ) {
$vals = _process_newline($vals, $endl);
   }
   push @result, $field . ': ' . $vals;
          }
}
    }

    join($endl, @result, '');
}

My changes are in red.  Not sure if the bug is in webcollage or if it is in Headers.pm but here ya go.  This is the fix.  Damn, I love open source!

**Disclaimer:  I am NOT a Perl programmer, I only know enough to successfully poke around Perl source and figure things out.
**Suggestion: Anyone running webcollage might want to consider two things: 1) it uses internet resources to perform searches and retrieve images; 2) some of the images shown on the screen could really get a person in trouble at most companies, not to mention what might happen should certain significant others see certain images.

Wednesday, June 8, 2016

New Minimal Linux Box Up and Running

Long Time No Post

Quite a few things have happened since my last post.  One of the most important, of course, is the completion of my little new Linux box.  Here she is...

Silicon Power Slim 60 GB SATA3 SSD drive.  It is only 2.5 inches wide, offers SATA3 6Gbps connectivity, and very energy efficient.  I selected this SSD because it was inexpensive, fairly fast, and rated as quite energy efficient.  Formatted this as ext2 and used it as my OS and swap drive.  Spent $30.




Toshiba 500 GB 7200 RPM hard drive.  It is your basic 500 GB 7200 RPM SATA3 hard drive.  It offers SATA 3 6Gpbs connectivity and a 32 MB cache.  I selected this drive because it was inexpensive, had good reviews and was the right amount of storage for my needs.  Spent 45$



ASRock C70M1 Motherboard with AMD Dual Core Ontario C-70 APU.  This mini-ITX motherboard/CPU combo offers very low power consumption, no unneeded video capability (I only needed basic VGA), up to 16 GB RAM, 64 bit processor/data bus width, four SATA3 6Gbps connectors and a host of other things.  No, this is NOT a gaming or server mobo/CPU.  The C-70  APU is only dual core and runs at about 1GHz but this board is extremely quiet, energy efficient and seemed to fit my requirements.  Total price of this board was $40 - not bad for motherboard and CPU.

I added a couple of Mushkin 2GB DDR3 RAM sticks for $22 and a basic APEX 250 watt power supply for 19$.  I tied it all together in an old Dell computer case and installed Debian Jessy.  The only little issue I had was the fact my little USB WiFi dongel wasn't supported natively.  Really, it was a minor issue.  After some research, the driver source was located on GitHub, it was easily compiled and installed.

So, for a total of about $156 I have a new little Linux box.  ( had an old flat screen VGA monitor just wasting space so used that).  Pretty happy so far.

More details and maybe a benchamark or two.

Tuesday, March 29, 2016

OMG .NET, You Are Crazy!!!

OK, so I am doing something simple...  adding a ControlParameter to a SQLDataSource.  I just want to add it as an optional filter.  The ControlParameter points to a TextBox.  Like this...

<asp:ControlParameter ControlID="txtFiltCC" Name="TCity" PropertyName="Text" Type="String" DefaultValue=""/>

Not only does the result return nothing, according to the Microsoft SQL Server Profiler, the query is never even sent to the server!!!  

What the HELL!?!?!?!?

I change the SelectCommand to not use the @TCity paramater and still...  no query sent.  The GridView bound to the SQLDataSource reports that no records were retrieved.   Hmmm...  makes sense since according to SQL Server Profiler, no query was sent.

Then I find the ConvertEmptyStringToNull property on the ControlParameter.  It's default is 'True'.  Hell, I don't want it to be null, so I change it to False.  Friggin SHAZAM!  The SQL query is sent and I get a result set.  Why the HELL would the ConvertEmptyStringToNull cause a query to not be sent, especially if the parameter isn't even used in the query????  This works fine...

<asp:ControlParameter ControlID="txtFiltCC" Name="TCity" PropertyName="Text" Type="String" ConvertEmptyStringToNull="False" DefaultValue=""/>

Really, Microsoft...  This is a crazy little piece in ASP.NET

So...  For anyone scratching their head about a GridView not being populated from a SQLDataSource that is using a ControlParameter pointing to a TextBox, this just may be the solution.

Thursday, March 24, 2016

Just a Little Old

So, using a five year old PC is 'sad,' eh?  According to Apple's Senior Vice President of Worldwide Marketing, Phil Schiller, about 600 million people are using PCs that are over five years old... "This is really sad."

Sad, eh?  A computer is a tool.  If that tool suits the user's need, why change?  Ya, I am a high-tech, hip, cool, well-informed geek of fifty years old but have been using the least expensive cell phones on the least expensive plans I could find; that is, until two years ago.  That was when we moved out to our little rural house on the lake, with barely any cell signal.  That was also when my personal interests turned to landscape and documentary photography.  My main camera, a Canon EOS Rebel T3i doesn't support geo-tagging, so I specifically bought a phone that had good RF power, supported geo-tagging photos and was on a carrier with proven coverage in our rural little hideaway.

And...  after 35 years of using computer screens, my eyes tend to strain with small screens, so I opted to get a 'new & improved' Android cell phone with larger screen.  And, I am happy I did.

In my garage there exists a hammer; a tool.  It is likely 20 years old.  It fits my key requirements: hammer a nail while allowing my hands to grip it properly and not cause undue strain on my wrists.  Why would I want to purchase a new tool if this one works?

My philosophy of PC upgrades is the same...  If the PC fits the requirement, why upgrade?  Only this year did my little HP Mini-110 stop working.  I didn't upgrade because it suited a certain purpose: small size, fully functional for web browsing, would run a word processor and was incredibly easy to throw in my motorcycle's saddle bag or car's trunk when going somewhere.  It was six years old this year.

We have a six year old desktop running as a media machine - it plays DVDs, streams video and music, and functions as a data-backup computer for the other PCs in the house.  Ya, it's six years old but why change???  It works fine!  A newer computer would offer nothing more given these required functions.

I have an old HP desktop from the early 2000's running Debian Linux.  That old fella is used for things like learning C++, ImageMagick and Python and experimenting with the wild side of Linux's low performance world.  It is perfect.

Why is the action of not upgrading a computer more than five years old "...really sad?"  Simple...  The person who make that statement receives a paycheck at least partially based on people upgrading more frequently than every five years, whether they need it or not.

Wednesday, March 23, 2016

Da' Truth!!!

So, there I am; innocently driving our ferret back from a veterinarian visit when what in my wondering ears should echo???  The ranting, irritating, disingenuous voice of Sean Hannity on our local AM radio station.

Now, I am neither liberal or conservative; neither republican or democrat.  I am a proud independent.  That stated, never have I listened to the Sean Hannity show when something was said that didn't make me giggle because of...  well...  Here's what I heard on the trip home from the vet...

Sean is ranting about how President Obama and Hillary Clinton were both "friends" with the Reverend Al Sharpton;  how Reverend Sharpton is a rabel-rouser, a firebrand, an agitator.  Those things, I just don't know and honestly don't really care.

Here is what made me LOL...  One of the voice tag lines for the show had something to do with the "Truth";  something like "Only the Truth!" or something like that.  OK...  Still don't care...  but then the LOL hit.  According to Mr. Hannity, the President and Ms. Clinton both "Kiss Al Sharpton's Ring."  Really?  I mean, did they kneel?  Were they all sitting?  Did they bow?  Was it one-on-one or a threesome?

Mr Hannity???  Pictures?  "Only the Truth" but you say they kissed his ring?  Do you have a reference for this?  Can you prove they kissed his ring???

Years ago these type of radio shows irritated me.  Now they simply provide my inner child with comic relief.  Keep talking!!!  I need the laughs!

Friday, March 4, 2016

Break-Even Performance/Cost Evaluation of Two Computers

So, my cheapie motherboard is on it's way and still waiting on my Pine64 to be shipped.  Hmmm...  I have been wondering how I can evaluate which platform will get me the best 'bang for the buck.'  Well, the main job of these machines is to use ImageMagick and maybe some other image utilities, to comb through hundreds (or thousands or millions) of photos and identify meteors.

So...  I start at total system cost.  A complete Pine64 should cost about $40 (inclusive of processing board, flash drive and power supply).  A complete, low-end AMD system using an AMD Dual-Core Ontario C-70* processor  (from NewEgg) should cost about $85 (inclusive of motherboard, processor, 4GB RAM, flash drive and power supply).

I want to evaluate which is a better value based on the amount of time required to process the same 100 images through the same processing steps.  It is really a pretty simple calculation; just required me to open some cranial doors to past algebra classes...  Those door hinges were rather creaky this morning. :-)

The calculation is simple and based on the ratio of  costs; in this case, 40/85.  Let's say the Pine64 requires 10 minutes to process 100 images.  For the AMD solution to be a better bang for the dollar, how many minutes should it take on the AMD platform to process the same 100 photographs?  simple...  10 * (40/85)  or 4.705 minutes.  Any longer and the Pine64 is a better deal.  Any less and the AMD solution is better.

And...  by inverting the ratio, we can solve how many minutes are required by the Pine64 to have a higher performance; 85/40.  Let's say the AMD requires 5 minutes to process 100 images, then 5 * (85/40) = 10.625 is the breaking evaluation point.  If the Pine64 takes less than 10.625 minutes, it is a better deal.

So...  Some algebra...
p1 - Price of system 1
t1 - Time to perform a process on system 1
p2 - Price of  system 2
t2 - Time to perform a process on system 2

t2 = t1*(p1/p2)  - use if t1 is known and looking for t2
and
t1 = t2*(p2/p1)  - use if t2 is known and looking for t1

If the real world results are less than or equal to the above results of t2 or t1, then that system is better in terms of performance/cost.

Now, back to something a bit more simple - website migrations, SQL optimizations and thredifying single thread processes...  oh boy oh boy.

* - Processor and Board Disclaimer - Yes, I know the AMD C-70 is an older, less powerful processor.  That, however, means that available motherboards are quite inexpensive.  Plus, the power consumption of the C-70 is really very low - big plus.

Thursday, March 3, 2016

OMG! News Flash! SalesForce & TITSUP

HAHA  OH MY GOD!!!  Thanks goes out to Simon Sharwood and The Register for this article about a Salesforce Outage.

I simply MUST quote their update:
"One of Salesforce.com's European instances is enduring a lengthy un-planned PITSTOP incident – that's a Partial Inability To Support Totally Optimal Performance, a whit below our other status indicator of a Total Inability To Support Usual Performance or TITSUP."

HAHAHAHAH!!!!!  OH MY!!!!  TITSUP!!!!!  Never have I seen TITSUP and Salesforce on the same page before.  SO apropos, So right.  Thanks for the Thursday morning laugh!!!

**Disclaimer - I am not a fan of Salesforce, its abysmal development environment, its incomplete programming language APEX, its poorly thought out data structures and generally the whole Salesforce concept and system.