LunarLincolnLunarLincolnLunarLincolnLunarLincoln
  • Home
  • Process
  • Services
  • Work
  • Writing
  • About
  • Contact
  • Home
  • Process
  • Services
  • Work
  • Writing
  • About
  • Contact
Mar
28

Mobile Madness – Round 2 (People and Code)

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Business, Coding

The results are in and the winners from yesterday are: AWS, Xcode,  Felix Krause, and Steve Ballmer. Here is your updated Bracket.

[separator type=”” size=”” icon=””]

Limor Fried vs Erica Sadun

Software versus hardware, each of these women is dominating their field. Make your pick!
Answer the twitter poll here


limor-fried-adafruit-entrepreneur-of-the-year11

sadun_erica_c

[separator type=”” size=”” icon=””]

Jake Wharton vs Jake Marsh

Battle of the Jakes and at the same time battle of the iOS versus Android indie experts. Which Jake do you back?
Answer the twitter poll here


imgres

Mashable-User-Pic_400x400

[separator type=”” size=”” icon=””]

iOS vs React Native

This is really a battle of native versus cross platform. Flexibility or doing it right? Which side are you on? Answer the twitter poll here


poster_large

react-logo-1000-transparent

[separator type=”” size=”” icon=””]

Objective C vs Swift

Oh snap! Old school or new school? Have you dipped your toe into the new Apple paradigm? What do you think? Answer the twitter poll here


url

icon


Mar
25

Mobile Madness – Round 2 (People and Tools)

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding

The results are in and the winners from yesterday are: Xcode, Android Studio, Jenkins, and AWS. Here is your updated Bracket.

[separator type=”” size=”” icon=””]

We are entering the second round of Mobile Madness 2016. The pairings are getting a bit more interesting as we move towards the finals. Welcome to the sweet 16!

Steve Ballmer vs Steve Jobs

We love so much about both of the tech giants, but only one can win today in the battle of the Steves. Who’s it going to be?

3014155-poster-1920-comparing-apples-and-microsofts

Steve Jobs brought us so many things, and in many ways LunarLincoln wouldn’t exist without the App Store. Forgetting that Jobs was famously against having an App Store, we still owe him credit for so many incredible inventions. Plus, he was a pretty inspirational guy:

[responsive_video link=”https://www.youtube.com/watch?v=UF8uR6Z6KLc”]

And then we have Steve Ballmer. The man. The legend. I mean, if you can get Bill Gates to dance on stage to celebrate the Windows 95 launch, what can’t you do?

[responsive_video link=”https://www.youtube.com/watch?v=XKVJoBGq-7g”]

So which Steve will take home today’s prize? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Jony Ive vs Felix Krause

Up next we’ve got industrial design genius Jony Ive vs newcomer and epic craftsman Felix Krause.


static1.squarespace

maxresdefault

Jony Ive has brought us so many beautiful pieces of hardware over the years and has been instrumental in the Apple we all know and love today. He also inspired one of our favorite parody videos about the new Macbook One:

[responsive_video link=”https://www.youtube.com/watch?v=KHZ8ek-6ccc”]

Felix Krause on the other hand has saved us countless hours over the past few months with his amazing suite of Fastlane tools. We used to true through mundane development tasks, but now we can automate all the things. Here he is speaking about Fastlane:

[responsive_video link=”https://www.youtube.com/watch?v=ZAnHxP5dnuc”]

So who would get your vote? Chamfered edges or developer automation made simple? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Xcode vs Android Studio

And here we have a classic showdown. The most popular IDE for iOS vs the most popular IDE for Android. If you’re a mobile developer, odds are you spend almost all of your time working in one or both of these programs. They can be your best friend or your worst enemy.


icon128-2x

Android_Studio_icon.svg


If you’re a mobile developer, you probably have very strong opinions about each of these. Xcode, like most things Apple, tries to make things simple, but as developers we often play the role of power user. We love storyboards, playgrounds, and the speed of deploying a new app to the simulator. On the flip side, using Xcode always feels like you’re one step away from disaster, and frequent crashes and restarts will wear on you after a while. This erratic behavior has even lead some developers to think Xcode is a sentient being. Android Studio provides a great environment to craft your Android masterpieces. Google’s constantly putting out beta versions of new releases so developers have more tools at their disposal as fast as possible. While Android Studio lacks some features like a robust visual layout editor and proper Android simulation (not emulation, which is what Google currently offers, and is terrible), it makes up for it with its great refactoring tools and the ability to create gorgeous layouts with simple XML (I dare you to edit your XIBs in XML!). Plus, Android Studio is an extension of IntelliJ which has tons of great support from its developers and the community. You may use and love both programs, but only one can reign supreme!

If you’re a mobile developer, where would you rather spend your time? Answer the twitter poll here

 

[separator type=”” size=”” icon=””]

Jenkins vs AWS

headshot

aws_logo

In our final match of the day we’ve got Jenkins vs AWS.

Though not directly related, both Jenkins and AWS provide invaluable services to developers. Jenkins provides a simple yet extensive interface for continuous integration which keeps dev shops constantly aware that their tests need to be updated (because a failing test clearly means the test is wrong, not the app). Amazon Web Services is perhaps the leading cloud hosting platform and their fame is nothing short of awesome. Developers can deploy directly to their Elastic Beanstalk instances with a single command and integrating your apps with their hosted storage (S3) and database options (RDS, DynamoDB, etc.) is well documented and incredibly useful. It’s hard not to love both of these services for their essential contributions to shops big and small, but you can only vote for one!

Answer the twitter poll here


Mar
24

Mobile Madness – The Tools

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : App Advice, Business, Coding

The results are in and the winners from yesterday are: iOS, React Native, Objective C, and Swift (Obviously some apple fan-boys out there). Here is your updated Bracket.

[separator type=”” size=”” icon=””]

On to the final first-round bracket of Mobile Madness 2016. The Tools. You need them, the love them, you hate them, you shout whyyyyy at the sky while Xcode hangs. Which is the best? Which is crucial to mobile development? Let’s begin.

First up: iOS Tools

Xcode vs AppCode

Xcode gets a lot of flack from developers because Apple more-or-less forces their developers to use it. Sure, it has tons of great features and debugging tools, but every little glitch or crash becomes colossally irritating because of a lack of alternative options. Enter AppCode, JetBrains’ introduction into an iOS and OS X IDE. AppCode attempts to solve a lot of the headaches Xcode creates, like improved refactoring support and auto-generated snippets. But AppCode comes with a hefty price tag and often lags behind when Apple releases new APIs. Is the increased convenience worth the cost? You decide! Answer the twitter poll here


icon128-2x

OBJC

 

[separator type=”” size=”” icon=””]

Second Bracket: Android Tools 

Android Studio vs Eclipse

Eclipse has long been a Java programmer’s goto IDE for all of their needs. Console applications, GUI applications, applets, web apps, and more can all be cranked out from Eclipse. It’s no wonder why Google initially supported Eclipse when they debuted their Android SDK. But now a newcomer on the scene, Android Studio, has stolen the spotlight and captured the hearts of Android developers everywhere. With Google officially deprecating their Eclipse support and actively promoting Android Studio, you might say the sun is setting on Eclipse for Android development. But that hasn’t deterred many Android developers who have been using Eclipse for years and don’t feel the need to switch. Which will reign supreme: comfort or cutting edge? Answer the twitter poll here


Android_Studio_icon.svg

eclipse-1

[separator type=”” size=”” icon=””]

Third Bracket: Continuous Build Systems

Jenkins vs Travis CI

When it comes to making sure your code is stable, Jenkins offers a great set of tools for building, testing, and more. As an open source project, Jenkins provides a high level of flexibility for implementing real continuous integration for any platform. Additionally, it’s free (as in beer)! Travis CI, much like Jenkins is no slouch when it comes to building your apps. With a beautiful interface, you can quickly check that status of your project. Additionally, Travis CI manages the infrastructure for you making it one less thing to worry about when it comes to working with CI tools. Which mustachio’d tool do you prefer? Answer the twitter poll here


headshot

687474703a2f2f61626f75742e7472617669732d63692e6f72672f696d616765732f7472617669732d6d6173636f742d32303070782e706e67

 

[separator type=”” size=”” icon=””]

Fourth Bracket: Cloud Storage

Heroku vs AWS

From the juggernaut that revolutionized online shopping, Amazon is using their knowledge to provide the best in cloud computing. With it’s massive offering of paid services, you can design, build, and deploy all your digital content in a matter of minutes. If you have a DevOps need, Amazon has a service for it. On the other side is Heroku, the developer friendly infrastructure service. Heroku can help developers by clearing out the chaos that can come with managing your own stack, like with tools to automatically deploy and push on each code commit. As your application needs to scale, Heroku’s marketplace of paid add-ons is sure to have what you’re looking for. Answer the twitter poll here


heroku

aws_logo


Mar
23

Mobile Madness – The Code

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : App Advice, Business, Coding

The results are in and the winners from yesterday are: Limor Fried, Erica Sadun, Jake Marsh, and Jake Wharton. Here is your updated Bracket.

[separator type=”” size=”” icon=””]

On to the third bracket of Mobile Madness 2016 with the numbers, the code, the languages and platforms. FULL STACK BABY!

First up: The Kings of the Mobile Kingdom

iOS vs Android

iOS and Android have been battling it out in the mobile space from day one. Globally, Android has a whopping 84.7% marketshare while iOS has only 13.1% (Q3 2015). Having multiple hardware manufacturers and OS distributions, Android provides many options to the end user, but at the cost of a consistent and reliable experience between them. iOS can deliver a high quality experience across all devices because Apple is fully in control of the design and production of their hardware and software, but it comes with a higher price point and fewer options.

AndroidvsiOS

So which wins? Beauty or Breadth of Market? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Second Bracket: Everything to Everyone: Cross Platform 

React Native vs Xamarin

React Native is a version of Facebook’s React.js, developers can write javascript that controls native UI elements among other things. React has been praised for it’s architectural design and the resulting increase in developer productivity. Xamarin, recently acquired by Microsoft, is a cross-platform development solution for writing native apps in C#. It comes with a robust IDE called Xamarin Studio that makes building cross-platform apps a breeze. One major difference between the two is that React Native is open source, while Xamarin is not only closed source, but requires a monthly subscription to use (but you get real support!).


react-logo-1000-transparent

RDXWoY7W_400x400

 

Who knew we’d bit pitting Facebook against Microsoft in a mobile development battle. What do you think of these unlikely platform contenders?  Answer the twitter poll here

[separator type=”” size=”” icon=””]

Third Bracket: Languages in the Key of C

Objective C vs C++

While both languages are in the C family, Objective-C and C++ have some huge differences. Objective-C is a dynamic language where everything compiles down to C code that uses the Objective-C runtime library. C++ is usually compiled to assembly and has no runtime library which means it’s generally much faster. Most Objective-C programs are now compiled with ARC which will manage memory for you, whereas a C++ developer must be very careful of how they allocate and free memory in their program. Objective-C has proven very productive for writing high-level code such as UI or business logic. C++ is less productive but much more powerful when you need to work at a low level, like when implementing high-performance graphics or audio processing.


url

CPlusPlus

High brow or low power? Which C will it be? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Fourth Bracket: Old Kids and New Kids

Java vs Swift

Java is generally accepted as the most widely used programming language today, and has been for some time. Swift is quite new on the scene, which only hit 1.0 in September, 2014. Swift has been acclaimed for it’s use of functional programming and value types which can help simplify problems in the minds of developers. Java works mostly with objects and reference types and only recently added functional programming capabilities through lambdas. Swift is entirely open source whereas only some Java implementation are (see OpenJDK). Swift still has much to prove for general use outside of iOS and Mac apps, but support from the open source community as well as big players like IBM is driving adoption for the language at a rapid pace.


Java7VM

icon

Answer the twitter poll here


Mar
22

Mobile Madness – The Indie Experts

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Business, Coding

The initial results are in and the winners are: Steve Ballmer, Steve Jobs, Jony Ive and Felix Kraus. Here is your updated Bracket.

[separator type=”” size=”” icon=””]

On to the second bracket of Mobile Madness 2016 with a continuation of the people that contribute to the mobile landscape. Some of these indie darlings have made the jump to the big leagues but for the rest, they soldier on one awesome book, blog post, or tweet at a time.

First up: Master Makers

Ayah Bdeir vs Limor Fried

Ayah Bdeir is the founder and CEO of Little Bits everyone’s favorite snap and play electronics toys. We’ve been geeking over the space kit for a while now and constantly suggest these as a great intro-to-electronics. Limor Fried is the founder of Adafruit the one-stop shop for all the whosits and whatsits to make your maker-dreams come true. Adafruit materials power our christmas tree and gif tv (really!).

littlebits-Ayah-Bdeir_37757

maxresdefault

So who build better tools for the builders? Big builders? Little builders? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Second Bracket: All things Swift 

Natasha Murashev vs Erica Sadun

Natasha Murashev more commonly known as Natasha the Robot is everywhere all at once with her talks, advice, and tutorials on all things iOS. She’s been a key figure in brining Swift to the masses, including help organize the try! Swift conference. Meanwhile, Erica Sadun has been a major contributor when it comes to Apple’s latest language, Swift. While her skills with Swift are only matched by her wit, according to the Swift Evolution project, she has by far the highest number of accepted pull requests. You can be sure her ideas are not taken lightly in Cupertino.

Both are rocking it with the new Swift language and have build a massive following for their questions, comments, and observations.


OFRHu0o9

32688

 

Who is the true education maven? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Third Bracket: All things Android

Jake Wharton vs Roman Nurik

Jake thrust himself into the spotlight with his incredibly famous open source Android libraries such as ActionBarSherlock and NineOldAndroids, as well as his contributions to Square’s massive catalogue of open source libraries such as Butterknife and Retrofit. He continues to deliver enlightening talks and presentations about Android and its continued evolution as a platform. While also an experienced developer, Roman is most famous for his work with the UX aspect of Android development. As one of Google’s most popular designers, Roman helped bring the beauty of Material Design to the Android world. He has also crafted a collection of open source libraries focusing on improving user interactivity and experience with your Android projects.


imgres

unnamed

Answer the twitter poll here

[separator type=”” size=”” icon=””]

Fourth Bracket: iOS

Jake Marsh and Mattt Thompson

When it comes to iOS developers, Mattt with three Ts is virtually a household name. His brain children AFNetworking and NSHipster are still widely used and respected to this day. Go check out his other projects too for a host of other useful libraries and services. When it comes to the best tutorials in the shortest amount of time, Jake Marsh is your guy. His little bites of cocoa has become an overnight success, and is a great place to learn fun new iOS tricks that can be used in every day development. Both these guys have made their mark when it comes to contributing to the development community.

Answer the twitter poll here


Mashable-User-Pic_400x400

5333c08eae9005dd7a8cdd478202c818_400x400

 


Mar
21

Mobile Madness – The Brains

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding

We are going to kick off Mobile Madness 2016 with our first bracket of tech luminaries. We are going to cover some heavy hitters like Steve Jobs and Bill Gates as well as some industry innovators like Ray Wenderlich and Felix Krause.

First up: CEOs who inherited empires

Steve Ballmer vs Tim Cook

In one corner we have Steve Ballmer, CEO of Microsoft from 2000 to 2014. Steve is known for his…passion for software as well as his ownership of the LA Clippers.

[responsive_video link=”https://www.youtube.com/watch?v=e8M6S8EKbnU”]

In the other corner we have Tim Cook, current CEO of Apple and …fan of Pharell’s Happy

timcook

Apparently we’re not the first to make the comparison:

NYTimes: Why Tim Cook is like Steve Ballmer
Forbes: Will Tim Cook be the next Steve Ballmer?
Yahoo: Is Tim Cook the new Steve Ballmer?

However we are the first to pit them head to head. Who will be victorious? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Second Bracket: Famous Founders

Bill Gates vs Steve Jobs

Bill Gates and Steve Jobs are each half of wonder duos that made modern personal computing what it is today. PC versus Mac. Generous genius versus design-centric demigod?

steve-jobs-vs-bill-gates-mac-vs-pc

Which world do you back? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Third Bracket: Mobile CDOs

Jony Ive vs Matias Duarte

The men behind modern UI patterns and design. Jony Ivs has led the Apple Design-Revolution. While Matias Duarte has spearheaded Material Design – Google’s attempt to fold the diverse android platform under one unified design theory.


static1.squarespace

Matias

Has Jony Ive lost his magic “intimate” touch with the recent launch cycles? Will Google ever solve their massive design/product fragmentation issues? Who is the better design-guru? Answer the twitter poll here

[separator type=”” size=”” icon=””]

Fourth Bracket: Tools and Teaching

Felix Krause and Ray Wenderlich

We snuck these guys in here as innovators each in their own way. Felix Krause is the brain behind the recent Fastlane Tools, which we recently sang the praises of at a local Cocoaheads meeting. Ray Wenderlich is the king of iOS tutorials and guides.


maxresdefault

ray-wenderlich-tutorial-videos

Both are contributing to the developer experience without being the head of some mega-corp. (But who is doing it better?) Answer the twitter poll here


Mar
16

2016 Mobile Madness

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding

In an effort to unite the non-sports and sports fans in the office, this year we are bringing you

MOBILE MADNESS 2016!!!!!

We’ve made some brackets with some things. We followed some very hazy grouping logic that includes the following:

People Conferences
The large and small experts in the world of mobile development and technology

Things Made by People Conferences
The code, the tools, the platforms that help us do our jobs every day.

Starting Monday (March 21) We will be posting a short blog post about the contenders each and every day for the next two weeks as well as posting up a twitter poll for the voting results (@lunarlincoln).

Join in! Argue! Debate! Decide on what is “best” (whatever that means).

Screen Shot 2016-03-16 at 3.59.40 PM

Will the ultimate champion be Steve Ballmer?

[responsive_video link=”https://www.youtube.com/watch?v=Vhh_GeBPOhs”]

Will that extra T in Mattt Thompson’s name give him the final push across the finish line?

nshipster-swift-cover@2x

Will Xamarin come from behind and prove to us once and for all that it’s not the awkward stepchild of mobile development?

wait_up_guys-127978

You will have to wait and see next week. Download your bracket now. Fill it out.  Send it back to us. The 5 best brackets submitted receive LunarLincoln camping mugs. This thing holds A LOT of coffee guys. You’re going to want to fill out that bracket and participate.

IMG_4143

 

And here is the voting schedule. Check our twitter handle for the daily poll/voting:

Round of 32

  • March 21 – People 1
  • March 22 – People 2
  • March 23 – Code/Platforms
  • March 24 – Tools

Sweet Sixteen

  • March 25 – Tools & People 1
  • March 26 -Code/Platforms  & People 2
  • March 27 – Tools & People 1
  • March 28 -Code/Platforms & People 2

Elite Eight

  • March 29 – Tools &Code/Platforms
  • March 30 – People 1 & People 2

Final Four

  • March 31 – Tools versus Code/Platforms
  • April 1 – People 1 versus People 2

Final

  • April 2 – X versus X

Mar
09

Helping clients out with the tech terms

  • Posted By : Travis Smith/
  • 0 comments /
  • Under : App Advice, Business, Coding

Everybody knows that software development depends on understanding various programming languages like Java, Swift, and Objective-C. But sometimes the most difficult language to understand is our own.

jackie-chan-illuminati

Tech geeks and project managers often have an unfortunate habit of using vocabulary that is lost on the ears of their clients. We use certain terms and phrases all the time and forget that we work in a niche environment. I want to take a moment and demystify some of the lingo we use when talking about our work.

Server

A server can be thought of as a computer program which runs code specifically for Internet applications.  For example, websites are hosted on servers.  A server isn’t necessarily an entire computer (sometimes a single physical computer can host many servers) but for the sake of understanding, imagining a server as a single physical device works just fine.

Back-end

More often than not, mobile applications need to connect to the Internet to perform their feature sets.  The back-end is what we call the server that powers our applications.  If we have to store user accounts, fetch data for various screens, or any other feature that requires external data, we’ll talk to a back-end.  Some services like Amazon Web Services and Parse offer simple back-end solutions.

Front-end

As opposed to the back-end which is strictly computational, the front-end is what the users get to see.  A front-end can be a website, a mobile app, or any other visual interface for your product.

When building a website you often need a “front-end” developer and a “back-end” developer since each part’s code works in fairly different ways.

API – Application Programmable Interface

An API is the means by which a back-end serves data to external applications – a set of instructions for a specific task if you will.  For example, if I created a back-end for storing user accounts, I would create an API endpoint allowing my app to save a new account (sending new accounts to the server back-end).  Each endpoint on an API performs a specific function (or set of functions based on the query parameters given to it).

Untitled

APIs link different things up with translatable instructions.

Push

Push can mean many things, but for brevity sake, I’ll only talk about the two most common times when we use the word ‘push’.  Every product we make is backed by a version control system called git.  A full explanation of git would take at least one or two more blog posts, so I’ll spare you the details on how it works.  When a developer has finished a task an wants to save his or her code to the central repository, they ‘push’ their code up for review.  Similarly, the other instance we use the word ‘push’ is when submitting finished products to their respective app stores.  Both instances of the word ‘push’ have to do with submitting finished work.

If you don't push your code - it won't be added to the main codebase

If you don’t push your code – it won’t be added to the main codebase

Build

In our world, the word ‘build’ is used often as a noun.  A build is a compiled instance of an application.  For example, if I wanted to send a beta version of an application to a client, I would create a build and push it out for testing.  One might say that they’re ‘building a build’ which would mean they’re preparing to distribute a version of the application.

release

Source Code

Not to be confused with the terrible 2011 Jake Gyllenhaal movie, source code is the main body of code that composes your mobile app or website. We often break off small chunks of code to work on (branches), but when we’ve properly added to this piece and tested it, we then push it back into the source code. When we are done with a project, we will send you the “source code” aka all of the code that is needed to run or “build”  the project. Often if we are working with a new client who already has a product, we will ask for access to their “source code” to see what has already been written and the quality of code that we will be working with. Is it going to need some restructuring? Is it all tidy in there? How is your app built?

User Story

A user story is an example of a feature we’d like our application to perform from the perspective of a user.  For example, if we have a screen that allows users to sign up, a user story might say, “A user can enter their credentials to sign up for an account”.  This ideology helps us imagine our goals as if we were using the application instead of building it.

user-story-card

Agile

This is how we operate!  Agile development focuses on building features incrementally and with room for flexibility throughout the project.  Whereas more stringent methodologies such as Waterfall rely heavily on extensive planning, Agile is a more rapid system.

agile-methodolody_695x260

Iterate

When we say we’re going to iterate on an idea, what we mean is we will keep making tiny changes, builds, or designs until we slowly, gradually develop what we are building into the ideal format. Instead of building once and declaring “This is it!”. We will frequently iterate over tough problems until we arrive at the best workable solution. Iteration is the core of the agile methodology (see image above).

That’s it for now you guys. Hopefully this has been an informative tech terms 101 for you. Now you can sit in meetings and nod wisely as we blather on about “taking the most recent iteration and pushing the back-end source code build up to the server“. Let us know if there is anything else we missed or if we need an entire round 2 of “What the heck are you saying?”.

200-2

 


Feb
29

Solving Hard Software Development Problems

  • Posted By : Travis Smith/
  • 0 comments /
  • Under : Coding

One luxury we as programmers often take for granted is the vast wealth of others’ experiences available for perusal at our fingertips.  Rarely do we encounter a software development problem so challenging that Google and StackOverflow cannot offer assistance. However, when working with cutting edge technology, these elusive obstacles arise more frequently and I’ve dealt with my fair share of them here at LunarLincoln.

While there is no steadfast problem-solving algorithm, most code artisans (I’m hoping this name sticks) will first consult the web.  More often than not, the hunt ends here.  An experienced developer will know the specific keywords that will help narrow the search for the solution to their problem.

giphy-2

But what if you encounter a problem that nobody knows how to solve?
Worse, what if nobody else has ever tried to do what you’re doing?

This is where we have to break out the big guns. Let’s use an example.

When I worked on Compass, I was tasked with figuring out how to stop it from draining the user’s battery so much.  At the time I hopped on the issue, Compass was tracking location data, motion data, HealthKit data, calendar events, photos, weather and more.  All the time.  Yikes.

compassiconintegrations1

Unsurprisingly, most phones didn’t react well to this kind of stress, and the largest complaint we got from testers was the drain it had on their phones.

Since everybody knows that premature optimization is the root of all evil, I had lots of avenues of attack.  The first matter of business was to figure out the biggest culprits.  Using Apple’s Instruments program, I was able to run the app and observe the battery usage levels as well as find out which parts of the app were consuming most of the CPU cycles.  As it turns out, recording a user’s location was creating huge spikes in battery consumption.  Knuckles cracked and fingers wiggling, I was ready to take a stab at it.

Adventure Time Deer

The first thing I did was dig into the current implementation to see how it worked.  The app was always tracking location, even in the background, with the highest quality accuracy.  And that’s great for results, but bad for battery.  Fortunately, I had a place to start looking for a solution.  Todd had a pull request ready which he said improved battery life but was ruining the accuracy of the location data.  His idea was to use geofencing.  He would wait until a user stopped moving, disable the GPS, and activate a geofence around the user.  When a user had moved a significant distance, the geofence would trigger, and the app would resume high accuracy tracking until the user stopped moving again.

I thought that was a brilliant solution, but as I researched all my options for tracking location, I learned it wasn’t going to work as we wanted.  Geofencing just didn’t offer enough precision.

giphy

The location logger app

The location logger app

The second solution was the phone’s motion coprocessor.

We were already tracking the user’s activity state, and I opted to hijack this information to determine when to activate and deactivate the GPS.  When a user is stationary, turn off the GPS.  Otherwise, crank it up.

Now I needed to create the algorithm to make this happen.  To iterate on the fine details of algorithm, I created a really small, ugly, but highly functional app that tracked my location and let me plug in my actual activity state (to make sure the motion coprocessor was accurate).  I would walk and drive around the neighborhood to test its accuracy while measuring its battery consumption. (Ben even went on runs to test the running measurement, and may or may not have eaten it on a piece of random construction material. Sorry Ben!)

The location accuracy visualizer app

The location accuracy visualizer app

When the tests were done, I would export the data and compare the location data to the route I actually took.  I created another tester app just to map the travel lines.  Using this, I could see whether my algorithm was precise enough to meet our needs.

In the end, I was able to create massive gains in battery performance without any noticeable hit to location accuracy.  Of course, the app still needs a lot of battery, but my models showed that multiple more hours of idle use could be seen, especially when stationary.

This form of rapid prototyping helped immensely in crafting a solution to this open-ended problem.

Surely this wasn’t the only way to solve this problem, nor is this guaranteed to be the best solution.  But one of my favorite ways to tackle a problem is to build myself some proper tools.

 

“Give me six hours to chop down a tree and I will spend the first four sharpening the axe.” – (Probably not) Abraham Lincoln


Feb
24

Tools We Love: Paw

  • Posted By : Patrick Goley/
  • 0 comments /
  • Under : Coding

icon128-2xHere at LunarLincoln, we’re always on the hunt for new tools that help us design, build, and test our apps and we’ve decided to share our favorites with you! To kick it off, we’re going to talk about a great app call Paw. Paw is a fully featured API client that can help you blaze through testing, debugging, and even implementing your networking calls. Whether you’re building apps or working server-side, Paw is guaranteed to save you time and frustration.

One of the most critical parts of mobile app development is integrating with web services. If you’re lucky, the service you’re using has wrapped up everything you need in a nice SDK for your platform. More than likely though, you will be talking directly to the API and have to hand roll each request to the server. This is where Paw comes in.

First, let’s talk about API clients in general and how they can help you. An API client, such as Paw, lets you configure HTTP requests, send them off, and inspect the response. This is great for developing against an API, as you can quickly work out the details of the request and response in isolation before you start mucking things up with your code. Without a standalone client, you’re left to tweak code, recompile, set breakpoints, pull to refresh, and  furiously debug your code until that elusive 200 finally makes it’s way back from the server. Now do this for each endpoint and do it again whenever you have bugs because, hey, it could be the servers fault (and it usually is right?).

tweak, pull to refresh, check, tweak, pull to refresh, check, tweak...

tweak, pull to refresh, check, tweak, pull to refresh, check, tweak, pull to refresh, check, tweak…

Forget that! We need to isolate the components of our system, allowing us to quickly narrow in on whatever isn’t working, be it the server or, shudder to think, your own code.

What makes Paw great?

Now that we understand the usefulness of API clients, let’s look at what separates Paw from the rest of the pack. A lot of Paw’s great features are made possible through extensions to the program. Many great extensions are built-in, but they are also written and submitted by the community, so if you can’t find what you’re looking for, you can always build one yourself. Extensions are little bits of javascript that add functionality to Paw, and they fall into three main categories: code generators, importers, and dynamic values.

Code Generators

One of the great features of Paw is to take one of your saved requests and export it in code specific to your platform. There are code generators for most major development platforms and even some specific to certain networking libraries, including AFNetworking (and Alamofire), jQuery, Ruby, Python, and even cURL to name a few. Code generators are an excellent way to make sure your perfectly configured request doesn’t get lost in translation when implementing it in your codebase. There’s even a generator that will produce a human-readable form of the HTTP request, which is great for communicating with API developers and providing example requests.

Importers

Importers are the inverse of code generators, taking code or domain specific languages and turning them into Paw requests. This features really shines for API definition languages like Swagger or WADL. These languages can be used to generate API code, but with the right importer can also produce a matching set of Paw requests for each supported endpoint / method combination. There’s also a cURL importer so you can stop banging your head against the terminal. If you’re currently using Postman to test API’s, Paw has given you an easy out with an importer to migrate all of your Postman requests into Paw. Now you really have no excuse!

Dynamic Values

Dynamic value extensions allow you to use macro-like functions that either compute a value or pull it from somewhere else. Paw can even carry out something as complicated as OAuth to get an auth token as a dynamic value. One common use case is the need to apply a hash to a password before sending off a log in request. You’d be very sad if you had to manually hash the password, especially if you’re testing with multiple accounts. Instead, create a dynamic value in your request body that will hash some input value. Fun fact, inputs can even be another dynamic value!

 

 

Screen Shot 2016-02-23 at 10.55.27 AM

 

Another use for dynamic values is pulling values from one response to use in another request. For example, say you want to test creating and deleting a resource with your REST API. First, make the request to create the resource, which returns a new object with an id value. Now we want to delete the resource that was just created, so we’ll make a dynamic value to pull the id from the create response and insert it in the URL of the delete call. This makes it very easy to chain requests together and operate on the same pieces of data without having to update each request.

 

Screen Shot 2016-02-23 at 10.57.38 AM

 

 

One area where dynamic values really help are when dealing with multiple server environments. During development, it’s common to have development, staging, and production servers, all with different databases backing them. Paw accounts for this by providing environments, which are essentially a collection of variables and related values that can be swapped out on the fly. One use case would be to handle setting the domain each server so you can easily switch between them.

 

Screen Shot 2016-02-23 at 11.02.20 AM

How we use Paw

Paw has provided useful for our team in a myriad of ways. Whether we’re building against a new API or debugging an existing one, we always opt to use Paw over debugging our code. We also commit our Paw files with the project to let them serve as working documentation for the API.

On top of thoughtful features, Paw has a polished design that makes it look right at home on OS X, which can’t be said for a lot of other API clients (I’m looking at you jMeter). I’ll stop gushing now so you can go start your free trial.

Happy networking!

200-7

 


12345
Recent Posts
  • Celebrating 10 Years
  • Copious Communication
  • Initial Questions for a New Mobile App Project
  • Gif TV: A LunarLincoln Product
  • Onboarding other peoples code
  • What’s in a name?
  • Don’t build it all. Picking a Platform.
  • Talk to your Users
  • Design for Fat Fingers
  • A new look
Archives
  • August 2023
  • May 2021
  • September 2020
  • November 2019
  • October 2019
  • June 2019
  • April 2019
  • February 2019
  • January 2019
  • October 2018
  • August 2018
  • June 2018
  • April 2018
  • January 2018
  • October 2017
  • August 2017
  • June 2017
  • February 2017
  • January 2017
  • September 2016
  • July 2016
  • April 2016
  • March 2016
  • February 2016
  • October 2015
  • September 2015
  • July 2015
  • May 2015
  • February 2015
  • December 2014
  • November 2014
  • September 2014
  • May 2014
  • April 2014
  • January 2014
  • December 2013
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • December 2010
Categories
  • Agency
  • App Advice
  • Branding
  • Business
  • Business
  • CaseCollage
  • Coding
  • Design
  • Design
  • NSVille
  • Uncategorized
  • Web Design
Copyright LunarLincoln 2025. All Rights Reserved