Workin’ on the company website…

I’m working on the PacKay Productions website today, and it occurred to me that since I’m using git on my desktop to track changes to our WordPress theme, I could also use it to sync changes to my server.  Thinking about it, I knew the webserver would be a remote repository, and I could publish my changes by typing “git push web”, but I figured there had to be things I was overlooking, so I hit Google to see what other people had come up with.

That’s when I found “Using Git to manage a web site.” It not only pointed out what I was overlooking–that if I made the website itself a git repository, I’d also be syncing all the .git files into the webroot and possibly exposing them to the public–it also had a solution: using the post-receive hook to deploy changes from a git repository sitting outside the webroot into a directory inside the webroot.

It’s a quick little read.  I like it.

February’s almost gone!

Once again, I’ve gone months between updates.  But I have been busy.  Folks who follow my social media feeds know that I was strongly considering a career change in January, but ultimately I decided not to jump ship from my current employer for a cool new startup; instead, I decided to stay on with my employer and take on some new responsibilities.  It will be challenging, because not everything they’ll have me doing will be things I consider to be part of my core competencies, but I’m looking at it as an opportunity to force myself to grow and learn new skills.  If it doesn’t work out, I can always find a new startup to go to.

On the puppet front, Kay and I have been busy.  Kay gave me a design for our website and told me she wanted it up by Valentines Day, so I put in some late nights learning how much CSS has changed since the last time I played with it and I was able to build a WordPress theme to generate the design just in time.

We’ve also been filming with the puppets a lot.  For Christmas, we whipped up a special introducing my monster, Rudy…

And just this past Friday, we posted a second video featuring Rudy and Kay’s cat, Ket, that pays homage to those old parenting films of the 1950s:

If you want to be kept up to date on everything we’re doing with the puppets, just join our mailing list!

Subscribe/Unsubscribe to PacKay Productions Announcement Emails
* Required



Why you should never make the Administrative Contact for an internet domain a non-technical person…

This morning I sat down to look over my new email, and a message with a subject line containing “FINAL NOTICE” caught my eye.  When I opened it, I saw something that had every appearance of being a bill telling me I needed to respond by February 6:

It's very carefully worded, isn't it?
A painstakingly worded request for me to complete my domain’s “search engine registration”.

I found myself reading it very carefully, even though it turned out to be exactly what I thought it was: a spear phishing attempt.  The sender wanted me to sign up for “search engine registration” for my domain.  Failure to do so would “make it difficult for my customers to locate me on the web.”

Baloney. My site is already well-indexed by all the major search engines; I don’t need to pay someone $75 per year ($295 for 10 years or $499 for a lifetime subscription) to periodically submit my domain name to the search engines’ “Add URL” page.

However, this is exactly the kind of thing that, as the administrative contact on my domain, that I get all the time.  Sometimes people registering domains make the mistake of making the administrative contact for a domain a person who isn’t technical.  I did this myself about 15 years ago, and it came back to bite me.

Periodically, I get postal junk mail from a sketchy domain registrar called “Domain Registry of America” that does it’s best to appear that it’s a branch of the US government.  The junk mail informs me that my domain registration is about to expire and that it’s necessary for me to renew it–with them. Naturally, I toss these solicitations in the shredder with the rest of my junk mail.  Unfortunately, at this time, I was volunteering as the webmaster for a non-profit group, and I’d registered the domain name and put the person in charge of that group down as the administrative contact (for the purposes of this story, let’s call this person “Martin”).  My rationale was that, if I ever got hit by a bus, it would be easier for Martin to regain control of the domain and pass it along to my successor.

Well, one day, I got an email saying that the new registrar for this domain was DRoA, and Martin’s name was all over the email.  I called up Martin and asked what was going on. “Yeah, I got a bill saying that the website was expiring, so I paid it.  Did you forget to do something?”  After going back and forth over what happened, it finally came out that Martin had gotten one of these DRoA notices, thought it was a bill, and paid it.

I scolded Martin appropriately and made him promise not to pay any more “bills” that came in the mail without first consulting me.  I then tried to get the money Martin had paid refunded.  It turned out that I couldn’t.  Even though Martin hadn’t read the solicitation completely, it was carefully worded to explain that this was not, in fact, a bill, and that sending money to Domain Registry of America would transfer the domain’s registration to them.  Fortunately, all I had to do was pay for an additional year’s registration with our original registrar and our registration was transferred back.  I told Martin that paying DRoA’s exorbitant prices for a year’s worth of domain registry (twice what we were currently paying) was his personal penance for not carefully reading something before giving away his credit card number.

Flashing back to the present, I find that this notification also contained a block of small print disclaiming that it was a bill:

By accepting this offer, you agree not to hold DS liable for any part. Note that THIS IS NOT A BILL. This is a solicitation.  You are under no obligation to pay the amounts stated unless you accept this offer. The information in this letter contains confidential and/or legally privileged information from the notification processing department of the DS.  This information is intended only for the use of the individual(s) named above. There is no pre-existing relationship between DS and the domain mentioned above.  This notice is not in any part associated with a continuation of services for domain registration.  Search engine submission is an optional service that you can use as a part of your website optimization and alone may not increase the traffic to your site.  If you do not wish to receive further updates from DS send an email to unsubscribe@sesubmission.com and in the subject line only put remove to unsubscribe.  If you are not the intended recipient, you are hereby notified that disclosure, copying, distribution or the taking of any action in reliance on the contents for this letter is strictly prohibited.  * 100% satisfaction guaranteed, you may request a refund within 30 days.

Fortunately, I’m the intended recipient, so my “disclosure, copying [and] distribution” of the contents of this letter aren’t strictly prohibited. 🙂

Posted in Web

Keeping track of when I need to leave work…

One of my big problems with working in NYC and living in NJ is there are “departure windows” where I can catch the right subway to get the right PATH train to catch the right bus in NJ to get me home. Otherwise, I get stuck cooling my heels somewhere in Jersey City waiting for the next bus. I coded myself up a tiny webapp using a jQuery countdown plugin to help me keep track of when my departure windows are.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>BMC Departure Countdown</title>
<style type="text/css">
@import "jquery.countdown.css";

#homeA, #homeB, #homeC, #homeD, #homeE { width: 240px; height: 65px; margin: 10px}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" src="jquery.countdown.js"></script>
<script type="text/javascript">
$(function () {
	var toDay   = new Date();
	$('#today').text(toDay.toLocaleDateString());

	var home804 = new Date(toDay.getFullYear(), toDay.getMonth(),
	                       toDay.getDate(), 18, 57, 00);
	$('#homeA').countdown({ until: home804,
                                description: 'Leave @ 6:57, Home @ 8:04 pm'});

	var home849 = new Date(toDay.getFullYear(), toDay.getMonth(),
	                       toDay.getDate(), 19, 51, 00);
	$('#homeB').countdown({ until: home849,
                                description: 'Leave @ 7:51, Home @ 8:49 pm'});

	var home934 = new Date(toDay.getFullYear(), toDay.getMonth(),
	                       toDay.getDate(), 20, 27, 00);
	$('#homeC').countdown({ until: home934,
                                description: 'Leave @ 8:27, Home @ 9:34 pm'});

	var home1019 = new Date(toDay.getFullYear(), toDay.getMonth(),
	                        toDay.getDate(), 21, 18, 00);
	$('#homeD').countdown({ until: home1019,
                                description: 'Leave @ 9:18, Home @ 10:19 pm'});

	var home1104 = new Date(toDay.getFullYear(), toDay.getMonth(),
	                        toDay.getDate(), 21, 59, 00);
	$('#homeE').countdown({ until: home1104,
                                description: 'Leave @ 9:59, Home @ 11:04 pm'});
});
</script>
</head>
<body style="text-align: center">
<h1>BMC Departure times for<br><span id="today">today</span></h1>
<center>
<div id="homeA"></div>
<div id="homeB"></div>
<div id="homeC"></div>
<div id="homeD"></div>
<div id="homeE"></div>
</center>
</body>
</html>