Caching and The Web: One Site's Optimal Pattern is Another App's Slough

Caching Optimization Isn't One Size Fits All

Even though the Internet has become six orders of magnitude faster in the last twenty years, there’s no way to move information around the world any faster than about ⅕ second. That's where caching comes into play. And which caching technique you choose depends on your use case as the optimum caching for a repeated-use application is at odds with the optimimum technique for marketing sites.

Recent Acquisitions of Cloud City Development Clients

Three Cloud City Development Clients Acquired Recently

As a full-service design and software consultancy we get to help clients in their time of need and, if we do our job right, make a difference for that client and its customers. While all projects have their own goals and guideposts, all, including those for True & Co., Deis, and Engine Yard, start with the same question: why. We like to think that our approach and their engagements with us were partially respondible for our clients' acquisitions.

Is Contributing to Open Source Right for You?

New to open source and wondering where to start?

Andre Arko, Cloud City Development senior developer and lead developer of Bundler, the Ruby dependency manager, has three questions you should ask yourself before diving in. Then once you've answered why open source (and confirmed you have the time), he shares his 15 minute a day blueprint to go from Open Source Newbie to Core Contributor.

Working with iBeacons on iOS - Zero to BLE Bonus

For as little as $5, develop your very own personal Tile or Trackr knockoff.

Now that you've gotten started developing for Bluetooth Low Energy (BLE) devices on iOS using the Core Bluetooth framework, it's time to talk about iBeacons. In this bonus installment of our Zero to BLE with iOS primer, Evan K. Stone shows you how to use a Estimote iBeacon to track your luggage through its journey to you at the airport.

Zero to BLE on iOS – Part Three

Swift BLE tutorial will have you connecting and interacting with the Internet of Things (IoT) in no time at all!

In this third and final installment of our Zero to BLE with iOS primer, Evan K. Stone updates Apple’s sample demo app, which was last revised in 2012, and converts it from Objective-C to Swift. While the revised sample app’s behavior is similar to the original, it behaves slightly differently, going beyond what the demo accomplishes to cover advanced topics such as Disconnection and Reconnection; Backgrounding; and State Preservation and Restoration.

Zero to BLE on iOS – Part Two - Swift Edition

Ready to contribute to the Internet of Things? Learn the key to success with Bluetooth Low Energy (BLE) and develop an iOS app with Swift.

In Part 2-Swift Edition of the Zero to BLE on iOS, Evan K. Stone shows you how to develop an iOS app with Swift 2. He'll introduce you to the Texas Instruments SensorTag and then walk you through the creation of a mobile app that displays the current temperature and humidity.

Testing Rails Applications

Testing Rails can be challenging. Handy roadmap shows it's possible to have well-tested code & an enjoyable workflow.

Feel like you're testing too much? Like you're a bad developer if you don't TDD? Fear not! I overview what parts of your Rails apps to test and offer an easy-to-digest PDF cheatsheet!

How to Fix Angular.js App Loading Annoyances

Not everyone has screaming fast Internet. But slow mobile connections don't have to spell doom for Angular.js app loads.

Two common annoyances -- an empty view and an API data delay -- can be avoided. Learn how to make initial page loads for your Angular on Rails apps as responsive as server-generated pages.

Zero to BLE on iOS – Part Two

New wearable devices are everywhere and consumers expect your apps to communicate with their iPads and iPhones out of the box.

Today we use the Bluetooth Low Energy (BLE) standard to do this. Our primer introduces the BLE standard, explains how delegates function, and presents a basic development workflow.

Slim + Fast: A Primer on Resource Weight - Images

The challenges to a front-end developer can be numerous. In addition to performing our day-to-day tasks, we are often expected to know a little (or a lot) about a wide array of subjects. Graphics, languages, user experience, accessibility, source control, security, browser compatibility, content management systems, and more.

How Bundler Works: A History of Ruby Dependency Management

This post was originally given as a presentation at RailsConf 2015.

Using Ruby code written by other developers is easy! Just add it to your Gemfile, run bundle install, and start using it.

But what's really happening when you do that? How can use you someone else's code just by putting it in your Gemfile?

Zero to BLE on iOS - Part One

Get your apps communicating in this Internet of Things era.

Our Zero to BLE on iOS primer will have you gathering information from whatever the newest, hottest wearable mobile device is and sharing that information with your consumer's primary mobile device--iPhones and iPads. Evan K. Stone introduces basic concepts you'll need for developing for Bluetooth Low Energy (BLE), such as the terms Peripheral and Central; Advertising or Discovery; and commonly used classes like CBCentralManager, CBPeripheral, and more.

TCP Delays and Retransmissions on Illumos

The other day, I helped debug an issue on some production Joyent Cloud servers (which use SmartOS, based on Illumos, the open-source successor to Solaris). The solution turned out to be so non-obvious, and the cause pretty interesting, so I thought it was worth writing up.

The New Rubygems Index Format

This post is a part news, part technical documentation, and part request for comment. I’m going to explain the technical nitty-gritty details of the planned next generation index that allows Bundler and Rubygems to know what gems exist and how to install them.

Detached—Terminals that Don't Die when You Close them!

Detached is a tool for Macs that makes it easier to manage command-line processes running in the background. Developers spend a lot of time running commands and servers in terminal windows, but closing each window means closing the process running in it. Wouldn't it be great to be able to keep programs running even after their windows are closed?

How to be an ally

So I titled this “How to be an ally,” but that’s a lie. You can’t be an ally. No one can. Ally-ness isn’t something that you can have intrinsically, any more than you can inherently be kindness, or rudeness. You can do ally actions. So probably a better name for this is How To Do Ally Work. But I’m getting a bit ahead of myself.

Extreme Makeover: Rubygems Edition

Bundler, Rubygems, and are vital infrastructure that every Rubyist uses just about every day. Over the last year, that infrastructure has seen a huge amount of change. This is an overview of the changes, an update on where things are now, and an explanation of where we’re going soon.

Extreme Programming Explained—Bridge the Business-Technology Divide

Business people and technology people are different. They use different language, think differently and worry about different concerns. Both sides of this divide are doing the best they can, but the old project management paradigm isn’t appropriate for software development. Agile methodologies address the very root of all the problems, shortening the feedback cycle to expose mistakes and misunderstandings quickly, when they are cheap to fix.

Rails Israel 2013: Rubygems, Bundler, and Production Is an Iceberg

Last week I went to Tel Aviv, Israel for the Rails Israel and DevConTLV conferences, where I gave three talks on new developments in the Ruby community. The first talk was about how Bundler took down last year, what we did to fix it, and the lessons that we learned as a result.

GoGaRuCo 2013: The Community Has Grown up

Many voices were heard at the 2013 Golden Gate Ruby Conference proclaiming it to be the best ever. Time will tell, but it was an outstanding conference, both technical and social. Ruby has come of age; Rails saw its 4.0 release this year. What can a conference add when many of the tricks have been found, tools have been built, adventures have been told? Well, GoGoRuCo 2013 had some good answers in store.

Using GitHub Issues as a Data Source

On a recent MVP, we needed a way for a client to maintain some simple information about several sponsors, like a name, an image, and a url. The client didn’t want to commit to a backend server this early in the game, so we needed a cheap but effective solution to store this data.

Security Is Hard, but We Can't Go Shopping

Security is a hard topic. It’s an especially hard topic in the Ruby community, where the security situation has historically been so great that hardly anyone has had to care about it. You may not know this, depending on how long you’ve been a rubyist, but Ruby security issues usually only come up once or maybe twice per year. They’re usually relatively benign, as those things go, so everyone updates as soon as it’s convenient, and life goes on.

Upgrading an App to iOS 6 and ARC: First Victim - ASIHTTPRequest

A while back, I built a little iPhone app called Tag Along. It was my first iOS app and the idea was to build something as a way of teaching myself Objective-C and iOS development. Fast-forward a couple years, and, with the increased potential in iOS projects, it seemed like a good idea to brush up on my skills. So, I decided to learn about the changes in the ecosystem (ARC, storyboarding, etc.) and to see if I could update my app with any of these new technologies.

Product Development Methodologies

Nearly every business and software development methodology has value when applied to the right type of project and with the right amount of discipline. The amount of value realized depends on many things including the problem domain, the project participants' skill and discipline and the availability of the customer to address issues when discovered. Question: What’s the best methodology? Answer: It depends.

Dealing with Heroku's Random Router

A little while back there was a now famous post on that let the Rails world in on how we're all getting screwed by Heroku. This post, however, is not about the issue of whether this is right or wrong (or evil), but a way to work around the problem of requests being stuck in a long queue on one dyno while another dyno sits around watching reruns of "Friends."

Three Approaches to Remote Pair Programming

For over a year now, I've been working remotely for Cloud City, telecommuting from my office in Salt Lake City. It's amazing being able to tap into the vibrant Ruby community in San Francisco and work with such great people and clients from hundreds of miles away. Google+ Hangouts, Skype, HipChat, screen sharing, document sharing, and now even Sqwiggle have become regular parts of my day — I love living in the future!

Angular.js, Accounting.js and Currency - How to Make Custom Filters in Angular.js

On a recent project we used Angular.js for some heavy lifting on the frontend. The framework has a steep learning curve but is pretty powerful once understood. A simple example of this is a currency filter for numbers passed into the view.

Testing Paperclip Extensions in Isolation

thoughtbotRecently, Cloud City Development was tasked with a project that included cropping an image upload in a number of squares of varying sizes based upon user selection. In order to accomplish this, we set out to write an extension to the paperclip library, which can be a hassle. Because this project already used paperclip, switching to something like dragonfly or carrierwave was not an option. This left us with test-driving the implementation with paperclip in RSpec.