July 2024
Let's make Twirp and Protobufs easier with Ruby
We love Protobufs and Twirp, but what if we could make them even easier for Rubyists?
March 2024
Job Queues
I got talking yesterday about async jobs in Rails and thought I’d put my thoughts on the blog too.
September 2023
“Wildebeests on charred grass.” Photo by Susan Jane Golding. Used under a Creative Commons CC BY 2.0 License. https://flickr.com/photos/sjgolding/29694808950
Collapsing old Rails Migrations
I don’t like deleting old migrations in my Rails apps, but if I did, here’s how I’d do it,
March 2023
Photo by John Seb Barber on Flickr https://www.flickr.com/photos/johnseb/6302542008
Licensed under Creative Commons CC BY 2.0: https://creativecommons.org/licenses/by/2.0/
Five O'Clock Somewhere
Some fun with Postgres to find users for whom it is a certain time.
Fix for Heroku Breaking Ancient Apps
Have a really old Heroku app that recently broke? We help with a handful. Here’s what we do to fix them.
August 2018
Keep Your Certificates Current Using Cron & Dead Man's Snitch
A rethinking of a 2015 post to keep certificates current. Now using cron and Dead Man’s Snitch.
July 2018
Part 3: ARKit Wall and Plane Detection for iOS 11.3
Over the course of this series, we’ve been talking about ARKit wall and plane detection. Now that we can visualize our detected planes, we’re going to place 3D objects on them.
June 2018
Sketch Plugins, Baby!
At Collective Idea we use Sketch for wireframing and UI design. That’s not all we use though. One of our designers breaks down his current favorite plugins.
Batch downloading analytic events from Google Analytics
Recording Google Analytics ‘events’ on the fly can be an unnecessarily heavy load for your server. One way to fix that though is by sending the ‘events’ to GA and then batch downloading them in a weekly job.
Unpacking opportunities behind tech buzzwords: IoT
You’ve heard of IoT, but do you know what it is really? We’ll share a few ways it is being used in the home, business, and the classrooms.
What's in a Templating Language, Part 2
In this post we take a deep dive into how Late implements parsing and evaluating a Late template. In what is often considered black magic, I’ll show that compilers are nothing more than lots of simple, easier-to-graps parts combined into larger complex systems.
May 2018
GDPR by The Digital Artis is licensed under CC0 Creative Commons
Getting Ready for GDPR at Collective Idea
Even though we’re an American company, the newly instituted GDPR affects how we collect data. Here are a few tweaks we made to Google Analytics for GDPR compliance.
We're Green Commuters and We Cannot Lie
It’s that time of year again when we compete against other businesses in the area to get in the most Green Commute Miles over a week long period. Here’s what we did and what we learned along the way.
Part 2: ARKit Wall and Plane Detection for iOS 11.3
We’re using ARKit wall and plane detection for iOS 11.3. After detecting a plane, we can add an SCNPlane with a grid texture to visualize it better.
Working with JavaScript Objects
TIL that when you have a plain object and store instance variables on it, you’re actually setting a class variable across all instances. Here’s how to fix that.
April 2018
Corridor of Building by Pixabay is licensed under Creative Commons Zero
Part 1: ARKit Wall and Plane Detection for iOS 11.3
The first step to building an ARKit app is detecting planes to place your 3D objects on. With iOS 11.3, you can now detect walls!
Join Us for Tulip Time
We’re inviting all of our friends and family to join us during Tulip Time. Our office is open for you to come co-work for the day!
March 2018
What About Elixir?
Elixir is steadily making its way into our development stack. Using tools like Phoenix and Absinthe allow for the development of some very powerful API’s and abilities. Built in features allow for great performance, concurrency and presence monitoring. We’ll discuss some of our findings and why we’re excited about Elixir.
What's in a Templating Language, Part 1
Templating languages are ubiquitous across software languages and ecosystems. There are so many to choose from, covering many different use cases and requirements, but have you ever wondered what it takes to build one? Using Shopify’s Liquid as a comparison case, I’m starting a new learning experiment to understand how these tools work and what it takes to implement them. This journey will see us diving into lexers, parsers, compilers, and evaluation, combining data with a template to produce a final document.
February 2018
Virtual Town Hall Tools
With a partially remote team and a meeting that requires full participation, here’s how we create a positive experience for everyone involved
Dead Man's Snitch is a ProgrammableWeb 2017 Noteable API
Dead Man’s Snitch was recently included in a list of notable and interesting APIs for app development and DevOps engineers. It’s always a great opportunity to be included and highlight along side other great modern platforms.
January 2018
The Power of Animated Gifs
Collective Idea loves animated gifs. We use them in nearly every form of communication we use on a regular basis. It was only a matter of time until we found a new use for animated gifs that brings value to our clients, customers, and development teams.
December 2017
Consultants by Free-Photos is licensed under CC0 Creative Commons
Navigating your options when you need to grow your software team
When you’re building out a digital product and you need additional help, do you hire in-house or go with an outside consultant. We’ll look at the pros and cons of each decision.
RubyConf 2017: Coming Home
RubyConf is where I got my start in the software world and because of that it “feels like going home”. This year the conference seemed homier than normal thanks to its great, overarching tone.
CABasicAnimation for animating strokes - Plus a bonus, gratuitous UI interaction
CABasicAnimation is the backbone of UIView animation. Ever wanted to animate a stroke, shadow, 3d transformation, or other CALayer backed properties? CABasicAnimation is your answer.
Shedding Light on the Development Process
Did you know there are parallels between the lighting design process in dance and software development. Victoria Gonda, our resident dance expert and software developer breaks it down for you.
November 2017
Android Smartphone by freestocks.org is licensed under CC0
Using Espresso to Test Opening Links
On Android, we can use autolink to let users open links that are displayed in a text view. How can we write a test to make sure this functionality isn’t removed though? openLinkWithText is the key.
Securing the root user on macOS High Sierra
A developer in Turkey recently discovered that the High Sierra version of macOS has a serious vulnerability concerning the “root” user. Here’s what’s up and how to protect yourself.
My Experience at droidconSF 2017
DroidconSF proved to be a great conference. There were so many great things to learn, and people to meet. My experience there was definitely worthwhile.
The Very First KotlinConf
JetBrains held its first KotlinConf, and it was a huge success. With 1200 attendees, it was a great conference to both attend and speak at. There was much to learn about the language and how it is being used.
Ditch the AWS Service Dashboards for Terraform
Terraform is a simple yet powerful tool. Let’s take a look at how it can be used to quickly create and manage an AWS Lambda function.
The truth about our Open Source
Speaking at All Things Open made me think about our open source software, where we’re at, and where we’re going at Collective Idea
It’s time to stop ignoring the Discovery Phase
Discovery is a crucial part of a digital project’s lifecycle because it’s where we collectively discover and share knowledge about a project’s goals with the client. It is in this phase that a project’s problem is defined, users are identified, and functionality is documented.
October 2017
Business Technology Notebook by Goumbik is licensed under CC0 Creative Commons
Building Better Test Suites
Test suites are important tools to help ensure the correctness of your application, but the suites need to be architected, designed, and maintained to ensure the test suite itself doesn’t rot and become a burden. This post covers some high level concepts and architecture decisions that keep test suites maintainable.
Authentication With GraphQL, Relay, and Rails
In this article, we’ll look at how you register users and log them in and out in a Relay-on-Rails application. This piece covers the back-end implementation, only, so you’ll need to know how to implement Relay mutations on your preferred client.
Hooray for Global Color Themes in Xcode!
Ever wanted to change an application’s color palette in one place and have it update everywhere in Xcode, regardless if it’s used in storyboards or code? Xcode 9, iOS 11, and Color Assets are your answer.
When Strange Loop Makes Your Brain Melt
Continued learning is hard and sometimes conferences, which should help with that, can be demoralizing. Here are some tips to let them empower you and not make you feel inadequate.
Write/Speak/Code: A Conference For Doers
Conferences are great for learning and networking but the Write/Speak/Code conference encourages attendees to be doers on top of being participants. Learn one, Do one, Teach one.
Big Data Ignite 2017 Recap
Big Data isn’t going away any time soon. After attending a local conference on the topic, I started to see a couple of major trends showing through, including the fact that enterprises are more interested in it than ever.
September 2017
Side Effects of Code Review
Code reviews are helpful for maintaining code quality and exchanging knowledge. They can also be a way to boost confidence and provide another meta way of educating.
Showing Off Some Projects at Collective Idea
Our team does a lot of very cool work, but we’re often barred from talking about it. So recently we decided to focus on some projects we can talk about and wrote up some case studies. Here are three.
Lessons to Continue Learning When it Comes to Software Development
When working in software development, you learn new things almost constantly. Sometimes you learn the same lessons more than once. Using the story of a recent pairing session, I outline the most important lessons I’ve learned this summer as an intern at Collective Idea.
August 2017
Audience, speech, speaker by MariSmithPix is licensed under CC0 Creative Commons
Where you can find Collective Idea this fall
Collective Idea encourages all of it’s employees to take on professional development opportunities whenever possible. Here are a few conferences we’ll be at over the next couple of months and we hope to meet up with you!
Bang Bang: Drumming the nulls from your code
When converting Java code to Kotlin code, there’s a good chance you’ll see a bunch of double bang operators. Rather than leaving these to error, you want to make these places null safe. Here we discuss some options to handle null in Kotlin.
How We Develop Mobile Applications - Pt 4 - Android
Learn to use Model-View-Presenter to define and test application behavior independent of the Android framework.
GraphQL + Relay Modern + Rails
Are you a Rails developer looking to take the next step? Here’s how to add Relay, GraphQL and Relay on top of your favorite web framework.
July 2017
Photo courtesy of Mark Scheel
My 360|AnDev Review 2017
360AnDev is an amazing Android conference that takes place in beautiful Denver, CO. Here’s a collection of highlights of the 2017 event.
June 2017
wocintech stock - 6 by WOCinTech Chat is licensed under Creative Commons 2.0 Generic
Kotlin Uncovered: Part 5
We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post we’ll learn about extension functions, and how they work under the hood.
Adjustable Form Text Area with the contenteditable Tag
Finding the proper behavior for uncommon form inputs can be difficult. Here is how we incorporated contenteditable and Javascript to handle a large body of content gracefully without breaking the form styles and maintaining a good UX.
Kotlin Uncovered: Part 4
We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we’ll learn how having nullability built into the type system helps us.
May 2017
The Summit Thursday by The Web Summit is licensed under CC BY 2.0
Coming Out of My Shell at RailsConf2017
I’m rather new to the world of software development. It’s something I truly enjoy and continue to dig deeper into. Just recently I had the opportuity to go to my first software conference, which was RailsConf 2017. Here’s my experience.
RailsConf 2017: An Organizer's Perspective
As a conference organizer, the experience can be a bit different. Find out why in this post.
Kotlin Uncovered: Part 3
We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we learn about everything we get from Kotlin data classes.
Kotlin Uncovered: Part 2
We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we learn about the power of Kotlin classes.
Team Tools Roundup
Our distributed team uses some really interesting tools to do the work we do. Check out our tool roundup to find some new tools to try yourself.
Kotlin: Uncovered - Part 1
We can learn a lot about Kotlin through decompiling the bytecode into Java. Follow along to learn about the different things we can learn through investigating Kotlin this way.
Diving into Web-Based Virtual Reality
Learn where to start to create a simple virtual reality image and how to learn more
My First Conference Talk
This year I had the goal to try speaking at conferences (or at least a MeetUp), and I accomplished that goal. Here’s the story of my journey there.
DroidConBos 2017 Review
Boston just had their first Droidcon, and it was a great experience. There was a beautiful community, and so many things to learn. I was also privileged to share my first talk on the Kotlin programming language.
Tailoring Retrospectives by Using Core Values
Incorporating your company’s core values into a regular workflow can be challenging. Here’s how we did that with our retrospectives at Collective Idea.
Working Remotely?
If you’re just starting out as a remote worker or you’re just looking to improve your flow, these tips and tricks will help.
April 2017
Container Artwork by Luuva is licensed under Creative Commons Attribution-Share Alike 3.0
Containers, Docker, and Kubernetes Part 3
You want to try out this Kubernetes thing but aren’t sure how to start? Great! In this post I go over how I structure my Kubernetes configs, how I apply them to clusters, how to deploy changes, and how to manage secret values.
Conferencing Success
Conferences can be overwhelming. Use these tips to make the most of your conference experience.
How I Almost Put an iframe into a WebView
You don’t have to use an iframe to listen to JavaScript events on 3rd party webpages. Instead, the best solution just involves a little Kotlin.
Arduino Programming in Vim
Tips and tricks learned along the way as I learn how to build Arduino projects inside my favorite development tool, Vim.
March 2017
Desk Technology by Lee Campbell is licensed under Creative Commons Zero
Lessons Learned in Lambda
We recently finished up a project that uses AWS Lambda. The project needed to crunch large sets of numbers in a small amount of time. Lambda turned out to be a good fit for doing exactly that. But, it involved some trial and error. Here are a few lessons we learned along the way.
Using Tmuxinator to automate your environment
How to use Tmux and Tmuxinator to automate the creation of complex environments such as service oriented architectures.
Here's Where Collective Idea Will Be Over the Next Few Months
We’re participating in or attending conferences and events all around the country. See when and if we’ll be in a city near you!
Common sense UI design
Do you want to make your web designs seem familiar to your users? Check out some not so obvious ideas that can contribute to an easier to use interface for your website or application.
February 2017
Steel Container On Dock by Freestocks.org is licensed under Creative Commons Zero (CC0)
Containers, Docker, and Kubernetes Part 2
You want to take the next step and move to containers, but still have some questions that Docker doesn’t answer? Take a look at Kubernetes, the container orchestration tool from Google!
Finding Productivity by Abandoning the Traditional To-Do List
There are a number of tools and methods out there that help to manage your day. Here’s a look at what works best for me, and it doesn’t include the traditional to do list.
How to Write a More Effective Conference Proposal
Looking to submit a conference proposal? These five tips will help you craft better proposals that will impress the reviewers in the future.
Productivity Tips and Tools
Balancing a variety of professional and personal work tasks can be tough. To make sure nothing falls through the cracks, use these tips and tools to help keep yourself organized.
Unsolicited Critique
One of the Collective Idea designers takes to the internet to assess and rework whatever he finds on the other side.
Guard is Your Friend
Test-driven development can be a little slow going, jumping between your code and your console, and targeting tests by line is prone to error. Use these tools and techniques to streamline your TDD.
Remote-friendly Retrospectives with Trello
Conduct collaborative, interactive meetings with people all over the globe. Trello is good for more than just software development and project planning.
Welcome Patrick O'Dell
We’re happy to add another designer to the Collective Idea team!
How We Develop Mobile Applications - Pt 3 - Android
Learn how to use Test-Driven Development to interact with a remote JSON API using Retrofit, Moshi, and RxJava
Welcome Kyle Magnuson
It’s true… we hired another Hope College graduate.
January 2017
Welcome Sasha Wolff
We’ve added a marketing person to our team!
Welcome Troy Spruit
We’re very excited to belatedly welcome Troy Spruit to the Collective Idea family.
Hands On With The Maker Movement
This year we had the opportunity to teach students at Holland Christian High School about the Maker Movement, and how to become involved in it. We had a blast covering 3D modeling and printing, circuits and micro-controllers, robotics, programming, and IoT services.
Containers, Docker, and Kubernetes Part 1
You’ve heard of Docker and containers but are still not sure if they’re a good fit for your requirements. We take a look at the benefits and concerns of switching to containerized infrastructure.
Testing an Uploaded File in Rspec
Sometime you need to test how your code handles an uploaded file, but you don’t want to upload it in your test. Luckily, there’s an easy way to handle this.
Turbolinks Caching with JavaScript Modified Dom
Don’t want duplicated markup in your document? There are a few ways to fix that. We’ll go through how to prepare your document for caching with Turbolinks.
An in-depth look at two RailsConf tracks
RailsConf offers an opportunity to submit proposals directly related to specific tracks. Learn more about two of these tracks to get inspired and craft successful proposals.
Cropping Animated GIFs with MiniMagick
Cropping an animated GIF with crop
will continue to use the original image’s canvas size. This cool trick will ensure the cropped image ends up the correct size.
How We Develop Mobile Applications - Pt 3 - iOS
Welcome back for the third post of our blog series on how we build mobile apps at Collective Idea. In the last installment we covered basic project setup. This time, we’ll discuss our first steps in fleshing out the application.
December 2016
Rainbow of Credit by Frankie Leon is licensed under the CC BY 2.0
Creating and testing Stripe Webhooks using StripeEvent
Today we’re using Stripe webhooks to listen for invoice.payment_failed. We’ll walk you through how to set this up step-by-step.
How We Develop Mobile Applications - Pt 2 - Android
Now that you know what your mobile application will do and look like, it’s time to get your various environments set up. Here’s our list of things we check off at Collective Idea for creating an Android app.
Getting Started with Action Cable
With the inclusion of Action Cable in Rails 5, we can easily add WebSockets to our Rails applications. This post walks through how to set up Action Cable as a response to an action on an Active Record model.
How We Develop Mobile Applications - Pt 2 - iOS
Now that you know what your mobile application will do and look like, it’s time to get your various environments set up. Here’s our list of things we check off at Collective Idea for creating an iOS app.
November 2016
Avoid parsing Rails controller params by using Metal
While looking at a controller today, I came to the conclusion it’s better to use ActionController:API
instead of ActionController::Metal
. Here’s why.
So You Want to Talk at Conferences
I thought it would be awesome to start speaking at conferences, but I wasn’t sure where to start. Here’s how I prepared for my first time at the podium.
Continuing Education at Collective Idea - RubyConf 2016
When attending RubyConf 2016, I learned more than just additional gems about Ruby. I learned about continuing education and why it matters.
Even the Justice League Works Remotely
Hiring remote developers who are not yet senior requires looking for certain critical characteristics. Learn what those are and what you should consider if you are hiring or looking for a remote position.
How We Develop Mobile Applications
Developing a mobile application that works on both iOS and Android takes a bit of work. Here are some best practices to get you going.
macOS alternatives: What about SteamOS?
After Apple’s October 27 Mac event, many people were left to wonder, “Should I think about a macOS alternative? What else is out there?”
Program Like a Dancer
The art of dancing and the act of programming are quite similar. How so? It’s the way both dancers and programmers respond to feedback.
October 2016
Closeup Brooms by OpenRoadPR is licensed under the Creative Commons Zero Licence
Troubleshooting Feature Specs
Figuring out why your feature tests are failing can be difficult, especially when setting up the first few tests in the codebase.
Teaching the Future to Code
This past weekend we shared our coding knowledge with some eager 7th and 8th-grade girls ready to create their own websites with BitCampGR.
BitCamp GR at Collective Idea
We are very excited to be hosting our very first BitCamp GR event this weekend in conjunction with Hope College Computer Science Department.
How to Create a Trending Hashtag
During the third and final Presidential Debate, the hashtag #TrumpBookReport was trending on Twitter. Turns out, I created this hashtag sensation, and I can teach you my tricks.
Retrofitting Espresso
You don’t need an IdlingResource
, and sleep()
is fickle. Make Espresso wait for your observables running on background schedulers with this one cool trick!
Your User Can’t Click Your Floating Action Button
An easy way to make your Android app’s main action more accessible for people using screen readers.
Bundler's Multiple Source Security Vulnerability
While working on a project, I discovered a major security vulnerability that affects all stable versions of Bundler.
4 Twitter Tips to Use at the Next Conference You Attend
Networking is taking place both online and offline at conferences big and small. Here are a few tips to help you out with virtual networking.
September 2016
Computer Notebook Typing by Thomas Lefebvre is licensed under Creative Commons Zero
A Survival Guide for Non-Writers Who Have to Write for the Web
Writing for the web isn’t easy especially if it isn’t your full-time job. It doesn’t have to be painful though. Here are a few tips to help you survive.
Autocomplete your Rails Form using Selectize.js
When using Ruby on Rails Form Helpers, it could be useful to add an autocomplete feature to fields where users might reuse data. One way to do that is to use Selectize.js to create a dropdown and populate it with data from the user model.
Free SSL on Heroku
Starting today, Heroku has a new free SSL offering. Use it with Let’s Encrypt for a fully free SSL system.
Spacemacs: The Final Frontier for a Diehard Vim Fan
Collective Idea’s been bit by the Elixir bug recently. And in my research to configure its Alchemist tools, I’ve discovered an interesting text editor: Spacemacs. Spacemacs is an easy-to-install set of defaults for Emacs. And I love it! But, I’m a diehard Vim fanatic. How could I say something that sacrilegious!?
A New Way of Learning
Looking back, I now know there are a lot of that can’t be learned from a book or tutorial. Through working with others, I was able to build on my skills in a way I wouldn’t have been able to do in isolation.
My Ruby Epiphany
I’ve been using and teaching Ruby for many years now, but I recently had an epiphany about private methods.
4 Reasons Elixir is the New Hotness
Have you heard the buzz about Elixir? Look no further to see what all the commotion is about!
August 2016
To Do List by Adam Diaz is licensed under CC BY-SA 4.0
Keeping on Task using Dead Man’s Snitch
How to use webhooks and Dead Man’s Snitch to hold yourself accountable for getting things done.
I’m Sorry, But Stop Apologizing
Stop saying sorry all the time. Especially when there is no reason for it. Just say what you need to say.
How to Become a Better Pair Programmer - Part Four
In the last part of our four-part series, we look at a variety of roles one can take on during a pair programming session. Are you the researcher, tester, sounding board, or something else?
How to Become a Better Pair Programmer - Part Three
Pair programming isn’t always just about working with another person. Sometimes, partnering up on a project requires you to know more about how YOU work within the partnership.
Welcome Victoria Gonda
We’re very excited to welcome Victoria Gonda to the Collective Idea family.
July 2016
wocintech (microsoft) - 61 by WOCinTech Chat is licensed under CC BY 2.0
How to Become a Better Pair Programmer - Part Two
Part two of our four-part series on pair programming touches on the topics of the time involved when pairing, why you should keep your ego in check, and how to assume the best of your pair partner.
Solutions to Potential Upgrade Problems in Rails 5
The Rails 5 upgrade has a few changes that may cause confusion. We look at how to get around the disabling of autoloading and look at the new deprecation warnings.
How to Become a Better Pair Programmer - Part One
So what can you, as a well-meaning professional developer do to contribute more to your team? We have several suggestions for reaching your pair programming potential.
How Rails Can Reduce Your Monthly Headaches
Months can be difficult to work with when they have a differing number of days. Rails helps out with #month, but you still need to use caution.
Turning the Train into My Mobile Office
Collective Idea encourages everyone to work where they are most productive; whether that means at home, a coffee shop, the office, co-working space, or train.
Efficient Learning for New Programmers
Good practice tips for those who are new to programming and have limited time to complete ideas.
Celebrating Our Newly Expanded Office Space
This past year we expanded our office space and our team. We held a Grand Opening party to celebrate.
June 2016
Unlearning How to Type
A week ago I finished building an Ergodox keyboard as a way of easing RSI problems and having fun. However, in adjusting to this
new keyboard layout, I learned some valuable lessons about my personal development style instead.
How to Resync Your PostgreSQL Database Pointer
If you’re working with PostgreSQL and you’ve recently gotten a UniqueViolation error, you may just need to correct an out-of-synce database pointer.
Why We Support the Seamless Accelerator
West Michigan is home to the Seamless Accelerator, an initiative that aims to bring IoT startup ideas to market. Once component to the accelerator is resource partners like Collective Idea.
A Sense of Place
Out of all the places in the world we can set up shop to do software development, we’re in Holland, Michigan and thriving.
Wyatt: The simple way to generate RSpec tests
As software developers, we like to work smarter, not harder. If you’re looking for a smarter way to generate RSpec tests, check out Wyatt.
Programmer in a 3D printer world
A 3D printer can do more than just create fun objects. They can be programmed to solve every day problems.
Interview: Talking Middleman V4 and Front-end Dev with Thomas Reynolds
Middleman was built by Thomas Reynolds over eight years ago as a way to build static sites with easy-to-use framework. I talk with Mr. Reynolds about a few new features for Version 4 of the tool.
Fun with SVG: CSS background-blend-mode Fallback
I want to use the new hotness, but Internet Explorer/Edge doesn’t support it yet.
May 2016
“Blue Planet Globe”:https://pixabay.com/en/earth-blue-planet-globe-planet-11015/ by “WikiImages”:https://pixabay.com/en/users/WikiImages-1897/ is licensed under “Creative Commons CC0”:https://creativecommons.org/publicdomain/zero/1.0/deed.en
Beyond YML Files - dynamic translations
The standard I18n implementation has you store your translation in .YML files in your project. This solution requires developer involvement and project redeployment any time a translation needs to change. Translations are data - not code - so a better solution is to empower an admin to make these changes herself.
Volunteering for BitCamp GR
Volunteering at BitCamp GR, by Software GR, is an amazing day-long event to teach young girls software development.
How We Work: Space
Our space is a bit different than many offices, but is a reflection of how we work.
Creating a Mentally Healthy Work Environment
There are a number of things an employer can do to create and foster a happy and healthy workforce.
3 Excellent Reasons to Try Green Commuting
Air pollution is a problem that affects everyone. So to help combat the problem, we tried green commuting for a week. Here are our top tips!
GitHub's Price Hike and Why We're OK With It
GitHub is changing their prices for organizations. Here’s why you should stop worrying.
Pitfalls of a Legacy iOS Project
What seemed like a simple-reskinning turned into a much more involved project. It’s codebase that’s sat dormant for a few years, and that posed difficulty finishing tasks in the time we originally thought it would.
The following covers a few of the lessons we learned. That way you can be aware of pitfalls the next time you have to update a legacy iOS application.
Walk Through the Collective Idea Office
We’re in the middle of expanding our office in located in Downtown Holland. Before we unveil the office it its entirety, check out our previous [i] space in 3D!
CODE Film Review: Diversity in Computing
We held hosted a screening of CODE: Debugging the Gender Gap in Graves Hall on the Hope College campus, and are happy with the conversations it started about the lack of women and minorities in the computing industry. The film, and the discussion that followed emphasized two important efforts when approaching this issue: exposure and support.
April 2016
Rails + React + NPM: Another Option
Most of the instructions I found for combining react-rails
with browserify-rails
and npm modules were at least a year out-of-date. But I finally got it all working, and it turns out that it’s pretty straightforward. In this bog post, I’ll show you how to use the convenient react-rails
helpers to build views while using browserify-rails
to bring in npm modules where and when you need them.
Movie Night!
Collective Idea and the Hope College Computer Science Department are working together to host a screening of CODE: Debugging The Gender Gap in Holland, MI. You are invited to gather with us to watch this film in Winants Auditorium in Graves Hall on April 18th at 7:00 pm.
How We saved the TSA $185,200. I mean 185,200 Bytes.
The TSA paid $1.4 million for a Randomizer app that chooses left or right We can build it better.
Multiple Personalities in Git
At Collective Idea, we use Git all the time. Right now, I have 50 Git repositories cloned on my computer and they fall into a few categories. My problem is that I need to commit from a different email address depending on which type of project I’m working on. I explored three ways to do this, looking for the least intrusive.
March 2016
Modern Javascript and Rails
Want to write ES6 and/or use JSX or any of a vast array of modern Javascript tools in your Rails app? What about also writing your Javascript tests with the same tools? It’s easy with Browserify-rails and Teaspoon!
February 2016
The NoCMS Manifesto
I’ve been thinking a fair amount recently about life in a post-Wordpress world. Specifically, I’ve been pondering what a fully modern CMS might look like if it were designed in 2016 from mature, stable technologies with the goal of giving publishers the flexibility that they need to solve their number one problem. Of course, the number one problem in publishing isn’t slow page loads, nor is it the fact that Wordpress has a crufty UX while all the cool kids are doing edit-in-place. Performance and UX do matter, but by far the biggest problem in publishing right now is that it’s no longer clear how anyone will make money by typing things onto the Internet for other people to look at.
January 2016
The Late Train by Alex Becerra is licensed under CC BY 2.0
Painless Activity Streams in Rails
There’s a better way to implement business logic, and track events in Rails.
WISP Trials: Waiting For the Balloons
I used to think Google’s plan to give the world Internet via balloon was kind of looney. Then I moved to Texas and started a small hobby wireless ISP (WISP). Here are some things I learned about why American broadband is a fiasco, a fiasco that’s about to get way worse.
Let's Encrypt with a Rails app on Heroku
I needed to renew an SSL certificate today, so I used it as an excuse to try Let’s Encrypt for a free certificate for a Rails app hosted on Heroku.
PostgreSQL 9.5 Upgrade with Homebrew
PostgreSQL 9.5 was released yesterday and has a lot of cool new features. If you’re on Mac OS X and using Homebrew, you can upgrade with the steps below.
December 2015
Coding by Matthew (WMF) is licensed under CC BY-SA 3.0
Adding Uploadcare to Rails the Easy Way
Back when I started working with rails, a typical rails app was a relational database that you provided a user-facing CRUD interface for. Now a typical rails app is a place where a bunch of REST APIs meet.
November 2015
Fun with SVG: Embedding in CSS
You can embed readable SVGs inside of CSS. Really.
Updated with better Firefox support.
ILuminate at Grace Hopper Conference
Iluminate uses a combination of dance and technology to create stunning performances. Their use of wireless light technology on dark costumes creates an incredible show.
October 2015
Get Notified If You Forget to Visit a Website
How to create a free website monitor that alerts you when you forget to visit any website.
September 2015
Internet Land Grab 2.0
You’ve probably read that WhatsApp hit 900 million users with only 50 engineers. That’s not quite the whole story. Thinking of the effective size of the company’s engineering team is a useful reminder of what really matters.
Inside The Machine v2.0: Coming Soon With More ARM
I’m working on a second edition of my book, and I’ll be doing all the work in a public github repo. The new edition will also replace PowerPC with ARM.
Why I Joined Collective Idea
In which one of the Ars guys gets back into coding, and joins a great software team.
Bicycle Fleet
We’re launching a fleet of bicycles from our office!
August 2015
Keep Your Certificates Current Using Your Test Suite
How can our test suite tell us when a certificate expires? We’ll show you.
Welcome Dana Jones
We’re excited to welcome Dana Jones to the Collective Idea team!
Stubbing your Android Intents
When we stub an intent, we are able to intercept it so the intent is never sent to the system, and specify how it should respond. This can be helpful in your Android tests when you need to know if an intent was sent, but you don’t actually need the Activity to start. This can be accomplished by using espresso-intents.
July 2015
Bi-Directional and Self-Referential Associations in Rails
I’ve been working on an application that works to match users together based on a complex set of criteria (read: big slow database query and in-memory processing). The core usage of the application revolves around these user matches, so I want to make sure that either the algorithm will run very fast or can be cached so that it’s not run every time a user visits their matches page.
The most important requirement for our matches is reciprocation. To solve this problem and meet all of the requirements, we can create a bi-directional, self-referential, self-syncing, many-to-many association between users using a has_many :through
association with a join model to keep track of a user’s matches.
Rewriting History With Git Rebase, Reset, and Amend
Editing an existing commit in history with an interactive rebase, reset, and amend.
Quick Setup for Your Rails Apps
We need to make getting up and running with our Rails apps easier. Here’s my attempt.
5 Timesaving KISSmetrics Tips I Wish I Knew About
Moving our SaaS conversion tracking from Google Analytics to KISSmetrics was a great decision, but there were a few things I learned that I wish I would have known before jumping in that would have saved time.
Tracking KISSmetrics Events Using Query Parameters
Accurately tracking new signups, upgrades, and downgrades for a SaaS is extremely important. When our JavaScript Events broke and Google Analytics was no longer reliable, I moved all conversion tracking to KISSmetrics. Query parameters proved to be the simplest and most reliable way to accurately track Events in KISSMetrics.
June 2015
Testing for Android Intents Using Espresso
Using espresso-intents for testing Android Activity Intents
How To Get Alerts When a Sidekiq Instance Goes Down
For those of us who use the popular distributed job queueing system Sidekiq, it’s a common problem: a Sidekiq instance containing a pool of workers dies, and the only way you find out about the problem is by checking the Sidekiq dashboard and seeing that you’ve got a ton of jobs backed up and fewer busy workers than expected. Luckily, there’s an easy way to get email alerts when one of your instances goes down, using Dead Man’s Snitch and a little bit of code inspired by the sidekiq\_snitch
gem.
May 2015
How to Pluck Like a Rails Pro
The pluck method is a performant option to query columns from one or more tables. The ability to pass valid SQL directly makes it all the more handy.
Fixing Intermittent Failing Tests
Some tricks to help you fix tests that sometimes fail.
Scheduling Crowd-Sourced Entropy with Webhooks
I love writing gems. Lately, I’ve been particularly interested in tackling the big, important problems in math, like how can a computer generate a truly random number. I took this challenge head-on when I developed the fair_dice_roll gem.
How to Get Your Server to Email You After it Fails
Running routine tasks like a server health check often sends an email every time it returns healthy. Overtime, they’re easy to ignore. But, what you really need to know is when these email stop sending. Using a new Dead Man’s Snitch feature, you can now easily monitor when an email isn’t sent and DMS will alert you.
Welcome Ray Brown
We’re very excited to welcome Ray Brown to the Collective Idea family.
Better Ruby Rounding
Need to round to the nearest 30 minutes or up to the next 250 or some other fun rounding case? Ruby’s build-in round
, floor
, and ceil
won’t help you, but the Rounding gem will.
April 2015
Person on Black and Gray Keyboard by StockTookAPic.com is licensed under Creative Commons Zero
Bootstrap Your App
Insert your app’s bootstrapping into CI to ensure that setting up a new developer is one script invocation.
Streaming Data From Postgresland to Rubyland
I recently gave a talk covering find\_each
, pluck
, and the PostgreSQL Cursor gem for the West Michigan Ruby Users Group.
How to use Sketch's revert feature — it's actually really awesome!
Over the last year, I have moved my entire workflow over to Sketch. The app is very versatile and removes the need for a number of apps that I was previously using simultaneously every day. If you design interfaces or vector graphics for screens, it will change your life.
March 2015
Welcome Laura Mosher
We’re very excited to welcome Laura Mosher to our team!
Optimizing Rails for Memory Usage Part 4: Lazy JSON Generation and Final Thoughts
Code to copy-paste so you can lazily serialize JSON and maybe even stream it to the client, and an argument for why we shouldn’t have to do any of this.
Optimizing Rails for Memory Usage Part 3: Pluck and Database Laziness
Some ways to reduce memory usage as you gather records out of your database into Rubyland.
February 2015
Optimizing Rails for Memory Usage Part 1: Before You Optimize
Part one of a four-part series which will show you how to optimize a memory-heavy Rails API action.
Optimizing Rails for Memory Usage Part 2: Tuning the GC
Changing Ruby’s garbage collection parameters is the least invasive way to optimize your app’s memory usage.
Our 10th Birthday
Collective Idea turns 10 today!
Spring Is Dead to Me
Spring, as described in its README, is a Rails application preloaded. “It speeds up development by keeping your application running in the background so you don’t need to boot it every time you run a test, rake task or migration.” I want to focus on the first assertion in that description…
January 2015
Non-Message Flash in Rails
Flash messages were one of those little features that amazed me when I was first introduced to Rails. Developers often use Rails’ flash to display messages to their users, but messages aren’t the only reason to use flash.
Cucumber exiting with 0 on failure?
Check your at_exit callbacks.
HIPAA Means Turning Off External Services
Healthcare.gov leaks patient data to 3rd parties. Does your Healthcare startup do the same?
Encrypting Secrets with Chef Vault
Tools like Chef and Puppet make configuring servers repeatable and reliable. However, handling the private data, like server passwords and API access keys is still a difficult problem. Today we take a look at one solution available to the Chef community: Chef Vault.
December 2014
Transient Properties of the Realm
Realm is a good alternative to CoreData for your iOS apps. Setting up properties to be stored in the database is as simple as defining them in a model. But what about those properties that you don’t want persisted?
Quickly Test Slow Uploads
How do you test a slow file upload? Force it to be slow.
A Not-So-Bad-Reminder to Blog More
Reminding and motivating your team to write blog posts can be hard. Constantly nagging them won’t help much either. With a slightly more constructive approach, we hope to increase our blog posting to once per week by scheduling months in advance and sending a simple reminder if we get off track using this quick and automated “Recipe.”
November 2014
Let's Simplify Ruby
I want to make Ruby better by making it smaller. Who wants to help?
Teaching Your Database New Tricks
Databases don’t come with complex field types like an image. That doesn’t mean we can’t store them in our database anyway.
String Interpolation: The Bad Parts
String interpolation in Ruby is great. It’s one of those niceties that I really miss whenever I venture into JavaScript land. But watch out! There are some lesser known “features” of Ruby’s string interpolation that can burn you… badly.
Wet Paint: Redesigning Dead Man’s Snitch
Wherein Victor offers reflections on redesigning the app to improve usability and aesthetics.
October 2014
Attending the Grace Hopper Celebration
I attended the Women in Computing - Grace Hopper Celebration (GHC) in Phoenix, Arizona a couple of weeks ago. GHC is an annual conference where women in all stages of their career come together to talk about relevant topics both in computer science and on what being a woman in the technology field is like.
Simple Cocoa Configuration Using Swift Structures
Apple’s introduction of Swift to the Cocoa development toolbox has created a buzz amongst Cocoaheads. The language is flexible and lends itself to new patterns which traditionally Objective-C programmers are excited about. I got excited about a pattern that emerged while working on a new version of the Dead Man’s Snitch iOS app:* using Swift structs to store application configuration information*.
September 2014
Jewels by Peter Richardson is licensed under CC BY 2.0
How we write a Gemfile
Tips on how we like to organize Gemfiles and keep it clean.
August 2014
has_and_belongs_to_many Isn't Dead!
People are under the impression that HABTM relationships are deprecated because of the newer Has Many Through relationship. Both are good, and both have their place, but HABTM is still valid, vibrant, and useful!
Time to Bring Back Fixtures
Fixtures are great tools that have been sadly overlooked for a long time in the Rails world. Lets start using them again.
Why Isn't Ruby Rescuing My Exception?
By default, Ruby only rescues subclasses of StandardError to allow the really bad stuff to halt your program.
July 2014
Best Security Company by Mannedguarding11 is licensed under CC0 1.0 Universal
Recommended Security Setup for AWS
Amazon Web Services runs an every growing percentage of the Internet, which means AWS accounts are more so a target of those-we-will-not-name. This post outlines the recommended minimal setup we at Collective Idea now apply to every Amazon account to ensure sufficient security.
June 2014
Finding MIA Cursor in iTerm
Have you ever been distracted while working in terminal and lost your cursor? Then, once you focus your attention back to your work, had to scan frantically and repeatedly through a mass of text for the small, blinking rectangle? iTerm has a sweet new feature that lets you zero in on the location of your cursor letting you find it quickly and efficiently. Just press Command-/ and your screen fades around your MIA cursor. The longer you hold down the keys, the more drastic the contrast between the fading and the location of your cursor, pinpointing you to its exact location!
May 2014
DNS, ELBs, ANAMEs, and TTLs, Oh My!
We had an issue this morning with Dead Man’s Snitch which led to some surprising issues with ANAME DNS records.
April 2014
Abstract Paper by Anastasia Zhenina is licensed under Creative Commons Zero
On Documentation-Driven Development
I love designing and developing APIs. In building a great API, the design and development processes demand equal attention. The problem is that popular development approaches don’t emphasize the design process. You may be familiar with the concepts of “test-driven development” and “behavior-driven development”, but let’s talk about the lesser-known concept of “documentation-driven development”.
Segmentation faults on Travis CI caused by libxml-ruby
If ruby is segmentation faulting on Travis CI, try updating libxml
March 2014
Regarding Rockstars
A potential client asked us recently: “What makes you rockstars?” The question had us stumped and it took a while for us to realize why. Here’s how we responded:
We’re not rockstars. We’re the roadies.
February 2014
Public Methods != Public API
I love designing and building APIs. Usually those APIs are in the form of REST web services. A lot of care goes into the interface of a web service because it’s how your application is presented to the outside world. But what about the interfaces of your internal code?
Welcome Chris Rittersdorf
We’re very excited to welcome Chris Rittersdorf to Collective Idea!
Selective Restore in MongoDB
MongoDB makes it really easy to selectively restore deleted or lost data from a backup dump without doing a full restore.
False positives on Travis CI with CodeClimate / SimpleCov
The latest version of SimpleCov has a bug that ignores test exit statuses.
Finding Insight Through Humor: Negative Keywords
Understanding what keywords visitors use to find your website will help you optimize your AdWords Campaigns…even if it involves snitching for the DEA.
January 2014
Tuesday Tinkering: Try something new
Last week we held or first, hopefully of many, hardware hacking event dubbed Tuesday Tinkering.
Are your Google Tags Installed Correctly?
Often, people are left unsure if their Google tags have been installed correctly on their website. This simple tool helps troubleshoot installation of tracking codes and tags to see if yours are working correctly, or better yet, to see if you’re being tracked.
Mocking HTML5 API's Using PhantomJS Extensions
Recently one of our projects called for using the browser’s Geolocation API. We were excited about this project. However, we had an immediate concern about how to test a feature that interacts with one of the browser’s built in APIs.
Today in Silly Apps
A couple years ago we built a really simple web app to track data loss now it tracks when you’re sick too. Here’s our silly app of the day.
Welcome Tres Trantham
We’re happy to announce that Tres Trantham has joined the Collective Idea family.
A PostgreSQL Sandbox Using VIM and tmux
!If you’re like me, you’ve let ActiveRecord hold your hand for way too long. And when it comes time to write advanced PostgreSQL queries, you need to experiment in the REPL to find what you’re looking for. Add this trick to your toolbox to make working with the PostgreSQL REPL simpler.
December 2013
The Marriage of Figaro… and Rails
Two years ago and 264,309 downloads ago, I wrote the Figaro gem. I had been using the pattern for some time already and was frustrated that something so simple wasn’t already included in Rails. And now, finally, it is! Well… sort of.
Getting Pushy…
A few months ago, we built an iOS App for Dead Man’s Snitch. The drive behind making it a native application was to take advantage of the Apple Push Notification System. When the App went live to our customers via the App Store it quickly became clear that we were missing notifications sent from Dead Man’s Snitch.
November 2013
Ruby 2 SSL Verification Failed?
Many users are having OpenSSL validation issues with Ruby 2.0 across various platforms. Turns out there are multiple issues at hand, each requiring different fixes.
Background Job Monitoring for Atheists
I’m a Rails developer but I’m not much of an Ops guy. So when it comes to server monitoring, I want a simpler solution than God. God is a “Process Monitoring Framework in Ruby” and while I know it’s awesome, sometimes it’s not quick and dirty enough for my liking.
Demographics & Interest Reports not working in Google Analytics? Here’s what you need to know.
If you’re having trouble enabling the Demographics & Interest Reports in Google Analytics, here’s what you need to know. Instructions on enabling the reports are also covered.
Welcome Spencer Toth
Today we’re thrilled to announce the addition of Spencer Toth to the Collective Idea team. Spencer is joining us to take our marketing and strategy to new levels.
Factory Girl without Active Record
Factory Girl has been around for more than five years now and has become the standard for building and saving valid model data for your test suite. Out of the box, Factory Girl plays nicely with the major ORMs: Active Record, Mongoid, DataMapper and MongoMapper. But what about those pesky models that fall outside of your ORM? Fear not… Factory Girl’s got you covered there too!
October 2013
Why we gave a cron job monitor a personality.
Architecting a brand for Dead Man’s Snitch.
Debugging Firefox Failures on Travis
When strange failures are plaguing Firefox during Travis CI test runs, get a hold of Travis Support, they’ll help you out!
Using NSData for your network messages
One of the hurdles you have to overcome when building an app like Downside is how to handle network messages. Apple provides several different ways of adding networking to your apps including GameKit and the new Multipeer Connectivity framework in iOS 7. Each of them require you either send or receive an NSData blob.
August 2013
Install Flash for Travis CI Builds
Installing flash plugin on Travis CI is simple and quick. Here’s how.
Welcome Victor Sirotek
We’re excited to welcome Victor Sirotek to our team!
July 2013
Collective Idea Acquires Dead Man's Snitch
Today we’re very excited to announce that we’ve made a new product acquisition: Dead Man’s Snitch.
Travis CI with Rails 2.3.18 and Ruby 1.9.3
Ruby 1.9.3 on Travis CI now includes a RubyGems version greater than 2.0. This breaks Rails 2. Here’s how to fix it.
June 2013
Building Awesome Rails APIs: Part 1
After teaching an Advanced Rails class last week, I realized that we use a lot of patterns internally to build great APIs in Rails that many people don’t know about. We didn’t invent most of them, but we use them with great success, so we need to start sharing.
Rack::Cache, tmp/cache, and running out of inodes
Rack::Cache + custom user content + multiple releases + time == dead servers.
May 2013
Desktop Source Code is licensed under Creative Commons Zero
Batch Number Increment in Vim
How to use Vim’s sub-replace-expression command to batch increment a set of numbers.
Turning Off
Now is the time to disconnect. Not forever, not always, but we need to disconnect so we can reconnect with the world.
April 2013
Meet Downside, our First iPhone Game!
I’m extremely excited to introduce Downside, our first foray into building a game for iOS.
February 2013
Conference Season: 2013
We’re gearing up for Conference Season. Want to see us in the flesh? Avoid us? Here’s the start of our schedule so you can plan accordingly.
Becoming a Rubyist
I joined Collective Idea six months ago. In that time, I’ve had the chance to throw myself into a new language. Just like learning a new spoken language, learning a new programming language means learning a new way of thinking. Here are some of my reflections on becoming a Rubyist.
January 2013
Chrome Profile Settings and Capybara 1.1 Stable
Custom profile settings for Chrome used with Capybara 1.1 stable seem to be getting ignored. Here’s my quick workaround.
Long Lost Allocation
There’s a great little method in Ruby that you might not be familiar with. It’s used all the time but it’s hardly ever called directly. The method is Class#allocate.
Reverse Search with Elasticsearch
Elasticsearch has an amazing feature called Percolation, which allowed us to save the complicated searches of the Group Portfolio into an index, then when a new project is added, we can ‘search the searches’ to return the Group Portfolio ID.
Running HAProxy behind Amazon's ELB
You can run HAProxy behind Amazon’s ELB for increased control over traffic to your web servers. The following tweaks will help with stable, sustainable performance in such a setup.
December 2012
Inter-Service Authentication with SSL
At Collective Idea, we love building web services. Oftentimes we also build the client applications that consume those services.
One of the major challenges with a service-oriented architecture is authenticating communication between the client and the service as well as between services.
So We Bought a Printer
After doing a bit of boring research, we bought a printer. Here’s hoping this helps someone in the same boat!
Desks 2.0
At Collective Idea, we’re hard at work moving into a bigger, new and improved office space. We have big plans for the space, including refinished hardwood floors, Flor carpet, Nest thermostats and more. But before all the bells and whistles, we need to be able to… work.
Building Office 2.0
A little peek behind the scenes about how we built out our new office.
Office 2.0
We’ve officially move to our new office, and have lots to share on the process.
Playing with Go: Embarrassingly Parallel Scripts
We can write parallel execution scripts in any language, but some work much better than others. Google’s Go makes embarrassingly parallel tasks almost trivial to write.
November 2012
Down Boy: How to easily throttle requests to an API using Redis
Easy way to make sure all of your workers are smart about staying under an API threshold and daily limits.
Running a high volume Rails app on Heroku for free
In 3 easy steps you can setup a rails app on Heroku that can easily handle 200 requests per second and 100 concurrent connections, for free.
Fully automated, almost free backups
One of our clients was recently burned by their hosting company not providing the backups they expected. As we helped transition them to a new system, I focused on setting up solid backups and am very pleased with the results: Fully automated, offsite backups for under $2/month.
Tests Still Slow? Might be bcrypt!
How Google’s perftools led me to add a single line of code that cut test suite run times in half.
You Still Have to Test on the Server
It doesn’t matter how good your test suite is, you have to run through on your server to know it works.
October 2012
Install your own PhantomJS on Travis CI
Poltergeist requires at least PhantomJS 1.7.0. Travis CI provides 1.6.1. Here’s how to bump your version of PhantomJS.
Fun with Unicode Math in Ruby √
We had way too much fun with Ruby and Unicode, and the result is that you can now join in the fun with our unicode_math gem.
A Different Approach to Gem Development
Not too long ago, I had the idea to write a gem (as I often do) to wrap elasticsearch with some smart conventions for Active Model. First step: name the gem.
Keep your AWS environments separate with IAM users and groups.
Amazon’s IAM service lets you restrict and secure access to your AWS data and services to individual users or groups allowing you to have multiple environments (staging, production, etc) under the same AWS account without worry.
September 2012
Pick a Side
I noticed a strange JavaScript loading fallback today. Often simplicity can trump having fallbacks.
Welcome Jonathan Pichot
Today we welcome Jonathan Pichot to the team, and we’re very excited to do so!
August 2012
Fighting off a DDoS
Harmony has been fighting a DDoS attack for over a month, and we’re sharing a bit of how we fixed it.
Welcome Eric Milford
Welcome Eric Milford to the team.
July 2012
The @Font-Face Firefox Fiasco
Firefox doesn’t allow references to web fonts hosted on another domain. A quick workaround is to Base64 encode your truetype fonts for optimal rendering.
June 2012
Where's Your Business Logic?
Can you point to a single place in your application and say “here is where we implement our business rules and use cases”, or are your use cases spread out across controllers, models, libs and elsewhere? Do you have fat models, fat controllers, and/or a massive lib directory? Is adding new features quick and easy or painful and time consuming? I have a solution to your pain.
Benchmarking Rails on the Retina MacBook Pro
How much of a speed boost is the new Retina MacBook Pro’s Ivy Bridge i7? A lot–if you’re coming from a Core 2 Duo!
The Password Rant
LinkedIn screwed up, but you can be smarter. When you store a password, you’re holding a key to untold secrets. The goal is to keep that key safe from everyone, even you.
Getting Artistic w/ RubyMotion
Sure, making apps that communicate with a server somewhere is interesting, but what about your creative side?
Delete Your Email Rules
Today I removed all of my rules in Mail.app. It is easier than you think, you just have to get less email.
The Shape of Complexity
When working alone and tasked to solve a problem or implement a feature, I seem to follow a similar pattern of clarity, leading to confusion and frustration, and back to clarity.
May 2012
Welcome Brian Hempel
Welcome Brian Hempel (officially) to the team.
Welcome Jason Roelofs
Jason Roelofs joins the Collective Idea team today and we couldn’t be happier.
Using RubyMotion with Parse.com
One eventuality in the mobile development space is that you will, at some point, find yourself in need of a backend service for your app. In this blog post, I go over how to use Parse.com as your backend service.
5 Awesome Things About RubyMotion
Last week HipByte released RubyMotion and although I was originally skeptical, I’ve grown to really like it.
April 2012
Collective Idea acquires Harmony from GitHub
We’re very excited to announce that Collective Idea has acquired Harmony from GitHub. Harmony is an amazing app for building websites, and we’re very excited to help guide it to continued greatness.
Welcome David Genord II
Welcome David to the Collective Idea team!
Walken on Rails
Our new screencast series features narration by Christopher Walken.
March 2012
Your identity ≠ Your code
As developers, we like to solve problems and get a kick out of that feeling that seemingly comes out of nowhere: “Yes! I solved it. I am all that is awesome!”. While we all want to improve, it is difficult not to equate “this could be better” with “you should have been smarter”.
February 2012
Finish Weekend in Ann Arbor
We’re bringing Finish Weekend to Ann Arbor!
CoffeeScript Routing, part deux
Adding named parameters to the CoffeeScript router
January 2012
Testing File Downloads with Capybara and ChromeDriver
At Collective Idea, we ♥ Cucumber, Capybara and ChromeDriver… and alliteration. But we recently encountered an issue with a very Ajaxy Rails app where we need to test a file download and assert its content.
Standalone Javascript Routing
A recent project has us using spine.js as well as a few other JavaScript libraries. Though spine.js comes with its own routing, it conflicts with pjax. The solution was to roll our own.
Slow it Down
Most of the time, you test your apps on a fast connection, especially when working on a local machine. Most of your clients/visitors/customers aren’t so lucky, but how do you simulate their connection speed?
If you have installed Xcode on Lion, you have access to a very cool tool called Network Link Conditioner.
Refactored for Efficiency
Refactoring your code is for more then keeping it DRY. It also gives you a chance to make it more efficient.
Give pry a Try
One of the things holding us back from developing on Ruby 1.9.3 has been ruby-debug. So after many people suggested we try it, we gave pry a shot. I don’t know why we didn’t before; it is quick, easy, and allows a wide range of Ruby versions.
Welcome Ryan Glover
We’re thrilled to welcome Ryan Glover to the team.
Capybara, Cucumber and How the Cookie Crumbles
I use Capybara and Cucumber to test my Rails apps, but cookie management can often be difficult… until now.
The Big Three-Oh
Delayed Job 3.0 was released over the holidays. Here’s a rundown of what’s new and what’s changed.
December 2011
Type it Faster!
Dear Everyone, update your keyboard settings so I don’t see you taking forever to delete a few characters.
November 2011
Likes vs. Favorites
I like lots of things, but only have a few favorites.
I am 9 programmer-years old
I am about 9 years old in “Programmer Years”. Like dog-years, the conversion from human-years to programmer-years is about 7x. Thinking about programmer development this way helps offer some lessons on growing into a fully mature developer.
Changing Your Stripes
Using Stripe to take credit cards online.
October 2011
Install Ruby 1.9.3 with libyaml on CentOS
Get Ruby 1.9.3-p0 installed with libyaml on CentOS to avoid warnings.
Thinking about Ruby's Symbols
Symbols in Ruby are confusing to new users.
Starting is Easy. Finishing is Hard.
Finish something at Finish Weekend!
What's "new" in Ruby
A quick introduction to Class.allocate, a class method you can use to allocate space for a new object and skip initialization of that object.
September 2011
Use Chrome with Cucumber & Capybara
Swapping out Firefox for Chrome is easier than you think!
ASCII Logo Guidelines
On the proper use of [i].
HSL color selector using HTML5 and CSS
Here’s a fun little color selector input that you can use in Safari, Chrome and Opera without an extra javascript, or fancy libraries. It looks pretty nice too.
If You Can't Tie A Knot, Tie A Lot
In which I use a phrase from a Sailor as the basis for this blog post on over-programming.
Welcome Tim Bugai
Welcome Tim to the Collective Idea team.
August 2011
Double Clicking in Capybara
Need to define a capybara step for double clicking an element? Here’s what we came up with.
Calendar About Nothing Invades My Shell
A quick introduction to a weekend project: seinfeld.sh. Inspired by my terminal outputting the last login date, seinfeld.sh shows the date of your last open source contribution as tracked by Calendar About Nothing.
Test Multiple Rubies by Combining Bundler and RVM
I have read several opinions that are either pro-Bundler or pro-RVM, but despite the current debate they do not have to be mutually exclusive.
Leading the Open Source Ruby Community
A look into leadership and how it ties in to the open source community. It’s more than superiority; it is social influence and deeply impacts how we communicate and work on projects.
Simultaneous Capybara Sessions in Cucumber
There’s something very satisfying about watching your Cucumber test suite run (and pass), especially when the tests are running in your browser. I can’t help but think, “Man, I’m glad I don’t have to do all of this myself.” That’s especially true when your testing requires multiple sessions. The old me would fire up a couple different browsers and get to work. But that was the old me.
July 2011
Rails 3.1 Hackfest this Saturday
There’s a Rails Hackfest this weekend and we are opening our doors to Rails devs who want to participate.
Speaking and Teaching at Lonestar Ruby Conf
I’m going to be speaking and teaching at Lonestar RubyConf this year. Look us up if you’re attending.
The Search for Speedier Javascript Scenarios
Try out capybara-webkit for faster javascript scenarios.
Test Your API with Cucumber and json_spec
At Collective Idea, we do a lot of work with RESTful JSON APIs. They can be a joy to build but a pain to test. We’re currently working on a project that’s all API all the time, so we developed some reusable Cucumber steps for testing. Now, we’ve abstracted all that goodness out into its own gem… json_spec.
June 2011
Get Your Conditions in Order
It’s programming 101 but it’s easy to miss in practice. If a condition has multiple expressions, some may never be evaluated. Use that fact to your advantage.
Prepping your Gemfile for Rubinius
Rubinius 2.0 is on it’s way and it’s shaping up to be a serious contender. Adding support for Rubinius to your gem should be pretty painless.
Here at [i] it’s common for us to depend on support utilities like ruby-debug or perftools. Fortunately Rubinius comes with a very solid debugger and profiler. The best solution I’ve found is to use Bundler’s :platform rules to limit what libraries get loaded.
The Billy Baldwin of Conditional Assignment
For those of you who don’t know, Billy Baldwin is the lesser-known and generally-less-useful little brother of famed actor Alec Baldwin.
In the world of Ruby’s conditional assignment operators, ||=
is Alec Baldwin; charming and versatile. But not many people know about ||=
’s little brother… the &&=
operator.
Automatic Login Links
Scary, I know, but hear me out. Implemented correctly, an automatic login link can be just the ticket to appease those pesky, forgetful, real-world users.
Reusable Cucumber Steps
Mike Swieton recently posted Never say “Click” advocating the use of custom steps over browser-centric ones. I firmly disagree with with the consequences of that strategy.
“You don’t know the power of the Dark Side” …er… Maybe ya do?
In very few types of consulting do you wield such power and influence over the success or failure of the clients objectives as you do in software development. Intensifying the your power, is that fact that often the client is oblivious to that influence. This is a simple reminder how not to be seduced by the dark side.
More User-centric Routes: Rails 2
Writing routes that are conditional upon whether a user is logged in is easy with Rails 3 but if you find yourself (as many of us do) stuck with a Rails 2 app, here’s how to achieve the same fancy routes without the latest Rails.
Be a Better Storyteller
It’s no secret that we love user stories. We’re behavior driven and focus our daily tasks around user actionable stories. But near the launch of a project, or the end of a milestone, things can get hairy. Unmaintainable even. And workflow from the team can suffer, especially if there’s anyone working remotely.
May 2011
User-centric Routing in Rails 3
Have you ever noticed that the GitHub homepage is different once you log in? I’m not talking about little changes here and there. It’s a completely different page. I have no idea how GitHub does this but I’ll venture a guess and demonstrate how to achieve the same effect.
Testing with Sunspot and Cucumber
Testing with sunspot with cucumber can be tricky since you need to manage the solr process separately. This post introduces a new gem “sunspot_test” and how to easily use it.
Welcome Jason Carpenter
Meet Jason, a smart mechanical engineer turned programmer.
On Stand-Up Desks
We have been using stand-up desks almost exclusively for over a year. Some thoughts and tips.
Quick Win: JavaScript async
Do you know the difference between defer and async in your script tags? You will very soon.
April 2011
Language Matters
Last week the Ruby and Rails twitterverse had an eruption of debate on the choice of testing frameworks. My thoughts come down to this: language matters.
Bundler makes contributing to ruby gems easier
After using Bundler for the past few months, I love it. It turns managing project dependencies and deployment into a piece of cake. However after coming across a particular dependency declaration, something clicked in my head that made me like it even more.
March 2011
Using Solr and Sunspot to Search Within Words
In my previous post I mentioned that out of the box Solr breaks up the search indexes on whitespace. This post will outline how you can configure Solr to search within words.
Tweet later with Delayed Job
Schedule a tweet for the future using Delayed Job and the Twitter gem. Plus, some goodies on how to test it with Cucumber!
Off to SXSW 2011
A bunch of our team will be at SXSW as usual. Find us and say hi!
Exploring Solr and Sunspot
We have experienced a lot of success using Solr and Sunspot for full text searching on our Rails projects. And like our Cucumber series, we’re going to start a series of related posts just on Sunspot/Solr.
Geocoding with Graticule and SimpleGeo
SimpleGeo was added as a geocoder to Graticule in early January. Here’s a quick example on how to make use of the service.
February 2011
The Michigan Lean Startup Conference
The Michigan Lean Startup Conference is an event designed to unite those interested in what it takes to succeed in building a lean startup taking place Thursday, May 19, 2011 8:00 AM — 5:00 PM
When Refactoring Goes Bad
Refactoring is an important part of any project, but what happens when it doesn’t work?
HOW TO: SSH Aliases
Use SSH a lot? This is a great tip to reduce unnecessary keystrokes and notes
Welcome Zach Moazeni
Zach Moazeni joins the Collective Idea team.
January 2011
HOW TO: Setup a new local & remote Git Branch
HOW TO: Setup a new local & remote Git Branch
Clever Custom Datatypes with MongoMapper
A whole world of rich objects is within your reach with MongoDB.
December 2010
Welcome Steve Richert
Welcome Steve to the Collective Idea team.
The Next Step
Every relationship has a “next step”.
2010: The Open Source Tools that Made it Great
My list of open source tools that made a big impact on our work this year.
Spreedly Integration Testing with Cucumber
Integrating Spreedly into an application is straightforward. Testing it with Cucumber, however, was a little less so. Here’s how we did it.
November 2010
SSL with Rails
Lots of people have been wondering about SSL after seeing Firesheep in action. Here’s how to get started with Rails.
Stop writing imaginary code.
One of the hardest aspects of development for me has always been anticipating the code I’m going to need to write to solve a problem. BDD saves me from the hassle.
Practical Cucumber: Stakeholders
Stakeholders may or may not care about cucumber scenarios, but there is still value in having developers write them.
The Cheapest MBA You Can Get
Skip the theory. Start doing something. Be the case study.
Validate the Idea
Evaluate and validate your idea or side-project before you start coding.
Quick Win: Zendesk
Now, I don’t know anything about ZenDesk, but I know a JS snippet when I see it. And I also know I can make it better. Here’s my quick win of the day:
October 2010
Not Getting Things Done
We all have different issues that keep us from trusting todo apps. What about you?
September 2010
Welcome Chris Gaffney
Meet Chris, the newest member of our team.
gemfiles and branches
Specify a branch for a git repository in your gemfile.
Practical Cucumber: Organization
Nobody knows how to organize cucumber features and steps. Every project has it’s own conventions–that is, if it has conventions at all. Here is a pattern that works for us.
Practical Cucumber: Factory Girl steps
Although they’ve been around for a while, very few people know that factory_girl comes with some really useful cucumber steps.
Practical Cucumber: Scenario-specific steps
Cucumber steps are meant to be reused. Keep them generic so you don’t have to work too hard.
Practical Cucumber
We love Cucumber but often see it poorly used and misunderstood. We are beginning a blog series about “Practical Cucumber” to give you tips and tricks and keep you out of a pickle.
They Stole My Idea!
EarthAid.net stole my idea! So why am I happy instead of mad? Because ideas are worthless.
Our Notes on Remote Pairing
Relevance posted some notes on remote pair programming so here are ours too.
Introducing fon.do
fon.do is a collaborative to-do list for work, home and life. Delegate tasks. Receive tasks. Complete tasks. Let’s do this.
August 2010
JSON Microformat Converter
Turning microformats formatted as JSON into .vcf and .ics files for a Chrome extension.
Heroku-ing with multiple personalities
I recently transitioned a client site from my own account on Heroku to their account – which means to manage that site effectively, I need to be able to use Heroku with multiple accounts. Here’s how I did it.
Happy Git Commits
Being happy makes us more productive. Add some happiness to your git commits.
Clicking any element with Cucumber and Capybara
We’ve been testing a lot of Javascript heavy apps these days with Cucumber and Capybara, and sometimes you just need to click on something that isn’t a button or a link.
July 2010
Software never stays still
Software is an evolving, living being.
Much ado about nothing
What do Google’s AppInventor, JavaBeans, and Myspace all have in common? They’re all misguided attempts at putting development in the hands of non-developers.
Good projects in need of loving maintainer
We can’t give each of our projects all the love they deserve, so it’s time to let some go.
Houston, we have a problem.
Think the plethora of open Rails jobs is good for Rails developers? Think again.
Post your weekly top 5 Last.fm artists to Campfire
A simple Ruby script to post your top 5 weekly artists from Last.fm to a Campfire room.
June 2010
Living in the Moment
Are sports black & white, or is there room for human fallibility?
Stop lying.
“I don’t have time to test” seems to be somewhat of a recurring theme in hurried projects. Stop lying to yourself—and your clients.
Reflections on MongoDB
We have used MongoDB on several production and play projects over the last year. Here’s what we think about it.
sitemap.xml in Harmony
We added a Google Sitemap to our Harmony-powered site. Here’s how to do it.
How to choose a Rails contractor
How do you know you’re hiring a good Rails developer?
Meet Keith Gaddis
The latest team member at Collective Idea.
Clever Background Changes
Our backgrounds change, but they’re not random. We’re more clever than that. Let me explain…
On an Agile Space
Our workspace helps us work, and for the first time we have one of our own.
Quarter-inch Holes
Theodore Levitt, Economist and Professor at Harvard Business School, once told his M.B.A. students, “People don’t want to buy a quarter-inch drill. They want a quarter-inch hole.”
Our Collective Ideas
All of us at Collective Idea have shared our ideas separately over the years, but never with any form of consistency. We feel that it is time to be intentional about sharing our ideas as a company.