Mono's Cocoa# Underway, GTK# Takes on Windows.Forms
Gentu writes "OSNews posted some exclusive screenshots of a new project in the Mono community: Cocoa#. Apparently there are a couple of Apple engineers helping out the project that allows developers to create graphical Cocoa applications under Mac OS X using the C#, Python or Basic language. Mono seems to be doing well in the Windows land too, allowing developers to use GTK# instead of Windows.Forms to create multi-platform apps."
I got a headache just reading the headline. Give us old fogies a break, we're used to seeing the hash mark at the beginning of the line...
I wanted to mention that our path to indepedence
clearly goes through Gtk#, but we realize the
importance of giving users binary compatibility
so we are actively developing Windows.Forms and
Visual Basic.NET (gasp) for Mono.
A new from scratch implementation has started with
four of the top Mono developers that are now
locked up in Provo Utah working around the clock
to delivery the new implementation of Windows.Forms
(our previous Wine-based approach having too many
Mono/Wine problems to solve).
Miguel.
You know there are panther and aqua themes out there that look and behave quite similarly to the mac theme. find them at Themes at freshmeat
From the mono FAQ:
Question 131: Could patents be used to completely disable Mono (either submarine patents filed now, or changes made by Microsoft specifically to create patent problems)?
... The controversial elements are the ASP.NET, ADO.NET and Windows.Forms subsets. Those are convenient for people who need full compatibility with the Windows platform, but are not required for the open source Mono platform, nor integration with today's Mono's rich support of Linux.
I have this distinct feeling that supporting Windows.Forms out of the box would have affected Miguel's stated reasons for Mono ie Gtk# and using it for Gnome apps..... That's why probably Mono didn't implement Windows.Forms for Mono 1.0 (talk about MAJOR feature missing). But this is totally off that map ?.
If Apple does run .NET finally , it'll probably be licensed off Microsoft to prevent Microsoft from screwing them later. I have a feeling Miguel and Ximian-Novell is just doing "Free" development for Apple if they release this under LGPL. I care more about running my winforms apps on Linux and BSD , not about how "cool" embedding a browser control in C# is.
Nothing to see here folksThere are some decent arguments for using Mono over Java on Linux. Those arguments don't hold up as well on OSX, though. Java support on the Mac is in many ways superior to Java on any other platform, especially for Swing apps (the counterpart to most Cocoa# apps.) Still it could be attractice to have a framework that made it as easy as Java is for developing cross-platform (Windows/Linux/OSX) apps that would have significant performance advantages over Java on 2 out of 3 of those platforms.
I've been using wxWidgets for some corperate develpment and I don't think I can be more happy with it. Integrating Cocoa into Mono is nice with GTK and all (didn't read article- sorry,) but is it going to use native UI faculties that the operating system provides? wxWidgets even has .NET interpolabilito under development called wx.NET and you can use that with Mono too.
..from embracing (and extending!) C# and .NET. Programmers generally like C# and .NET for application development, and Objective-C has some serious flaws.
Best Buy can have you arrested
You can use real apps right now with Gtk# - the Muine music player and the Blam RSS reader are functional and mostly stable...there are many other examples.
I want Mac OS's interface on Linux! I've done what I consider to be as good of a job as I can, but it's not the best knock-off in the world.
They should be concentrating on making quick & efficient UIs like the Amiga had, or the early Macs, not bloat upon bloat upon bloat.
Both the original mac and Amiga UI systems fit inside 512k RAM or less, leaving everything else for the App's functionality. When some of those early machines were expanded from 68000 CPUs to 68040s and 32MB of ram or more they flew faster than any 2 or 3GHz cpu in GUI feel. Nothing could outclass them
So why do we need this bloat?
Really. You'd think Microsoft could come up with something better than the grid-based layout they have been since forever. Once you start using a constraint based layout kit like Gtk, you never want to go back to the stone age and have to manually write window resize code and manually adjust the sizes of controls individually. I'm hoping to try out Gtk# soon for projects now that we are starting to use .Net as a development platform.
Even back in the 0.8 days, I had very few problems making a medium sized app (~4000 lines), developed entirely under linux with Mono. Everything worked on the first try when I ran it on windows with .NET.
Now that's true cross platform ability. Even with Java I've never had it work that flawlessly. Thanks Miguel and Mike Kerster and the rest of the Mono team. You guys rock.
I think the world has finally left me behind. I just don't get this obsession with .NET. Even the Java ecstacies back in the mid 90's weren't this enthusiastic. There are fifty stories on related topics on OSNews, and .NET evangelists are work are sprouting up everywhere like dandelions. Hell, Miguel can't take a dump these days without Slashdot reporting it.
Why the obsession with Microsoft technology? What's it going to give me, an embedded systems developer? Why are vice presidents at work mandating its use in a hard realtime product? Frankly it appears to me that the world has gone stark raving mad.
Has there EVER been any language or framework that generated so much unbridled enthusiasm before? Did they lace the spec with speed or something? I'm not doubting that these various Microsoft cloning projects have some merit, but some of you guys are going way over the top.
I guess I'm just an old fashioned fuddy duddy who should stick with old fashioned languages, frameworks and music.
Don't blame me, I didn't vote for either of them!
I've been looking high and low for a cross platform GUI tool, and the only one I particularily like is Qt. Which, of course, you have to pay lots of money for to get the Windows version (or deal with the "freeware" bit stuck in the title bars of windows). I'm gonna look into Wx.NET; just found out about that in this discussion.
Anyway, I'm reading over the FAQ for GTK#, and it says you need to have cygwin. So, my question is, does only the developer of the software need to have cygwin, and then it builds it using libraries provided with it and outputs a nice standalone application, or does everyone who wants to use it need to install cygwin? I can't seem to figure this out from the site...
I want Mac OS's interface on Linux!
Request denied.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
C# is, but .NET isn't.
Ahem, The CLI is just as much of a standard as C#
g /clr/
http://msdn.microsoft.com/net/ecma/
http://msdn.microsoft.com/netframework/programmin
Even better would be finishing up the GNUStep project.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
C# may be a Microsoft invention, but now that Mono has opened it for the Linux and Mac people, I bid it welcome. As far as I can see, it is a very powerful language, which offers a number of functions and features of ex. Objective C.
Yeah, I used to use a MS Intellipoint Optical Wheelmouse with my 2 macs, still use it on one. However, for my old laptop I've gone back to the ol' one-button. Why? I've decided that the original paradigm is better; the keyboard has far more functionality than any mouse, with the exception of the scroll wheel.
In Safari, if you want to open a link in another tab, just command-click. In another window? Alt-command-click. Want a menu? Ctrl-click.
For dealing with files, open 2 finder windows in column view, and stack them on the screen. Want to cut-n-paste? Drag-n-drop. Want to copy? Alt drag-n-drop. Want a shortcut? Alt-command drag-n-drop.
The more I use a one-button mouse, the more I like it. YMMV.
(tig)
Ignorance and prejudice and fear
Walk hand in hand
It would be nice to have a consistent multi-platform Objective C library period.
Forget about GUI bindings, all the different implementations don't even share the same root object.
I rarely criticize things I don't care about.
The reason behind the 1 button mouse was that it was painfully clear what the 1 button was to be used for. If you wanted "right button style functionality," hold down the option key and click.
Studies done at the time indicated that people made more mistakes with multi button mice and mice with multi button interfaces took longer for the user to accomplish what they want to do (because of the mistakes and confusion about what the other button was for).
For me, it is pretty damn obvious that the mouse button is used to provide the "primary operations" for the item clicked on. Holding down the option key when clicking to extend into "options" for the item makes perfect sense to me.
What really is the big deal with people's obsession on multi button mice? Honestly, I don't get it.
- Zav - Imagine a Beowulf cluster of insensitive clods...
There is another choice for native GUIs using C# on Windows, Linux, and OS X: wx.NET, bindings of the wxWindows library to Mono and Microsoft's .NET implementation.
wxWindows is great because it gives you a uniform API across different platforms and toolkits, while at the same time using native widgets and giving you access to platform-specific features if you like.
What is it with the hatred for this man? I swear some you act like he is the anti-christ for what he is attempting to accomplish with the Mono project.
.Net apps on other operating systems.
1. No one is forcing anyone to use Mono or run
2. Try to look at the advantages that the OSS and Linux communities can utilize here if we can convince more developers to develop apps for Linux due to the existance of Mono.
3. Mono and Miguel are not going anywhere so all the folks in the anti-mono crowd might as well get use to it.
The number of people still using the original root class, Object, is vanishingly small. GNUStep has a perfectly good implementation of NSObject, which tracks the Apple implementation quite well.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
ECMA standards are bullshit. Companies like to submit things to ECMA because it puts the patina of standard on some technology and they still get to charge licencing fees. It's the whole RAND thing.
It's all bullshit business as usual "you must pay us to use your intellectual property" crap.
evil is as evil does
Studies done at the time indicated that people made more mistakes with multi button mice
I might buy this, for total newbies who haven't learned which button is which.
and mice with multi button interfaces took longer for the user to accomplish what they want to do
Maybe true for total newbies. As a general statement, I don't buy it.
I use all three of my mouse buttons, and the one that's actually a scroll wheel, I also use a lot as a scroll wheel. You can't persuade me that I'll be faster using one hand to bang a particular key on the keyboard while the other hand clicks is faster than just hitting a single mouse button with a finger that is resting on that button. I don't buy it.
http://www.mono-project.com/downloads/
Mono 1.0.1 has been released and fixes a number of bugs.
Is this based on anything? It's slower than raw C or assembly of course, but quite fast overall.
Everything below this sentence is from http://www.alastairs-place.net/cocoa/faq.txt:
* 2.7 How fast are Objective-C messages?
The name "message" might make you think that they are slow; however, they are
actually quite fast. Here are some figures from a 1GHz PowerPC G4 (courtesy
of Marcel Weiher):Local function call refers to a call to a function in the same executable or
dynamic object module. Cross-module function call is a call from one
executable or dynamic object module into another.
On current Apple versions of GCC, an Objective-C message results in a call to
objc_msgSend(), which is itself a cross-module function call. That means that
the actual method dispatch only takes 17ns (on average), which is pretty
quick.
Scott Stevenson
Tree House Ideas
You can look through the ECMA document for a Hello World example. Also check out last months Ars Technica Linux.Ars article on Mono as it provides a couple of examples too.
Quick little "Hello World" in C#:
using System;
class Hello
{
static void Main() {
Console.WriteLine("hello world");
}
}
I have no experience on the Amiga, so I can't comment there.
Ultimately, if you tighten your code that much something will suffer - either maintainability/expandability, or feature-set. Sure, I can code amazing features into a tiny space using assembly, and be obsolesced very quickly (e.g. WriteNow), or I can scale back my features extensively (e.g. Mac System 5).
Please recall that in the days of the OS cramming into under 1MB of memory, the feature set was very different. On the Mac (using System 6 as a baseline), we had no virtual memory, no aliases, no networking other than Appletalk, no drag and drop, primitive Multifinder, no multiple user support, and by today's standards, really crappy functionality (I have a Mac Plus sitting on my desk).
Also, in those days you'd have 1MB of memory, of which say 300K would be used by the system. That's 30% or so. Today you have 256MB at least, which the system may use 64MB of or so - similar usage. Of course, today's systems have much more advanced memory management than the ones of yesteryear.
Not all progress is "bloat". Remember a variant on the 80/20 rule - people by and large only want 20% of the features in an app, but can never agree on what 20% (not like we ever see arguments about that here on Slashdot, no, never).
I don't know what kind of crack I was on, but I suspect it was decaf.
Yeah, the Amiga was fast, but rememeber that one lame app would crash the entire system. The Guru was not very helpful in debugging memory pointer corruption either... I prefer the stability of Linux, OS X, and even XP, thanks.
i'm developing a C# application which has a System.Windows.Forms (SWF) frontend for the Windows version, and a GTK# frontend for the Linux version. I was hoping to get rid of the SWF frontend and deploy my application on Windows and Linux using the GTK# frontend. Despite all of the hype surrounding Mono/GTK# (thanks miguel) i have not been able to get this working because GTK# simply doesn't work correctly with MS.NET. There are parts of GTK# that actually rely on an incompatibilty between Mono and MS.NET to work correctly. So when this code is executed with MS.NET, you'll get runtime exceptions. The same code will function correctly on Windows when you use Mono on Windows, but then i get memory leaks everytime i use Regex.Match which my application needs quite often. So after leaking about 395MB of RAM, the garbage collector will crash with an error ("too many heap sections"). The same code runs perfectly on Linux in Mono.
I would really like to see Mono and GTK# completely ready to be used on Windows for _serious_ stuff (as in: not the average Hello World GTK# app) but rigth now, it just isn't up to the task yet. On Linux, it's pretty good alraedy, but on Windows it's just unusable for my application. I've had to go back to using my old SWF frontend for my windows users.
Multibutton rodents are as close as we're likely to get to a practical "cyber glove" anytime soon.
You need to think in 3D. Instead of text, icons and a mouse, think of objects and the mouse as an extension of your hand. You have multiple fingers and a wrist - the buttons and wheel(s) are the multiple ways to can hold and fiddle with objects.
Seriously.. single button mice and classic MacOS are why everyone hates Mac users. They suck - everyone knows this, and Maclots violently insist(ed) they don't. Mac people finally admitted as much even back in the OSX beta days, vowing to never go back. Soon as Apple comes out with a multibutton 'elegant' mouse, you watch them all disown their previous '1 button forevah!!!!' ways.
Opportunity knocks. Karma hunts you down.
You appear to be reading slashdot, and yet be a productive individual. How?
I think their intention is to use GTK# as an alternative which works on Linux and Windows as well. I'd guess that this means Photoshop.net for Linux is a possibliity using that toolkit instead
Er.. So how do you open the pic of that cute girl to a new tab while browsing one-handed?
Personally, I don't think that tabs fit well to the one-button paradigm... and I don't use them. Expose makes them just redundant. "Pr0n aside", there are websites with javascript purposedly blocking out the right mouse button, to make it more difficult to save the image of the cute girl to your local collection of, ummmm, images. On a Mac it's simple - just drag'n'drop the image onto the icon of your "~/Pictures/pr0n" folder, and their silly javascript can just kiss the round backside of your iMac.
The studies done for the orignal macintosh that came to those conclusions was for first time computer users.
Which is quite understandable. But most people these days aren't first time computer users, hence the popularity of multi button mice
C# and Java provide "reflection" APIs for implementing things like this. It would be quite easy to create a class entirely analagous to NSUndoManager in either language
No it wouldn't. Check the documentation; NSUndoManager intercepts *any* message sent to it, and stores it for later invocation on a different target. You can't do that with reflection, which only allows you to call one of a fixed number of methods.
Another example: there are third party libraries that add higher order messaging to Cocoa collection classes. They allow you to write code like "[[array select] isFroody]", which will return all objects in array for which the method -isFroody returns true. Again, the initial "isFroody" message is intercepted, then forwarded to each object in the array.
How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
I wonder about the hatred too. I code heavily on Microsoft platforms, and looking at the documentation for the new Longhorn APIs, I am quite sure Mono will become even more important when Longhorn rolls out. Why? Just look at the docs; all the new APIs are managed .NET APIs.
I commend Miguel for his awesome work, and the rest of the people behind Mono. When Microsoft is working on a new version of Windows, which is undeniably the most used desktop OS in the world, and heavily uses .NET, you simply don't ignore the thing.
I work for a company that writes it's product in a language called Databus...it used to be hardware specific but now it is a complied yet interpreted language that runs on a LOT of platforms...that is it's strength and pretty much the reason why we don't use "more modern" languages.
I have been watching the Mono project ever since I have heard of it and I am truly amazed at all they have accomplished. I know they have a long way to go...but YOU GUYS RAWK!
I can only hope that one day Mono will allow for our apps to be as portable as they are now so we can switch to another language that has more robust OO abilities not to mention other things I hate about db/c.
So, please, keep up the good work on Mono...many folks out here are rooting for you.
B