Tribalism and Hate.

Food for thought:

Tribalism is the default state of humanity.  Every other form of extremist behavior is a realization of that: Racism, Homophobia, Islamophobia, antisemitism, bullying, (fill in the blank)-ophbia,  heck even the all or nothing in the political divide .. all the same thing.   We are programed to find out what's different.

We seek out what's different from us and attempt to remove it not out of hate but an unconscious survival instinct.  We are ensuring our tribe receives the resources it needs (the bottom tiers of Maslow's Hierarchy of Needs).   This instinct dates back to the days where we lived in the jungles and we competed for food, shelter, mates, etc.    The world may have changed but the genes that made it a survival instinct for thousands of years are still there and we all act on them, consciously or unconsciously.  

I am not condoning the behavior.  I am not excusing the behavior.  I am trying to understand the behavior.  

  Posted: Mar 15, 2019

The Last 4 Digits of you Social Security Number

So, you’re applying for a job and the recruiting agency asks you for your resume, wants to know when and you graduated High School and want to know your last 4 digits of your Social Security Number (for tracking purposes).  You may not realize it, but you’ve just turned over enough information to allow someone to figure out your Social Security Number.

The first 3 digits of your SSN indicate the State the SSN is issued from and the next 2 numbers (the group number) are only issued in certain years.  If you were born after 1988 a SSN was issued automatically at birth.  Prior to that most people got a SSN when they got this first job (generally sometime between their 16th and 21st birthday).  When you consider that the average person attends high school in the state they were born and graduate high school between 17 and 19 you can narrow it down so there's a 9% chance the attacker can guess your SSN in 1000 guesses.  That might sound safe but it's a trivial task to build a computer program to run the possibilities. 

The last 4 digits are the part of your SSN that’s unique and not predictable by any algorithm.  

So when organizations other than your employer, a back or the government ask you for your last 4, be aware of what you might be giving up.

  Posted: Mar 6, 2019

The Banks Are Missing a Marketing Opportunity During the Shutdown

Food for thought: The banks are missing a big good will opportunity. They could easily set up a program for federal workers. If they bring in their December pay stub, and have a FICO score over 700 the worker can get a loan. Structure it with a 2% fee up front and defer payments and interest until 15 days after the government starts issuing checks. 

So if you got paid $1000 a pay period you’d get $980 a pay period until this mess is fixed. If they walk into the bank when they get their check and sign it over to the bank there’s nothing else due.

The bank would lose a little money on the deal but gain good will. They could even waive the 2% for customers which might induce some folks to open an account with them which would be worth more to the bank in the long run than the 2%. If you market the hell out of the program they can buy a lot of brand loyalty.


I spoke to folks about this yesterday and I got some DMS.  Here are some additional thoughts:

  • Why a FICO score of 700?
    It's been a long while since I've needed to access credit or have done any financial coding.  I remembered that 700 was considered "good".  I was wrong 670 is "good" so 670 would be the benchmark.
  • Isn't using the FICO score discriminatory?
    Yes, all lending shows a bias towards people with a good credit history.  The bank has a responsibility to  their shareholders and depositors to ensure that loans are paid back.  Perhaps banks could ignore the FICO score for their current customers with Direct Deposit with the understanding that the bank is going to slurp the money back automagically when paychecks resume.
  • What would happen if someone didn’t pay?
    It would convert to a normal  personal unsecured loan.  I believe 24 months at around 15% would be normal.
  • Why the 2% fee? 
    To defray the bank’s fixed costs / administration fees.  They are already lending money below the discount rate.  Let’s face it the Payday lenders will be charging 20%.
  • What if people decide not to pay the loan back?  / What if people scam the system and get loans from multiple banks (if more than one bank ran similar programs)?
    The same as if someone doesn’t pay an unsecured loan back.  Court, sheriff, reposition of funds, paycheck garnishment, etc.
  Posted: Jan 12, 2019

How to Report a Bug

Like most developers, I get my fair share of bug reports sent to me.  The problem is most reports I get either have wrong information or no information at all for me to work with.

Today I had an issue with one of my hosting providers and wrote up the following report:

I am having problems logging into the dev region of my <redacted> site via SFTP.

I have checked your status page and it appears you don't have any outages at this time.

I have attempted to log in via my IDE and the command line using sftp -o Port=2222 <redacted>@<redacted>n and am getting a “Permission denied, please try again.” error message.

I am using the following credentials:

Host: <redacted>
Username: <redacted>
Port: 2222
Password : <redacted>

I have verified my password by logging out and back into the dashboard as well as logging into  another site I manage via SFTP.  The password I’m entering works in those places.

I was doing development on this site as recent as Wednesday and it was working fine.

The goal is for you to give enough information to whoever is on the other side of the ticket to recreate an understand the issue.  You should include a way to reproduce the issue, what software are you using and steps you might have taken to mitigate the issue.

Often times people who report bugs try to diagnose the issue ("I'm pretty sure it's a virus").  I know people are trying to be helpful when they do this but it's counter-productive.  The tech at the other end of the ticket needs to start by disproving your theory instead of researching your issue.

  Posted: Jan 4, 2019

Storing a Website's Logo in a Font

One thing I do like about programming is seeing how other people handle the same situation in a creative way.  

As you know, almost every website has a logo and generally speaking, the logo is stored in a graphic (png, jpg gif, etc).  If you need alternate version of the logo (size of color), you edit and upload a new image.  I've seen sites use SVG files to make scaling the image easier, but generally speaking those sites tend to be harder to maintain.

Today, I was reverse engineering a site and the logo was stored as a webfont loaded (a WOFF file).  The developer vectorized the logo and turned each color group into a separate color.  So if you take the FedEx logo as an example:

FedEx Logo

The blue "Fed" would be one character in the font file and the orange "Ex" is another chapter.  Once that's done any editing can be done via CSS.  So if you're laying the logo on on a blue background change change the color of the Fed part to white with color: #FFF.  You can control the size of the logo via the font-size property.  This felt like a neat way to handle it. 

  Posted: Jan 1, 2019

Ham Steak with Apples

Nothing better than apples and any pork product.  Here's a quick and simple dish I made last night and served with green beans and rice.  


  • 1 - 2 lb ham steak
  • 1 tablespoon butter
  • 1 apple cut into cubes (I used a Fuji Apple)
  • 1 cup apple cider
  • 1 teaspoon cinnamon
  • 1 tablespoon cornstarch
  • 1 tablespoon water


  1. Preheat a 12" (number 10)  cast iron skillet under medium-low heat.
  2. Add the butter to the pan allow it to melt
  3. Add the ham steak to the pan.  Fry from 3-4 mins on each side.
  4. Add the cider, apples and cinnamon to the pan. Deglaze the pan (Scrape up and bits of ham that stuck the pan).  Bring to a boil and simmer for about 5-10 mins (depending on how hard / soft you want the apples)
  5. Combine the water and cornstarch in a bow.  Add to the pan and stir as the mixture thickens.
  6. Return the ham to the pan,  Flip and stir to cover the ham with the apple mixture.  Let it cook for a couple of minutes.

Share and Enjoy!

  Posted: Dec 7, 2018

Brussel Sprouts with Bacon in a Creamy Cheese Sauce

I'm not a person who generally cares for Brussel Sprouts.  This was yummy (although I did bribe myself with cream and bacon fat).  Real discussion with my better half:

BH:  "Butter, Cheese, Cream, Bacon ... that's a lot of fat".

Me: "You want me to eat brussel sprouts, right?


  • 10 ounces (300 g) bacon, cut into strips
  • 2 tablespoons butter
  • 20 oz Brussel sprouts (I used frozen ones if you use fresh cut them in half)
  • Salt and pepper to season
  • 3 Tables Spoons chopped garlic
  • 1 heavy cream
  • 1/3 cup grated mozzarella
  • 1/4 cup grated parmesan cheese



  1. Preheat oven to 375°F
  2. Fry the bacon in a large oven-safe skillet over medium heat until crispy. I used my 12" cast iron pan.  Use a slotted spoon to transfer to a paper towel lined plate to soak up some of the oil. Set aside.
  3. Drain most of the bacon fat from the pan, leaving about 1-2 tablespoons for added flavour (adjust this amount to your liking). In the same pan, melt the butter, then add the Brussels sprouts and season with salt and pepper. Scrape up any browned bits from the bottom of the pan, and cook while stirring occasionally, for about 6 minutes. The edges should start crisping and slightly charring. 
  4. Add in the garlic and stir it through the sprouts for a minute, until fragrant. Pour in the cream, reduce heat down to low and allow them to simmer until tender (another 3-4 minutes).
  5. Add the bacon in and give everything a good mix to combine all of the flavurs together. Top the sprouts with the mozzarella and parmesan cheeses. Bake until cheese is bubbly and sprouts are done to your liking (about 15 minutes).
  6. Season with a little extra pepper before serving.

Share and Enjoy!

Edit: 12-1-2018

Potential Alterations:

  • Use fresh sprouts and cut them in half
  • If it's a little thin before you put it in the oven mix together 1 and 1/2 teaspoons cornstarch mixed with 1 tablespoon water into a slurry and add if before you put it in the oven.
  • Anne felt I should've reserved some bacon and used it as a topping when it was done.
  • Before you pull it out of the oven put turn on the broiler for 2-3 mins to brown the cheese.
  Posted: Nov 6, 2018

Responding to my Spam

Got a piece of SPAM for SEO services.  I'm in a snarky mood so there are a couple of things in the email to make fun of.

Dear Team,

Team? I guess that include Frosty, the Cat and Harley, the Dalek made of motorcycle parts.  Hey GUYS! we're a team!!!!

bowtiesarecool team team. Camera Shy: Harley The Dalek


Take a break from your busy schedule and give attention towards Organic search engine traffic for Don’t you think to start a fresh and better internet campaign? Yes, you must be interested to drag revenue by putting your website top in search engines.

Thief Bag of Money
Me, Dragging some revenue

How do you drag revenue?  Do I get one of those bags with a dollar sign that thieves use in cartoons and drag it behind me?  Or do I have to be in drag in order to get the revenue?

We found some major factors – You need to focus.

You need to focus.  You are getting sleepy... cluck like a chicken.

Deprived website content.

Yes, I'm guilty.  I deprive my content.  I have locked my content in the cupboard under the stairs for years.  I don't feed it.  I beat it. I poke it with a sharp stick.

Stumpy image optimization.

Stumpy the Pirate

I've been a technologist for over 30 years.  Web developer for over 10 years.  I'm a photographer.  I do my fair share of image editing and manipulating.  I have no idea what makes an image "stumpy".  Perhaps arms and legs are getting cut off and leaving stumps in their place.

Inappropriate Social Media campaign

I knew those images of me in a speedo would backfire on me.

PSI:  I am not spamming. I have studied your website and believe I can help with your business promotion. If you still want us to not contact you, you can ignore this email or ask to remove and I will not contact again.

  1. Yes, you are spamming
  2. You studied my website so much that you missed that it's a personal blog and not a business
  3. Thank you, I will be ignoring this email

PS II: I found your site using Google search and after having a look over your website I recommend you to implement future technologies such as HTML5 and Responsive Design to make your site more accessible in mobile phone, tablets, desktop etc.

  1. If you found my website via Google Search, then my SEO must be OK, Right.  I mean YOU FOUND ME.
  2. HTML5 and Responsive design are current technologies, not "future" ones.
  3. This site is responsive, uses HTML5 and is built on bootstrap. 


  Posted: Sep 27, 2018

Hosting Separate Websites from the Same Container on Pantheon

I know I've mentioned that I've moved all my sites over to Pantheon running on Drupal 8. I have a number of sites (blog, photography, professional, an about page, and a number of other private sites). Now I don't get a ton of traffic I wanted to find a way to host all my sites out of the same pantheon continuer. This is both to reduce costs and time I spend doing core / contrib updates. I want each site to have it's own look and feel (a separate theme) and live under its own domain.

It occured to me that I could easily organize my content by path (/blog/* for the blog content, /professional/* for the web development content, etc). This can be driven taxonomically using Pahtauto to handle the paths.

As far as having a separate theme for each site is concerned I could use the switch page theme module.  This feels like a replacement for the themekey module from Drupal 7.

Next I thought about how to handle the page redirection.  I looked at my options:

  1. Pantheon doesn't support multisite drupal. Even if they did, I'd still have to perform updates on each site individually.
  2. Domain Access could do this, but feels like overkill. It hasn't always been the most stable of modules and it's a lot of a little.
  3. I could write a custom module to do redirect to the proper domain.

So as I thought about writing a module, I realized that it would be inefficient for Drupal to do a full bootstrap just to redirect and having to start the process again.  So I decided to add the redirects to settings.php.

    if  (isset(
$_ENV['PANTHEON_ENVIRONMENT']) && ($_ENV['PANTHEON_ENVIRONMENT'] == 'live') && ($_SERVER["PATH_TRANSLATED"] <> "/opt/pantheon/drush8/drush.php")){
        if ((
$request_uri[1] == "") && ($_SERVER['HTTP_HOST'] == "" ) ){
header('HTTP/1.0 301 Moved Permanently');
            exit ();    
        elseif ((
$request_uri[1] == "professional") && ($_SERVER['HTTP_HOST'] <> "" ) ){
header('HTTP/1.0 301 Moved Permanently');
            exit ();
        elseif ((
$request_uri[1] == "") && ($_SERVER['HTTP_HOST'] == "" ) ){
header('HTTP/1.0 301 Moved Permanently');
            exit ();
        elseif ((
$request_uri[1] == "blog") && ($_SERVER['HTTP_HOST'] <> "" ) ){
header('HTTP/1.0 301 Moved Permanently');
            exit ();
        elseif ((
$request_uri[1] == "") && ($_SERVER['HTTP_HOST'] == "" ) ){
header('HTTP/1.0 301 Moved Permanently');
            exit ();
        elseif ((
$request_uri[1] == "sean-reiser") && ($_SERVER['HTTP_HOST'] <> "" ) ){
header('HTTP/1.0 301 Moved Permanently');
            exit ();


The code is rather simple. There's a pair of if's for each domain, one to redirect the root of the domain to the right path, the other to redirect to the proper domain. The bit about drush is rather important if you're on pantheon. If you're useing terminus to run drush (or their interface to clear cache), the redirect will screw things up.

The only downside to this approach is that you wind up with the subdirectory in the URL after the redirect, but I willing to accept that to get things working.

  Posted: Sep 15, 2018

Thinking About Ensuring Content Longevity

Just listened to Dave Winer's podcast about building a For The Record Blogging System. As he rightly points out that the problem with such a system isn't the actual technology to create / build the post, but ensuring that the post lives on forever. We have lost so much of the history of the web as as companies who hosted our content have gone out of business or changed their focus.    People use Medium for this today, what guarantee do we have that they will be up and running tomorrow / next month / next year?

My initial thought about this was "people should host their own content on their own domain".... and then I thought about it.  If I were to die tomorrow, everything I host would slowly fade away:

  1. When my credit cards are cancelled my host will discontinue service and *poof* my content will be stricken from the web. Same goes for my domains, eventually they'll expire and then "Bye Bye"
  2. If I make arrangements to make sure hosting and domain renewal aren't a problem; eventually they'll be a problem somewhere on the server. Maybe a security update will be released that won't get applied and the server is hacked. Maybe a drive failure. Maybe DB corruption. At some point the lack of a sysadmin will become a problem.
  3. If I make it through this hurdle eventually things will slowly slip away via entropy. HTML, CSS and Javascript features will be deprecated and removed. File formats will die out of favor with new and shiny things replacing them (think flash). 
  4. Eventually my estate will run out of money and #1 will happen.

Perhaps by random coincidence the next podcast that popped up on my player was Jason Scott's.  For those not in the know, Jason works at the Internet Archive, a non-profit founder by Brewster Kahle which is attempting to archive ... well ... everything.  You may know the archive from the wayback machine or collection of older games.  Those are only a small part, they are truly trying to be a modern day Library of Alexandria.  If it can be digitized and archived the IA is trying to archive it. 

Now, the wayback machine, isn't the direct solution to this problem but the fact these things popped up back to back got me thinking about the problem.

  Posted: Sep 9, 2018