<?xml version="1.0" encoding="utf-8"?>
<!--Generated by RSS.NET: http://rss-net.sf.net-->
<rss version="2.0">
  <channel>
    <title>Miguel de Icaza</title>
    <description>Personal blog of Miguel de Icaza</description>
    <link>http://tirania.org/blog//index.html</link>
    <copyright>Miguel de Icaza</copyright>
    <managingEditor>miguel@gnome.org</managingEditor>
    <pubDate>Wed, 21 Dec 2011 11:28:00 -0500</pubDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>lb#</generator>
    <item>
      <title>Mono in 2011</title>
      <description>
	&lt;p&gt;This was a very interesting year for Mono, and I wanted to
	capture some of the major milestones and news from the
	project as well as sharing a bit of what is coming up for Mono
	in 2012.

	&lt;p&gt;I used to be able to list all of the major applications and
	great projects built with Mono.    The user base has grown so
	large that I am no longer able to do this.  2011 was a year
	that showed an explosion of applications built with Mono.

	&lt;p&gt;In this post I list a few of the high profile projects, but
	it is by no means an extensive list.  There are too
	many &lt;a href="http://xamarin.com/apps/all"&gt;great products&lt;/a&gt;
	and amazing technologies being built with Mono, but a
	comprehensive list would take too long to assemble.

&lt;h2&gt;Xamarin&lt;/h2&gt;

	&lt;p&gt;The largest event for Mono this year was that the team
	working on Mono technologies at Novell was laid off after
	Novell was acquired.

	&lt;p&gt;We got back on our feet, and two weeks after the layoffs
	had taken place, &lt;a href="http://tirania.org/blog/archive/2011/May-16.html"&gt;the original Mono team incorporated as
	Xamarin&lt;/a&gt;.   

	&lt;p&gt;Xamarin's goal is to deliver great productivity and great
	tools for mobile developers.  Our main products are &lt;a href="http://ios.xamarin.com"&gt;Mono on
	iOS&lt;/a&gt; and &lt;a href="http://android.xamarin.com"&gt;Mono on Android&lt;/a&gt;.

	&lt;p&gt;These products are built on top of the open
	source &lt;a href="http://mono-project.com"&gt;Mono project&lt;/a&gt; and
	the &lt;a href="http://monodevelop.com"&gt;MonoDevelop project&lt;/a&gt;.
	We continue to contribute extensively to these two open source
	projects.

	&lt;p&gt;Launching Xamarin was a huge effort for all of us.

	&lt;p&gt;Xamarin would not have been possible without our great
	customers and friends in the industry.  Many people cared
	deeply about the technology and helped us get up and running. 

	&lt;p&gt;In July, we announced an agreement
	with &lt;a href="http://www.itworld.com/mobile-wireless/184215/xamarin-attachmate-band-together-mono"&gt;Attachmate&lt;/a&gt;
	that ensured a bright future for our young company.

	&lt;p&gt;A couple of days later, we were ready to sell the mobile
	products that had been previously developed at Novell, and we
	started to provide all existing Novell customers with ongoing
	support for their Mono-based products. 

	&lt;p&gt;Half a year later, we grew the company and continued to do
	what we like the most: writing amazing software.

	&lt;p&gt;Meanwhile, our users have created amazing mobile
	applications.   You can see some of those in
	our &lt;a href="http://xamarin.com/apps"&gt;App Catalog&lt;/a&gt;.

&lt;h2&gt;C# Everywhere&lt;/h3&gt;

	&lt;p&gt;&lt;b&gt;On the Mobile Space:&lt;/b&gt; This year Sony jumped to C# in
	a big way with the introduction of PS Suite (see the section
	below) and Nokia adopted Windows Phone 7 as their new
	operating system.

	&lt;p&gt;And &lt;a href="http://xamarin.com"&gt;we got you covered&lt;/a&gt; on
	Android and iOS for all of your C# needs.

	&lt;p&gt;&lt;b&gt;On the Browser:&lt;/b&gt; we worked with Google to bring you
	Mono to Native Client.  In fact, every demo shown at the
	Google &lt;a href="http://www.youtube.com/watch?v=g3aBfkFbPWk"&gt;Native
	Client event&lt;/a&gt; on December 8th was powered by Mono.

	&lt;p&gt;&lt;b&gt;On the Desktop:&lt;/b&gt; this year we added MacOS X as a
	first-class citizen in the world of supported Mono platforms.
	We did this
	by &lt;a href="http://tirania.org/monomac//archive/2011/Mar.html"&gt;introducing
	MonoMac 1.0&lt;/a&gt; and supporting Apple's MacStore with it.

	&lt;p&gt;&lt;b&gt;Games:&lt;/b&gt; continue to take advantage of C# blend of
	performance and high-level features.   Read more on
	my &lt;a href="http://tirania.org/blog/archive/2011/Mar-07.html"&gt;GDC
	2011&lt;/a&gt; post.

	&lt;p&gt;It is a wild new world for C# and .NET developers that were
	used to build their UI using ASP.NET or Winforms only.   It
	has been fascinating to see developers evolve their thinking
	from a Microsoft-only view of the world to a world where they
	design libraries and applications that split the presentation
	layer from the business logic.

	&lt;p&gt;Developers that make this transition will be able to get
	great native experiences on each device and form factor.
	

&lt;h2&gt;Sony PSSuite - Powered by Mono&lt;/h2&gt;

	&lt;p&gt;At GDC, Sony announced that PS Suite was built on top of
	Mono.  PS Suite is a new development stack for cross-platform
	games and cross-platform applications to run on Android
	devices and Sony Vita.


	&lt;p&gt;The PS Suite presentation is available in the following
	videos
	(&lt;a href="http://www.youtube.com/watch?v=clk3uu6o5KY"&gt;first&lt;/a&gt;,
	&lt;a href="http://www.youtube.com/watch?v=hUQk-tuPFmY"&gt;second&lt;/a&gt;
	and &lt;a href="http://www.youtube.com/watch?v=9L_oXvIhOWM"&gt;third&lt;/a&gt;).

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/51d6460d.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;In particular, watch the game
	in &lt;a href="http://www.youtube.com/watch?v=hUQk-tuPFmY"&gt;Video
	2&lt;/a&gt; to get a feeling for the speed of a 3D game purely
	written in managed code (no native code):

	&lt;p&gt;Some of the juicy details from the GDC announcement:

	&lt;ul&gt;

		&lt;li&gt;PS Suite will have an open appstore model,
		different than the traditional game publishing
		business.

		&lt;li&gt;Open SDK, available for everyone at launch time.

		&lt;li&gt;PS Suite supports both game development with
		Sony's 3D libraries as well as regular app
		development.

		&lt;li&gt;Cross-platform, cross-device, using the ECMA Common
		Intermediate Language.
		
		&lt;li&gt;Code in C#, run using Mono.

		&lt;li&gt;GUI Designer called "UI Composer" for non-game
		applications. 
		
		&lt;li&gt;The IDE is based on MonoDevelop.

		&lt;li&gt;Windows-simulator is included to try things out
		quickly. 
	&lt;/ul&gt;

	&lt;p&gt;MonoDevelop on PSSuite:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/b0510805.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;PS Suite comes with a GUI Toolkit and this is what the UI
	composer looks like:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/2ee3ec28.png"&gt;
	&lt;/center&gt;

&lt;h2&gt;Google Native Client&lt;/h2&gt;

	&lt;p&gt;Google Engineers ported Mono to run on the sandboxed
	environment of &lt;a href="http://gonacl.com"&gt;Native Client&lt;/a&gt;.
	Last year they had added support for Mono code generator to
	output code for Native Client using
	Mono's &lt;a href="http://www.mono-project.com/AOT"&gt;static
	compiler&lt;/a&gt;.

	&lt;p&gt;This year Google extended Native Client to support Just in
	Time Compilation, in particular, Mono's brand of JIT
	compilation.   This was used by all three demos shown at the
	&lt;a href="http://www.youtube.com/watch?v=g3aBfkFbPWk"&gt;Google
	Native Client&lt;/a&gt; event a couple of days ago:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/39e2119a.png"&gt;
	&lt;/center&gt;

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/952a94db.png"&gt;
	&lt;p&gt;Unity Powered Builder
	&lt;/center&gt;

	&lt;p&gt;This is another game built with Unity's Native Client
	code generator:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/cb363aba.png"&gt;
	&lt;/center&gt;
	
	&lt;p&gt;To get the latest version of Mono with support for Native
	Client, download and build Mono
	from &lt;a href="https://github.com/elijahtaylor/mono"&gt;Google's
	branch&lt;/a&gt; on github.
	
&lt;h2&gt;Mono 2.10&lt;/h2&gt;

	&lt;p&gt;This was the year
	of &lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.10"&gt;Mono
	2.10&lt;/a&gt;.  We went from a beta release for Mono 2.10 in
	January to making it our new stable release for Mono.

	&lt;p&gt;While the world is on Mono 2.10, we have started our work
	to
	get &lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.12"&gt;Mono
	2.12&lt;/a&gt; out in beta form in January.

&lt;h2&gt;Mono on Android&lt;/h2&gt;

	&lt;p&gt;This year we
	launched &lt;a href="http://xamarin.com/monoforandroid"&gt;Mono for
	Android&lt;/a&gt;, a product that consists of port of Mono to the
	Android OS, C# bindings to the native Java APIs and IDE
	support for both MonoDevelop and Visual Studio.

	&lt;p&gt;The first release came out in April, it was rough around
	the edges, but thanks to the amazing community of users that
	worked with us during the year, we solved the performance
	problems, the slow debugging, vastly improved the
	edit/debug/deploy cycle and managed to catch up to Google's
	latest APIs with the introduction
	of &lt;a href="http://blog.xamarin.com/2011/12/05/mono-for-android-4-0-is-here/"&gt;Mono
	for Android 4.0&lt;/a&gt;.
	
&lt;h2&gt;Mono on iOS&lt;/h2&gt;

	&lt;p&gt;Just like Android, we
	have &lt;a href="http://blog.xamarin.com/2011/10/12/monotouch-5-with-ios-5-support/"&gt;been
	on a roll with MonoTouch&lt;/a&gt;.

	&lt;p&gt;In short, this year:
	&lt;ul&gt;
		&lt;li&gt;We kept up with Apple's newly introduced APIs
		(UIKit, iCloud, Airplay, Bluetooth, Newstand,
		CoreImage).

		&lt;li&gt;Integrated XCode 4's UI designer with MonoDevelop&lt;
		and added support for storyboards.

		&lt;li&gt;Added the option of using LLVM for our builds,
		bringing thumb support and ARMv7 support along the
		way.
	&lt;/ul&gt;

	&lt;p&gt;We started beta-testing
	a &lt;a href="http://ios.xamarin.com/Releases/MonoTouch_5/MonoTouch_5.1"&gt;whole
	new set of features&lt;/a&gt; to be released early next year: a new
	unit testing framework, a heap profiler, integrating
	MonoTouch.Dialog in the product and improving the debug/deploy
	process.&lt;

	&lt;p&gt;Mono for iOS has been on the market now for two years, and
	many products are coming to the market based on it.

&lt;h2&gt;Phalanger&lt;/h2&gt;

	&lt;p&gt;&lt;img src="http://tirania.org/s/c0573db7.png"
	align="right"&gt;&lt;a href="http://www.php-compiler.net/"&gt;Phalanger&lt;/a&gt;
	is a PHP compiler that runs on the .NET and Mono VMs and is
	powered by the Dynamic Language Runtime.
	
	&lt;p&gt;It is so complete that it can run both MediaWiki and
	WordPress out of the box.   And does so by running faster than
	they would under PHP.

	&lt;center&gt;
	&lt;img src="http://www.php-compiler.net/wp-content/uploads/2011/08/wordpress-phalanger-201109-performance.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;This year the Phalanger guys
	released &lt;a href="http://www.php-compiler.net/blog/2011/phalanger-3-0"&gt;Phalanger
	3.0&lt;/a&gt; which now runs on Mono (previously they required the
	C++/CLI compiler to run).

	&lt;p&gt;Phalanger's performance is impressive as it is just as fast
	as the newly announced Facebook HipHop VM for PHP.   The major
	difference being that Phalanger is a complete PHP
	implementation and the HipHopVM is still not a complete
	implementation.

	&lt;p&gt;The other benefit of Phalanger is that it is able to
	&lt;a href="http://www.php-compiler.net/blog/2011/pass-delegates-into-php"&gt;participate
	and interop&lt;/a&gt; with code written in other .NET languages as
	well as benefitting from the existing .NET interop story (C,
	C++).
	
&lt;h2&gt;CXXI&lt;/h2&gt;

	&lt;p&gt;Our &lt;a href="http://tirania.org/blog/archive/2011/Dec-19.html"&gt;technology
	to bridge C# and C++&lt;/a&gt; matured to the point that it can be
	used by regular users.
	
&lt;h2&gt;Compiler as a Service&lt;/h2&gt;

	&lt;p&gt;This year our C# compiler was expanded in three directions:

	&lt;ul&gt;
		&lt;li&gt;We completed async/await support

		&lt;li&gt;We completed the two code output engines
		(System.Reflection.Emit and IKVM.Reflection).

		&lt;li&gt;We improved the compiler-as-a-service features of
		the compiler.
	&lt;/ul&gt;

	&lt;p&gt;Our async/await support is scheduled to go out with the
	first preview of Mono 2.11 in early January.    We can not
	wait to get this functionality to our users and start building
	a new generation of async-friendly/ready desktop, mobile and
	server apps.

	&lt;p&gt;One &lt;b&gt;major difference&lt;/b&gt; between our
	compiler-as-a-service and Microsoft's version of the C#
	compiler as a service is that we support two code generation
	engines, one generates complete assemblies (like Microsoft
	does) and the other one is able to be integrated with running
	code (this is possible because we use System.Reflection.Emit
	and we can reference static or dynamic code from the running
	process). 

	&lt;p&gt;We have also been improving the error recovery components
	of the compiler as this is going to power our new
	intellisense/code completion engine in MonoDevelop.   Mono's
	C# compiler is the engine that is powering the upcoming
	NRefactory2 library.

	&lt;p&gt;You can read more about
	our &lt;a href="http://tirania.org/blog/archive/2011/Feb-24.html"&gt;compiler
	as a service updates&lt;/a&gt;.

&lt;h2&gt;Unity3D&lt;/h2&gt;

	&lt;p&gt;&lt;a href="http://www.unity3d.com"&gt;Unity&lt;/a&gt; is one of Mono's
	major users.  At this point Unity no longer requires an
	introduction, they went from independent game engine a few
	years ago to be one of the major game engine platforms in the
	game industry this year.

	&lt;p&gt;The Unity engine runs on every platform under the sun.
	From the Consoles (PS3, Wii and XBox360) to iPhones and
	Androids and runs on your desktop either with the Unity3D
	plugin or using Google's Native Client technology.
	The &lt;a href="http://unity3d.com/gallery/made-with-unity/game-list"&gt;list
	of games&lt;/a&gt; being built with Unity keeps growing every day
	and they are consistently among the top sellers on every app
	store. 

	&lt;p&gt;Mono is the engine that powers the scripts and
	custom code in games and applications built with Unity3D and
	it also powers the actual tool that users use to build games,
	the &lt;a href="http://unity3d.com/unity/editor/"&gt;Unity3D editor&lt;/a&gt;:

	&lt;center&gt;
	&lt;img src="http://download.unity3d.com/unity/editor/images/editor-small.jpg"&gt;
	&lt;/center&gt;

	&lt;p&gt;The editor itself it implemented in terms of Unity
	primitives, and users can extend the Unity3D editor with C#,
	UnityScript or Boo scripts dynamically.

	&lt;p&gt;One of my favorite games built with Unity3D is Rochard was
	demoed earlier this year on a PS3 at the GDC and is now also
	avaialble on Steam:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/c50860ac.png"&gt;
	&lt;/center&gt;

&lt;h2&gt;Microsoft&lt;/h2&gt;

	&lt;p&gt;Just before the end of the year, Microsoft
	shipped &lt;a href="http://itunes.apple.com/us/app/kinectimals/id482365195?mt=8"&gt;Kinectimals&lt;/a&gt;
	for iOS systems.

	&lt;p&gt;Kinectimals is built using Unity and this marks the first
	time that Microsoft ships a software product built with Mono.

	&lt;p&gt;Then again, this year has been an interesting year for
	Microsoft, as they
	have &lt;a href="http://www.zdnet.com/blog/microsoft/understanding-microsofts-big-picture-plans-for-hadoop-and-project-isotope/11466"&gt;embraced
	open source technologies&lt;/a&gt; for
	Azure, &lt;a href="https://github.com/WindowsAzure"&gt;released SDKs
	for iOS and Android&lt;/a&gt; at the same time they ship SDKs for
	their own platforms and shipped various applications on
	Apple's AppStore for iOS.

&lt;h2&gt;MonoDevelop&lt;/h2&gt;

	&lt;p&gt;&lt;img src="http://xamarin.files.wordpress.com/2011/10/md-header1.png"
	align="right"&gt;We started the year with MonoDevelop 2.4 and we finished
	after two major releases
	with &lt;a href="http://blog.xamarin.com/2011/10/05/monodevelop-2-8-released/"&gt;MonoDevelop
	2.8.5&lt;/a&gt;. 

	&lt;p&gt;In the course of the year, we added:

	&lt;ul&gt;
		&lt;li&gt;Native Git support
		&lt;li&gt;Added .NET 4.0 project support, upgraded where
		possible to XBuild/MSBuild
		&lt;li&gt;MonoMac Projects
		&lt;li&gt;XCode 4 support for MonoMac, MonoTouch and Storyboards
		&lt;li&gt;Support for Android development
		&lt;li&gt;Support for iOS5 style properties
		&lt;li&gt;Major upgrade to the debugger engine
		&lt;li&gt;Adopted native dialogs on OSX and Windows
	&lt;/ul&gt;

	&lt;p&gt;Our Git support was based on a machine assisted translation
	of the Java jGit library using
	Sharpen.  &lt;a href="https://github.com/slluis/sharpen"&gt;Sharpen&lt;/a&gt;
	has proved to be an incredibly useful tool to bring Java code
	to the .NET world.

&lt;h2&gt;SGen&lt;/h2&gt;

	&lt;p&gt;Our precise collector has gotten a full year of testing
	now.   With Mono 2.10 we made it very easy for developers to
	try it out.   All users had to do was run their programs with
	the --sgen flag, or set MONO_ENV_OPTIONS to gc=sgen.

	&lt;p&gt;Some of the new features in our new Garbage Collector
	include:

	&lt;ul&gt;
		&lt;li&gt;Windows, MacOS X and S390x ports of SGen (in
		addition to the existing x86, x86-64 and ARM ports).

		&lt;li&gt;Lock-free allocation to improve scalability (we
		only take locks when we run out of memory).

		&lt;li&gt;Work stealing parallel collector and a parallel
		nursery collector, to take advantage of extra CPUs on
		the system to help with the GC.

		&lt;li&gt;Work on performance and scalability work, as our
		users tried things out in the field, we identified
		hot-spots in SGen which we have been addressing.
		
	&lt;/ul&gt;

	&lt;p&gt;As we are spending so much time on ARM-land these days,
	SGen has also gained various ARM-specific optimizations.

	&lt;p&gt;SGen was designed primarly to be used by Mono and we are
	extending it beyond being a pure garbage collector for Mono,
	to support scenarios where our garbage collector has to be
	integrated with other object systems and garbage collectors.
	This is the case of Mono for Android where we now have a
	cooperative garbage collector that works hand-in-hand with
	Dalvik's GC.    And we also introduce support for toggle
	references to better support Objective-C environments like
	MonoTouch and MonoMac. 

	
&lt;h2&gt;XNA and Mono: MonoGame&lt;/h2&gt;

	&lt;p&gt;&lt;img src="http://tirania.org/s/2f9b5d8c.png"
	align="right"&gt;Ever since Microsoft published the XNA APIs for
	.NET, developers have been interested in bringing XNA to
	Mono-based platforms.

	&lt;p&gt;There was a MonoXNA project, which was later reused by
	projects like SilverXNA (an XNA implementation for
	Silverlight) and later XNAtouch an implementation of XNA for
	the iPhone powered by MonoTouch.   Both very narrow projects
	focused on single platforms.
	
	&lt;p&gt;This year, the community got together and turned the single
	platform XNATouch into a full cross-platform framework, the
	result is the &lt;a href="http://monogame.codeplex.com/"&gt;MonoGame
	project&lt;/a&gt;:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/62c8bebf.png"&gt;
	&lt;p&gt;Platform Support Matrix
	&lt;/center&gt;
	
	&lt;p&gt;Currently MonoGame's strength is on building 2D games.
	They already have
	an &lt;a href="http://monogame.codeplex.com/"&gt;extensive list
	of&lt;/a&gt; games that have been published on the iOS AppStore and
	the Mac AppStore and they were recently featured in Channel
	9's &lt;a href="http://channel9.msdn.com/coding4fun/blog/MonoGame-Write-Once-Play-Everywhere"&gt;Coding
	For Fun: MonoGame Write Once Play Everywhere&lt;/a&gt;.

	&lt;p&gt;An early version of MonoGame/XnaTouch powers
	&lt;a href="http://supergiantgames.com/"&gt;SuperGiantGame's&lt;/a&gt; &lt;a href="http://supergiantgames.com/?p=1231"&gt;Bastion&lt;/a&gt;
	game on Google's Native Client.    Which allows users of
	Windows, Mac and Linux desktop systems to run the same
	executable on all systems.   If you are running Chrome, you
	can &lt;a href="https://chrome.google.com/webstore/detail/oohphhdkahjlioohbalmicpokoefkgid"&gt;install
	it in seconds&lt;/a&gt;. 

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/39e2119a.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;Incidentally, Bastion just
	won &lt;a href="http://supergiantgames.com/?p=1261"&gt;three
	awards&lt;/a&gt; at
	the &lt;a href="http://en.wikipedia.org/wiki/Spike_Video_Game_Awards"&gt;Spike
	VGA awards&lt;/a&gt; including Best Downloadable Game, Best Indie
	Game, and Best Original Score.

	&lt;p&gt;The MonoGame team had been relatively quiet for the most
	part of 2011 as they were building their platform, but they
	got into a good release cadence with
	the &lt;a href="http://cocoa-mono.org/archives/400/monogame-goes-multi-platform-monogame-2-0-announced/"&gt;MonoGame
	2.0&lt;/a&gt; release in October, when they launched as a
	cross-platform engine, followed up with a
	tasty &lt;a href="http://cocoa-mono.org/archives/452/monogame-takes-tentative-steps-into-3d-monogame-2-1-announced/"&gt;2.1
	release&lt;/a&gt; only two weeks ago.
	
	&lt;p&gt;With the addition of OpenGL ES 2.0 support and 3D
	capabilities to MonoGame, 2012 looks like it will be a great
	year for the project.

&lt;h2&gt;Gtk+&lt;/h2&gt;

	&lt;p&gt;Since MonoDevelop is built on top of the Gtk+ toolkit and
	since it was primarily a Unix toolkit there have been a few
	rough areas for our users in both Mac and Windows.

	&lt;p&gt;This year we started working with the amazing team
	at &lt;a href="http://www.lanedo.com"&gt;Lanedo&lt;/a&gt; to improve Gtk+
	2.x to work better on Mac and Windows.

	&lt;p&gt;The results are looking great and we want to encourage
	developers to try out our
	new &lt;a href="http://www.go-mono.com/mono-downloads/download.html"&gt;Beta
	version of Mono&lt;/a&gt;, which features the updated Gtk+ stack.

	&lt;p&gt;This new Gtk+ stack solves many of the problems that our
	users have reported over the past few months.
	
&lt;h2&gt;Hosting Bills&lt;/h2&gt;

	&lt;p&gt;I never tracked Mono downloads as I always felt that
	tracking download numbers for open source code that got
	repackaged and redistributed elsewhere pointless.
	
	&lt;p&gt;This summer we moved the code hosting from Novell to
	&lt;a href="http://download.mono-project.com/archive/"&gt;Xamarin&lt;/a&gt;
	and we were surprised by our hosting bills.

	&lt;p&gt;The major dominating force are binaries for Windows and
	MacOS which are communities that tend not to download source
	and package the software themselves.   This is the breakdown
	for completed downloads (not partial downloads, or interrupted
	ones) for our first month of hosting of Mono:

	&lt;ul&gt;
		&lt;li&gt;39,646 - Mono for Windows (Runtime + SDK)
		&lt;li&gt;27,491 - Mono for Mac (Runtime)
		&lt;li&gt;9,803 - Mono for Windows (Runtime)
		&lt;li&gt;9,910 - Mono for Mac (Runtime + SDK)
		&lt;br&gt;&lt;br&gt;
		&lt;li&gt;Total: 86,850 downloads for Windows and Mac
	&lt;/ul&gt;

	&lt;p&gt;These numbers are only for the Mono runtime, not
	MonoDevelop, the MonoDevelop add-ins or any other third party
	software.

	&lt;p&gt;It is also worth pointing out that none of our Windows
	products (MonoDevelop for Windows, or Mono for Android on
	Windows) use the Mono runtime.   So these downloads are for
	people doing some sort of embedding of Mono on their
	applications on Windows.

	&lt;p&gt;At this point, we got curious.   We ran a survey for two
	days and collected 3,949 answers.   These is the summary of
	the answers:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/ca4988e1.png"&gt;
	&lt;p&gt;What type of application will you run with Mono?
	&lt;/center&gt;

	&lt;p&gt;This one was fascinating, many new users to the .NET world:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/23a0c03a.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;The best results came form the free-form answers in the
	form.   I am still trying to figure out how to summarize
	these answers, they are all very interesting, but they are
	also all over the map.

&lt;h2&gt;Some Key Quotes&lt;/h2&gt;

	&lt;p&gt;When I asked last week
	for &lt;a href="http://tirania.org/blog/archive/2011/Dec-15.html"&gt;stories
	of how you used Mono in 2011&lt;/a&gt;, some of you posted on the
	thread, and some of you emailed me.

	&lt;p&gt;Here are a couple of quotes from Mono users:

	&lt;blockquote&gt;
		&lt;p&gt;I can't do without Mono and I don't just mean the
		iOS or Android dev with C# but MonoMac and Mono for
		*nix too. Thanks for everything; from the
		extraordinary tools to making hell turn into heaven,
		and thank you for making what used to be a predicament
		to effortless development pleasure.
	
		&lt;p&gt;I don't think we could have achieved our solutions
		without Mono in enterprise mobile development. It
		addresses so many key points, it is almost a trade
		secret. We extensively use AIR and JavaScript mobile
		frameworks too but ultimately we desperately need
		1-to-1 mapping of the Cocoa Touch APIs or tap into low
		level features which determines our choice of
		development platform and frameworks.
	
		&lt;p&gt;That's where Mono comes in.
	
		&lt;p&gt;Gratefulness and paying polite respects aside, the
		key tenets of Mono we use are:
	
		&lt;ul&gt;
		&lt;li&gt;shared C# code base for all our enterprise
		solutions - achieving the write once, compile
		everywhere promise with modern language and VM
		features everyone demands and expects in this century
	
		&lt;li&gt;logical, consistent and self-explanatory wrapper
		APIs for native services - allows us to write meta
		APIs of our own across platforms
	
		&lt;li&gt;low latency, low overhead framework
	
		&lt;li&gt;professional grade IDE and tools
	
		&lt;li&gt;native integration with iOS tools and
		development workflow
	
		&lt;li&gt;existence of satisfactory documentation and
		support
	
		&lt;li&gt;legal clarity - favorable licensing options
	
		&lt;li&gt;dedicated product vision via Xamarin - commercial backing
	
		&lt;li&gt;community support
	&lt;/ul&gt;
	
	&lt;/blockquote&gt;

	&lt;p&gt;Koen Pijnenburg shared this story with me:

	&lt;blockquote&gt;

		&lt;p&gt;We've been in touch a few times before and would
		like to contribute my story. It's not really an
		interesting setup, but a real nice development for
		Mono(Touch).  I've been developing app for iPhone
		since day 1, I was accepted in the early beta for the
		App Store. On launch day july 2008, 2 of the 500 apps
		in the App Store were mine, my share has decreased a
		lot in the past years ;)

		&lt;p&gt;I really, really, really like football(soccer),
		maybe you do also, I don't know. In september 2008 I
		created the first real soccer/football stats app for
		the iPhone called My Football. This was a huge succes,
		basically no competition at that time. In 2009 I
		released My Football Pro, an app with 800 leagues
		worldwide, including live data for more then 100
		leagues. Since then I created lots of apps, all
		created with the iPhone SDK and with Objective-C.

		&lt;p&gt;Since the launch of MonoTouch, it merged the best
		of two worlds in my opinion. I've been a Mono/.NET
		developer for years before the iPhone apps, for me it
		was love at first line of code.

		&lt;p&gt;The last year I've increased my work with MonoTouch
		/ Droid /MonoGame(Poppin' Frenzy etc ;)), and focused
		less on working with native SDK's only. Since our My
		Football apps are at the end of their lifecycle in
		this form, we are working on a new line of My Football
		apps. Our base framework supporting our data, is built
		with Mono, and the apps UI will be built with
		MonoTouch / MonoDroid / WP7 etc.

		&lt;p&gt;Included is the screenshot of our first app built
		with the framework, My Football Pro for iPad. It has a
		huge amount of data, stats / tables / matches / live
		data for more then 800 leagues worldwide. We think
		it's a great looking app!

		&lt;p&gt;Working with MonoTouch is fantastic and just wanted you to know this!
	
	&lt;/blockquote&gt;

&lt;h2&gt;Mono on Mainframes&lt;/h2&gt;

	&lt;p&gt;This year turned out to show a nice growh in the deployment
	of Mono for IBM zSeries computers.

	&lt;p&gt;Some are using ASP.NET, some are using Mono in headless
	mode.   This was something that we were advocating a few years
	ago, and this year the deployments went live both in Brazil
	and Europe.

	&lt;p&gt;Neale Ferguson from Sinenomine has kept the zSeries port
	active and in shape.

&lt;h2&gt;Mono and ASP.NET&lt;/h2&gt;

	&lt;p&gt;This year we delivered enough of ASP.NET 4.0 to run
	Microsoft's ASP.NET MVC 3.

	&lt;p&gt;Microsoft ASP.NET MVC 3 is a strange beast.   It is
	licensed under a great open source license (MS-PL) but the
	distribution includes a number of binary blobs (the Razor
	engine).

	&lt;p&gt;I am inclined to think that the binaries are not under the
	MS-PL, but strictly speaking, since the binaries are part of
	the MS-PL distribution labeled as such, the entire download is
	MS-PL.

	&lt;p&gt;That being said, we played it safe in Mono-land and we did
	not bundle ASP.NET MVC3 with Mono.   Instead, we provide
	&lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.10#ASP.NET_MVC3_Support"&gt;instructions
	on how users can deploy ASP.NET MVC 3 applications&lt;/a&gt; using
	Razor as well as pure Razor apps (those with .cshtml
	extensions) with Mono.

&lt;h2&gt;2012, the year of Mono 2.12&lt;/h2&gt;

	&lt;p&gt;2012 will be a year dominated by our upcoming Mono release:
	Mono 2.12.   It packs a year worth of improvements to the
	runtime, to our build process and to the API profiles.

	&lt;p&gt;Mono 2.12 defaults to the .NET 4.x APIs and include support
	for .NET 4.5.

	&lt;p&gt;This is going to be the last time that we branch Mono for
	these extended periods of time.  We
	are &lt;a href="http://tirania.org/blog/archive/2011/Oct-14.html"&gt;changing
	our development process and release policies&lt;/a&gt; to reduce the
	amount of code that is waiting on a warehouse to be rolled out
	to developers.

&lt;h2&gt;ECMA&lt;/h2&gt;

	&lt;p&gt;We wrapped up our work on updating
	the &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm"&gt;ECMA
	CLI standard this year&lt;/a&gt;.  The resulting standard is now at
	ISO and going through the standard motions to become an
	official ISO standard.

	&lt;p&gt;The committee is getting ready for a juicy year ahead of us
	where we are shifting gears from polish/details to take on
	significant extensions to the spec.
</description>
      <link>http://tirania.org/blog/archive/2011/Dec-21.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Dec-21.html</guid>
      <pubDate>Wed, 21 Dec 2011 16:28:00 -0500</pubDate>
    </item>
    <item>
      <title>CXXI: Bridging the C++ and C# worlds.</title>
      <description>
	&lt;p&gt;The Mono runtime engine has many language interoperability
	features but has never had a strong story to interop with C++.

	&lt;p&gt;Thanks to the work of Alex Corrado, Andreia Gaita and
	Zoltan Varga, this is about to change.

	&lt;p&gt;The short story is that the
	new &lt;a href="http://github.com/mono/cxxi"&gt;CXXI&lt;/a&gt; technology
	allows C#/.NET developers to:

	&lt;ul&gt;
		&lt;li&gt;Easily consume existing C++ classes from C# or any
		other .NET language

		&lt;li&gt;Instantiate C++ objects from C#

		&lt;li&gt;Invoke C++ methods in C++ classes from C# code

		&lt;li&gt;Invoke C++ inline methods from C# code (provided
		your library is compiled with -fkeep-inline-functions
		or that you provide a surrogate library)

		&lt;li&gt;Subclass C++ classes from C#

		&lt;li&gt;Override C++ methods with C# methods

		&lt;li&gt;Expose instances of C++ classes or mixed C++/C#
		classes to both C# code and C++ as if they were native
		code.
	&lt;/ul&gt;

	&lt;p&gt;CXXI is the result of two summers of work from Google's
	Summer of Code towards improving the interoperability of Mono
	with the C++ language.

&lt;h2&gt;The Alternatives&lt;/h2&gt;

	&lt;p&gt;This section is merely a refresher of of the underlying
	technologies for interoperability supported by Mono and how
	developers coped with C++ and C# interoperability in the
	past.   You can skip it if you want to get to how to get
	started with CXXI.
	
	&lt;p&gt;As a reminder, Mono provides a number of interoperability
	bridges, mostly inherited from the ECMA standard.   These
	bridges include:

	&lt;ul&gt;
		&lt;li&gt;The bi-directional "Platform Invoke" technology
		(P/Invoke) which allows managed code (C#) to call methods in
		native libraries as well as support for native
		libraries to call back into managed code.

		&lt;li&gt;&lt;a href="http://www.mono-project.com/COM_Interop"&gt;COM
		Interop&lt;/a&gt; which allows Mono code to transparently
		call C or C++ code defined in native libraries as long
		as the code in the native libraries follows a few COM
		conventions [1].

		&lt;li&gt;A
		general &lt;a href="http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject(v=VS.80).aspx"&gt;interceptor&lt;/a&gt;
		technology that can be used to intercept method
		invocations on objects.

	&lt;/ul&gt;

	&lt;p&gt;When it came to getting C# to consume C++ objects the
	choices were far from great.   For example, consider a sample
	C++ class that you wanted to consume from C#:

&lt;pre&gt;
class MessageLogger {
public:
	MessageLogger (const char *domain);
	void LogMessage (const char *msg);
}
&lt;/pre&gt;

	&lt;p&gt;One option to expose the above to C# would be to wrap the
	Demo class in a COM object.   This might work for some
	high-level objects, but it is a fairly repetitive exercise and
	also one that is devoid of any fun.   You can see how this
	looks like in the &lt;a href="http://www.mono-project.com/COM_Interop"&gt;COM
	Interop&lt;/a&gt; page.

	&lt;p&gt;The other option was to produce a C file that was C
	callable, and invoke those C methods.    For the above
	constructor and method you would end up with something like
	this in C:

&lt;pre&gt;
/* bridge.cpp, compile into bridge.so */
MessageLogger *Construct_MessageLogger (const char *msg)
{
	return new MessageLogger (msg);
}

void LogMessage (MessageLogger *logger, const char *msg)
{
	logger-&gt;LogMessage (msg);
}
&lt;/pre&gt;

	&lt;p&gt;And your C# bridge, like this:

&lt;pre&gt;
class MessageLogger {
	IntPtr handle;

	[DllImport ("bridge")]
	extern static IntPtr Construct_MessageLogger (string msg);

	public MessageLogger (string msg)
	{
		handle = Construct_MessageLogger (msg);
	}

	[DllImport ("bridge")]
	extern static void LogMessage (IntPtr handle, string msg);

	public void LogMessage (string msg)
	{
		LogMessage (handle, msg);
	}
}
&lt;/pre&gt;

	&lt;p&gt;This gets tedious very quickly.

	&lt;p&gt;Our &lt;a href="http://tirania.org/blog/archive/2009/Jun-08.html"&gt;PhyreEngine#&lt;/a&gt;
	binding was a C# binding to Sony's PhyreEngine C++ API.   The
	code got very tedious, so we built a poor man's code generator
	for it.

	&lt;p&gt;To make things worse, the above does not even support
	overriding C++ classes with C# methods.   Doing so would
	require a whole load of manual code, special cases and
	callbacks.   The code quickly becomes very hard to maintain
	(as we found out ourselves with PhyreEngine).

	&lt;p&gt;This is what drove the motivation to build CXXI.
	
	&lt;p&gt;[1] The conventions that allow Mono to call unmanaged code
	via its COM interface are simple: a standard vtable layout,
	the implementation of the Add, Release and
	QueryInterface methods and using a well defined set of types
	that are marshaled between managed code and the COM world.

&lt;h2&gt;How CXXI Works&lt;/h2&gt;

	&lt;p&gt;Accessing C++ methods poses several challenges.   Here is a
	summary of the components that play a major role in CXXI:

	&lt;ul&gt;

		&lt;li&gt;&lt;b&gt;Object Layout:&lt;/b&gt; this is the binary layout of
		the object in memory.   This will vary from platform
		to platform.
		
		&lt;li&gt;&lt;b&gt;VTable Layout:&lt;/b&gt; this is the binary layout
		that the C++ compiler will use for a given class based
		on the base classes and their virtual methods.

		&lt;li&gt;&lt;b&gt;Mangled names:&lt;/b&gt; non-virtual methods do not
		enter an object vtable, instead these methods are
		merely turned into regular C functions.   The name of
		the C functions is computed based on the return type
		and the parameter types of the method.   These vary
		from &lt;a href="http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B"&gt;compiler
		to compiler&lt;/a&gt;.

	&lt;/ul&gt;

	&lt;p&gt;For example, given this C++ class definition, with its
	corresponding implementation:

&lt;pre&gt;
class Widget {
public:
	void SetVisible (bool visible);
	virtual void Layout ();
	virtual void Draw ();
};

class Label : public Widget {
public:
	void SetText (const char *text);
	const char *GetText ();
};
&lt;/pre&gt;

	&lt;p&gt;The C++ compiler on my system will generate the following
	mangled names for the SetVisble, Layout, Draw, SetText and
	GetText methods:

&lt;pre&gt;
__ZN6Widget10SetVisibleEb
__ZN6Widget6LayoutEv
__ZN6Widget4DrawEv
__ZN5Label7SetTextEPKc
__ZN5Label7GetTextEv
&lt;/pre&gt;

	&lt;p&gt;The following C++ code:

&lt;pre&gt;
	Label *l = new Label ();
	l-&gt;SetText ("foo");
	l-&gt;Draw ();	
&lt;/pre&gt;

	&lt;p&gt;Is roughly compiled into this (rendered as C code):

&lt;pre&gt;
	Label *l = (Label *) malloc (sizeof (Label));
	ZN5LabelC1Ev (l);   // Mangled name for the Label's constructor
	_ZN5Label7SetTextEPKc (l, "foo");

	// This one calls draw
	(l-&gt;vtable [METHOD_PTR_SIZE*2])();
&lt;/pre&gt;

	&lt;p&gt;For CXXI to support these scenarios, it needs to know the
	exact layout for the vtable, to know where each method lives
	and it needs to know how to access a given method based on
	their mangled name.

	&lt;p&gt;The following chart explains shows how a native C++ library
	is exposed to C# or other .NET languages:
	
	&lt;center&gt;
	&lt;img src="http://tirania.org/s/3add594b.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;Your C++ source code is compiled twice.  Once with the
	native C++ compiler to generate your native library, and once
	with the CXXI toolchain.

	&lt;p&gt;Technically, CXXI only needs the header files for your C++
	project, and only the header files for the APIs that you are
	interested in wrapping.   This means that you can create
	bindings for C++ libraries that you do not have the source
	code to, but have its header files.

	&lt;p&gt;The CXXI toolchain produces a .NET library that you can
	consume from C# or other .NET languages.   This library
	exposes a C# class that has the following properties:

	&lt;ul&gt;
		&lt;li&gt;When you instantiate the C# class, it actually
		instantiates the underlying C++ class.

		&lt;li&gt;The resulting class can be used as the base class
		for other C# classes.   Any methods flagged as virtual
		can be overwritten from C#.

		&lt;li&gt;Supports C++ multiple inheritance: The generated
		C# classes expose a number of cast operators that you
		can use to access the different C++ base classes.

		&lt;li&gt;Overwritten methods can call use the "base" C#
		keyword to invoke the base class implementation of the
		given method in C++.

		&lt;li&gt;You can override any of the virtual methods from
		classes that support multiple inheritance.
		
		&lt;li&gt;A convenience constructor is also provided if you
		want to instantiate a C# peer for an existing C++
		instance that you surfaced through some other mean.
	&lt;/ul&gt;

	&lt;p&gt;This is pure gold.
	
	&lt;p&gt;&lt;img src="http://tirania.org/s/220882cf.png"
	align="right"&gt;The CXXI pipeline in turn is made up of three
	components, as shown in the diagram on the right.

	&lt;p&gt;The GCC-XML compiler is used to parse your source code and
	extract the vtable layout information.  The generated XML
	information is then processed by the CXXI tooling to generate
	a set of partial C# classes that contain the bridge code to
	integrate with C++.
	&lt;p&gt;This is then combined with any customization code that you
	might want to add (for example, you can add some overloads to
	improve the API, add a ToString() implementation, add some
	async front-ends or dynamic helper methods).

	&lt;p&gt;The result is the managed assembly that interfaces with the
	native static library.

	&lt;p&gt;It is important to note that the resulting assembly
	(Foo.dll) does not encode the actual in-memory layout of the
	fields in an object.   Instead, the CXXI binder determines
	based on the ABI being used what the layout rules for the
	object are.    This means that the Foo.dll is compiled only
	once and could be used across multiple platforms that have
	different rules for laying out the fields in memory. 

&lt;h2&gt;Demos&lt;/h2&gt;

	&lt;p&gt;The code
	on &lt;a href="http://github.com/mono/cxxi"&gt;GitHub&lt;/a&gt; contains
	various test cases as well as a couple of examples.   One of
	the samples is a minimal binding to the Qt stack.
	
&lt;h2&gt;Future Work&lt;/h2&gt;

	&lt;p&gt;CXXI is not finished, but it is a strong foundation to
	drastically improve the interoperability between .NET managed
	languages and C++.   
	
	&lt;p&gt;Currently CXXI achieves all of its work at runtime by using
	System.Reflection.Emit to generate the bridges on demand.
	This is useful as it can dynamically detect the ABI used by a
	C++ compiler.   
	
	&lt;p&gt;One of the projects that we are interested in doing is to add
	support for static compilation, this would allow PS3 and
	iPhone users to use this technology.    It would mean that the
	resulting library would be tied to the platform on which the
	CXXI tooling was used.

	&lt;p&gt;CXXI currently implements support for the GCC ABI, and has
	some early support for the MSVC ABI.  Support for other
	compiler ABIs as well as for completing the MSVC ABI is
	something that we would like help with.
	
	&lt;p&gt;Currently CXXI only supports deleting objects that were
	instantiated from managed code.   Other objects are assumed to
	be owned by the unmanaged world.   Support for the delete
	operator is something that would be useful.

	&lt;p&gt;We also want to better document the pipeline, the runtime
	APIs and improve the binding.

</description>
      <link>http://tirania.org/blog/archive/2011/Dec-19.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Dec-19.html</guid>
      <pubDate>Mon, 19 Dec 2011 13:28:00 -0500</pubDate>
    </item>
    <item>
      <title>2011: Tell me how you used Mono this year</title>
      <description>
	&lt;p&gt;I have written a summary of Mono's progress in the year
	2011, but I want to complement my post with stories from the
	community.

	&lt;p&gt;Did you use Mono in an interesting setup during 2011?
	Please post a comment on this post, or email me the story and
	tell me a little bit about it.

	
</description>
      <link>http://tirania.org/blog/archive/2011/Dec-15.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Dec-15.html</guid>
      <pubDate>Fri, 16 Dec 2011 00:55:00 -0500</pubDate>
    </item>
    <item>
      <title>Porto Alegre</title>
      <description>
	&lt;p&gt;We are traveling to Porto Alegre in Brazil today and will
	be staying in Brazil until January 4th.

	&lt;p&gt;Ping me by email (miguel at gnome dot org) if you would like to
	meet in Porto Alegre to talk hacking, Mono, Linux, open
	source, iPhone or if you want to enlighten me about the role
	of scrum masters as actors of social change.


	&lt;p&gt;Happy holidays!

</description>
      <link>http://tirania.org/blog/archive/2011/Dec-14.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Dec-14.html</guid>
      <pubDate>Wed, 14 Dec 2011 14:30:00 -0500</pubDate>
    </item>
    <item>
      <title>Farewell to Google's CodeSearch</title>
      <description>
	&lt;p&gt;It seems that part of Steve Jobs' legacy was to give Larry
	Page some advise: focus.  This according to Steve Jobs'
	recently published biography.

	&lt;p&gt;So Larry Page took the advise seriously and decided to
	focus.  His brand of focus is to kill projects that were
	distracting to their goals.  One of them, -and the one I
	cared the most about-
	was &lt;a href="http://googleblog.blogspot.com/2011/10/fall-sweep.html"&gt;CodeSearch&lt;/a&gt;.. 
	
&lt;h2&gt;What did CodeSearch do for programmers?&lt;/h2&gt;

	&lt;p&gt;The CodeSearch service was a unique tool as it indexed open
	source code in the wild.

	&lt;p&gt;Codesearch is one of the most valuable tools in existence
	for all software developers, specifically:

	&lt;ul&gt;

		&lt;li&gt;When an API is poorly documented, you could find
		sample bits of code that used the API.

		&lt;li&gt;When an API error codes was poorly documented, you
		could find sample bits of code that handled it.

		&lt;li&gt;When an API was difficult to use (and the world is
		packed with those), you could find sample bits of code
		that used it.

		&lt;li&gt;When you quickly wanted to learn a language, you
		knew you could find quality code with simple searches.

		&lt;li&gt;When you wanted to find different solutions to
		everyday problems dealing with protocols, new
		specifications, evolving standards and trends.   You
		could turn to CodeSearch.

		&lt;li&gt;When you were faced with an obscure error message,
		an obscure token, an obscure return value or other
		forms of poor coding, you would find sample bits of
		code that solved this problem.

		&lt;li&gt;When dealing with proprietary protocols or just
		poorly documented protocols, you could find how they
		worked in minutes.

		&lt;li&gt;When you were trying to debug yet another broken
		standard or yet another poorly specified standard, you
		knew you could turn quickly to CodeSearch to find the
		answers to your problems (memories of OAuth and IMAP
		flash in my head).

		&lt;li&gt;When learning a new programming language or
		trying to improve your skills on a new programming
		language, you could use CodeSearch to learn the idioms
		and the best (and worst practices).
		
		&lt;li&gt;When building a new version of a library, either
		in a new language, making a fluent version, making an
		open source version, building a more complete version
		you would just go to Codesearch to find answers to how
		other people did things.
	&lt;/ul&gt;

	&lt;p&gt;It is a shame that Google is turning their back on their
	officially stated
	mission &lt;a href="http://www.google.com/about/corporate/company/"&gt;"To
	organize the world‘s information and make it universally
	accessible and useful".&lt;/a&gt;  It is a shame that this noble
	goal is not as important as competing with Apple, Facebook,
	Microsoft, Twitter and Yelp.

&lt;h2&gt;Comparing Search Engines&lt;/h2&gt;

	&lt;p&gt;While writing this blog entry, I fondly remembered how
	Codesearch helped me understand the horrible Security
	framework that ships with iOS.    Nobody informed the Apple
	engineers that "Security through obscurity" was not intended
	for their developer documentation.

	&lt;p&gt;In this particular case, I was trying to understand the
	semantics of &lt;tt&gt;kSecReturnData&lt;/tt&gt;.  How to use this
	constant and how it interacts with the keyring system is both
	tricky, and poorly specified in Apple's docs.  Sometimes
	things fail without any indication of what went wrong, other
	than "error".  So I used CodeSearch to figure this out (along
	with some other 30 constants and APIs in that library that are
	just as poorly documented).

	&lt;p&gt;These are the results of looking for this value in three
	search engines as of this morning.

&lt;h3&gt;First Contender: GrepCode&lt;/h3&gt;

	&lt;p&gt;&lt;a href="http://www.grepcode.com"&gt;GrepCode&lt;/a&gt; shows
	absolutely nothing relevant.   But shows a bunch of Java
	packages with no context, no code snippets and if you make the
	mistake of drilling down, you wont find anything:

	&lt;center&gt;&lt;img src="http://tirania.org/s/668f579c.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;Not useful.
	
&lt;h3&gt;Second Contender: Codease&lt;/h3&gt;
	&lt;p&gt;&lt;a href="http://www.codase.com"&gt;Codase&lt;/a&gt; is indexing 250
	million lines of code, usually it takes minutes to get this
	page:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/ab8ab54f.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;Maybe the server will come back up.

&lt;h3&gt;Third Contender: Koders&lt;/h3&gt;

	&lt;p&gt;&lt;A href="http://www.koders.com"&gt;Koders&lt;/a&gt; is part of Black
	Duck, and searching for the term renders a bunch of matches.
	Not a single one of the results displayed actually contain a
	single use of the kSecReturnData constant.  And not a single
	one of the snippets actually show the kSecReturnData constant.
	It is as useful as configuring your browser to use StumbleUpon
	as your search engine:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/e1bffde7.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;Not useful.

&lt;h3&gt;Google's CodeSearch&lt;/h3&gt;

	&lt;p&gt;And this is what Codesearch shows:

	&lt;center&gt;
	&lt;img src="http://tirania.org/s/20e4f136.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;The big innovation on Google's search engine is that it
	actually works and shows real matches for the text being
	searched, with a relevant snippet of the information you are
	looking for.

	&lt;p&gt;We are going to be entering the dark ages of software
	research in the next few months.
	
&lt;h2&gt;Is there a hacker White Knight out there?&lt;/h2&gt;

	&lt;p&gt;Running a service like Codesearch is going to take a
	tremendous amount of resources.   There are major engineering
	challenges involved and hosting a service like this can not be
	cheap.    It is probably not even profitable.

	&lt;p&gt;Larry Page's Google has already dropped the project.   We
	can only hope that in a few years Sergey Brin's Google or Eric
	Schmidt's Google will bring this service back.

	&lt;p&gt;Microsoft is too busy catching up to Google and wont have
	any spare resources to provide a Bing for code search.   And
	if they did, they would limit the search to Win32 APIs.

&lt;h2&gt;Thanks!&lt;/h2&gt;

	&lt;p&gt;I should thank Google for funding that project for as long
	as they did as well as the Google engineers that worked on it
	as long as they could.  Over the years, it helped me fix
	problems in a fraction of the time and helped me understand
	complicated problems in minutes.


	&lt;p&gt;The Google engineers whose projects just got shutdown for
	in the name of strategy and focus are probably as sad as all
	of us are.
	
	&lt;p&gt;On the plus side, I get to share this rant on Google Plus
	with a dozen of my friends!

	
</description>
      <link>http://tirania.org/blog/archive/2011/Nov-29.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Nov-29.html</guid>
      <pubDate>Wed, 30 Nov 2011 04:44:00 -0500</pubDate>
    </item>
    <item>
      <title>Updated Documentation Site</title>
      <description>
	&lt;p&gt;Jeremie Laval has upgraded our Web-based documentation
	engine over
	at &lt;a href="http://docs.go-mono.com"&gt;docs.go-mono.com&lt;/a&gt;.
	This upgrade brings a few features:

	&lt;p&gt;&lt;b&gt;New Look:&lt;/b&gt; Base on Jonathan Pobst's redesign, this is
	what our documentation looks like now:

	&lt;center&gt;
	&lt;a href="http://docs.go-mono.com/?link=N%3aMonoTouch.CoreImage"&gt;&lt;img src="http://tirania.org/s/25d86560.png"&gt;&lt;/a&gt;
	&lt;/center&gt;

	&lt;p&gt;&lt;b&gt;Better Links:&lt;/b&gt; Links to pages on the site
	will now properly open the left-side tree to the
	documentation you linked to.  This has been an open
	request for about six years, and it got finally
	implemented.

	&lt;p&gt;&lt;b&gt;Search:&lt;/b&gt; the search box on the web site uses
	Lucene to search the text on the server side, and
	shows you the matching results as you type:

	&lt;img src="http://tirania.org/s/2f2389f0.png"&gt;

	&lt;p&gt;&lt;b&gt;Easier to Plug:&lt;/b&gt; MonoDoc/Web now easily supports loading
	documentation from alternate directories, it is no longer
	limited to loading the system-configured documentation.

	&lt;p&gt;&lt;b&gt;No more frames:&lt;/b&gt; For years we used frames for the
	documentation pages.   They had a poor experience and made the
	code uglier.  They are now gone.

	&lt;p&gt;&lt;b&gt;Powered by Mono's SGen:&lt;/b&gt; We have reduced the memory
	consumption of our web documentation by switching to
	Mono's &lt;a href="http://mono-project.com/Generational_GC"&gt;Generational
	GC&lt;/a&gt; from Boehm's.    The load on the server is lower,
	responses are faster and we scale better.   
	
	&lt;p&gt;The source code changes are now on GitHub in
	the &lt;a href="https://github.com/mono/mono-tools/tree/master/webdoc"&gt;webdoc&lt;/a&gt;
	module.

	&lt;p&gt;We have also added Google Analytics support to our web site
	to help us determine which bits of documentation are more
	useful to you.
</description>
      <link>http://tirania.org/blog/archive/2011/Nov-22.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Nov-22.html</guid>
      <pubDate>Tue, 22 Nov 2011 15:34:00 -0500</pubDate>
    </item>
    <item>
      <title>Hiring Mono Runtime Hackers</title>
      <description>
	&lt;p&gt;As Mono grows on servers, mobile and desktop platforms, we
	are looking to hire programmers to join our Mono Runtime team.

	&lt;p&gt;The Mono Runtime team owns the code generator, the
	just-in-time and ahead-of-time compilers, the garbage
	collector, the threadpool and async layers in the runtime and
	mostly works in the C-side of the house.

	&lt;p&gt;If you are a developer with low-level experience with
	virtual machines, just in time compilers or love garbage
	collection, real time processing, or you read every new research
	paper on incremental garbage collection, hardware
	acceleration, register allocation and you are interested in
	joining our young, self-funded and profitable startup, we want
	to hear from you.

	&lt;p&gt;Send your resumes to jobs@xamarin.com
</description>
      <link>http://tirania.org/blog/archive/2011/Oct-18.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Oct-18.html</guid>
      <pubDate>Tue, 18 Oct 2011 15:25:00 -0500</pubDate>
    </item>
    <item>
      <title>Upcoming Mono Releases: Change in Policies</title>
      <description>
	&lt;p&gt;We have historically made stable releases of Mono that get
	branched and maintained for long periods of time.   During
	these long periods of time, we evolve our master release for
	some four to five months while we do major work on the branch.

	&lt;p&gt;Historically, we have had done some of these large changes
	since we have rewritten or re-architected large parts of our
	JIT, or our garbage collector, or our compilers.

	&lt;p&gt;There were points in the project history where it took us
	some 9 months to release: seven months of new development
	followed by two months of beta testing and fixing
	regressions.  With Mono 2.6 we tried to change this, we tried
	to close the release time to at most six months, and we were
	relatively good at doing this with 2.8 and 2.10.

	&lt;p&gt;We were on track to do a quick Mono 2.12 release roughly
	around May, but with the April bump in the road, this derailed
	our plans.

	&lt;p&gt;Since 2.10.0 was released two things happened:

	&lt;ul&gt;

		&lt;li&gt;&lt;b&gt;On Master:&lt;/b&gt; plenty of feature work and bug
		fixing.

		&lt;li&gt;&lt;b&gt;On our 2.10 branch:&lt;/b&gt; bug fixes and
		backporting fixes from master to 2.10

	&lt;/ul&gt;

	&lt;p&gt;Now that things have settled at Xamarin and that we are
	getting Mono back into continuous integration builds we are
	going to release our first public beta of the upcoming Mono,
	it will be called Mono 2.11.1.   We will keep it under QA
	until we are happy with the results and we will then release
	Mono 2.12 based on this.

	&lt;p&gt;But after Mono 2.12, we want to move to a new development
	model where we keep our master branch always in a very stable
	state.   This means that new experimental features will be
	developed in branches and only landed to the master branch
	once they have been completed.

	&lt;p&gt;Our goal is to more quickly bring the features that we are
	developing to our users instead of having everyone wait for
	very long periods of time to get their new features.

&lt;h3&gt;New Features in Mono 2.11&lt;/h3&gt;

	&lt;p&gt;These are some of
	the &lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.12"&gt;new
	features availalable in Mono 2.11&lt;/a&gt;:
	

		&lt;ul&gt;
			&lt;li&gt;We refactored our C# compiler to
			have two backends one based on Cecil, one based on
			Reflection.Emit.   Fixing some important
			usability properties of our compiler.

			&lt;li&gt;Implemented C# 5 Async.

			&lt;li&gt;Our C# compiler has TypedReference support
			(__refvalue, __reftype and __makeref).

			&lt;li&gt;Our compiler as a service can compile
			classes now and has an instance API
			(instantiate multiple C# compiler contexts
			independently). 

			&lt;li&gt;Added the .NET 4.5 API profile and many of
			the new async APIs to use with C# 5.

			&lt;li&gt;Improved our new Garbage Collector: it is
			faster, it is more responsive and it is more
			stable.   It has also gained MacOS/iOS native
			support. 

			&lt;li&gt;We made System.Json available on every
			profile.

			&lt;li&gt;We
			added &lt;a href="http://msdn.microsoft.com/en-us/library/gg597391.aspx"&gt;Portable
			Class Library&lt;/a&gt; support.

			&lt;li&gt;We added tooling for Code Contracts

			&lt;li&gt;We added a TPL Dataflow implementation

			&lt;li&gt;We added fast ThreadLocal&lt;T&gt; support

			&lt;li&gt;We brought our ASP.NET implementation to
			the year 2011 and it now sports a new enormously cute
			error page as opposed to that error page that
			we have which transports you mind back to 1999.

			&lt;li&gt;Mono's debugger now supports attaching to
			a live process (deferred support)

			&lt;li&gt;Our socket stack is faster on BSD and OSX,
			by using kqueue (on Linux it uses epoll already).
		&lt;/ul&gt;

</description>
      <link>http://tirania.org/blog/archive/2011/Oct-14.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Oct-14.html</guid>
      <pubDate>Fri, 14 Oct 2011 15:31:00 -0500</pubDate>
    </item>
    <item>
      <title>WinRT and Mono</title>
      <description>
	&lt;p&gt;Today Joseph mentioned to me that some of our users got the
	impression from my previous post on WinRT that we would be
	implementing WinRT for Linux.   We are not working on a WinRT
	UI stack for Linux, and do not have plans to.

	&lt;p&gt;WinRT is a fabulous opportunity for Mono, because Microsoft
	is sending a strong message: if you want your code to run in
	multiple scenarios (server, desktops, sandboxed environments),
	you want to split your UI code from your backend code.

	&lt;p&gt;This is great because it encourages developers to think in
	terms of having multiple facades for the same code base and
	the direction that we have been taking Mono on in the last few
	years.

	&lt;p&gt;Use the native toolkit on each platform to produce an
	immersive user experience, and one that leverages the native
	platform in the best possible way.

	&lt;p&gt;These are the APIs that we envision .NET developers using
	on each platform:

	&lt;ul&gt;
		&lt;li&gt;Windows: WinRT, Winforms, WPF (fallbacks: Gtk#, Silverlight)

		&lt;li&gt;MacOS: MonoMac (fallback: Gtk#, Silverlight)

		&lt;li&gt;Linux: Gtk#

		&lt;li&gt;Android: MonoDroid APIs

		&lt;li&gt;iOS: MonoTouch

		&lt;li&gt;Windows Phone 7: Silverlight

		&lt;li&gt;XBox360: XNA-based UI

	&lt;/ul&gt;

	&lt;p&gt;Even if a lot of code could be reused from Moonlight, WinRT
	is a moving target.  It is not clear that the Linux desktop,
	as we know it today, is keeping up with the growth of other
	consumer environments.
	I &lt;a href="http://www.itwriting.com/blog/4925-miguel-de-icaza-talks-about-windows-8-and-the-failure-of-linux-on-the-desktop.html"&gt;talked
	to Tim&lt;/a&gt; about this at Build.

&lt;h2&gt;Head-less WinRT&lt;/h2&gt;

	&lt;p&gt;There are some GUI-less components of WinRT that *do* make
	sense to bring to Mono platforms.   There is already an
	&lt;a href="https://github.com/ermau/WinRT.NET"&gt;implementation of
	some bits&lt;/a&gt; of the headless WinRT components being done by
	Eric.

	&lt;p&gt;The above effort will enable more code sharing to take
	place between regular .NET 4 apps, WP7 apps, Mono apps and
	WinRT apps. 
</description>
      <link>http://tirania.org/blog/archive/2011/Sep-26.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Sep-26.html</guid>
      <pubDate>Tue, 27 Sep 2011 01:04:00 -0500</pubDate>
    </item>
    <item>
      <title>WinRT demystified</title>
      <description>
	&lt;p&gt;Windows 8 as introduced at Build is an exciting release as
	it has important updates to how Microsoft envisions users will
	interact with their computers, to a fresh new user interface
	to a new programming model and a lot more.    

	&lt;p&gt;If you build software for end-users, you
	should &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/BPS-1004"&gt;watch
	Jensen Harris&lt;/a&gt; discuss the Metro principles in Windows 8.
	I find myself wanting to spend time using Windows 8.
	
	&lt;p&gt;But the purpose of this post is to share what I learned at
	the conference specifically about WinRT and .NET.    

&lt;h2&gt;The Basics&lt;/h2&gt;

	&lt;p&gt;Microsoft is using the launch of Windows 8 as an
	opportunity to fix long-standing problems with Windows, bring
	a new user interface, and enable a safe AppStore model for
	Windows.

	&lt;p&gt;To do this, they have created a third implementation of the
	XAML-based UI system.   Unlike WPF which was exposed only to
	the .NET world and Silverlight which was only exposed to the
	browser, this new implementation is available to C++
	developers, HTML/Javascript developers and also .NET
	developers. 

	&lt;p&gt;.NET developers are very familiar with P/Invoke and COM
	Interop.   Those are two technologies that allow a .NET
	developer to consume an external component, for example, this
	is how you would use the libc "system (const char *)" API
	from C#:

	&lt;pre&gt;
	[DllImport ("libc")]
	void system (string command);
	[...]

	system ("ls -l /");
	&lt;/pre&gt;

	&lt;p&gt;We have used P/Invoke extensively in the Mono world to
	create bindings to native libraries.   Gtk# binds the Gtk+
	API, MonoMac binds the Cocoa API, Qyoto binds the Qt API and
	hundred other bindings wrap other libraries that are exposed
	to C# as object-oriented libraries.

	&lt;p&gt;COM Interop allows using C or C++ APIs directly from C# by
	importing the COM type libraries and having the runtime
	provide the necessary glue.    This is how Mono talked with
	OpenOffice (which is based on COM), or how Mono talks to
	VirtualBox (which has an XPCOM based API).

	&lt;p&gt;There are many ways of creating bindings for a native
	library, but doing it by hand is bound to be both tedious and
	error prone.   So everyone has adopted some form of "contract"
	that states what the API is, and the binding author uses this
	contract to create their language binding.

&lt;h2&gt;WinRT&lt;/h2&gt;

	&lt;p&gt;WinRT is a new set of APIs that have the following properties:

	&lt;ul&gt;
		&lt;li&gt;It implements the new Metro look.
		
		&lt;li&gt;Has a simple UI programming model for Windows
		developers (You do not need to learn Win32, what an
		HDC, WndProc or LPARAM is).

		&lt;li&gt;It exposes the WPF/Silverlight XAML UI model to
		developers.

		&lt;li&gt;The APIs are all designed to be asynchronous.

		&lt;li&gt;It is a sandboxed API, designed for creating
		self-contained, AppStore-ready applications.   You
		wont get everything you want to create for example
		Backup Software or Hard Disk Partitioning software.

		&lt;li&gt;The API definitions is exposed in the ECMA 335
		metadata format (the same one that .NET uses, you can
		find those as ".winmd" files).
	&lt;/ul&gt;

	&lt;p&gt;WinRT wraps both the new UI system as well as old Win32
	APIs and it happens that this implementation is based on top
	of COM.    

&lt;h3&gt;WinRT Projections&lt;/h3&gt;

	&lt;p&gt;What we call "bindings" Microsoft now calls "projections".
	Projections are the process of exposing APIs to three
	environments: Native (C and C++), HTML/Javascript and .NET.

	&lt;li&gt;If you author a component in C++ or a .NET language, its
	API will be stored in a WinMD file and you will be able to
	consume it from all three environments (Native, JavaScript and
	.NET).
	
	&lt;p&gt;Even in C++ you are not exposed to COM.   The use of COM is
	hidden behind the C++ projection tools.   You use what looks
	and feels like a C++ object oriented API.

	&lt;p&gt;To support the various constructs of WinRT, the underlying
	platform defines a basic set of types and their mappings to
	various environment.   In particular, collection objects in
	WinRT are mapped to constructs that are native to each
	environment.   
	
&lt;h2&gt;Asynchronous APIs&lt;/h2&gt;

	&lt;p&gt;Microsoft feels that when a developer is given the choice
	of a synchronous and an asynchronous API, developers will
	choose the simplicity of a synchronous API.   The result
	usually works fine on the developer system, but is terrible
	when used in the wild.

	&lt;p&gt;With WinRT, Microsoft has followed a simple rule: if an API
	is expected to take more than 50 milliseconds to run, the API
	is asynchronous.

	&lt;p&gt;The idea of course is to ensure that every Metro
	application is designed to always respond to user input and
	to not hang, block or provide a poor user experience.

	&lt;p&gt;Async programming has historically been a cumbersome process as
	callbacks and state must be cascaded over dozens of places and
	error handling (usually poor error handling) is sprinkled
	across multiple layers of code.

	&lt;p&gt;To simplify this process, C# and VB have been extended to
	support the F#-inspired await/async pattern, turning async
	programming into a joy.    C++ got a setup that is as good as
	you can get with C++ lambdas and Javascript uses promises and
	"then ()".

&lt;h2&gt;Is it .NET or Not?&lt;/h2&gt;

	&lt;p&gt;Some developers are confused as to whether .NET is there or
	not in the first place, as not all of the .NET APIs are
	present (File I/O, Sockets), many were moved and others were
	introduced to integrate with WinRT.

	&lt;p&gt;When you use C# and VB, you are using the full .NET
	framework.    But they have chosen to expose a smaller subset
	of the API to developers to push the new vision for Windows 8.

	&lt;p&gt;And this new vision includes safety/sandboxed systems and
	asynchronous programming.  This is why you do not get direct
	file system access or socket access and why synchronous APIs
	that you were used to consuming are not exposed.

	&lt;p&gt;Now, you notice that I said "exposed" and not "gone".

	&lt;p&gt;What they did was that they only exposed to the compiler a
	set of APIs when you target the Metro profile.    So your
	application will not accidentally call File.Create for
	example.   At runtime though, the CLR will load the full class
	library, the very one that contains File.Create, so
	internally, the CLR could call something like File.Create, it
	is just you that will have no access to it.

	&lt;p&gt;This split is similar to what has been done in the past
	with Silverlight, where not every API was exposed, and where
	mscorlib was given rights that your application did not have
	to ensure the system safety.

	&lt;p&gt;You might be thinking that you can use some trick
	(referencing the GAC library instead of the compiler reference
	or using reflection to get to private APIs, or P/Invoking into
	Win32).   But all of those uses will be caught by AppStore
	review application and you wont be able to publish your app
	through Microsoft's store.

	&lt;p&gt;You can still do whatever ugly hack you please on your
	system.  It just wont be possible to publish that through the
	AppStore.

	&lt;p&gt;Finally, the .NET team has taken this opportunity to do
	some spring cleaning.  mscorlib.dll and System.dll have been
	split in various libraries and they have moved some types
	around. 
	
&lt;h2&gt;Creating WinRT Components&lt;/h2&gt;

	&lt;p&gt;Microsoft demoed creating new WinRT components on both C++
	and .NET.

	&lt;p&gt;In the .NET case, creating a WinRT component has been
	drastically simplified.   The following is the full source
	code for a component that adds 2:

	&lt;pre&gt;

	public sealed class AddTwo {
		public int Add (int a, int b)
		{
			return a + b;
		}

		public async IAsyncOperation&lt;int&gt; SubAsync (int a, int b)
		{
			return a - await (CountEveryBitByHand (b));
		}
	}
	&lt;/pre&gt;

	&lt;p&gt;You will notice that there are no COM declarations of any
	kind.   The only restriction is that your class must be sealed
	(unless you are creating a XAML UI component, in that case the
	restriction is lifted).

	&lt;p&gt;There are also some limitations, you can not have private
	fields on structures, and there is not Task&amp;lt;T&amp;gt; for
	asynchronous APIs, instead you use the IAsyncOperation
	interface.

	&lt;b&gt;Update to clarify: the no private fields rule is only limited to
	structs exposed to WinRT, and it does not apply to classes.&lt;/b&gt;

&lt;h2&gt;UI Programming&lt;/h2&gt;

	&lt;p&gt;When it comes to your UI selection, you can either use HTML
	with CSS to style your app or you can use XAML UI.

	&lt;p&gt;To make it easy for HTML apps to adhere to the Metro UI
	style and interaction model, Microsoft distributes Javascript
	and CSS files that you can consume from your project.   Notice
	that this wont work on the public web.   As soon as you use
	any WinRT APIs, your application is a Windows app, and wont
	run in a standalone web browser.

	&lt;p&gt;.NET and C++ developers get to use XAML instead.

	&lt;p&gt;There is clearly a gap to be filled in the story.    It
	should be possible to use Microsoft's Razor formatting engine
	to style applications using HTML/CSS while using C#.
	Specially since they have shown the CLR running on their
	HTML/JS Metro engine.

	&lt;p&gt;Right now HTML and CSS is limited to the Javascript use.
	
&lt;h2&gt;In Short&lt;/h2&gt;

	&lt;p&gt;Microsoft has created a cool new UI library called WinRT
	and they have made it easy to consume from .NET, Javascript
	and C++ and if you adhere by their guidelines, they will
	publish the app on their appstore.

&lt;h2&gt;Xamarin at BUILD&lt;/h2&gt;

	&lt;p&gt;If you are at build, come &lt;a href="http://tirania.org/blog/archive/2011/Sep-14.html"&gt;join us tonight at 6:30&lt;/a&gt; at the Sheraton
	Park hotel, just after Meet the Experts.  Come talk about
	Mono, Xamarin, MonoTouch, MonoDroid and MonoMac and discuss
	the finer points of this blog over an open bar.

&lt;h2&gt;Comments&lt;/h2&gt;

	&lt;p&gt;There is a long list of comments in the moderation queue
	that are not directly related to WinRT, or bigger questions
	that are not directly related to WinRT, .NET and this post's
	topic, so I wont be approving those comments to keep things on
	focus.  There are better forums to have discussions on Metro. 
</description>
      <link>http://tirania.org/blog/archive/2011/Sep-15.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Sep-15.html</guid>
      <pubDate>Fri, 16 Sep 2011 01:03:00 -0500</pubDate>
    </item>
    <item>
      <title>Xamarin and Mono at the BUILD Conference</title>
      <description>
	&lt;center&gt;
	&lt;img src="http://xamarin.files.wordpress.com/2011/09/flyer-web.jpg?w=700&amp;h=295"&gt;
	&lt;/center&gt;

	&lt;p&gt;Continuing our tradition of getting together with Mono
	users at Microsoft conferences, we are going to be hosting an
	event at the Sheraton Hotel next to the conference on
	Thursday at 6:30pm (just after Ask the Experts).

	&lt;p&gt;Come join us with your iOS, Android, Mac and Linux
	questions.   


	
</description>
      <link>http://tirania.org/blog/archive/2011/Sep-14.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Sep-14.html</guid>
      <pubDate>Wed, 14 Sep 2011 16:07:00 -0500</pubDate>
    </item>
    <item>
      <title>MonoDevelop 2.6 is out</title>
      <description>
	&lt;p&gt;Lluis just released the final version of MonoDevelop 2.6.

	&lt;p&gt;This release packs
	a &lt;a href="http://monodevelop.com/Download/What's_new_in_MonoDevelop_2.6"&gt;lot
	of new features&lt;/a&gt;, some of my favorite features in this
	release are:

	&lt;ul&gt;
		&lt;li&gt;Git support.
		&lt;ul&gt;
			&lt;li&gt;It not only provides the regular source
			code control commands, it adds full support
			for the various Git idioms not available in
			our Subversion addin.
			
			&lt;li&gt;Based on Java's JGit engine

			&lt;li&gt;Ported to C# using db4Object's sharpen
			tool.   Which
			Lluis &lt;a href="https://github.com/slluis/sharpen"&gt;updated
			significantly&lt;/a&gt;

			&lt;li&gt;Logging and Blaming are built into the
			editor.

			&lt;center&gt;
			&lt;img src="http://monodevelop.com/@api/deki/files/308/=md26-ChangesView.png" width="540"&gt;
			&lt;/center&gt;
		&lt;/ul&gt;

		&lt;li&gt;Mac support:

		&lt;ul&gt;
			&lt;li&gt;Our
			fancy &lt;a href="http://www.mono-project.com/MonoMac"&gt;MonoMac&lt;/a&gt;
			support lets you build native Cocoa
			applications.   If you have not jumped into
			this Steve Jobs Love Fest, you can get started
			with our built-in templates and our &lt;a href="http://docs.go-mono.com/index.aspx?link=root:/monomac-lib"&gt;online API
			documentation&lt;/a&gt;.

			&lt;li&gt;Native File Dialogs!    We now use the
			operating system file dialogs, and we even
			used our own MonoMac bindings to get this
			done.

			&lt;li&gt;You can also check
			my &lt;a href="http://tirania.org/monomac"&gt;Mac/iOS-specific
			blog for more details&lt;/a&gt;.
		&lt;/ul&gt;

		&lt;li&gt;Unified editor for Gtk#, ASP.NET, MonoTouch and
		MonoDroid: we no longer have to track various forks of
		MonoDevelop, they have all converged into one tree.
	&lt;/ul&gt;

	&lt;p&gt;The above is just a taste of the new features in
	MonoDevelop 2.6.   There
	are &lt;a href="http://monodevelop.com/index.php?title=Download/What's_new_in_MonoDevelop_2.6"&gt;many
	more&lt;/a&gt; nominate your own!

	&lt;p&gt;Congratulations to the MonoDevelop team on the great job
	they did!

	&lt;p&gt;And I want to thank everyone that contributed code to
	MonoDevelop, directly or indirectly to make this happen.  
</description>
      <link>http://tirania.org/blog/archive/2011/Sep-07.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Sep-07.html</guid>
      <pubDate>Wed, 07 Sep 2011 21:11:00 -0500</pubDate>
    </item>
    <item>
      <title>Learning Unix</title>
      <description>
	&lt;p&gt;As I meet new Unix hackers using Linux or Mac, sometimes I
	am surprised at how few Unix tricks they know.   It is
	sometimes painful to watch developers perform manual tasks on
	the shell.

	&lt;p&gt;What follows are my recommendations on how to improve your
	Unix skills, with a little introduction as to why you should
	get each book.    I have linked to each one of those books
	with my Amazon afiliates link, so feel free to click on those
	links liberally.

	&lt;p&gt;Here is the list of books that programmers using Unix
	should read.   It will only take you a couple of days to read
	them, but you will easily increase your productivity by a
	whole order of magnitude.

	
&lt;h3&gt;The Basics&lt;/h3&gt;

	&lt;iframe align="right" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=tiraniaorg-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=013937681X"
	style="width:120px;height:240px;" scrolling="no"
	marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;
	
	&lt;p&gt;The &lt;a href="http://www.amazon.com/gp/product/013937681X/ref=as_li_ss_tl?ie=UTF8&amp;tag=tiraniaorg-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=013937681X"&gt;Unix
	Programming Environment&lt;/a&gt; by Kernighan and Pike is a
	must-read.  Although this is a very old book and it does not
	cover the fancy new features in modern versions of Unix, no
	other book covers in such beauty the explanation of the shell
	quoting rules, expansion rules, shell functions and the
	redirection rules.

	&lt;p&gt;Every single thing you do in Unix will use the above in
	some form or shape, and until you commit those to memory you
	will be a tourist, and not a resident.

	&lt;p&gt;Then you will learn sed and basic awk, both tools that you
	will use on a daily basis once you become proficient.   You do
	not have to ever be scared of sed or regular expressions anymore.

	&lt;p&gt;Save yourself the embarrassment, and avoid posting on the
	comments section jwz's quote on regular expressions.  You are
	not jwz.

	&lt;p&gt;It will take you about a week of commuting by bus to read
	it.   You do not have to finish the book, you can skip over
	the second part.
	
&lt;h3&gt;Unix Boot Camp&lt;/h3&gt;

	&lt;iframe align="right"
		src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=tiraniaorg-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=0201823764"
		style="width:120px;height:240px;" scrolling="no"
		marginwidth="0" marginheight="0"
		frameborder="0"&gt;&lt;/iframe&gt;

	&lt;p&gt;While Kernighan's book is basic literacy, you need to
	develop your muscles and you need to do this fast and not
	buy a book so thick and so packed with ridiculous screenshots
	that you will never get past page 20.   

	&lt;p&gt;Get &lt;a href="http://www.amazon.com/gp/product/0201823764/ref=as_li_ss_tl?ie=UTF8&amp;tag=tiraniaorg-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201823764"&gt;UNIX
	for the Impatient&lt;/a&gt;.  This book is fun, compact and is
	packed with goodies that will make you enjoy every minute in
	Unix.

&lt;h3&gt;Learn Emacs&lt;/h3&gt;

	&lt;p&gt;Emacs has had a strong influence in Unix over the years.
	If you learn to use Emacs, you will automatically learn the
	hotkeys and keybindings in hundreds of applications in Unix.

	&lt;p&gt;The best place to learn Emacs is to launch Emacs and then
	press Control-h and then t.    This is the online tutorial and
	it will take you about two hours to complete.

	&lt;p&gt;The knowledge that you will gain from Emacs will be useful
	for years to come.   You will thank me.   And you will offer
	to buy me a beer, which I will refuse because I rather have
	you buy me a freshly squeezed orange juice. 
	
&lt;h3&gt;Tooting my own horn&lt;/h3&gt;

	&lt;p&gt;Learn to use the Midnight Commander.

	&lt;p&gt;The Midnight Commander blends the best of both worlds:
	GUI-esque file management with full access to the Unix
	console.

	&lt;p&gt;The Midnight Commander is a console application that shows
	2 panels listing two different directories side-by-side and
	provides a command line that is fed directly to the Unix
	shell.

	&lt;center&gt;
	&lt;a href="http://www.gnu.org/s/mc/images/mc-panels.png"&gt;
	&lt;img src="http://www.gnu.org/s/mc/images/mc-panels.png" width="640"&gt;
	&lt;/a&gt;
	&lt;/center&gt;

	&lt;p&gt;The basics are simple: use the arrow keys to move around,
	Control-S to do incremental searches over filenames,
	Control-t to tag or untag files and the F keys to perform
	copy, move or delete operations.   Copy and Move default to
	copy to the other panel (which you can conveniently switch to
	by pressing the tab key).
	
	&lt;p&gt;There is no better way of keeping your file system
	organized than using my file manager. 

&lt;h3&gt;Becoming a Power User&lt;/h3&gt;

	&lt;p&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=tiraniaorg-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=0596003307"
	style="width:120px;height:240px;" scrolling="no"
	marginwidth="0" marginheight="0" frameborder="0" align="right"&gt;&lt;/iframe&gt;

	If you can not quench your thirst for knowledge there is
	one last book that I will recommend.   This is the atomic bomb
	of Unix knowledge.

	&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0596003307/ref=as_li_ss_tl?ie=UTF8&amp;tag=tiraniaorg-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0596003307"&gt;Unix
	Power Tools&lt;/a&gt; is a compilation of tricks by some of the best
	Unix users that got compiled into a huge volume.  This is a
	book of individual tricks, each about a page long, ideal to
	keep either on your bedside or in the restoom to pick a new
	trick every day.

&lt;h3&gt;Mavis Beacon&lt;/h3&gt;

	&lt;p&gt;At this point you might be thinking "I am awesome", "the
	world is my oyster" and "Avatar 3D was not such a bad movie".

	&lt;p&gt;But unless
	you &lt;a href="http://en.wikipedia.org/wiki/Touch_typing"&gt;touch-type&lt;/a&gt;,
	you are neither awesome, nor you are in a position to judge
	the qualities of the world as an oyster or any James Cameron
	movies.

	&lt;P&gt;You have to face the fact that not only you are a slow
	typist, you do look a little bit ridiculous.  You are typing
	with two maybe three fingers on each hand and you move your
	head like a chicken as you alternate looking at
	your keyboard and looking at your screen.

	&lt;p&gt;Do humanity a favor and learn to touch type.

	&lt;p&gt;You can learn to touch type in about three weeks if you
	spend some two to three hours per day
	using &lt;a href="http://www.amazon.com/gp/product/B003MU9CPY/ref=as_li_ss_tl?ie=UTF8&amp;tag=tiraniaorg-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=B003MU9CPY"&gt;Mavis
	Beacon Teaches Typing&lt;/a&gt;.

	&lt;p&gt;Mavis Beacon costs seventeen dollars ($17).  Those
	seventeen dollars and the sixty three hours you will spend
	using it will do more to advance your carreer than the same
	sixty three hours spend reading editorials on Hacker News.

&lt;h3&gt;Classics&lt;/h3&gt;

	&lt;p&gt;All of the books I list here have stood the test of time.
	They were written at a time when books were designed to last a
	lifetime.   

	&lt;p&gt;Unlike most modern computer books, all of these were a
	pleasure to read.
</description>
      <link>http://tirania.org/blog/archive/2011/Sep-06.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Sep-06.html</guid>
      <pubDate>Tue, 06 Sep 2011 13:45:00 -0500</pubDate>
    </item>
    <item>
      <title>And we are back: Mono 2.10.3</title>
      <description>
	&lt;p&gt;This is Xamarin's first official Mono release.

	&lt;p&gt;This is a major bug fix release that addresses many of the
	problems that were reported since our last release back on
	April 25th.

	&lt;p&gt;The &lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.10.3"&gt;detailed
	release notes&lt;/a&gt; have all the details, but the highlights of
	this release include:

	&lt;ul&gt;
		&lt;li&gt;MacOS X Lion is supported: both the Mono runtime
		and Gtk+ as shipped with Mono have been updated to run
		properly on Lion.  This solves the known problems that
		users had running MonoDevelop on MacOS X.

		&lt;li&gt;Vastly improved WCF stack

		&lt;li&gt;Many bug fixes to our precise garbage collector.
	&lt;/ul&gt;

	&lt;p&gt;Major features continue to be developed in the main branch.
	Currently we are just waiting for the C# 5.0 Asynchronous
	Language support to be completed to release that version.

	&lt;p&gt;Mono 2.10.3 also serves as the foundation for the upcoming
	Mono for Android 1.0.3 and MonoTouch 4.1.

	&lt;p&gt;You can get it
	from &lt;a href="http://www.go-mono.com/mono-downloads/download.html"&gt;Mono's
	Download Site&lt;/a&gt;.

	&lt;p&gt;Currently we offer source code, Windows and MacOS
	packages.   We will publish Linux packages as soon as we are
	done mirroring the contents of the old site that contains the
	Linux repositories.

&lt;h3&gt;On C# 5.0&lt;/h3&gt;

	&lt;p&gt;Our new compiler, as you might know, has been rewritten to
	support two backends: a System.Reflection.Emit backend, and
	the brilliant IKVM.Reflection backend.
	
	&lt;p&gt;The C# 5.0 support as found
	on &lt;a href="http://github.com/mono/mono"&gt;master&lt;/a&gt; contains
	the C# 5.0 support as shipped by Microsoft on their latest
	public release.

	&lt;p&gt;To try it out, use -langversion:future when invoking the
	compiler.   You can try some of our samples in
	mono/mcs/tests/test-async*.cs
	
</description>
      <link>http://tirania.org/blog/archive/2011/Aug-04.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Aug-04.html</guid>
      <pubDate>Thu, 04 Aug 2011 17:00:00 -0500</pubDate>
    </item>
    <item>
      <title>MonoDevelop on Lion</title>
      <description>
	&lt;P&gt;We here at Xamarin are as excited as you are about the
	release of Lion. But unfortunately we're not quite ready to
	support you on Lion yet, and MonoDevelop doesn't work quite
	right. We're working around the clock to make MonoDevelop work
	perfectly on Lion, and we'll let you know as soon as it's ready.

	&lt;p&gt;&lt;b&gt;Update on July 29th:&lt;/b&gt; We have most of the fixes in
	place for Mono and will issue a build for testing on the Alpha
	channel soon.

</description>
      <link>http://tirania.org/blog/archive/2011/Jul-20.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Jul-20.html</guid>
      <pubDate>Wed, 20 Jul 2011 17:16:00 -0500</pubDate>
    </item>
    <item>
      <title>Novell/Xamarin Partnership around Mono</title>
      <description>
	&lt;p&gt;I have great news to share with the Mono community.   
	
	&lt;p&gt;Today together with SUSE, an Attachmate Business
	Unit, &lt;a href="http://www.novell.com/news/press/2011/7/suse-and-xamarin-partner-to-accelerate-innovation-and-support-mono-customers-and-community.html?utm_source=twitterfeed&amp;utm_medium=twitter"&gt;we
	announced&lt;/a&gt;:

	&lt;ul&gt;
		&lt;li&gt;&lt;a href="http://xamarin.com"&gt;Xamarin&lt;/a&gt; will be
		providing the support for all of the
		existing &lt;a href="http://ios.xamarin.com"&gt;MonoTouch&lt;/a&gt;,
		&lt;a href="http://android.xamarin.com"&gt;Mono for
		Android&lt;/a&gt; and Mono for Visual Studio customers.

		&lt;li&gt;Existing and future SUSE customers that use the
		Mono Enterprise products on their SLES and SLED
		systems will continue to receive great support backed
		by the engineering team at Xamarin.
		
		&lt;li&gt;&lt;a href="http://xamarin.com"&gt;Xamarin&lt;/a&gt; obtained
		a perpetual license to all the intellectual property
		of Mono, MonoTouch, Mono for Android, Mono for Visual
		Studio and will continue
		&lt;a href="http://store.xamarin.com"&gt;updating and
		selling&lt;/a&gt; those products.

		&lt;li&gt;Starting today, developers will be able to
		purchase MonoTouch and Mono for Android
		from &lt;a href="http://store.xamarin.com"&gt;the Xamarin
		store&lt;/a&gt;.  Existing customers will be able to
		purchase upgrades.

		&lt;li&gt;Xamarin will be taking over the stewardship of the
		&lt;a href="http://www.mono-project.com"&gt;Mono open
		source&lt;/a&gt; community project.   This includes the
		larger Mono ecosystem of applications that you are
		familiar with including MonoDevelop and the other
		Mono-centric in
		the  &lt;a href="http://github.com/mono/"&gt;Mono
		Organization&lt;/a&gt; at GitHub.  
	&lt;/ul&gt;

	&lt;center&gt;
	&lt;img src="http://tirania.org/images/xamarin-cat.jpg"&gt;
	&lt;/center&gt;
	
	&lt;p&gt;We are a young company, but we are completely dedicated to
	these mobile products and we can not wait to bring smiles to
	every one of our customers.

&lt;h3&gt;Roadmaps&lt;/h3&gt;

	&lt;p&gt;Our immediate plans for both MonoTouch and Mono for Android
	is to make sure that your critical and major bugs are fixed.
	We have been listening to the needs of the community and we
	are working to improve these products to meet your needs.
	You can expect updates to the products in the next week. 

	&lt;p&gt;In the past couple of months, we have met with some of our
	users and we have learned a lot about what you wanted.  We
	incorporated your feature requests into our products roadmaps
	for both
	the &lt;a href="http://ios.xamarin.com/Roadmap"&gt;MonoTouch&lt;/a&gt; and
	the &lt;a href="http://android.xamarin.com/Roadmap"&gt;Mono for
	Android&lt;/a&gt; products.

	&lt;p&gt;Another thing we learned is that many companies need to
	have a priority support offering for this class of products,
	so we have introduced this.  It can be either
	be &lt;a href="http://store.xamarin.com"&gt;purchased&lt;/a&gt; when you
	first order MonoTouch or Mono for Android, or you get an
	upgrade to get the priority support.
	
&lt;h3&gt;Next Steps&lt;/h3&gt;

	&lt;p&gt;Our goals are to delight software developers by giving them
	the most enjoyable environment, languages and tools to build
	mobile applications.

	&lt;p&gt;We are thankful to everyone that provided feedback to us in
	our online form that we published a month ago.  Please keep
	your feedback coming, you can reach us
	at &lt;a href="mailto:contact@xamarin.com"&gt;contact@xamarin.com&lt;/a&gt;.
	We are reading every email that you send us and you can use my
	new miguel at new company dot com email address to reach me.

	&lt;p&gt;We will be at the &lt;a href="http://monospace.us/"&gt;Monospace conference&lt;/a&gt; this weekend at the
	&lt;a href="http://microsoftcambridge.com/Default.aspx"&gt;Microsoft
	NERD Center&lt;/a&gt;, hope to see you there!

	&lt;p&gt;Remember to &lt;a href="http://store.xamarin.com"&gt;purchase
	early and often&lt;/a&gt; so we have the resources to bring you the
	best developer tools on the planet.

</description>
      <link>http://tirania.org/blog/archive/2011/Jul-18.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Jul-18.html</guid>
      <pubDate>Mon, 18 Jul 2011 15:27:00 -0500</pubDate>
    </item>
    <item>
      <title>Update on Mono</title>
      <description>
	&lt;p&gt;I have a posted
	an &lt;a href="http://lists.ximian.com/pipermail/mono-list/2011-July/047311.html"&gt;update
	on Mono&lt;/a&gt; and the upcoming release of Mono 2.12.
</description>
      <link>http://tirania.org/blog/archive/2011/Jul-06.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Jul-06.html</guid>
      <pubDate>Wed, 06 Jul 2011 15:45:00 -0500</pubDate>
    </item>
    <item>
      <title>Mono Consultants</title>
      <description>
	&lt;p&gt;We are getting flooded with paid support requests for
	Mono.   Developers looking for us to fix bugs in Mono, to do
	some custom work, to port applications, libraries and adjust
	Mono for some specific needs.

	&lt;p&gt;But we are trying to be a product company as opposed to a
	support company.   

	&lt;p&gt;We still want to help the Mono user community, and with all
	of the Mono talent out there, at least we can use this
	opportunity to get both groups in touch: the users that want
	custom engineering done, with the talented list of hackers.

	&lt;p&gt;If you are a consultant available to do custom engineering
	and support for customers, we would love to put you in touch
	with people that need the custom engineering done.    Email us
	at contact@xamarin.com, in the subject line, specify that you
	are available for custom engineering, and in the body of the
	message list both your Mono skills (C# or C coding) and your
	availability to engage on those gigs.

	&lt;p&gt;We will then get you in touch with users that needs the
	work done.
</description>
      <link>http://tirania.org/blog/archive/2011/Jun-30.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Jun-30.html</guid>
      <pubDate>Thu, 30 Jun 2011 23:21:00 -0500</pubDate>
    </item>
    <item>
      <title>Xamarin Joy Factory</title>
      <description>
	&lt;p&gt;Setting up a new &lt;a href="http://www.xamarin.com"&gt;company&lt;/a&gt;
	consumes a lot of time.   Specially as we are developing as
	fast as we can not one, but two products: .NET for iPhone and
	.NET for Android.

	&lt;p&gt;Structurally, we are better off than we were the first time
	that we built these products.  We have more developers working
	on each product than we did the first time around, so progress
	is faster.  But we also had to swap the developers around:
	those that wrote Foo, can not work on Foo again.  This is just
	one of the things that we have to do to ensure a clean room
	implementation.

	&lt;p&gt;Our vision is to create happy developers.  We did that in
	the past by bringing the C# language, garbage collection,
	LINQ, strongly typed APIs, Parallel FX, intellisense and
	inline documentation to iPhone and Android developers. And by
	making it possible for the world's 6 million .NET developers
	to reuse their skills on the most popular mobile platforms.

	&lt;p&gt;This time around, we are doing even more.  We are
	addressing many of the frustrations that developers had with
	the old products and making sure that those frustrations go
	away.  

	&lt;p&gt;Nat and myself complement each other very well here.  This
	means that there are a lot of new things that will be present
	in our offering that we never did in the past.

	&lt;p&gt;There is a new level of polish that those familiar with
	Nat's previous products had (SUSE Studio, NLD/SLED, Ximian
	Desktop).  Everyone at Xamarin can feel that Nat is hard at
	work when they noticed that one of the first things Nat did
	was to engage six design firms and an army of technical
	writers to ensure that our products go from "Nice" to
	"Amazing".  And that was on his second week as CEO, a lot has
	happened since.

	&lt;p&gt;I do not want to give away everything that we are doing, it
	would ruin the surprise, but we are here to deliver joy to
	programmers everywhere.
	
	&lt;p&gt;If you are interested in working with us, and making mobile
	development and .NET development a joy that everyone can
	enjoy, check out
	our &lt;a href="http://xamarin.com/jobs.html"&gt;Jobs page&lt;/a&gt;

&lt;h3&gt;Where we are now&lt;/h3&gt;

	&lt;p&gt;It gives me great pleasure to say that we
	have &lt;a href="http://tirania.org/blog/archive/2010/Jul-10.html"&gt;elevated
	the discourse&lt;/a&gt; on the iPhone simulator and my
	Chicken-powered &lt;a href="http://tirania.org/tweetstation/"&gt;TweetStation&lt;/a&gt;
	is up and running with the new iOS product.  The picture on
	the left is TweetStation powered by MonoTouch, the picture on
	the right is TweetStation powered by Xamarin's iPhone product:

	&lt;blockquote&gt;
	&lt;span style="float: left; text-align:center;"&gt;
	&lt;a href="http://tirania.org/tmp/tweetstation-mt.png"&gt;&lt;img src="http://tirania.org/tmp/tweetstation-mt-half.png"&gt;&lt;/a&gt;
	&lt;br&gt;TweetStation on MonoTouch
	&lt;/span&gt;

	&lt;span style="float: left; text-align:center; margin-left: 5em;"&gt;
	&lt;a href="http://tirania.org/tmp/tweetstation-xt.png"&gt;&lt;img src="http://tirania.org/tmp/tweetstation-xt-half.png"&gt;&lt;/a&gt;
	&lt;br&gt;TweetStation on Xamarin iOS
	&lt;/span&gt;
	&lt;/blockquote&gt;

	&lt;p style="clear: both;"&gt;&lt;b&gt;Update:&lt;/b&gt;   TweetStation now starts up on Device!   We
	have the static compiler working!

	&lt;p&gt;We also have the delicious iOS5 APIs exposed as
	strongly-typed and intellisense-friendly C#.   We are now
	updating the APIs from Beta1 to Beta2, which should be
	completed today or tomorrow.    
	
	&lt;p&gt;Our Android efforts are moving fast.   Only this
	morning we got Layouts to render on the device.   This is a
	lot of work, as it gets Dalvik to start Mono, and initializes
	our entire bridge and exercises the C# and Java bridge.    In
	addition, we have identified and fixed a serious problem in
	the distributed garbage collector.   

	&lt;p&gt;We also have a number of surprises for everyone in
	MonoDevelop, we believe that you guys are going to love the
	new features for iPhone and Android development. 

	&lt;p&gt;There is still a lot of polish left to do.  We are working
	as hard as we can to have Preview releases in your hands, but
	we feel confident that we will have a great product for sale
	by the end of the summer. We hope you will all max out your
	credit cards buying it.
</description>
      <link>http://tirania.org/blog/archive/2011/Jun-28.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Jun-28.html</guid>
      <pubDate>Tue, 28 Jun 2011 20:42:00 -0500</pubDate>
    </item>
    <item>
      <title>Xamarin recruits best CEO in the Industry</title>
      <description>
	&lt;p&gt;I could not be more excited about this.

	&lt;p&gt;&lt;a href="http://nat.org/blog"&gt;Nat Friedman&lt;/a&gt; has &lt;a href="http://nat.org/blog/2011/05/xamarin/"&gt;joined
	Xamarin&lt;/a&gt; as a company founder and CEO this week.

	&lt;p&gt;Nat and I have known each other and worked together on and off
	since the early days of Linux.  In 1999, we started
	&lt;a href="http://en.wikipedia.org/wiki/Ximian"&gt;Ximian&lt;/a&gt;
	to advance the state of Linux, user experience and developer 
	platforms - with many of our efforts brought to fruition 
	after our acquisition by Novell in 2003.
	
	&lt;p&gt;Anyone that has had the pleasure to work with Nat knows
	that ideas come in one side, and objects of desire come out on
	the other end.   

	&lt;p&gt;In mobile development, we've discovered a great opportunity: 
	a need for products that developers love.  And we are going to 
 	fill this need with great products that will make everyone's 
	eyes shine every time they use our software.   

	&lt;p&gt;Update: Nat's most recent product
	was &lt;a href="http://susestudio.com"&gt;SUSE Studio&lt;/a&gt;.   
</description>
      <link>http://tirania.org/blog/archive/2011/May-25.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/May-25.html</guid>
      <pubDate>Wed, 25 May 2011 15:14:00 -0500</pubDate>
    </item>
    <item>
      <title>Announcing Xamarin</title>
      <description>
	&lt;p&gt;&lt;img src="http://primates.ximian.com/~miguel/pictures/larrymoon.png"
	align="right"&gt;Today we start &lt;a href="http://www.Xamarin.com"&gt;Xamarin&lt;/a&gt;, our
	new company focused on Mono-based products.   

	&lt;p&gt;These are some of the things that we will be doing at
	Xamarin:

	&lt;ul&gt;
		&lt;li&gt;Build a new commercial .NET offering for iOS

		&lt;li&gt;Build a new commercial .NET offering for Android

		&lt;li&gt;Continue to contribute, maintain and develop the
		open source Mono and Moonlight components.

		&lt;li&gt;Explore the Moonlight opportunities in the mobile
		space and the Mac appstore.
	&lt;/ul&gt;

	&lt;p&gt;We believe strongly
	in &lt;a href="http://tirania.org/blog/archive/2011/Apr-06.html#split"&gt;splitting
	the presentation layer from
	the business logic&lt;/a&gt; in your application and supporting both
	your backend needs with C# on the server, the client or mobile
	devices and giving you the tools to use .NET languages in
	&lt;a href="http://tirania.org/blog/archive/2011/Feb-14.html"&gt;every desktop and mobile client&lt;/a&gt;.
	
	&lt;p&gt;Development started early this morning, we will first
	deliver the iPhone stack, followed by the Android stack, and
	then the Moonlight ports to both platforms.

	&lt;p&gt;The new versions of .NET for the iPhone and Android will be
	source compatible with MonoTouch and Mono for Android.  Like
	those versions, they will be commercial products, built on top
	of the open core Mono.

	&lt;p&gt;In addition, we are going to provide support and custom
	development of Mono.  A company that provides International
	Mono Support, if you will.

	&lt;p&gt;As usual, your feedback will help us determine which
	platforms and features are important to you.  Help us by
	filling out
	&lt;a href="https://spreadsheets0.google.com/spreadsheet/viewform?hl=en&amp;hl=en&amp;formkey=dHZNYTFXU3dqbXp6d2JwajhXTGRUNlE6MQ#gid=0"&gt;our
	survey&lt;/a&gt;.   If you give us your email address, we will also
	add you to our preview/beta list for our upcoming products. 
	
&lt;h2&gt;Fighting for Your Right to Party&lt;/h2&gt;

	&lt;p&gt;We have been trying to spin Mono off from Novell for more
	than a year now.  Everyone agreed that Mono would have a
	brighter future as an independent company, so a plan was
	prepared last year.   
	
	&lt;p&gt;To make a long story short, the plan to spin off was not
	executed.  Instead on Monday May 2nd, the Canadian and
	American teams were laid off; Europe, Brazil and Japan
	followed a few days later.  These layoffs included all the
	MonoTouch and MonoDroid engineers and other key Mono
	developers.  Although Attachmate allowed us to go home that
	day, we opted to provide technical support to our users until
	our last day at Novell, which was Friday last week.

	&lt;p&gt;We were clearly bummed out by this development, and had no
	desire to quit, especially with all the great progress in this
	last year.  So, with a heavy dose of motivation from my
	&lt;a href="http://benjaminzander.com/"&gt;music teacher&lt;/a&gt;, we hatched a plan.

	&lt;p&gt;Now, two weeks later, we have a plan in place, which
	includes both angel funding for keeping the team together, as
	well as a couple of engineering contracts that will help us
	stay together as a team while we ship our revenue generating
	products.

&lt;h2&gt;Next Steps&lt;/h2&gt;

	&lt;p&gt;Our plan is to maximize the pleasure that developers derive
	from using Mono and .NET languages on their favorite
	platforms.   
	
	&lt;p&gt;We do have some funding to get started and ship our initial
	products.  But we are looking to raise more capital to address
	the shortcomings that we could not afford to do before, these
	include:

	&lt;ul&gt;
		&lt;li&gt;Tutorials for our various developer stacks

		&lt;li&gt;API documentation for the various Mono-specific APIs
		
		&lt;li&gt;Dedicated Customer Support Software (assistly or
		getsatisfaction)

		&lt;li&gt;Upgrade our Bug system

		&lt;li&gt;Training

		&lt;li&gt;Consulting and Support

		&lt;li&gt;and Marketing: we have a best of breed developer
		platform, and we need the world to know.  Our previous
		marketing budget is what the ancient Olmec culture
		referred to
		as &lt;a href="http://en.wikipedia.org/wiki/0_(number)#History_of_zero"&gt;Zero&lt;/a&gt;.

	&lt;/ul&gt;

	&lt;p&gt;Stay tuned for more, meanwhile, hope to see you in July at the
	&lt;a href="http://monospace.us/"&gt;Monospace conference in Boston!&lt;/a&gt;

</description>
      <link>http://tirania.org/blog/archive/2011/May-16.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/May-16.html</guid>
      <pubDate>Mon, 16 May 2011 20:39:00 -0500</pubDate>
    </item>
    <item>
      <title>Dropbox Lack of Security</title>
      <description>
	&lt;p&gt;I am a fan of Dropbox.   It is a great tool, a great
	product, and clearly they have a passionate team over at
	Dropbox building the product.

	&lt;p&gt;Dropbox recently announced an update to its
	&lt;a href="http://www.businessinsider.com/dropbox-updates-security-terms-of-service-to-say-it-can-decrpyt-files-if-the-government-asks-it-to-2011-4"&gt;security
	terms of service&lt;/a&gt; in which they announced that they would
	provide the government with your decrypted files if requested
	to do so.

	&lt;p&gt;This is not my problem with Dropbox.

	&lt;p&gt;My problem is that for as long as I have tried to figure
	out, Dropbox made
	some &lt;a href="https://www.dropbox.com/help/27"&gt;bold claims&lt;/a&gt;
	about how your files were encrypted and how nobody had access
	to them, with statements like:

	&lt;blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;All transmission of file data occurs over an encrypted channel (SSL).

	&lt;li&gt;All files stored on Dropbox servers are encrypted
	(AES-256)
	
	&lt;li&gt;Dropbox employees aren't able to access user files, and
	when troubleshooting an account they only have access to file
	metadata (filenames, file sizes, etc., not the file contents)
	&lt;/ul&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;But anyone that tried to look further came out empty
	handed.   There really are no more details on what procedures
	Dropbox has in place or how they implement the crypto to
	prevent unauthorized access to your files.   We all had to
	just take them at their word.

	&lt;p&gt;This wishy-washy statement always made me felt uneasy.

	&lt;p&gt;But this announcement that they are able to decrypt the
	files on behalf of the government &lt;b&gt;contradicts their prior
	public statements&lt;/b&gt;.  They claim that Dropbox employees
	aren't able to access user files.

	&lt;p&gt;This announcement means that Dropbox never had any
	mechanism to prevent employees from accessing your files, and
	it means that Dropbox never had the crypto smarts to ensure
	the privacy of your files and never had the smarts to only
	decrypt the files for you.  It turns out, they keep their keys
	on their servers, and anyone with clearance at Dropbox or
	anyone that manages to hack into their servers would be able
	to get access to your files.

	&lt;p&gt;If companies with a very strict set of security policies
	and procedures like
	Google &lt;a href="http://technolog.msnbc.msn.com/_news/2010/09/15/5116575-google-had-at-least-two-creepy-stalker-engineers"&gt;have
	had problems with employees that abused their privileges&lt;/a&gt;,
	one has to wonder what can happen at a startup like Dropbox
	where the security perimeter and the policies are likely going
	to be orders of magnitude laxer.

	&lt;p&gt;Dropbox needs to come clear about what privacy do they
	actually offer in their product.  Not only from the
	government, but from their own employees that could be bribed,
	blackmailed, making some money on the side or are just plain
	horny.
	
	&lt;p&gt;Dropbox needs to recruit a neutral third-party to vouch for
	their security procedures and their security stack that
	surrounds users' files and privacy.   If they are not up to their own
	marketed statements, they need to clearly specify where their
	service falls short and what are the potential security
	breaches that 

	&lt;p&gt;Unless Dropbox can prove that algorithmically they can
	protect your keys and only you can get access to your files,
	they need to revisit their public statements and explicitly
	state that Dropbox storage should be considered semi-public
	and not try
	to &lt;a href="http://www.philzimmermann.com/EN/essays/SnakeOil.html"&gt;sell
	us snake oil&lt;/a&gt;. 
	
</description>
      <link>http://tirania.org/blog/archive/2011/Apr-19.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Apr-19.html</guid>
      <pubDate>Tue, 19 Apr 2011 04:10:00 -0500</pubDate>
    </item>
    <item>
      <title>Save the Date: Monospace Conferece in Boston</title>
      <description>
	&lt;p&gt;The dates for the MonoSpace conference have been announced:
	July 23rd to 25th, 2011.   The event will take place at the
	&lt;a href="http://microsoftcambridge.com/Default.aspx"&gt;Microsoft
	NERD Center&lt;/a&gt;.

	&lt;p&gt;The organizers have just made
	a &lt;a href="http://monospace.us/callforspeakers.html"&gt;call for
	speakers&lt;/a&gt;.   If you have an interesting topic to discuss,
	please submit a talk, we would love to hear from you.
</description>
      <link>http://tirania.org/blog/archive/2011/Apr-18.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Apr-18.html</guid>
      <pubDate>Tue, 19 Apr 2011 03:34:00 -0500</pubDate>
    </item>
    <item>
      <title>Save the Date: Monospace Conferece in Boston</title>
      <description>
	&lt;p&gt;The dates for the MonoSpace conference have been announced:
	July 23rd to 25th, 2011.   The event will take place at the
	&lt;a href="http://microsoftcambridge.com/Default.aspx"&gt;Microsoft
	NERD Center&lt;/a&gt;.

	&lt;p&gt;The organizers have just made
	a &lt;a href="http://monospace.us/callforspeakers.html"&gt;call for
	speakers&lt;/a&gt;.   If you have an interesting topic to discuss,
	please submit a talk, we would love to hear from you.

</description>
      <link>http://tirania.org/blog/archive/2011/Apr-18.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Apr-18.html</guid>
      <pubDate>Mon, 18 Apr 2011 21:49:00 -0500</pubDate>
    </item>
    <item>
      <title>Mono Android and iPhone Updates</title>
      <description>
	&lt;p&gt;Today we are happy to release Mono for Android 1.0 as well
	as &lt;a href="http://tirania.org/monomac/archive/2011/Apr-06.html"&gt;MonoTouch
	4.0&lt;/a&gt;. 

	&lt;p&gt;Both products allow you to use the C# language to write
	applications that run on Android and iOS devices.   

	&lt;p&gt;Both products are based on the
	latest &lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.10"&gt;Mono
	2.10&lt;/a&gt; core.  The Parallel Frameworks can be used to write
	more elegant multi-threaded code across all devices, and
	automatically takes advantage of multiple cores available on the
	iPad2 and Xoom devices.   The C# 4.0 is now the default as
	well as the .NET 4.0 APIs.

&lt;h2&gt;Mono for Android&lt;/h2&gt;

	&lt;p&gt;Our &lt;img src="http://tirania.org/images/mono-android.png" align="right"&gt;Mono
	for Android&lt;/a&gt; debuts today after almost a year worth of
	development.

	&lt;p&gt;Perhaps the most important lesson that we got from
	MonoTouch's success was that we had to provide a completely
	enabled platform.  What we mean by this is that we needed to
	provide a complete set of tools that would assist developers
	from &lt;a href="http://mono-android.net/Tutorials/Hello_World"&gt;creating their first Android application&lt;/a&gt;,
	to &lt;a href="http://mono-android.net/Documentation/Guides/Preparing_Package_for_Android_Marketplace"&gt;distributing
	the application to the market place&lt;/a&gt;,
	to &lt;a href="http://mono-android.net/Documentation/Guides"&gt;guides&lt;/a&gt;,
	tutorials, &lt;a href="http://docs.mono-android.net/"&gt;API
	documentation&lt;/a&gt;
	and &lt;a href="https://github.com/mono/monodroid-samples"&gt;samples&lt;/a&gt;.

	&lt;p&gt;Mono for Android can be used from either Visual Studio
	Professional 2010 for Windows users, or using MonoDevelop on
	the Mac.

	&lt;center&gt;
	&lt;img src="http://mono-android.net/@api/deki/files/3/=newproject.jpg"&gt;
	&lt;/center&gt;

	&lt;p&gt;Mono code runs side-by-side the Dalvik virtual machine in
	the same process:

	&lt;center&gt;
	&lt;img src="http://tirania.org/pictures/android-dalvik-mono.png"&gt;
	&lt;/center&gt;
	
	&lt;p&gt;This is necessary since code running in Dalvik provides the
	user interface elements for Android as well as the hosting and
	activation features for applications on Android. 
	
&lt;h2&gt;APIs&lt;/h2&gt;

	&lt;p&gt;The Mono for Android API is made up of the following
	components: Core .NET APIs, Android.* APIs, OpenGL APIs and
	Java bridge APIs.

	&lt;p&gt;Let us start with the most interesting one: Android.* APIs.
	These are basically a 1:1 mapping to the native Java Android
	APIs but they have been C#-ified, for example, you will find
	C# properties instead of set/get method calls, and you will
	use C# events with complete lambda support (with variables
	being automatically captured) instead  of Java inner classes.  This
	means that while in Java you would write something like:

	&lt;pre class="code-csharp"&gt;
	// Java code
	button.setOnClickListener (new View.OnClickListener() {
             public void onClick(View v) {
		button.setText ("Times clicked: " + Integer.toString(counter));
             }
         });
	&lt;/pre&gt;

	&lt;pre class="code-csharp"&gt;
	// C# code
	button.Click += delegate {
		button.Text = "Times clicked: " + counter;
	};
	&lt;/pre&gt;

	&lt;p&gt;In addition to the UI APIs, there are some 57 Android.*
	namespaces bound that provide access to various Android
	features like telephony, database, device, speech, testing and
	many other services.

	&lt;p&gt;In what is becoming the standard in the Mono world, OpenGL
	is exposed through the
	brilliant &lt;a href="http://www.opentk.com/"&gt;OpenTK&lt;/a&gt; API.
	OpenTK is a strongly
	typed, &lt;a href="http://tirania.org/blog/archive/2008/Nov-13.html"&gt;Framework
	Design Guidelines-abiding&lt;/a&gt; binding of OpenGL.   The benefit
	is that both Visual Studio and MonoDevelop can provide
	intellisense hints as you develop for the possible parameters,
	values and their meaning without having to look up the
	documentation every time.

	&lt;p&gt;Finally, for the sake of interoperability with the native
	platform, we exposed many types from the Java.* namespaces (31
	so far) that you might need if you are interoperating with
	third party libraries that might require an instance of one of
	those Java.* types (for example, a crypto stack might want you
	to provide a Javax.Crypto.Cipher instance.   We got you
	covered. 

&lt;h2&gt;Core Differences&lt;/h2&gt;

	&lt;p&gt;Mono for Android has a few differences from MonoTouch and
	Windows Phone 7 when it comes to the runtime.  Android
	supports JIT compilation while iOS blocks it at the kernel
	level and Windows Phone 7 has limitations. 

	&lt;p&gt;This means that developers using Mono on Android have
	complete access to System.Reflection.Emit.   This in turn
	means that generics-heavy code like F# work on Android as do
	&lt;a href="https://github.com/IronLanguages"&gt;dynamic
	languages&lt;/a&gt; powered by the Dynamic Language Runtime like
	IronPython, IronRuby
	and &lt;a href="https://github.com/fholm/IronJS"&gt;IronJS&lt;/a&gt;.

	&lt;p&gt;And of course, you can also use our
	own &lt;a href="http://www.mono-project.com/CsharpRepl"&gt;C#
	Compiler as a Service&lt;/a&gt;

	&lt;p&gt;Now, although those languages can run on Mono for Android,
	we do not currently have templates for them.   The Ruby and
	Python support suffer due to Android limitations.   The
	Dalvik virtual needs to know in advance which classes you
	customize, and since it is not really possible to know this
	with a dynamic language, the use of Iron* languages is limited
	in that they cant subclass Android classes.   But they can
	still call into Android APIs and subclass as much .NET class
	libraries as they want. 

&lt;h2&gt;Native User Interfaces&lt;/h2&gt;

	&lt;p&gt;MonoTouch and MonoDroid share a common runtime, a common
	set of class libraries, but each provides different user
	interface and device specific APIs.

	&lt;p&gt;For example, this code takes advantage of iOS's
	UINavigationController and animates the transition to a new
	state in response to a user action:

	&lt;pre class="code-csharp"&gt;
void OnSettingsTapped ()
{
	var settings = new SettingsViewController ();
	PushViewController (settings, true);
}
	&lt;/pre&gt;

	&lt;p&gt;This is an equivalent version for Mono for Android:

	&lt;pre class="code-csharp"&gt;
void OnSettingsTapped ()
{
	var intent = new Intent ();
	intent.SetClass (this, typeof (SettingsActivity));
	StartActivity (intent);
}
	&lt;/pre&gt;
	
	&lt;p&gt;We chose to not follow the Java write-once-run-anywhere
	approach for user interfaces and instead expose every single
	bit of native functionality to C# developers.   

	&lt;p&gt;We felt that this was necessary since the iOS and Android
	programming models are so different.    We also wanted to make
	sure that everything that is possible to do with the native
	APIs on each OS continues to be possible while using Mono.

	&lt;p&gt;For instance, if you want to
	use &lt;a href="http://go-mono.com/docs/index.aspx?link=N:MonoTouch.CoreAnimation"&gt;CoreAnimation&lt;/a&gt;
	to drive your user interactions, you should be able to
	leverage every single bit of it, without being forced into a
	common denominator with Android where nothing similar to this
	is available.

	&lt;p&gt;Craig Dunn, one of the authors of
	the &lt;a href="http://www.amazon.com/dp/047063782X/ref=as_li_ss_til?tag=tiraniaorg-20&amp;camp=213381&amp;creative=390973&amp;linkCode=as4&amp;creativeASIN=047063782X&amp;adid=12Z07C36B4TXR7Y4QRM4&amp;"&gt;MonoTouch
	Programming Book&lt;/a&gt;, has written a
	nice &lt;a href="http://conceptdev.blogspot.com/2011/03/mosetta-stone.html"&gt;Mosetta
	Stone&lt;/a&gt; document that compares side-by-side some of the key
	UI differences across platforms.

	&lt;p&gt;He also has written
	the &lt;a href="https://github.com/conceptdev/RestaurantGuide"&gt;Restaurant
	Guide Sample&lt;/a&gt; which sports a unique user interface for
	Android, iOS and Windows Phone 7:

	&lt;center&gt;
	&lt;img src="http://tirania.org/pictures/RestGuide_DROID.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;You can take a look
	at &lt;a href="https://github.com/conceptdev/RestaurantGuide"&gt;this
	cross platform sample&lt;/a&gt; from GitHub.

&lt;a name="split"&gt;
&lt;h2&gt;Split your Presentation from your Engine&lt;/h2&gt;

	&lt;p&gt;Faced with the diversity of platforms to support, both
	mobile and desktop, this is a good time to design, refactor
	and prepare your code for this new era.

	&lt;p&gt;Today developers can use C# to target various UIs:

	&lt;ul&gt;
		&lt;li&gt;MonoTouch for iOS.
		
		&lt;li&gt;Mono for Android for Android.

		&lt;li&gt;Silverlight/Mobile for Windows Phone 7.
		
		&lt;li&gt;MonoMac for MacOS X.

		&lt;li&gt;Gtk# for Linux, Mac and Windows.

		&lt;li&gt;Silverlight 4 for Linux, Mac and Windows

		&lt;li&gt;&lt;a href="http://www.asp.net"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://www.servicestack.net/"&gt;ServiceStack&lt;/a&gt;,
		and &lt;a href="http://manosdemono.org/"&gt;Manos de
		Mono&lt;/a&gt; for HTML presentations.
	&lt;/ul&gt;

	&lt;p&gt;To give your code the most broad reach, you should consider
	splitting your backend code from your presentation code.
	This can be done by putting reusable code in shared libraries
	(for example, REST clients) and shared business logic on its
	own libraries.

	&lt;p&gt;By splitting your presentation code from your business
	logic code for your application, not only you gain the ability
	to create native experiences in each platform, you also get a
	chance to test your business logic/shared libraries more
	easily.

&lt;h2&gt;Linking&lt;/h2&gt;

	&lt;p&gt;In Mono for Android when you build an application for
	distribution, we embed the Mono runtime with your application.
	This is necessary so your application is entirely
	self-contained and does not take any external dependencies.

	&lt;p&gt;Mono for Android uses
	the &lt;a href="http://www.mono-project.com/Linker"&gt;Mono
	Linker&lt;/a&gt; to ensure that only the bits of Mono that you
	actually use end up in your package and that you do not pay a
	high tax for just using a handful of functions.

	&lt;p&gt;For example, if you want to just use a method from
	XElement, you would only pay the price for using this class
	and any of its dependencies.  But you would not end up
	bringing the entire System.XML stack: you only pay for what
	you use.

	&lt;p&gt;During development a different approach is used: the Mono
	runtime is installed on your emulator or test device as a
	shared runtime.   This minimizes both the build and deploy
	times.
	
&lt;h2&gt;Mono for Android References&lt;/h2&gt;

	&lt;p&gt;Start with
	our &lt;a href="http://mono-android.net/Documentation"&gt;documentation
	portal&lt;/a&gt;, there you will find
	our &lt;a href="http://mono-android.net/Installation"&gt;Installation
	Guide&lt;/a&gt;, a tutorial
	for &lt;a href="http://mono-android.net/Tutorials/Hello_World"&gt;your
	first C# Android application&lt;/a&gt;,
	our &lt;a href="http://mono-android.net/Tutorials"&gt;tutorials&lt;/a&gt;
	(many ported from their Java equivalents) and
	our &lt;a href="http://mono-android.net/Documentation/Guides"&gt;How-To
	Guides&lt;/a&gt; and a large collection
	of &lt;a href="https://github.com/mono/monodroid-samples"&gt;sample programs&lt;/a&gt;.

	&lt;p&gt;You can also explore the documentation for the &lt;a href="http://docs.mono-android.net/"&gt;Mono for
	Android API&lt;/a&gt; in a convenient to remember url: docs.mono-android.net.
	
	&lt;p&gt;The first book
	of &lt;a href="http://www.amazon.com/gp/product/1118026438/ref=as_li_ss_tl?ie=UTF8&amp;tag=tiraniaorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1118026438"&gt;Mono
	for Android&lt;/a&gt; will be available on July 12th.   In the
	meantime, we have created many tutorials and guides that will
	help you go 

	&lt;p&gt;I also strongly suggest those interested in parallel
	programming to check out
	the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=86b3d32b-ad26-4bb8-a3ae-c1637026c3ee&amp;displaylang=en"&gt;Patterns
	for Parallel Programming: Understanding and Applying Parallel
	Patterns with the .NET Framework 4&lt;/a&gt;.   This is a free PDF,
	and is a must-read for anyone building multi-core applications.

&lt;h2&gt;Thank You!&lt;/h2&gt;

	&lt;p&gt;Mono for Android would not have been possible without the
	hard work of the MonoDroid team at Novell.   The team worked
	around the clock for almost a year creating this amazing
	product.

	&lt;p&gt;The team was backed up by the Mono core team that helped us
	get C# 4.0 out, WCF, the linker, the LLVM support, improve the VM,
	extend the MonoDevelop IDE, scale Mono, improve our
	threadpool, support OpenTK, implement the Parallel
	Frameworks, ship dozens of betas for MonoDevelop, Mono and
	Mono for Android.
</description>
      <link>http://tirania.org/blog/archive/2011/Apr-06.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Apr-06.html</guid>
      <pubDate>Wed, 06 Apr 2011 18:40:00 -0500</pubDate>
    </item>
    <item>
      <title>Mono and Google Summer of Code</title>
      <description>
	&lt;p&gt;We have been lucky enough that Google accepted Mono as a
	mentoring organization for
	the &lt;a href="http://www.google-melange.com/gsoc/org/google/gsoc2011/mono"&gt;Google
	Summer of Code 2011&lt;/a&gt;

	&lt;p&gt;This is a great opportunity for students to get involved with
	open source, contribute, learn and get paid for their work
	during the summer.

	&lt;p&gt;We have a lot of ideas to choose from in our student
	projects page, ranging from virtual machine hacking, MacOS X
	improvements, MonoDevelop extensions, language bindings and
	even improving the Manos web application framework.

	&lt;p&gt;Do not let our limited imagination stop you.  Although
	there are plenty of ideas to choose from, students should feel
	free to come up with their own ideas.  In the past years
	projects based on students' ideas have been very successful
	and we want to encourage more of those.

	&lt;p&gt;&lt;b&gt;Proposal submission is open until Friday April 8&lt;/b&gt;, so
	now is the time to join our wonderful community, discuss your
	project ideas and start working on those proposals.

	&lt;p&gt;The Mono Summer of Code IRC channel is #monosoc on irc.gnome.org
</description>
      <link>http://tirania.org/blog/archive/2011/Mar-30.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Mar-30.html</guid>
      <pubDate>Wed, 30 Mar 2011 20:23:00 -0500</pubDate>
    </item>
    <item>
      <title>Monospace Conference: Boston, July 2011</title>
      <description>
	&lt;p&gt;The Mono community is organizing
	the &lt;a href="http://monospace.us"&gt;Monospace conference&lt;/a&gt; to
	be held in July in Boston.   This event is being organized by
	Dale Ragan, Louis Salin and Paul Bowden.

	&lt;p&gt;The organizers have just made
	a &lt;a href="http://monospace.us/callforspeakers.html"&gt;call for
	speakers&lt;/a&gt;.

	&lt;p&gt;If you have an interesting technology that you would like
	to talk about during this 3-day event, you should submit a
	talk.

	&lt;p&gt;Monospace is on a very aggressive schedule.   The good news
	is that the entire Mono team will be participating in the
	event.

	&lt;p&gt;Once the dates are set in stone, we will open
	registration.   Currently we are thinking of hosting an event
	for some 200 attendees.
</description>
      <link>http://tirania.org/blog/archive/2011/Mar-29-1.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Mar-29-1.html</guid>
      <pubDate>Tue, 29 Mar 2011 20:05:00 -0500</pubDate>
    </item>
    <item>
      <title>Save your Cleverness</title>
      <description>
	&lt;p&gt;Today, while discussing
	how &lt;a href="http://twitter.com/hipsterhacker"&gt;@hipsterhacker&lt;/a&gt;
	reminds us some of our friends,
	&lt;a href="http://nat.org"&gt;Nat&lt;/a&gt; pointed me
	to &lt;a href="http://www.readwriteweb.com/hack/2011/02/pinboard-creator-maciej-ceglow.php"&gt;this
	interview&lt;/a&gt; where Maciej has this beautiful nugget of
	wisdom:

	&lt;blockquote&gt;
	&lt;b&gt;Q: The Pinboard about page says: "There is absolutely
	nothing interesting about the Pinboard architecture or
	implementation; I consider that a feature!"&lt;/b&gt;


	&lt;p&gt;&lt;b&gt;Can you explain why you think that's a feature?&lt;/b&gt;

	&lt;p&gt;I believe that relying on very basic and well-understood
	technologies at the architectural level forces you to save all
	your cleverness and new ideas for the actual app, where it can
	make a difference to users.

	&lt;p&gt;I think many developers (myself included) are easily
	seduced by new technology and are willing to burn a lot of
	time rigging it together just for the joy of tinkering. So
	nowadays we see a lot of fairly uninteresting web apps with
	very technically sweet implementations.
	
	&lt;/blockquote&gt;

	&lt;p&gt;Too many people over-engineer their software to the point
	that you can no longer see what the software was supposed to
	do.   Once people find a religion in one of the modern
	development fads, they tend to jump with both feet, and we end
	up with uninspiring user-facing software, but internally
	amazing.

	&lt;p&gt;This disease is widespread.  From everyone trying to turn
	their program into a platform (current fad: dependency
	injection), to trying to force programming models, to
	compulsively writing unit tests while ignoring the basic
	principles that unit tests can not be used to prove the
	absence of bugs (&lt;b&gt;update:&lt;/b&gt; this is
	my &lt;a href="http://amzn.to/why-programs-fail "&gt;favorite
	book&lt;/a&gt; on the subject; Namedrop
	alert: &lt;a href="http://se.ethz.ch/~meyer/"&gt;Bertrand Meyer&lt;/a&gt;
	introduced me to it).

	&lt;p&gt;There is only one reason to throw away your life writing
	useless code and that is to train yourself.   If you are
	writing this in a Karate Kid wax-on, wax-off kind of way, go
	ahead.

	&lt;p&gt;But if you are building a product, you end up spending all
	of your time designing your architecture, and very little time
	in delivering a great experience.

	&lt;p&gt;Premature architecture design is like premature
	optimization: you will be wrong about the things that actually
	mattered.

	&lt;p&gt;Take the shortcut.   Build the product.   And if later, it
	turns out you made a design mistake, refactor the code.   But
	at least you will have a product that your users love. 
</description>
      <link>http://tirania.org/blog/archive/2011/Mar-29.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Mar-29.html</guid>
      <pubDate>Tue, 29 Mar 2011 16:31:00 -0500</pubDate>
    </item>
    <item>
      <title>Hardware Accelerated Video Playback in Moonlight</title>
      <description>
	&lt;p&gt;David Reveman has just completed a series of optimizations
	in the Moonlight engine that allows Moonlight to take
	advantage of your GPU for the data intensive video rendering
	operations.   This is in addition to the standard GPU hardware
	acceleration that
	we &lt;a href="http://tirania.org/blog/archive/2011/Feb-16.html"&gt;debuted
	a few weeks ago&lt;/a&gt;. 

	&lt;p&gt;This is what the video rendering loop looks like in
	Moonlight:

	&lt;center&gt;
	&lt;img src="http://primates.ximian.com/~miguel/pictures/mediaelement-pipeline.PNG"&gt;
	&lt;/center&gt;

	&lt;p&gt;Every one of those steps is an expensive process as it has
	to crunch to a lot of data.  For example, a 720p video which
	has a frame size of 1280x720, this turns out to be 921,600
	pixels.  This frame while stored in RGB format at 8 bits per
	channel takes 2,764,800 bytes of memory.  If you are decoding
	video at 30 frames per second, you need to at least move from
	the encoded input to the video 82 megabytes per second.
	Things are worse because the data is transformed on every step
	in that pipeline.  This is what each step does:
	
	&lt;p&gt;&lt;b&gt;The video decoding&lt;/b&gt; is the step that decompresses
	your video frames.  This is done one frame at a time, the
	input might be small, but the output will be the size of the
	original video.  

	&lt;p&gt;The decoding process generates images
	in &lt;a href="http://en.wikipedia.org/wiki/YUV"&gt;YUV format&lt;/a&gt;.
	This format is used to store images and videos but and with
	previous versions of Moonlight, we had to &lt;b&gt;convert this YUV
	data&lt;/b&gt; into an in-memory bitmap encoded
	in &lt;a href="http://en.wikipedia.org/wiki/RGB_color_model"&gt;RGB
	format&lt;/a&gt;.

	&lt;p&gt;The final step is to transfer this image to the graphics
	card.   This typically involves copying the data from the
	system memory to the graphics card, and in Unix this goes
	through the user process to the X server process, which
	eventually moves the data to the graphics card.

&lt;h2&gt;New Hardware Accelerated Framework&lt;/h2&gt;

	&lt;p&gt;The new hardware acceleration framework now skips plenty of
	these steps and lets the GPU on the system take over, this is
	what the new pipeline looks like:

	&lt;center&gt;
	&lt;img src="http://primates.ximian.com/~miguel/pictures/newmediaelement-pipeline.PNG"&gt;
	&lt;/center&gt;

	&lt;p&gt;The uncompressed image in YUV format is sent directly to
	the GPU.   Since OpenGL does not really know about YUV images,
	we use a custom pixel shader that runs on the graphics card to
	do the conversion for us and we also let the GPU take care of
	scaling the image.

	&lt;p&gt;The resulting buffer is composited with the rest of the
	scene, using the
	new &lt;a href="http://tirania.org/blog/archive/2011/Feb-16.html"&gt;rendering
	framework&lt;/a&gt; introduced in Moonlight 4.
	
	&lt;p&gt;Although native video playback solutions have been doing
	similar things for a while on Linux, we had to integrate this
	into the larger retained graphics system that is Moonlight.
	We might be late to the party, but it is now a hardware
	accelerated and smooth party.

	&lt;p&gt;And what does this looks like?  It looks like heaven.

	&lt;p&gt;We were watching 1080p videos, running at full screen in
	David's office and it is absolutely perfect.

&lt;h2&gt;Getting the Code&lt;/h2&gt;

	&lt;p&gt;The code
	is &lt;a href="https://github.com/mono/moon"&gt;available now on
	Github&lt;/a&gt; and will be available in a few hours as a
	&lt;a href="http://go-mono.com/moonlight/nightlies.aspx"&gt;pre-packaged
	binary&lt;/a&gt; from our nightly builds.

</description>
      <link>http://tirania.org/blog/archive/2011/Mar-23-1.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Mar-23-1.html</guid>
      <pubDate>Thu, 24 Mar 2011 03:53:00 -0500</pubDate>
    </item>
    <item>
      <title>Kid's Games on the iPad</title>
      <description>
	&lt;p&gt;My eight month old daugther loves her iPad.

	&lt;p&gt;We have gotten a bunch of baby games, kids games and
	visualizations for her.

	&lt;p&gt;But many of these apps have one fundamental issue: the
	author adds one or more buttons with useless stuff like
	"Provide Feedback", "Info", "Visit Web Site", "Check my Other
	Apps" and other assorted buttons on the screen:

	&lt;center&gt;
	&lt;img src="http://primates.ximian.com/~miguel/pictures/game-ipad.png"&gt;
	&lt;/center&gt;

	&lt;p&gt;Now, perhaps the apps did great when used by a professional
	QA team in Daytona that reported back "yes, every animal in
	the app makes the proper sound, and the cows scroll as they
	are intended to".

	&lt;p&gt;In this case, the "Main" button, will bring up a convenient
	page with options to send feedback to the author, to visit his
	web site and check out his other apps.

	&lt;p&gt;This means that my daugther can not really enjoy her games
	without supervision, since every few seconds, she will end up
	visiting a web site in Safari.

	&lt;p&gt;Joseph has a similar problem, he has equipped both of his
	kids with iPads, and they routinely report "the iPad broke",
	every time one of their games ends up in some lame web site
	for the developer.

	&lt;p&gt;Developers for kid games should use slider switches if
	they really want to impose their hooks into their customers. 

&lt;h3&gt;Some Games&lt;/h3&gt;

	&lt;p&gt;On twitter Paul Hudson suggested a couple of games for
	1-year olds: Uzu (my daughter also loves this one), BeBot and
	SoundTouch.

	&lt;p&gt;I have found that she likes GarageBand a lot (we just have
	to be around to make sure we can reset the screen when she
	changes instruments).
</description>
      <link>http://tirania.org/blog/archive/2011/Mar-23.html</link>
      <author>miguel@gnome.org (Miguel de Icaza)</author>
      <guid isPermaLink="true">http://tirania.org/blog/archive/2011/Mar-23.html</guid>
      <pubDate>Thu, 24 Mar 2011 00:04:00 -0500</pubDate>
    </item>
  </channel>
</rss>
