All Glory to the Hypnotoad!

Show me the glory!

hypnotoad

Ok, I get it. Make it stop.

When I saw a really neat one line random color generator in a blog post, I saw it as an opportunity to glorify the hynotoad. This is the magic part:


(~~(Math.random()*(1<<24))).toString(16) 

In that line, ".toString(16)" gives us a hexadecimal value. We need to constrain our random numbers between 0 and ffffff, hexadecimally speaking, or 16777215 when converted to an integer. "1<<24" is a fancy and short way to achieve 16777216 using bitwise operators. The double tilde is a shorthand to lop off the decimal places that the call to "Math.random()" gives us. It could also have been achieved using "parseInt" on our random value.


(parseInt(Math.random()*(16777216))).toString(16)

This works just as well, but isn't nearly as cool looking.

Dropping our random color generator into a setInterval produces pleasing results.


setInterval(function(){
  var toads = document.querySelectorAll('.hypnotoad');
  [].forEach.call(toads, function(toad){
     toad.style.backgroundColor = "#"+(~~(Math.random()*(1&lt;&lt;24))).toString(16);
  });
}, 80);

Apply your hypnotoad class to any element you want to begin glorification.

Here's a link to a codepen, if you like that sort of thing

Spinning Diesel: Knowing What You Don’t Know

The article I will be referencing:
Huffington Post Takes A Piss On Diesels

Huffington Post incited (rage-induced) enthusiasm today. For that, I thank them. The lead picture also gave me a pretty good chuckle. Thanks for that, too.
safe_image

I can start with the obvious: this isn’t an anti-environmental group agenda and it has NOTHING to do with Obama. Sure, there are jerks that smoke screen people (I have personally had “coal rolled” upon me). I put this in to the same category as having my house egged, TP’d, or graffiti’d. It’s unwanted, unwarranted behavior that should have consequences. If that was the slant of the article, this blog post wouldn’t exist.

The environmental issue
Yes, fossil fuels take carbon from far below the earth’s surface and throw it into the air we breath. This is a consequence of our reliance on combustion engines of all kinds. Did you know that the Rudolph Diesel’s first diesel engine ran on peanut oil? In fact, the aim of the engine was to allow farmers to grow their own fuel. It wasn’t until later that fossil fuels were used to power these engines and get Rudolph’s name offensively slapped onto the product.

Diesel engines carry just about everything you buy from the source to the shelves. Diesels are used because they have more torque (ability to pull heavier loads) and operate more efficiently than spark ignition engines (the kind that use gasoline). Most of the rest of the world prefers this engine due to the fuel economy and fuel flexibility they offer.

The debate rages on about whether gasoline engines or diesel engines are worse for the environment. Speaking in terms of the United States, gas engines have far greater numbers, get worse fuel economy when compared to their diesel counterparts, and are used frequently to carry light loads (a person or two) very short distances. Diesel engines distribute more particulate matter (soot), but get better fuel economy and are used to carry heavy loads long distances. Ultimately, both engines are burning what was once crude oil.

Why is this even happening?
Mechanics (hobbyists and professionals, alike) have been modifying pickups for generations. These trial and error modifications have lead to advances in power and fuel economy that winds up in stock production models. More power means more efficiency when power is needed. A handful of idiots abusing this power does not an anti-environmentalist group make.

I will attempt to explain black smoke and diesel exhaust. The article was correct in stating that too much fuel in the chamber leads to partially burnt fuel exiting the tailpipe. To achieve power in a compression ignition engine, the main variable to play with is the amount of fuel injected into the combustion chamber at each compression stroke. Eventually, you reach a tipping point where more fuel is being injected than can be thoroughly burned. Simply put, you get a lot of power at the expense of excess fuel use.

My thoughts
This is an example of sensationalism. How social media can be used to whip people into a frenzy. I think it’s a fair assumption that a writer at Huff Post was a victim of a cloud of exhaust. They then set their pen (keystrokes) against their attacker. The outcome is an uninformed witch hunt against the vehicles that get work done and their performance modified cousins.

It all comes down to knowing what you don’t know. I have a very limited scope of knowledge. I just so happen to stumble on an example that I do have education and experience in. This enabled me to read between the lines and see the truth from the exaggerations and spin. How many other instances are there were I fall into the sensationalist trap and get riled up over spin? I’ll be sure to watch out for that.

Receiving Emails in Redmine with GMail on Dreamhost

Setting up Redmine to create issues from emails, the way I did it, mostly involved getting a cron job running to rake redmine:email:receive_imap. The basic steps are:

    1. Create a GMail Account
    2. Add a script to run at intervals (I am running it every 30 – */30 * * * *

I created shell script in it’s own file that reads like this:

#!/bin/bash
/home/xxxx/.gems/bin/rake -f ~/xxxx/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=imap.gmail.com ssl=SSL port=993 username=xxxx@gmail.com password=xxxx project=xxx tracker=bug priority=Immediate allow_override=project,tracker,priority --trace

One thing that hung me up was that for ruby gems to be in the path in the cron execution context, you’re crontab needs to look like this:

*/30 * * * * . /etc/profile && /path/to/script.sh

Without the “. /etc profile” part, your script won’t know what the hell a “rake” is.

I can’t get the “assigned_to” default to work, but I’m happy with it running properly for the time being.

Windows 8.1 and Visual Studio

I upgraded my Sony Vaio Pro 13 to windows 8.1 immediately after taking it out of the box. My intention was to use it as a development machine, so I planned to slap Visual Studio 2013 RC on next.

I grabbed the web installer and ran it. It started, ran for three seconds, and promptly crashed. Odd…maybe an issue with the web installer? I grabbed the .iso and mounted it. Same thing. Ok…ok…all part of trying to install a release candidate. I retreated back to the safety and comfort of VS2012. Oh no! Same problem!

At this point I did some googling and found out it has to do with a combination of Windows 8.1 and an Intel display driver. I changed my display driver to the generic one using the device manager and tried again. VS2013 still had issues, but VS2012 worked. I haven’t tried updating my display driver back and launching it yet. I’ll come back to this.

UPDATE
After several Sony and several Visual Studio/Windows updates, the issues are no more.

SVN Repo Admin – Commands to Remember

Things I need to remember about SVN on my server that I use less and less:

Make A Repo:

sudo mkdir /var/svn/
sudo svnadmin create /var/svn/
sudo chown -R www-data:www-data /var/svn/
sudo service apache2 restart

Add a user

sudo htpasswd2 -m /etc/apache2/dav_svn.passwd

document.getElementBy Whatever I Want

During re-factoring of a dreadful legacy app, I often came across javascript like this:

document.getElementById('firstName');

with HTML like this:

<input type="text" name="firstName" />

I was confused as to how this ever worked and made it into production. I always assumed that getElementById would get an element by it’s Id. This is for the most part true. However, in earlier versions of IE, getElementById would also work with name attributes. It’s this kind of “IE Logic” that did immeasurable damage to both development practices and the web at large. Even as a convenience feature, it should not have been used. When a function explicitly says what it does in it’s name, don’t use it any other way.

In hindsight, if you were of the opinion that “we only use IE here so it doesn’t really matter”, you were wrong. It does matter.

The Book of G’Kar

What is Truth? What is God?

When a question like this is asked on TV, the best answers come from science fiction. Babylon 5 presented this answer through the character G’Kar:

If I take a lamp and shine toward the wall, a bright spot will appear on the wall. The lamp is our search for truth, for understanding. Too often we assume the light on the wall is God, but the light is not the goal of the search, it is the result of the search. The more intense the search, the brighter the light on the wall. The brighter the light on the wall, the greater the revelation upon seeing it. Similarly, someone who does not search, who does not bring a lantern with him, sees nothing. What we perceive as God is the by-product of our search for God. It may simply be an appreciation of the light, pure and unblemished, not understanding that it comes from us. Sometimes, we stand in front of the light and assume we are the center of the universe – God looks astonishingly like we do! – or we turn to look at our shadow and assume that all is darkness. If we allow ourselves to get in the way, we defeat the purpose – which is to use the light of our search to illuminate the wall in all its beauty and all its flaws, and in so doing, better understand the world around us.

The writing for G’Kar rarely disappoints. For that, I will continue to suffer through season 5.

Codility

For weeding out developers from fakes, hit up codility.com.

I took the demo test and found it to be a fair challenge. Any developer mid-level and up should have no issues completing the test. They can choose from a variety of languages to complete the task. Hell, their language choice might even be a great topic during an interview.

I have sat through far too many interviews where the candidate had no business even applying – but somehow made it through the phone screens. From now on, CODE MUST BE WRITTEN!

jQuery Font Resizer

First, the CSS:

body, a#medium {
font-size:14px;
}
body.small, a#small{
font-size: 10px;
}
body.large, a#large{
font-size: 18px;
}

Second, the JS:

$(function() {
$("a#large").on("click", function (event) {
$("body").removeClass("small");
$("body").addClass("large");
event.preventDefault();
});

$("a#medium").on("click", function(event) {
$("body").removeClass("small");
$("body").removeClass("large");
event.preventDefault();
});

$("a#small").on("click", function(event) {
$("body").addClass("small");
$("body").removeClass("large");
event.preventDefault();
});
});

Third, the HTML:

<a id="small" href="#">A</a>
<a id="medium" href="#">A</a>
<a id="large" href="#">A</a>

Check it out