Posts tagged “technology”.

Script it

I had another IcyDock, firewire, external, drive enclosure fail again. So instead of throwing good money after bad, I instead acquired a NAS (network attached storage) device. Specifically, I got a Synology DS211J from Amazon with reward points on my credit card. Yes, I paid $0 for it and it’s the best money I never spent.

The NAS, which I named NASty, holds two SATA drives and has a host of RAID configurations available. I have two 2TB drives mirrored, split into three Volumes, with access controls, users, passwords, and a smorgasbord of applications, not the least of is a VPN server so I can access my files remotely when I’m away from home. On one Volume I moved all of my Music, and set iTunes to look on the remote drive for my music database. Which is good for sharing my music through the house, but was causing me some pain and mental anguish on my laptop when I forgot to first ‘mount’ the drive before opening iTunes.

When opening iTunes prematurely, as the case is, my podcasts would download to the local drive and I would have to clean it up manually to get it back onto the NAS and have it recognized in the iTunes program. Annoying. So, I thought to myself, I should script it so the NAS music share mounts first, then iTunes opens. So… I programmed an iTunes Launcher for my new setup.

-- iTunes Launcher
-- for use with a music database stored on a remote NAS

-- define our Function to check if an application is running
on appIsRunning(appName)
	tell application "System Events" to (name of processes) contains appName
end appIsRunning

-- check for the existence of our music share
try
	alias "/Volumes/music"
on error
	-- if the share doesn't exist mount it
	tell application "Finder"
		mount volume "music" on server "NASty" in AppleTalk zone¬
			"*" as user name "music-user" with password "pass-word"
		-- not my username nor my password… 
	end tell
end try

-- Test to see if our mount is really there.
tell application "Finder" 
	if not (exists POSIX file "/Volumes/music/itunes/.NAStyIsMounted") then
		display alert "NASty Music Share not Mounted!" as critical giving up after 90
		return
	end if
end tell

-- Is iTunes running 
if appIsRunning("iTunes") then
	-- if so, do nothing
else
	-- otherwise start iTunes
	launch application "iTunes"
end if

-- bring iTunes window to the foreground
tell application "iTunes"
	activate
	tell window 1
		if not visible then set visible to true
	end tell
end tell

So just a tiny little script that checks to see if the music share is mounted already. If not, I mount it. I then make sure it mounted, if I can’t see the hidden file on the share I go OLD SCHOOL and ABEND. Otherwise I continue and check to see if iTunes is running. If not, I start it. And to finish up, now that I know iTunes is running, I bring it to the front.

I saved the script as an application. I changed the icon from the default AppleScript icon to a custom icon. Then I dropped the Launcher program onto my dock. So now I not only have a graphical reminder on my dock, but I removed the iTunes icon so I can’t accidentally open just the program without mounting the share first.

Amazingly, it works like a charm.

Managing spam with google

If you use google to manage your personal domain email I have worked out a hack to have the best spam filter possible.  This article is all about unsolicited junk email and stopping it dead.

Why

I have an irrational need to make sure I get all my email.  So, if I’m e-vited to the latest social event in our neighborhood (wine tasting, happy hour, etc.) but they misspelled my user name, I still want to get the e-vitation. (If they misspell the domain name, sadly there’s not much I can do.) So, in google mail I set up a “catch all” which means that if google doesn’t find a valid user account to deliver the mail message to, it will drop the message into the designated “catch all” user account instead of bouncing it back to the sender as undeliverable.  That’s great for never missing an invitation to drink alcohol with friends, but that’s horrible for trying to manage spam messages.  Spammers no longer have to guess a valid user name, they can send it anywhere to my domain and it’ll wind up in my SPAM folder.  Which isn’t so bad, but I hate SPAM folders.

I hate SPAM folders because I feel the need to go through them to see if legitimate messages were placed in there on accident.  The thought of missing that wine-tasting e-vitation because it had one too many links in the message is personally disquieting.  When you get thousands of SPAM messages a week, searching for that one party invitation is very time consuming, tedious, and really annoying.  So I gave myself a goal, “Minimize the chances of missing an email while also minimizing the amount of spam that made it into the SPAM folder.”

Lofty goal, huh?  I know, I’m going to tackle hunger and world peace next week.

So, I own my own domain.  When you send a message to a user at wiredsage.com, it comes to my email account no matter what the user name was.  Minimizing missed messages isn’t quite that easy, because they can still get delivered, categorized as spam, and lost in the plethora of junk mail waiting to be deleted never to be seen by human eyes.  I had to figure out a way of killing spam before it got to the SPAM folder in google.

White-List, Are you Human, Black-List?

You might be thinking to yourself, what they need is a “white-list” or a list of people who would never send you spam and would always send you good email. With the proliferation of malware, lots of people who would have been on a “white-list” of mine have in the past sent me crap.  Plus, what about the person I don’t know?  The person that is sending me a legitimate job offer, the job offer of my dreams.  I want that email to come right to my Inbox without delay.  So not only is this not a great solution, it’s not offered by google.

I’ve seen some hosting companies send an auto-reply message to the sender, ask them to visit a website, and complete a captcha (validating that you are human), before allowing the email message to be delivered.  That stops spam pretty much in it’s tracks.  It can be defeated though.  I’ve seen spammers use third world data entry workers to complete captchas in other situations before.   And could you imagine a recruiter sending out a bulk email message, about the best tech job ever to be published to a list of highly qualified potential applicants, going through all that crap to deliver one email to one potential employee.  Opportunity only knocks once.  This is not only overkill, it’s also not offered by google.

What I really needed was a “black list”.  A filter that said, if the email meets this criteria, return it to sender as undeliverable.  Ideally, I would be able to use regular expressions on any email field, header, or the body of the message.  I would be able to count how many links were in the email, I would be able to compare the senders to my contact list, I could count the number or recipients were in the message, to create a robust set of rules which would allow me to decide, “this message was too spammy to accept”.  Now note that I want to bounce the messages and return them to sender with an error for the one in a million emails that weren’t spam.  Well, guess what?  Google doesn’t offer this either.

What to do?

I wondered if I could do anything, so I investigated.  In computer lingo I hacked.  I was looking for a way to use the existing infrastructure provided by google in a non-intended way to get my desired result.  So I hacked… and hacked… and hacked…

I found that if you disable an account, the email is then bounced back to the sender as undeliverable.  I also found that you could apply aliases to a user account.  So I made a user called junkmail-01 and gave it a name of “junkmail filter”.  I then opened up my SPAM folder and looked at all the TO: fields to get the email addresses that were being spammed.  I took those usernames out of the SPAM folder and made them aliases to junkmail-01.  I then tried to send email to those email addresses.  Bounced mail.  I had found my black-list.

How it works

Now when I go to a site shopping, like geeks.com, and they want my email address I give them geeks.com@wiredsage.com.  Then if they sell or lose my email address and I start getting emails for “natural male enhancement” I just have to add “geeks.com” as an alias to my junkmail-01 user and I will get no more mail from them ever again.  Well, they betrayed my trust, they don’t deserve to communicate with me.  If I absolutely still need to get email from them, I update the username they have on file to something like “geeks.com-2@wiredsage.com” and then I know how many times they lost my email address and whether I want to trust them with my credit card information in the future.

Junkmail-01?

You might be wondering, why junkmail-01?  Why not just junkmail?  Well, google only allows you to add 20 or so aliases to a user account.  I’ve gone beyond 20 blacklisted email addresses.  So, you just add another user, junkmail-02, disable the account, and start adding more aliases.

The Result

This is very effective because I’m filtering on the destination address, not the source address.  So no matter what bot network is sending the spam, or what domain the spam originates from, if it’s destined for the blacklisted account, it gets bounced.  Every once in a very long while I get a spam message in my SPAM folder in my catch-all account.  I then have to login to the domain management portion of google mail and add an alias to the highest numbered junkmail account.  To stop it from happening again.  I see it as an effective strategy for managing spam with the existing tools google provides.

Closing Thoughts

I think this is a sweet hack.  But it is just that, a hack.  I would love for google to come out with a regular expression based rule filter for their email.

MacBook Meltdown

I sit at an “L” shaped desk in my home office; to my left is my personal mac book pro, in front of me is my work PC. I was working feverishly this afternoon when I smelled something burning. Specifically, I smelled plastic burning. I jumped up from my desk panicked that my house was on fire.

I dashed out of my office headed for the closest of two fire extinguishers we keep in the house when I realized with a shock that I no longer smelled the burning plastic out in the hallway. Relieved that it wasn’t the pre-wired Christmas tree melting downstairs I bolted back into my office, feared an electrical fire, and frantically worried over what action I could take if it were the wiring in the walls.

I entered my office and sniffed the air in front of me like a bloodhound. It came from my desk. Then I saw wafts of faint grey smoke which rose over the back of my MacBook Pro. I moved all the wires away from my computer. I quickly disconnected the power cord, Firewire 800, and USB wires that were plugged into the device; fearing a short circuit I inspected each wire.  The wires were fine, not warm at all and still a smell like burning nylon persisted. I picked up the computer and sniffed it. Immediately I knew something inside my MacBook Pro had melted.

I opened a window, turned on the overhead fan, and aired out the room. The smell dissipated quickly. I realized I felt a little light headed; that too quickly passed.  With the power cord unplugged, the laptop only running on battery power, everything seemed fine.  I immediately started a backup of my data.  I’ve heard horror stories about Apple support replacing whole devices and not restoring data — that wasn’t going to happen to me.  I then looked for the support number and called Apple Care.

My Apple Care phone experience was extremely pleasant. My computer is under warranty and they scheduled an appointment for me to meet a technician at the local Apple Store in town. While I was on hold, on a whim, I plugged the power cord back into my computer.  I immediately smelled the burning plastic again, and unplugged it promptly.

So, some time in the not too distant future an Apple technician will crack open my laptop and either see a stray bit of plastic that got too close to something hot, or identify a faulty part and replace it.  Either way, I think my next Apple purchase will be Apple Care for my MacBook Pro.

Download all of Facebook ???

So, I was looking for old Facebook entries today to figure out when I did certain things (video project related). I tried clicking all the “See Older Posts…”, “see more…”, and “view all XX comments…” links to expand the page so I could dump it to a PDF file. Ha! I got to the end of all my posts; but, while trying to expand all the comments Facebook jumped me to another page and I had nothing. I said to myself, “Self, there aught to be a better way right? I should be able to see all my old posts… I should be able to search all my old posts. Heck, I should be able to download all my stuff from Facebook!”

Well, looks like someone else thought of that too. Just last month, October 6th, Facebook gave it’s users the option to download EVERYTHING associated with their Facebook account. Every post made to your WALL, all your photos, all your videos, all the comments on your photos and videos, your profile, your events, your messages, even a list of all your friends. I found this after a short and sweet Google search.

Yes, you know me! I did it right away! When you click, “Download my Information” it tells you it’s going to take a while. They send an email to the email address Facebook has on record when the ZIP file is ready for download. Don’t be alarmed. I’ve been on Facebook for close to a year now and my ZIP archive of everything was 762 Megabytes. It took about an hour or two to compile everything and on my broadband connection, it took 10 minutes to download. After I downloaded it, I UN-ZIPPED it, wondering what I’d find.

What did I find? I found the most useable archive of information I could have imagined. Extremely well done. There were several directories, one of which was HTML. Jumping in there and clicking on Wall.html got me to a local copy of all my Facebook information in one easy, searchable, HTML file! But then what did I really expect from web developers? They stuck with what they knew. They did what they do best. I was extremely impressed.

Actually, re-reading and editing this post I said to myself, “Self, they should have put a readme.txt or an index.html in the top directory.” And when I checked, both files were there. I just immediately went digging to see what was under the hood and wound up at the same place via a different path.

So what? So, you should download all your information to really conceptualize what Facebook knows about you. It’s easy, it’s informative, and it’s really cool to have a copy for yourself.

Video Project, Phase 3

Last year, June 2009 to be more precise, I contracted imemories to digitize some old 8mm film that I had saved from my parents. It was pretty expensive, but I didn’t have a lot to do. I figured I’d break the job up into smaller bits and spread the cost over a few years. I’m glad I got part of it done before my father passed away this summer. I think that motivated me to make sure all of the video I’ve taken over the years was safe.

So back in March of 2010 I started a project to ‘recover’ all my home video. I could have used imemories to do this also, but I had so much video, it wasn’t cost effective to pay someone else to do the conversion work. It would have been tens of thousands of dollars for them to do it. And sure most of the tedious, boring, busy-work would have been farmed out; but, I’d still be stuck doing the hard work of categorizing and editing the video. It just wasn’t a cost effective solution. Plus, I had almost everything I needed. My old Video8 VHS camcorder still worked. I had a way to capture and digitize the analog footage. I just needed to pick up a miniDV camcorder that was in working condition to digitize the close to fifty hours of miniDV footage I had. Thank goodness for Craig’s List! I found a working camera for $80 and after about a month of working, I completed Phase 1 of the project — getting everything onto a hard drive.

Thinking this through, phase 2 might still be uncompleted. Phase 2 consisted of getting everything into an iMovie format ready for archival and editing. I migrated computers and think I may have several dozen hours of Video8 footage in EyeTV format. If that’s the case, I’ll figure it out after Phase 4, which will be the accounting and audit phase to make sure I didn’t miss anything. If I missed anything, Phase 5 will be to do whatever it takes to finish the project. I do mean, “Whatever it takes!”

So, I find myself here, in phase 3 — “Compression and Archival”. Since I started this whole process, I learned that iMovie saves my HDTV footage from my newest camcorders in Apple Intermediary Codec format. This is the native format that iMovie uses for editing. My understanding is that it’s a lossless codec and takes up 50% of the space that DV encoded events do. With this new knowledge, I am in the process of re-encoding all my DV footage to be this newly discovered native apple format. Afterwards, I plan on encoding each event as a .mov and .m4v file, then archive it onto optical medium (DVD +R DL).

I just started this last week. So far, I’m working on my third event. I think I could do an event a day: it takes about four hours to encode both formats and two hours to burn it to disc with verification for each hour long event… some events are two hours long. It takes ten minutes to set it up to start, two minutes to export to the 2nd format after one two hour conversion, then ten more minutes to set up the disc burning. So, about twenty two minutes of real computer work per day of waiting. Taking into consideration the lack of efficiency on my part, and the inevitable hurdles I’ll come across, let’s say I can complete five events a week. At around a hundred and twenty hours of events I’m looking at approximately four months of work for this phase. The product will be a DVD library of cataloged, home, video footage in neat little DVD cases with covers and explanations of what is contained within.

Wow, sounds a bit OCD, doesn’t it? Well, you know what they say… if the skin fits… wash it! They don’t really say that… it was my attempt at OCD-humor. Forget it. OCD stands for Obsessive Compulsive Disorder and is sometimes epitomized by the frequent washing of one’s hands — it’s also epitomized by the compulsive need to explain failed humor, inform and enlighten others, and generally drone on for hours, blogging crap no one will ever read. But I digress.

“So what,” you say? So, I started another phase of this monumental task. I do it for me, to keep track of time, but, mostly to show that if you break it up into small enough pieces, no matter how big the task is you can tackle it.

How’s that for a blog entry really about nothing pulling a moral and life lesson out of nowhere! I think what I just did needs a name. If we were playing hockey, it would be comparable to a hat-trick, so let’s call it a head-trick!