In most of my iOS roles, accessibility support has been a secondary concern. Fortunately, an employment opportunity in early 2020 afforded me a chance to work on a team that felt differently. Together, we worked to define accessibility best practices, standards, and workflows for our entire organization.
This article describes the finalized workflow that our development, design, and product teams used when revamping our app’s accessibility support in the following months.
Accessibility support in iOS is achieved through the use of a screen reader utility called VoiceOver (VO).
iOS exposes a variety of accessibility attributes to help the developer configure…
Let’s take a look at the compression algorithm behind Unix’s
compress and most .gif compression.
The Lempel Ziv Welch [LZW] algorithm is a greedy lossless compression algorithm that works by replacing recurring patterns with shorter codes in order to save space.
Lossless is a form of compression where no data is lost.
We’ll go over the algorithm and take a look at an implementation in Python.
For simplicity sake, we’ll limit the discussion to encoding ASCII characters.
Essentially, if as we’re processing a text file, we’re able to identify recurring phrases, we can substitute those phrases with a code that…
As a hobbyist photographer, I’ve always wondered how Apple Photos, Lightroom, and Photoshop implement image contrast adjustments. After spending some time reading into it, the approach is worth sharing.
Let’s start with the basics.
A histogram is simply a bar chart representing [in this case] different frequencies of colors in an image.
Here’s a typical histogram you might see:
Source: Histograms for Beginners
As a preliminary step, let’s try and manipulate the brightness in an image. It’ll lend itself to making contrast adjustments later on.
Given a histogram, if we shift it’s contents left or right, we can make the…
I’ve always wanted to localize my personal apps, but I found it to be too expensive. Since many apps share the same vocabulary (News Feed, Dashboard, Forgot Password, Take Photo), it seemed silly to pay to translate words that some other development team must have previously paid to translate.
So, I’ve created an open-source translation memory for all iOS developers to benefit from. I processed over 500K GitHub iOS projects, AppleGlot, and other open-source resources and created a database of almost 15 million translations.
Check it out here: http://localizer.digitalbunker.dev/
Now, a developer can now upload their Localizable.strings, run it against…
I’ve been primarily an iOS developer for the last few years, so naturally, when I started dabbling with web development, Vapor was the obvious choice.
Eventually, the lack of documentation and open source libraries compared to Node.js ecosystem inspired a switch.
Over the last few weeks, I’ve been building out a few sites and the first production-ready project launched on Product Hunt last night — mixRecipes.
In quarantine, I’ve been indulging in my cooking hobby more and more…
A few months ago, I wrote an article about how to implement iMessage Sticker packs complete with fetching remote images and setting up analytics to see how each individual sticker performs.
Since then, a few friends and family members have expressed interest in creating their own sticker packs. Though you’d expect it to be a fairly straightforward process, it quickly becomes complicated: setting up Xcode, creating an Apple Developer Account ($100), managing App Store submission and code signing, promo codes, etc.
To solve this problem, I spent the last few weeks building StickerSpot. It’s a platform that helps non-technical designers…
I’ve been dabbling with Server Side Swift over the last few weeks and unfortunately there isn’t as much documentation as I’d have liked. Over the next few articles, I’ll take you through the entire process of creating a production application from scratch, adding custom routes, serving views, futures, and finally deploying the project to our own VPS and enabling HTTPS through a SSL certificate.
First, let’s install Vapor.
The easiest way is through Homebrew. If you don’t have it already, just run the following command in Terminal:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Now, we need to tell Homebrew where…
Like most kids that end up pursuing a career in software development, I’ve always gravitated towards technology. Not a summer went by where I wasn’t tinkering with electronics in the garage, attending robotics camp, space game, or simply just programming away.
Fast forward a few years, and I’m a junior in high school. I get the opportunity to do a summer internship at a state university nearby. I was part of a small team that was tasked with inventing some type of assistive technology product. …
Let’s begin with the foundation of our take home assessment — the network layer. As an interviewer, I’d want to see, for a project like this, a light-weight extensible network layer. If a candidate used something like Alamofire, I’d take it to suggest they’re just unfamiliar with URLSession which would be a red flag.
Let’s consider how we should organize our endpoints. We know that generally speaking for these take home assessments, the endpoints we’ll be using are performing pretty basic CRUD operations. So, we can keep our endpoint model pretty simple and start off with something like this:
Senior iOS Engineer @ Turo. Previously, Scoop Technologies & Porsche Digital