Caching API Requests
I recently helped to complete development work on a pretty unique web application. The organization had an idea to create a place for people find out about the accessibility of many different business locations. Their hope is help people with physical disabilities better plan out any business or errands they have ahead of time, so they can choose the most accessible locations. They also believe this will help push demand for businesses to become more handicap accessible.
The solution our team came up with was to create a site based around Google Maps API, and provide an interface for users to submit reviews for individual locations. Users can search for a location on the site using the same functionality as Google Maps. Once they’ve selected a location, they can see the average ratings for that location’s facilities (parking, access, bathrooms, tables, mobility, and an overall score). They can also see what other people have written about the business in terms of its accessibility.
My role in the project was to make sure the site and server could perform well under a large user load. The original version of the site quickly ran into problems hitting request limits on the Maps API, and general slowness from poor database design. My contribution was to cache the Maps data into the WordPress database, and integrate some other custom tables into WordPress.
I added logic to the site so that whenever a user selects a location that has never been clicked on before, WordPress creates a post in a ‘locations’ custom post type. The location name, map ID string, address, phone number, website, and images are all saved to the post’s meta. So whenever that location is selected in the future, the data can be pulled quickly from the local database rather than called from an external API. Each locations post also includes meta for when its data was last pulled from the API. If it has been two weeks since it was pulled from the API, the next time a user selects it, it will update its data from Google. I also added functionality for the comment ratings meta to be cached into the location post, so it no longer has to be calculated on each view.
This project stood out from my typical development work because of its unique challenges. You can see the current version of the site here.
Recently I’ve been working on some custom development work for a few Shopify eCommerce sites. My work so far has included plugin apps and theme development.
On the theme development side, Shopify only exposes the front-end view code (HTML, SCSS, and JS) in the theme templates, enhanced with a templating language they call Liquid. The Liquid templating language seems exactly like Twig, which I’ve used countless times in the WordPress theme MVC framework I use. So the transition to Shopify theme development was pretty smooth.
On the one hand, keeping theme development exclusive to front-end code makes a lot of sense from a programming standpoint. It keeps the views ignorant to back-end controller implementation, which is something I strive for in my WordPress theme MVC setup. On the other hand, it can make any extra functionality initially more difficult to implement. In WordPress theme development, it’s almost too easy to add things like content filters, meta fields, and new taxonomies. In Shopify, that sort of functionality is relegated to plugin app development, which can help organize code and pays off in the long-term. Overall I think Shopify takes the right approach to theme development.
On the plugin app development side, Shopify provides a robust API for any functionality additions or modifications you might want to make. A standard Shopify instance is locked down on the hosting they provide, so all apps have to run on your own external server. The app has to either provide its own UI on its own domain that the Shopify admin links out to, or hook into Shopify’s Embedded App SDK to display in a frame within the admin.
I’m wrapping up work on two embedded Shopify apps built in PHP. The first provides extra admin fields to products, so admins can control some custom functionality for product pages. The goal is to provide something like an Advanced Custom Field experience to the Shopify admin. For now, the fields are configured by a developer through a JSON file, so the client admin doesn’t have to bother with creating and implementing fields. I’m using it to create product fields for custom warning messages and minimum order quantities. The second app integrates Shopify orders with Amazon S3 storage. The use-case for the client is to have customers upload images with a customized order, and store those images in an S3 bucket. Right now the app uses Shopify’s CDN as temporary storage for the image as the customer completes the order, and then hooks into Amazon’s PHP SDK to upload the image to the S3 bucket.
I’ve really enjoyed working in Shopify so far. I like the strong separation between back-end functionality and templating. It’s been a nice refresher from the many WordPress projects I’ve had lately.
My Experience With an HCI Master’s Degree
Several months ago I decided to change degrees in my master’s program at DePaul from Human-Computer Interaction to Software Engineering. I had already done over a year of coursework in the HCI program, and I really enjoyed the research and data analysis aspects of what I learned in those classes. As I progressed into the more advanced classes though, there was a significant shift from doing research and analysis, to learning about design elements and prototyping tools. I felt that this focus on design was not applicable to my current career, or what I see my career ever becoming. That feeling prompted me to look into other master’s programs at DePaul, and ultimately change to a Software Engineering degree. Luckily I didn’t have to sacrifice any of my HCI credits, they all applied to the Software Engineering degree electives. So far, it’s been really rewarding to see my programming work experience pay off in my education, and to supplement my daily work with new programming concepts I’ve been reading and studying in this degree program.
Holland State Park Illustration
This is a piece I did as a gift for my family that lives in western Michigan. There are countless beautiful beaches on the Michigan west coast, but Holland State Park has always been special for my family. I practically grew up on this beach, watching the sailboats go by. Besides the subject, I like this piece for the many different textures I was able to capture.
The Web in Developing Nations
Lately, my writing efforts have been entirely focused on my master’s degree in Human-Computer Interaction, so I thought I could at least post some of that work here for the time being.
I recently wrote a research paper about web usability in developing nations. I love discussions around web performance, so I was particularly interested in this topic. In the context of the class, I wasn’t able to dive as deep into the technical aspects as I would have liked, but I’m pretty happy with out it turned out overall. Here is a quick intro to the paper:
The internet is widely available and reliable for those of us in developed countries like the United States and most of the European Union. We have fast, highly accessible networks, ever more powerful technology to access these networks, and relatively good education systems to help us use them. But people in less developed areas of the world can have a significantly different, and often more challenging experience accessing the web. What are the problems people in these developing countries face in regards to web accessibility and usability? How can a better interaction with the web help improve the lives of these people? As designers, developers, and analysts, what can we do to improve this interaction, and why do we even care in the first place?
I’ve had some time to reflect on my work from the past few months, so I’d like to write about a couple of projects and some insights I’ve gained from them.
One of the organizations I work for is going through a major overhaul on its eCommerce platform. We are moving inventory to a new warehouse, changing shipping policies, adding new products, and working towards simplifying our customers’ experience. My role so far has been to rework our SQL databases to conform to our new data structures, rewrite the back-end (PHP) logic associated with those tables, and rework our store website’s custom admin panel. It’s been a lot of work, but I’ve really enjoyed the chance to stretch out my SQL knowledge.
Data structures seem to be a common thread between my work projects lately. My work involves different ways of organizing data, like JSON, SQL, and associative arrays, and how to communicate that data around different programming frameworks. It’s always satisfying when all the different parts of a system fit together nicely and churn out exactly what you expect.