The average commuter spends eight days every year just traveling to and from work. Not us: every Intridean works from home. This means we saved an aggregate of 9,380 hours last year for the things we love instead of sitting in a car or a bus.
We wondered how our peers spend their time, so we asked. We didn’t know what to expect: skateboarding, civil war re-enactment, extreme knitting?
As it turns out, 40% of Intrideans mentioned spending more time with family: Ben got to see his son take his first steps. Linus started playing the piano again—after a fifteen year hiatus. Kathleen, Chris, Batman, Javie, Mike, Serign, and Tom all run. We’ve shared our stories in a mini-site built using maps from Tilemill.
In the coming weeks, we’ll dig deeper into the numbers. Yourtime is the first part of a platform we’re building to measure our lives, our health, and our carbon footprint. We’ll share our experiences as we grow, and soon you’ll be able to add your own company’s team to the board.
Come see how we spend our time. And if you’d like to recapture eight to ten days of your life every single year, come tell us how you’d like to spend your time.
A significant portion of my development time is simply wasted, and as they say “Time is Money.”
My Android development environment is Eclipse; not unlike most developers. However, I also find that debugging for Android on an AVD device is excruciating. The majority of my frustration comes from its lack of performance. And even after searching the web for tips and tricks to make AVD more responsive, I’m still twiddling my thumbs while the emulator tries to keep up with my requests.
If we could put men on the Moon and return them safely to Earth with little more than a TI-86 and duct tape, then surely there is a way to make my quad-core computer execute code with speed comparable to that of a mobile phone.
That was then…
After a lot of searching (because, you know, I had a lot of time between breakpoints), I pieced together information and resources from various places to come up with a better debugging emulator.
The solution that I found is an Android-x86 based system running inside of an Oracle VM VirtualBox. However, the key to this is Intel’s Houdini binary translator (libhoudini.so), which allows nearly-native execution of ARM code.
After downloading and testing many Android-x86 ISO’s, I found one that has fully integrated support for ARM right out of the box. Another key feature is that it’s not just a live image, but an installation disk as well. And as a bonus, it supports the Android market.
While I haven’t had an issue with compatibility yet, it is important that all final testing be done on AVD or a physical device before delivery.
The current version is based on Android 4.0.4 (Ice Cream Sandwich).
This first post is quite simple and we decided to just provide the iso already setup and ready to go. Next week, I'll post how to do it from scratch!
Recently I have been studying for the PMP, a certification exam for Project Management Professionals.
Like many people considering the exam, I was initially unsure about whether it would be a pointless cred, mind-blowing info that would turn me into a ninja PM, or something in between. The truth tends to lie in the gray area - the third option - and I’m happy to report it’s turning out be more useful than not.
The main benefit from studying project management as a discipline is that you discover many of the phenomenon you encounter day-to-day on the job is an actual thing.
Take communication for instance. For the 5 or so projects I’ve been working on of various sizes, it seems “duh” that some of these will require more, or more complex, communication. After all:
More client or internal team members = more stakeholders = more communication = more complexity = more risk.
I know this intuitively, but the PMP takes this concept and actually turns into an objective formula, given by:
# of Communication Paths = N * (N - 1) / 2 where, N = number of stakeholders for a project.
Simple, but comforting. Because now it means I can reasonably project the amount of communication a project will need, rather than wait for it to show up at my door.
This is not in some vague way like, “Oh yeah, we’re working with a large team/ a big enterprise client.” What does that even mean? How large is “large”? How big is “big”?
Now it means that you can look at team size - both yours and the clients - and mash that together to figure out how much complexity to expect, and how much extra time you’ll need, because you know the total number of communication paths for things like emails, IMs, meetings and followups.
Another example is performance. How do you know you’re doing a good job, making progress, and delivering value? For large projects especially, its easy to get stuck on the hamster wheel delivering incremental changes everyday (i.e. “doing some work”), without taking a step back to see whether the work translates into value as planned.
Here’s a neat PMP formula that helps with that too:
Cost Performance Index = Earned Value / Actual Cost where, EV = Percent Complete * Budget At Completion and AC = sum of all the individual costs thus far
The Cost Performance Index thus gives you a number. If the value of the number is less than one means that money is being spent inefficiently on the project. So a CPI of 0.85 means that for every $1 spent on the project the client is getting $0.85 of value. A CPI of exactly one means that you’re perfectly on track.
It’s easy to see how calculating this index regularly would help a PM figure out whether they’re delivering just “some work” or real value.
To sum it up, studying for the PMP has been, surprisingly, a validating experience. While you can’t put projects in a box and account for all outcomes with formulas, you can certainly use a few quick tools to get a sharper sense of what your project looks like and plan accordingly.
And while being a PM isn’t sexy, it helps to know others have been down this path before and have been kind enough to assign names and processes that tie together all the balls in the air. This helps with pattern recognition across projects - being able to step back and say, “Okay, so this is what’s happening here”, and identify what you see as either a problem or just part of the process.
Finally, for all the formulas in the world, project management is a true blend of art and science, and I love that. It means that a robot can’t take my job, and that even though PMs increasingly use things like online software and messaging to get the work done, we still have to work outside the spreadsheets with people--complex, nuanced, frustrating, wonderful people-- every single day. At the risk of sounding simplistic, that makes me happy.
As the focus on multithreaded Ruby grows and grows, code autoloaders seem to be a less and less manageable solution. By the same token, it can be pretty ugly to manually require dozens of files or come up with complex schemes for requiring files.
Node.js has a pattern that I personally enjoy: if you require a directory, it will automatically look for a file called index.js in that directory and require that if present. This, to me, presents a simple, usable way to manage complex require schemes. On a whim, I decided to see how easy it would be to implement such a pattern in Ruby. Turns out it's not hard:
def require(path) super rescue LoadError => e searches = $:.map{|dir| File.join(dir, path)} searches.each do |search| if File.exist?(path + "/index.rb") return require path + "/index" end end raise e end
This implementation is simple, naive, and likely extremely dangerous in ways I don't understand. What it does is simply take the path specified in the require call and walk through the load path, looking for an index.rb file in a directory denoted by the path. If it finds one, it requires that and returns. If it doesn't, it raises the standard LoadError.
I'm not an expert on Ruby's file loading internals, which is why I spent five minutes making this hack method instead of trying to come up with an actual elegant solution. What I want to do, however, is start a conversation about whether this pattern makes sense or has a place in Rubyland. I think it would be nice to have a structure like this:
# In e.g. "application.rb" require 'app/models' # In app/models/index.rb require 'app/models/user' require 'app/models/post' # ...
It keeps everything explicit (I've become a big fan of explicit requires as opposed to directory or name-based autoloading) while still keeping a syntactically nice require call that describes what is happening quite well.
So what do you think? Is this a pattern worth exploring? Is this maybe a gem waiting to be written? Should it be made part of the core language? Let me know in the comments below or tweet @intridea with your thoughts!
Recently, I worked on some interesting features, we use Highcharts and/or Raphaeljs to build complex charts, including bar chart, scatter chart or heat map, etc. In an extreme sample, we build a complicated one-page charting engine by which user is able to compose a group of conditions and then render a meaningful chart according to what are selected. It's pretty cool.
Meanwhile, client is willing to download these generated charts on individual chart level. They also want to have an ability to share the individual chart as a link or even as a piece of HTML code. What's the best solution to add these functionalities? Well, we did try many solutions for the features, let me show you how we make it finally.
Start from a HTML template
Above HTML code is the generated content on my page, I will mainly explain the solution based on it. Here is also a sample SVG file: sample.svg, you can use it to go through the whole senario if you want to experiment by yourself.
Deal with SVG via HTML5 Canvas
HighCharts and Rapheal are JS libaries by which you are able to generate complex SVG charts, normally, people can not download a svg file directly, and it's also not a popular image format for sharing around. We'd better convert it to a PNG or JPG image, as PNG and JPG format is downloadable from web page. I will take PNG format as a sample in this post.
How to convert a SVG image to a PNG image? Mainly, you can do the convertion job from server side. There is a SVG toolkit provided by Apache which is named as Batik. But I don't like this solution, it's a bit comoplex to install Batik and make it work with Ruby on Rails. I'd like to work the convertion out via pure javascript. Yes, use canvg to move all SVG information to a HTML5 Canvas object.
Using the HTML5 canvas element, you can create all sorts of cool graphics client-side on the fly using Javascript. There is a neat function on the the canvas object called toDataURL(). This functions encodes the image data as a base64 encoded PNG file and returns it as a data: URI. By using the data:URI string, you can make it a downloadable PNG file.
There is also a libary to help you do so, it's Canvas2Image that can convert canvas to image as BMP, PNG or JPEG format.
Customize default filename while downloading
Canvas2Image lib will implement a pop out window to allow you download the data:URI as a PNG image file with a default name download, which is not acceptable by our client, I have to figure out a way to customize the downloadable filename.
It might be easy if you just want to cover your Chrome or Firefox user, as there is a download attribute for <a> tag, when you set it as something like <a src='the data:uri string' download='test.png'> then you will get the default filename in this the case when you click the download link.
I am not lucky, I have to cover IE9 at least. So I need to push the data:uri to server, then I can render the data with specific headers(see below code), that will make the downloadable file with a customized file name.
Pay attention to above html2canvas([$(".hidden_container")[0]],{ … }) parts. It helps to convert whole HTML code to a canvas based on html2canvas lib, that's our case as we have to wrap up some HTML code out side the the charts.
A trick to overcome IE9 issue
When you work on IE9, the canvg fails to translate the SVG to Canvas, it seems IE9's DOMParser() is not able to parse the SVG successfully. After some search from Google, we found only one line code will resove the SVG parser issue. Just replace some invalid string in SVG data as below:
Conclusion
To summarize this post, you are suggested to use several JS libs above to convert SVG to Canvas, then convert Canvas to PNG file, if you also want to customize a piece of HTML code out side the SVG chart, then you are able to convert HTML to Canvas, then again from Canvas to PNG, when you want to set a customized filename for the generated PNG file, you have to send the data:uri string onto server side, then rewrite the response headers, all these handling will implement a downloading feature for you.
In the spirit of the holidays, we decided put together a list of our favorite things from 2012. As product junkies, we Intrideans are always on the lookout for things that make our lives simpler, smarter, easier, and all round better, and we love to spread the word.
From tech gadgets and software products to functional clothing and quirky books, below are some top picks from our team.
Amelia Saletan
WhatsApp
Text your friends in other countries for free
Foam Rollers
If you do, or don't do, any type of exercise, you need a foam roller. Good for warming up or cooling down the muscles. Or for muscle pain/soreness.
Anthony Nystrom
VueZone Wireless Cams
VueZone wireless cameras allow me to check in with my family no matter where I am and anytime. Makes me feel like I am there when traveling.
Thunderbolt Display
I gave up waiting for Apple to refresh their display and bit the bullet on their 27" Thunderbolt Display. It's bright, huge, and has a built in camera, speakers, USB and Firewire ports that I can hook up to my laptop with one cable.
Chris Tate
Corcoran 10 In. Historic Leather Military Brown Jump Boot
They were designed for WWII paratroopers and haven't changed since. They're rugged, super tough looking, and crazy comfortable after broken in. I've had mine for 3 years and hope to rock them for the next 3. My uncle, Al Saguto, is Colonial Williamsburg's master shoemaker and he recommended these to me a few years back.
MacBook Air
My other fav thing is my MBAir. Light, powerful, perfect for what I do—I can't imagine a better laptop. It's been perfect for me while I've been on the road for the last few months. Seriously, amazing, I love it.
Insiya Hussain
AwayFind
This year AwayFind helped me (partially) cure the incessant need to check email every 5 mins. I actually feel like I can step away without missing something important.
Jurgen Altziebler
Romotive
Innovative award from me. Clever, cute, fun.
Evernote
I have to give Evernote a thumbs up - the newest desktop version is great.
Kathleen Selmer
Garmin Forerunner 405CX
This running watch keeps track of mileage, pace, elevation changes and so much more. No more guessing at how far I ran!
Knuckle Lights
So much better than a headlamp! These were really useful on the AT where they worked like "low beams" in the heavy fog.
Maggie Lubberts
Browserstack
Windows. So many people use it, and I DON'T as a rule of thumb. This is great right up until it comes time to test. With Browserstack I don't have to install cumbersome virtual machines in order to test my sites in Windows browsers. Browserstack spins up a machine for me to use in the cloud, and it works perfectly!
Fab
If you don't do fab, you're missing out. We all need things; sunglasses, clothes, bags, cookware, furniture, suitcases. Fab has it. But not ALL the sunglasses, or ALL the luggage, only the slickest. Every item is accepted into the Fab store for being beautifully designed. The iphone app rocks, and I did a large portion of my holiday shopping there (much to my family's delight.)
Marc Garrett
The Lonely Planet Book of Everything
Recognizing animal poop, making your hotel room burglar proof, carrying an injured friend from a remote location, understanding why the TGV is so darn fast: these are critical skills in the daily life of an engineer and the “Book of Everything” covers them all.
Mike Tierney
Palomino Blackwing Pencils
These are incredible pencils, creating a rich dark line without getting nasty and smudgy. They're a revival of the classic pencil of the same name, used by authors and artists like John Steinbeck and Chuck Jones.
Brooks PureConnect Running Shoes
I spend more time thinking about shoes than I care to admit, but when I'm running I want something that's going to take care of my feet and make the experience as enjoyable as possible. Of all the shoes I have tried, the Brooks PureConnect do live up to their marketing up making running a purely enjoyable experience. They're light and have great airflow, but I never feel like my foot is vulnerable (which is remarkable, given how minimal of a running shoe they are); I hardly even realize they're there.
Patti Chan
Sorapot
The only thing I need besides my Macbook to do work, is TEA. And nothing brews tea more beautifully than my Sorapot, a gift I got 5 years ago. Except when I catch myself gazing at it instead of answering emails.
Tom Zeng
FitBit Zip
Great little device to keep me motivated to excise, it has helped me keeping up with the 10k steps/day goal and making me healthier and more productive both at work and home.
Yoshi Maisami
Google Translate
It's been around for a while... but keeps getting better and better.
If you haven't heard of Ignite, google it in your city now! I moonlight as an organizer for Ignite San Francisco, just one out of 500+ cities home to this high-energy series of enlightening 5-minute talks.
The only downside to being a host? Knowing it would be awkward to insert myself in my own lineup, despite obsessing over great talk idea(s). Enter Sara Winge, fantastic host of Ignite Sebastopol, just a short skip and hop north of San Francisco. I was honored to be accepted for Ignite Seb #8, delivering twenty 15-second tidbits on my lifestyle of working remotely, bonding with our teams, and sharing learned lessons on how to make it work.
This past weekend I participated in Random Hacks of Kindness (RHoK) hosted by the OpenGov Hub in DC. I attended my first RHoK event in June of 2010 after reading about it on slashdot, and I ended up working on a winning project. I've been a regular at the event ever since. I was extra excited this time around because RHoK was being held alongside the first ever Sanitation Hackathon, an event that tries to find technological solutions to some of the very serious sanitation problems around the world.
The event kicked off with presentations from subject matter experts on situations that called out for aid. Problems ranged from the illegal dumping of septic waste, to finding a way to better connect domestic violence victims who are working to re-build their lives with socially conscious employers, in order to ease their re-entry into the work force.
More people have access to cell phones than to clean and safe toilets
The problem that piqued my interest was submitted by the Peace Corps where tro-tro passengers had to wait in the vehicle until it was at capacity because there was no line of communication between the driver and passenger notifying them when it was departing. Not only was the problem well defined and solvable in one weekend, but the solution could also be general enough to be applicable to any situation where someone has to send notifications to a group without the painful process of gathering emails or phone numbers from everyone and sending a group message.
I worked with Chelsea Towns, a RHoK veteran who works for the Peace Corps and Thad Kerosky, a developer who used to be a Peace Corps volunteer in Tanzania and Liberia. The solution we provided was an SMS based notification system that allows anyone to create an event, a trip in case of the tro-tro driver or conductor, which anyone can subscribe to receive notifications for. The technology we used was Ruby on Rails deployed to Heroku, using Twilio API for the SMS part. We named the project Tro-Tron.
Usually at other hackathons, things are a little more competitive and folks are focused on getting their projects done by the deadline. At RHoK the amount and quality of collaboration is awesome; you will always find people moving from team to team trying to help out as much as they can, and it is not unusual to have a lot of people contributing to more than one project. My favorite part of the weekend was meeting so many new people, I met three different Peace Corps volunteers who were in The Gambia, one of them back when I was still a baby. I also got to meet Javier for the first time, another Intridean who brought a lot of energy and helped test the application.
RHoK wrapped up on Sunday with some impressive presentations and demos. You can fork the project on github and view photos we took at the event on flickr.
History of RHok: in 2009, some good folks from Microsoft, Google, Yahoo NASA, and the World Bank started the Random Hacks of Kindness (RHoK) hackathon, an event that aims to connect subject matter experts in disaster management and crisis response with volunteer software developers and designers in order to create solutions that have an impact in the field. Since then, RHoK has grown into a community of over 5000 in over 30 countries around the world.
On Nov 15, a strange species known as “Intrideans” descended upon Manhattan. Armed with posterboard, sticky tape, sharpies and whoopee cushions, they glided into the futuristic New York Times building in Times Square and sputtered in code, fooling but everyone there.
The NYTimes Open Source Science Fair was a blast. We were exposed to a wide range of interesting projects, got to hobnob with fellow developers, and showcased some great works authored by our own team members, including Ted O’Meara’s GreenOnion, and Michael Bleigh’s OmniAuth and Grape.
The event kicked off with table setup in quaint and traditional science fair style. We like that the NY Times kept things simple - table, posterboard, stick stuff on it, done. The focus was clearly on project quality and discussions among attendees, which embodied the spirit of the whole event. The NY Times could’ve easily turned this into yet another extravagant conference with a bunch of unnecessary bells-and-whistles, so total street cred to them for knowing their audience and focusing on the work rather than the frills.
After table setup the floor opened to general attendees (150+ developers), and Intridea’s Ted O’Meara got a chance to give a two-minute intro to GreenOnion, a UI testing tool that records screenshots and compares them to one another. GreenOnion is a clever way to prevent regression issues in the UI and eliminate some of that frustrating back-and-forth between designers and devs during new releases (“No, it was 10 pixels to the left, remember?”). Ted gave a neat little summary before we were ushered on to the next few exhibitors, which included sharp-shooting developers from GitHub and MongoDB among others.
After a grub break for pizza, pasta, and salad, the floor become a sit-down area for the speaker’s portion of the event, featuring presentations by Zach Holman of GitHub, Rebecca Murphy of Bocoup, and Jeremy Ashkenas of the New York Times and DocumentCloud.
Before the sit-down though, we went on a little whoopee cushion spree, placing our naughty “Bad UX Blows” noise-makers on seats and handing them out to fellow attendees. At multiple points during the handout we got sheepish grins saying, “Yeah, I already grabbed three.” This naturally made us feel very, very proud.
Getting back to the speakers series, we were impressed by the quality of projects, the witty presentations, and the overall sense of community that came through. Listening to the speakers, some of the main takeaways we got were:
Don’t be afraid to jump into open source and don’t worry about not looking smart- no one really knows what they’re doing.
Show-and-tell and constant feedback is to be encouraged and embraced. Don’t hide - just put your code out there - you won’t be sorry.
The community is very good at helping you fix your mistakes - benefit from that.
Code is a hugely creative endeavor - try to use code to impact non-techie industries, like photography, musics, art, knitting, or whatever else you’re passionate about.
At the end of the event the NY Times crew handed out prizes--some funny, some serious--and Intridea’s Ted O’Meara won “Highest Exhibitor-to-Booth Ratio”! Yes, we were quite the posse :).
We were honored to be a part of such a fun gathering and make valuable connections in the tech community. For a full list of winners and more coverage, check out the NY Times blog post on the event.
Now, we must zip back to Intridea-land. Until next time, New York.
We are pleased to announce that Brian Lacey has been promoted to Chief Operating Officer. As COO, Brian is responsible for the day-to-day operations of Mobomo, supervising the entire life cycle of all of our projects. He is passionate about user experience, design, and technology. He brings deep expertise in front-end interfaces, Javascript, HTML5, and CSS. Prior to Mobomo, Brian worked at Network Solutions where he managed a team that created the website template designs for their enterprise website builder. Brian's enthusiasm and attention to customer experience provides Mobomo with a solid foundation for our continued growth. Congratulations Brian and thanks for all your hard work getting Mobomo to where it is today.