Miguel de Icaza's web log

RSS

xml.gif

Email: miguel@gnome.org

Docs:

Linux Developers
Lessons from the PDC
Plugins in Mono
Java, Gtk and Mono
On Software Patents
MonoDevelop: Software Building Architecture
Mono Directions
Mono at the Professional Developers's Conference 2005

Blogs

xml.gif Ben Maurer
xml.gif Cesar Nataren
xml.gif Duncan Mak
xml.gif Gonzalo Paniagua
xml.gif Jackson Harper
xml.gif Lluis Sanchez
xml.gif Martin Baulig
xml.gif Mike Kestner
xml.gif Sebastien Pouliot

OpenOffice

Radek Doulik talks about his work on his Cairo-based Canvas for OpenOffice and shows the quality difference.

He also posted his slides for his presentation.

Office File Formats

Novell will be sending some folks from our Open Office team to the newly created ECMA TC45 working group. We hope to determine if the standard will be open enough and the details complete enough to allow for interoperability.

Gtk+/Quartz on OSX

Imendio has checked into CVS their Gtk for OSX port.

Robert Fisk Lecture in LA

Robert Fisk lecture in LA is available in MP3 format here.

Robert is an incredible story teller.

In this talk he describes some of his experiences as a journalist on the Middle East in the past twenty years and why he started to write his new book "The Great War of Civilization".

Packed with anecdotes. The parallels between the British occupation of Iraq and the new occupation are incredible.

Mono Status '05

Mono Directions: (Article Permalink)

We just released Mono 1.1.10, our best release so far. The major feature missing from this release to call it Mono 1.2 is the completion of our Windows.Forms implementation.

In this document I only present the direction of development of the Mono team at Novell; A more comprehensive view of other Mono developments by the Mono community is something that am working on and will post at a later date.

I also present how our team's priorities are shifting in response to Novell's own internal use of Mono and external factors like the final release of .NET 2.0.

Index

Code Development Process

Since the Mono 1.1.xx series has got a significant amount of fixes over 1.0.xx we have encouraged users and developers to move to the Mono 1.1.xx series.

To avoid regressions we have done a number of things:

  • We incorporated all of our tests into our pre-release process `make distcheck' to ensure that we do not release something with known bugs.
  • We fixed the bugs that were preventing the NUnit tests to complete or disabled the tests that were specific to an environment (tests that require Internet access or to contact a specific host) from the standard test process.
  • We started development of new features in branches and only when the feature is complete we have "landed" the feature into the main repository.

We have used this separate branch development for the new string collation framework, the ASP.NET implementation, the new cross platform register allocator and the Cairo 1.0 migration. And we currently do the same for our VM optimizations, the precise garbage collector work and the C# 2.0 compiler.

The basic idea is that we turned the 1.1.xx series into a release that can be deployed on production as opposed to merely a development release. This is similar in spirit to the kernel 2.6.xx releases.

As a general rule we try to fix bugs before we write new features.

For details on what has been done in the 1.1.xx development cycle, please see the release notes for each of the releases: 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7, 1.1.8, 1.1.9 and 1.1.10.

Windows.Forms

Windows.Forms is the only piece that is holding us from officially renaming Mono to Mono 1.2, it is still missing a few features. Our plan is to complete the missing features by the end of this month and then move to bug fixing and testing open source our publicly accessible Windows.Forms applications. We are planning on spending three months on bug fixing at this point.

Our aim with Mono 1.2 is to release a Windows.Forms implementation that implements the .NET 1.1 API, not the 2.0 API.

These are the most visible missing bits from feature completion:

  • Multiple Document Interface (MDI).
  • Menu merging in the presence of MDI.
  • Our RichTextBox is lacking a few features: selection margin, bullets, indentations as well as a few public methods and properties.

Our Windows.Forms implementation is implemented on top of the GDI+ API for rendering and a relatively small driver to interact with the host windowing system. Our GDI+ implementation on Unix (Linux and OSX) uses Cairo as the rendering engine. As for the windowing system drivers, today we have two complete drivers (Unix/X11 and Win32) and one driver under development (OSX).

Some minor features missing are:

There are a number of features that we have explicitly postponed from this release and will only make it into 1.2 if they are contributed by external contributors, otherwise they will have to wait for Mono 2.0:

Our WinForms page tracks the progress.

2.0 Support

We started work on the foundation for 2.0 in mid-2003 as soon as the early drafts of the new changes were submitted to ECMA. This gave us plenty of time to work on our C# 2.0 compiler and the changes to our VM to support generics. Today they are both considered feature complete.

Our IL assembler and IL disassembler are almost complete and should be able to roundtrip our generics-based libraries soon.

The core is complete enough that the latest versions of IronPython and Nermerle work with it.

Developers are starting to use the new features available in 2.0 and they have started to file bugs against our runtime and compiler.

So far our policy was that we supported the 1.1 profile for the libraries. The 2.0 profile is being developed but is only supported in the "if it breaks, you get to keep both pieces" modality. Bugs on the 2.0 support in the compiler and runtime were routinely fixed.

With the release of .NET 2.0 we are shifting some of our development efforts to work on the most important areas of the 2.0 profile.

We are hoping to include the most important bits of the profile in the upcoming release of Mono 1.2, but we are not making any promises about the completeness of the 2.0 APIs. Mono 1.2 will release when Windows.Forms is complete.

The System.Xml 2 is pretty complete, mscorlib and System assemblies still require significant amounts of work.

See also the ASP.NET section for details on the progress in that area.

Mono Debugger

Martin has been working on our debugger. Today it is capable of debugging 1.x applications (2.0 should be supported as soon as Cecil support for generics is completed).

To test the debugger today you must use SVN versions of Mono as well as the debugger as it is still rapidly changing.

We are now accepting feedback on the debugger: limitations and interface. Since it currently only works as a command line debugger you might want to read the debugger guide in our web site.

If you find problems with the debugger, please file a file a bug report.

MonoDevelop IDE

Lluis has moved from working on ASP.NET 2.0 to work on the MonoDevelop IDE.

Our most important goal with MonoDevelop is to make it rock solid and eliminate every crashing bug that has been reported.

As for the features, MonoDevelop now sports a plugin architecture similar to Eclipse: components can be downloaded and installed without having to recompile the application (see here).

Integration of a GUI designer is progressing (currently Glade3, but we hope to replace it with Stetic when it becomes available).

Finally as the debugger interface stabilizes we plan on enabling the debugger interface in MonoDevelop again.

Mono's Virtual Machine: Ports

During the last year the Mono JIT has been ported to three new architectures (x86-64, Itanium and Arm processors) in addition to the platforms it supported before (x86, PowerPC, SPARC, SPARC 64 bits and S390).

At this point the Novell team does not have any plans to work on new ports. Although some members of the community have expressed their interest in adding S390x and MIPS support to Mono.

Precise Garbage Collector

Paolo has been working on a new garbage collector (GC) engine. Currently Mono GC interface is almost pluggable (the work to plug different GCs was done a few months ago).

The new GC engine is a precise, generational, compacting collector. This means that the Mono GC will be able to return memory to the operating system when it no longer needs it.

We are making a few tradeoffs to ship this version of the collector quickly. For instance this new GC will treat the stack conservatively has two effects: it makes it easy for embedders of Mono to use the new GC but it also might flag a lot of pinned objects.

We hope that the new GC can be tested in February or March, the code will start landing in December.

Code Generation and Optimization

We have been working for quite some time on various new code optimizations. The code is getting ready to be submitted to the main Mono repository. Over the next few weeks expect various patches to be posted.

Currently we are working on the following areas to improve the performance of the generated code

  • Enabling some stronger optimizations by default (inlining and fastdce). These require us to avoid any significant regressions (both in the generated code quality as well as the JIT time).
  • New optimization framework (HSSA-based platform) and optimizations built on top of it (PRE and GVNPRE).
  • Eliminating the tree-based intermediate representation (IR) and go directly from the CIL code to the list-of-instructions IR.

Massi has recently posted his Fast Dead Code Elimination and he described it on this blog post.

Massi has also been working on our HSSA-based framework and dead code elimination based on it. This optimization should be posted for review to the mailing list this week.

Once those two are done, Massi is going to work towards making FastDCE + CopyProp + Inlining be part of the default optimizations for Mono which will bring some immediate visible results.

After this our plans for HSSA are:

The quality of the code might suffer because removing redundant code introduces new temporary variables. To fix this we need a feedback mechanism to the register allocator that does not exist today.

To address the previous (and other problems) Zoltan is starting work to eliminate the tree-based IR from Mono.

C# Compiler

The C# compiler comes in two editions:

Our gmcs compiler support as of November 2005 is known to lack one feature: the late changes to nullable types in the specification. Other than that the compiler is considered feature complete.

As the C# compiler is at the core of much of our work we will continue to focus on bug fixes. The recent C# 3.0 features although easy to implement will have to wait.

Visual Basic

We had plans last year to complete a free Visual Basic compiler. Today the compiler exists in beta form and Novell will no longer fund the development of this compiler.

The folks at Mono Brazil have taken over the development and maintenance of the compiler.

The VB compiler is based on an old mcs fork that was originally created by Rafael Texeira. To upgrade the compiler from its current form to support generics in 2.0 we believe that it might be necessary to start from a fresh copy of `gmcs' and merge the various changes that make up the VB compiler.

Code Access Security

Code Access Security (CAS) has been available in Mono since version 1.1.4, it is enabled by running `mono' with the --security command line option.

Although CAS is in a very advanced stage and it will be available on Mono 1.2 we will not guarantee that CAS is complete until the next major release of Mono. We are still missing the code verifier and in 2.0 there are new CAS features that we do not implement yet.

Sebastien who maintains the code has been busy adding CAS attributes to our class libraries and creating the associated tests, he discussed the state of CAS here.

As for how the CAS permissions are being set, he discusses that here.

Sebastien has written a general bug finding tool, similar in spirit to FxCop, which we are using to set the proper CAS rules on our libraries. You can learn more on the Gendarme page.

ASP.NET

We released a fairly updated version of ASP.NET with Mono 1.1.9 which is much faster and consumes less memory. Our new implementation uses several tricks to improve the performance which we will blog about later.

In Mono 1.1.10 Gonzalo introduced a new automatic configuration option to the Apache module. Setting up mod_mono now behaves like other modules for other languages, for instance users and administrators can drop .asmx, .ashx or .aspx files anywhere on their exposed directories and they will automatically be handled by Mono's ASP.NET implementation without having to make any changes to the ASP.NET configuration.

As for the 2.0 support in ASP.NET we have implemented various controls that do not depend on the new Configuration API (menus, trees, masterpages, gridviews and anything they require).

Chris Toshok has taken over from Lluis on developing ASP.NET 2.0 and is almost done with the new System.Configuration namespace which is the foundation for the next batch of features in ASP.NET (profiles, portal parts and many others required it).

Chris has also done some work on an open source implementation of Atlas.

API stability

As for the stability of the APIs: the System.* ones are set in stone and we verify the compatibility using our "corcompare" tools. The .NET 1.1.x API has been implemented (as described in Mono 1.0 Features).

The Mono.* namespace on the other hand is still a moving target.

the Mono.Cairo assembly has had to adapt to the changes in the underlying Cairo 1.0 library and we also had to do various changes to cope with early bugs and limitations in our API design.

The Mono.Posix assembly has incorporated a new namespace: Mono.Unix which offers a more comprehensive binding and also provides a high-level .NET-ish API for accessing Unix as opposed to Mono.Posix which only contained raw access to Unix.

Gtk#

Version 2.4 of Gtk# has been released. The new features on this release are documented here, it binds Gtk 2.4 which is the most commonly available version of Gtk+ at this point.

We have created an upgrade guide for developers moving their code from Gtk# 1 to Gtk# 2.

On the development side of Gtk#, a new version is available for testing that binds the Gtk+ 2.8 API and exposes a handful of new methods as well as the Cairo properties that are part of Gtk+ 2.8.

The work to add databinding support to Gtk# is currently on hold until Windows.Forms is completed. We expect to work again on a databound-aware Gtk# after Mono 1.2 has shipped.

Integration of Google Summer of Code Projects

We have integrated a few of the projects that were developed thanks to the Google Summer of Code program:

  • Monodoc improvements (collaboration, Mozilla integration, CSS ification) from Mario Sopena.
  • xbuild: an implementation of msbuild is on our tree, but not compiled by default yet. By Marek Sieradzki.
  • DataGridView, by Pedro Martínez.
  • xaml compiler and helper classes from Iain McCoy.
  • The Javascript runtime improvements from Florian Gross.
  • Cecil from JB Evain is being used for Gendarme and Bugfind and we hope to start our linker soon.

We are planning on integrating the ASP.NET editor work from Michael Hutchinson and Blagovest Dachev as well as the bugfinder engine from Aaron Tomb into Gendarme.

ADO.NET 2

T Senganal will take over the maintenance of ADO.NET and will start working with the developers that are using the new features in ADO.NET 2 to get their providers working on Mono.

JScript

Cesar is very close to pass all the Mozilla JavaScript tests with our implementation of JScript.

If you want to track the state of the JScript compiler and runtime see the JScript page on the Mono web site.

End

You have reached the end. Congratulations!

TV

Been loving the US version of "The Office", the awkward moments are all there.

I also find "American Dad" hilarious. My love is divided between the fish and the alien.

F-Spot Monitor

A few weeks ago I purchased a 24" flat screen from Dell. The sole purpose of this monitor is to run F-Spot to manage my home photo collection. Today I completed the F-Spot setup at home.

Link-o-Fest'05

Noam Chomsky on the debate about intelligent design:

To proponents, intelligent design is the notion that the universe is too complex to have developed without a nudge from a higher power than evolution or natural selection.

To detractors, intelligent design is creationism --- the literal interpretation of the Book of Genesis --- in a thin guise, or simply vacuous, about as interesting as "I don't understand" as has always been true in the sciences before understanding is reached.

Accordingly, there cannot be a "debate."

Robert Fisk on the rebranding of torture:

What Americans do to their prisoners is "abuse" and there was a wonderful moment last week when Amy Goodman, who is every leftist's dream, showed a clip from Pontecorvo's wonderful 1965 movie "The Battle of Algiers" on her Democracy Now program. "Col. Mathieu" -- the film is semi-fictional -- was shown explaining why torture was necessary to safeguard French lives.

Then up popped Bush's real spokesman, Scott McClellan, to say that while he would not discuss interrogation methods, the primary aim of the administration was to safeguard U.S. lives.

U.S. journalists now refer to "abuse laws" rather than torture laws.

Molly Ivins has her own take:

I have known George W. Bush since we were both in high school -- we have dozens of mutual friends. I have written two books about him and so have interviewed many dozens more who know him well in one way or another. Spare me the tough talk. He didn't play football -- he was a cheerleader. ''He is really competitive,'' said one friend. ``You wouldn't believe how tough he is on a tennis court!''

I tried to track down Robert Fisk as he tours the US but the only confirmed dates that I have are for California this weekend and I do not feel like crossing the country. If you happen to know of any dates somewhere closer to the East Coast, please drop me an email.

Norman Finkelstein is talking on Thursday in Boston. Details are available here. Norman is the author of the "Beyond Chutzpah" and "Israel-Palestine Conflict" books. Am pretty psyched.

Fast DCE Implementation Posted

Massi posted his fast implementation of Dead Code Elimiation for the Mono runtime.

This is an optimization that we can hopefully enable by default, as opposed to the more expensive SSA-based optimizations.

This is the first on a series of optimizations patches that Massi is completing.

Dan Pena Ajena

El presidente Fox y su cabinete, nada más dan pena ajena. Que verguenza, y es que es una tras otra. Deberían de tener un examen de admisión.

Ese es el problema de elegir a alguien que bajaron del cerro a tamborazos.

Microsoft Memos

I was reading the leaked memos from Microsoft and as I was reading the first few paragraphs, I could not stop thinking that nobody on their right mind writes internal company memos like this. Nobody puts this kind of history background.

Consider the recipients: "Executive Staff and Direct Reports; Distinguished Engineers".

I could not stop thinking that these memos were written to be leaked. They read like ads.

Update: Alex points out that Cringely made the same observation. The difference is his article is actually interesting. Here is a tidbit:

But I have to say that Gates or Ozzie or whoever actually wrote these documents has done a very effective job of differentiating the company roles in a way that makes Google appear to be the bad guy, and Microsoft appear to be the good guy. Google is going to develop and deploy Internet services while Microsoft is going to ENABLE the deployment of such services BY ITS DEVELOPER PARTNERS. This makes Google the would-be monopolist.

Looking deeper, though, we see that the only way Microsoft can achieve its vision is by continuing to own the platform. They want us to be GRATEFUL, in fact, that such an enlightened outfit is running the store. And this will work to an extent, but only to an extent. Then what happens? All hell breaks loose as Microsoft again changes the game. Here's how: read the rest

Italian Fallujah Documentary

The Italian documentary about the use of chemical weapons in Fallujah can be downloaded here.

A guy which sounds pretty upset about it is here.

Robert Fisk described the use of Phosphorus bombs on the civilian population of Beirut, you can read a couple of pages with Google Print: here.

Update: A reader points that the official page for the RAI documentary contains more download options and formats. The page is here.

F-Spot Tagging screencast

Jakub has done a screencast of the new tagging feature in F-Spot.

Nat's Photo Tagging

Nat recently implemented tag-typing for F-Spot, our new photo management software. For those of us with large picture collections this is probably one of the best interfaces for tagging.

See Nat's post here and his latest patch here.

Send copious amounts of email to Nat until he does a screencast of this new feature. You have to see it to appreciate it.

On the hacking side of things, the beauty of this patch is that it was coded in two afternoons after long busy work days for Nat.

Secret Prisons

The Washington Post yesterday ran an article that claims that the CIA has a network of secret prisons where they have been incarcerating suspects. The CIA denies such prisons exist:

The CIA has been hiding and interrogating some of its most important al Qaeda captives at a Soviet-era compound in Eastern Europe, according to U.S. and foreign officials familiar with the arrangement.

The secret facility is part of a covert prison system set up by the CIA nearly four years ago that at various times has included sites in eight countries, including Thailand, Afghanistan and several democracies in Eastern Europe, as well as a small center at the Guantanamo Bay prison in Cuba, according to current and former intelligence officials and diplomats from three continents.

...

Mid-level and senior CIA officers began arguing two years ago that the system was unsustainable and diverted the agency from its unique espionage mission.

"We never sat down, as far as I know, and came up with a grand strategy," said one former senior intelligence officer who is familiar with the program but not the location of the prisons. "Everything was very reactive. That's how you get to a situation where you pick people up, send them into a netherworld and don't say, 'What are we going to do with them afterwards?' "

Billmon weights in:

The plot line should be familiar to students of the Abu Ghraib atrocities. Interrogation tactics originally developed and/or authorized for use against "high value targets" at Guantanamo were exported first to the broader Gitmo population, and then to Iraq, where they were put into mass production by a group of half-trained or entirely untrained intelligence officers and MPs. The result was an entirely predictable moral and political disaster -- one which may have cost the United States whatever slim chance it had of establishing a popular, pro-Western government in Baghdad.

Likewise, the CIA's mini-archipelago seems to have grown like a poisonous weed in the absence of any coherent strategy for fighting Islamic terrorism, other than the initial impulse to hunt down the "evildoers." But now, like a dog who chases cars and actually catches one, the war cabinet faces the awkward question of what do with its secret prisoners and their secret prisons, even as the media finally starts to peel back the layers of secrecy. This story is going to cause something close to panic in more than one Eastern European capital, I suspect, and a relatively quick exit from that Soviet-era "compound." Where will the CIA take its human contraband now?

It seems to me that the Cheney administration has been trapped -- both by its ostentatious rejection of the "law enforcement" model of counterterrorism, and by its complete, willful failure to understand the limits of hard power and the steadily rising importance of soft power in a struggle that will last years, if not decades. Policies based on the adrenaline rush of war fever (circa 2002) were never likely to be sustainable. They also haven't brought us any closer to capturing Osama or prevented the transformation of Al Qaeda from an organization to a movement, one that is much more difficult to fight with dirty war tactics.

In other news, Mexico joined the International Criminal Court which upset a few people in the US:

Washington had warned Mexico that if it ratified the ICC and refused to sign an accord exempting U.S. nationals from the court's jurisdiction, it would cut 11.5 million dollars in funding from aid programs for fighting drug trafficking, according to human rights groups. The amount is equal to almost 40 percent of the economic aid Mexico receives from the United States.

Linux Desktop

Nat makes an observation about the Linux Desktop.

Imeem and Mono

Today we did a news brief with the Imeem folks. Imeem developed a client tool to create private networks with a number of tools (blogs, instant messaging, profiles, searching, file sharing).

Imeem uses Mono on their servers and also they use it on their MacOS port to reuse the same codebase that they had on Windows. Like iFolder, they are creating a native Objective-C interface using Cocoa and communicating with Mono to call into the engine.

My understanding is that Imeem uses Mono's cryptographic codebase extensively.

Someone should do an interview with Dalton Caldwell founder and CEO of Imeem.

CORBA and Web Services

Michi Henning participates in a discussion at Steve Vinoski's blog.

These Modern Times

Priceless:

AN INGENIOUS fraudster is believed to be sunning himself on a beach after persuading leading banks to pay him more than Euro 5 million (£3.5 million) in the belief that he was a secret service agent engaged in the fight against terrorist money-laundering.

The man, described by detectives as the greatest conman they had encountered, convinced one bank manager to leave him Euro 358,000 in the lavatories of a Parisian bar. "This man is going to become a hero if he isn’t caught quickly," an officer said. "The case is exceptional, perfectly unbelievable and surreal."

Flight of the Conchords

A few weeks back, when I was in LA I left the TV on as I read my email. I catched a stand up comedy show on HBO from a band called Flight of the Conchords on HBO's One Night Stand. You should watch it if you have a chance (it is available with cable on demand in a few places).

Tension

I have been following the Fitzerald investigation in the last few weeks. As much as can be followed by the prosecutor that has so far not done any public appearances nor said a word about his findings or his strategy.

Following the investigation has thus been limited to reading the various speculations based on who is being subpoenaed and the public statements done afterwards. An other interesting source of information in this puzzle is the PR campaign from those targeted by this opaque investigation.

A few interesting links on the subject:

A Cheat Sheet to get acquainted with the participants.

BillMon:

In other words, instead of blowing sky high, the volcano may simply snore loudly, roll over, and go back to sleep. And as Dean points out, since all the testimony Fitzgerald has collected is covered by the grand jury secrecy laws, we may never know what he found.

One can easily imagine the howls of protest on the left, and the smug satisfaction on the right, should this come to pass. It would be particularly bitter finale for those of us who all along have regarded the Plame outing as a proxy for the more fundamental crimes committed along the march to war in Iraq.

Unlike some (see Justin Raimondo's last two columns, for example) I've never had more than a forlorn hope that Fitzgerald would delve into the Niger forgeries, the Chalabi connection, the Office of Special Plans, the Downing Street Memos or any of the other investigative leads into the heart of the neocon conspiracy. Nor have I seen any evidence -- or even plausible speculation -- that would lead me to believe Fitzgerald has expanded his probe beyond the immediate matter at hand: the leak of Valerie Plame's identity and CIA affiliation. But, like most hardcore Cheney administration haters, I've been content with the busting-Al-Capone-for-tax-evasion metaphor. To paraphrase Donald Rumsfeld: You go to war with the indictments you can prove, not the ones you'd like to prove.

Jeff Cohen:

But there's a special reason this scandal is so personally satisfying to me as a media critic. It's because elite journalism is on trial. Powerful journalists are playing the role usually played in these scandals by besieged White House operatives. They're in the witness dock. It's a New York Times reporter who is failing to recall key facts...mysteriously locating misplaced documents...being leaned on to synchronize alibis.

Elite journalism is at the center of Weaponsgate, and it can't extricate itself from the scandal. Because, at its core, Weaponsgate (or, if you're in a hurry, "Wargate") is about how the White House and media institutions jointly sold a war based on deception -- and how the White House turned to these media institutions to neutralize a war critic who challenged the deception.

A particularly cute quote from Billmon:

Of course, everybody’s free to indulge in their favorite theories about Whose Behind It All. After all, we are talking about the era of "dark actors playing their games," to quote the conveniently dead David Kelly. Like Watergate, this is one of those cases where paranoid conspiracy theories are simply alternative rough drafts of history.

Manu Chao's new Album

The new Manu Chao album Siberie m'etait contéee... is wonderful. The lyrics are the best that Manu has put out so far and I can only understand half of them. If you were looking for an excuse to learn french, this is it.

I was only able to order this from Amazon.fr. There must be a cheaper choice. If I did not have a busy schedule it would have been just as expensive to fly to Paris and get back to get the CD.

Ajax.Net source public

I missed the announcement of the Ajax.Net source code, it was announced here.

A discussion forum is available here and various Ajaxy controls are available from their Subversion repository:

	svn co https://svn.borgworx.net/SVN/BorgWorX/trunk/Web/
	

Ali-G

Dear Lazyweb,

Is the era of Ali-G over?

Update: Bastien Nocera points out that it is over, but there are a couple of Sasha movies coming out. Its the end of an era.

Interviews

Edd Dumbill interviewed Chia-liang Kao, the creator of SVK, a distributed version control system layered on top of Subversion:

SVK allows distributed development using existing infrastructure, which means you don't need to deploy a new system for your whole organization. SVK works best with Subversion, but you can also seamlessly branch from CVS, Perforce, or even git repositories. SVK lets you commit directly back to Subversion repositories and "commit as a patch" to other systems or to Subversion repositories you don't have commit access to. Such patches can then be applied by the maintainer, using either a regular patch tool, or SVK, which also will help filling the commit log.

[...]

It makes things easier for contributors to open source projects to maintain their patches as a local branch and accept changes from upstream, rather than being treated like second-class citizens who have to deal with patch hell just because they can't commit. You can do this with many other version control systems using "vendor branches," but mostly they require too much work to maintain a short-lived branch just for a patch or two that haven't yet been reviewed and committed.

Open source projects sometimes fork because it's too hard to integrate branches that have diverged too much. Painless merge makes it much easier to branch instead of fork.

John Osborn interviews Anders Hejlsberg at O'Reilly. Mostly focused on the new features in C# 2.0 with a little touch of how they are used to build 3.0 features.

Today's Internet Weather

Light patches of slashdot comments and a heavy downpour of porn later in the evening.

Community Service Announcement

Tonight at 11:30pm, in Comedy Central, after the Daily Show. The premier of "The Colbert Report".

Interesting News

Sebastien posted an update on the state of Code Access Security (CAS) in Mono:

Today, actually this has been true for quite a while, we are able to run all of corlib's unit tests without any failure, including an additional 301 CAS specifc tests (i.e. that aren't normally executed). We can also execute all System.Drawing.dll unit tests without requiring, or even demanding, UnmanagedCode permissions. We also have a great coverage (including 2450 CAS specific tests) for System.Web.dll with perfect results (except for a small mcs bug on partial classes) and a few more tests (18) for System.Xml.dll.

Make sure you read the rest of Sebastien's post if CAS is of interest to you.

Mikael Hallendal from Imendio unveiled their effort to port Gtk to OSX. They had not done much publicity before as they wanted to get some code working first. Anders Carlson is behind this effort. Hopefully we will see the community pick up and a nice theme to integrate the apps with the native look of the Mac happen.

Also see the GIMP running without on OSX without X11.

These are fantastic news for Gtk# users.

Erik points to an interesting inteview:

Interesting interview of Otee's CEO on TUAW. Otee uses Mono for scripting in their Unity 3D game engine, that's the JavaScript feature they're talking about. Developers can also use Boo and C# for game scripting, thanks to Mono multi-language support.

Medsphere on Business Week

Medsphere was profiled on BusinessWeek. Congratulations to the team!

Medsphere uses Gtk# and Mono to develop their application which run on Windows and Linux from the same codebase. Todd showed their application at the Mono Users Meeting at the PDC.

On the same issue they have an interesting article: Open Source: Now its an Ecosystem.

Nemerle Offers Courses OnLine

The Nemerle folks are going to teach some courses online to expose their language to more people.

Using FireBird.NET with Mono

Today I tried out the Firebird database as we just integrated Carlos' bindings for it into the Mono release. Firebird has two modes of operation, it can be used as a server that clients connect to or it can be used as an embedded database, just like SQLite.

The traditional server/client setup works as expected, but I was more interested in using it as an embedded database, This mode is not very well documented. This blog entry tries to document the steps necessary to embed the database and use it with the managed API.

I installed the "FireBird Classic" configuration as an RPM, which is available here. Other downloads are available here.

These instructions are based on the data I found here and here.

Then you must create a mini-firebird environment for your embedded database, the following commands must be done as root:

	# mkdir /home/miguel/minibird
	# mkdir /home/miguel/minibird/bin
	# cd /home/miguel/minibird
	# cp /opt/firebird/firebird.conf .
	# cp /opt/firebird/firebird.msg .
	# cp /opt/firebird/security.fdb .
	# cp /opt/firebird/bin/fb_lock_mgr bin
	# chmod +rx bin/fb_lock_mgr
	# FIREBIRD=`pwd` /opt/firebird/bin/gsec
	GSEC> add miguel -pw pwd
	GSEC> quit
	# chown -R miguel *
	

Edit the firebird.conf file and add (or edit the commented line) the following line:

	RootDirectory = /home/miguel/minibird

That will create the mini-root and create an account "miguel" with the password "pwd" and set the permissions for all the necessary files.

You can now create a database:

	$ /opt/firebird/bin/isql
	SQL> create database "hola.gdb";
	SQL> create table developers (name varchar (40), email varchar(40) not null);
	SQL> insert into developers (name, email) values ('miguel', 'miguel@novell.com');
	SQL> insert into developers (name, email) values ('duncan', 'duncan@ximian.com');
	SQL> commit;
	SQL> exit;
	

The C# program to access it is fairly simple:

    using System; 
    using System.Data; 
    using FirebirdSql.Data.Firebird;
     
    public class Test {
            public static void Main(string[] args) {
                    string connectionString = 
                    "Database=hola.gdb;servertype=1;user=miguel;password=pwd";
     
                    IDbConnection dbcon = new FbConnection(connectionString); 
                    dbcon.Open(); 
                    IDbCommand dbcmd = dbcon.CreateCommand(); 
                    string sql = "SELECT * FROM developers"; 
                    dbcmd.CommandText = sql; 
                    IDataReader reader = dbcmd.ExecuteReader(); 
                    while(reader.Read()) {
                            object dataValue = reader.GetValue(0); 
                            string sValue = dataValue.ToString(); 
                            Console.WriteLine("Value: " + sValue);
                    } 
                    
                    // clean up 
                    reader.Close(); 
                    reader = null; 
                    dbcmd.Dispose(); 
                    dbcmd = null; 
                    dbcon.Close(); 
                    dbcon = null;
            }
    }

Build your program:

	$ mcs sample.cs -r:FirebirdSql.Data.Firebird -r:System.Data

To run this program you must set the FIREBIRD environment variable to point to the mini-firebird directory:

	$ FIREBIRD=/home/miguel/minibird mono sample.exe
	Value: miguel
	Value: duncan

This is a personal web page. Things said here do not represent the position of my employer.