Kids – Game of Life

Posted on by jjacob

This is the first in hopefully a series of posts as I blend in more science and technology education into my parenting. Our family vacations make a point of visiting lots of zoos, aquariums and children museums but I’ve been looking for more things to do at home. While I routinely spout off various scientific facts I feel I can introduce my kids to more in their everyday world. As I succeed/fail I’ll report back here.

One of the recent introductions I gave them was to Conway’s Game of Life. Although far reaching in abstract thought, it’s a really great introduction to simple systems/rules/algorithms and there are good hands-on tools for experimenting with it. So, after dinner was done one evening we all grabbed our laptops and hit the dining room table for science time.

I started with a simple introduction found here http://www.math.com/students/wonders/life/life.html and here http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life and then spoke of some real world uses gleaned from http://en.wikipedia.org/wiki/Cellular_automaton. After walking through the rules, I installed Golly (http://golly.sourceforge.net/) on their laptops and showed them some basic starting patterns as well as the more complex patterns. They then spent quite a bit of time drawing their own patterns and watching which died or spun off into oscillators or spaceships.

The night ended with showing mom the cool patterns and how they played out in the game of life.


Posted in Kids |

Dashboard – Time In

Posted on by jjacob

Being a services company, tracking billable time is huge. When you’re 10 people, taking a look at time reports once a week for the whole company doesn’t take much effort. However, growing to 100+ people requires delegation to direct managers for this.

One of the earliest features of the dashboard was for managers to review time of their direct reports. While we might scrutinize daily time entries for new employees or contractors, the weekly time entries and per client totals are used through the team. Weekly time entries are a great reference when working on next week’s resource plan. “Jane was supposed to work all week on project X, but it looks like she’s getting distracted with project Y issues. Let’s make some adjustments to account for this.”

The roll up in the per client totals is a really great review against the agreements to split certain employees across multiple clients. “Is Bob really working 10-12 hours per week on client A and the rest on client B?” Calling out internal time (the HPI code) also shows billable percentage.

Providing tools for anyone means an HR and accounting department working on problem solving and not running reports. Security in the mapping of direct reports means managers only see the time of the people they manage.


Posted in Dashboard |

QR Journal 1.0 Released!

Posted on by jjacob

I’ve been busy with work for the last couple months but was able to stitch together a new desktop app. After using ZBar for iOS apps, I decided to give it a go with iSight cameras on Macs. This gave me some great experience with parts of the Cocoa framework I hadn’t been exposed to.

This is also the first time I tried to submit an app to the Mac App Store. The process went smoother than I thought it would but I opted to avoid the more stringent sandboxing until it’s required next year.

Check out QR Journal or get it on the Mac App Store. Feedback and suggestions are always welcome.


Posted in Mac | Tagged ,

TNEF’s Enough 3.1 Released!

Posted on by jjacob

I’ve been working on enhancing TNEF’s Enough as well as addressing user input from version 3.0. The changes for 3.1 are:

  • TNEF files with an HTML body will now display in a web view. TNEF messages encapsulate a full email message. The body of the message can be created in the original email client (most likely Outlook) as Rich Text (RTF) or HTML. TNEF’s Enough will now display both body types.
  • Better support for international characters. The string data in TNEF files come through in a Windows (non-UTF8) character set. This was causing some display issues of certain fields as well as issues listing file names with non-ASCII characters (e.g. high ASCII characters like ä, ë, ï, ö and ü).

Thanks to Ari K for helping me with resolving the international character issues!


Posted in Mac |

iOS Experiment – Door Stretching

Posted on by jjacob

My day job involves interactive marketing work for several cabinet manufacturers. The breadth of product line has always been an obstacle when dealing with product visualization. You can easily get your head around door styles, wood species and finishes enough to present that to the consumer for selection. While that number may be in the couple of thousands, the specific SKU count climbs to 100′s of thousands when you look at all the cabinet shapes and sizes.

One approach I took to trying to represent all the SKUs is essentially building the cabinet with 2D graphics. I took inspiration from nine part images used to scale user interface elements. In this case, though, we have an algorithm for an N-part image. The example below is 25-part image that correctly scales rails, stiles and panels.

The base product is gray scale representation of the cabinet. You can optionally apply a texture. The texture work needs some randomization and optimization work but for a proof of concept, it worked well to illustrate the capabilities.


Posted in iOS |

TNEF’s Enough 3.0 Released!

Posted on by jjacob

Took a bit of a break from blogging to wrap up v. 3.0 of TNEF’s Enough. You can grab the latest version here. Works with 10.6 (Snow Leopard) and 10.7 (Lion).

Will return real soon with other things I’ve been hacking around with. Cheers!


Posted in Mac |

Dashboard – Vacation

Posted on by jjacob

Here’s a quick illustration of what can make happen when you tie together various systems into a meaningful application.

We don’t have a fancy HR system so most people have to keep track of their vacation days themselves. When I first started digging into creating a dashboard I took a stab at using systems already in place to do the manual work of this. We have a time tracking system so we know when you already took a vacation. And, we have a resource planning system to know when you plan to take your next vacation. This was a good start.

The “glue” of the dashboard consisted of the following:

  • The “principal map” that tied together the user’s accounts in the various systems. Access to the dashboard is controlled by Active Directory which is the anchor system. The time tracking and resource planning accounts are tied to the AD account.
  • A place for the user to enter total vacation days. Our time tracking system doesn’t keep track of this so the dashboard has an expanded profile of the user that keeps track of total vacation days along with the complete principal map.
  • Also added in was some basic logic about planned vacation days past the current date and planned days vs. days already in the time tracking system.

The result was a clean and simple display of vacation information for all employees:

Charting and table display is done with the ZK Java/AJAX framework. More on that later.


Posted in Dashboard | Tagged

Dashboard – Overview

Posted on by jjacob

Although my place of employment has been around for a long time it’s an organically grown company. I started 14 years ago as a developer when the place was a video production company and the number of employees was in the single digits, now we’re just shy of triple digits with most of those people in interactive production. Slow and steady growth through various ups and downs in the online/interactive industry. With that organic growth came a suite of business tools that grew organically. Finding a way to connect those various tools was a side project I started a couple years ago.

The majority of our financial backend is on a system called Clients & Profits. It’s a time/billing/accounting package grown out of the advertising world and we’ve used it for over a decade. The first version we used ran on a proprietary file-based database. Getting data in and out of the system was near impossible. An upgrade to a SQL Server version allowed us to dig into the data and pull out bits we needed. My original queries for pulling out time tracking information grew into a web application for everyone in the company to use for custom reports not available in the Clients & Profits front end, and more importantly, seeing that data alongside other sources data.

Where the dashboard stands today is a far reaching web application employees can use on a daily basis with these major features and integrations:

  • Microsoft Active Directory – web app security using domain credentials and directory information (phone numbers, extensions, etc) display.
  • Clients & Profits – access to complete historical cost and time entry data for all clients and projects.
  • Atlassian Jira – access to bug tracking system showing open tickets per employee.
  • Microsoft Exchange – display of personal calendar per employee as well as calendars for conference rooms and other common calendars.
  • Taskjuggler – import of company resource plans and vacation schedules.

My one sentence description to new employees is: it’s where we’ve been (Clients & Profits job data), where we’re going (Taskjuggler resource plans) and what gets in our way (meetings in Exchange and Jira tickets).

Building a custom web application allowed importing or direct access to all the above systems. It’s a true “one stop shop” for vital business systems used by the majority of the company. The system is forever evolving adding new features and reports and uncovering new ways to look at various sources of data together. In future posts I’ll dig into the various aspects of the dashboard and how it was built.


Posted in Dashboard | Tagged , ,

Presentations – Retro Computing

Posted on by jjacob

As Director of Technology at an interactive company I’m always evangelizing new technology. Sometimes it’s technology I’m looking at, and sometimes it’s technology that someone else in the engineering group is researching. Part of this evangelizing process is giving presentations to the various teams. It’s at times like this when I have to start up PowerPoint that I get a shiver up my spine.

It’s not like PowerPoint is bad, it’s just so often boring and uncreative. Like many of you, I’ve seen my fair share of cheesy presentations and bad templates. In a challenge to myself to be more creative I really strive to make the presentations as interesting as possible. I also try to use traditional presentation tools as little as possible. But when I do, the quirk factor is dialed up to 11.

This set of actual slides (and by “actual” I mean film) from a 1975 IBM presentation fit the bill. Here’s a sample: http://blog.iso50.com/2193/ibm-slides-1975/. Seems the original site (http://www.squareamerica.com/ib.htm) is down at the moment but you get the general idea from the samples. Just an awesome retro look! Although in order to use these in my own presentation, I had some Photoshopping and font research to do.

I went through the whole list and found about a dozen slides with blank areas big enough for text messages. Sometimes the areas could only hold a couple big words like the original, others had enough for a couple bullets. As a rule I don’t often put a lot of text on my slides so I could identify with the original style. I tried to get a good mix of the older gentleman and the other people for variety.

For the font I wanted something similar and ended up with Folio Standard Bold Condensed which had that great classic “IBM” look. As an added bonus, I traded out my company’s logo font for Motter which is reminiscent of the Apple II logo. Here are a few clips from the presentation. Cheers!


Posted in Presentations | Tagged

QR Directory App – Generating Codes

Posted on by jjacob

So, I created the app to read tags for employees and conference rooms and show schedules, now I just had to create all the tags. Although creating them manually was an option, I had 100+ to create so wanted a quicker way. Thanks to MacPorts and some scripting I was able to come up with this:

#!/bin/sh

# get list of persons through a very long command
PERSONS=`/usr/bin/ldapsearch -x -LLL -E pr=200/noprompt -h ldapserver -D "ldap.account" -w "password" -b "CN=Users,DC=domain,DC=local" -s sub "(memberOf=CN=All Employees,CN=Users,DC=domain,DC=local)" mail | grep "mail:" | sed s/"mail: "// `

# start the HTML file
echo "<html><head><title>QR Codes</title></head><body>" > images.html

# loop through all the persons
for person in $PERSONS
do

	# diagnostics
	echo "Processing: $person"

	# print HTML
	echo "<div style='float: left; text-align: center; margin: 30px; font-family: Helvetica, Verdana, Arial;'><img src='images/$person.png'><br/><b>$person<b/></div>" >> images.html

	# create QR code
	qrencode -s 10 -o "images/$person.png" "$person"

done

# finish the HTML file
echo "</body></html>" >> images.html

# all done.
echo "DONE!"

The script relies on two core commands: 1) ldapsearch to find people in LDAP (in our case Active Directory) server and 2) qrencode which takes a string, encodes it as a QR code and writes out a file.

The script dumps all the QR code images into a directory and all writes out an HTML file which references the images and puts the person’s email address under the image. Not necessary but when you’re printing out a lot it serves as a check to make sure your putting the right picture on the right office.

References:
ldapsearch – Part of OpenLDAP http://www.openldap.org/software/man.cgi?query=ldapsearch
qrencode – Part of liqrencode http://fukuchi.org/works/qrencode/index.en.html


Posted in iPhone, Scripting | Tagged ,