Fixing Other Peoples Products

The coolest thing about open source and truly free software is, of course, the ability to hack it in your own image. I learned what “open source” meant from a single anecdote in one of Richard Stallman‘s books.

Once upon a time, Richard was able to program his printer. Then, one day, that printer was either replaced or the software updated or something and Richard no longer had access to it. Henceforth, Richard lived as a slave to the printer.

I think it’s great people make Add-Ons and Extensions for browsers but I like the idea of an open source browser that everyone can contribute to and improve much better.

If I created a product and an entire industry grew up around ways to make my product better, I’d be pretty ashamed of myself.

Enter Facebook.

I’ve ranted plenty on this blog about how I don’t want anything automated unless I automate it. I don’t want software to do anything I haven’t told it to do. I hate that Facebook somehow thinks it knows better than I do what stories I want to see. I’m not talking about the recent “Fake News” thing — that’s a whole other issue. I’m talking about the default “Top Stories” sorting on the newsfeed.

The fact that people in the Facebook Help Community actually have to say, “I want to see everything and I want to see it in chronological order” is … pathetic, baffling, infuriating. You can like, unlike, friend, unfriend, follow, and unfollow — that’s how you choose your own “top” or priority stories. Facebook is free so I’m willing to see sponsored nonsense but, again, that’s not what I’m talking about.

Somebody had to create an extension [for oodles of browsers] called FBPurity that, among other things, overrides Facebook when Facebook tries to override the fact that you changed your newsfeed sorting to “Most Recent” (a setting that only lasts about a day). IMHO, that makes Facebook look bad.

Apparently, as I’m now looking at, the extension also, “lets you remove the annoying and irrelevant stories from your newsfeed such as game and application spam, ads and sponsored stories. It can also hide the boxes you don’t want to see on each side of the newsfeed.”

Those features of the extension don’t make Facebook look bad — nothing relevant to revenue implies poor quality.

FBpurity looks to be beloved and reputable but if, like me, you’re still skeptical about all such things, there’s also this great tip I found. When you bookmark Facebook, use this URL:

Sean Nicholson‘s article explains the “sk” is the “Most Recent” parameter.

Ben Patterson‘s article explains it a little better, saying “chr” stands for “chronological.



Recent Google Chrome Changes Alienating Hardcore Users gets added to the pile of unpleasant surprises. Chromium is open source, right? Open Source means user freedom, right? We’re, like, grownups, right? We can make our own decisions … right?

The second shoe fell or, rather, the second boot kicked me in the stomach toward the end of the article …

These changes weren’t made in Chrome alone, but are also reflected in the Chromium project, used as the base for other browsers, such as Opera, Vivaldi, Brave, and others.

Open Source Wallpaper

While digging through some ancient folders, I found this wallpaper I made for my (then) new Droid phone six years ago. I delighted in things as prosaic as this and editing audio for custom ringtones up to rather cool (but still elementary) hacks like getting rid of bundled bloatware.



Jay Pride Parade

I am so freaking proud of this dynamic PDF using templates with dynamic menus and what I’ll call “smart redaction” I just can’t stand it. I feel more creative, powerful, geeky, as well as downright handsome and sexy because of this I can’t even stand it. I’ve made several interactive PDFs that I thought made the world a significantly better place but those just took time and effort. I’m creative and knew how to do what I wanted. This project, however, required I learn a bunch and solve a whole list of problems other people all over the web were struggling with and some people said these things couldn’t be done. I am beating my chest and yelling like Tarzan right now.

The client had a list of what they wanted/hoped the PDF would do and each of them was a challenge by themselves, let alone getting all these “features” to work together and in a way that didn’t make the user cry. Lots of Googling, forums, documentation, taking pieces from multiple solutions and combining them, followed by lots of experimentation, trial-and-error, debugging and falling in love–deeply and passionately–with Acrobat‘s JavaScript Console.

The client is a private investigator who has been assembling his reports in (God have mercy on his soul) MS Publisher. He asked for what sounded pretty simple: templates for PDF forms. It got complicated surprisingly quickly and, as I said, I found that others have faced these problems and I had them all together. Below are some of the challenges I’ll document along with their solutions in the next few posts.

The Client’s Hopes and Dreams

Which came true cuz I’m totally the Fairy Godmother of Adobe Acrobat

Templates in the Investigation Report include, among others, a Subject Background form and an Investigative Action form.

  • Each of those (and other) forms/templates need to be used multiple times in the same report so, as you may know, the form fields on each spawned page need to have different names so they can hold unique values. Not a problem, right? Wrong.
  • There’s a main form I’ve called the Report Dashboard in which the client enters the pertinent subject and locations so they are available in “Subject” and “Location” menus in the various templates/forms. Challenge #1 Populating fields based on a menu choice is easy but populating a menu based on text fields was new to me. Still not too bad, though, right? Wrong. Challenge #2 The dashboard might be updated after those pages (containing menus with unique names) are spawned.
  • Other information on the dashboard appears on all pages’ footers such as Case Name, Case Number, Date, and Page Number. Challenge #3 Unique field names meant I needed to be creative (because the dashboard content such as date completed/submitted and such might not be entered until the end of the investigation) but that was (truly, this time) not bad. Challenge #4 User needs to be able to rearrange and remove pages at will. This affected several things including but not limited to the page numbers. While the client owns Acrobat Pro …
  • Oh, and all of this needs to be possible after the client has saved, closed, and reopened the file as well.
  • I still wanted the client have as little burden as possible. I wanted a design and process that was elegant, easy and simple. If he had the time and inclination to learn and master Acrobat’s innards, he wouldn’t be paying me, right? Right.
  • Redaction. Never a fun topic for anyone, apparently. This client’s situation is particularly unique. Nobody wants to pay a private investigator thousands of dollars for a report that says, “I didn’t find anything useful” so my client’s customers want to see they’re going to get something for their money. If the investigator shows the fruit of their labor, however, their customer can then just run with that information to their lawyer (another expensive expense of the client’s customer) so they have no compelling reason to pay my client–at least not in a timely or easy manner. So, I need to creatively redact information while still showing there’s something substantial … in a way that doesn’t make me want to cry like others suffering under a requirement for redaction.
  • Security. Related to redaction but with other, more typical concerns like preventing printing, watermarks, and of course preventing changes … all without requiring my client learn or do any more than they have to.

This project kicked so much ass because I kicked its ass so thoroughly. My client suggested I license or sell this template/report to thousands and thousands of investigators like him who share his struggles and I’ll do what I can to profit further from this effort but, while he was saying that, all I was thinking was I couldn’t wait to share everything I learned because, you know, OPEN SOURCE, BITCHES!

Using GitHub: Local Repo

This first version of this post might be clunky to say the least.

Okay, my latest volunteer gig is with Mil-OSS. Specifically, I’m creating a website for the Central Florida chapter. One of the leaders created a GitHub repository and added me as a collaborator. Now I need to create a local repository and upload my shizzle.

I could be wrong, but I don’t think you can just git init in a folder of your files and upload them to a GitHub repo. This seems to be the process for  uploading files you’ve created before creating (or being added to) a GitHub repo. It’s especially irritating if, for example, you’ve configured your Site/Server settings in Dreamweaver.

  1. Navigate to the folder in which you’ll clone the remote repo by typing cd and the path to the folder.
  2. Clone the remote repo locally by typing git clone and the SSH stuff on the repo page at
  3. Move all the files you’ve created into the new folder that creates — your new local repository (via the command line or drag & drop).
  4. Navigate into that local repo via cd.
  5. Tell Git you want to add all these new files to your next commit by typing “git add .” (no, don’t include the quotes but, yes, include that period).
  6. Commit those files by typing git commit -m “<message>” where <message> (yes, this time include those quotes) is notes to yourself about the commit (what the latest changes are, for example). The -m tells Git that you’re including the message part.
  7. Push your files to the remote repo by typing git push <your SSH shizzle> master.

Much Easier Method!

Update May 16, 2016: Found this yesterday after making the mistake of thinking that cloning someone else’s project would automatically create a repo on GitHub (nope, that’s “forking” … I think). You simply create the new remote repo on GitHub and type the following into the terminal:

git remote add origin <URL>
git push -u origin master