if request.META['HTTP_DNT'] == 1:

SUMO Release</a> Yesterday I sat in on webdev work group - really just a bunch of webdevs sitting in conference room G ("get to da choppa"). I overheard a discussion that showed me the mission of Mozilla permeates the entire organization. Here's an anonymous summary to protect the guilty and innocent:

Dev 1: Check out this 7-line DNT implementation for Site A.
Dev 2: You know the B group is going to hate DNT.
Dev 1: Yeah.
Dev 2: I don't know if it's a battle I want to fight.
Dev 1: It's not what we want - it's what our users want.

It's the same attitude and perspective we had when we first discussed Do-Not-Track at a brown-bag - we should do what our users want. We discussed what Google and Microsoft are implementing, but there are problems with cookie blacklists, as the EFF pointed out. The one I heard most at our brown bag was that NAI "opt out" doesn't specify whether a user opts out of all tracking or only out of the behavioral advertising. The quote I remember from the Mozilla Privacy discussion was: "A Do-Not-Track header is the clearest message a user can send to advertisers that they don't want to be tracked."

It's also the most technically elegant solution. Check the NAI opt-out page with Firecookie and you see the following opt-out cookie: values - TOptOut: 1 (bing, live.com, MSN), optout: 1 (collectivemedia, criteo), id: OPT_OUT (doubleclick), opt: 1 (fetchback), optout: * (invitemedia), qoo: OPT_OUT (quantserve), NETID01: optout and NETOPTOUT: true (revsci), a: cOPT_OUT (rfihub.com), AO: o=1 (yahoo). And that's just from the dozen networks from which I've opted out. The page shows me at least two dozen more networks from which I still need to opt-out. I just did this exercise a couple weeks ago. How often do I need to visit this page to opt out? Where are these new networks coming from?

And a user doesn't have the same cookies between browsers so they have to get the opt-out cookies on every device (think Desktop, phone, tablet, etc. unless they use Firefox Sync of course), and have to get all the new ones on every device too. Google can help you if you clear your cookies - but that's the only issue Keep My Opt-Outs seems to address.

Compare all this with a header:

DNT: 1

It's efficient (6 bytes), decentralized, permanent, extensible (DNT: 2, 3, 4, 'all', 'behavior', etc.) and if it comes down to it - enforceable. It isn't a perfect solution, but I love working at an organization with top-notch engineering talent AND a pervasive focus on the mission to make the web better for everyone. Mozilla FTW.

__init__

I'm embracing a lot of things recently - python, django, my underused programming handle, and now blogging. I liked my old blog, but I didn't have the time nor leeway to post what I was doing all the time. Jay Patel, product manager for MDN, encouraged me to blog about what we're doing there so here I go:

from mozilla.webdev import Job

class MDN(Job):
    def begin(self):
        from mozilla.webdev.mdn import developer.mozilla.org as devmo
        devmo.enhance(features={
            '0.9.3':'Demo Studio', 
            '0.9.4':'Learn HTML5', 
            '0.9.5':'Single Sign-On'}
        )

        from mozilla.webdev.mdn import dekiwiki
        from mozilla.webdev.sumo import Kitsune
        class Kuma(Kitsune):
            pass
        dekiwiki.moveto(Kuma)

There are two parallel tracks for MDN - 0.9.x and 1.x.

0.9.x is a track of enhancements to the existing MDN django, dekiwiki, and phpbb systems. In 0.9.3, we're making an HTML5 Demo Studio, somewhat like the Personas Gallery for HTML5 demos. (Duh.) 0.9.3 will also feature many new locales in the django application, and performance improvements for django & dekiwiki. Our MDN staging server showed a YSlow! score increase from 81 to 91 for django; from 79 to __ for dekiwiki. We're still defining the other 0.9.x milestones.

1.x to 2.0 is a large rewrite of MDN moving the wiki docs from dekiwiki to 'kuma' - a clone of 'kitsune' - the django wiki application we use for SUMO. Both are japanese words (a django theme?); 'kitsune' means (demonic shape-shifting) fox and 'kuma' means bear. We might describe Mozilla support users as foxes and Mozilla developers as bears. Dekiwiki is a good wiki platform, but we've run into problems maintaining it, and we want to move all of MDN to django to leverage django libs and features - especially those developed by SUMO and other Mozilla django projects.

I'm mostly working on Kuma now - cloned kitsune and will merge mdn when 0.9.3 is solid. Then we should be able to branch kuma to an 'mdn' branch for the rest of the 0.9.x work and merge each milestone into 'master' with the 1.x work.

At least that's the plan for now. Keep tabs on the MDN wiki page, MDN bugzilla queue, and join us in #mdn to follow our MDN dev activity. We hope to make MDN a premier web dev resource and I think what we're doing now is going to help us get there.

quick blurb on NoSQL

I've spent about as much time thinking about this as NoSQL developers spend thinking about their schema, but here it is anyway.

At SourceForge I'm presently developing and maintaining a few different systems using all kinds of web tech's and languages - PHP, python, solr, Postgres, MySQL, and mongo. One thing I'm noticing is that the mongo systems are something of a breeze to write, and then a real challenge to maintain - especially debugging. Our mongo experts mostly say that the tooling for mongo is just 'immature.' I'm sure they're right, but that also points toward what I think might be a fundamental difference in the two modes of development.

AFAIK, there aren't any "old" NoSQL systems around? Mongo is only out since 2007, and Cassandra since 2008? We started using mongo early 2009, and even just one year out it feels so much more painful to maintain than our Postgres or MySQL systems that have been around since 1999! My theory is that NoSQL sacrifices maintenance and future development effort for the sake of startup development. I even made a neat drawing:

<img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 600px; height: 200px;" src="http://1.bp.blogspot.com/_Fa_U5q7fBBY/S_rDEmp6JtI/AAAAAAAAAHA/HzWpTb8kA5U/s400/schema_vs_nosql.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5474902780885477074" />

Initially mongo seems to save on effort until the first valley - initial launch. At this point, the system launches and typically starts interacting with other systems and with users - data requirements change towards reality, which means code - i.e., function and logic - changes, not just model. In our environment, all other systems that use the data must also change their code which seems harder than the originating code. The code and the data are so intermixed that seemingly any and every change in either domain makes knock-on effects that have to be addressed.

In a typical schema data system, we front-load a bit of data modeling effort. After launch, when we get new and changing data requirements we typically address the schema changes that might be involved, and may have to write a data migration/transformation script. But beyond that, it seems we don't have to worry about data integrity or any other knock-on effects. We can change some data-access or model classes and be on our way.

So, am I just an old crusty developer shouting at these NoSQL kids to "get off my lawn!" ? Or has anyone else noticed this too? Maybe it's just the heterogeneous mix of NoSQL + schema that's killing me. Just seems like such a pain for not enough benefit?

a rant about ranting

Disclaimer: this post is totally my own opinion and does not reflect anything from SourceForge at all. that's why it's here on this blog.

I'm angry and want to shoot my mouth off - perfect opportunity for a long-lost blog.

We - i.e., SourceForge are getting some crap for blocking sanctioned countries from our site. That's fine - I'm actually ticked off about it too. And many people out there are making sound and solid comments about the action - not just the ones defending SourceForge; there are some good solid critical comments too.

But then you have people who say something like this:

Sourceforge, you suck! You suck so badly, I’ll hereby guarantee you that I’ll not only recommend *anybody* stay the heck away from you scumbags, I’ll actively let everybody know that you’re the scum of the earth. Shame on you! Shame!

With love from pyalot. Well pyalot, since we're all good to judge and criticize each other, let's get started ...

So you are Florian Bösch. Okay Florian, let's see here ... you've worked at Systor(?), Accenture, and DWS. Systor doesn't seem too keen on open-source?, nor does DWS. Ah, looks like Accenture has some good open source work; but what's this?! It's right alongside Microsoft and Oracle solutions?! OMFG! You are the scum of the earth for working with them! GRARRR!

Or, if I take an extra minute, I find you're actually a stand-up guy and developer and a good contributor to open-source!

Couple lessons here:

  1. we're not anonymous on the internet anymore; I found all of this info on Florian starting from his sf.net user page
  2. when we only look at a single facet of any news story or party, we get a very distorted view
  3. </ol>

    I actually sympathize with Florian's sentiments - blocking access from countries goes against the FLOSS ideal. But at the end of the day, SourceForge is a US company under US law. And if we're not law experts we should probably speak our opinion quietly or not at all.

OSCON quotes - day 1

I want to share quotes I overhear at OSCON 2009. Most of these are from fellow SourceForgers ...

  • I'm a fan of the minimalist beauty of the electronic device.
  • Your API is not a beautiful fucking snowflake.
  • I am as asymptotically close to clean as possible.
  • You're going to be happy about not being happy.
  • I'm German, we know how to deal with crowds.
  • It doesn't matter, you eat it with rice and bread.
  • I fucked the grower to get this shit.
  • It's amazing what you can fit up your ass with a little practice.
  • I don't like my balls soaked in sugar syrup.
  • People shouldn't call each other tar pit.
  • There's nothing you can think of with an olive that I haven't already video'd and sold on the internet.
  • Is this the placenta thing?
  • All eating human flesh stories start with, "I was going to med school."
  • </ul>