The Portfolio of Derek Brooks

Image Processing

I've done image processing and manipulation with several libraries including GD, Image Magick, Image Science, PIL - everything from cropping, and resizing to appending watermarks and rotating based on EXIF information.

Here are 17 projects that I've worked on tagged Image Processing.

Roboflow Python SDK

Screenshot of Roboflow Python SDK
Roboflow is a computer vision startup founded by a friend in my city. I spent a short time contracting with them to build APIs and work on their Python SDK. Aside from implementing some image classification and segmentation features, I was also about to containerize the Python package, DRY up a bunch of code, and improve their test coverage. I really enjoyed getting to work with this company and play with ML, computer vision, and annotating images with masks, overlays, etc.

derek.broox.com

Screenshot of derek.broox.com
derek.broox.com is my general home page, online scrapbook, and development playground. Its primary purpose is to catalog my life and allow me to play with various APIs and web development technologies. It serves up thousands of photos, check-ins, microblogs, blogs, maps, videos, and various other data from my life. Since 2001, it has been a constantly evolving web application.

v8 - latest version

This is the first version of my site that I completely rebuilt in a new language and platform. I moved the entire site from a containerized LAMP stack to a server-side-rendered (SSR) Nuxt.js application that relies completely on the Broox API to power its content. I chose Nuxt and SSR in order to keep my SEO and open graph / social sharing meta tags intact while still providing a speedy, asynchronous client-side browsing experience.

Broox Integration

Broox Integration is a containerized set of scheduled and manually run Python scripts that I use to manage the data that powers the Broox API. Its primary purpose is to sync data with various social networks (Flickr, Twitter, Foursquare), but I also use it for things like moving photo assets to cloud storage providers or running batch operations on my local data. All third party API response data that I fetch is cached in a Mongo DB and then manipulated to store only the relevant data in the MySQL DB that powers the Broox API.

Broox API

Screenshot of Broox API
This is a RESTful API to surface all of my personal data like blogs, microblogs, photos, geodata, etc. It currently powers derek.broox.com and photos.broox.com.

v2 - latest version

After growing a little tired of Node, Express and Sequelize, I decided to rebuild my personal API using Python, Flask, and SQLAlchemy. The end product felt much cleaner and allowed me move a lot faster when iterating on new features.

Carfiend API

Screenshot of Carfiend API
Carfiend was a mobile application built for car enthusiasts to share photos of both their own cars and cars in the wild. The idea was that it would become an Instagram for gearheads. A couple friends and I were hired to build the backing API for the project. We collectively architected the application and built the API out in Python using Flask and SQLAlchemy. I built many of the endpoints and models for interacting with cars, photos, events, other users, search, etc.

Narwhal

Screenshot of Narwhal
Narwhal was the famous technology infrastructure behind Barack Obama's 2012 Re-election campaign. It was a Python-based interface and integration layer that allowed us to unify the disconnected pieces of what we knew about voters, volunteers, event-goers, voting locations, etc. I was one of the top 5 contributors to the Narwhal project. The integration side was a small web layer that handled syncing data with our vendors in real-time. Incoming data was saved to a local database and then became queued via SQS for translation and loading (by our integration workers) into the Narwhal interface layer. Here, I extended existing integrations and built some parts to sync voter applicant and precinct data. The interface side allowed us to use this unified data to quickly build dozens of client applications for various tasks across the campaign. I spent most of my time in Narwhal building and extending models and endpoints to support client application needs. The pieces I worked on helped support pollster surveys, phone canvassing, volunteer organizing, image processing, voting location lookup, incident tracking, etc. I also built a thin Ruby Gem that allowed our ruby based API consumer applications to quickly and easily interface with the Narwhal API.

Des Moines Alive

Screenshot of Des Moines Alive
Des Moines Alive is a personal project that my friend Nick Leeper and I built to help Des Moines Area folks find awesome local bars and restaurants. In addition to general merchant info, we provided users with aggregated data such as reviews, foursquare tips, merchant tweets, etc. We designed Des Moines Alive to be very lite and easy to navigate. The goal was to provide our visitors with the information they wanted as quickly as possible.

v2 - latest version

Nick and I decided to use this version of Des Moines Alive to learn new things, play with APIs, and switch our focus to local businesses. We built our own custom PHP MVC, with ideas borrowed from our experiences with Rails and Kohana. We redesigned our database to be more efficient. We also began using many more APIs such as SimpleGeo, Google Maps, Facebook, Foursquare, and Twitter to aggregate data and give our users more information.

Countryside Motorsports

Screenshot of Countryside Motorsports
Countryside Motorsports is an interesting little site that I was able to crank out pretty quickly in 2008. However, we got it done right when our client got super busy, so it sat unlaunched for about a year until we were able to resurrect, update, and launch the site. It was a pretty basic marketing/inventory viewing site for an ATV, Snowmobile dealer in Iowa. I modeled and built a custom admin for managing inventory, specials, and homepage banners.

Michael Annett

Screenshot of Michael Annett
Michael Annett was an upcoming race car driver from Des Moines, IA. We didn't build his site from scratch, but when his site development/hosting company stopped providing good service, we were asked to take over. The former host of michaelannett.com was not very cooperative in the site transition - so we had an interesting time getting Michael's content for him. To get Michael's site, we wrote an internal app called Site Spider to crawl his existing site, save all the pages, their images, stylesheets, javascripts, etc - all while preserving the links and folder structure. Once I successfully crawled and downloaded this site, I put this app into our internal Content Management application, SiteMan. I also built a couple custom SiteMan plugins, which included a photo gallery and online store management. The store they wanted was fairly small, however, no matter the size, building an online store is quite an effort. After launch, Michael was able to easily update news, photo galleries, results, schedules, general web page content at anytime, and could sell his gear online.

SiteMan

Screenshot of SiteMan
SiteMan is a Content Management System that we built at Red 5 Interactive. It was originally built so that mall property owners could manage each of their mall property's websites. However, once we realized how powerful our system was, we decided to generalize the app so that we could deploy it for all of our clients. We rebuilt SiteMan to allow our clients to easily manage a single website or a group of websites. This way, a parent company could edit any of their child company websites, while employees of the child companies would only be able to see and manage their respective site. The front-ends of the sites managed by SiteMan were also completely extracted from SiteMan itself, which was great for 2 reasons. First of all, it allowed us to more easily keep all of our clients' systems up-to-date in that we were just updating SiteMan and not touching their presentation layer. Secondly, it also allowed us to launch new campaigns and designs for clients very quickly without touching the content management system. When we deployed SiteMan for a client it came with a core group of tools like user management, web page editing, file management, audit logs, etc. From there, custom tools could be added as plugins. These tools included functionality like, announcements, events, careers, photo galleries, stores, social networking, etc. We also built SiteMan in a way that allowed users to customize their tool layout. Any user could pick which tools they used the most and arrange them in a way to get a quick snapshot of the exact data that they were interested in. Tools could be added, removed, or sorted at any time - and everything remained just as they left it on their next visit. This application was very Javascript heavy, making extensive use AJAX, dialog windows, and WYSIWYG editing. As such, we had minimal page loads which provided a very streamlined experience for our clients. I am very proud and excited to have worked with such a great team on this app. It was so versatile and simple to keep pushing forward.

Signs Plus

Screenshot of Signs Plus
Signs Plus is a Des Moines area company who is responsible for some of Iowa's most impressive signage. They hired my company, Red 5 Interactive, to completely rebuild and rebrand their site. They wanted something that was loud, colorful, and gets their products right in front of the customer. Our designer took care of the visual aspects, while I was in charge of modeling and content management. The major function of the admin panel was to allow Signs Plus to upload photos of their work. The images were dynamically resized in several ways to fit the flash-based home page, as the rest of the site. Being that the homepage was flash, I also built some dynamic XML endpoints to feed data to power the animations. Shortly after release, we received emails from Signs Plus saying that they were already getting new business based on the quality of their site.

Keokuk County State Bank

Screenshot of Keokuk County State Bank
Keokuk came to us with a redesign in mind and also wanted the ability to easily update loan rates, add news articles, and attach rich media to those news articles. Keokuk's website wasn't too programmatically intensive, but it did give me an opportunity to try out some new Rails ideas. While building this app, I found a Rails plugin called ActiveScaffold, which made a standard CRUD scaffold that was very javascript heavy with a lot of asynchronous calls and very few page loads. It was a fun plugin to play with and after a bit of modifying and extending, it seemed to fit the bill for this project.

Team 46

Screenshot of Team 46
Team 46 is a group of service and avionics specialists working at the Des Moines Flying Service (DMFS). They hired our company, Red 5 Interactive, to make a micro-site for their technicians. The Team 46 micro site was pretty straight forward. They needed a way to blog, manage case studies, take service requests, and upload photos. For the blog, I simply installed an internal blog plugin that I'd previously built. Everything else in the CMS was custom programmed. There was nothing crazy about this app, but everything was built and deployed very smoothly.

The Bellevue

Screenshot of The Bellevue
The Bellevue is a building located in downtown Philadelphia that houses restaurants, shops, and a hotel. They hired my company, Red 5 Interactive to build an informational site for them. I built a small, custom content management system for this site allowing Bellevue to manage events and photo galleries. The photo galleries could be organized and sorted via drag and drop.

Countryside RV

Screenshot of Countryside RV
Countryside RV was my first complete Ruby on Rails site. I was the main programmer for this project while working with Red 5 Interactive. Our designer and front end developer took care of most of the design and html build-out. I was in charge of modeling and building the actual application and content management system. The primary function of the site was to display all of Countryside's current RV inventory. Countryside could add a large amount of detail as well as upload multiple photos of a given RV. We've also implemented a "Buyers Gallery" that allowed some visible interaction with Countryside's user base. When someone bought an RV from Countryside, they'd be featured on the website with their new camper.

Solid Grind

Screenshot of Solid Grind
SolidGrind is a personal project that I developed as an extreme sports / soap shoes promotional and community website. It's the predecessor of my former Broox Extreme (www.broox.com) and BrooksFSW community sites. After I came up with the name and domain, I decided that rather than customizing a prebuilt system, I wanted to build this site from scratch. Developing the entire site myself was another great learning experience and paid off numerous times; I had full control and a great understanding of the system, so I could easily add on, fix bugs, and rebuild sections. One of the more fun parts of SolidGrind was the "feature pic" system. It allowed users to upload photos to be reviewed by the administrators that I'd hired. The uploaded photos were queued in a database and could be viewed/approved by administrators. Upon approval, the website would automatically size/scale the image, add a SolidGrind.com watermark to it, create a thumbnail, store it in the database, and feature the picture on the homepage until a new photo was chosen. In addition, I designed it so that each picture had to be featured for at least 24 hours; this gave everyone a fair amount of time on our front page. Besides photos, the site featured news, forums, tutorials, videos, and several other things related to extreme sports.

v2 - latest version

In 2006, I re-released Solid Grind to get away from publishing broader extreme sports content and focus on the grind shoe scene. There were so many other extreme sports sites with a full staff dedicated to maintaining them, but no one had this thorough of a website dedicated to the grind shoe scene. I worked with Nicole Sutherland on the design of this version, which turned out great for the content being delivered. The new version of the site was much more complete, the code was much more efficient, and photo manipulation was handled much better. With the initial version of SolidGrind I was very proud of the photo management system - this system was much cleaner and much more versatile in that most image manipulation was handled on the fly.

Wireless Wallpapers

Screenshot of Wireless Wallpapers
Wireless Wallpapers was a personal project of mine. It was a site that allowed users to download wallpapers for their early 2000s color screened mobile phones. At the time there were several sites offering this service however nearly all of them only supported one type of phone or charged money for each wallpaper downloaded (usually $1.00 per wallpaper). Wireless Wallpapers allowed users to download unlimited wallpapers for free, which were available for several types of phones. The free wallpapers had a tiny "wirelesswallpapers" watermarks near the bottom of the image, however if the user paid a small fee each month, they could get more features (such as private wallpapers) and the watermark was removed. In addition to this, I added functionality to allow users to upload their own images to the website which gave me the ability to let the site run itself. The website automatically resized the uploaded user images to fit various mobile screen sizes and printed my watermark to the image. The site was a huge success and learning experience. The first day it was online it received 7,000 hits and had nearly 100 users. After the first week there were nearly 50,000 hits and 500 users. Upon selling the site, I had over 24,000 users and received over 3,200,000 hits.