Digifesto

Personality

Maybe what unites the open-* movement is a kind of personality.

Discomfort with authority, desire for autonomy, but a yearning for community nonetheless.

The movement aspires to a society that supports itself and acts collectively without preventing any of its constituents from being their authentic selves.

Hence all the importance of aggregating patterns from individuals and then using those patterns to inform (but not coerce) other individuals. Hence the active politics of forking and merging. Hence the flattened hierarchies. And so on.

Dewey’s Social Ethics

From Elizabeth Andersons’ excellent Stanford Encyclopedia of Philosophy article on (John) Dewey’s Moral Philosophy. Emphasis mine:

As a progressive liberal, Dewey advocated numerous social reforms such as promoting the education, employment, and enfranchisement of women, social insurance, the progressive income tax, and laws protecting the rights of workers to organize labor unions. However, he stressed the importance of improving methods of moral inquiry over advocating particular moral conclusions, given that the latter are always subject to revision in light of new evidence.

Thus, the main focus of Dewey’s social ethics concerns the institutional arrangements that influence the capacity of people to conduct moral inquiry intelligently. Two social domains are critical for promoting this capacity: schools, and civil society. Both needed to be reconstructed so as to promote experimental intelligence and wider sympathies. Dewey wrote numerous works on education, and established the famous Laboratory School at the University of Chicago to implement and test his educational theories. He was also a leading advocate of the comprehensive high school, as opposed to separate vocational and college prepatory schools. This was to promote the social integration of different economic classes, a prerequisite to enlarging their mutual understanding and sympathies. Civil society, too, needed to be reconstructed along more democratic lines. This involved not just expanding the franchise, but improving the means of communication among citizens and between citizens and experts, so that public opinion could be better informed by the experiences and problems of citizens from different walks of life, and by scientific discoveries (PP). Dewey regarded democracy as the social embodiment of experimental intelligence informed by sympathy and respect for the other members of society (DE 3, 89–94). Unlike dictatorial and oligarchic societies, democratic ones institutionalize feedback mechanisms (free speech) for informing officeholders of the consequences for all of the policies they adopt, and for sanctioning them (periodic elections) if they do not respond accordingly.

Dewey’s moral epistemology thus leads naturally to his political philosophy. The reconstruction of moral theory is accomplished by replacing fixed moral rules and ends with an experimental method that treats norms for valuing as hypotheses to be tested in practice, in light of their widest consequences for everyone. To implement this method requires institutions that facilitate three things: (1) habits of critical, experimental inquiry; (2) widespread communication of the consequences of instituting norms, and (3) extensive sympathy, so that the consequences of norms for everyone are treated seriously in appraising them and imagining and adopting alternatives. The main institutions needed to facilitate these things are progressive schools and a democratic civil society. Experimentalism in ethics leads to a democratic political philosophy.

My suspicion is that John Dewey’s ethics would provide a substantive philosophical foundation for the latest swathe of open government and “Gov 2.0” initiatives, if anyone bothered looking for one.

Economics of Open Source

Hat tip to Paul Ramsey for the link to this blog post by Stephen O’Grady, “The Economics of Open Source: Why the Billion Dollar Barrier is Irrelevant.”

O’Grady argues that despite protests from those who haven’t seen the billion-dollar-value FOSS company of their dreams, open source business is doing great.

The question, remember, isn’t whether businesses and developers are consuming and producing open source software. They are, in droves. Nor are there questions as to whether or not the software can be sold successfully on a commercial basis: it is, every day. The only remaining questions really regarding the economics of open source are whether they can duplicate the margins of their proprietary predecessors, and frankly I think most customers hope they don’t.

This brings up an understated point about the economics of open source: that the proprietary software production model is a monopolistic model and hence bad for technology consumers. The high margins of proprietary software companies are due in part to monopolistic rents. The non-competitiveness of the proprietary software market leads to bloated, inefficiently created, and poorly supported software.

Another, related economic issue is the challenge of open source business, which O’Grady sums up like so:

Part of the challenge for open source software vendors, of course, is the fundamental difference between open source software and proprietary alternatives, not to mention other tangible goods: the primary asset to be sold is (generally) freely available.

I think this is a poor characterization of the problem. The problem is not that the asset to be sold is freely available. That would assume that software is the asset to be sold. But if an asset is “anything … capable of being owned or controlled to produce value and that is held to have positive economic value,” then free software can’t be the asset.

So what has to be primary asset for open source software vendors? The time of software experts who can do development or support.

At this point the analysis gets confused, because there are two issues at stake. Would-be open source billionaire entrepreneurs become disappointed that consulting and support around open source doesn’t scale as well as their proprietary software forebears. But this reaction is accentuated by another, independent problem: the free-rider problem around developer and support services.

Open source software vendors are in the business of shedding off public goods in the form of (improvements to) freely available software. This is why make sense for an open source vendor like OpenGeo to consider itself a social enterprise: it “does good” merely by operating.

But it also means that these services are going to be under-valued in the market because it is so difficult to capture the consumer demand for a software improvement as revenue.

How much does each user of a free software project value this new feature? Ok, sum that. That’s how much the open source vendor should be able to raise, in principle, for developing that feature–if there is only one potential supplier.

Proprietary software companies are able to capture this demand for the software improvements through the mechanism of selling the software itself. Free software developers won’t be able to raise as much–because they compete with each other as suppliers (which is good for society!)–but there is still a much bigger market there than is currently tapped into.

The kind of advance that will fuel open source business moving forward is mechanisms that allow for the capturing of this latent consumer demand.

The most literal case of this “crowdsourced microfunding,” a model that is greeted with mockery whenever I talk about it to people with industry experience, but which has recently had a preliminary success story: Diaspora’s skyrocketing funding via Kickstarter. Kickstarter, as opposed to other collaborative funding sites that have come and gone like Fundable.org, looks like it has some additional incentive structures built in that eliminate some of the Nash equilibria in the collaborative funding game in which not enough actors participate. (New York Times coverage and mass resentment towards Big Brother don’t hurt either.)

But there are other models for solving this problem as well. For GeoNode, the World Bank’s CAPRA initiative is seeking out partners to build a global community of funders to be in partnership with the developer community.

If this model works and is replicable, the potential impact on the software business world could be immense. Strategic cooperation between major funders would allow them to efficiently channel funding towards development while regulating against free-riders among themselves. The result would be a highly efficient market for software development–more efficient than either the proprietary software market or the free-rider-ridden free software market.

These speculations are consistent with O’Grady’s analysis: none of this leads to a billion-dollar corporation. But it does lead to a thriving economy of smaller scale consultancies, valued fairly according to their expertise, generating a torrent of free software available for all. Isn’t that the best outcome of all?

Going Global

I am attending the Global Earthquake Model annual outreach meeting this week. The ambition of the project–a global computational engine for earthquake hazard, risk, and economic impact–is awe-inspiring. The people attempting it are extraordinarily daring.

One anecdote from this morning struck me as a potent illustration of why and how GEM will is so important. Ross Stein admitted candidly that currently, seismology is “the best racket in town,” because on a regional level there is no way to test their scientific predictions. A typical result might ascribe a 30% chance of an earthquake striking an area within a fifty year period. By the time the data has been collected, the scientist has retired.

Not so, argues Stein, with a global earthquake model. A model associating strain on fault lines (for example) with seismic hazards that has global scope will be tested whenever and wherever an earthquake strikes. So a global model opens up the scientific inquiry on top of allowing for the dissemination of results.

This is just one effect of one facet of GEM’s anticipated work. I’m already impressed.

The Global South does IT better

A few weeks ago I visited the offices of Peru’s Comité Coordinador de la Infraestructura de Datos Espaciales del Perú, or IDEP, who are responsible for building that nation’s spatial data infrastructure system.

They have built a very impressive system with comparatively few resources using a largely open source stack of software–MapServer, MapBender, Mapfish, GeoNetwork, Joomla–and are actively looking for ways to innovate further.

In a meeting there, Max Taico, from the National Office of Electronic Government, explained why they had turned to open source software. It wasn’t just the fact that it was free–ESRI gives them free licenses of ArcGIS Server.

Open source software works for them because their government procurement practices are slow and hard to work with. But with free software (‘software libre’, as they call it), they are able to just install things on a server and get it to work. Indeed, while we were there they logged us onto the server and invited us to look around at the system and install new software if we thought it would be helpful.

Compared to the heavy bureaucracies we are used to working with, it would be an understatement to call this “refreshing.” Governments (including international governments) based in the U.S. maintain strict control over their software inventory and often stipulate what software is or is not allowed on their computers.

This is a crippling policy in a world full of great free software. It’s appalling to guess how much time (and, hence, money) is wasted by, say, the World Bank’s commitment to using outdated browser and office software.

Meanwhile, in Lima, a project with almost no permanent staff working on it was able to develop a system that is truly cutting edge. Their government IT culture there works contiguously with the global hacker culture, which is interested in getting things done with as few obstacles as possible.

An inspiring thought is that because this way of doing things is so much more effective, the Global North is learning that it should change its ways. In her keynote address to this week’s Understanding Risk conference, the World Bank’s CIO Shelley Leibowitz announced to an applauding audience that they were going to drop their mandated use of the universally loathed Lotus Notes.

Times are changing. It’s nice to know that part of that change is a long-due change in leadership.

Sneaky Google Search UI Design

I am very impressed by Google’s web design team right now.

Maybe you’ve noted this; maybe you haven’t. Go to Google’s home page right now. Enter the URL into your browser, then hit “Enter.” Then do nothing.

What do you see? Nothing but Google Search, pure and simple.

It’s not until you trigger some browser event by moving your mouse over the web page document or causing the search field to lose focus that the rest of the user interface fades in.

Smooth.

It’s hard to do a before/after in a screenshot because (I didn’t know this…) Print Screen triggers the necessary browser event. But in fact that makes it easier to catch it mid-fade. Note the weak blues:

Google's links fading in

This is brilliant. It shows, first off, that the designers were very familiar with what is possible in the browser. Rather than seeing a page as a static document, it is a temporal continuum. Though this isn’t news to a lot of web designers, this sort of design ingenuity would get lost in a lot of organizational web design workflows because this kind of detail can’t get communicated to developers easily by wireframes or mockups.

The design shows a sensitivity to user psychology that is almost touching. The user who goes to the Google home page to search for something will never see the links. Load page. Text field in focus. Type. Enter. Done. Most web sites would consider this kind of streamlined workflow the epitome of design. But this design doesn’t just provide the attentive user an unobstructed path, it shields their unconscious from distraction.

Bravo.

And yet I find something insidious about it. It make me feel like Google is hiding something. People used to say things like, “Google’s search interface is so clean and simple! Google is just about providing really smart web search. Google is just smart guys hiding unobtrusively behind text field that can’t possible take over your world.” It’s a precious public image.

Their home page’s increasing clutter belies that image with extra tabs, advanced search options, links to Business Solutions, and more. And now that search results have a left sidebar with such simply utilitarian features as the Wonder Wheel, even our lizard-evolved brain stems may start to suspect that Google has outgrown its original simplicity. It has become impossible to ignore the existence of the corporate behemoth behind the services we’ve entangled ourselves in.

The fluidly fading design tilts toward innocent bliss. Awareness of Google-the-corporation is now strictly opt-in. I can’t tell if that is considerate or creepy.

Data Uploading on GeoNode

We’ve made great strides in GeoNode development in the past few weeks, due in part to the addition of Luke Tucker, on loan from Civic Works, to the team.

The main improvements lately have been ones slated for the 0.1.2 milestone, which focuses on basic data management through the web application interface.

The most important improvement is the data upload functionality. We provide a web interface for SHP and TIFF upload and then push the file to GeoServer using its REST configuration API and gsconfig.py. The layer is then exposed via OCG services like any normal GeoServer layer, and so is available for use by OpenLayers and GeoExt applications, for example.

Hat tip to GeoCommons for inspiring the UI for uploading the multiple files needed for Shapefile data.

You can get a taste of some of the other improvements by checking out the Data and Map information pages. In GeoNode, both data sets and maps (compilations of data, with a layer order and styles specified) are first-class content. We want to let users transition seamlessly between working with data and working with maps in order to smooth out the web GIS experience.

The “information pages” (I think we are looking for a better name for these, internally) serve as dashboards to a particular data set or map, and expose the relationships internal to the content. By viewing which maps a data set is a part of, the user can find out about who trusts the data, who finds it authoritative. This is just the first of many ways we plan to let social use of data provide relevant metadata.

Digifesto.com

I finally got the domain name on this sucker mapped properly.

But I’ve never been able to figure out the appropriate top level domain for this blog.

COM — It’s not really commercial.
ORG — I’m not an organization
NET — My favorite, but actually wildly inappropriate

INFO, ME, NAME are all bogus. What’s the solution?

What’s this GeoNode thing?

I’m going to start blogging here about the GeoNode.

If there is anything I’ve learned at The Open Planning Project and OpenGeo, it’s that it is critical for the success of open source projects that they be “truly open”–not just with an open source license “slapped on,” but with a transparency built into its development and management process.

So I am chagrined that the GeoNode, the project I’m currently most involved with, has been developed in relative obscurity. At OpenGeo, we’ve been treating it like an internal project, and though its task tracker is open, documentation is sparse.

The reason for this is simple: we have been too busy building it to properly groom it. But hopefully that will change soon.

So what is the GeoNode? Here’s the backstory, as articulated by Eddie Pickle:

The GeoNode project is an open source initiative backed by the World Bank, OpenGeo, and others with pilot programs in El Salvador and Guatemala. It aims to give a modern spin to the idea of the spatial data infrastructure with an eye to the use and reuse of data, encouraging collaboration, and promoting open data exchange as a default. Initially, the development of the GeoNode has focused on serving and visualizing the data created by the Central America Probabilistic Risk Assessment (CAPRA) to assess and mitigate the risk due to adverse Natural Disasters.

At its core, the GeoNode is based on open source components GeoServer, GeoNetwork, Django, and GeoExt that provide a platform for sophisticated web browser spatial visualization and analysis. Atop this stack, the project has built a map composer and viewer, tools for analysis, and reporting tools. The GeoNode also supports facilities for styling data as well as collaborative features like ratings, comments, and tagging for data, maps, and styles. The GeoNode is built on four key tenets: Collaboration, Distribution, Cartography and Data collection.

This is the GeoNode vision–a vision which is current under (rapid!) development. But at the time of this writing, the use of the present tense in the paragraphs above is sometimes ambitious. You can check out the demo that we update weekly from GeoNode trunk here.

In its current state, it requires some explanation. What you’re seeing is a Django site that is configured to work against a GeoServer instance that contains the spatial data hosted by the GeoNode. The map on the front page is a GeoExt map embedded as a widget. This Map-As-Embeddable-Widget is a feature of the GeoNode’s Map Composer, which is closely related to GeoExplorer, OpenGeo’s main GeoExt-based web GIS client.

The site’s theming is, as requested by our partner and client, made to look like the World Bank’s CAPRA website. Rolando Penate has been working ideas for generic GeoNode themes that we hope to implement soon. His design wireframes show off some of the potential of these themes as well as the features that we are scheduled to implement in the coming year: user registration, commenting and rating, a groups.

The purpose of all these “Web 2.0” features (cringe!) is to provide a layer of social metadata over the geospatial data and ISO metadata that we will be supporting with an integrated GeoNetwork instance. If the internet has proved anything, it’s that the best catalogs are those created dynamically from real usage. So our plan is to integrate cutting-edge web GIS tools with the social features of the site so that as users participate in the GeoNode environment, we collect data about their activity and use it to refine search results. We joke about whether the GeoNode aims to be the MediaWiki/Twitter of maps, or the Facebook/YouTube of maps, or the Yelp/Wordpress of maps…but really these features are all so commonplace on the web now that it’s not a matter of imitating the market leaders. It’s a matter of taking solid modern principles of data management and bringing them intelligently to the Spatial Data Infrastructure domain.

We are several months away from these features, however. For now we are focusing on building a solid backbone of tools that will make the GeoNode attractive to users.

If you’ve been following GeoExt development lately, you may have noticed Andreas Hocevar’s contributions of JavaScript client code that works against the Mapfish Printing module. That’s all been core development work funded by our GeoNode partnership.

Another neat budding project worth noting is gsconfig.py, developed primarily by David Winslow. It’s a Python library for interacting with GeoServer’s catalog via its REST API. We are going to be using it to provide through-the-web data upload and metadata management through a Django-powered user interface.

These two open source contributions highlight what’s for me one of the coolest parts of our GeoNode development: that we are dedicated to bringing as much as possible of the work for the GeoNode back into widely recognized open source geospatial projects or splitting parts out into general purpose libraries. This is possible because of the NGO and government community partnership around the GeoNode that is being spearheaded by Stu Gill, of World Bank CAPRA. Stu is a visionary who sees very clearly the decisive role openness will play in the future of SDI, GIS, etc. And he understands that openness will play an important role all the way down to the open source core, and has been reaching out to like minds.

OpenGeo’s GeoNode team has been hard at work on the prototype GeoNode software and the open source software improvements that it depends on, but in the coming months we hope to shift our priorities more towards documentation and community. We’ll be announcing those advances through GeoNode.org, the official site of the GeoNode project. But we’ve unintentionally left the lid on this for too long. In the short term, I’ll be blogging informally about GeoNode progress week-by-week here, because it’s high time we got the GeoNode into the open.

Eric Florenzano’s Programming Meme in Prolog

I was pointed to Eric Florenzano’s Programming Meme today. I decided to take up the challenge with a language I’ve always wanted to learn: Prolog!

A few hours later, and I got something that works. I can’t say it’s at all elegant, but it’s late and at this point I’m just happy I figured out the language’s I/O. Any pointers on Prolog are welcome.

Without further ado, here’s the meme:

Rules:

1. Implement a program that takes in a user’s name and their age, and prints hello to them once for every year that they have been alive.
2. Post these rules, the source code for your solution, and the following list (with you included) on your blog.
3. Bonus points if you implement it in a language not yet seen on the following list!

The List:

1. [Python] http://www.eflorenzano.com/blog/post/trying-start-programming-meme
2. [Bash] http://aartemenko.com/texts/bash-meme/
3. [C] http://dakrauth.com/media/site/text/hello.c
4. [Java] http://adoleo.com/blog/2008/nov/25/programming-meme/
5. [Python 3] http://mikewatkins.ca/2008/11/25/hello-meme/
6. [Ruby] http://stroky.l.googlepages.com/gem
7. [Ruby] http://im.camronflanders.com/archive/meme/
8. [Lisp] http://justinlilly.com/blog/2008/nov/25/back-on-the-horse/
9. [Lua] http://aartemenko.com/texts/lua-hello-meme/
10. [Functional Python] http://aartemenko.com/texts/python-functional-hello-meme/
11. [Erlang] http://surfacedepth.blogspot.com/2008/11/erics-programming-meme-in-erlang.html
12. [Haskell] http://jasonwalsh.us/meme.html
13. [PHP] http://fitzgeraldsteele.wordpress.com/2008/11/25/memeing-in-php-2/
14. [Javascript] http://www.taylanpince.com/blog/posts/responding-to-a-programming-meme/
15. [Single-File Django] http://www.pocketuniverse.ca/archive/2008/november/27/florenzano-factor/
16. [Prolog] https://digifesto.wordpress.com/2009/11/17/eric-florenzanos-programming-meme-in-prolog/

The Prolog solution:

getout(Name,0,[]).

getout(Name,N,Output) :-
        N > 0,
        N1 is N-1,
        Output = [[N, ') Hello, ', Name, '\n'] | Output1],
        getout(Name,N1,Output1).

doit :-
        write('What is your name? Remember to put a period after it, and put it in quotes if there are spaces.'), nl,
        read(Name),
        write('How old are you?  You\'re going to want to enter a number then a period here.'), nl,
        read(Age),
        getout(Name,Age,W  ),
        reverse(W,X),
        append(X,Z),
        concat_atom(Z, Out),
        write(Out).

Here’s an example of running it with SWI-Prolog:

?- ['meme.pro'].
Warning: /home/sb/meme.pro:2:
	Singleton variables: [Name]
% meme.pro compiled 0.00 sec, 8 bytes
true.

?- doit.
What is your name? Remember to put a period after it, and put it in quotes if there are spaces.
|    'Sebastian Benthall'.
How old are you?  You're going to want to enter a number then a period here.
|    24.
1) Hello, Sebastian Benthall
2) Hello, Sebastian Benthall
3) Hello, Sebastian Benthall
4) Hello, Sebastian Benthall
5) Hello, Sebastian Benthall
6) Hello, Sebastian Benthall
7) Hello, Sebastian Benthall
8) Hello, Sebastian Benthall
9) Hello, Sebastian Benthall
10) Hello, Sebastian Benthall
11) Hello, Sebastian Benthall
12) Hello, Sebastian Benthall
13) Hello, Sebastian Benthall
14) Hello, Sebastian Benthall
15) Hello, Sebastian Benthall
16) Hello, Sebastian Benthall
17) Hello, Sebastian Benthall
18) Hello, Sebastian Benthall
19) Hello, Sebastian Benthall
20) Hello, Sebastian Benthall
21) Hello, Sebastian Benthall
22) Hello, Sebastian Benthall
23) Hello, Sebastian Benthall
24) Hello, Sebastian Benthall