History of science fiction
A good map to navigate through the themes, authors and styles of the so-called scifi.
A good map to navigate through the themes, authors and styles of the so-called scifi.
«Just as demagogues may subvert democracy, so self-promotion may subvert meritocracy.»
Open Source Projects and the meritocracy myth
«Institutional memory comes in two forms: people and documentation. People remember how things work and why. Sometimes they write it down and store that information somewhere. Institutional amnesia works similarly. The people leave and the documents disappear, rot, or just become forgotten (as it were).»
Sign: an engineer. On institucional memory and reverse smuggling.
If you’re trying to make a successful tech product, 90% of the battle is that it works at all.
Havoc Pennington, on creating a successful product… and companies I would add.
Just found this online-ongoing comic by Sidney Padua created to the Ada Lovelace day in 2009. She depicts a steampunk alternative past where Charles Babagge and Ada Lovelace got to build the difference engine … to fight crime!! LOL. Here the chapters. Don’t miss this one: Lovelace and Babagge VS The economy, where they fight against the economic crisis of 1837, which has uncanny similarities to ours.
«And this is the essential broader point–as a programmer you must have a series of wins, every single day. It is the Deus Ex Machina of hacker success. It is what makes you eager for the next feature, and the next after that. And a large team is poison to small wins. The nature of large teams is such that even when you do have wins, they come after long, tiresome and disproportionately many hurdles. And this takes all the wind out of them. Often when I shipped a feature it felt more like relief than euphoria.»
Dhanji R. Prasanna (one of the engineers behind Google Wave), on how even the smartests fail to stick to the essential. Jointly with this other post, they both draw a good story for any startup to hear.
Certainly, not the number of features developed or bug fixes. It is even barely possible to compare activity between projects, as there are a high variability in terms of changesets: some people could send several little changesets and others just 1 big change, some project could have a special policy which affect the results (i.e.: make a commit formatting the code accoring to the style rules and other with the changes), etc. Some people could even argue that the language they are written in affects the number of changes (GRASS is written in C, gvSIG in Java and QGIS in C++) due to the libraries available or the semantics of every language. So, is it possible to find out something? Well, in my opinion, we can trace at least the following:
So, let’s make again the exercise of finding out what’s happening here:
Regarding gvSIG I guess you were looking at gvSIG main repo, I don’t know. Just for the records, I want to note that gvSIG 2.0 development has been exploded to several OSOR projects and because of maven modularity there are many different locations where activity happens. César Ordiñana has been maintaining the list of repos at gvSIG Desktop 2.0 entry at Ohloh http://www.ohloh.net/p/gvsig-desktop-2/enlistments
I agree that gvSIG development has decreased in activity by “main contracts” but it’s increasing the contributions my small contracts that public administrations make to improve some specific parts of the products. I like a lot this way, as it demonstrates the maturity of understanding of public bodies decision makers regarding what free software is (pay for improvements and maintenance, not just for new ultra-cool features).
There are more to discuss here but well, it’s enough for a blog comment
Nice reports!!
Yep, the report depicts the activity in gvSIG 1.X line.
I found interesting this serie of posts titled “4 big ideas in software development” according to Tim Ottinger and Jeff Langr. The serie was published monthly in Pragmatic programmers magazine:
Find below the statistics for mailinglist activity in GRASS, gvSIG and QGIS during the period 2008-2010. The first one shows data from the general user mailinglists for each project. Take into account that data for gvSIG agregated both international and spanish mailinglist due the reasons stated here.
The next one shows the same data (number of people writing and number of messages by month) for the developers mailinglists.
Well, certainly not the user base. The data shyly introduce us the trends, not the real user base. The model we adopted to study the projects reflects just a part of the community -which is arguably the engine of project- but don’t take the data as the number of users for each project. For sure, each one of our favorite projects has more users than those participating in (these) mailinglists!
Anyway, here some food for thought:
Within gvSIG design, MapControl is one of the core components. Its main responsibility is to allow users to interact with a map of layers (zoom in/out, edit geometries, …). That goal is achieved through two concrete tasks:
This post covers the first of above tasks in an introductory way.
MapControl is a java component, which uses the idea of Chain of Responsibility to delegate work on others. Let’s see how it works in this case with a good old graphic:

1 – MapToolListener: listen the mouse event and proxy it to the current selected behaviour (currentMapTool variable).
public void mouseReleased(MouseEvent e) {
try {
if (currentMapTool != null)
currentMapTool.mouseReleased(e);
} catch (BehaviorException t) {
throwException(t);
}
}
2 – Behaviour (MoveBehaviour in this case): takes the event, put together the context (MoveEvent) and redirects the petition to the proper ToolListener (listener variable).
public void mouseReleased(MouseEvent e) throws BehaviorException {
if (e.getButton() == MouseEvent.BUTTON1 && m_FirstPoint!=null) {
MoveEvent event = new MoveEvent(m_FirstPoint, e.getPoint(), e);
listener.move(event);
}
m_FirstPoint = null;
}
3 – ToolListener: carry on the task. In this case, the listener (a PanListener) make the viewport to update the extent with the new contents.
public void move(MoveEvent event) {
ViewPort vp = mapControl.getMapContext().getViewPort();
Point2D from = vp.toMapPoint(event.getFrom());
Point2D to = vp.toMapPoint(event.getTo());
//build the new extent
Rectangle2D.Double r = new Rectangle2D.Double();
Rectangle2D extent = vp.getExtent();
r.x = extent.getX() - (to.getX() - from.getX());
r.y = extent.getY() - (to.getY() - from.getY());
r.width = extent.getWidth();
r.height = extent.getHeight();
//update the ViewPort
vp.setExtent(r);
}
Some useful resources about MapControl in gvSIG wiki:
cesare 18:33 el 7 octubre, 2011 Enlace permanente |
Hi, very interesting post! Only a question: where do you foind the data taht you’ve used in the charts?
amaneiro 17:29 el 8 octubre, 2011 Enlace permanente |
Hello Cesare, the data comes from the code repository of every project. We parsed it and generated the stats. If you are interested in playing with them, find them here.