Return to the Roots

by Miguel de Icaza

Found on Planet Gnome: Iain's fantastic web site for his Gnome-based Last FM player.

This is a return to the basics, simplicity, elegance, and over all the kind of web site that demanding generations require. Strongly recommend it.

The site is here, and you can see the screenshots for it here

Now all we need is a stylesheet for it.

Posted on 10 Jul 2006

Cracking the Election's Nut

by Miguel de Icaza

Based on the final results from the election a group of friends, most of us met through the Linux User's Group in México, have been working on finding the voting booths that have problems.

The results are available here, it is a work in progress.

There are a number of angles at the problem: places where the number of blank votes is too high (Greg Palast wrote about this pattern on his "Mexico and Florida have more in common than heat" article).

Another set of interesting graphs is plotting the number of booths that had a given number of votes. With that graph its possible to spot differences in the standard distribution and pin-point places where results were tampered with.

This is the same study that José Barberán did in 1988 that showed the fraud done by the PRI. I talked about the details on a blog post from 2002.

Some simple checksums are used to find "pregnant booths", that is booths where the total of votes exceeds the number of votes that could have been casted (there are limits per voting booth on the number).

These results hopefully can be used to determine which voting packages need to be opened and audited.


Another article from CommonDreams, in particular, there are some complains that can not be tracked down easily with awk and sql.

Summary: Fox violating elections law; The fear campaign from the PAN; Using federal information from social programs to drive votes; Vote purchasing;

Although Sunday's voting was peaceful and turnout high, reporters in the streets and letters to the press testify to the thousands of voters who waited in line for hours, only to be told that their polling place had run out of ballots. Thousands more were informed that their names had disappeared from the rolls. These people now complain that they were frustrated in the exercise of their civic duty by a system they suspect of bias. They are joined by millions more who are convinced that the whole process --- from the campaigns to the count --- was riddled with inequities.

Many factors feed into this lack of public confidence. The first is the blatant partisan involvement of the president and federal government. President Fox consistently violated a Mexican law that calls for the neutrality of government officials in carrying out their public duties, despite weak admonitions from the elections authorities.

The campaigns were not what Mexico's citizenry deserved. Calderón's campaign slogan "López Obrador is a danger to México" was low-level politicking and worked not to inform voters but to create a climate of fear until it was finally declared illegal by elections authorities. The veiled threats of the Business Council and dire warnings of economic collapse from Calderón were neither grounded in fact nor ethical as a campaign tactic. When fear ---of loss of jobs, houses, or national stability---trumps reasoned choice, it's the nation as a whole that has lost the elections.

The PAN also made full use of the tactics of the Institutional Revolutionary Party (PRI). Part of the political culture entails delivering votes to the highest bidder---the party that brings in building materials, a new basketball court, or cash payments. It is a civic vice that the Mexican political system as a whole has not yet overcome. After years of one-party rule, many citizens still view their vote as a commodity to be bartered and not a principled statement to chart a course for the nation. On the local level where vote-buying is most prominent, none of the major parties has done much to change this view. The flip side of vote-buying is vote coercion, or threatening to cut off goods or services for voting the wrong way.

Vote buying and vote coercion are tools primarily used by the government. Fox's "government of change," rather than eliminating this vestige of authoritarian rule, has refined it to a science. The first sign that this would be a major part of the PAN campaign came when Josefina Vázquez Mota, Secretary of Social Development was made campaign manager for Felipe Calderón. As secretary, she had access to detailed information on recipients of government assistance programs. An independent report commissioned by the government found that over four million people were susceptible to vote-buying or coercion due to the way government programs were used. During the campaigns, reporters gathered numerous testimonies of these practices in action.


The electoral institutions created over the past decade are still weak. They were unable or unwilling to stop the PAN from violating electoral laws that forbid smear campaigns and the intromission of government officials in campaigns. Suspicions of collusion between authorities and the PAN were reinforced just days before the elections when Mexican journalist Carmen Aristegui demonstrated on national television that the PAN had developed a secret access code to the national registry of voters. Voter registration data is restricted by law to electoral authorities.

Zocalo Meeting

AMLO called for a 5pm meeting in downtown M�xico City today, 150,000 people showed up:

Posted on 08 Jul 2006

Inlining is on!

by Miguel de Icaza

This is the longest gap we have had between Mono releases (1.1.15 to 1.1.16), but the wait was worth it. The inlining optimization is now turned on as well as a number of other small optimizations that enhance inlining and the results are excellent. Thanks go to Massi that tuned the optimizations and hunt down every bug until it was ready.

There is a lot of new stuff, in particular, Windows.Forms is better than ever in every possible way.

The full release notes are here.

Posted on 06 Jul 2006

Mexico, Elections, Part 2

by Miguel de Icaza

It has certainly been an exciting time to be in Mexico. And I have been lucky enough to have friends working everywhere in the elections process, so I have got some good and juicy gossipy things.

Laura at the IFE on Sunday.

The "fast count" process on Sunday (called "PREP") gave an edge to the PAN candidate by a point or two early during the election. People suspected that someone was tampering with the flow of the data. Yesterday we learned that people were instructed to delay the data entry for results where the PRD was wining.

The idea they were shooting for was to make the difference large enough on Sunday to call the election. But the difference was small enough and the missing data large enough that the plans were thwarted. By the next morning the trend had stopped.

The Media area at the IFE, during a quiet period.

There were also a lot of invalidated voting boxes, which were not accounted until Tuesday night and closed the gap from 500k to 200k (there were 2.5 million votes there, update: fixed the number from 1.5 to 2.5). Plus there were another 2.5 million votes missing when candidates had a 250 difference (Granado's Chapa account).

Yesterday we learned from some whistle blowers, as suspected, that they had been instructed to delay the data entry for data that was not favorable to the PAN (right).

Laura and Patrick posing at the IFE.

But there are multiple layers of hacks being done in the election: boxes where the total sum surpasses the number of ballots (by hundreds); boxes where all the PRD votes were wiped out; boxes where a handful of votes are moved from one party to the other and boxes where there is only one winer.

But the PREP fast-counting process is now useless, as I mentioned previously it was merely a coarse tool that had too many errors to be used for such a close election. The real counting began yesterday in the 300 districts, where people are counting the paper reports instead of the digitally entered data.

Some of my friends working for the PRD, and some of them working on their own took the data from the PREP and used that to identify fishy ballot booths. Those which present funny statistical warts (more votes than allowed, where the margin is larger than 20; votes where the results vary wildy in the same geographical region; ballot boxes that do not follow a gaussian distribution and a few more).

Armed with this information, the PRD has requested that those ballot booths be opened and all the votes on them counted at the district level.

At least on one of the DF districts the opening of the ballot boxes that showed some signs of statistical creativity have rendered 7,000 votes that were missing for the PRD. A minute-by-minute account of how they were uncovered is here. Also Leo has a page.

The issue is with the remote districts where there are not many PRD representatives to push for the opening of the boxes. If they can find 7,000 unaccounted votes in a district in Mexico City, a PRD stronghold, I can only imagine what happened elsewhere.

The link listed above shows that in one of the rural districts in Tabasco, the mistakes made up for 20,000 votes for the PRD that had been wiped out.

Part of the problem is that not every box with fishy results is being opened, there is a strong refusal to do this on the side of the PAN so each box is basically a fight. This means that the PRD might choose to bring the list of statistically fishy results and request the opening at the federal tribunal.

Miguel's own Exit Polls

I have been asking people I talk to on the streets (taxi drivers, my friends, waiters, salesmen, my family) who they voted for, and if they voted for the PAN, why they voted for them.

I was interested in whether the PAN's propaganda had any effect. My family is sharply divided, my mother's side is of a strong catholic background, the kind of catholic that would fight with a gun to avoid the separation of Church and State last century. They still attend mass in Latin and refuse to use any of the public works/roads built my the PRD government in Mexico City.

So here are the, statistically meaningless, reasons that I found interesting from people voting for the right (PAN):

  • If the PRD wins, I will lose my house.
  • If the PRD wins, they are going to nationalize all property, and I will lose my house.
  • The PRD called for a popular uprising on Friday (this was the rumor stared by the right when they hacked into the left's web site and posted an apocryphal letter).
  • The PRD will not allow business to operate, and I work at a business.
  • The PRD will force three to four families to share an appartment.
  • The PRD is a danger to Mexico (he couldn't say why).
  • Update: The PRD candidate killed his brother.
  • Update: If the PRD wins, they will close the churches.
  • Update: The PRD candidate killed another kid with a baseball bat when he was a kid.
  • Update: The PRD candidate never finished his degree.

Am missing a few, but I can not remember them now.

And of course, none of that makes sense nor does it follow the pattern that the PRD used in Mexico City for the past 10 or 12 years. But the propaganda was strong, the ads on TV explicitly spelled that for the population.

Update: Federico overheard this discussion on the Paris airport, two mexicans talking to each other about the elections:

Dude1: This election stuff is terrifying.

Dude2: Yeah.

Dude1: Imagine loosing everything you own.

Alternate Vote Counting

To prevent electronic fraud like in 1994, an alternate, site was set up, we went to this site on Sunday at night, where some of my friends are working. They had some 200 data entry people receiving data.

The data coming out of this center was used to identify some of the fishy boxes (when the data reported here did not match the PREP data). The only problem is that it only has coverage for one third of the votes in the country.

This is one of the capture rooms:

Capture Room, Redes Ciudadanas

Mancha and Laura.

High Tech Cheating

On Sunday, I was explaining to an international visitor that just like the US has a very advanced high-tech industry, Mexico is the leader in the election fraud industry.

The range of schemes used to cheat in an election is very resourceful, varied in texture, color and smell. It will be the subject of another blog post where I cover the traditional "mapaches", "urnas embarazadas", "fraude hormiga", "el taco", "el carrusel", "raton loco", "remplazo de urna" and the new high-tech ones that were pioneered in 1994.

Posted on 06 Jul 2006

Summer of Code Progress: ASP.NET support in MonoDevelop

by Miguel de Icaza

Michael Hutchinson has commited his ASP.NET AddIn for MonoDevelop to SVN. This is a follow up to the work that he did last year, where he worked with Blagovest to create an ASP.NET editor.

This year he is integrating the editor with MonoDevelop to provide a seemless development experience. Currently the Mozilla-based editor is not yet hooked up though.

See his blog for more details

Posted on 04 Jul 2006

Mexican Elections.

by Miguel de Icaza

The news have reported that the election results do not point to any candidate as the clear winer yet. Sadly, the election is too close.

The situation will soon move from the counting of the votes into the political realm, as there are a few things happening in parallel.

There are three classes of computations in the election, two of them are ran by the Institute for Federal Elections (IFE) and another by third parties.

  • Exit polls and society sponsored sampling.
  • The IFE quick-vote counting, called the "PREP".
  • The official count, done by the IFE.

The exit polls are pretty random, it depends who is doing them, and where they are doing them (the country seems to be mostly divided: the north is very much PAN, the south is very much PRI).

The IFE quick vote counting (PREP) is not an official result, and is intended to give a quick overview of the election results. It would have been very useful to point out the winer if the disparity between parties was larger, say "40, 30, 20, others" (and in fact, its been useful to determine governors, senators and other broad strokes).

But the problem is it is not very precise, it is missing a lot of data that is not being accounted for. There is an agreement that if anything goes even slightly wrong with any of voting results coming from a location, the values will not be computed (missing data, typos). They are still displayed (bottom of the page), but they are not making it into the end result.

This means that the difference between the PAN and the PRD for the presidential is either:

  • 1%: quick vote count, and is still missing a few thousand voting booth results).
  • 0.7%: if the values for the pending values are taken into consideration (using a perl script on the data posted).
  • 0.4%: on the real count, but this so far only has 90% of the votes accounted for. The final number wont be announced for a few days.

And this is where it turns political. The PAN is demanding the IFE to call the election on their favor based on the quick count. The real voting results are not as encouraging and might still flip over to the other side considering all the votes that have not been counted yet.

In the meantime, a number of inconsistencies have been found in the PREP program between the reported numbers and the posted numbers on the streets (here).

There are still a number of possible events, and the city is abuzz with theories on what will happen next.

Unlike the Fox election, which was a relief to Mexicans, this one will not feel like a relief. With the Fox election, even if he was a right-wing candidate, getting rid of the PRI was good enough. Besides, Mexico City got the PRD as a major.

Track Records

The PAN orchestrated a fear campaign against the PRD/AMLO. The TV ads were fairly blunt "if they win, you will loose your job and your house", "Four families will be forced to live in an apartment", your standard cold-war era propaganda. I figured nobody would believe this sort of thing, but I was surprised to listen to my own friends echo these things back to me "we would have lost our houses and jobs".

They managed to smear a guy that was the runner up for "Best City Major" in the world, which had a great track records and fixed a miriad of problems in Mexico City, created a University for Mexico City, opened new schools and funded old people that needed money.

On the other hand, we have the fear-monger candidate. He was the man in charge of the largest debt in this administration (Fobaproa), the largest burden on the country; He is part of the small group of people which kept coming up with creative ways of privatizing the nationalized oil industry, and was recently discovered to be involved in a multi-million dollar nepotism scheme while he was Secretary of Energy. Basically, he has the profile of your standard CIA-approved candidate.

Anyways, Mexicans, like the Americans two years ago, managed to vote against their own interest as the discussion shifted away from the Economic Policy to whether the man had finished his degree and whether he ate babies with his bare hands.

Posted on 03 Jul 2006

Ruby.NET Compiler Released

by Miguel de Icaza

Wayne Kelly and John Gough announced the release of their Ruby.NET Compiler, the details are available here.

To build with Mono today, a few patches are necessary, see the comments here.

Posted on 02 Jul 2006

Mexico Election: Forgeries

by Miguel de Icaza

A new trick in the dirty politics going on in México.

Someone cracked into the web site for AMLO/PRD and posted a forged letter that called for "civil resistance" the day after the elections.

The media was notified in the morning of the letter and had a blast all day discussing the letter as real, and it took all of 24 hours to get the media to acknowledge that the letter was fake (they were notified half an hour after it was discovered).

Posted on 01 Jul 2006

GUADEC for Latin Americans and Asians

by Miguel de Icaza

Rodrigo points out that GUADEC in Europe is an expensive conference for those coming from Latin America and Asia. Not only is the travel had to afford for those folks, but even if they manage to pay for it, their expenses in Europe are sometimes hard to afford:

People from Latin American countries (and I guess Asia and Africa) find Europe quite expensive, so for them going out for lunch/dinner with US, Australia and Europe people is unaffordable, which makes them having to go on their own to look for cheaper places. So, I think it would be a great idea if we had, like in Copenhagen, free lunch for everyone at the venue. Thus, everyone, regardless of the country they are from, would have lunch together, making it easier for everyone to meet and talk.

Anne had a couple of good ideas (or someone suggested this on the GUADEC list). They were:

  • Make the "E" in GUADEC stand for "Everywhere". Host the next GUADEC conference in Latin America or Asia. Travel to Latin America and Asia is affordable for Europeans and Americans.
  • If we continue in Europe, use some of the money to provide stipends to pay for some of the travel expenses for those who need it.

Posted on 30 Jun 2006


by Miguel de Icaza

Just got back to Boston from GUADEC. It was extremely fun and energizing, just like last years. It is a shame I had to leave early the conference.

And the Band Played On

This year, there was a cover band made up of GNOME hackers and they did a fantastic job keeping us entertained at the Maemo/Nokia party, congratulations to the Macaques!


As part of my upgrade to SLED 10, SUSE's new enterprise Linux desktop am finally a full-time Beagle user.

Finding your documents and discovering information you did not even remember you had, playing $HOME archaeology, has been a very pleasant experience.

Although Beagle is fantastic, it needs a little bit of tuning for my day to day use.

Am a heavy email user, I have seven gigabytes of email in my laptop, and Beagle has a bad habit of optimizing the Evolution index files every 10 minutes if something has changed. And the optimization process hammers my machine very, very hard, to the point of not letting me get work done for a few minutes.

I spoke to Joe, and he said "it happens about every 15 minutes or so", armed with this information I found the problem, the Beagle.Daemon.ScheduleOptimize routine has a 10 minute delay to run the query again.

I tried rebuilding my modified Beagle from CVS, but CVS has new dependencies that I lack, so I decompiled the BeagleDaemonLib.dll, like this:

$ export MONO_PATH=/usr/lib/beagle:/usr/lib/mono/gmime-sharp/
$ monodis /usr/lib/beagle/BeagleDaemonLib.dll >
$ vi
   # Replace the ldc.r8 10. in ScheduleOptimize
   # with ldc.r8 100. for a 100 minutes.
$ ilasm /dll
$ mv a.dll /usr/lib/beagle/BeagleDaemonLib.dll

This has brought up my machine back to usable for me.

There are a few other glitches here and there, but the Beagle team is aware of these. Beagle and Beagle-based applications have a lot of promise, I just hope that the core gets a few passes of love, improvements and small touch-ups before they jump on to new, innovative ideas.

Avalon, WPF and Michael Zucchi

Michael has started a blog about his experiences using Avalon/WPF on Windows. Michael was one of the main developers in Evolution while at Ximian and is now working in Australia hacking on WPF.

His comments on WPF are interesting. His regular blog has had some negative comments about it in the past and his new blog has some more.

I do not have as much experience as Michael has with Avalon/WPF, but I wrote about the complexity of the framework a few years ago (here and here).

Although Michael is not involved in Mono, I have added his blog to the Monologue blog aggregator as his comments are very interesting.


Lluis Sánchez demoed the new developments of MonoDevelop at the conference.

What was interesting about Lluis' presentation is that I did not know about half the features that MonoDevelop has. I was blown away. Specially, since am Lluis' manager and I read every status report, and try to read most of the MonoDevelop patches, but I did not know that MonoDevelop had all this magic behind it.

I knew we had Stetic integration in MonoDevelop, but the integration goes beyond generating the UI for applications. The Stetic/MonoDevelop integration uses the refactoring engine to add method handlers for signals (double-click on signal) and if you change the names of your widgets in the designer, the source code that references it is updated. It also has a number of nice touch-ups that went into SVN recently, like a context-sensitive toolbar which has the most common operations in a per-widget basis.

JPR raised some concerns, because this "smelled" similar to Glade's "Generate code" feature, but it is very different. The model that MonoDevelop uses for Stetic/C# integration is more similar to Glade and XML, it just happens to not use XML at runtime.

The MonoDevelop model is more or less like this, for each "UI" element (custom widget, dialogs or windows):

  • A MyGUI.cs contains all the event hooks, top-level class handler for the given UI component. This code contains a call to Stetic.Gui.Build (this, typeof(MyGUI)).
    This is the equivalent of loading your Glade file in the Glade world.
  • A gtk-gui/MyGUI.stetic contains the representation used by Stetic to manipulate the UI. This is not used at runtime, its only used by Stetic to load and save the UI.
  • During compilation the gtk-gui/MyGUI.stetic produces a gtk-gui/generated.cs file that contains the code to create all the GUI widgets and hook up all the events.

So you are free to add and remove as much code as you want to your MyGUI.cs file, that file is never touched by MonoDevelop.

He also demonstrated creating custom widgets, and how these could be kept on a separate library that MonoDevelop can load into the GUI designer, the steps are:

  • Add a "New Project" to your solution, select "Library".
  • In the library, select "Add New Widget", develop your new widget, debug it, test it. When you are ready.
  • On the main project (or every project that consumes your library), right click on "References". Select "Projects" and click on the Library you want to incorporate.
  • The new widget appears on the widget palette, you can now drag it and use it in your main application.

Finally, he demonstrated the "Deployment" feature, which produces an automake/autoconf setup and produces a tarball that is ready for redistribution. There is talk about doing a "deploy to RPM" and "deploy to DEB" functionality right into the IDE.

Posted on 30 Jun 2006

« Newer entries | Older entries »