Disclaimer: this is an automatic aggregator which pulls feeds and comments from many blogs of contributors that have contributed to the Mono project. The contents of these blog entries do not necessarily reflect Novell's position.

July 03

GSoC: the now and the next

As you may recall, I have the great pleasure to participate again in Google Summer of Code this year with Mono.

Since we are nearing midterm evaluation, I thought about doing a kind of status report like last year. Unfortunately, I haven’t been as active as I wanted to this time (exams were more time consuming this semester). However there is still some cool stuff that have already landed and which are described next.

What has been done since last year

Actors and Software-transactional-memory goodness

I took some time to implement rudimentary version of those two parallel programming paradigms earlier this year.

See this post which describes in more details the ideas behind them and some examples.

New more efficient scheduler’s deque

The scheduler’s deque that was used before was quite complex due to the fact that the inherent storage mechanism was based on a doubly linked-list which is rather hard to get right when you add parallel and concurrency constraints (see ABA problem for instance).

The algorithm I was using was mostly designed with C++ in mind where you can mess up with pointers pretty easily and make freely use of CAS on pointers as integers. Since I wanted to avoid any kind of unsafe or native code in the library, I tried to port that algorithm down to C#.

After some mail exchange with a fellow person (hey Susan o/) who was using Mono’s ParallelFx on a big box in a laboratory, we started to see some concurrency problems with my code. Turns out that the ABA prevention code wasn’t really working with my C# rewrite. Therefore I decided to hunt for another, more C#-friendly, type of scheduler’s deque.

Actually, I did find it and it’s the one used now under the CyclicDeque name. It’s particularly swift because it only do integer manipulations that are particularly fast with the C# Interlocked methods and doesn’t suffer of the ABA problem because, using the vast range of values available with 64 bits integers, it’s based on a forward-only algorithm.

With the tests I was able to do, this new deque works more reliably and faster than the precedent. It’s currently enabled by default but I need to do some 32 bits checks to see if it behaves as expected on those plateforms.

New types

Following the new type introduced as part of my first SoC and the two parallel paradigms I described above, I have done some other parallel and concurrent code to be used both internally and publicly.

One of those is a new collection, ConcurrentSkipList that provides a thread-safe implementation of a skip-list (a nice tree-ish list container). This skip-list implementation is also used for the ConcurrentDictionary type.

The other is a stripped down CountdownEvent called Snzi (Scalable non-zero indicator) that basically do the same thing except that instead of keeping a count record, Snzi just tells in a binary fashion if there is or not a count remaining. That weaker semantic opens the door for more scalable and efficient optimizations.

Optimizing, fixing and hardening

The final task that occupied me during the inter-soc period was mostly tuning and bug-fixing the existing parts with a focus on Task reliability and PLinq performance and correctness.

What have I begin to do for this SoC

Currently I’m hard working on the .NET 4 port of Mono’s ParallelFx as it comes with a whole lot of new stuff and API changes.

The ParallelFx team over at Microsot has been publishing posts these last months about the new things coming down the pipe (check out their blog if you still haven’t do so).

At the moment, the System.Threading.Tasks namespace port is fairly complete and Tasks/Future unit tests are all back to green.

I’m now working a bit on the Collections namespace, adapting some of my code to the new API (notably ConcurrentDictionary) and seeing how to implement the new Partitioner pattern.

What to expect next

mono-ireland

First of all, the following weeks are going to be quite more productive as, with big thanks to Alan and Miguel, I’m going to spend a month in Dublin hacking in the Novell offices. Looking forward to this.

As for the next, the plan is to continue porting the existing code to .NET 4, first with the Parallel loops class (with probably some further optimizations on data source partitioning) and then PLinq.

In addition, since Mono recently enabled the .NET 4 profile in SVN, some of the ParallelFx code will also soon transition from the google code repository to official Mono’s trunk for early mass consumption.

Finally, last but not least, I’m going to devote the rest of the summer to testing ParallelFx more extensively with, both, improving the existing test suite with harder parallel stress-testing and the development of a Chess-like parallel correctness checker.

See you at the end of the SoC for another full report ;-) .

Mono Appliance for VirtualPC

With the release of Mono 2.4.2 we are introducing an appliance image for Virtual PC. This makes a lot of sense for Mono as one of our favorite target user groups is .NET developers looking to get an application running on Linux. Many of these developers use Virtual PC. All three of our appliance images [...]

July 02

See you in Gran Canaria!

Pounding a bowl of cereal. Almost time to leave for my flight!

On Sunday I'll be giving a talk about the UI Automation spec, and the work of the Mono Accessibility team. If you're an a11y nerd, or your day job is Winforms or Silverlight app development and you want to automate that shit on Windows and Linux, or you just don't believe that I am currently bearded and want to confirm for yourself, please check it out.

I'd also love to talk to people about Snowy, Free web services, GNOME's online desktop strategy, Batman, and the future of Tomboy.

Dark Victory is really good so far. Doesn't stand on its own...you need to read The Long Halloween first (and therefore should read Year One before that).

A few weeks ago I drafted a blog with updates on Snowy, and just ran out of time to finish it up and post it. But there is some basic info I want to share, so here's an updated excerpt:

We are really excited about all of the positive feedback we're hearing about Snowy, and the upcoming Tomboy Online service. We were reluctant to announce the project before we could confidently host it, but based on the excellent feedback and participation we've received so far, it's clear that we did the right thing by announcing early.

The day I blogged about Snowy, I left for San Diego to participate in my friends' wedding. When I returned on Monday, I had a lot of catching up to do! Here are some of the recent happenings:
  • Brad set up a Snowy mailing list, and a Snowy product in GNOME bugzilla.
  • Og Maciel has begun work on a virtual appliance for Snowy, and in the process of doing so has helped to unearth some bugs (our first mailing list activity). Thanks Og!
  • Ryan Paul of Ars Technica fame as written a great article about the current state of Snowy.
  • Rodrigo Moya and Stuart Langridge have continued to help us refine our REST API, as they work on implementing it for Ubuntu One. Stuart contributed patches to upgrade our authentication from HTTP basic to OAuth, and I finally pushed it upstream, along with corresponding support in Tomboy (based on some handy dandy code from Bojan Rajkovic). I am really grateful for their help!
  • We have our first localization! Thanks to Viatcheslav Ivanov for diving in.
  • The Midgard project has implemented our REST API as well, and intends to add support to Conboy (Tomboy ported to C on Maemo) as well.
This is all after less than a week of Snowy "going public"! This is an encouraging sign that we are on the right track with API design and modularity of implementation.

So that is my updated paste from the draft. The rest was all technical details on the design of the API, and how much Rodrigo, Stuart, and Brad all rock, etc etc. I'll post about that soon...for now I'm going to focus on getting a demo server up for you all to play with!

For those to whom I owe a drink, your day of reckoning approaches!

Moihang: Part 2

Yesterday, I introduced you to Moihang, our family's version of Hangman a popular word guessing game. Maria and Monica had suggested early on that we use sounds every time you pressed a keystroke. I then suggested to use different sounds for correct and missed guesses. Finally, it only made sense to play some sort of fanfare when winning and some sort of dramatic sound clip if you fail to guess the word.

Since we wanted to support Windows versions that we knew only had .NET Framework 1.1 I decided to make it the minimum Framework version. That left me P/Invoking winmm.dll for wave file sound playback. That was easy enough in Windows and I must admit that I ignorantly assumed that P/Invoking in Linux would be almost identical and just as easy...

About two solid days of Linux audio architectures and libraries research, I ended opting for programming my own shared library using ALSA. I also learned a bit about Pulseaudio, sox and esound.

You can look at how I use afileplay in Moihang here.

The other somewhat interesting thing that I tried to accomplish with the development and release of this application was to create a build system for a WinForms app that can integrate with the menus on the GNOME desktop as well as having an Inno Setup script for building the Windows Installer. Just last week I received an email from a fellow that wanted to support build systems for Linux as well as Windows programmers at his shop. He wanted to better understand the way that MonoDevelop generated Makefiles could help with that goal.

Well, I used the incredibly awesome MonoDevelop myself to create the initial build system (did a bit of manual tweaking but truly minimal) and ended up with something that autotools built quite nicely and maintainable.

I will stop talking about this now and give you the URLs already for download and further information on Moihang and the Afileplay library.

Moihang's product page.

I hope to continue improving Moihang -- time and professional obligations permitting. I want to create a Gtk# version of the UI, maybe a Maemo version as well. I want to change the actual hanging depiction from my initial “easy way out” bitmap file sequencing to a 2D drawing system (GDI+, GDK, etc.).

For now, use it if you like and give me feedback or hack it some. Enjoy!

July 01

Visual Studio 2008 jQuery IntelliSense Fix

I am tinkering with ASP.NET MVC and jQuery and making my first baby steps in a whole new horrible world of web development. I found out that the JavaScript IntelliSense in Visual Studio 2008 is broken out of the box. The error is:

Warning    2    Error updating JScript IntelliSense: jquery-1.3.2.js:
   Object doesn't support this property or method @ 2173:1

The fix for Visual Studio 2008 SP1 by Microsoft can be found here:

KB958502 – JScript Editor support for “-vsdoc.js” IntelliSense doc. files

Multiple Parallel Mono Environments

If you are a Mono developer, either you develop Mono or you use Mono for development, I’m sure you already have your Parallel Mono Environment set up and you are happy using it. Keeping a parallel environment is necessary because that way you don’t break your default Mono installation or an specific mono application, so [...]

Favorite “gitness”

rafael-mb:~ rafael$ git-shell fatal: What do you think I am? A shell? What other kinda of “gitness” have you encountered?

.NET/Mono Code Camp in Tarragona, Spain



It's official: there will be a .NET/Mono Code Camp in Spain in October. The proposal was made some months ago by CatDotNet, a local .NET user group. Several other .NET user groups quickly joined. The initial idea was to do a traditional Microsoft.NET Code Camp, but I though it would be a good chance of putting together .NET and Mono developers, since after all we have a lot to share. Everybody thought this was an awesome idea.

This will be a good chance for learning and sharing knowledge about .NET and Mono, but I'd also like it to be a meeting point for the Spanish Mono community. I'll be there giving some talks, and I hope other Mono hackers can come too. If you want to propose a talk, or you want to contribute please join the official forum.

More info about the Code Camp in the official web site: www.codecamp.es.

Variance, Thy Name is Ambiguity

Previously
On This Blog...

"I love you, Generic Variance, and I want your babies RIGHT NOW!"

"I think there's something you should know about Generic Variance..."

"I can change him!"


And now, the thrilling continuation...

I've just sent my recommendation to the ECMA 335 committee regarding the generic variance problem. I present it here for your reading pleasure:


Quick Recap


The following is an example of an ambiguous circumstance involving generic variance, the very sort over which we have all lost so much sleep:

.class interface abstract I<+T> {
    .method public abstract virtual instance !T Foo ()
}

.class A {}
.class B extends A {}
.class C extends A {}

.class X implements I<class B>, I<class C> {
    .method virtual instance class B I[B].Foo () { .override I<class B>::Foo }
    .method virtual instance class C I[C].Foo () { .override I<class C>::Foo }
}

// Meanwhile, in some unsuspecting method...
I<A> i = new X ();
A a = i.Foo (); // AMBIGUITY!


Give a Runtime A Bone


To disambiguate such situations, we introduce a new custom attribute in the BCL. For the sake of example, let's call it System.PreferredImplementationAttribute. The PreferredImplementationAttribute is applied to a type and indicates which implementation should be selected by the runtime to resolve variance ambiguities. Our above definition of the type X would now look like this:

.class X implements I<class B>, I<class C> {
    .custom instance void System.PreferredImplementationAttribute::.ctor (class System.Type) = { type(I<class C>) }
    .method virtual instance class B I[B].Foo () { .override I<class B>::Foo }
    .method virtual instance class C I[C].Foo () { .override I<class C>::Foo }
}


New Rules


With the addition of this attribute, the runtime requires that any type defined in an assembly targeting the 335 5th edition runtime which implements multiple interfaces that are variants of a common generic interface MUST specify ONE AND ONLY ONE PerferredImplementationAttribute for EACH of the potentially ambiguous common interfaces, and that each such specification of a PerferredImplementationAttribute must reference an interface implemented by the type that is a legal variant of the ambiguous common interface. In other words, all possible ambiguities MUST be disambiguated by the use of PreferredImplementationAttribute custom attributes. If a type does not satisfy these rules, the runtime MUST throw a System.TypeLoadException.

As this rule only applies to assemblies targeting the new version of the runtime, old images will continue to execute without issue. If the committee prefers, the resolution of ambiguities in old types may remain unspecified, or alphabetical priority could be codified in the spec to standardize such behavior. I would be fine leaving it unspecified.


Custom Attributes vs. Metadata


Ideally, I feel disambiguation information belongs in the type metadata structure rather than a custom attribute. If the committee feels that amending the metadata specification is tenable, I would recommend doing so (though I don't have any thoughts at this time on the exact logical or physical nature of such an amendment). If, on the other hand, changing the metadata spec at this point in the game is not feasible, then a custom attribute will just have to do. I see the addition of one custom attribute type to the Base Class Library as entirely justified.


An Aside to Our Friends on the 334 Committee


As a note to language designers targeting the runtime, I personally would consider it obnoxious if developers where burdened with the manual application of such a custom attribute. C# and other languages would do well to prohibit the direct use of the custom attribute, favoring instead a special syntax to denote the preferred implementation (the "default" keyword comes to mind in the case of C#). If this committee changes the type metadata spec to include preferred implementation information (and does not introduce a custom attribute type for that purpose), then special language syntaxes will be necessary.


An Alternative


In the interest of completeness, I will describe an alternate (if similar) approach to the ambiguity resolution problem. Rather than annotate types to indicate which of their interface implementations will satisfy ambiguous calls, the preferred implementation could be denoted on a per-member basis. Referring again to our original type X, this solution would modify that type thusly:

.class X implements I<class B>, I<class C> {
    .method virtual instance class B I[B].Foo () { .override I<class B>::Foo }
    .method virtual instance class C I[C].Foo () {
        .override I<class C>::Foo
        .custom instance void System.PreferredImplementationAttribute::.ctor ()
    }
}

The member I[C].Foo is annotated with the System.PreferredImplementationAttribute, indicating that it will be selected by the runtime to fulfill otherwise ambiguous calls to I<T>.Foo. Note that in this solution the constructor to the PerferredImplementationAttribute type is parameterless. The runtime ensures that for EACH of the members of an interface which is the common variant of two or more of the interfaces implemented by a type, ONE AND ONLY ONE of the implementations for that member is flagged as "preferred."

Per-member preference definition affords developers more control but costs runtime implementers time, effort, and simplicity. I also don't envision many scenarios when developers would desire per-member control over implementation preference. I personally find this approach less tasteful than the per-interface solution but I mention it here, as I said, for completeness.


One More Thing...


There remains a situation on which there are varied opinions:

.class interface abstract I<+T> {
    .method public abstract virtual instance !T Foo ()
}

.class A {}
.class B extends A {}

.class X implements I<class A> {
    .method virtual instance class A I[A].Foo () { .override I<class A>::Foo }
}

.class Y extends X implements I<class B> {
    .method virtual instance class B I[B].Foo () { .override I<class B>::Foo }
}

// Meanwhile, in some unsuspecting method...
I<A> i = new Y ();
A a = i.Foo ();

In this situation I<A>::Foo is called on an object of type Y. There is an implementation of I<A>::Foo in Y's type hierarchy (X::I[A].Foo), but there is also an available implementation which is a legal variant of I<A> in Y itself (Y:I[B].Foo). Does the runtime favor the exact implementation, or the more derived variant implementation? I don't have strong feelings on the matter, but my slight preference is for favoring the exact implementation.

The runtime is deciding on behalf of the developer which implementation is most appropriate. It could be argued that an exact implementation, wherever it is to be found the type hierarchy, is more appropriate than a variant implementation.

Also - and this is an implementation detail which should not outweigh other considerations but may be useful to keep in mind if all other things are equal - Mono stores a type's implemented interfaces in a binary tree, meaning that finding an exact implementation is an O(log n) worst-case operation, whereas finding a legal variant interface among a type's implemented interfaces is an O(n) worst-case operation (all interfaces must be examined to see if a legal variant exists among them). I haven't heard of any way to do O(log n) (or better) lookup of variants. With such popular types as IEnumerable`1 becoming variant, the superior time complexity could make a difference.

Moihang: a word guessing game

I programmed almost exclusively on Microsoft Windows and DOS from 1988 until 1999. I started doing batch files, Quick BASIC, Visual Basic, and soon thereafter C/C++ Windows SDK/MFC/ATL. Along the way I programmed for a few flavors of UNIX and most Mac OS versions (Power Plant/Carbon). There for a while a did quite a bit of Palm OS and other embedded systems.

Around the turn of the century -- I love to sound that old (Logan's Run kind of old!) -- I discovered Linux and Free BSD and above all... C#

As Dewey Cox would say: “It's been a beautiful ride”.

Yet playing a wave sound file on Linux from a desktop application is, in my opinion, somewhat harder than in Windows. Of course, there are obvious reasons for this. Microsoft as well as Apple and other commercial OS providers could always dictate a simple, standard and unified way to give you an API call with just a couple of input parameters (file name and/or path usually). The Bazaar nature of Linux programming with its multiple desktops and various low level audio interfaces give you many choices lost of granularity but with all that, comes a lot of homework for those who just want to have a sound clip play when an event in their application takes place.

My beloved daughter Monica is always asking my wife Maria and I to play 20 questions and other word guessing games from the back seat of the car whenever we go from point A to point B – In Texas that may take a long time since point A usually is at least 30 to 40 miles from any point B. One day, we started playing hangman in the car using a piece of paper and a pencil. Both Maria and Monica liked it, and I decided to make it a cross platform desktop app for all our computers.

Although, my first impulse was to make a Gtk# app -- 90% of our computing at home is done on Linux on top of a GNOME desktop -- I instead decided to use WinForms because I wanted try to create RPMs for openSUSE in hopes that I could virally propagate the good news of .NET and WinForms to billions of .NET/Mono embracers that I always read about in slashdot and OSnews <-- sarcasm alert.

Tomorrow, I will make another blog entry where I will share more about my humble solution to the simple programmatic playback of wave and au files while on Linux. Also, the Martinez-Figueroa family Hangman clone: Moihang

moihang-shot.png

June 30

MonoSpace Conference Announced

Scott Bellware has announced the MonoSpace Conference in Austin Texas on October 27-30th.

Scott has made a Call for Speakers:

The Monospace Conference is looking for teachers to give tutorials on the Mono framework, tools, languages, and platforms supported by Mono.

Some tutorials are aimed at .NET developers with little experience with operating systems other than Windows, and others are geared to experienced Mono developers with exposure to the various Mono platforms.

The tutorials are two hour to three hour interactive sessions that can be any combination of follow-along examples, labs, and lecture.

We're looking for tutorials on subjects such as Linux, Mac, Windows, web, desktop, servers, message queues, databases, iPhone, Android, Amazon's EC2, among others.

You can track the progress of the conference at the MonoSpace Conf Blog.

You can also follow the progress on twitter.

Scott was one of the founders of the Alt.Net series of conferences.

Developing on Android

I intend to buy an Android phone. It’s probably going to be the HTC Hero mainly because it’s almost available where I live and it also comes without a simlock, unlike for example the HTC Magic which is exclusive for Vodafone. Next I plan to develop some übercool applications but in the meantime I’ll start [...]

Some Cool Mono Announcements

Yesterday we shipped Mono 2.4.2, our long-term supported version of Mono. It ships Microsoft's opensourced ASP.NET MVC stack for the first time (you could get it before on your own, but now it is integrated) and fixes over 150 reported bugs.

Chris Toshok announced M/Invoke a tool to port applications that use P/Invokes on Win32 to Linux and MacOS.

What Chris does not talk about on his post is that he was trying to use some .NET software that interfaces via USB to his glucose meter and was trying to get this to run on Linux. The tool is mostly .NET with the usual handful of P/Invokes to Win32. And this is how M/Invoke was born: a tool to retarget P/Invoke happy applications into becoming pure managed applications.

This opens new doors to forcefully port more apps to Linux.

Alan McGovern released a new version of Mono.Nat one of the libraries used by MonoTorrent.

Jordi Mas released a new version of Mistelix a DVD authoring tool for Linux:

Jordi's GBrainy brain teaser game was picked up by MoLinux, a regional Linux distribution, and shipped it translated to Spanish:

Joe Audette's mojoPortal was being installed four times as much when it got included in in Microsoft's Web Platform Installer site (more stats here).

For years I have loved the Joel on Software rules for software engineering. And one of those rules is "Build in one step". We have not always succeeded, but we have always tried. Lluis delivers the one step to build and run for MonoDevelop on Windows: Load solution, Hit F5, up and running.

Google Chrome really lead the way here, and I want very badly to have all of Mono building in Visual Studio with one keystroke, but we are not there yet.

Stephane reports on some nice startup performance improvements for F-Spot. Loading time for 10 images from Stephane's own image collection went from 1.2 seconds to .5 seconds.

MonoDevelop got some enhanced support for autoconf integration.

Jeremy Laval released another version of ZenComic a desktop Comic reader:

David Siegel announced a new release of Gnome Do on behalf of the Gnome Do team. In particular, it is now easier to write "Docklets" for the Gnome Do panel and for those of us that like the Emacs keybindings, it is now possible to use C-N and C-P for navigation

And of course the Google Summer of Code is in full swing:

And we have various very exciting projects brewing.

Jonathan Pobst has been exploring integration points for Mono and Visual Studio 2010:

Guadec: I will sadly not be attending the Guadec/Akademy conference in Canaria next week. This is going to be a busy summer for us as we are shipping a lot of code in the next few months: Moonlight 2.0, Mono for Visual Studio, MonoTouch 1.0 and Mono 2.6.

GNOME Do 0.8.2 Released

GNOME Do 0.8.2 was just released! Peng has a great post describing what’s new. Get the application source here and the plugins source here.

El Sabio Frestón

A few days back MoLinux, the GNU/Linux distribution sponsored by the Castilla la Mancha government in Spain, released Molinux version 5.0.

As part of the different customizations and enhancements that they do to Ubuntu, they introduced a new program called El Sabio Frestón. The program is named after a character in El Quixote that was a smart guy. If you read the Quixote and cannot recall the character, do not worry, a friend of mine that spent five years doing her degree in Spanish Literature could not neither.

El Sabio Frestón is a gbrainy fork. I'm pretty happy about this because I think that one of the cool things about free software is that people can extend, modify and distribute the software beyond the original author capabilities and interests. These guys have just done this. Revamping the user interface to make it less nerdy and more child friendly, adding additional puzzles categories for literature, geography and verbal analogies. Probably this game will make it into another regional Linux distributions in Spain (gbrainy is available in all of them), since they usually share packets.

Unfortunately it will be difficult to leverage on their work for gbrainy, since most of the work that they have done can be hardly internationalized. On top of this, they used a year old version of gbrainy. However, I hope that better collaboration in the future could drive gbrainy to reuse their work.

I was also told recently that the city hall of Zaragoza is using gbrainy in memory workshops for senior citizens. As most researchers do, I believe that most of these games, if not all, do not provide any tangible benefits to a player's memory or mental ability. However, I'm sure that they will have fun playing and they will socialize more, things that are good too.

minvoke - forcing portability

Portability to Mono is pretty easy when writing applications entirely in C#.  Winforms works well enough, just about anything console-based will work, and as long as you avoid some obviously broken areas of the API (System.Management, I’m looking at you), you’re usually ok. We’ve done much in the area of migration tools, such as providing the [...]

Mono 2.4.2 has been released

Mono 2.4.2 has been released, this is a maintenance release for Mono 2.4 and contains over 150 bug fixes. It can be downloaded from our downloads page.

This version is the first version to integrate Microsoft's open source ASP.NET MVC stack.

Check the release notes for more details.

June 29

Office fail

One of the better fails I’ve seen from MS Office:

mojoPortal 2.3.1.0 Released

I'm happy to announce the release of mojoPortal 2.3.1.0 available now on our download page.

This is primarily a bug fix release.

Fixed Issues

Fixed an issue in the WebStore where using EURO currency with PayPal the amounts returned from PayPal were not being correctly parsed.

Fixed a bug in CryptoHelper that was causing an error in some environments when encrypting or decrypting data.

Fixed missing titles on some edit pages that were a side effect of our refactoring of page titles to give more control over them in the last release.

Downgraded YUI from 2.7.0 to 2.6.0 when using the Google CDN, because of a bug in YUI 2.7.0 where an FCKeditor inside a YUI tab sometimes was not visible in IE.

Added required field validators in the Content Style Template editor because leaving the element blank could cause the FCKeditor to throw an error.

Implemented a Content Delete Handler provider system to make a more consistent way of deleting related content when a module instance is deleted. Previously some features were not cleaning out their data when a content instance was deleted.

Last release we introduced support for search results highlighting. This brought with it a possibility for an information disclosure if the user had view permissions on the page but not the module. In the past only the page title was shown so there was no disclosure of the content but with fragments of the actual content now being shown in search results we needed to store the module view permissions in the search index in order to be able to filter search results based on those roles in addition to page view roles. In order to get the view roles into your search index requires rebuilding the search index. In order to not break existing search indexes I had to keep the default to not filter by the module view roles otherwise since the roles are not in the exisiting index all search results would be filtered out. In a new installation the preferred settings are in user.config.sample so that new installations should always filter by module view roles. Those who upgrade and rebuild their search index should add this to their user.config file: <add key="SearchIncludeModuleRoleFilters" value="true" />
This issue only affects those who have content on a page filtered by module view roles in addition to page view roles and only if you are using search results highlighting.

There is a corresponding minor update release for Event Calendar Pro to make it write module permissions also to the search index for events. Customers can download the new 0.0.1.5 version from their purchase history.

Fixed an issue where our App Keep Alive feature did not work in IIS 7 using Integrated Pipeline mode.

Fixed an issue in our SmartCombo dropdown when using Chinese characters.

Fixed an issue in the Image Gallery where the Greybox did not work if the caption had an apostrophy.

Fixed a similar issue in the blog where a script error would occur in IE in the blog if Odiogo was enabled and the blog title had an apostrophy.

Previously some skins had corner rounders surrounding the PageMenu control but if there were no child pages for the current page in the SiteMenu then the PageMenu would not be visible but the corner rounders would still be there. We solved this by moving the CornerRounders into the PageMenu control and out of the layout.master. This way if the menu is not visible neither are the corner rounders.

What Else?

We now force the use of a plain text editor in iPhone because none of the wysiwyg editors can work in iPhone due to the way they create png images of the page for zooming. So even though the editor rendered correctly because javascript is supported, there was no way to click in the editors. So now you can edit site content, make blog posts or anything you like using the iPhone though it does require knowledge of html.

Based on user feedback, I implemented additional CSS classes and and example skin showing how to layout forms with the labels above the form fields. Whereas most of the skins have the label on the left side of the input, andreasvicklund-02 now has forms with the labels above the inputs. Also I think now all the Cancel buttons have been changed to links which was also suggested as a usability improvement.

There was also a request to add a per instance unique CSS class on Html content instances so that it is easier when you want to style a particular content instance different that the others. I implemented this so that there is a wrapper div with class=modulex where x is the module id. This allows you to easily overrid ethe styles for particular instance. I did the same thing for blogs and links and a few other places.

Updated Italian resource files thanks to Diego Mora.

 



Joe Audette  ...
Click here to play

Mono.Nat 1.0.2

I just tagged and released Mono.Nat 1.0.2 . It's a fairly minor bugfix release which addresses a number of minor issues:
  • Added workaround for certain versions of miniupnpd which incorrectly advertise their available services (bug has been reported upstream)
  • Fixed some other minor issues with routers reporting incorrect services.
  • Added extra API to make it easy to log the full handshake/request process to help diagnose issues
  • Stopping and Starting discovery will rediscover all available devices correctly
  • Full support for computers with multiple network cards on multiple subnets
  • Rewrote the internals to ensure that the asynchronous API is 100% asychronous - prevents calls to BeginXXX blocking on some slower routers.
Precompiled binaries and sourcecode can be downloaded here and packages will soon be winding their way to a repository near you.

If you want to forward ports automagically on a upnp empowered router near you, this is the library for you!

Five straightforward steps to vanquish Mono

Recently, the noisy debate over whether Mono poses a real threat to Linux has gotten even noisier. I’m not a lawyer so I’m not going to comment on matters I don’t fully understand, but I want to offer a constructive suggestion. No number of blog posts or vitriolic Reddit comments can by themselves generate a [...]

June 28

Mistelix 0.21

Here we have Mistelix 0.21. Mistelix is an open source DVD authoring application with also Theora slideshow creation capabilities for GNU/Linux systems.

Lots of stabilization work goes in this version that introduces 11 bug fixes and some updated translations. It can be download it from:

http://mistelix.org/files/mistelix-0.21.tar.gz
MD5SUM: 6b75a5a1a96169f7366223859278eae3

And it is already packaged from some distributions. If you test it and have questions, you can use the public forum. If you find bug, do report them.

This is the version that I will be showing during my lightening talk at GUADEC next Saturday 4th of July and later at GUADEC-ES, still to confirm if it will be the 7th or the 8th of July.

The Pledge

I believe Free Software developers should be free to work without their work being compared to terminal illness [0][1]

I believe Free Software developers should be free to pick and choose their development tools [2][3]

I believe Free Software developers should be free to contribute without being threatened with eviction from a community [4][5]

I believe Free Software thrives on diversity, and that there should always be a choice [6][7]

I believe we should welcome ALL developers, from any community, in helping to contribute towards Free Software [8][9]

I believe Free Software is about freedom – for both users and developers [10][11]

I believe that our priorities are our users and Free Software – meaning we should always strive to present our users with the very best Free Software has to offer [12][13]

Do you?

June 26

Mono on the G1

I got a g1 for Fathers’ Day (Thanks Hannah!) and I’ve been futzing with it a bit. I rooted it and set up a chroot debian system. It’s running an ssh server, openvpn and snmpd.

There’s been a lot of talk about getting flash working on the device. They just announced yesterday the next phone by HTC (the folks who make the hardware) which runs the Android OS. It sounds like there will be a ‘lite’ version of Adobe Flash available for that model. With all the natter about the new phone and flash, I thought it might be fun to get Mono running on the current model and see if I can get a Moonlight plugin shoe-horned in to the browser.

I got quite a bit of help from #android on freenode and #mono on gimpnet when I brought the topic up. At this point, I don’t think I can make it look native, but perhaps just getting the project off the ground is enough to start interest.

At a low level, it looks like the phone can manipulate the graphic display by blitting RGB565 pixmaps to the fbdev. This might be enough to put together a quick cairo back-end. Since moonlight draws to cairo, something like this would be required in order to get things moving.

Now to see if I can compile mono + moonlight in such a way that it’s tiny enough to not take up the whole flash….

IKVM.Reflection.Emit Update

I have done a massive amount of fixes to IKVM.Reflection.Emit to make it full featured (even though it still doesn't implement all Reflection.Emit APIs, the functionality should (almost) all be there, for example via different overloads).

I completed support for generics (I think) and fixed many bugs in that area, ikvmc only uses a very small amount of generics so these fixes are unlikely to affect it.

It's worth explicitly stating the design goals of IKVM.Reflection.Emit:

  • It's a write-only API. Some GetXXX methods or properties may be implemented, but that's mostly for its internal convenience.
  • There is intentionally no error checking. During ikvm development the error checking in System.Reflection.Emit has cost me a huge amount of time, it is generally much easier to diagnose the problem when you have a broken assembly file. PEverify and ILDASM are your friends.
  • Code that uses System.Reflection.Emit in a write-only way is supposed to "just work" (modulo missing APIs, but those changes should be trivial).

I've done some pretty heavy duty testing on it. It should be ready for external (i.e. non-ikvmc) usage now. If you decide to use it (or consider using it), please let me know. As always, feedback is appreciated.

Changes:

  • Added support for ByRef and Pointer types.
  • Completed support for all literal field constant types and fixed null literal fields.
  • Added ModuleBuilder.DefineInitializedData().
  • Fixed many generics related bugs.
  • Added a (non-standard) API to ModuleBuilder to set the PE image base address.
  • Added TypeBuilder.SetParent().
  • Added TypeBuilder.GetMethod() and TypeBuilder.GetConstructor() to instantiate methods on generic types.
  • Added a (non-standard) API to ILGenerator to disable the "helpful" automatic leave/endfinally instructions in exception blocks.
  • Added support for pinned local variables.
  • Added UIntPtr and TypedReference signature encodings.
  • Fixed handling of TypeBuilder enums in custom attributes.
  • Added MethodBuilder.SetSignature().
  • Added GenericTypeParameterBuilder.SetInterfaceConstraints() and .SetGenericParameterAttributes().
  • Fixed (Method|Type)Builder.SetCustomAttribute() to set HasSecurity flag when SuppressUnmanagedCodeSecurityAttribute is set.
  • Added support for defining events.

Binary available here: ikvm-refemit-0.41.3464.zip

June 25

How to build MonoDevelop with Visual Studio

How to build MonoDevelop with Visual Studio in five easy steps:
  • Install GTK# (get installer here)
  • Install the Mono Libraries (get installer here)
  • Get MonoDevelop from SVN (update: instructions here)
  • Open main/Main.sln in Visual Studio
  • Press F5 (update: make sure you have the configuration DebugWin32 and platform x86 selected).

June 24

Report on F-Spot loading times


before: (on 0.5.0.3, averaged loading times on the first 10 items of my collection)
Loading image took 1.292241s

after: (current master, averaged on the same 10 items)
Loading image took 0.518812s



[UPDATE] Yes, that's on a dual core machine (Intel(R) Core(TM)2 Duo CPU L7500 @ 1.60GHz).

MD quick feature : switch support in Autotools deployment project

Just to let you know that MonoDevelop’s Autotools deployment projects now allow you to add specific switch for the configure script.

Let’s say for instance that you want to enable at compile time a specific feature in your project. Now what you can do is add a switch to your deployment project which will be turned in something like --enable-super-feature on configure side (i.e. you will be able to run configure like ./configure --enable-super-feature).

This will actually define (as in #define) a symbol that you can use with #if … #endif constructs in your code to activate your specific feature.

Since we are at it, here is a little screenie :

md-switch-defines

I will add support asap for simple makefile projects. The UI is also probably a bit rough, if there are any usability expert out of there I will gladly accept any sensible criticism :-) .

Zencomic 0.1.3

This is a release that was lying around on my desk. It contains a little set of new features.

Summary

Zencomic is the comic strip-driven productivity enhancer that periodically makes your day funnier by showing comic like Dilbert or XKCD in a bubble.

ChangeLog

  • Added a ‘Show now’ button for immediate pleasure consumption
  • Image processing is now deferred to a separate thread
  • Tentatively try to see if the screensaver is active

Download

Tarball : http://netherilshade.free.fr/mono/zencomic-0.1.3.tar.gz

Enjoy !

June 23

It's Not All Technical: The Million Dollar Raspberry Cheesecake with Chocolate Chip Crust

I went on a BBQ this weekend and baked a cheesecake for the event. I took a look at a couple recipe's online then went crazy and just sort of whipped up something on my own I thought would be good and it turned out to be tremendous so I thought I would share it with our engineering community here in case anyone also has a sweet tooth for a cheesecake. So good it tastes like a million bucks!

Ingredients:

1.5 cups of sugar
1 teaspoon vanilla
3 8oz packages of cream cheese
3 eggs
4 oz heavy whipping cream
1 cup of dark chocolate chips
1 lb chocolate chip cookie dough
3 6oz packages of fresh raspberries
1 package of gelatin (optional)

Directions: Preheat oven to 350.

The Crust
In a greased 9" springform pan ($10 at local wal-mart) take your 1lb of cookie dough and using your hand smash it flat into the bottom of the pan, spread evenly. Place it in the oven at 350 for 15 minutes. The cookie dough will be still gooey when it comes out and this is OK. Let it cool for 30 minutes, or put it in the fridge to cool for 15.

The Filling
In a mixing bowl add 1 cup of sugar and the 3 packages of cream cheese. Stir together while adding 1 egg at a time making sure each egg is stirred well into the cream cheese before adding the next one. Add the vanilla and heavy cream and continue to stir until it starts looking lusciously smooth.

The Topping
Add 12oz of raspberries (2 of the 3 packages) to a blender with the remaining 1/2 cup of sugar and liquefy into a puree.

Optional
You can mix up a packet of plain gelatin in 1 cup boiling water and put 1/2 in the cheescake batter and 1/2 in the raspberry puree. It helps makes the cheesecake more firm.

Assembly
Pour 1/2 of the creamcheese batter into the springform pan. Then add the 1 cup of dark chocolate chocolate chips spread around pretty good. Then add the remaining creamcheese over the chips.

Pour some of the raspberry topping on top of the cheesecake. Not too much, perhaps 1/4 cup, dripping around the top of the cheesecake and use a knife or something to swirl it into the top of the cheesecake (a chopstick or skewer works well too).

Put the rest of the raspberry puree sauce into a bowl or plastic container and throw it in the fridge to chill.

Pop the cheesecake in the oven at 350 for 60 minutes. After you take it out run a knife around the edges and then let it cool for at least an hour. Place the cheesecake in the fridge and let it cool for at least 4 hours.

Serving
To serve the cheesecake take it out of the springform pan and remove it from bottom plate using a plastic spatula (so as not to damage the pan) it should pop right off but be careful and work around the edges. Put the cheesecake on a serving dish and ring the remaning packet of raspberries around the cheesecake.

Take out the remaining raspberry puree sauce and when you plate a slice of cheesecake put 1-2 spoonfools of puree on top and 1-2 more around the cheesecake.

Conclusions
Deliciousness...fattening too, but totally worth it :) the special thing is the cookie dough crust which really makes it one of the best deserts ever.

Sorry no pictures, the cheesecake was eaten before I thought to blog about it. But it would look something like this except with raspberries.

June 22

To Sprite Or Not To Sprite

CSS Sprites have been around for a while, and keep coming up as a way to get blazing fast speed to your site.  Steve Souders just showed off SpriteMe! at Velocity '09 (speaking of — why use the CSS Sprite Generator or other server-based tools when you can use <canvas> and toDataURL and generate sprites [...]

June 21

Catalina

I've written another library, Catalina. It started as an example for using the threading library Iris and turned into what I think is a useful library. Catalina is an object data-store for glib and gobject. It provides access through a natural key/value pair interface.

Transparent serialization is supported to and from storage for types that can be stored in GValue's. A tight binary format is provided with the library. It supports basic types such as integers, doubles, floats and strings as well as GObjects in an endian-safe manner. However someone should go double check to call my bluff (and verify its correctness). A JSON serializer would be a quick hack if someone was interested.

In addition to serialization, Catalina supports buffer transformations to and from storage. Included is CatalinaZlibTransform which can apply compression using zlib. It will avoid compression on buffers smaller than the watermark property. This will help on data-sets that are occasionally small and compression would in fact enlarge them.

Catalina is an asynchronous data-store by design. The optimal way of accessing it is the same.

Everything is built upon Trivial DB (TDB) from the samba project. It was chosen over Berkeley DB because of its license. Like Catalina, it is LGPL and does not impose extra restrictions on linking applications such as BDB.

However, the one downside to using TDB is its lack of concurrent transactions. This means that if you have multiple threads doing work and updating storage the transactions would interleave. Since we are using iris, we can use message passing as a way to manage concurrent transactions. (This is done by queuing messages until the commit phase.)

Here is a short example using Vala to asynchronously open, serialize and store a bunch of "Person" GObjects. All the while compressing each buffer with zlib. Don't be scared by the mutex/cond, it's there to negate the need of a main loop.

I intend to add indexes soon, however that is going to take a bit of planning.

So there you have it, my newest hack.

git clone git://git.dronelabs.com/catalina

Learning from others mistakes and successes

I seriously hate writing overly long blog posts, but this turned into one. You are forewarned.


What can Linux and the Free Desktop learn from recent marketing campaigns by Apple and Microsoft? Let's quickly take a look at a few of the campaigns over recent years from Apple.

  • "There's an app for that"
  • Seamless hardware support with built in drivers
  • Built in applications for digital media (iLife)
  • Does not crash (quite debatable it seems)
  • No malware or viruses

I was surprised how well they were able to comfort users about switching to OS X. The same qualms exist for Linux and in very similar ways.

Rather than worry about migrating existing applications to OS X, (iPhone really, but it still applies,) Apple comforted the user in knowing that anything they want to do can be achieved. With Debian, for example, there are tens of thousands of applications. Do we have an app for that? Probably.

The first commercials that came out for OS X talked about how hardware just worked when you plugged it in. No extra installation of drivers or finding installation cd-roms was needed. Of course, now that more hardware vendors are supporting the platform, it is no longer the case. Linux has an advantage here due to frequent release cycles. The consistent releasing of new software and drivers gives a leg up for supporting current hardware sooner. Granted, someone still needs to be writing those new drivers. But if GkH is right, then Linux also has more drivers than any operating system ever written.

Apple talks about their iLife applications a lot. They are good and all but we have acceptable alternatives for them. Providing a full Office compatible product is quite important and you don't see either bringing that up. Granted, I would love to see an application as sleek as Apple's Keynote or Pages.

They also made hardware that developers wanted to play with such as the airtunes device. Has anyone made an airtunes-like device (airport express) with just F/OSS software. I'd think that pulseaudio could do most of what is needed.

Each of the framework libraries perform a single task well. Yet, they all still integrate together. For example, an application can control external windowing animations. Say that I'm writing a book reader and when the user turns the page I want the page to actually tear off the application window and fly across the screen. This is just not possible in a practical way today. Now that X has compositor support, shouldn't it be available to the application to provide custom control? I would love to make Marina have a native newspaper interface and do exactly that. This is just an example, many facets of the system layer need fresh innovation.

There are tools to write to make our daily lives easier. Streamlining development will only make our time-to-market sooner.

How is Microsoft reacting to the marketing campaigns from Apple? They have a few failed attempts at using celebrities such as Seinfeld. But more recently, are the "Laptop Hunters" ads. These are quite funny as you will notice they get laptops that don't match what they claimed to have wanted at all. Most importantly, though, they are attacking Apple on price and trendiness. I guess they tout gaming on PC's too. Gaming, however, is a strange problem since the total market share of PC gamers relative to PC users is quite small. It's also shrinking as the Xbox, Wii, and PS3 continue to expand their coverage. Regardless, they are both beat on price.

Additionally, I thought the slogan "Life without walls" was funny since without walls you can't have windows.

Many pundits, myself included, have talked about how netbooks can totally change the game. The iPhone was similar in the phone market. Do you think it would have been as successful without the developer platform and thousands of applications?

So finally, how can we replicate the positive results Apple had? What is missing from our platform today (can linuxhator kick our asses into shape)? What are our weaknesses (and how can we fix them to become strengths). What story do we have to tell developers? What do we really enjoy about our platform?

June 20

Announcing Gio# and Gtk#Beans

For a handful of good reasons (see Mike's mail), gtk-sharp, the gtk bindings for Mono and .NET, lately chose not to follow the hectic 6 months release plan of both gtk and glib teams but leverage on the almost perfect 2.12.x releases we have now (binding gtk 2.12 and glib 2.16) for a few extra months.

F-Spot, that small photo app everyone like, was, in its SVN/git latests versions, using a lot of the new API additions of gtk-sharp. You probably figured that already if you're following its developments.

So I branched out some of the code I needed from Gtk# svn to 2 new standalone projects, Gtk#Beans and Gio#. Both projects aims to fill the gap between the API mapped by Gtk#2.12 and the capabilities provided by gtk 2.14/glib 2.16.

The code is maintained on gitorious http://gitorious.org/gtk-sharp-beans, http://gitorious.org/gio-sharp and is already usable (and used in f-spot). Feel safe to use them as the API introduced over there will be merged with the fewest possible changes to the next Gtk# release.

Monologue

Monologue is a window into the world, work, and lives of the community members and developers that make up the Mono Project, which is a free cross-platform development environment used primarily on Linux.

If you would rather follow Monologue using a newsreader, we provide the following feed:

RSS 2.0 Feed

Monologue is powered by Mono and the Monologue software.

Bloggers