Points for Style

Points for Style

It’s been years, but I can still remember my lab partner’s frustrated exclamation clearly. “It’s not a rule. It doesn’t matter!”, let out in response to seeing the results of our automatically graded submission of a program in a mid-level Computer Science course. Our work was functionally perfect, but the grading tool had subtracted several points over incorrect indentation size and other various style errors. He was right, technically, as we had adhered to the implementation requirements and using our program would produce indistinguishable results from our classmates’, but the faculty had chosen to take a stand. They chose to force us to care about style, or at least notice it. They chose to enforce a few basic style guidelines at a time when it seemed irrelevant, a time when we did the vast majority of our programming as a single developer in a vacuum. I’m not going to say I saw the light immediately, and I don’t remember a single student arguing in the system’s favor early on. I did, however, adopt good habits that I would later come to be thankful for when I learned what is a shocking truth for many young devs:

Style is not extra credit. Style matters.

Now the vacuum is gone and there is no auto-grader, just a group of incredibly smart fellow developers whose time is valuable and sanity should be protected. I’ve been a strong advocate of vigilant style practices for quite a while, but Shockoe turned out to be a place where justification for that is omnipresent. Due to the nature of our business, every developer makes contributions to a wide array of codebases, and has a hand in reviewing even more. We’ll wrap up a project and deliver it to the client, who then shows it off to the rest of the company and stakeholders. Soon we get feedback… management loved it! And guess what, they want a bigger, better phase 2! This is fantastic news, but it’s time to start planning, and “bigger and better” usually means additional resources. That means bringing new developers onto the project. Getting up to speed on a project quickly is a crucial skill for us, and we want to make that transition as smooth as possible. A little extra time considering style and writing cleaner code up front could make the difference between the next developer brought on grasping it instantly or spending an entire afternoon pulling their hair out.

Every new developer at Shockoe, usually on their very first day, is invited to a repository where an internal fork of the Idiomatic.js style guide lives and asked to study it. We have eyes on each others code constantly. Every user story is a pull request that gets reviewed, critiqued, and signed off on by a coworker.

I’ve known a lot of developers to be hesitant to request stylistic changes to another’s code, and I shared those feelings once too. It can feel like you are pointing out insubstantial issues, or that style is a personal choice and you might offend them. What we need to remember is that we are all trying to improve. If another developer reviews my work and thinks “I would write this differently” then I want to hear how. Several times, seemingly minor comments or questions have sparked a discussion that roped in multiple colleagues and left us all writing better code.

So don’t be satisfied with code that gets the job done. Strive for code that actively helps the next dev down the line, that they will thank you for, because when that time comes, you could be on another project, thanking someone else in kind.

Want to stay connected on all things mobile?

Sign up for the Shockoe newsletter and we'll keep you updated with the latest blogs, podcasts, and events focused on emerging mobile trends.

Functional Javascript Programming and Data Processing With Underscore

Functional Javascript Programming and Data Processing With Underscore

At Shockoe.com, many of us heavily use Underscore JS within our Javascript codebases. Underscore provides a number of great functions that implement very common Javascript programming tasks, but a lot of the docs aren’t super self explanatory. It can sometimes be difficult to figure out how to use the various functional programming concepts that Underscore implements in your day-to-day code.

Fortunately, an excellent example data set fell into my lap the other week!

One of my coworkers handed me a giant CSV file containing all of the states in the United States, and asked me to turn it into a JSON array. While I tackled this task with the bulk text editing tools built into my text editor of choice (shout out to Sublime Text 3), this struck me as a pretty nifty data set to do some simple bulk data processing on.

We’ve made this JSON file available on Bitbucket for the public, and I’ll be using it as the demo data set for all of these examples. Get the JSON from our Bitbucket, and place it within the folder you intend to run these examples from, in a file named cities.json.

If needed, get Underscore.js from npm. Just run npm install -g underscore.

Now spin up a node.js instance, and run

let cities = require('./cities.json');
let _ = require('underscore');

The rest of these examples assume these variables will be defined and unmodified.

Let’s go ahead and do a couple of simple operations.

//How about picking 10 random lucky cities from the list?
let theWinners = _.sample(cities, 10);

//get every city from states ending in 'ia'
let iaIaUnderscoreFhtagn = _.filter(cities, function(city){
	return city.endsWith('ia');

//or split the string into a city/state object
let citiesObjects = _.map(cities, function(city){
	let splitCity = city.split(', ');

	//pull out the state
	let state = splitCity.pop();

	//and join the city back together
	let city = splitCity.join(', ');

	return {
		state : state,
		city : city

//let's see how many towns named Pawnee there are out there
let pawneeCount = _.reduce(cities, function(currentCount, currentCity){
	//get rid of the state name
	let splitCity = currentCity.split(', ');

	//re-join the city name and compare it to our search term
	if(splitCity.join(', ') === 'Pawnee'){
		return ++ currentCount;
		return currentCount;
//start the count at 0
}, 0);

//well, now I want to know what they are!
let pawneeList = _.filter(cities, function(currentCount, currentCity){
	let splitCity = currentCity.split(', ');

	return splitCity.join(', ') === 'Pawnee';

Underscore also really encourages javascript code reuse by making small functions that only accomplish a single task. Take the following utility function:

function getNameForCity(cityString){
	//split out the state token from the full city name.  There's always a 
	//comma and a space between the city and space in this data.
	let splitCity = cityString.split(', ');
	return splitCity[splitCity.length - 1];

Using just this one function we can do a number of things, such as counting the number of cities in each state:

let countOfCitiesByState = _.countBy(cities, getNameForCity);

Grouping the list of cities into an array of cities for each state:

let citiesGroupedByState = _.groupBy(cities, getNameForCity);

Getting rid of all of the cities in the state of Virginia:

let citiesWithoutVirginia = _.reject(cities, function(city){
	return getNameForCity(city) === 'Virginia';

How about getting rid of cities in _any_ Virginia (looking at you, WV):

let citiesWithoutVirginia = _.reject(cities, function(city){
	return getNameForCity(city).indexOf('Virginia') !== -1;
Metalling with Titanium: Building my first Alloy application

Metalling with Titanium: Building my first Alloy application


Event listeners. Callback functions. Asynchronous programming? These words were foreign to me when I first started working at Shockoe LLC the first week of October 2015. But somehow, I needed to use these things to create a mobile application in the next two months.

I wasn’t completely new to programming. I had recently taking Java programming courses and was learning other languages like C++ and C# by watching online tutorials. Before I started working at Shockoe, I was told to learn JavaScript as that was predominately what I would be using to create Titanium Alloy applications. Going through the tutorial on CodeAcademy taught me little about the language. It seemed to be mostly a tutorial on what programming was. But I figured that since I had the gist of programming, I wouldn’t have much of an issue as anything could be solved with a simple Google query.

Showing up to work on the first day taught me that that wasn’t the case. Edwin, the CEO at Shockoe, assigned me to work on Fighting Mongooses, a name with which I’m now beginning to understand the logic behind.

The concept behind the app sounded pretty simple but integrating various devices, a server, a database, and mobile OS’s turned out to be far more complex than I had anticipated.

The first week or two was spent just trying to figure out what was actually happening in this partially built application.  I slowly started to figure out what the different pieces of code were doing to understand the logic. I used what was already available to piece together a rudimentary working application to fulfill the initial requirements and to prove I could fit in at Shockoe.

From there, I slowly expanded the capabilities of the application and learned more about Appcelerator, Titanium, and JavaScript along the way. After a month and a half of working on Fighting Mongoose, it has taken on a bit of my own personality. It is no longer another developer’s application that I was given to complete and that is a great feeling.

There is still a lot that I need to learn to get near the level of the other developers here, but I have had some great guidance and help while working on the Fighting Mongooses project.

I still have much that I wish to accomplish with the application and feel more comfortable and confident each day with what I’m doing.

I recently found an old version of the app on a device I used for testing about a month ago and it’s amazing to see for myself the progress that I have made since.

I look forward to see the kind of progress I can make in the next month on onward here at Shockoe.



Shockoe Wellness Program

Shockoe Wellness Program

There’s a reason the stereotypical image of a software developer is a slovenly mess, a large mass in a black t-shirt covered in potato chip crumbs, the reason being is it’s often true. And while we can’t prevent the ever-growing threat of black t-shirt wearing, we all do our best to keep those black t-shirts themselves from being ever-growing. Here at Shockoe we incorporate several exercises into our daily routine that we hope will improve our overall health. Collectively this is known as the Shockoe Wellness Program.

To keep our metabolisms engaged and the blood flowing through our brains, we’ll often take a stroll along the canal walk near the office. It’s also a great way to unplug from work for a little while and come back to any problems or tasks with a fresh mindset. Inside the office, ping pong is another great outlet to work through bugs and raise our heart rates. And for anyone who doubts the ability of ping pong to raise your heart rate, you’ve clearly never seen the crazy wall and ceiling shots we try every day and the mad dash of our developers to recover the balls as they go flying into the kitchen or under desks.

However, when you work in a profession that has you sitting and looking at a computer screen for eight hours a day, fitness is only one of your concerns. Here at Shockoe we incorporate several exercises throughout the day to help preserve our posture and eyesight. There are two main problems that face those who sit down for a living: forward head posture and anterior pelvic tilt. Speaking generally, from a blenderized knowledge of several internet tidbits, forward head posture comes as a result of, among other things, staring at a screen and inclining one’s head forward. Anterior pelvic tilt means that one’s hips have rotated forward, as a result of weakened hamstrings and abs and tightened lower back and quads due to sitting for long periods of time. To counteract forward head posture, we perform a series of neck exercises 2-3 times a day. Here is the video guide that we follow for these exercises. Vastly more information than I could ever provide about anterior pelvic tilt and the ways to counteract it can be found here, though the exercises that we tend to perform are the quad stretches and occasional stomach vacuums.

To help improve our eyesight, we utilize the 20-20-20 rule, which states that if you spend a lot of time looking at something directly in front of you (e.g. a computer screen), every 20 minutes you should look at something 20 feet away for 20 seconds. It also helps to roll your eyes and blink a lot during these breaks.

Shockoe Bods, a sub-branch of the Shockoe Wellness Program, is also very near to our hearts. It was through the Shockoe Bods program that we began a quest to each be able to do 100 pushups. For a while, every morning after our stand-up meeting we would crank out huge sets of pushups. However, we soon found that this was tightening our pecs and making us hunch over at our computers. We needed to add a complementary back exercise as well, so we hung a pullup bar near the bathrooms and encouraged people to do as many as they can every time nature called. For some, “as many as you can” was less than one, and that was perfectly ok. The prevailing wisdom is if you can’t do a pullup, simply hang on the bar for as long as you can, and the first pullup will come after being able to hang for 45 seconds.
All this may seem like a lot, but in total it may add up to ten minutes every day, which, in my opinion, is worth it to not be hunched over a walker by the time I’m 30. Every developer at the office is a huge fan of Bojack Horseman, and to paraphrase a touching moment from this past season: “It gets easier, but you have to do it every day. That’s the hard part.”

Shockoe Helps Homes.com House Hunters Find Perfect Rental

Shockoe Helps Homes.com House Hunters Find Perfect Rental

Mobile technology is changing the fundamental interactions between business and customers in meaningful ways not foreseen a decade ago.  Even a traditional business model, like car rentals, has been disrupted by a rapidly expanding company with what seemed a niche idea, due to the flexibility that mobile technology gives consumers.

Why can’t the same principle apply in the home rental space?

Homes.com is part of the fifth-largest real estate listing portal network with over three million homes represented in the United States and that’s the question that they asked us at Shockoe.com.

Since then, we have been working with Homes.com to enchance their collection of iOS and Android apps.  One of the first joint projects was released on October 16th to great acclaim.  Homes.com’s industry knowledge guided the thoughtful design and solid codebase that Shockoe supplied and the brand new Homes.com Rental app is averaging 4.9 out of 5 in the Google Play Store and 5/5 stars on the iOS App Store in just a week’s time.  And as a recent study showed, app ratings are now more critical to rankings, thus exposure, than ever before

So how did Shockoe and Homes.com do it?

The new Rentals app was built with today’s sophisticated renter in mind.  The app is the first in the market to offer current commute times for points of interest such as user’s place of employment, gym or shopping, tailoring the app to today’s ever busy consumer.  This of course hits the three keys to mobile real estate: geolocation, geolocation, geolocation.

Now, on-the-go consumers can easily browse an expansive database of rental listings on the Homes.com app, which has built-in extensions to Homes.com’s sister site ForRent.com.  ForRent.com is the exclusive provider of apartment listings on the Rentals app. Homes.com developed the smartphone app for effortless use on both iOS and Android devices and included iOS7 features such as natural navigation gestures.

“With year-over-year rental search traffic growing on Homes.com by more than 514 percent on mobile devices, our first priority in designing the rentals mobile app was to create an optimal shopping experience for renters,” said Brock MacLean, executive vice president of Homes.com. “The new app allows consumers to customize searches, instantly view and save listings, and connect with agents or property managers. Whether a renter is searching for a place to celebrate, create or unwind, the place to find it is Homes.com.”

The mobile app enables potential renters to tap into current listings filtered by user preferences.  Filters run from standards like price, size and type of residence to many extras like fireplaces, parking or (a mobile first for the industry) pet-friendly rentals. Map searches are made simple with slide and tap navigation, all while referencing a geo-targeted map for an easy view of points of interest throughout the search experience.

How did Shockoe create this for Homes.com in such a short timeframe?

From the beginning, Dominion tasked Shockoe with building the revisions in the Appcelerator Titanium codebase to create an amazing user experience across multiple operating systems and devices while improving overall app performance.  Rebuilding a unified codebase for Homes.com within Titanium offered Shockoe.com a chance to make big changes to simple usability and interface aspects of both mobile app experiences. For example, the older version of the mobile app made dynamic selection difficult in the area overview map.

Due to past experience, the Shockoe development team decided a whole new map design was necessary since the map function is a crucial. While it sounds daunting, we know it would end up being a major time saver since the redesign would be built just once in the Appcelerator Titanium toolset.  The new map function would then be instantly reflected across both iOS and Android versions for multiple form-factors and the functionality could be re-used and applied to other projects down the road for Homes.com.

Shockoe has been a longtime partner and evangelist of Appcelerator.  The cross-platform nature of Titanium enables us to meet deadlines and budgets that would be impossible had we designed for each platform separately.  Our experience with Titanium makes an already accelerated schedule even shorter.

We at Shockoe look forward to collaboration with Homes.com and their sister site ForRent.com in coming up with new and interesting ways to help the companies enhance products and tie themselves together in the mobile environment.  With an economical foundation on which to fortify their ability to acquire and cross-sell their customers in the mobile space, look for many more good things to come from the teams at Homes.com and ForRent.com.

How can Shockoe help your business take a great idea and make it a disruptive force in your industry?

Download the new Homes.com Rentals apps – [Google Play] [Apple App Store]

About Homes.com®
As one of North America’s top online real estate destinations, Homes.com® Rentals inspires consumers to dream big. From affordable houses to luxurious estates, condos, apartment rentals and more, Homes.com features nearly 3 million property listings and a user-friendly format, making finding your next home easy. Visitors to the Homes.com blog will find a collection of rich content and posts on DIY projects, painting, organization tips and more, providing the ultimate resource for everything home related. From finding your first apartment to buying your first home, upgrading, downsizing and everything in between, Homes.com is an inspiring and engaging partner in every phase of the home buying or renting process.

Homes.com is a division of Dominion Enterprises, a leading marketing services and publishing company headquartered in Norfolk, Virginia. For more information, visit www.dominionenterprises.com.

About ForRent.com®
As one of the nation’s leading online home search destinations, ForRent.com® inspires renters to discover their next apartment, loft, townhouse, or condo. ForRent.com features rental listings in a user-friendly format, making finding your next home an easy exploration. Visitors to ForRent.com’s apartment living blogFacebook pageTwitter account and Pinterest boards will discover relevant content and can join the conversation surrounding their home decorating style, rental tips and more, serving as the complete resource for renters in every part of their living experience.

Why iOS7 is a Game-Changer for the Enterprise

Why iOS7 is a Game-Changer for the Enterprise

The recent launch of Apple’s new iOS7 has many talking about how the new version of the operating system was the final death knell of Apple’s skeuomorphic roots, but beyond the style and sleekness of the upgrade, the enterprise should see the feature dense iOS7 as a major force in driving enterprises to mobile.

Security has and will continue to remain a major concern for the enterprise, but as Q2ebanking.com’s CSO Jay McLaughlin recently stated, the iPhone is by far the most secure device to try and integrate into the enterprise — as long as users aren’t jail-breaking the device.

“iOS 7 presents new vulnerabilities in the fact it contains new code, technology and features,” McLaughlin told TechRadar.com. “Once discovered, you’ll see new exploits created – many of which would be used for jailbreaking purposes – which inherently breaks and destroys the strength of Apple’s underlying security model for iOS. […] Historically, Apple has tightened its security within iOS with each subsequent release, adding stronger encryption, Data Execution Prevention, ASLR and the new A7 processor’s ‘Secure Enclave.’ As such, when in a non-jailbroken state, the iPhone is one of the most secure consumer devices.”

Here is eight features of Apple’s iOS7 that will change the business world for the better:

Stronger Security through TouchID & Activation Lock

One of the biggest drawbacks of extending the enterprise to mobile is the multitude of security threats to which mobile devices can expose an enterprise.  TouchID made news when in less than a week a computer club in Germany demonstrated there are ways to bypass the TouchID system.

Even so, ComputerWorld’s Michael deAgonia writes that it is still a groundbreaking advancement for mobile.

“I’ve already decided [TouchID] will be a game-changer. In concert with new Activation Lock features in iOS 7 — GPS tracking can’t be deactivated and access to the iPhone is blocked without entering your iCloud username and password, even after a device wipe! — it’s hard to see this as anything but a major win for security.


The hoops someone would have to jump through to hack into the phone — lifting fingerprints, making a fake print using latex — are complicated, if they even work at all. For me, this doesn’t change its usefulness; it’s just a reminder that no security function is 100% foolproof.”

Weak passwords, disabled security locks and misplaced devices are what keep security-minded companies up at night when thinking about extending mobile in the enterprise.  While not perfect, fingerprint-based authentication in concert with the Activation Lock and device wipe capabilities can allow companies to quickly intervene in a potential security violation before sensitive data is compromised.  Better to wipe a $200 smartphone quickly than expose a business to tens of thousands, or even millions of dollars to a potential data breach while a would-be hacker fiddles with latex fingerprint molds.

Simplicity With Enterprise Single-Sign-On

For the busy folks on the front line delivering packages, checking manifests and entering patient data and all the while jumping between programs to do so, the repetitive authentication for each transaction can become major deterrent in the use of the products, or at the very least the secure use of them.  What if that worker could log into a CRM app and then jump into an order-tracking app without another sign-on?  iOS 7 allows users to take their corporate credentials across apps, even including apps from the App Store. This reduces the need to remember and enter a number of different passwords while also keeping data secure.

Opening Up on Managed Open-In

Would you like an employee accidentally tweeting the Q4 forecast numbers?  Probably not.  Thanks to Managed Open-In, companies can force their employees to open email attachments in specific corporate-managed applications rather than an app of the user’s own choosing.  So, even without a containerization solution to protect corporate data, enterprise information technology departments can keep business data in business-related applications on the mobile device. The business can then dictate to the user the open in options by app or user account, providing a lot of management flexibility.

Private Server Conversations With Per-App VPN

Per-App VPN allows information technology departments much more granularity in access to back-end systems. Only specific apps can gain access to a corporate network, so unmanaged or unapproved apps can never gain access to sensitive data within the enterprise.  As well this restricts the ability to remove data from unapproved applications thanks to Managed Open-In.  This feature greatly improves user experience and firewalls privacy so that non-business data is unable to touch the corporate network.  One of the major benefits to business?  Since this can quickly create barriers between SAP and Facebook, Per-app VPN makes Bring Your Own Device (BYOD) a much more realistic goal for enterprise.

Mobile Device Management Software Made Simple

iOS7 includes a new MDM protocol to streamline third-party MDM solutions.  For large businesses, the need to keep hundreds or thousands of users up to date with supported versions of software can be daunting without management software.  Corporate-owned devices can be automatically enrolled in an MDM solution during activation, automating much of the custom commands, fonts and wirelessly set-up managed apps.

Giving iWork Mobile to Get

Microsoft made a kingdom into an empire by licensing their end-user productivity tools.  Now, just like Google Drive did, Apple is giving away iWork with Cloud capability in their latest release.  This move won’t push blue chip companies to defect in droves from Microsoft’s enterprise licensing program, but for smaller businesses this strategic investment on Apple’s part could help them justify the cost of equipping Apple devices while simultaneously extending on one set of productivity tools between laptop and mobile device.

Keep the “Property” in “Intellectual Property” Through App Store Volume Purchase Program

Enterprises can now buy apps and books for their iPhone and iPad-using employees and keep the to those apps or books to transfer them to other workers. For a handful of users, this might not seem like much, but those 99 cents start to add up quickly when it comes to thousands of users or expensive B2B apps or books or other such pricey materials.  Previously, companies had to go through a painful process of buying redemption codes to hand out to employees to go out and download the apps on their own.

Microlocation through Apple’s iBeacons

Apple’s iOS 7 supports low-cost transmitters that can work with an iPhone or iPad to collect location data, even if there’s no location system installed in a workplace or other environment. The system works over Bluetooth 4.0 and can be used to interact with an environment just by passing through it.

Major League Baseball has been a staunch supporter of the practical for Apple’s new tech for a few years now, and they have been off and running with how to use the iBeacon technology since last winter.  So far, MLB has created an experience to populate a ballpark guides stadium specific information and which prompts users with different results based on where they are located, be it prompting the ticket bar-code at the entrance for the ticket-taker or popping up a coupon for a free soda once one smells the aroma of hot dogs.

“We’ve been looking at customizing the app based on where you are within the stadium, but GPS is notorious for not working indoors, especially when you are in a building made of steel,” MLB iOS developer Marc Abramson told Mashable. “Instead, we are incorporating Apple’s new Bluetooth and iBeacon technologies for iOS 7 and couldn’t be more excited about the potential.”

“Essentially, we want to create micro-locations within the stadiums where you can get different experiences,” Abramson said.

On the factory floor or in a busy transit center this sort of device/environment interplay could change the way the user interacts and experiences their environment.

Endless Possibilities

These eight features are just a few of the many advances that Apple has made with their revolutionary iOS7 product.  Beyond what we wrote about above, there’s plenty more worth mentioning: Multi-Tasking APIs, AirDrop and PDF annotations are but a few.

The advance of mobile technology inside the enterprise will lead to major innovations for businesses and with the introduction if iOS7 large organizations have even less reason to put off extending to mobile.

We wrote months ago that organizations who move quickly but cautiously will be the ones that reap the largest long-term benefit for their business.  That said, Apple has addressed many of the major concerns for caution in the competitive marketplace with the introduction of technologies like Per-App VPN and ESSO.  Extremely secure yet game-changing technology is now available to the enterprise and iOS7 has done enough that smart enterprises will use these security, locational and MDM advances to propel their business forward in the next year with the largest gain at a fractional risk.

Making a great app takes time

Making a great app takes time

Hey all, I’m Bruce.  I’m a new hire at Shockoe.com.  I’m very excited to be here on the front lines of the mobile revolution!

Building a mobile application involves much more than just making the app.  There’s extensive design work, development time, and testing that goes into every mobile application that you ever use.  To further complicate things, not every app is created equal, and many projects have specific needs that can be difficult for a non-technical user to understand.  As part of Shockoe’s mission of helping you tame the mobile monster, we’ve put together a few things worth considering when you’re trying to design your mobile application.

Making apps takes time.  Making a great app takes more.

 Creating an app that suits both your company’s and users’ needs takes time.  Time needs to be spent on coming up with a design that catches the eye and conveys all of your information, and time needs to be spent with the code behind the application to make sure that it can actually do everything that your customers need it to do.  Then there’s testing.  Though often overlooked, testing is the difference between an app that ‘works’ and an app that you can’t live without.  A little bit of extra time on the testing of your app can make a world of difference when it gets into your customer’s hands, and make the all important first impression that much more memorable.

Cross platform support: a whole new can of worms

 Take a look around any public space and you’ll see dozens of different devices.  Apple, Google, BlackBerry, and Microsoft each have their flagship lines of phones, each with their own operating systems, and frankly it’s extraordinarily difficult to support them all.  Here at Shockoe we make use of Appcelerator’s Titanium API, which allows us to share a great deal of code between different versions of our applications, but even that doesn’t come for free.  Each OS has its different quirks, different UI themes, and different modes of use, and every different device will take debug, design, and development time, no matter how awesome your tools are.

 Servers: out of sight but not out of mind

 People don’t tend to think about servers when they’re thinking about mobile applications, and for good reason.  If a server is doing its job, the users will never even know it exists.  However, when you’re thinking about making the next hit mobile application server needs are something you absolutely need to keep in mind.  Will your users need an account to make use of your app?  Will you need to be able to send updates out to your users?  Will you need to store information from various users’ phones for your app to really be useful? In any of these cases, you’ll need some kind of server.

Long term maintenance: How long will you be living with this app?

After your app is finished, it enters into a new phase of its life.  As devices change, other software gets updated, and user feedback is received, it is important to continue to update your application to address these changing concerns.  UI elements may need to be updated to work with the hottest new version of iOS, you may need to fix an error introduced by an update to Google Maps, or your friendly neighborhood hackers might find a security vulnerability in some library that is critical to your application and require an update or complete rewrite of the problematic code, or your app could become so wildly popular that your old servers just don’t cut it anymore.  You need to be prepared to deal with all of these things when you start planning for your application.

** Image source : Kinvey

Dragenvoy – Ludum Dare 26!

Dragenvoy – Ludum Dare 26!

This past weekend RVA Game Jams hosted a real-world meetup for Ludum Dare 26!  The ludum dare comes in two flavors, a 48-hour solo competition and a 72-hour group based game jam.  We had participants in both flavors at the 804RVA jam location, and saw some great concepts get put into action!

I decided to use the Ludum Dare compo to learn some new features of Unity that I had not previously worked with.  One feature I had not yet used was the physics joint system.   I expected it to be a challenge, but Unity surprised me with its power once again.  Adding a hinge joint was as simple as adding the component to a game object and then pointing the joint at the game object it was attached to; two clicks!  In order to get the functionality I was going for I had to set a few variables, mostly limiting the angles of the joint.

The theme for this Ludum Dare was “minimalism”.  A nice theme that can be interpreted a lot of different ways.  The game design I came up with was a simple snake-style game which differs from the traditional game by not constraining movement to 90 degree turns.  Additionally, the pellets that the snake consumes to increase its size are vulnerable to physics effects, resulting in the snake’s tail moving the pellets around.  Initially, I thought I might use a “convoy” of vehicles to represent the snake, but eventually settled into a chinese dragon theme, resulting in the title of “Dragenvoy”.

I had a lot of fun making this game (I think I played it as much as I worked on it while developing).  The community at RVA game jams is very talented and produced some great results for this game jam.

Below is a link to the game, leave a comment with your high score and any feedback!

Play Dragenvoy on Unity Web Player

Don’t copy and paste other people’s code, type it out

Don’t copy and paste other people’s code, type it out

If there’s one thing that hasn’t changed for me from the first day I started writing code until today, about my 500th day, it’s that not knowing where to start is incredibly intimidating. I acutely remember the panic of learning HTML and having no idea how to get my divs to go where I wanted them to go. The concept of setting up a grid system made sense to me, but the execution eluded me for days.

My relief finally came when I had the greatest realization of my young coding life: good lord, there is working code everywhere! It’s all over the internet! Just find it, copy it, and see how it works and you’re golden! I became a Google, “view source”, and “inspect element” maestro over night, learning structures and logics by reading other people’s successful executions. And for a while, this was all I needed. I needed to learn such basic things that just reading and seeing how other people’s code executed then editing it to fit my needs was the best thing for me. However, as my skills improved, I found myself lacking the skill to write code from scratch as elegantly as I wanted to. So I started a new system: instead of coping other people’s code, I type it out.

When Hunter S. Thompson was working as a copy boy at Time Magazine in 1959, he spent his spare time typing out the entire Great Gatsby by F. Scott Fitzgerald and A Farewell to Arms by Ernest Hemingway in order to better understand what it feels like to write a great book. To be able to feel the author’s turns in logic and storytelling weren’t possible from reading the books alone, you had to feel what it feels like to actually create the thing. And so I have found it to be with coding.

When I’m doing anything from executing a JQuery plugin someone else wrote to creating a static page in Python on a framework (like Cactus), whenever possibly I split the code onto one screen and my IDE on the other and type out the whole thing. It’s amazing how deeply I can understand the logic and any foreign syntax when I actually have to write it out. My mind has to actually narrate, like “here’s where they’re splitting the string, here’s where they’re parsing it, and WHOA! I didn’t know you could do that with Javascript!” when I undergo this process.

And it’s working. It’s awesome. I suggest you try it.

Nobody ever learned to become a great writer just by reading books, you’ve got to feel it.