This week I participated in one of the first combined Hack Days at my workplace, which brought together IT teams from across campus that normally don’t interact on a daily basis. I’ve always loved the concept of trusting people and letting them work on whatever they find most valuable for a period of time (it is baked into my team’s sprint schedule three times a year), so I wanted to support the event and encourage my peers to do so in the future.
I’ve been acting as a Scrum Product Owner for the past year and am in the process of transitioning to a team wide ScrumMaster for the foreseeable future, so my hack day projects were centered around building two small tools to assist in the calculation of business value and effort estimation (exciting stuff!):
- Protocalc: Not the best name I’ve ever come up with, but it works! This simple tool sucks in a JSON object of categories, questions, and answers (and weights to those categories and questions) and dynamically generates a web form out of them. Filling out this form will give you a business value estimate for any item or feature, both out of 100 and out of 20 (depending on how you’d rather round). It’s a simple way to share an understanding of what drives value on our team and removes a lot of the overhead and ambiguity in calculating some usable value indicator. The question and answer set can be easily swapped out for different teams and different value streams making it reusable.
- Plokker: Most Agile teams regularly estimate the relative effort of items on the backlog as this scoring is useful for determining how much a team can and should commit to in sprints. A pretty popular way to do that is through “planning poker” in which team members determine their own estimates and then try to reach a consensus.
The window fogged up and I was bored. Also haven’t posted in years 👍 (at UCF Research Pavilion)
“Sorry I had to run out to meet with another student. The website you built looks amazing and is very user friendly. Thanks so much for working with Cristina and IKM to move this process forward. Much appreciated. Belinda” (Assistant Vice President)
Nice to hear after a good demo!
“Good day all, I must co-sign on Mrs. Belinda’s words. Jordan has been awesome
to work with and has brought to reality a system that will make our productivity more efficient with less human error. Those extended phone calls have been worth it, Jordan =) I am very happy we made it here together! Thank you.”
Testing mobile sites in the field!
A simple site that reconstitutes single JPEG images from within the UCF firewall for outside consumption via Motion-JPEG
We got an urgent request to recreate UCF’s Campus Webcams site, as UCF Marketing was replacing the main UCF site with a WordPress install (thus removing all of the various sub sites of that legacy implementation). We had no contact with the original developers nor any glimpse of the code that powered the previous Webcams site. In addition to reproducing the original site, it was requested that the new site also double the number of cameras viewable.
I got to work quickly on an .NET C# MVC3 application, building out a default Area for the public and an admin Area for a front-end to a database that stored webcam information. I gathered data manuals on all the various camera manufacturers represented throughout our departments and discovered ways to pull single-frame data at specific resolutions from each. I wrote an Action that composes constant snapshot data into a Motion-JPG stream. Finally, after some research, I pulled down a Nuget package for an image processor to do Gaussian blurs on the images (for legal reasons).
dotnet-sdesdirectory – A small .NET C# MVC3 application that uses Entity Framework 4.1 to produce a JSON feed from a SQL schema. Admin interface included.
- Type: Website
- Language: C#
- Framework: MVC 3 and Entity Framework 4
- Authentication: None
- Data Source: SQL Database
In collaboration with UCF Marketing, I developed a JSON model to store basic directory information on all our division’s departments and offices, including hours of operation, location, phone, fax, etc. JSON, however, was not designed to be stored in a flat file, so I got clearance to recreate the model as a SQL database and .NET MVC application.
I designed a SQL schema to match the existing JSON model and migrated the data to the database. I then developed an MVC3 application (with a default and admin Area) to allow edits to the data, allow the public to view the data in an ordered fashion (and submit changes via an email form), and allow any public developer to read a generated JSON feed of the data.
The app itself is pretty simple, but the definite takeaway from this application was the implementation of OutputCache on the controllers. Knowing that the JSON would be consumed by UCF Marketing and most of our sites, I was able to easily implement an application-level cache of the feed so that it loaded instantly and structured updates to the data at a set interval.
Small, good ideas work! Sometimes a full-on application seems like overkill for a simple idea, but if that simple idea saves hours a week, then it’s clearly worth it.
- Type: Class
- Language: PHP
In our division, there are various entities we consider customers. Most of those customers cede support of their web environment to us, but some retain the right to have a full-time “developer” on staff to make edits. Unfortunately, there is crossover between sites we’ve developed and sites that these developers feel belong to them. This has been a problem for years; only now am I taking action programmatically. I got clearance to develop a simple PHP class/framework/engine to structure the basic data each of our sites require (title, subtitle, navigation, social networks, etc.).
I wrote everything by hand, top to bottom, imagining our basic PHP sites as objects. These objects needed many small pieces, like the title, the associated department, and the contact phone number, but I considered larger items, like database connections, the page requested, and the layout/design of the site. I wrapped most of this data in a straightforward class that accepted changes to its properties exclusively via setter methods, exposed data exclusively via getter methods, and farmed settings out to a config.ini file.
As every site was converted to this simple engine, it gave me the ability to wrap simple HTML blocks into helper methods. Now, every site has a standard way to print contact information, social networking URIs and buttons, footer information, and so on. It has been an easy bridge between design and development to save time and preserve a standard.
It also gave me a chance to develop a database class that preserves a single database connection via the singleton method (only allowing a single instance of the database object).
It feels like I’m creeping a little too far into custom-PHP land; I know we should be using something like Symphony or CodeIgniter and a templating framework like Twig or Smarty, but for this environment, where access to production is treated like a right and not something to be protected and given out sparingly, I needed something a bit more customized and esoteric. But rest assured this custom implementation will be trashed and swapped for some open-source framework as soon as our environment makes sense.
- Type: Single-Use Website
- Language: C#
- Framework: MVC 3
- Authentication: Integrated
- Data Source: Plain Text Files
The “Honor Your Knighthood”, despite having the most unfortunate name ever, alerts students and parents via email throughout the year as to the deadlines of modules all freshman must complete upon entering UCF. Although there were many other ways to accomplish this, they demanded an application from our development group to allow them to email static emails to a variable group of addresses on demand.
Wanting to get back into MVC, I fired up VS2010 and MVC3 and cranked this small application out in a couple of days. The application, once authenticated against Active Directory, would allow the user to select from a prepared list of available emails, specify a set of addresses to email (either by direct input or CSV), and verify both (after parsing each input as a valid email). The application forced all emails to a BCC field to avoid revealing sensitive data.
Using HTML from text files for the email bodies allowed for quick additions and new emails to be added to the system within minutes. The MVC framework also allowed me to easily force authentication for programmatic logic while allowing anonymous users to touch the assets within the application (images, documents, etc.).
Don’t take it for granted that everyone likes cats.
One of the last sites to move to our web cluster, the “My SDES” site was a simple (and horrible) application that used Integrated Authentication, LDAP, and WebDAV to allow users to use a web interface to access their appropriate folders on our file server. Even if you ignore the dangers in that statement, WebDAV has basically been phased out for WAN communication, so we had to come up with another solution. Rather than allow the application to continue to be a security hole, I convinced management that based on IIS logs, very, very few people utilized the site and replacing it with a site explaining the benefits of VPN and Remote Desktop was preferable.
I was given free reign to design the site and after deploying my template base, I tried to keep the elements as simple, inviting, and informative as possible while keeping it to a single screen.