This article provides a tour through some Mono programs, along with details about how you can start experimenting with them yourself. Not all of the programs featured here are finished products, but they’re all exciting and show off interesting aspects of Mono. Even more Mono applications can be found at GnomeFiles.org: We should add to the list the excellent PolarViewer and SportTracker (they go together), and of course, GCursor#, CSBoard, Galaxium Messenger, SkyNET and GLyrics among others like Bless, fewnn, GFax, WoodPusher, CDCollect and Kurush.
What’s so special about these apps that they can’t be implemented in $YOUR_FAVORITE_ENVIRONMENT? What do they show about the strengths of Mono? I’d like to see that instead of a typical “Six apps made with Java” type article written by the author of a book about it.
If you read the O’Reilly article they do make little comments on why they chose to do development in Mono.
Ex:
Having written quite a lot of code in Java before coming to GNOME, the most obvious benefit of Mono compared to Java is signals. Another great thing with Mono is the ease of calling C code and integrate with already written code.
Because decoding audio itself isn’t a simple process, there aren’t any all-Mono ways of doing this yet. Instead, Muine uses the “p-invoke” facility of Mono to hook into the C-based multimedia library libxine. Calling C code from Mono doesn’t require any supplemental C coding, unlike most other languages such as Perl or Python.
I am a regular user of the original seven applications that
Edd posted about as well as GFax, but I was unaware of many
of the ones that were hosted at GnomeFiles.
It is very nice to see all those applications being written.
Miguel
I guess that this shows a remarkable level of maturity for a clone of what is still a very young and somewhat immature programming environment designed by a company renown for non-innovation. I do like the point about being to do direct calling to binary objects without the need of a wrapper like most other RAD/scripting languages.
Yes Eugena is whoring gnomefiles.org. So what? /. is constantly running OSDN editorials as front page news too.
Not sure how MyBudget is figured as a mono app.
It would also be nice if mono would remove their false Java bashing comments from their Web site.
Among the claims, Java being too slow on Linux whereas .NET results in the performance of native code. Yeah right. Most independant benchmarks and testing I and others have done show that Java outperforms mono for almost everything.
Another claim is that Java does not deliver Linux look and feel.
Guess the mono developers have never heard of the Swing GTK theme, or GTK Java, or wxJava, or SWT.
So basically, these claims on the mono site are just Java bashing. And they really are just downright lies about Java.
Ok, I’m not a programmer… but, can anyone explain me why use MONO instead of Pyhton?
The few experiences I had with python show me a very pleasing, complete and clean language.
If you want native speed, cross platform and native look and feel on both GTK and Windows with Java check out
http://swingwt.sourceforge.net/
“The few experiences I had with python show me a very pleasing, complete and clean language.”
Python is not suitable for large projects. It is also not suitable for projects where your code has to interact with other code, possibly from unknown and untrusted sources. Java can do this safely because of its security model. Although Python does offer you protection from accicently shooting yourself in the foot, it offers virtually no protection against someone else shooting you in the foot intentionally.
But the real question is why use mono instead of Java? Why would you want to help a Microsoft standard gain even more control over the Internet?
And lets not forget that .NET’s open standard is really a red herring. Only the core is .NET. But most of the classes that provide the funtionality (ASP.NET, etc) are proprietary Microsoft technologies. Sure OSS projects can clone them. But that probably puts them on shakey legal ground.
Check Tomboy at http://www.beatniksoftware.com/tomboy/
It is a nice note taking application, now being integrated with Beagle.
Oh really – can we just kill this meme because it’s wrong. There are plenty of seriously large python projects.
http://mail.python.org/pipermail/python-list/2004-March/213210.html
You might also have occasion to learn about Pyrex and
… well, I’m in the Trotskyite wing on this question.
It’s not just that Python can work for large projects.
I sincerely regard it as an even *better* comparative
choice on large projects; C++ and Java, the usual com-
petition, show all sorts of blemishes when one scales
the size of the project. Python remains usable, even
at the high end.
Maybe we need to understand the differences between what is a ‘systems programming language’ where features such as static typing and explicit interfaces might be important, as opposed to RAD languages. As far as I can see, C# was designed as a systems programming language to implement components that were to be used in other more ‘everyday’ languages like Visual Basic (or Iron Python more recently) which feature dynamic typing.
I’ve used the dynamic language Objective-C on projects with 500k LOC, and I can confirm there was no problem with scaling at all.
You could’ve at least glanced at the article itself before posting here, Tomboy is the first app mentioned
“Oh really – can we just kill this meme because it’s wrong. There are plenty of seriously large python projects.”
I figured I would get a response like this. Sure you CAN develop large systems in Python. But the result is often extremely slow. Example, I’ve played with a complex PIM written in Python that takes over a minute just to boot up.
But also, even if I give you this, it doesn’t negate the point that Python is not suitable for networked applications that involve interacting with classes that are untrusted, etc.
Utter rubbish.
I could sit here and make random comments about how unsuitable Java and .NET are for most applications. I would be right in some regards, but I’d be missing the point just as you are.
My day job is developing a very large scale application in Python. We integrate all manner of hardware and data sources and I’m happy to say that most of the time we do a very good job. We sell this software in one of the most heavily regulated and demanding industries in the world. Sometimes we have to write extensions in C, but it’s rare.
All of us are good programmers, we’re broadly experienced and we know that we have achieved a lot more, in a lot less time, with our 80,000 lines of python than we could have hoped to have achieved with Java or C# or many other languages. There probably is a solution (like Jython, or Boo) that would allow a similar development schedule in those environments, but some things that are the strength of Java or .NET in a browser based environment are deep weaknesses for more common developments.
The ability to develop large scale applications has a lot to do with the methodologies and attitudes of the people working on it. Sure certain aspects of a language and it’s environment can be very helpful in managing projects, but if you’re relying 100% on aspects of lanuage to solve these problems for you then you are a very bad programmer indeed.
A good software engineer can appreciate the differing benefits of the tools available to him/her and do the best job with the resources available.
Sure Java runs in it’s own environment so you can semi-trust it when pulled from an anonymous source on the web. However that use case is not the be all and end all of modern development, nor is it as trustworthy as you seem to believe.
That said there are many applications I wouldn’t write in Python. There are a few things I would choose to write in Java. The key thing is I wouldn’t write off anything out of ignorance.
Except of course Perl, perl suck 😉 **Joking.. really**
I figured I would get a response like this. Sure you CAN develop large systems in Python. But the result is often extremely slow. Example, I’ve played with a complex PIM written in Python that takes over a minute just to boot up.
Sure you CAN develop large systems in Java. But the result is often extremely slow. Example, I’ve played with a complex IDE written in Java that takes over a minute just to boot up.
I have also played with mono apps that totally crap on my NTPL enabled OS.
I’m looking for advice and comments on which Linux distribution is most appropriate for venturing into Mono development.
I define “Mono development” broadly, to include mucking about with Beagle, the inotify kernels, etc.
I’d prefer not building a Mono environment from source. I’ve tried it and it hurts. I want to use Gnome 2.8.
SUSE appears to be the platform that is best supported, with precompiled Mono packages, but dbus, hal and Gnome 2.8 are not “officially” available. (James Cogley’s ULB 2.8 is very nice, but does not yet include dbus and hal.). The same applies to Fedora. Debs are available for Debian Unstable/Ubuntu, but they don’t appear to be as complete or as current as the SUSE/Fedora rpms provided at the Mono site.
So, what’s the best choice? Use SUSE, add dbus and hal myself, and then Cogley’s ULB? Do the equivalent with FC2?_
If .Net is important and Linux is important, then Mono is important. If Mono is important, it is interesting to hear about some of its first applications.
If this site lacks original content, it might in part be due to the carping, opinionated and mean-spirited nature of some of the posts here.
f-spot will rock your socks!
I don’t see why people are complaining about gnomefiles.org. Personally I find it very useful, for checking out new GTK/GNOME apps and keeping my apps updated. GNOME/GTK lacked such a repository, whereas KDE had kde-apps.org which has thousands of KDE/QT apps. I am personally a KDE user and gnomefiles.org has helped me find alternatives to some apps that I currently use.
I agree that the change from GNOME 1.4 to 2.x was a major one and I also initially disliked it, I believe that the recent GNOME releases have been really good although there is a lot of room for improvement.
hi guys,
I don’t know if I’m the only one, but I keep getting error messages when I try to click on the links on http://www.GnomeFiles.org. looks like a scripting error in the page:
Parse error: parse error in /home/gnomefiles/web/app.php on line 187
actually use native widgets or just swing that is designed to look native?
I know mono uses bindings to Native widgets and i’m just ignorant about how java does it.
Further, it should be pointed out that all the programs that you see, as near as I can tell, use nothing outside of the EMCA stack of mono. Which is good news and how any gnome app will be, which is all I care about.
actually use native widgets or just swing that is designed to look native?
You can do both, same as with mono.
What I’ve been npticing is that c# is getting owned/absorbed by the Open Source community.
I haven’t seen a lot of c# apps coming out for windows. No big windows companies I’ve seen have come out and said, “We’re using c# for out projects”
But with mono, I’ve seen a lot of hype for open source apps. Lots of little stuff is poping up in c# for linux, and biug companies linux companies like Novel are saying, “we are going to use this language”.
This is interesting since this is supposed to be microsoft’s language
if I had to hazard a guess as to why this would be, it would be something I saw pointed out in an article a while back about Microsoft loosing the API wars (and the web taking over).
The point is, for Windows and c#, you are supposed to use windows.forms I beleieve. But as was pointed out, while c# hasn’t even achived wide deployment on windows boxes and is hardly an officail part of windows until Longhorn, windows.forms has been depricated already because of avalon that will ship with Longhorn. So no one is writing apps in c# because they will already be depricated.
With mono and Linux however, gtk# was made. Bindings for a relevant GUI API that will be around for the forseeable future. So it makes a lot of sense to develop apps in c# for linux if you find merits in c# because the gui bindings are new and being developed, not already obsolete.
And so we appear to have a weird situation where there appears to be a faster uptake on micosoft’s c# on non microsoft platforms
I’d say Ubuntu.
Just add:
deb http://www.getsweaaa.com/~tseng/ubuntu/debs ./
to your /etc/apt/sources.list and your ready to go.
> actually use native widgets or just swing that is designed to look native?
You can do both, same as with mono.
Correction – Java can use it’s own Swing toolkit, or it can use third-party toolkits like SWT that wrap native toolkits, or it can use third-party bindings for native toolkits.
Mono has no internal toolkit corresponding to Swing, though the Gtk# bindings are pretty much a standard since they’re developed by the Mono team. There are also Qt# bindings, and on Windows, the standard .NET SWF.
We do not intend to bash Java, in fact Mono will run
Java applications (Mono is able to run .NET and Java code
at the same time, side-by-side).
The comments are a reflection of the start of the project
(you can compare these on the Wayback machine at
http://www.archive.org), as you well point out, some of those issues
have been fixed, some others have not.
We will review that web page.
Miguel.
I should start by saying that Mono is language neutral, we
are an equal opportunity language runtime 😉
I previously said that we could run .NET bytecode and
Java bytecode side by side. That is only a fraction of the
story. Mono through IronPython can also run most Python
code (except those modules that require a C extension).
IronPython is fairly mature, and passes the aggresive test
suite that Guido put together for the OSCON showdown this
year as well as the Python regression test suite.
So use the language that most pleases you.
That being said, there are comments along the lines of
`Python is not good for large projects’. I think that the
reality is much more complex that a short soundbyte, and
will largely depend on the kind of programs that you do,
the kind of programmers you have, the kind of timeline
that you are working from, the tools that you have at your
disposal and much more.
I think that Java and C# are particularly well suited for
doing component-based programming: they have a strong
focus on building component software, and by this I mean
that the language embodies things like accessibility to
the fields, methods, internals, strong on encapsulation and
mechanisms to extend these things.
The compiler is used as a tool to catch errors by using
static strong typing. Both Java and C# are moving to
even more strong typing with the introduction of Generics,
and this is a tool that can be used to catch more errors
in a project.
Some folks (and in particular large developer groups)
prefer to have compiler assisted type checking, other folks
do not. I think its a matter of taste and the scope
of your project.
Miguel.
I’ll concur with spank_da_monkey, Ubuntu is probably your best bet. It’s Gnome 2.8. Mono will most likely be in the official repository soon enough and you can use the repository that spank_da_monkey gave out in the meantime.
Forgot to post this too.
http://lists.gnome.org/archives/dashboard-hackers/2004-October/msg0…
Ubuntu inotify patch.
go to their forums, there are mono repositories. I got Mono, Monodevelop, Tomboy, and others working just fine.
They may not be official but they work!
If want develop client use python or Ruby for more bang for he buck
Server Side development belogs to Java.
I have developed quite few java client apps in swing people like them a lot since it runs great in Linux or Mac/windows
Take look at some java components in this site
http://www.jgoodies.com/index.html
SkyNET? Eeeek!
It would be better to have quality documentation for Mono than to have more library features.
The only thing that Java does better than everyone else is documentation, and that reason alone makes all the difference in the world.
Personally I use commodity hardware and software, so I am a C programmer, and I’m starting to get involved in learning Python.
I’d like to see Cairo integrated into GTK+, because I think that it would benefit everyone.
Mono still has poor documentation as far as I’m concerned, so it’s not usable. It has potential though.
Are you kidding? You can use absolutely any c# book and use 99% of it (I leave 1% padding although that is probably too much). Edd’s book is a no-brainer too. MonoDoc is coming along and somewhat usable not to mention the obvious, but there is also the MSDN website which is terrific. Where exactly is the documentation lacking in quantity or quality? Mono isn’t the distant cousin that some people make it out to be.
MonoDocs
http://www.go-mono.com/docs
MSDN
http://msdn.microsoft.com/library
Best .net and c# book:
http://www.amazon.com/exec/obidos/ASIN/0735614229/qid%3D1098240…
An excellent compliment for the mono specific stuff
http://www.amazon.com/exec/obidos/ASIN/0596007922/qid%3D1098241…
Not to mention the mono forums and mailing lists available from http://www.mono-project.com
You should start porting some apps to mono right now I think
Agreed, documentation is a strongpoint of Java and a weakness of Mono, mostly I think because javadoc makes it so easy for developers to write documentation as they write code – they’d never get that kind of quality if they had to maintain a separate document.
I believe C# supports some form of inline documentation, but the MonoDoc browser doesn’t make use of it.
“Edd’s book”
I should have said “Edd Dumbill & Niel M. Bornstein’s book”
http://www.amazon.com/exec/obidos/ASIN/0596007922/qid%3D1098241…
Java is easier to install, and the website is well organized. I refuse to go to Microsofts website, I’ve only been there once in the last three years.
Easier to install??? Now you’re just grasping at straws. And the MSDN library, like it or not, has an abundance (surprise) of documentation, articles, examples that are very well written (with the occassional typo and sometimes there example code won’t compile). The fact that you refuse to go is your personal prerogative.
Okay I just tried to install Mono on Fedora Core 2 and it failed. That didn’t happen to me with J2SE.
The people at Java, smartly separate J2SE and J2EE. I guess Mono just jams everything together and hopes that you have all the prerequisites installed.
I refuse to even try Mono before it can be installed! Here Java doesn’t come preinstalled like Python and GTK+, yet it is a breeze to install. Way to go Sun.
“I refuse to even try Mono before it can be installed!”
Well you won’t get far will you if it’s not installed.
If you are using Fedora you can use YUM to install or just grab all the rpms in one download and install them your self.
from the mono site:
For YUM repository, please use:
http://www.go-mono.com/archive/1.0.2/fedora-2-i386/
I´am a Kylix programmer, but this system seems to abadoned by Borland. I thinking what can the next environment.
My priorities:
– Static typing. IMHO it is far more reilable. Basic, Python, Perl, PHP, TCL are not alternatives for me.
– Multiplatform, I don’t want tied to windows or any other platform.
– Stable and reliable language and library structure. My previous bigger appication written in wxWindows and I have very serious problems because the API changed between 2.0.x and 2.2.x.
– API for database access, printing, web page generation, web services or other multi-tier solution (corba, etc), widgets(forms, buttons, check box, etc).
– Ordinarily I write closed source applications.
The best can be IMHO the .NET, but the legal state of mono is a little bit equivocal. Java also can be very good choice, but it depends on SUN and the SUN is not too big and stable company. And if SUN goes to bankrupt and buy it any $C0-like company I don’t know what will happen with Java.
I tried all of the rpm’s in one zip file, and when I installed:
rpm -ivh *
It said that I don’t have apache installed. Well that’s true, I’m not running a server, but I don’t think that should be a requirement. I’d like to see something like J2SE and J2EE. Get it?
I’m a C programmer and I developed a VB6 application that used the rs232 port to communicate with an external device.
AFAIK mono1.2 will let me use System.IO.Ports
Will Mono1.2 let me develop my rs232 application in a cross platform (linux/windows) way ?
“I´am a Kylix programmer, but this system seems to abadoned by Borland. I thinking what can the next environment.”
This explains a lot about you. 🙂
“My priorities:
– Static typing. IMHO it is far more reilable. Basic, Python, Perl, PHP, TCL are not alternatives for me.”
Static typing means bigger and harder to maintain with a changing environment, as you have noted. And this is not me saying it; if you read that big paper on dynamic languages by that PhD from ActiveState you would know.
You could use code generation to diminish the burden of adapting to new versions of the libs. Don’t now..
“- Multiplatform, I don’t want tied to windows or any other platform.”
If you want to be productive with a “Static” only environment, you don’t have many choices.
“- Stable and reliable language and library structure. My previous bigger appication written in wxWindows and I have very serious problems because the API changed between 2.0.x and 2.2.x.”
This is a constant with open-source development. Many spread libs advancing constantly. This is harder to follow with a “Static typing” only environment.
“- API for database access, printing, web page generation, web services or other multi-tier solution (corba, etc), widgets(forms, buttons, check box, etc).”
Web apps and web services are good enough for many people. CORBA is kind of old… Java has EJB and other distributed object that I dont remember. Ruby has dRB which is like Java’s, but easier, of course. I know that the default for Microsoft is web-services. The rest everybody has, but database access is better with Java and DotNet, I guess.
“- Ordinarily I write closed source applications.”
no problem about that.
“The best can be IMHO the .NET, but the legal state of mono is a little bit equivocal.”
I agree.
“Java also can be very good choice, but it depends on SUN and the SUN is not too big and stable company. And if SUN goes to bankrupt and buy it any $C0-like company I don’t know what will happen with Java.”
I agree that Java is a good option. If we don’t go paranoid, just pick one or the other. But learn some dynamic language too help you with the little tasks and code generation. Me? I will keep watching both camps and having fun with Ruby, thanks. 😉
hi
interesting discussion here. first off my english is far from perfect so please bear with me. i’m the typical ms developer. i started with ms access then went over to vb and now i’m at the 3rd quarter in the .net learning curve.
since i didn’t have visual studio .net at home i decided to look for OS alternatives. while this quest i’ve met:
– SharpDevelop (fine IDE for Win Env.)
– mono as alternative runtime
– gtk#
i’ve still some problems here and there with gtk# but hey i realised that there is a world beyond ms and visual studio and i’m able to write X platform apps with tools developed by openminded/unselfish people.
i’ve read in another post here that avalon will make windows.forms kind of obsolete. i second that. i think ms is making big steps foward but not every company/shop is willing to invest in new knowledge or simply doesn’t need that functionality.
so imho mono has a big chance to be something like the save harbour for ms devs that can live without latest “bells and whistles”.
i myself starting to feels so safe that i wanna invest more in mono. i’m indeed looking for a job in the mono enviroment.
i would:
– do it on an apprentice – base.
– move out from switzerland
maybes somebody can help me out where to start.
happy hacking
phil
Well seeing as how there are no mandrake packages, I just compiled up mono, the compiler, monodevelop (and all it’s dependencies), and a few apps like f-spot and muine (muine is a loooooooong way away from being useful). Blam! seems kinda cool, but I’d never use it. Then again, the only Java apps I use are Eclipse and Azareus.
In terms of installation, can the mono people *please* provide a single precompiled installer that is distribution independent (e.g. like Sun do with Java). And try to standardize on what the Mono platform is, so that apps can depende on “mono platform 1.2”, instead of 6000 dependencies.
The advantage MS has is that they can go: .NET provides this library for doing X, and you will use it. But in the OSS world, people use whatever they feel like, so every app has 200 dependencies. I thought with mono we could get rid of this crap. Just download a .NET .exe file and run it.
Bah.. anyway, it seems kinda fast, but pointless at the moment.
>But learn some dynamic language too help you with the
>little tasks and code generation. Me? I will keep watching
>both camps and having fun with Ruby, thanks. 😉
All right, I will learn python (but at this moment I can´t choose betweend java and C#/Mono /the C# language more sympatic for me then Java but Eclipse seems better then Monodevelop/). Witch is the best IDE for python under linux ?
I’ll second the call for a “single precompiled installer that is distribution independent”.
The lack of one — even for the runtime — is the single biggest obstacle blocking wider adoption of Mono.
A visit to the Mono site shows many “official” rpm’s for SuSE and Fedora. Other distributions are out of luck. Their users must rely on source compilation (good luck) or use whatever distribution-specific packages some kind soul may have rolled, and which may or may not be current, updated, or, in fact, work at all.
If Sun had never released those installers, Java would have been DOA. That’s a lesson for the Mono crew.
I can’t think of any big distribution that you can’t get mono installer for. What’s the big deal with having a installer made for your specific os of choice? Sun’s method of distributing it’s installers brings a whole new batch of problems from what I can tell, and they’re not dead in the water (even if they aren’t winning any popularity contest).
If you know where to find official Mono installers for distributions other than Fedora and SuSE, please provide the links.
People have compiled some Mono packages (not all) for Gentoo, Debian and Slackware, but I don’t count ad hoc packages built by an enthusiast, with no assurance of updates or qualty, as official.
Also, they should break up the package into a client and a server side offering, because I tried to install Mono and it way saying that I need Apache installed first. Does this mean that Apache is a requirement of Mono? If so, how many clients home users run Apache on their desktop, some do, but not everyone does. Many desktop users do not run a server.
The issue is that you tried to install the full package
thta contains the mod_mono rpm.
Just remove the mod_mono rpm before you tell RPM to install.
A simpler solution is to just use Red Carpet to manually
specify what you want to install.