Planet HashPHP

September 02, 2010

chip

Announcing Nodul.es: CPAN for Node.js

Last weekend, our team named “Ponies for Orphans” participated in the Node Knockout competition.  The team included 3 of my co-workers from Cloudkick, Russell, Tomaz, Logan, and myself. In 48 hours, we had to build a project based on Node.js.

We were brainstorming ideas before the competition, thinking about all the cool things we could do;  We even planned out some multiplayer game ideas.  We quickly figured out that none of us had done anything extensive with Canvas or SVG, and the existing 3rd party libraries aren’t very comprehensive, with the possible exception of Processing.js. We also felt that we wanted something that would continue to be used after the competition.  We refocused our ideas on projects that would work well with our team composition of being backend programers, and eventually settled on Nodul.es:

Nodul.es: CPAN for Node.js

Nodul.es is a web based view of the NPM package repository for Node.js.  Our goal was simple, implement what we liked about CPAN for Perl and Python’s PyPi in 48 hours of coding.

Currently you can browse by:

Let’s look at an example of a module page;  Tim Smart’s node-compress module is a good example.  We pull out metadata from both the NPM repository, the latest commit from Github, and find all modules that have a dependency upon it.

Internals of Nodul.es

Nodul.es is built around Node.js, using its asynchronous abilities extensively.

We split the system into 3 main components:

  • Indexer:  Indexes the raw data about packages from the NPM Registry.  This is just a raw JSON dump from NPM’s CouchDB backend.
  • Source Downloader: Downloads the latest releases of all NPM modules, and extracts them so we can get extra metadata out about the module.
  • Webapp: The simple part, pulls data out of our datastore, and displays html pages to end users.

All of these services interact MongoDB, which provides data storage for all of the indexed data, and ways to get it back out for webpages.

We also used several external dependencies in building Nodul.es:

  • async – For flow control of asynchronous operations.
  • clutch – For URL routing inside the webapp.
  • Mu – For HTML Templating in the webapp.
  • paperboy – For static file serving (ie, CSS/javascript) in the media subdirectory.
  • prettify – For code highlighting, for a feature not released!
  • sprintf – For string formatting, in the logs, nice logs are good.

What’s next for Nodul.es

We built Nodul.es in 48 hours, and until the voting is over, we aren’t allowed to change it.  But we have a ton of features partially completed that we had to pull because we didn’t want to ship broken and incomplete features, they include:

  • Source Browser:  We want to provide a similar source browsing experience to CPAN in this respect, letting you quickly see how someone is doing something.  We already have most of the infrastructure for this, because we have downloaded the source tarballs.
  • Sitemaps:  We are adding Sitemaps, so that all search engines can find the modules easily.  Currently finding modules is an odd combination of using command line tools or getting lucky with a web search.
  • More Github integration: The vast majority of Node.js modules are hosted on Github, so we want to do things like show module development activity, and use that to provide sorts on things like Category pages.
  • Your ideas: Nodul.es is open source.  We want to make it the best module browser for any language out there.  Submit Ideas, submit pull requests, lets get going!

by Paul Querna at September 02, 2010 05:39 PM

September 01, 2010

Ashley

August 30, 2010

Bjorn

August 29, 2010

Laney

OpenPGP key transition

I recently decided, in advance of any future events I may attend, to join the bandwagon and transition away from my old 1024D key (20BFCDC7) to a lovely new 4096R key (1C5041D4). This post is my transition announcement. You can find the transition document here, and below. Both keys will still be valid for the time being, but I shall not be renewing the old one after it expires on 2010-11-26, and it will be revoked shortly thereafter. As far as possible, I'd appreciate all correspondence to use the new key.

If, after reading the transition document, you feel comfortable signing my key (and have signed the old one), then I'd appreciate your signature via email.

(format of transition document cribbed from Matt Zimmerman's transition, thanks!)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1,SHA256

,----[ OpenPGP key transition ]
| Time-stamp: <2010-08-30 00:08:28 laney>
`----

I've recently set up a new GPG key, and will be transitioning away from
my old one. I have done this in order to migrate to a larger RSA key and
stronger hash functions, and NOT due to any known key compromise.  The
old key will continue to be valid for some time, but future
correspondence should use the new one wherever possible.

This message is signed by both keys to certify the transition.

The old key was:

pub   1024D/20BFCDC7 2007-11-27
Key fingerprint = 2B1E 742E B9CA C441 EA0B  4CBA 3F2D 129C 20BF CDC7
uid                  Iain Lane <iain@orangesquash.org.uk>
uid                  Iain Lane <laney@ubuntu.com>
uid                  Iain Lane <ial@cs.nott.ac.uk>
uid                  Iain Lane <psxil@nottingham.ac.uk>
sub   2048g/5D64CB7D 2007-11-27 [expires: 2010-11-26]

and the new key is:

pub   4096R/1C5041D4 2010-08-29 [expires: 2013-08-28]
Key fingerprint = 3D0E FB95 E7B5 237F 16E8  2258 E352 D5C5 1C50 41D4
uid                  Iain Lane <iain@orangesquash.org.uk>
uid                  Iain Lane <psxil@nottingham.ac.uk>
uid                  Iain Lane <laney@ubuntu.com>
uid                  Iain Lane <ial@cs.nott.ac.uk>
sub   4096R/8FB24134 2010-08-29 [expires: 2013-08-28]

To fetch my new key from a public keyserver, you can run:

gpg --keyserver pgp.mit.edu --recv-keys 1C5041D4

and verify its fingerprint matches the one above:

gpg --fingerprint 1C5041D4

If you already know my old key, you can now verify that the new key is
signed by the old one:

gpg --check-sigs 1C5041D4

If you have previously signed my old key, and you're satisfied that
you've got the correct new key, then I'd appreciate it if you would sign
my new key as well:

gpg --sign-key 1C5041D4

Then I would appreciate it if you would mail me the signed key. A lot of
people like to use caff(1) to sign keys.

Thanks,
Iain Lane
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkx66HUACgkQPy0SnCC/zccWmwCfXgHVQkIAwjwgSosANYdaCcTd
LoUAn1Emf+obkXmW40qjs7PSDlMv2rN8iQIcBAEBCAAGBQJMeuh1AAoJEONS1cUc
UEHUqTsQALTBe1wAtZ/8StNo7GwMgnFUTmfmgyGG5sX6I3d8N2vUOhQ3uKYMLrxE
5JrtpG06DyTjU4woVDoCkUGtatIVhkaY7Q/U04l/t6w1wC+lfP+EGos117JYtzc4
rFDttJHlo2CzIz695Gk5T+4JRax1VBF8PEQgVqvwMHKG5C+L87QtqDgLFZ1vElQK
qIFIokU7Gfo3tNXQB9uwQlgN4m46nfL/j8FcqWYNOBD5SiB0A78zuDljHKHtGiEi
AYFRjHZA2mha3xePCqOc7uC8dO9Lyqn9RK9bbcFgbW+G3M8o7ZQd/0a5SQifBMp6
8IyFdRuPHIdAF9YcBMaW1cf+ioEL9OIHTMmq3vmGVJIRjwzTtbl/CXaBCAdMvJeh
SlPnm256/wTUkc2np9erJQ9JwfRB84neT3XVd3HE7AdTuMd9E3BTY2Lqav3YI8kI
rVMPD5Yi0tXMfz6dUSU9hKg0ttiklkY9whtSf4sTKvsyw+ZM5apFFK/a0aXaitUA
A0xP7SSc4g5vXd3YBm5JvO4DEFcmuk+lRLSxUy4g7rWWB3hdwwI6jgb9+b7TTHBC
vW4eH4wG7JH4/rIlIwLndQqkbzkY+FMzHfWvMf/xwKCjeHfKF4iw96kUHahu/arR
d2vzHUdiWpQwhsb15EkNcS5De5vE/vjgHHehkmuZwmhjyIzQNNyC
=woWY
-----END PGP SIGNATURE-----

by Iain at August 29, 2010 11:24 PM