A rethinking of a 2015 post to keep certificates current. Now using cron and Dead Man’s Snitch.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!
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!
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.
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.
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 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.
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.
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 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 is the backbone of UIView animation. Ever wanted to animate a stroke, shadow, 3d transformation, or other CALayer backed properties? CABasicAnimation is your answer.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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!
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.
Learn to use Model-View-Presenter to define and test application behavior independent of the Android framework.
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.
360AnDev is an amazing Android conference that takes place in beautiful Denver, CO. Here’s a collection of highlights of the 2017 event.
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.
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.
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.
As a conference organizer, the experience can be a bit different. Find out why in this post.
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.
We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we learn about the power of Kotlin classes.
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.
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.
Learn where to start to create a simple virtual reality image and how to learn more
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.
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.
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.
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.
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.
Conferences can be overwhelming. Use these tips to make the most of your conference experience.
Tips and tricks learned along the way as I learn how to build Arduino projects inside my favorite development tool, Vim.
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.
How to use Tmux and Tmuxinator to automate the creation of complex environments such as service oriented architectures.
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!
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.
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!
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.
Looking to submit a conference proposal? These five tips will help you craft better proposals that will impress the reviewers in the future.
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.
One of the Collective Idea designers takes to the internet to assess and rework whatever he finds on the other side.
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.
Conduct collaborative, interactive meetings with people all over the globe. Trello is good for more than just software development and project planning.
We’re happy to add another designer to the Collective Idea team!
Learn how to use Test-Driven Development to interact with a remote JSON API using Retrofit, Moshi, and RxJava
It’s true… we hired another Hope College graduate.
We’ve added a marketing person to our team!
We’re very excited to belatedly welcome Troy Spruit to the Collective Idea family.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
When attending RubyConf 2016, I learned more than just additional gems about Ruby. I learned about continuing education and why it matters.
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.
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.
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?”
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.
Figuring out why your feature tests are failing can be difficult, especially when setting up the first few tests in the codebase.
This past weekend we shared our coding knowledge with some eager 7th and 8th-grade girls ready to create their own websites with BitCampGR.
We are very excited to be hosting our very first BitCamp GR event this weekend in conjunction with Hope College Computer Science Department.
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.
You don’t need an
sleep() is fickle. Make Espresso wait for your observables running on background schedulers with this one cool trick!
While working on a project, I discovered a major security vulnerability that affects all stable versions of Bundler.
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.
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.
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.
Starting today, Heroku has a new free SSL offering. Use it with Let’s Encrypt for a fully free SSL system.
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!?
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.
I’ve been using and teaching Ruby for many years now, but I recently had an epiphany about private methods.
Have you heard the buzz about Elixir? Look no further to see what all the commotion is about!
How to use webhooks and Dead Man’s Snitch to hold yourself accountable for getting things done.
Stop saying sorry all the time. Especially when there is no reason for it. Just say what you need to say.
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?
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.
We’re very excited to welcome Victoria Gonda to the Collective Idea family.
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.
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.
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.
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.
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.
Good practice tips for those who are new to programming and have limited time to complete ideas.
This past year we expanded our office space and our team. We held a Grand Opening party to celebrate.
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.
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.
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.
Out of all the places in the world we can set up shop to do software development, we’re in Holland, Michigan and thriving.
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.
A 3D printer can do more than just create fun objects. They can be programmed to solve every day problems.
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.
I want to use the new hotness, but Internet Explorer/Edge doesn’t support it yet.
“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
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 at BitCamp GR, by Software GR, is an amazing day-long event to teach young girls software development.
Our space is a bit different than many offices, but is a reflection of how we work.
There are a number of things an employer can do to create and foster a happy and healthy workforce.
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 is changing their prices for organizations. Here’s why you should stop worrying.
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.
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!
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.
Most of the instructions I found for combining
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.
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.
The TSA paid $1.4 million for a Randomizer app that chooses left or right We can build it better.
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.
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.
There’s a better way to implement business logic, and track events in Rails.
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.
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.
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.
You can embed readable SVGs inside of CSS. Really.
Updated with better Firefox support.
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.
How to create a free website monitor that alerts you when you forget to visit any website.
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.
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.
In which one of the Ars guys gets back into coding, and joins a great software team.
We’re launching a fleet of bicycles from our office!
How can our test suite tell us when a certificate expires? We’ll show you.
We’re excited to welcome Dana Jones to the Collective Idea team!
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.
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.
Editing an existing commit in history with an interactive rebase, reset, and amend.
We need to make getting up and running with our Rails apps easier. Here’s my attempt.
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.
Using espresso-intents for testing Android Activity Intents
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
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.
Some tricks to help you fix tests that sometimes fail.
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.
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.
We’re very excited to welcome Ray Brown to the Collective Idea family.
Need to round to the nearest 30 minutes or up to the next 250 or some other fun rounding case? Ruby’s build-in
ceil won’t help you, but the Rounding gem will.
Insert your app’s bootstrapping into CI to ensure that setting up a new developer is one script invocation.
I recently gave a talk covering
pluck, and the PostgreSQL Cursor gem for the West Michigan Ruby Users Group.
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.
We’re very excited to welcome Laura Mosher to our team!
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.
Some ways to reduce memory usage as you gather records out of your database into Rubyland.
Part one of a four-part series which will show you how to optimize a memory-heavy Rails API action.
Changing Ruby’s garbage collection parameters is the least invasive way to optimize your app’s memory usage.
Collective Idea turns 10 today!
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…
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.
Check your at_exit callbacks.
Healthcare.gov leaks patient data to 3rd parties. Does your Healthcare startup do the same?
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.
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?
How do you test a slow file upload? Force it to be slow.
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.”
I want to make Ruby better by making it smaller. Who wants to help?
Databases don’t come with complex field types like an image. That doesn’t mean we can’t store them in our database anyway.
Wherein Victor offers reflections on redesigning the app to improve usability and aesthetics.
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.
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*.
Tips on how we like to organize Gemfiles and keep it clean.
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!
Fixtures are great tools that have been sadly overlooked for a long time in the Rails world. Lets start using them again.
By default, Ruby only rescues subclasses of StandardError to allow the really bad stuff to halt your program.
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.
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!
We had an issue this morning with Dead Man’s Snitch which led to some surprising issues with ANAME DNS records.
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”.
If ruby is segmentation faulting on Travis CI, try updating libxml
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.
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?
We’re very excited to welcome Chris Rittersdorf to Collective Idea!
MongoDB makes it really easy to selectively restore deleted or lost data from a backup dump without doing a full restore.
The latest version of SimpleCov has a bug that ignores test exit statuses.
Understanding what keywords visitors use to find your website will help you optimize your AdWords Campaigns…even if it involves snitching for the DEA.
Last week we held or first, hopefully of many, hardware hacking event dubbed Tuesday Tinkering.
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.
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.
We’re happy to announce that Tres Trantham has joined the Collective Idea family.
!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.
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.
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.
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.
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.
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.
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 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!
Architecting a brand for Dead Man’s Snitch.
When strange failures are plaguing Firefox during Travis CI test runs, get a hold of Travis Support, they’ll help you out!
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.
Installing flash plugin on Travis CI is simple and quick. Here’s how.
We’re excited to welcome Victor Sirotek to our team!
Today we’re very excited to announce that we’ve made a new product acquisition: Dead Man’s Snitch.
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.
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 + custom user content + multiple releases + time == dead servers.
How to use Vim’s sub-replace-expression command to batch increment a set of numbers.
Now is the time to disconnect. Not forever, not always, but we need to disconnect so we can reconnect with the world.
I’m extremely excited to introduce Downside, our first foray into building a game for iOS.
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.
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.
Custom profile settings for Chrome used with Capybara 1.1 stable seem to be getting ignored. Here’s my quick workaround.
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.
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.
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.
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.
After doing a bit of boring research, we bought a printer. Here’s hoping this helps someone in the same boat!
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.
A little peek behind the scenes about how we built out our new office.
We’ve officially move to our new office, and have lots to share on the process.
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.
Easy way to make sure all of your workers are smart about staying under an API threshold and daily limits.
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.
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.
How Google’s perftools led me to add a single line of code that cut test suite run times in half.
It doesn’t matter how good your test suite is, you have to run through on your server to know it works.
Poltergeist requires at least PhantomJS 1.7.0. Travis CI provides 1.6.1. Here’s how to bump your version of PhantomJS.
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.
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.
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.
Today we welcome Jonathan Pichot to the team, and we’re very excited to do so!
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 to the team.
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.
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.
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!
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.
Sure, making apps that communicate with a server somewhere is interesting, but what about your creative side?
Today I removed all of my rules in Mail.app. It is easier than you think, you just have to get less email.
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.
Welcome Brian Hempel (officially) to the team.
Jason Roelofs joins the Collective Idea team today and we couldn’t be happier.
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.
Last week HipByte released RubyMotion and although I was originally skeptical, I’ve grown to really like it.
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 to the Collective Idea team!
Our new screencast series features narration by Christopher Walken.
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”.
We’re bringing Finish Weekend to Ann Arbor!
Adding named parameters to the CoffeeScript router
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.
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.
Refactoring your code is for more then keeping it DRY. It also gives you a chance to make it more efficient.
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.
We’re thrilled to welcome Ryan Glover to the team.
Delayed Job 3.0 was released over the holidays. Here’s a rundown of what’s new and what’s changed.
Dear Everyone, update your keyboard settings so I don’t see you taking forever to delete a few characters.
I like lots of things, but only have a few favorites.
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.
Using Stripe to take credit cards online.
Get Ruby 1.9.3-p0 installed with libyaml on CentOS to avoid warnings.
Symbols in Ruby are confusing to new users.
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.
Swapping out Firefox for Chrome is easier than you think!
On the proper use of [i].
In which I use a phrase from a Sailor as the basis for this blog post on over-programming.
Welcome Tim to the Collective Idea team.
Need to define a capybara step for double clicking an element? Here’s what we came up with.
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.
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.
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.
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.
There’s a Rails Hackfest this weekend and we are opening our doors to Rails devs who want to participate.
I’m going to be speaking and teaching at Lonestar RubyConf this year. Look us up if you’re attending.
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.
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.
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.
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
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.
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.
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.
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.
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 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.
Meet Jason, a smart mechanical engineer turned programmer.
We have been using stand-up desks almost exclusively for over a year. Some thoughts and tips.
Do you know the difference between defer and async in your script tags? You will very soon.
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.
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.
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.
Schedule a tweet for the future using Delayed Job and the Twitter gem. Plus, some goodies on how to test it with Cucumber!
A bunch of our team will be at SXSW as usual. Find us and say hi!
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
Refactoring is an important part of any project, but what happens when it doesn’t work?
Use SSH a lot? This is a great tip to reduce unnecessary keystrokes and notes
Zach Moazeni joins the Collective Idea team.
HOW TO: Setup a new local & remote Git Branch
A whole world of rich objects is within your reach with MongoDB.
Welcome Steve to the Collective Idea team.
Every relationship has a “next step”.
My list of open source tools that made a big impact on our work this year.
Integrating Spreedly into an application is straightforward. Testing it with Cucumber, however, was a little less so. Here’s how we did it.
Lots of people have been wondering about SSL after seeing Firesheep in action. Here’s how to get started with Rails.
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.
Stakeholders may or may not care about cucumber scenarios, but there is still value in having developers write them.
Skip the theory. Start doing something. Be the case study.
Evaluate and validate your idea or side-project before you start coding.
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:
We all have different issues that keep us from trusting todo apps. What about you?
Meet Chris, the newest member of our team.
Specify a branch for a git repository in your gemfile.
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.
Although they’ve been around for a while, very few people know that factory_girl comes with some really useful cucumber steps.
Cucumber steps are meant to be reused. Keep them generic so you don’t have to work too hard.
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.
EarthAid.net stole my idea! So why am I happy instead of mad? Because ideas are worthless.
Relevance posted some notes on remote pair programming so here are ours too.
fon.do is a collaborative to-do list for work, home and life. Delegate tasks. Receive tasks. Complete tasks. Let’s do this.
Turning microformats formatted as JSON into .vcf and .ics files for a Chrome extension.
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.
Being happy makes us more productive. Add some happiness to your git commits.
Software is an evolving, living being.
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.
We can’t give each of our projects all the love they deserve, so it’s time to let some go.
Think the plethora of open Rails jobs is good for Rails developers? Think again.
A simple Ruby script to post your top 5 weekly artists from Last.fm to a Campfire room.
Are sports black & white, or is there room for human fallibility?
“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.
We have used MongoDB on several production and play projects over the last year. Here’s what we think about it.
We added a Google Sitemap to our Harmony-powered site. Here’s how to do it.
How do you know you’re hiring a good Rails developer?
The latest team member at Collective Idea.
Our backgrounds change, but they’re not random. We’re more clever than that. Let me explain…
Our workspace helps us work, and for the first time we have one of our own.
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.”