Like
I discussed
last year, we will be moving to a more nimble release
process with Mono 3.0. We are trying to reduce our inventory
of pending work and get new features to everyone faster.
This means that our "master" branch will remain stable from
now on, and that large projects will instead be developed in
branches that are regularly landed into our master branch.

What is new

Check
our release
notes for the full details of this release. But here
are some tasty bits:

C# Async compiler

Unified C# compiler for all profiles

4.5 Async API Profile

Integrated new Microsoft's Open Sourced stacks:

ASP.NET MVC 4

ASP.NET WebPages

Entity Framework

Razor

System.Json (replaces our own)

New High performance Garbage Collector (SGen -
with many performance and scalability improvements)

Software Reads

Bertrand Meyer (The creator of Eiffel, father of good taste
in engineering practices)
writes Fundamental
Duality of Software Engineering: on the specifications and
tests. This is one of those essays where every idea is
beautifully presented. A must read.

Interesting Software

SparkleShare, the
open source file syncing service running on top of Git
released their feature-complete product. They are preparing
for their 1.0 release. SparkleShare runs on Linux, Mac and
Windows. Check out
their Release
Notes.

Experts warn that Canonical might likely distribute a
patched version that modifies your documents and spreadhseets
to include ads and Amazon referal links.

Touch Draw
comes to MacOS, great vector drawing application for OSX.
Good companion to Pixelmator and great for maintaining iOS
artwork. It has great support for structured graphics and
for importing/exporting Visio files.

News

In considering which candidate to endorse, The Salt Lake
Tribune editorial board had hoped that Romney would exhibit
the same talents for organization, pragmatic problem solving
and inspired leadership that he displayed here more than a
decade ago. Instead, we have watched him morph into a friend
of the far right, then tack toward the center with
breathtaking aplomb. Through a pair of presidential debates,
Romney’s domestic agenda remains bereft of detail and worthy
of mistrust.

Therefore, our endorsement must go to the incumbent, a
competent leader who, against tough odds, has guided the
country through catastrophe and set a course that, while
rocky, is pointing toward a brighter day. The president has
earned a second term. Romney, in whatever guise, does not
deserve a first.

Advocates for the red-state approach to government invoke
lofty principles: By resisting federal programs and defying
federal laws, they say, they are standing up for
liberty. These were the same arguments that the original
red-staters made in the 1800s, before the Civil War, and in
the 1900s, before the Civil Rights movement. Now, as then, the
liberty the red states seek is the liberty to let a whole
class of citizens suffer. That’s not something the rest of us
should tolerate. This country has room for different
approaches to policy. It doesn’t have room for different
standards of human decency.

There was an interesting juxtaposition. Rupert Murdoch giving
a mercifully short speech saying the biggest mistake someone
in the news business could make is thinking the reader is
stupid. He could easily have been introducing the next
speaker, Bill Keller of the NY Times, who clearly thinks
almost everyone who doesn't work at the NY Times is stupid.

What do you know, turns out that Bill Moyers is not funded
by the government nor does he get tax money, like many
Republicans like people to believe.
The correction
is here.

Here we are today, three months later, and within the last
month alone, these two parents lost two children, and the two
remaining ones are sick as well. Sunday is already in hospital
with malaria, in serious condition, and Mahm is sick at
home. “I’ve only two children left,” Michael told me today
over the phone.
The family doesn’t have money to properly treat their
remaining children. The hospitals are at full capacity and
more people leave them in shrouds than on their own two
feet. I ask you, beg of you to help me scream the story of
these children and their fate, dictated by the heartless,
immoral Israeli government.

The gnome-config script was a precursor
to pkg-config, they are tools used that you can run
and use to extract information about the flags needed to
compile some code, link some code, or check for a version.
gnome-config itself was a pluggable version of
Tcl's tclConfig.sh script.

The idea is simple: pkg-config is a tiny little
tool that uses a system database of packages to provide
version checking and build information to developers. Said
database is merely a well-known directory in the system
containing files with the extension ".pc", one per file.

These scripts are designed to be used in shell scripts to
probe if a particular software package has been installed, for
example, the following shell script probes whether Mono is
installed in the system:

Probing: You use the tool to pobe for some condition
about a package and taking an action based on this. For this,
you use the pkg-config exit code in your scripts to determine
whether the condition was met. This is what both the sample
automake and the first script show.

Compile Information: You invoke the tool which
outputs to standard output the results. To store the result
or pass the values, you use the shell backtick (`). That is all
there is to it (example: version=`pkg-config --version`).

The tool is so immensely simple that anyone can learn every
command that matters in less than 5 minutes. The whole thing
is beautiful because of its simplicity.

The Siege by the Forces of Bloat

Perhaps it was a cultural phenomenon, perhaps someone that
had nothing better to do, perhaps someone that was just trying
to be thorough introduced one of the most poisoning memes into
the pool of ideas around pkg-config.

Whoever did this, thought that the "if" statement in shell
was a complex command to master or that someone might not be
able to find the backtick on their keyboards.

And they hit us, and they hit us hard.

They introduced pkg.m4, a macro intended to be
used with autoconf, that would allow you to replace the
handful of command line flags to pkg-config with one of their
macros (PKG_CHECK_MODULES, PKG_CHECK_EXISTS). To do this,
they wrote a 200 line script, which replaces one line of shell
code with almost a hundred. Here is a handy comparison of
what these offer:

The above shows the full benefit of using a macro, MONO is
a prefix that will have LIBS and CFLAGS extracted. So the
shell script looses. The reality is that the macros only give
you access to a subset of the functionality of pkg-config (no
support for splitting -L and -l arguments, querying
provider-specific variable names or performing macro
expansion).

Most projects, adopted the macros because they copy/pasted
the recipe from somewhere else, and thought this was the right
way of doing things.

The hidden price is that saving that few lines of code
actually inflicts a world of pain on your users. You will
probably see this
in your
forums in the form of:

Subject: Compilation error
I am trying to build your software, but when I run autogen.sh, I get
the following error:
checking whether make sets $(MAKE)... yes
checking for pkg-config... /usr/bin/pkg-config
./configure: line 1758: syntax error near unexpected token FOO,'
./configure: line 1758:PKG_CHECK_MODULES(FOO, foo >= 2.9)'

And then you will engage in a discussion that in the best
case scenario helps the user correctly configure his
ACLOCAL_FLAGS, create his own "setup" script that will
properly configure his system, and your new users will learn
the difference between running a shell script and "sourcing" a
shell script to properly setup his development system.

In the worst case scenario, the discussion will devolve
into how stupid your user is for not knowing how to use a
computer and how he should be shot in the head and taken out
to the desert for his corpse to be eaten by vultures; because,
god dammit, they should have googled that on their own, and
they should have never in the first place have installed two
separate automake installations in two prefixes, without
properly updating their ACLOCAL_FLAGS or figured out on their
own that their paths were wrong in the first place.
Seriously, what moron in this day and age is not familiar with
the limitations of aclocal and the best practices to
use system-wide m4 macros?

Hours are spent on these discussions every year. Potential
contributors to your project are driven away, countless hours
that could have gone into fixing bugs and producing code are
wasted, you users are frustrated. And you saved 4 lines of
code.

The pkg.m4 is a poison that is holding us back.

We need to end this reign of terror.

Send pull requests to eliminate that turd, and ridicule
anyone that suggests that there are good reasons to use it.
In the war for good taste, it is ok to vilify and scourge
anyone that defends pkg.m4.

Mitt Romney does not need to have an economic plan. He
does not need to have a plan to cut the deficit or to cut
services.

It is now well understood that to get the US out of the
recession, the
government has to inject money into the economy. To
inject money into the economy, the US needs to borrow some
money and spend it. Borrowing is also at an all-time low, so
the price to pay is very low.

The brilliance of the Republican strategy is that they have
convinced the world that the real problem facing the US is the
debt. Four years of
non-stop propaganda
on newspapers and TV shows have turned everyone into a "fiscal
conservative". The propaganda efforts have succeeded into
convincing the world that US economic policy should be subject
to the same laws of balancing a household budget (I wont link
to this idiocy).

The campaign has been a brilliant and has forced the
Democrats to adopt policies of austerity, instead of policies
of growth. Instead of spending left and right to create
value, we are cutting. And yet, nobody has stopped the
propaganda and pointed out that growth often comes after
spending money. Startups start in the red and are funded
for several years before they become profitable; Companies
go public and use the IPO to raise capital to grow, and for
many years they lose money until their investments pay off and
allows them to turn the tide.

So this mood has forced Obama to talk about cuts. He
needs to be detailed about his cuts, he needs to be a fiscal
conservative.

But Economists and Republicans know what the real fix is.
They know they have to spend money.

If Romney is elected to office, he will do just that. He
will borrow and spend money, because that is the only way of
getting out of the recession. That is why his plan does not
need to have any substance, and why he can ignore the calls to
get more details, because he has no intention to follow up
with them.

Obama made a critical mistake in his presidency. He
decided to compromise with Republicans, he was begging to be
loved by Republicans and in the process betrayed his own base
and played right into the Republican's plans.

Today Microsoft
announced TypeScript
a typed superset of Javascript. This means that existing
Javascript code can be gradually modified to add typing
information to improve the development experience: both by
providing better errors at compile time and by providing
code-completion during development.

As a language fan, I like the effort, just like I pretty
much like most new language efforts aimed at improving
developer productivity: from C#, to Rust, to Go, to Dart and
to CoffeeScript.

The Pros

Strong types assist developers catch errors before
the deploy the code, this is a very welcome addition
to the developer toolchest.
Script#, Google
GWT
and C#
on the web all try to solve the same problem in
different ways.

Extensive type inference, so you get to keep a lot
of the dynamism of Javascript, while benefiting from
type checking.

Classes, interfaces, visibility are first class
citizens. It formalizes them for those of us that
like this model instead of the roll-your-own prototype
system.

TypeScript is distributed as a Node.JS package,
and it can be trivially installed on Linux and MacOS.

The adoption can be done entirely server-side, or
at compile time, and requires no changes to existing
browsers or runtimes to run the resulting code.

Out of Scope

Type information is erased when it is compiled. Just like
Java erases generic information when it compiles, which means
that the underling Javascript engine is unable to optimize the
resulting code based on the strong type information.

Dart on the other hand is more ambitious as it uses the
type information to optimize the quality of the generated
code. This means that a function that adds two numbers
(function add (a,b) { return a+b;}) can generate native code
to add two numbers, basically, it can generate the following C
code:

The Bad

The majority of the Web is powered by Unix.

Developers use MacOS and Linux workstations to write the
bulk of the code, and deploy to Linux servers.

But TypeScript only delivers half of the value in using a
strongly typed language to Unix developers: strong typing.
Intellisense, code completion and refactoring are tools that
are only available to Visual Studio Professional users on
Windows.

There is no Eclipse, MonoDevelop or Emacs support for any
of the language features.

So Microsoft will need to convince Unix developers to use
this language merely based on the benefits of strong typing, a
much harder task than luring them with both language features
and tooling.

There is
some basic
support for editing TypeScript from Emacs, which is useful
to try the language, but without Intellisense, it is obnoxious
to use.