Full Text Search At Last

My last blog post on this was nearly two years ago. Funny how things can fall off the radar and then months or years later suddenly become a stick in one’s craw.

Anywho, I finally sat down and figured out why Tipue would choke when I would add the contents of a blog post to the search data (titles and tags worked fine). I narrowed down the culprit by process of elimination with a select post’s content, and then played around with Twig filters until I got what I needed.

The solution? Remove line breaks and back slashes. These are the two items in my one or more blog posts that were breaking the JSON formatting of searchdata.json. I’ve updated my original post to reflect this addition.

Kanban Board on a Budget

Well, “on a budget” only if you’re already using Confluence.

I recently took on a team of my own at work and wanted to implement a Kanban board for us to organize around. I heard the FLOSS Weekly episode a couple weeks back which featured the devs from Taiga.io. I took a look at this and even signed up for a fee hosted account to demo it. Very nice software, but it occurred to me that there’s a task macro in Confluence that I’ve used on occasion in the past. So I created a new page in our private space, inserted some columns with task macros; one for Backlog, one for In Progress, and one for Done. It’s not fancy by any means, and is certainly not scalable beyond the few of us, but it’s getting the job done for now and only took a few minutes and no additional $$$ to setup i.e. no budget approval.

It’s likely that there’s similar solutions in other CMS systems. If you think something up, let me know.

Git Based Workflow

Years ago, I read Joe Maller’s web focused git workflow article. I thought it very interesting, and was actually my catalyst to start playing around with Git. And while the wonderful world of Git started to open to me, I never actually implemented it for my blog. I tried a few things at the time, but it felt far more clunky that useful.

Fast forward a bit and I’ve now been using Git as a standard part of my toolset at work for a couple of years now. Nothing too fancy, but I feel much more comfortable with the general workflow of multiple branches, automating actions with hooks, multiple clones, remotes, etc. So, once I got my — seemingly annual — clean-up-my-site bug this year, one of the things I implemented was something similar to what Joe had outlined.

Not only has this workflow simplified the deploy process for me, especially as I have multiple devices on which I hack my site, but it saved me from near “disaster” last weekend. I was mucking around on my server (why oh why do I still do that?) and rmed my production web root rather than a temp copy I had in /tmp/. But, no biggie. In just a matter of seconds I had my site back online with a simple git clone and build. There were a few things I hadn’t included in my repo, most notably the little magnifying glass image in my search button; easy enough to replace. A nice lesson learned on a non-critical system.

And on that note, happy Backup Awareness Month!

Scrollbars and Page Width

So I’ve been obsessing with my site design over the last few weeks. It started with some big changes at first, followed by a seemingly non-stop stream of little tweaks (including some that will get committed with this post). One thing that’s irked me for awhile was that when clicking between most of my pages and my contact page, the width alignment of the content would change due the the absence of a scrollbar. At first, I played around with some CSS to remove the scrollbars from all pages. I only use a MacBook Pro or my phone, so I’m always scrolling the page with a page grab rather than a scrollbar grab. However, removing the scrollbar would likely cause usability issues for those who instead prefer to use their mouse to grab the scrollbar. Further, I couldn’t find an elegant cross-browser solution. overflow-y:hidden worked in most browsers, but it made the page unscrollable with the mouse wheel in Firefox. So, I went the other route and forced a scrollbar on all pages, whether there was a need for one or not. Now all pages size the same which means there’s no longer that jumpy resize problem with going to the contact page, or any other minimal page.

html {
    overflow-y: scroll;


Adjust Mime Type For A Single File

<Directory /path/to/directory>
  <Files "file.html">
    ForceType text/x-vcard


Bash Prompt

After playing around with my bash prompt for a bit, I’ve settled on the below. For me, it’s a nice mix of bling and useability enhancements

local workstation

export PS1="\n\[\e[0;33m\]\d \t\[\e[m\] \[\e[0;36m\]\u \h \w\[\e[0m\]\n\\$ "

remote servers

export PS1="\n\[\e[0;33m\]\d \t\[\e[m\] \[\e[0;36m\]\u \[\e[0m\]\[\e[0;35m\]\h \[\e[m\]\[\e[0;36m\]\w\[\e[0m\]\n\\$ "

Git Cheatsheet

Roll a Repo Back to a Given Commit

git reset --hard <commit_id>
git push -f

Find files that have changed in the last 2 days

git log --pretty=format: --name-only --since="2 days ago" | sort | uniq

View the history of a file

gitk filename

Push a new local branch to a remote Git repo

git push -u origin branch_name

Move uncommitted changes to a new branch

git checkout -v <branch-name>

make your changes

git add --all .
git commit -m "<message>"

now you can switch back and forth and see the changes


Saltstack Cheatsheet

Get System Info

salt '*' pillar.items
salt '*' grains.items

Downgrade a System

git clone git://github.com/saltstack/salt
cd salt
git checkout v<version number>
sudo python setup.py install --force


Stack Overflow

Responsive at Last!

It might be a little late to the party, but I finally got around to putting together some responsive stylesheets. This site should now be rocking out on the iPhone like it’s 2007! The old stylesheet scaled well enough, but the updates should hopefully make things a bit more elegant on small screens while at the same time make better use of the additional real estate on larger screens.

Use Netcat to Test Bandwidth

So I needed a handy, low overhead way to test bandwidth between myself and a remote server. SCP was handy and was able to give me a relative thumbs up or down, but the overhead distorted the figures. dd and netcat to the rescue.

Open socket on machine “A”

while [ True ]; do nc -v -l 2222 > ddTest; done

Push a file from machine “B” to machine “A”

dd if=/dev/zero bs=50M count=1 | nc <ip of machine A> 2222