RSSAmplifier

Blog

arches.io

Recent content on arches.io

arches.ioRSS feed ↗34 posts

Latest posts

Manager's Guide: Setting Meaningful Employee Goals

A deep look into how a CTO uses feedback and goals to create the structure necessary for employee growth.

Manager's Guide: Mastering Feedback Communication

Through years of trial and error giving feedback, I finally uncovered the principles that allow me to both fulfill my role and feel supportive of my employees.

Manager's Guide: How To Hire Web Developers

You can and you will successfully hire a great engineer and emerge a hero! It all starts with one little secret 😉

Time Travel - The True Power of Developers

The tools we use both limit and advance our thinking. When we accurately anticipate the future, our progress accelerates because each step is built on top of a previous enabling idea instead of starting from scratch each time.

Abstraction Is Art - Why All Programmers Are Creatives

Art is powerful because it connects us with our deepest selves, and through the details we choose to include or omit, they have a point of view. Abstractions similarly afford us limitless opportunity to explore, build, learn, and communicate.

Should I Learn to Code?

Coding is fun! But learning to code is a significant investment of time and maybe money. Naturally, you want to know what you’re going to get out of it.

Creating Heroku Review Apps

I’ve been setting up Review Apps on Heroku to streamline our product process. Review apps let you automatically spin up new app intance for every github pull request, creating isolated testing environments for each feature. Pretty neat! …in theory. In practice I hit some hurdles. For example, our app relies on shared third party resources and a large postgres data set. In this post…

React vs Angular 2

A practical comparison of React and Angular 2, as we select a front-end framework for the Ascent app. Why A Front-End Framework? Our javascript is well-organized so far, but consists only of jQuery and plain javascript. This works great for small one-off scripts, but makes it difficult to create larger more complex applications. We have some intensive front-end projects coming up that will require…

Hire Literally Anyone

The Blind Leading The Blind I have a number of recent example of people starting tech careers 5 years into a different career. They’re already SO strong on the non-code aspects of programming - partly I’m sure because of their personalities but also because they’ve had some time to figure out how to be an adult with a job. Problem solving, teamwork, self-teaching, communication,…

Heroku CLI error

I randomly started getting this heroku error today: ~$ heroku --version ERROR: runtime error: invalid memory address or nil pointer dereference ! error getting commands pid 1923 exit 1 It was happening for every heroku command; heroku login, heroku releases, heroku run console, heroku logs. Doing a full uninstall and reinstall of the heroku toolbelt fixed the problem for me.

Three Ways To Set Useful Goals

“The goal is not always meant to be reached, but to serve as a mark for our aim.” –Joseph Joubert Set goals that are directly measurable Example: Speed up test suite to run under two minutes on our CI server The gold standard of goals! Total clarity on what I’m trying to do, and whether or not the goal has been accomplished. A measurable goal is an achievable goal. But sometimes the…

API Design in Rails

We’re starting on a new version of the internal PrettyQuick API that powers our native clients and AJAX. The original version was based largely on what our consumer iOS app needed, but going forward we want to build a more general API to better support multiple clients for multiple constituencies. Luckly, Heroku has thoughtfully prepared a list of API best practice recommendations.…

Cultural Fit

There’s been renewed discussion recently about cultural fit, what it means, and its place in your hiring process. This pendulum has been swinging for years, because there are strong arguments both for and against. As usual, the answer lies between the extremes. A thoughtful cultural interview, as one component of a comprehensive hiring process, can provide some of the positives while…

Dev Meeting Smells

Much like code smells, there are conversation smells. Words that should be a red flag, words that often indicate something bad is happening. Here are some words I watch out for in dev meetings. Obviously The fastest way to shut someone down is to make them feel stupid. Saying “Obviously” prevents me from asking questions about what you said. If it’s not so “obvious”…

Problem Solving - It's A Trap!

I’d like to share a personal revelation in case it applies to you too. Mo' Developement Mo' Problems I’m a developer in large part because I enjoy solving problems. I like how there are so many aspects of solving a problem. Defining and redefining. Looking from different perspectives. Empathizing with users. Thinking about various approaches. Testing those approaches. Determining…

This Is Professionalism

Very early in my career, I was setting up some pressure sensors. The sensors had tiny wires coming off them, which someone had soldered to shielded co-axial cable running back to the data acquisition board/laptop. My task was to fasten the sensors to a frame, which I completed quickly and thoroughly. My boss checked in, complimented my framed sensors, and mentioned that the way the tiny wires…

Switching from RVM to rbenv

Today I switched from RVM to rbenv. This ThoughtBot post was a great starting point. I ran into a couple hitches. Here’s how I got through it. Do this stuff before you start the ThoughtBot stuff. First, brew doctor. I ran it a bunch of times and followed the steps until it was clean. The hardest step was XCode. I was running 4.2.1 and brew wanted 4.6.3. I downloaded the new 4.6 version…

Restart Heroku Dynos Instead of Letting Them Swap to Disk

Here’s what Heroku says about dyno memory usage: Dynos are available in 1X or 2X sizes and are allocated 512MB or 1024MB respectively. Dynos whose processes exceed their memory quota are identified by an R14 error in the logs. This doesn’t terminate the process, but it does warn of deteriorating application conditions: memory used above quota will swap out to disk, which substantially…

Understand Memory Usage on Heroku Rails App using Oink

SUMMARY: This is a step-by-step overview of how to get Oink installed in your Rails app on Heroku, and use it to analyze your memory usage. Starts with a brief description of the problem space, skip down if you just want to get on with your Oink integration. My stack includes these technologies: Rails 3, Unicorn, NewRelic, Heroku, Hodel3000CompliantLogger, and now Oink. Why is understanding memory…

epoch.rb - a trick for remembering

Make a file called epoch.rb in your project (I put mine in config/initializers). Use it to store constants that represent the times when big dev events happened. For example: CART_RELEASE = Time.local(2013, 04, 22, 13, 45) We released our shopping cart at 1:45pm on 4/22. Fast forward to today: some of our stats are messed up, for deals that were live across the cart release. I need to fix the…

How to Practice HTML

So you’ve learned a few HTML tags and the basic structure of an HTML document. Now what? Since HTML adds meaning to content, the basis for all these suggestions is “find some interesting content and add meaning.” Really, anything that gets you in your editor or browser playing around with this stuff is going to be useful. Pretend you’ve been hired to make a web page for a…

Table Print Lightning Talk

I gave a 10-minute intro to table_print at ChicagoRuby this week. The video turned out nicely, check it out in the ChicagoRuby video archives! All the lightning talks from the evening are in a single video, but I’m up first.

table_print

Imagine: you open a rails console and type User.limit(100). The output shows your database call, then… ACTIVE RECORD GUT PUNCH!!! Your screen is overrun with an inscrutable wall of text. I hated it. I had some coping mechanisms, but they were cumbersome. For example, the map-and-print: puts User.all.map { |u| "#{u.id}, #{u.email}, #{u.bio}" }.join("\n"); 0 This still sucked. Tons of typing,…

Bold move, Stripe

From https://stripe.com/blog/stripe-checkout: It’s unfortunate that everyone has to reinvent the wheel when the time comes to implement a payments UI. We decided to build something that you can just drop in as a single tag The script tag creates a “buy” button on your page. Clicking the button pops a modal payment form where the customer submits their info directly to stripe.…

Environment Name in Console Prompt

UPDATE: I made a gem! Just add gem "marco-polo" to your gemfile to see your app name and environment in your console prompt. I hate when I have a bunch of consoles open and I don’t know which one is local, which is staging, and which is production. I could potentially do a lot of damage by using the wrong one. I find myself typing Rails.env over and over, to figure out which environment…

Keeping CSS from controlling you

It’s easy to let CSS get out of hand and it’s hard to really take advantage of the cascade. Here I’ll explain some techniques that help stem CSS bloat. When you aren’t disciplined with your CSS, it’s easy to end up in a situation where it’s hard to… know what parts of the site a particular rule is acting upon know whether a given rule is ever used be…

Testing Callbacks with Jasmine Spies

(Note: if you aren’t using jasmine and jasmine-jquery to test your javascript go take care of that) Suppose we’re working on a sliding tile game, and we want to log the moves a player has made. We could create a Logger object to collect the moves, and use a callback in the Game method to update the logger. One of the simplest ways to implement a callback is with standalone function:…

Don't Use Bluehost

I don’t know the purpose of a rant about a hosting provider except to vent my own frustrations, so I’ll keep this quick. Here’s a step-by-step list of the reasons this blog is not on Bluehost: During checkout, I was never shown a total amount for my order - just a monthly price. It wasn’t clear whether I would be paying up front or be charged monthly. I left a field empty,…

Config for Ruby Console Applications

The Problem This technique came from my work on table_print, an irb tool for showing ruby objects in tables. I wanted to let people configure its output on a process-wide basis; eg, a default date format so sll their dates are shown consistently in the way they prefer. Additionally, I wanted a simple, easy-to-remember interface and a clean global namespace. The Solution Here’s a basic syntax…

Tagging Errors in Your Library

Pulled this out of a talk by Avdi. This technique is described at 16:00 in the video. It’s nice for the user of a library to be able to catch any error coming out of the library, but at the same time, it’s nice for a library to pass through basic error types like HTTPError. To solve the problem, you can “tag” the HTTPError with your own error class, essentially raising both…

Code Smells: TOO HARD

If you’re attacking a problem that just isn’t coming together, stop and take a step back. The feeling of “GAH WHY IS THIS SO HARD” is a preemptive code smell, alerting you that you’re about to write bad code. My most recent TOO HARD experience was with table_print, my gem that prints objects as tables. I had Law of Demeter violations all over the place,…

Occupy

(Fashionably late on this one, but I think it’s an important conversation to keep having) Wall Street executives took trillions of dollars from us, and we’re justifiably angry - but it’s not entirely about the money. We are a nation of entrepreneurs, a nation of people who strive to make their lives and their neighbors' lives better, a nation who care for each other - committed…

Javascript Organization

My friend recently asked me “Do you have any advice for encapsulating javascript or how to break an application into files/namespaces? Most of what I see online for javascript is hacky and not about designing for maintainability.” Turns out I do! First of all, you need jasmine and jasmine-jquery. I always thought TDD was a nice but impractical idea until I had an environment with fast…

Hack Night: A Refreshing Change of Pace

I attended the Chicago Ruby Hack Night meetup last tuesday. The theme was IronMQ, a message queue web service. You can post/get/delete messages through a set of super simple HTTP endpoints, and they handle the tricky (or at least boring) stuff like storage, retries, etc. Honestly, I almost didn’t go. I know that exposure to new technologies is good for me, but usually I have a hard time…