I am thrilled that my iOS outlining app for writers has been accepted onto the App Store! For those who need a refresher, Leder is a highlighting and outlining tool that helps writers organize and edit text on the go. I researched, designed, and developed Leder myself as part of my master's degree in creative digital media.
Onboarding is the process of introducing new users to a product. At its most basic level, onboarding should explain how your product works. But truly effective onboarding sends an even deeper message. It should let users know how your product will enhance their lives. Most users call it quits after only a few times trying a problematic app—onboarding may be your only chance to convince users that your product is worth their time and energy.
Debugging is very much a way of programming life. Unfortunately for novice programmers, most people won’t tell you that. I learned later than I would have liked that much of programming is not writing new code, but figuring out what’s wrong with your existing code. To help you figure out what is broken and how to fix it, I am sharing my seven best tips on how to debug your code.
Like many novice AngularJS programmers before me, I thought I struck gold with the $scope.$apply() method. That method seemed like the perfect way to ensure that all of my bindings updated properly. Though I came across cautionary tales, I did not heed the warnings—the method seemed to work so well. My code was soon littered with $scope.$apply(). Then my app’s performance began to take a hit.
Today I’m going to go over how to customize and improve the text input field that comes with the Ionic framework. I am writing this tutorial because Ionic does not have form documentation beyond HTML markup (probably because forms are fairly standard in AngularJS, which is the framework Ionic is built on). While the methods I describe are not overly complicated or tricky, it did take me a few hours to get all of these features to play nicely together.
About a week ago, I reached a breakthrough in Leder. I finally finished the basic functionality in my app. I was thrilled! Leder was working! First-class honors was in my future. (See Irish grading system.) About two minutes later, reality sunk in. There was—and is—much left to do on my project in addition to the basic functionality. Some of the outstanding issues are crucial to Leder’s functionality (for instance, what if the user imports the same note twice?), some crucial to its user experience (what if the user wants to clear the highlighting from a given section?), and of course, many issues fall under nice-to-haves (search, filler notes, etc).
Once I decided my journalism app needed a database, I considered first and foremost what data would be stored and what I wanted to do with it.
Determining the requirements surrounding your data and application is, in my mind, the most important consideration in choosing a database. There is no one superior database—all have different pros and cons. It’s important to know what you absolutely need, and what you can do without.
In an effort to better present and document my code, I decided to go through what I’ve written thus far with a fine-tooth comb. Fortunately, AngularJS (and consequently Ionic) is an MVC-based framework, meaning that code is logically divided between the model (the data and inner workings of the program), the view (what the user sees), and the controller (which controls the view based on the model).
For example, let's say the model is an array of 10 numbers, which exists somewhere in the code. The user may only see numbers one and two. The controller controls what the user sees, setting the array to only display numbers one and two.
Last weekend, I spent more than 10 hours trying to figure out why my custom highlighting functionality was not working in iOS Simulator, yet worked perfectly in the browser. I did not find too many resources online, so I am writing this post in the hope that it may shed some light for others.
Until this point, I had written a series of functions that split one long string (a paragraph) into an array of strings (individual words), separated by whitespace. I recorded the first and last strings touched by a user, and applied a yellow background—a "highlight"—to the first string, last string, and all of the strings in between. The touch event fired continuously, and so as a user dragged his finger across the screen, the last string he touched updated continuously.