FLOSS Project Planets
:
Graham Dumpleton: Dropping support for Apache 1.3 in mod_wsgi.
Michael Foord: A Little Bit of Python: Episodes 5 and 6
Roberto Alsina: Finding a programmer that can program.
If you haven't read Jeff Atwood's Why Can't Programmers.. Program? go ahead, then come back.
Now, are you scared enough? Don't be, the problem there is with the hiring process.
Yes, there are lots of people who show up for programming positions and can't program. That's not unusual!
It's related to something I read by Joel Spolsky (amazingly, Jeff Atwood's partner in stackoverflow.com).
Suppose you are a company that tries to hire in the top 1% of programmers, and have an open position.
You get 100 applicants. Of those, 99 can't program. 1 can. You hire him.
Then the company next door needs to do the same thing. They may get 100 applicant. 99 can't program ... and probably 80 of them are the same the previous company rejected before!
So no, hiring the best 1 out of 100 is not a way to get a programmer in the top 1% at all, that's just statistics intuition getting the worse of you.
You don't want to hire in the top 1% of applicants, you want to hire in the top 1% of programmers. Different universes.
These two things are the two sides of the same coin. 99% of applicants are useless, that's why they are applicants, because they can't get a job and they can't get a job because they are useless as programmers.
So, judging programmers by the standard of the applicants you get is like judging quality of a restaurant by licking its dumpster.
But now, having taken care of this, how do you find a programmer that can actually program?
Easy! Find one that has programs he can show you!
I would never hire a programmer that can't show me code. There must be something wrong with him, because programmers write programs.
That's just what we do. If we didn't what kind of programmers would we be?
Let's see some obvious objections to my argument:
He wrote code for his previous employer and can't show it.
So, he did. What else has he written? Some open source code? Maybe snippets in a blog? Answers in stackoverflow?
Nothing? He has written nothing he was not paid to write? He is not who I want. He only programs for money, he lacks passion for programming, he doesn't enjoy it. He is probably not very good at it.
He is just finishing college, he has not written much code yet!
Why? What stopped him? He has been learning to program for years, what has he done with the knowledge he has been receiving? Saving it for his 25th brthday party? He has not practiced his craft? Not the programmer I need.
But having him show you code is not enough, of course. It also has to be good code, if you are serious about hiring excellent programmers.
So here's some bonus criteria:
- Check the languages he uses. If he codes COBOL for pleasure, he may or may not be what you want.
- Open source == bonus points: it means he is not ashamed of his code, plus it makes his credentials trivial to verify.
- If he leads a project with multiple contributors and does a good job he is half way to becoming a programmer/manager, so huge bonus points.
- Projects with long commit histories show responsability and a level head.
- Development mailing lists let you gauge his personality. Is he abrasive? Is he thin-skinned? Is he annoying?
Then there's the obvious stuff, references from previous employers, interviews, exercises, an such. But those are the least important filters, the most important thing is that he must be able to code. And showing you his code is the way to do it.
C.J. Adams-Collier: dlr-languages_20090805+git.e6b28d27+dfsg-1_amd64.changes ACCEPTED
I’m happy to announce that after the filing of an Intent to Package and nearly 2 years of work, IronRuby 0.9, IronPython 2.6b2, and the DLR are now in Debian. To my knowledge, this is the first package in Debian with direct and active upstream support from Microsoft.
Kudos for this release go to Jo Sheilds (package sponsorship & mentoring), Mirco Bauer (package sponsorship & mentoring), Matthias Klose (IronPython package review), Ivan Porto Carrero (IronRuby build/test support), Jim Deville (IronRuby build/test support), Jimmy Schementi (upstream point of contact @ Microsoft), Dino Viehland (IronPython build/test support), Michael Foord (IronPython build/test support), Marek Safar (mono c# compiler support), Ankit Jain (xbuild support), the folks on OFTC’s #debian-cli, Freenode’s #ironruby and GimpNet’s #mono, and the folks on the IronRuby and IronPython mailing lists.
This is my first package in Debian, too. I’m pretty ecstatic ;)
The Occasional Occurrence: Link: PiCloud Overview
Here’s a great overview of using PiCloud that goes beyond “hello world” type stuff.
For those of you who don’t know, PiCloud is a cloud computing platform for Python that aims to simplify the task of running code in “the cloud.”
cw
Edward J. Yoon: Driving on Bundang-Suseo highway
The scene looked like a road of cherry blossoms. The computer was in my trunk but, I couldn't control my speeding instinct. :)
Tim Bish: ActiveMQ-CPP now supports Message body compression
Biella Coleman: Libre Planet
There was a plug for an up and coming conference in my last post but it was a bit buried and it deserves a bit more attention: the Libre Planet Conference in Cambridge, MA. It is fast approaching but there are still spots, student rates, and funding for female attendees. Though I can’t go as I will be out of town, this seems like it will be a great event: excellent speakers, lots of interesting folks, and I am sure a fantastic set of discussions.
Jacopo Cappellato: Fiorentina's Mission Impossible
Nick Kew: Rebuilding
Last week, a couple of men appeared outside to do some minor works on the wall across the road from here. They were announced by signs warning that things would be happening for two days. OK, I can live with that, and as it turns out they weren’t a major disruption: no more than a little noise; no clouds of dust and fumes.
But having cleared the wall of the vegetation that was holding it up, they discovered that having stood for hundreds of years it was in imminent danger of falling down. So next day there’s a surveyor looking at it in detail: if the wall goes, the road and the houses are at risk! Evidently he too concludes that it’s falling down, because the powers-that-be move with lightning speed, and this monday new contractors appear to fix/rebuild the section of wall. I spoke to one of them, and he told me they had an emergency budget granted by the council in record time to get on with the works.
These new workmen are the Heavy Gang. As I write, my earplugs and closed (aaargh!) double-glazed windows are utterly ineffective against their equipment. If I open a window, the dominant aroma is petrol fumes. And having spoken to one of the men, I understand they’ll be here for a long time.
Ouch! I think I’d rather let the road take its chances
I should perhaps add that this is no ordinary roadside wall. We’re on a hillside, and the far side of the wall is a big drop. If you look over the wall, you look down on the roof of the newly-built three-storey apartment block on the far side, and recollect how those building works shook the whole surrounding area including road, houses and (presumably) wall.
View from my window
Stefan Bodewig: Lazy Sequence of Directory Descendants in C#
Chris Sells translated a Clojure implementation of a function that descends into a directory in a "lazy" manner by Craig Andera into C# but his solution is so C# 2.0 ;-).
Here's my take
static IEnumerable<string> GetDirectoryDescendants(string path) { return Directory.GetFiles(path) .Concat(Directory.GetDirectories(path) .SelectMany<string, string>(GetDirectoryDescendants) ); }where I'd hope C# 4.0's compiler will be able to deduce the types for the SelectMany itself. Interestingly the C# 3.0 compiler does fine when I use a lambda expression instead:
static IEnumerable<string> GetDirectoryDescendants(string path) { return Directory.GetFiles(path) .Concat(Directory.GetDirectories(path) .SelectMany(dir => GetDirectoryDescendants(dir)) ); }Will Stephenson: Develop Javascript Plasmoids on openSUSE
Aaron, Sandro, moofang, Shantanu and Diego have been hacking up a Plasma storm lately on the Javascript bindings for Plasma and the Plasmate builder tool. Since good code is running code, and running code is a lot easier when somebody else builds it and packages it, I've updated the Plasmate packages in KDE:KDE4:Playground to 0.1alpha2 and have updated the javascript bindings in our KDE SC 4.4.1 packages to include Aaron's latest errata - no need to update yourselves.
So it's even easier to take part in the Plasma Javascript Jam Session competition now.
And while you're at it, how about completing the loop by using our kde-obs-generator to package your plasmoids and make them available on kde-look.org, so others can start to download and improve them directly in Plasmate? Free Software virtuous circle FTW!
Guillermo Antonio Amaral (gamaral): Animus Me – 2010-03-10
Today on the even later gamaral show: Me and Gabriel Saldana from KDE Mexico kick butt and take names. (all in under 15 21 minutes)
Please send in your comments and ideas to: g@maral.me.
Arjé Cahn: What's wrong with portals?
This post clearly describes the problem that I see with all current portal implementations: they treat content as “just another application running inside a portlet”. When we stick to this paradigm, it will kill Portal. Content behaves very different from legacy apps, and simply offering a contextually disconnected content management portlet is not enough. Content deals with semantics and relationships: users expect a portal to be smart enough to render content that is related to the apps they see right there on their screen, and they expect content to be reused across different sections in a portal, wherever that makes sense. Not to mention user-generated content.
Wikis gave users the possibility to quickly create and collaborate on content, but they don't come with the visual application integration that Portals offer. And they lacked the degree of control of a decent content management system. Integrating Portal and CMS is more than just adding a 'content portlet'. Adding an in-context application to a Wiki page would be more in line with how users think. They navigate your online consumer portal, find a page that answers their question and then they want to act on it directly. The FAQ page on “How to request a new password” should render the “New password” portlet in-line with the article. This is just an example - but this is clearly the direction Wikis are heading as they're maturing towards something that resembles an integration of Portal and CMS, and they're leaving traditional Portals way behind.
Portal vendors need to move towards the Content Driven Portal. At least, this is direction we've chosen to go with Hippo Portal. Users want URLs that make sense, that say something about the information that can be found on a page. They want to pop the URL of a portal page into an email and send it to someone else and it should just work - within the appropriate security constraints of course. What applications are shown on the portal page should follow the context, not the other way around. People got used to this concept during the Wiki revolution, and they'll never want to go back.
Adriaan de Groot (adridg): Checkin’ out the goods
Just a touch of compliance today. If I wanted to do real compliance engineering, I would turn to gpl-violations.org (in Europe, and please note they are still looking for a new webmaster) or to Brad Kuhn/SFLC (in North America) to do the actual engineering and checking of product. But here’s a mostly happy story.
I spotted the LG NAS N2R1 at a local webshop. Two drives, DVD burner, UPnP, bla bla. Not something I need, but it struck me that that’s exactly the kind of device that does poorly in compliance — ships with Linux and busybox, no sources. So with my usual assumption of malice in place, I went looking. While the firmware downloads for the device (say from LG’s Dutch site) do not mention corresponding source code, the file is clearly and unashamedly a Linux image: a .zip containing a .bin which is actually a .tar containing a .tgz which is the result of tar czf - / on a Debian installation. Somehow I expected a firmware update to be a little more sophisticated than that, you know?
No README or other indications of the licenses in the firmware, but when I downloaded the users manual for the device, imagine my surprise to find pages 159-164 filled with license information: which parts of the firmware are covered by GPLv2, GPLv3, LGPL, other liceses, and a compilation of copyright notices and BSD variants. There’s a written offer for a CD with sources in the users manual. Pretty good, all in all — although of course one might consider checking that the sources are the complete corresponding sources for each firmware version.
But this brings me to a mystery point in the GPLv2. You may distribute versions of the Program in object code (section 3) under the terms of section 1 and 2 provided you offer the source code in some way. So — since this firmware is clearly distribution in object form — we need to check if the conditions are satisfied. The source code offer is ok. But what does “under the terms of Sections 1 and 2 above” mean? Section 1 is about verbatim copies of source code; section 2 is about modified versions (which might be understood to include object form). I guess the question comes down to this: does the condition in section 1, “give any other recipients of the Program a copy of this License along with the Program” apply to distribution in object form, or not?