Profile cover photo
Profile photo
Filipe Moreira
Ruby & Javascript developer
Ruby & Javascript developer

Filipe's posts

Post has shared content
About 14 years ago, I got a bad cold, and my voice became hoarse.  At the time I didn’t think much about it.  But my voice never fully recovered.  So I went to a doctor and was diagnosed with left vocal cord paralysis.  This is a nerve problem that causes your left vocal cord to not move properly.  Despite extensive examination, the doctors never identified a cause — though there was speculation of virus-based damage from my cold.  It is quite common in cases like these that a definitive cause is not found.

While this condition never really affected me — other than having a slightly weaker voice than normal which some people think sounded a little funny — it naturally raised questions in my mind about my second vocal cord.  But I was told that sequential paralysis of one vocal cord following another is extremely rare.  

Fast forward to last summer, when the same pattern repeated itself — a cold followed by a hoarse voice. Once again things didn’t fully improve, so I went in for a check-up and was told that my second vocal cord now had limited movement as well. Again, after a thorough examination, the doctors weren’t able to identify a cause.  

Thankfully, after some initial recovery I’m fully able to do all I need to at home and at work, though my voice is softer than before. And giving long monologues is more tedious for me and probably the audience.  But overall over the last year there has been some improvement with people telling me they think I sound better.  Vocal cord nerve issues can also affect your breathing, so my ability to exercise at peak aerobic capacity is somewhat reduced.  That said, my friends still think I have way more stamina than them when we go kitesurfing!  And Sergey says I’m probably a better CEO because I choose my words more carefully.  So surprisingly, overall I am feeling very lucky.

Interestingly, while the nerves for your vocal cords take quite different routes through your body, they both pass your thyroid.  So in searching for a cause for both nerves that was an obvious place to look. I was diagnosed with Hashimoto's thyroiditis in 2003.  This is a fairly common benign inflammatory condition of the thyroid which causes me no problems.  It is unclear if this is a factor in the vocal cord condition, or whether both conditions were triggered by a virus.

In this journey I have learned a lot more about voice issues.  Though my condition seems to be very rare, there are a significant number of people who develop issues with one vocal nerve.  In seeing different specialists, I met one doctor — Dr. Steven Zeitels from the Harvard Medical School and the Massachusetts General Hospital Voice Center — who is really excited about the potential to improve vocal cord nerve function.  So I’ve arranged to fund a significant research program through the Voice Health Institute, which he will lead.  Thanks a bunch to my amazing wife Lucy, for her companionship through this journey and for helping oversee this project and get it off the ground.  Also, thanks to the many people who have helped with advice and information many of whom I have not had a chance to thank yet.

Finally, we’ve put together a patient survey to gather information about other people with similar conditions.  As it’s fairly rare, there’s little data available today — and the team hopes that with more information they can make faster progress.  If you have similar symptoms you can fill it out here:

Post has shared content
We announced our self-driving car project in 2010 ( with a clear goal: make driving safer, more enjoyable and more efficient.

There’s much left to design and test, but we’ve now safely completed more than 200,000 miles of computer-led driving, gathering great experiences and an overwhelming number of enthusiastic supporters.

We wanted to share one of our favorite moments from some special research we conducted. Watch this video of Steve, who joined us for a drive on a carefully programmed route to experience being behind the wheel in a whole new way. We organized this test as a technical experiment outside of our core research efforts, but we think it’s also a promising look at what this kind of technology may one day deliver for society if rigorous technical and safety standards can be met.

A version of this video with audio captions is available here:

Post has attachment

Post has shared content
Online tools I regularly find helpful

Hey guys. I thought it might be helpful to put together a list of some of the tools I use in my workflow these days in case it's useful. Please feel free to check them out (or share your own toolbox) if you think it would be of assistance to others.

With thanks to +Paul Irish +divya manian, +Joe McCann and others for their work on these tools.
========== - An excellent markdown editor in the browser which can connect with both Dropbox and GitHub. I personally use it for everything from drafting slides to articles when Mou ( isn't available. We're working on bringing GitHub markdown and Gist support to it soon.

HTML5 Please API
=============== - (Released this week) An API and set of widgets for detecting modern browser features required by your page/app/demo and suggesting compatible alternatives to your users if yours doesn't meet requirements. We're hoping to convince some Chrome experiments to adopt this shortly.

HTML5 Please
=============== - Modern browser features rated by how safe they are to use with recommendations on the best 3 polyfills to consider for each (where applicable). If you ever use the Modernizr polyfills list as a reference point, this is an improved view of that data.
======================= - Centralised documentation for JavaScript/CSS/HTML (sourced from the MDN), jQuery, PHP and Python. Very useful if you need a super-quick reference interface while working on a project. (thanks to Xavier for reminding me about this one)
================= - This has all but completely changed how I cross-browser test new projects and I can't recommend it highly enough. Browserstack lets you spin up VMs for practically any old or modern web browser you may need to test in and they've also been working on getting support for distributed testing in place. You might also be interested in +Scott González's node-browserstack project that lets you use their API through Node

Grunt (not online, but very useful)
================ - Ben Alman's task-based build tool for projects does everything from concatenation through to unit testing with a headless browser. It can even watch for file changes if you're interested in that. Do check it out as although it's in beta, it's already very powerful.
CSS3 Please
================ - A cross-browser CSS3 rule generator that covers everything from gradients to @font-face. I crack this open more than once every week.

Matt Kersley's 'Responsive'
====================== - A really simple, but useful little tool for testing responsive layouts. This helped me test out the redesign on my blog and was fairly accurate when I later confirmed rendering on actual devices.

Remy's jsconsole
================== - A super-awesome tool that lets you remotely control and debug browser windows, regardless of whether they're in another another browser or completely different device. Great for partial testing your app on mobile/tablet devices.

Chrome Dev-tools AutoSave
====================== - I covered this in a screencast but CDA is a really hot way to make changes to pages in the Chrome developer tools and have them automatically save locally (so you don't even need to switch back to your editor). If you haven't checked it out it's definitely worth trying.

John Alsopp's CSS3 Playground
======================= - When you need something a little more visual, John's CSS3 tools let you play around with configurations for gradients, text properties, transforms and more. Great for tweaking designs.

jsPerf (an absolute must)
====================== - I've listed this more than once as my site of the month in .net magazine and for good reason. It's an extremely useful way to benchmark your JavaScript snippets and get a lot more value out of Browserscope.

======== - An extremely helpful visual builder for creating jQuery Mobile apps. It's not promoted as one, but it's also very useful to creating app mockups without needing to touch any code.
============== - Most of you will already know this one, but it's helped power some of the other tools on this list. It's a curated list of browser features supported by browsers, broken down by browser versions.

HTML5 Readiness
================= - A historic view of how far HTML5 and CSS3 feature implementation has progressed over the years and where we are now (last updated 2011, will probably be updated again soonish). Mostly here for funsies.

That's it! I of course use a number of other desktop tools but that's about it for now. jsFiddle/jsBin etc have also been awesome but for the most part I've shifted to doing everything in gists if not with Dillinger.

Post has shared content
Really agree with this rant by +Linus Torvalds

I don't think I can talk about "security" people without cursing, so you might want to avert your eyes now.

I gave OpenSUSE a try, because it worked so well at install-time on the Macbook Air, but I have to say, I've had enough. There is no way in hell I can honestly suggest that to anybody else any more.

I first spent weeks arguing on a bugzilla that the security policy of requiring the root password for changing the timezone and adding a new wireless network was moronic and wrong.

I think the wireless network thing finally did get fixed, but the timezone never did - it still asks for the admin password.

And today Daniela calls me from school, because she can't add the school printer without the admin password.

Whoever moron thought that it's "good security" to require the root password for everyday things like this is mentally diseased.

So here's a plea: if you have anything to do with security in a distro, and think that my kids (replace "my kids" with "sales people on the road" if you think your main customers are businesses) need to have the root password to access some wireless network, or to be able to print out a paper, or to change the date-and-time settings, please just kill yourself now. The world will be a better place.

.. and now I need to find a new distro that actually works on the Macbook Air.

Post has shared content
Two things about SOPA/PIPA and then I'll shut up :)


The internet seems to ignore legislation until somebody tries to take something away from us... then we carefully defend that one thing and never counter-attack. Then the other side says, "OK, compromise," and gets half of what they want. That's not the way to win... that's the way to see a steady and continuous erosion of rights online.

The solution is to start lobbying for our own laws. It's time to go on the offensive if we want to preserve what we've got. Let's force the RIAA and MPAA to use up all their political clout just protecting what they have. Here are some ideas we should be pushing for:

* Elimination of software patents
* Legal fees paid by the loser in patent cases; non-practicing entities must post bond before they can file fishing expedition lawsuits
* Roll back length of copyright protection to the minimum necessary "to promote the useful arts." Maybe 10 years?
* Create a legal doctrine that merely linking is protected free speech
* And ponies. We want ponies. We don't have to get all this stuff. We merely have to tie them up fighting it, and re-center the "compromise" position.


The dismal corruption of congress has gotten it to the point where lobbying for legislation is out of control. As Larry Lessig has taught us, the core rottenness originates from the high cost of running political campaigns, which mostly just goes to TV stations.

A solution is for the Internet industry to start giving free advertising to political campaigns on our own new media assets... assets like YouTube that are rapidly displacing television. Imagine if every political candidate had free access (under some kind of "equal time" rule) to enough advertising inventory on the Internet to run a respectable campaign. Sure, candidates can still pay to advertise on television, but the cost of campaigning would be a lot lower if every candidate could run geo-targeted pre-roll ads on YouTube, geo-targeted links at the top of, even targeted campaigns on Facebook. If the Internet can donate enough inventory (and I suspect we can), we can make it possible for a candidate to get elected without raising huge war chests from donors who are going to want something in return, and we may finally get to a point where every member of congress isn't in permanent outstretched-hand mode.

Post has shared content
Lossy image compression is gaining in popularity. Good thing too! We love our photos, but we also value fast load times. is a very interesting project at automating lossy compression. Read through the readme; my favorite part is what JPEG quality large sites target:

Google Images thumbnails: 74-76
Facebook full-size images: 85
Yahoo frontpage JPEGs: 69-91
Youtube frontpage JPEGs: 70-82
Wikipedia images: 80
Windows live background: 82

Post has shared content
Chrome DevTools new stuff!
In Chrome Canary, head to DevTools' Scripts tab, then hit cmd-o to for the new Go To Function dialog which is an amazing way to navigate the current file.

You can also try the new search all scripts feature: cmd-opt-f to open it, search all current scripts via literal or regex. (And Esc to close it)

Other new stuff in the settings dialog, too. Dock to Right (great for JS debugging sessions) and User Agent override.

Post has shared content
This is interesting. Collaboration is very important but it should overshadow creativity and performance.
"In a fascinating study known as the Coding War Games, consultants Tom DeMarco and Timothy Lister compared the work of more than 600 computer programmers at 92 companies. They found that people from the same companies performed at roughly the same level — but that there was an enormous performance gap between organizations. What distinguished programmers at the top-performing companies wasn’t greater experience or better pay. It was how much privacy, personal workspace and freedom from interruption they enjoyed. Sixty-two percent of the best performers said their workspace was sufficiently private compared with only 19 percent of the worst performers. Seventy-six percent of the worst programmers but only 38 percent of the best said that they were often interrupted needlessly."

Post has shared content
Hi everyone! I’m an engineer on the Google+ infrastructure team. When +Joseph Smarr made an appearance on Ask Me Anything back in July (, many of you wanted to hear more about Google+'s technology stack. A few of us engineers decided to write a few posts about this topic and share them with you.

This first one has to do with something we take very seriously on the Google+ team: page render speed. We care a lot about performance at Google, and below you'll find 5 techniques we use to speed things up.

1. We <3 Closure

We like Closure. A lot. We use the Closure library, templates, and compiler to render every element on every page in Google+ -- including the JavaScript that powers these pages. But what really helps us go fast is the following:

- Closure templates can be used in both Java and JavaScript to render pages server-side and in the browser. This way, content always appears right away, and we can load JavaScript in the background ("decorating" the page, and hooking up event listeners to elements along the way)

- Closure lets us write JavaScript while still utilizing strict type and error checking, dead code elimination, cross module motion, and many other optimizations

(Visit for more information on Closure)

2. The right JavaScript, at the right time

To help manage the Javascript that powers Google+, we split our code into modules that can be loaded asynchronously from each other. You will only download the minimum amount of Javascript necessary. This is powered by 2 concepts:

- The client contains code to map the history token (the text in the URL that represents what page you are currently on) to the correct Javascript module.

- If the Javascript isn’t loaded yet, any action in the page will block until the necessary Javascript is loaded.

This framework is also the basis for our support for making client side navigates work in Google+ work without reloading the page.

3. Navigating between pages, without refreshing the page

Once the Javascript is loaded, we render all content without going back to the server since it will be much faster. We install a global event listener that listens for clicks on anchor tags. If possible, we convert that click to an in page navigate. However, if we can’t client side render the page, or if you use a middle-click or control-click on the link, we let the browser open the link as normal.

The anchor tags on the page always point to the canonical version of the URL (i.e. if you used HTML5 history for the URL), so you can easily copy/share links from the page.

4. Flushing chunks (of HTML)

We also flush HTML chunks to the client to make the page become visible as soon as the data comes back, without waiting for the whole page to load.

We do this by
- Kicking off all data fetches asynchronously at the start of the request
- Only blocking on the data when we need to render that part of the page

This system also allows us to start loading the CSS, Javascript, images, and other resources as early as possible, making the site faster and feel more responsive.

5. iFrame is our friend

To load our Javascript in parallel and avoid browser blocking behavior (, we load our Javascript in an iframe at the top of the body tag. Loading it in an iframe adds some complexity to our code (nicely handled through Closure), but the speed boost is worth it.

On a side note, you may have noticed that we load our CSS via a XHR instead of a style tag - that is not for optimization reasons, that’s because we hit Internet Explorer’s max CSS selector limit per stylesheet!

Final Comments

This is just a small glimpse of how stuff works under the covers for Google+ and we hope to write more posts like this in the future. Leave your ideas for us in the comments!
Wait while more posts are being loaded