Alex Seville

JavaScript engineer, based in San Francisco, working for Flickr, and creator of Blanket.js.

The best thing a human being can do is to help another human being know more.
Charlie Munger (via thedailyweb)

Warren & Charlie are like the Carl Sagan’s of finance

Public.js is a little library I developed to display the public interfaces exposed by JavaScript source code.  

Basically, it determines what will be exported to the global scope (or returned via exports in node) and formats that object into a parse tree.

The applications (that I’ve thought of so far) are developing unit test scaffolding, or documentation for existing code, and analyzing code for accessor errors or unintentional exports of “private” functions.

The library is named public.js, and I’ve created a demo page to illustrate some of the applications.  I’ve also created a grunt tasks (grunt-public-js) to distributed the same applications.

DEPLOY by phil dokas on Flickr.I’m really proud to have recently joined the Flickr team and to have been part of the new redesign project.
Head on over and see the changes, or rediscover the site anew!

DEPLOY by phil dokas on Flickr.

I’m really proud to have recently joined the Flickr team and to have been part of the new redesign project.

Head on over and see the changes, or rediscover the site anew!

I’ve played with the Selenium FF plugin in the past, but found it to be a little awkward.  I decided to try creating an alternative, as a regression testing JavaScript library (but powered by a Chrome extension).

The result is Feta.  Feta will allow you (via the Chrome devtools extension) to record a series of behaviours in your webapp (one page apps only, for the moment).  When you stop recording, Feta produces a reusable test that can be run independently of the Chrome extension (or Feta itself).

The test scripts can also be run by PhantomJS, in order to add regression testing to your continuous integration pipeline.

So far I’ve been able to use it to regression test maintenance deployments at work, and the results are promising.

I’d appreciate any feedback or feature suggestions.

Check out the project page for more details and a walkthrough video.


Got this email this morning:

From: Andrew
Subject: Have a minute to talk about Hello, We have a client interested in Would you
consider selling the site? Please let me know a day, time and phone number
you could speak about this possibility and we'll try

Typically when (browser based) distributables are include in a Github project they’re added to the gh-pages branch.  This is done to avoid having duplicate changes in the commit logs for the source and distributable.  For example, changing a variable name in source, rebuilding, and then committing, would result in a commit containing a diff to the source AND each built distributable file.

However, there are use cases for having the distributable on your master branch, and I’ve developed a solution (of sorts) to make it work in a fairly clean manner.

For Blanket.js, I like to provide 4 distributable files, a QUnit and Jasmine build, and a minified version of each.  Adding these 4 files to a gh-pages branch is too much overhead.  I rebuild the project after each change to run my tests anyway, so I’d rather just have the new distributables live in master and be available after each commit to master.

Enter, .gitattributes.  Creating a .gitattributes file allows you to change the git attributes of given files.  According to the documentation you can tell git to handle your file as binary, so diffs won’t be created:

`dist/*.js -diff`

In practice, this didn’t work for me on GitHub (maybe it ignores the git attribute on files that have already been tracked?).  I have to change the merge attribute to union (which may not always give the intended result), but it works for me (I also run the distributables through tests on the CI):

`dist/*.js merge=union`

You can see a Pull Request without and with the git attributes in place (I’m aware that I’m probably getting the right result for the wrong reasons, but the approach should work in theory if done correctly). 

Really handy for i18n applications…

Show Paint Rectangles! Nice, this has been available in some Chromium builds for a while, but it’s great to see that it’s closer to being in Chrome stable.