IoT is Ready for Seamless Accelerator

October 20th, 2015 | Kevin Virta | Uncategorized

SpinDance is serving as a Mentor for the Seamless Accelerator, a coalition of world class enterprises providing new market opportunities to IoT startups located in Grand Rapids, Michigan.  As a Mentor company to Seamless, SpinDance is providing in kind services to help the IoT startups progress their business to the next level.  This blog first appeared as a guest blog to Seamless.

Back to the beginning.

When I first heard the term “Internet of Things,” it was 2006. I had just joined my friends, Garrick Pohl and Budd Bentley, to help them launch the fledgling Crayon Interface.

We set out to conquer the growing connected world, armed with visuals Garrick would create, showing a variety of environments all connected through a software back-end service (intended to be ours) and available for monitor and control purposes on a mobile phone (using apps we would develop in J2ME).  We targeted companies who had products in these environments and told them about the coming Internet of Things and how they needed to get their products connected. We approached companies with products ranging from lighting to door locks to thermostats to appliances to video cameras to garage doors to vehicle security systems to office furniture to home security solutions to dog collars to bicycle locks to . . . well, you get the picture. We covered a lot of ground,…

Read more

The Cloud: Why should I care?

October 6th, 2015 | David van Geest | Development,Systems

In my previous post, The Cloud: What is it?, I discussed what we at SpinDance mean when we talk about the cloud. Now that we have a better definition for the term, I would like to discuss what purpose cloud software components serve.


Many people, when they have an idea for a tech product, envision it in terms of a user interface. They picture a mobile app or a web site, or perhaps the physical hardware with which the end-user interacts. Designing the user interface of a product is a natural and common way to begin a project (although we would argue that user experience design is a better starting place). Good intentions aside, design-by-user-interface can have the unfortunate side-effect of making the cloud an afterthought in the system design.

Overlooking the cloud is perhaps forgiveable. Since it often does not directly provide a user interface (especially with the advent of client-side web applications), you can’t see the cloud. You can’t touch it either – the hardware on which it runs is safe inside data centres many miles away. In short, the cloud doesn’t engage you or your users directly; but to neglect it during system design is a grave mistake. While the cloud isn’t flashy and doesn’t make for great mock-ups or demos, it performs many essential functions in a system….

Read more

How to Enable Git Tab Completion in Bash on Mac OS X

September 28th, 2015 | Conor Livingston | Development

I use git from the command line all day long. In the process, I issue a lot of git commands. This can get (no pun intended) to be a lot of repetitive typing, especially when branch names get long. To illustrate, it’s no fun to type out git checkout feature/shiny-new-processing-system-database-optimization every time I want to checkout that branch. Of course, you can always use the mouse to copy and paste a long branch name rather than typing the whole thing out.

However, if you’re like me and like to keep your hands on the keyboard, this solution can feel slow. Tab completion would certainly be faster and easier. Unfortunately, the default install of git on some Mac computers doesn’t have tab completion enabled. This was the case for me and at least two of my colleagues.

Fortunately, this is an easy fix. There is a bash script that enables tab completion of git commands and branch names. At the time of writing, this file exists in git’s official repo on Github. In fact, it is likely that this file already exists on your local machine, but, if you’re reading this post, you probably haven’t tapped into its power, yet. In the rest of this article, I will show you how to enable git tab completion in bash on a Mac.

The first step is to figure out whether you already have the git-completion script on your machine….

Read more

Test Automation for Embedded – Part 1

September 1st, 2015 | Bob Ensink | Development


At SpinDance we use Agile methods when developing software for our customers. An essential element to this Agile approach is ‘Continuous Integration’. The practice of Continuous Integration requires developers to commit their code to a shared repository on a frequent, often daily, basis. The purpose is to integrate the changes from one developer with the very latest code from all the other developers on the same project. This practice allows us to measure whether the project is progressing (new features are working correctly) or regressing (completed features are no longer working). Successful integration happens only by passing these three steps:

  • conflicts among the code changes are resolved,
  • the software can be built without errors or warnings, and
  • the software passes all of its tests.

The first step is initiated by the developer who makes a decision that their code is ready to be submitted for integration. This developer is responsible to resolve all conflicts between their changes and the changes that other developers have made. It is, essentially, a manual process performed with the help of tools. It can be done effectively only in the context of a version control system which manages changes, detects conflicts, and requires that they be resolved before accepting the developer’s new code into the repository. Resolving these conflicts does not, however, guarantee a successful integration;…

Read more

The Cloud: What is it?

August 27th, 2015 | David van Geest | Development

I used to think that the word cloud, when used in a software context, was a rather nebulous marketing buzzword. In many cases, it still is. But, I’ve come to regard specific usage of it as a useful addition to the software development lexicon. Why? What is the cloud, and why does it matter? In this first post of a series, I would like to address that first question.

At SpinDance, when we refer to the cloud, we are often talking about a software application running on one or more Internet-accessible computers. A very simple example of a cloud application might be a website implemented in Ruby on Rails and backed by a MySQL database.

But haven’t we had websites for decades? If the concept has existed for so long, why has this new usage of the word cloud increased in recent years? In my opinion, the cloud has connotations that go beyond traditional websites.

Many of our projects at SpinDance have a cloud component. But, many of these projects also have other components, typically mobile and embedded. The cloud component might receive data from a thermostat, process it, and provide it to an Android application. Together, the three components form a system. Historically, Internet-connected applications did not work together with phones and embedded devices nearly as much as they do today;…

Read more

Scala for Android

August 24th, 2015 | SpinDance | Development

I have been doing Android development for about five years now, using the traditional tools and language (Eclipse, and now Android Studio, Java). And though I’m comfortable and happy enough with Java as a language, I’ve always had an itch to explore other languages. So, when I encountered a post online a couple of years ago, about using Scala to develop Android apps, I was intrigued. I didn’t have the time then to look into it in more detail, but some brief digging seemed to indicate that it was possible, but not a widespread practice at the time.

Then, recently, I had the opportunity to do a presentation at a local conference (Google I/O Extended – Grand Rapids) and decided that would be a good time for me to finally investigate the topic of Android development using Scala.

What is Scala?

Before my presentation, I was only vaguely familiar with Scala (even though our cloud team uses Scala regularly). Scala stands for scalable language and it’s a JVM-based language, like JRuby and Clojure. The language was created by one of the key contributors to the Java language itself, Martin Odersky, and from my initial investigation, seems to be a well-liked language with some powerful features. One of the biggest features it provides is direct support for functional programming. The language does not force the user to do functional programming,…

Read more

Problems Solved: Fixing Ruby and OpenSSL on Mac OSX

August 21st, 2015 | Nathan Brinks | Development

Some time ago, Apple discontinued the use of OpenSSL; however, Ruby still uses OpenSSL to perform secure communications. One of the prerequisites for installing Ruby often is installing OpenSSL. In my case, this is done using Homebrew by issuing the command brew install openssl . Everything should be working correctly now, right? I am afraid not… In my case, Ruby failed to authenticate requests and was generally incapable of performing secure communication….

Read more

OAuth Explained through an Example

August 21st, 2015 | Conor Livingston | Development

I’ll start out by explaining the problem that OAuth solves. Before explaining how OAuth solves it, I explain a pre-OAuth solution and go through its weaknesses. Then I explain how OAuth works and how it addresses the weaknesses of the pre-OAuth solution. Note: This article attempts to introduce the general concept of the OAuth protocol and does not go into detail about the differences between OAuth 1.0 and OAuth 2.0. See the resources listed at the end for further reading.

The Problem

Meet Joe. He is an average internet user. His favorite place to get the news is a new startup called WorldNews (made up company, of course). This morning he was browsing WorldNews and came across a fascinating article. Naturally, he wanted to share this article with his friends. Joe and all of his friends are on a new social networking site called ChatDeck (also a made up company), so he wants to share the article via his ChatDeck account.

To his delight he notices that on WorldNews’ site, at the bottom of the fascinating article there is a Share via ChatDeck button. Joe clicks the button, and then the problem arises: WorldNews needs authorization from Joe’s ChatDeck account before it can share the article on his wall. At this point the question emerges: How should Joe authorize WorldNews to access to his ChatDeck wall?…

Read more

SpinDance to Sponsor Upcoming IChallengeUth Tech Education Program for Middle School Students

August 5th, 2015 | SpinDance | News

MICHIGAN, August 5, 2015 – SpinDance, Inc. of Holland, Michigan, will sponsor a one-week IChallengeUth session to provide hands-on technology experience to middle school aged youth in mid-August. SpinDance will host a group of students at their company headquarters in Holland, where the SpinDance team will support students as they tackle real-word technology business challenges.

IChallengeUth is a summer educational opportunity, where incoming 7th and 8th grade students develop solutions to real problems submitted by local businesses and community organizations. During the week of August 10-14, 2015, students will pair with master teachers from the Ottawa area, and a “coach” representing the sponsor organization. The students will then present their solutions back to a panel of leaders from the sponsor company and other professional judges.

IChallengeUth is part of the Ottawa Area Intermediate School District’s (OAISD) futurePREP’d program. A central goal for this program is to prepare all Ottawa area students with the skills necessary to be successful in achieving their personal life goals. Through the annual futurePREP’d program, OAISD offers innovative tools and experiences to help students make decisions that will positively impact their careers and quality of life for decades.

As part of sponsoring IChallengeUth, SpinDance will team with the OAISD to invite young students who have expressed interest in advanced education and career planning. According to Kyle Dannenberg, Development Coordinator for the OAISD,…

Read more

Google IO Event

SpinDance at Google I/O Event

May 15th, 2015 | SpinDance | News

SpinDance to Provide Keynote Address as a Platinum Sponsor of Upcoming Google I/O Event in Grand Rapids

SpinDance, Inc. of Holland, Michigan, will participate as a platinum-level sponsor at the upcoming Google I/O Extended conference in Grand Rapids this month. SpinDance Software Lead, David Keenan, will provide a keynote address on the features and benefits Scala offers Android development.

Google I/O, held this year at Moscone Center West in San Francisco, California, is one of the premier technology conferences in the world. Google I/O features highly technical, in-depth sessions focused on building web, mobile, and enterprise applications with Google and open web technologies such as Android, Chrome, Chrome OS, Google APIs, Google Web Toolkit, App Engine, and others.

To leverage the tremendous popularity of the event, Google created I/0 Extended for local developer communities to stream the event live, plus add a layer of local speakers and breakout sessions to complement the program. The local Grand Rapids event will be held in the Loosemore Auditorium at the Richard M. DeVos Center, courtesy of Grand Valley State University, on Thursday, May 28, and Friday, May 29.

SpinDance, Inc., located in Holland and Cascade, Michigan, is a provider of systems engineering and software development services to companies across multiple industries throughout Michigan and beyond. Since its founding in 2000, SpinDance has helped its customers build and deliver connected,…

Read more