Categories
Training

Delivered AWS and Test-Driven Development Training Classes

I just recently gave a one-week training class on Amazon Web Services for corporate developers that were new to the cloud. We covered EC2, S3, Elastic Beanstalk, Glacier, ElasticSearch, Elastic Load Balancer, costing, scaling, and quite a few other topics. Most of the training was language-neutral, but we used Java for the programming exercises.

In addition to the AWS class, we also did a half-day exercise on Test-Driven Development with Java (using JUnit 4), which I could have expanded out to a full day pretty easily.

If you’re interested in either of these classes, or training classes on iOS or Android, feel free to contact me through this web site. I’m working on building out some supporting training materials and additional exercises for both of these classes.

Categories
Talks Uncategorized

Running in all 50 States – 50 States, 50 Marathons

Earlier this month, my wife Cheri and I finished running a marathon (or longer) distance in each of the fifty states of the US by finishing the Maui Oceanfront Marathon in Hawaii. It was a goal I’d worked on since my first marathon, in Maine, in October 2008.

I gave a talk on running in all 50 states today at Link Coworking as part of the Link at Lunch series, and I wanted to share the slides.

Categories
Android App Components iOS Development

Keeping your Mobile App Libraries Up to Date

As a mobile app developer, I use many third-party libraries in my Android and iOS applications. Most of them are open source, but a few are closed source, commercial libraries (such as Flurry, a mobile app analytics SDK).

One of the problems that I’m running into, especially as I have plenty of apps that are now past the “active development” stage, is that these third party libraries don’t necessarily function well on the latest versions of the mobile operating systems. This usually doesn’t affect the shipped version of the apps – iOS in particular does a great job of simulating older operating systems, so that an app that was compiled for iOS 4 will run fine on an iOS 9 device, although the screen size won’t be the best for the newer iPhones. Android lets you specify which SDK version you are targeting, as well as the minimum SDK version you support – you can probably safely get away with supporting Android 4.0 and above for new projects, ignoring the older Android phones running on Android 2.3 (Gingerbread).

The catch comes when it’s time to update these apps – new content, a new visual style, even just an upgrade to support the latest screen sizes. Now a lot of the libraries that may have been ok in 2012 have started to show their age, in particular with iOS’s Adaptive Layout for responsive designs on iOS. Various quirks surface that need to be worked around, and a simple project to update something can take more time than is really needed.

What if you weren’t stressed about upgrading your apps? What if you’d just made updating the app’s libraries part of an ongoing process – some upgrades are necessary (security fixes, new operating system updates), and others weren’t? It’s not like it’s terribly hard to do with either CocoaPods on iOS or Gradle on Android – but out of sight, out of mind, until you get that hard deadline.

I’m building a service that takes your CocoaPods Podfiles, and your Android build.gradle files, and monitors all of this for you. I’m starting with CocoaPods first, as I think the need is greater there due to the way iOS breaks compatibility at the view layer, and then doing Gradle later. You’ll simply get an email any time a CocoaPod or Android library gets updated at the central repository, and you can decide when to upgrade. You can monitor the status of all of your projects on a dashboard to get a quick view of any technical debt that may have started to accumulate.

If you’re using continuous integration, you’ll be able to fire off a quick API call to the service to update your Podfile.lock or build.gradle to keep your project up to date.

Are you a mobile app developer who’s currently stuck in maintenance mode? Would you like to be on top of things, instead of constantly working from behind? Email me at jlinwood@gmail.com so that I can put you into the beta version of the application. I’m just as excited about this as you are!

Categories
Talks

Developing a Student Media App Presentation

I had the opportunity to give a talk about developing mobile apps for college student media publications today at the ACP/CMA College Media Convention here in Austin today.

We had a great discussion about pitfalls around developing in-house native apps for college newspapers and magazines.

Categories
Biscotti Labs

Updated Biscotti Labs Web Site

I’d originally built the web site for my mobile app development and training company Biscotti Labs as a very simple static Twitter Bootstrap HTML page.

I liked the idea of keeping the site as a static single page, instead of worrying about keeping another content management system up to date (WordPress has to be kept updated on a pretty regular basis because of security holes).

I also didn’t like the idea of digging too deep into a CMS theme to get things to look the way I wanted – customizing a WordPress or Drupal theme can be pretty time consuming, and I don’t really enjoy theme development.

I went with a single page theme that I bought from MediaLoot – my go to place for user interface assets. They have a much better license agreement than other marketplaces, but less selection.

A little customization (including some bear photos my wife and I took during a trip to Katmai National Park in Alaska), and I have a new web site for Biscotti Labs!

The next step will be to optimize the front-end web performance on the web page – out of the box, there are a few things that could be improved with the Javascript on the site.

Categories
iOS Development iPhone Development Teaching UT Austin

Fall Semester 2015: Mobile App Development Class for iOS

It’s the fall semester at the University of Texas at Austin, and I’m teaching my introduction to iPhone app programming class again! This is the third time that I’ve taught the class, and I’m always excited by it.

This year, we’ll be using the Swift programming language, and we’ll also be using Auto Layout from the very beginning of the class for responsive user interface design. Those are two major changes from how the class was taught in previous semesters (Objective-C, and very little Auto Layout).

Because this is a class for journalism students who may have never programmed before, I take a slightly different approach than many of the other iOS programming classes and tutorials. We start with a user-interface driven approach, and then go into programming.

If you’re interested, I’ll be adding links from this year’s class (and previous years’ classes) onto this web site on the Mobile Apps Class page.

Categories
Android iPhone Development Phonegap Talks Twilio

Twilio Signal 2015: Video of my Talk

My Talk at Twilio’s Signal 2015 Conference, Using your web development skills to build Twilio-powered apps for Android and iOS, is now up as a video. If you’re interested in adding voice to your mobile apps using the Twilio Client Plugin for PhoneGap, this video is a short intro to the topic. If you have any questions about mobile app development with Twilio, I’d be happy to talk about it!

Categories
Android iPhone Development Phonegap Talks Twilio

Twilio Signal 2015: Build Twilio-Powered Apps for Android and iOS

Categories
Uncategorized

LittleBits/Matrix Color Rotator Code for Twilio Signal HackPack

I made my twitter handle scroll across the screen, changing colors as it goes – pretty simple effect, but here’s the Arduino code:

#include <Adafruit_NeoPixel.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>

#define PIN 1

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 8, PIN,
NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
NEO_GRB + NEO_KHZ800);

void setup() {
// put your setup code here, to run once:
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(30);
matrix.setTextColor( matrix.Color(0, 0, 255) );

}

int x = matrix.width();

int colorRotator = 0;

void loop() {
// put your main code here, to run repeatedly:
matrix.fillScreen(0);
matrix.setCursor(x, 0);
matrix.print(F("@jefflinwood"));
if(--x < -70) {
x = matrix.width();
colorRotator++;
}
if (colorRotator > 3) {
colorRotator = 0;
}
if (colorRotator % 3 == 0) {
matrix.setTextColor( matrix.Color(0, 0, 255) );
} else if (colorRotator % 3 == 1) {
matrix.setTextColor( matrix.Color(0, 255, 0) );
} else {
matrix.setTextColor( matrix.Color(255, 0, 0) );
}
matrix.show();
delay(100);
}

Categories
Phonegap Twilio

Quick Installation Guide for Twilio Plugin for PhoneGap

I’ll be speaking at Twilio’s Signal Conference later today about the Twilio Client Plugin for PhoneGap. Here’s a quick getting started guide (as a PDF) for running the Twilio Client inside of a PhoneGap mobile App.

Installing the Twilio Plugin for PhoneGap