Bendyworks

What's happening in

Never trust developers who don't embrace their inner geek. We're actively engaged in the pro­gram­ming world, and have plenty to say and share on the subjects that ex­cite us. Consider this our simul­taneous soapbox, corkboard, and scrapbook for all things geeky.

Article

Posted on 02.17.12 by Chris |

George Boole Returned As a Zombie and is Gnawing on My Brain

This is about that oft-neglected corner of programming, the humble boolean. Perhaps, by thinking about what’s going on in many boolean expressions, we can iron out his quickly-forking complexity. And, oh, what luck! Here’s a slab of boolean logic that I just happened to have at hand (variable names have been changed to protect the innocent):

I have found that stuff like this is easy for me to get wrong, hard to read, and hard to refactor. What could be done to simplifiy these cases? Consider just the first line of the above, (hash[:foo] == "1" || !hash.has_key?(:foo)). Already, there are two competing interests here. What is going on is that we are conflating value-testing with existence-testing. What we may ...

Article

Posted on 02.14.12 by Brad |

Mobile and Professionalism for Students

Yesterday, at the request of their teacher Suman Banerjee, I presented a view of what it’s like to be a professional programmer to a class of Computer Sciences students at the University of Wisconsin–Madison. The focus of the talk was “Mobile & Professionalism,” since the class’ title is “Foundations of Mobile Systems and Applications.”

The slides are available on Speakerdeck and auxiliary information is available on my github page.

In essence, my talk was split into two sections: Mobile Development & Professional Development. Given only 75 minutes to talk, I had to pick just a few topics for the entirety.

I started with an in-depth discussion of the MVC pattern and how it applies to native applications. Upon asking the class who had heard of this pattern, only about half of the hands went up, so I certainly had my work cut out for me. ...

Article

Posted on 02.07.12 by Brad |

All You Need is love.travis-ci.org

Today marks a milestone for the Travis CI project: it launched a crowd-funding campaign titled love.travis-ci.org to finance a slew of new features. Among the planned additions are private build support, pre-tested Github pull requests, build artifacts, and more language support.

Bendyworks is proud to be a platinum sponsor of this effort. We sincerely believe Travis CI is ushering in a renaissance of software authorship, doing for testing what Github did for source code management.

Why do we believe this? If you look at the proposed feature list, Travis CI is looking to turn a simple continuous integration server that simply reports “red” or “green” into a complete service that takes the guesswork out of a project’s health. And once you can see a project’s health, you can start improving it. Here are a few of the planned additions that will make Travis more that just a community CI server: ...

Article

Posted on 02.03.12 by Matt |

Giving back to the community

Here’s how Bendyworks has given back to the community in the past week:

Jim recorded an interview with the fine folks at EngineYard about our experiences working with them. Look for the link to the audio soon!

Madison Ruby registration and Call for Proposals are now open!

Brad started a gem called guard-readme-on-github that allows you to preview your README files as if they were already pushed to Github. Just pull it into your gemfile and set up your Guardfile with:

[bundle exec] guard init readme-on-github

Matt worked with Angel N. Sciortino on schedule_fu and rschedule.

Brad and Matt made a change to the popular heroku_san gem to store the last deployed git commit SHA in Heroku config variables. You can view the pull request for this feature in the mainline heroku_san ...

Tutorial

Posted on 02.02.12 by Jaymes |

UIAutomation and Pusher

UIAutomation is Apple’s answer to integration tests. It allows you to drive and run assertions against your application using a javascript library that interacts with user interface elements. It’s great to have such a powerful tool, but what if you have an application that depends on external triggers, such as Pusher events?

Let me introduce you to UIAHost. More specifically, it’s method performTaskWithPathArgumentsTimeout. What this allows you to do is execute a script in the flow of your tests.

Say we want to execute the ruby script:

All we have to do in our UIAutomation script is this:

That’s a pretty simple ruby script, and will fail to find the pusher gem on any of our machines at Bendyworks because we use ...