Multi-Platform App Created Using Single Code Base
andylim writes in with news of a reasonably impressive demonstration of the multi-platform capabilities of Adobe AIR. "Christian Cantrell, a technical product manager at Adobe, has created an app for multiple platforms including OS X, Windows 7, Ubuntu, Android, iPhone OS, and iPad OS. What's amazing is that all the platforms use the same code base. 'The application is called iReverse, and it's a fully functional Reversi game (complete with a pretty decent AI). Although iReverse is fun to play, the most amazing thing about the project is the fact that it runs in all these different environments completely unchanged. In other words, the exact same code base is used to build versions for five different environments. There's no other platform in the world that can boast this level of flexibility — not even close.'" Cantrell says he will open-source the code for iReverse and document how he pulled this off.
combined with 350 million lines of #ifdef _LINUX_ or #ifdef _MACOS_ or #ifdef _UNICOS_.
So what do you do if you want to make a call to the system API? Or if you want to use something like OpenGL/OpenCL?
I've seen these before and they're more of a novelty than something robust enough for anything other than technology demos.
I ran into a company that claims to produce single code applications for iPhone, Blackberry, Symbian, WinMobile, Android, Palm (Pre), BREW as well as a thin client optimized for multiple browsers.
see konysolutions dot com
but it'll be interesting to see this!
Guy creates functionality I've been using in Java for 8 years; film at 11.
It must have been something you assimilated. . . .
How about plain old javascript? I heard it's pretty cross platform as well.
Save your wrists today - switch to Dvorak
So he used Qt libs? :)
Well it doesn't run on apple crap except for OS X, but it runs on just about every other phone.
I don't get it...
If you have the right compiler (like gcc ported to every platform imaginable) and created something that would output plain text in c or c++, wouldn't the code be the same? I thought code base was dependent on the compiler and the more complex it got (in terms of graphics, guis, hardware calls, etc) the more likely it was that you began to hit platform differentiation.
Also, not sure what your definition of app, game and all that is, but zork running on the zmachines (may disqualify this argument right there) customized (and standardized [fonts, colors, window size]) for each platform runs identically on my phone as it does in a linux console as a mac console as in windows.
except Java.
meh. another slashvertisement about a shitty adobe product which is 20 years behind java. when will adobe ever catch up ? probably never. after HTML5 obsoletes flash adobe is sunk.
Java? It's really sluggish and non-elegant compared to AIR. I'm still not sure how the Java interpreter performs so badly on UI elements. While technically probably OK (it's been losing to .NET though), the mere fact that all Java apps feel sluggish creates a bad image for Java. That combined with the fact that .NET has been constantly instructing new features and tens of languages support it (C#, Basic, Object Pascal, ASP..)
That combined with the fact that you can develop AIR applications with the great Adobe tools using Flash, Flex, HTML and Ajax.
holding different platform specific implementations: http://blogs.adobe.com/cantrell/images/ireverse/FB_projects.jpg
That's doesn't seem all that impressive...
Um, if its one of their toolkits ill pass. They don't have a great track record of secure or efficient code.
Besides, hasn't he ever heard of python or java ( or a host of other languages with a common runtime )
---- Booth was a patriot ----
It's not "one codebase for 5 environments", it's "one codebase for the AIR app, and multiple codebases for AIR itself that had to be ported to 5 different environments." There's nothing even remotely special about that, just empty hype.
Where is CmdrTaco when you need him?
Write once run everywhere is not exactly a new and groundbreaking concept. The Adobe AIR runtime has been out for over two years now. It includes both the Flash player and WebKit and all Adobe has done recently is to tweak their authoring tools to cover the iPhone and (presumably) the iPad.
This demo is quite obviously part of the orchestrated media push surrounding the pending CS5 release. The demo is hardly newsworthy in itself.
While interesting it has been done before and to be honest these "portable platforms" all suffer from the same flaw: the applications they produce aren't native to ANY platform. What I mean is that while they run fine in terms of functionality they all look ugly compared to the environment and don't support typical OS features like hotkeys.
Look at GTK+. The applications work fine on Windows and OS X but you can tell within a second that they aren't native applications, they're badly ported Linux applications.
Wonder how long it will take Apple to sue because he dared use i as the first letter of his program name...
Seven Days with Ubuntu Unity
The current Java runtime makes Flash/AIR/.NET/Whatever look like a retarded snail trying to climb a salt hill. It's much faster than the competition, it even competes with statically compiled native code in terms of execution times. You rarely even use Java's interepter, the runtime compiles bytecode on the fly to native code and executes that.
Swing has traditionally sucked, which is why SWT was created.
Now tools for things like this are where Flash beats Java. Java really only has tools for programmers, not psuedo-programmer artist types who typically create cool things in Flash. Sun seems to have never gotten this aspect.
Mod me down, my New Earth Global Warmingist friends!
I read the article and it says Linux support. At no stage did the page specify flavour. kdawson, Ubuntu does not equate to all of Linux. (It does equate to Linux for the newbie sheep masses).
When the industry as a whole moved from C and C++ to Java in the late 1990s, one of our main problems was the bloat that Java brought to the table. Memory consumption was a real issue, as was its slow nature. Things have improved somewhat, mainly driven by vast hardware advances. 15 years on, Java is finally usable.
Now, when we moved from C and C++ to Java, we did get a huge productivity boost, even if our apps themselves were more bloated and ran slower. Apps that would've taken us a year to develop using C++ could be finished in a couple of months using Java. We could also develop much more complex software than we could using C++. So Java did offer some real benefits, and that's why it became popular.
We can't say the same for Flash and HTML5, however. They both suffer from far worse bloat than Java ever did. For instance, take watching videos on YouTube. I just did that using Firefox on Linux, and the Firefox process is now using 3966 MB of RAM. That's its resident usage, not virtual usage, as well. Its virtual usage is currently 4512 MB.
HTML5 isn't much better than Flash. I've tried some demos that cause similar memory usage problems, even in Chrome. And they run so fucking slowly, too.
So not only do Flash and HTML5 it offer a worse runtime experience for the user, but they're much more limited than Java, and much slower to develop with. They're failures all around. Unfortunately, a lot of former PHP developers from the 1990s and early 2000s (ie. idiots) have now become managers, and somehow think that web-based technologies are beneficial for users and developers. Clearly, they're not. They make everyone's lives more miserable.
What about HTML5? Of course, then you're more forced to be open-sourced, but still -- it achieves the multi-platform goal very easily.
This reminds me of both the benefits and shortcomings of CP/M! A CP/M program would run on multiple different machine and processors without modification, but it limited you to the lowest common denominator as far as utilizing the hardware of each different machine was concerned, This is like CP/M for different OSes instead of different processors, so you are limited to the lowest common denominator as far as special OS dependent features are concerned!
Part of the cleverness here seems to be that the app is (somehow) doing dynamic changes of layout, not just scaling or flowing widgets into a given area, so that you end up with a GUI that looks reasonably sane on different screen sizes, aspect ratios and orientations. That's quite a nifty trick although I don't see any reason why it shouldn't be available in other cross-platform development environments - maybe it already is. Still, I had heard that Flash is good for UI stuff even though we all hate having to run it to access web content.
Seriously. Been there, done that.* Years ago.
All phones. Plus PCs (Linux,BSD,Mac,Windows,etc). Plus many PDAs. Plus settop devices. Plus a microwave. Plus some cars.
Without a single change in the code base. And for most of them not even a recompilation.
Java works as advertised... if you do it properly.
(Yes, of course compatibility goes out the window, as soon as you start depending on proprietary libraries which are only available for some phones. But if you want it to run everywhere: Don’t do that!! Simple. And if you really want the features, just do a check, and only load those parts, if the feature is actually available. Also simple.)
* Except for the iPhone of course, because it’s the only phone without Java, because Jobs is an arrogant totalitarian dick.
Any sufficiently advanced intelligence is indistinguishable from stupidity.
The 90s are calling.
Best. Comment. Ever. :)
Tsunami -- You can't bring a good wave down!
First of all, Air is broken for GUI apps (on Windows and OS X at least.) It gets many, many basic details of how widgets are supposed to work completely wrong. And, shock and amazement, most of the wrongness is the exact same wrongness that Flash widgets have-- gee! You'd almost think it's just a crummy Flash runtime!
Secondly, RealBasic can target three platforms from a single codebase (Mac, Linux, Windows) and gets two of them completely right. (Linux may be right, but I don't know enough about it to really verify it.) So this is nothing new-- that capability has been in RealBasic for at least 4 years now.
I love these breathless excited summaries. The only real point to take from this is Christian Cantrell is completely ignorant of Flash's competitors in this space. (And kdawson loves hype, the hype-ier the better.)
Comment of the year
There's no other platform in the world that can boast this level of flexibility -- not even close
Qt will let you run a single code base on OS/X, Windows 7/etc, Linux and any platform that Qt/Embedded has been ported to. Not just trivial apps like Reversi, but also ones using multithreading, networking, etc. There's also a fair degree of cross-platform multimedia support too, although that's a work in progress. Personally I choose to use PortAudio for cross-platform audio aupport together with Qt.
This is something you could hack together and have run multiplatform with some javascript, css, a bit of html, and some images.
If you're trying to prove the usefulness of AIR for cross platform development, you might pick an example that's not already pretty easy to do without using AIR.
Unity3D can produce binaries Windows, MacOS X, iPhone, iPod Touch, iPad and Wii. Upcoming version will also support Xbox 360, Playstation 3 and Android.
"In prison you just have to shut your eyes and take it. Here you have to shut your eyes and give it."
Seriously it's not that hard to pull off, so long as you're willing to forego the native "lipstick" of each OS..
The mono with gtk# apps I've done work pretty flawlessly across systems.
if it can work outside of a web browser. If not then I ought to stick with C++, Python, Java, and others as I want to make open source cross platform stand alone applications. Some people don't want to run their business code in a web browser for privacy reasons.
Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
www.realsoftware.com has been doing this for years and years.
Only incompetent developers write non-portable code, since the advent of good cross platform development libraries.
Qt can be used for nice portable GUIs, except on the horrible apple mobile platforms - but apple is the most proprietary/evil company ever, and their license is so deranged, that I can't see anyone with serious business interest investing any real effort. Android is also pretty nasty for cross platform GUIs, but who cares? it is never going to compete with good devices, with the current SLOOOOOOOOOOOOW java VM.
Java does bad on GUI's. It's true. OTOH, it doesn't actually do that badly on graphics. It has OpenGL bindings, so for things like making games, it actually does just fine. I'm not personally a big fan of Java, but normal "businessy" GUI apps are really the only are where Java really falls down on performance. And, even then, it's nowhere near as bad as the Java reputation would suggest.
i installed adobe rreader on my new system and it tried to push AIR alongwith it. Just that made AIR reepulsive enough for me to not install it. why can't you just use cpp? It will work on all linuxes withoutt much modification. And who gives a fuck about windows. And especially since AIR is horrendously inefficient.
Wealth is the gift that keeps on giving.
There is nothing innovative in dynamic layouts. They have been available in UI frameworks and widely used for years on Windows, and for decades on Unix.
More detail please. Looks like the guy is running Eclipse. Is his app written in Java? If so, no big deal; wasn't Java supposed to be write once, run anywhere?
If it's something compiled to native rather than to bytecode, it's still pretty mich the same story. My C++ open source app runs on Mac PPC, Mac Intel, Windows and Linux. I suppose I could consider that 4 platforms. They all share the same source code, but once compiled they are different binaries. Yes, there is some use of #ifdef in there. Thing is, my application is written in C++, a language which is supposed to be portable. So, I've actually used STL rather than MFC and cross-platform libraries for the fancier stuff such as GUI, audio etc. As a result, it actually is portable.
I guess my question is, exactly what is it that makes writing cross-platform applications in a cross-platform language newsworthy?
Visit http://ringbreak.dnd.utwente.nl/~mrjb/growingbettersoftware to download your free copy of the book
"Hello world" works on pretty much every platform too.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
i really don't think anything can be 'really sluggish and non-elegant compared to AIR'. Cause AIR is the fucking definition of sluggishness and inelegance.
Wealth is the gift that keeps on giving.
I have very vivid remembrances at compiling pretty complex C programs for various platforms and all using the same code base. Perl for instance.
Sure, the code base is infested with cpp macros and complex configuration mechanisms, making it something for the advanced programmer to grasp but this surely isn't something new. Also, not all libraries may be available on each platform. But I take most projects on a budget which are led by intelligent people, where human resource usage must be optimised will use a single code base.
It's when money creeps in that problems start. Suddenly some cretin is appointed as responsible for a specific platform -as opposed to have one group managing porting generally- and his targets will have "keeping single code base" as a last priority and that's where Babylon starts.
Sure, having a GUI toolkit performing identically or highly similar on multiple platforms is a challenge but single code base is the essence of any half decent project or product.
I hadn't the slightest objection to his spending his time planning massacres for the bourgeoisie... (P.G. Wodehouse)
Now tools for things like this are where Flash beats Java.
Well, there is http://processing.org/
On second thought, let's not go to Camelot. It is a silly place.
How flexible is it in other environments, though? The AIR app pictured is reconfiguring the UI in various ways depending on orientation, moving UI elements from a side-by-side configuration to a vertical configuration depending on orientation, etc. Whether that's clever or not probably depends on how much work the developer had to put in - if differently structured interfaces were coded up manually then that's not so impressive.
If the runtime can reconfigure a set of declared elements in sensible ways, that would be quite cool. Although the app demonstrated is relatively uncomplicated in terms of UI, it'd be interesting to see how this applied to a more complicated example. I did get the impression, from the video, that it was the ability to run flexibly on different screen configurations that they were trying to promote, not so much the fact that the code could run on different devices.
I think the video mentioned open sourcing the code in the future, at which point we'll all be able to see exactly how convenient to program they have managed to make this...
Java has had this technology for eleven years, and as of today does it better than any other framework or virtual machine.
Java really only has tools for programmers, not psuedo-programmer artist types who typically create cool things in Flash.
It seem you've never heard of Processing. It adds a layer over Java with a few simple abstractions over images, sounds, shapes, etc ... This allows artists (who are not programmers, but it's perfectly fine) to make computer graphics art relatively easily. Can be handy also for "real" programmers who want to sketch something graphic quickly.
Off topic, but I couldn't help but read your sig. Apparently you and/or the person that wrote that list never spent more than 2 minutes in .NET because the majority of the reasons given are just plain false, and another large portion are poorly hidden marketing gimmicks.
A Reversi game would be quite trivial to implement in HTML/Javascript, and would run very nicely on all of the mentioned platforms. If you want Flashy effects, use HTML5 which is supported on all non IE browsers, including the ones included on the mentioned mobile devices.
- barkholt
Exactly, Larry. Cantrell's demonstration is 80% about tooling, and only 20% about performance. Adobe's tools are what makes multiple publishing targets available to quasi-programmers.
My two cents: HTML5 will only gain serious momentum once Adobe's tools can spit out HTML5-flavored AJAX– which is something they technically could do immediately through the Flash authoring workflow. The only reason why content producers moved away from Director/Shockwave long ago was because Flash Pro was a powerful enough tool; it had nothing to do with performance or flexibility.
Who else can seriously do today what Cantrell has done with this little app? How much effort would it take to create the workflow for you? And would it make any sense to anyone you showed it to? This is primarily why Adobe exists, and how it makes money: it gives power to its customers.
Sidenote, can Unity do this already?
Java does bad on GUI's. It's true. OTOH, it doesn't actually do that badly on graphics. It has OpenGL bindings, so for things like making games, it actually does just fine. I'm not personally a big fan of Java, but normal "businessy" GUI apps are really the only are where Java really falls down on performance. And, even then, it's nowhere near as bad as the Java reputation would suggest.
It's worth pointing out somewhere that the iReversi program in the article doesn't actually seem to touch the GUI at all. I see no menus, search boxes, scrollbars, etc, just whatever window decoration the OS has to offer. The game itself is only graphics, which you point out can make things a lot easier. Basically, this game seems at least on par with the least impressive demonstration of cross-platform code I can imagine. It might as well just be "Hello, World!". How about an office suite like OO.o, an image editor like GIMP, a chat client like Pidgin, or anything that requires actual use of a GUI that so complicates the cross-platform approach?
Don't show me something simple and tell me it's a demonstration of overcoming a complex and longstanding issue. I can write a web page that renders the same in Firefox 3.6 as it does in IE 5, but that doesn't mean I've created anything special; I just wrote something basic enough that avoids the big issues.
So as I understand it, someone who who wants to develop an arcade-style multiplayer game has to "pay his dues" by finishing a strategy-oriented single-player game first, even if he doesn't even like to play strategy-oriented single-player games. A multi-platform toolkit won't help much in this respect. Or what am I missing?
But not in its current form.
Sun never made native executables or a way to point and click on a java file and have it run without having to type java x. As a result desktop apps tended to ignore java. Sun gave away the JDK but had no tools for animation like Adobe. As a result JavaFX was too little too late. Netbeans is nice but I need to drag and drop to create animations and visual effects ... not type lines of code in with an ide.
Flash loads instantaneously while java applets have to launch a whole java runtime environment which annoys users loads.
I was thinking of creating some out of spare time but I do not have the mathmatical skills of learning graphical algorithms.
Sun has an addon for Adobe flash to create javafx applets but if yo uhave adobe flash then why bother making a javafx applet? Ugh
Since Java is now open sourced as Iced Tea I hope this will change. Java now has a very very bad rap as a 21st century Cobol for server apps and all verbose, dull, and boring with memorizing many layers.of.different,javax,apis.
So we need a free opensource animation tool and support for point and click java applications. After this Java may or may not take off. I really dispise Adobe. They are a threat to anyone who wants to do web development. Without adobe you can not get a job as a web developer anymore as its the defacto standard. Even html 5 is being undermined by it and silverlight.
http://saveie6.com/
I can make a DHTML app working in HTML 4.01 that would work across all of these platforms. OH, and every HTML-enabled browser going back to 2001.
Sure it might suck, but if the point is quantity over quality (which he seems to emphasize), then I'm afraid legacy platforms have you beat.
If I count correctly, Qt supports 7.
Regardless of your name calling, aren't you kind of agreeing with me? Look at what the GP said - that you can just recompile programs designed for Unix systems. I said it doesn't work like that, just like you.
it was never any problem to write the same code for multiple platforms. Even the good old c/c++ works just fine for that. The real trouble is that it's very difficult to get it compiled on all platforms and environments, given that you only have access to one of the platforms.
If you just avoid frameworks tied to specific platform, and only use libraries that are portable, using the same codebase for all platforms is very simple. Most developers do not do that simply because they do not have access to all the platforms necessary. It needs group effort to compile it to other platforms, so it only gets done with enough interest to your project and availability of the source code.
free software is full of portable libraries. And we have portable languages like C and C++. And then you just need access to each platform compilers... java tries to solve that by making so dragonian restrictions that binaries are portable. It fails because you cannot use any existing C/C++ libraries with it. They end up with just yet another fragmented platform which is completely incompatible with rest of the world.
The real solution to portability must come from the programmers themselves, not from random platforms and frameworks. The programmers need to learn to isolate existing libraries and dependencies so that they're replaceable, in case the platform dies or the lib gets replaced by a better alternative. And then it just takes some effort to compile the code to each platform.
the problem with portable platforms and frameworks is that next year someone invents new platform that doesn't follow the rules of your portable stuff. And the new shiny thing breaks your portability if you only relied existing portable platform or framework's portability. for example, java is not being ported to any of the new platforms(think .net & c#) that are coming out because it's lots of work to port it with enough quality that java applications actually look good with the new environments. And who wants a platform that is only good because it runs existing java apps poorly.
Truly portable really needs programmers to think about what they're doing. Avoiding relying on stuff that is known to be nonportable. Even with that, it's difficult to know what to rely on.
In general, the new stuff is always portable at the beginning. this is because it's developers had access to the existing platforms. But once it gets older, new platforms and frameworks will break it's portability. And in the end people start to think the new platforms are more portable because it works better with the new shiny platforms. So in the end we need to change our target. Yesturday it was c/c++ providing portability. Now all that work is wasted because java supposedly provides better portability. then C# broke java's portability by not implementing java on that platform(==java cannot use the new shiny .net libraries). So all work done for java is wasted because people are moving to C#. And C# is tied to windows. So we never really had any portability. Just frameworks and platforms that try to compete with each other.
It's a bad sign when your code starts using someone elses conventions and not your own. It's a sign of a platform frameworks which will transform your app tied to that specific platform. Java is just another platform. It never provided any portability. Same with javascript (it ties to web).
Languages are the newest way to tie programmers to single platform. Implementing a language takes so much effort that owning one is very large control point for the companies that build those languages. Programmers are heavily tied to those languages because it takes large amount of time to learn one. And if it's not available on all platforms, all that effort benefits only that one platform.
Truly portable doesnt exists. There are just old and new platforms and frameworks. The more dependencies it has, and the more it uses external stuff, the more likely it'll break when the next platform comes. It
How flexible is it in other environments, though? The AIR app pictured is reconfiguring the UI in various ways depending on orientation, moving UI elements from a side-by-side configuration to a vertical configuration depending on orientation, etc. Whether that's clever or not probably depends on how much work the developer had to put in - if differently structured interfaces were coded up manually then that's not so impressive.
If the runtime can reconfigure a set of declared elements in sensible ways, that would be quite cool. Although the app demonstrated is relatively uncomplicated in terms of UI, it'd be interesting to see how this applied to a more complicated example. I did get the impression, from the video, that it was the ability to run flexibly on different screen configurations that they were trying to promote, not so much the fact that the code could run on different devices.
I think the video mentioned open sourcing the code in the future, at which point we'll all be able to see exactly how convenient to program they have managed to make this...
It reminds me of making a web site. You can detect the screen size and rendering engine, and move your html elements around whatever is best. I'd never call this multi-platform, though, even if the web site is as fully functional on the iPhone as it is under Windows 7, etc. The web site is written for the "browser platform", and relies on having browser implementations known to support it's functionality in order for it to work on any OS. There's nothing at all clever about it, in those terms. A single-window game that doesn't appear to rely on anything outside of what the Adobe Air implementations offer seems to be the same thing.
Show me a single codebase that you can use that produces native (or close enough) GUI elements for something a little more complex and I'll be interested.
This is not new, though it is hard to do. I've been designing and implementing cross-platform systems for almost 30 years. A major application framework and transaction processing manufacturing execution system I was a principal architect and engineer on (initial deployment in 1995) runs with the exact same C++ code base on every known Unix variant as well as Windows with no changes in code between any of them. This is not simple to do - the design of the framework was the key in the abstractions it presents to the developer. The Qt framework is something akin to this, in that you can write code for one platform in C++ and simply do a recompile to run on another, including Windows, Linux, Unix, etc.
Sometimes, real fast is almost as good as real-time.
Java does bad on GUI's.
why don't you take a look at SWT first?
I saw that also. Is that list current? It seems to be published in 2004? Has it been updated?
no comment
Yes it's current and the items are still completely valid.
Mod me down, my New Earth Global Warmingist friends!
can be used to get the same results. And I (not the best programmer) have been getting these results with abstraction for years.
You mean where the symbols are defined that decide which platform-specific lines of the slushball will be executed at run time.
This is the worst case scenario for code coupling - a dozen projects spread throughout a common set of files.
I started on SWT. Then switched back to swing.
Contrary to popular wisdom, I found that SWT was actually slower than swing. On instantiation anyway. Once instantiated, SWT may outperform Swing (probably does) - but your typical user will not notice. It is the waiting for the window to open that is the obvious cost.
I also discovered alot of functional limitations with SWT. Key one that affected the switch back was dealing with overlaying/overlapping controls. Swing worked the way you would expect, SWT did not.
The programming model for Swing certainly sucks though.
Best. Comment. Ever. :)
Fixed that for you.
Really? Reason #4 is enterpise adoption rate. That's changed as .NET is growing.
#6 is an opinion with no factual basis backing it up. Having done both Java and .NET web development, I strongly disagree with it. But still, it was nothing more then an unproven assertion.
.NET
.NET development work in government Federal and State and local.
.NET land. Your claim that Java's are better is, shockingly, an unproven assertion.
#7 is false.
#8 is another unproven assertion.
#11 is another unproven assertion.
#14 is false.
#16 is complete garbage. Collections and true generics are superior in
#17 is unproven assertion.
#20 neglects
#21 unproven assertion.
#22 is crap. O/R mappers are huge in
#23 is an unproven assertion. And you're going against one of the best IDE's ever that many love in this one.
OK, I got bored and stopped. And most of the other ones on the list I think are crap to. You're talking about programming languages, why even tout such a superficial list that amounts of nothing but sticking out your tongue and going "na-na na-na"?
It doesn't integrate with the global menu bar on Ubuntu or Mac, nor RGBa translucency on Ubuntu or Vista/7, nor, notifications on Ubuntu/Mac nor....
Jack of all platforms, master of none. Just because it runs doesn't mean it's worth using. A reversi game that caters to a given platform is nearly guaranteed to be a better reversi game for that platform.
It's easy to write multi-platform games because games don't have to conform to platform conventions and can get away with just about anything.
Regular applications are hard, applications where people expect standard menus, standard dialogs, and full desktop integration. And those features generally do require changes to the application logic and source code for each platform; nobody has figured out how to fully abstract them away in libraries.
Java has been trying to do this for 11 years, and it has failed, just like Flash/AIR is going to fail to deliver this. Without per-platform customization, Java applications don't respect key bindings, menu structure, and many other conventions. And it's the same with Flash/AIR.
The only way to do something cross-platform is if you come up with a sexy-enough interface that violates platform conventions with a vengeance but is so compelling that people want to use it anyway. That works for games and some media apps (music players, real-time social network), as long as they aren't too complex. It doesn't work for "boring" regular desktop apps.
Qt does this in C++, you can also use JavaScript or Flash to do this with web applications.
Hey, Slashdot, maybe when somebody makes an operating system that uses virtual memory, you can post an article on that one, too.
To me, the big accomplishment here isn't that someone has managed to make the same source code run on different platforms.
The big accomplishment is that this is something newsworthy.
Ideally, your code should only describe the functionality of your application. What these platforms do is basically the same stuff in any case. There isn't really a good reason why code that does something as non-exotic as this program would _not_ work on every platform that supported the right features.
Somehow, the corporations bringing us all this fine technology have made it so that you pretty much _can't_ write a program that will run on both their device and their competitors'. And not only that, but they've also gotten most of us to accept this as normal.
Please correct me if I got my facts wrong.
"There's no other platform in the world that can boast this level of flexibility — not even close" Harrumph. LabVIEW.
That's not hard. What's hard is for the application to be a good citizen of each platform. That is, to run properly and follow the UI customs, idiomatic usages, and meet user expectations on each platform.
If the application is completely self-contained and basically implements its own UI, then, sure, it can appropriately "run unchanged" on multiple platforms.
But for the application to select files properly, with, for example, Mac OS's idiosyncratic world view (with "/Volumes/abc" and "/Volumes/def", all appearing at the same level as /), or Windows' view (with "Desktop" at the top)... or to open files properly across a network... or make "help" respond to the "help" key on a Mac and F1 on Windows... or respond to a USB device... etc... is not so easy.
"How to Do Nothing," kids activities, back in print!
#include
int main(int argc, char *av[])
{
return printf("Hello, World\n");
}
There!
WPF is a game-changer, although more could be done to make it easy. And a professional 3-D game can be written with better performance in .NET than Java.
Amazing... except that I've been doing pretty much this for the last 10 years with Java.
Adobe Air is a *massive* resource hog.
What about this http://wiki.freepascal.org/MSEide_&_MSEgui which uses free pascal, is lightning fast, and compiles on each platform.
If a little knowledge is dangerous , I am probably lethal on a GLOBAL scale
And in doing so, "discovered" how to write portable code.
I guess that pretty good, for a manager.
Sure Apple allows Java. You just include the JRE built into your app, which loads your static java bytecodes. As long as you don't retrieve any additional java or bytecodes dynamically then you're fine.
The question is how small can a JRE be made, and is it possible to strip down the java libraries to only what is needed by the application to make them as small as possible?
Has anyone done this? I don't know, but technically it is allowed. My game engine includes the lua scripting engine, and although it is technically possible for us to dynamically retrieve new lua sources from the net (like we do images, data and audio), we don't in order to adhere to Apple's requirements (in fact, there's no way they can even test for that, because we could simply not distribute lua code from our server until AFTER the app goes live).
Many other iPhone apps and games include various scripting languages, in all flavors imaginable (JIT, precompiled bytecodes, true scripting), so technically Java is no different.
Better known as 318230.
Our apologies... The item you requested does not exist on this server or cannot be served. Please double check the web address or use the search function on this page to find what you are looking for. If you know you have the correct web address but are encountering an error, please send a mail to the administrator of this site.
It would be trivial to write that app in JavaScript, with no need for commercial/proprietary tools, and it would run just as well if not better, and on more platforms than adobe air.
Interesting list in your sig, but unfortunately all of the links to detailed info that it contains seem to be broken.
wxWidgets rather
Is that ballmer cock delicious sopssa?
I think LINQ is a biggest game changer out there right now. It's the biggest thing I've seen in a while. Querying your own object collection is extremely powerful.
lol, how do you even come up with this stuff? you should write scripts for stoner movies, or something...
weinersmith
This particular problem domain has been around since there was more than one computer. A vague declaration of this accomplishment associated with the words, "not even close", causes me to be immediately skeptical. I have tried more frameworks than I have fingers and toes, and the more generic the framework, the less impressive the look and feel.. I can hardly believe this item made it past Cmdr Taco. The more glorious the declaration, the less likely anyone is the take it seriously and even check it out. I have begun blithering and my posting may have less value than TFA.
Yeah, don't even get me started on #20. The number of incompetent java developers I have to put up with. Meanwhile we have a superb C# shop that puts out ten fold the product and quality. This list is worse than a strict religious ideology. Someone that feels this strongly about any technology has no place being an engineer. Engineering and programing are about balance - the right tool for the the right problem.
I agree...I'm no expert but I feel like linq is doing for C# what the STL did for C++. Minus the horrendous compiler errors :).
I'm surprised that no one mentioned Titanium, which is an Open Source alternative to AIR that lets you package up native apps for all of the mentioned platforms.
http://www.appcelerator.com/
The UI is CSS based, and you can combine several scripting languages (Python, Ruby, PHP) along with compiled modules to handle most general application development.
There are no GUI widgets in Flash / AS3. Everything is actually drawn on screen using vector or bitmap graphics. There are components that you can use that emulate widgets (drop downs, date pickers, etc) but those are not native. This means that they will work consistently across all platforms.
This demo is perfect because it shows a Flash / AS3 developer what they need to do to make sure their app works well across devices.
1. Figure out how your app elements might reposition themselves depending on screen dimensions.
2. Figure out how to scale your application and elements so things are usable.
3. Use interactions that work on press and not on MouseOver.
The rest doesn't matter. As long as the framework can draw graphics to the system consistently across devices, nothing else really matters. Flash is become the ultimate platform for GUI development.
Smalltalk systems like http://www.squeak.org run on *lots* of different platforms, even the iphone. Without changing a line of code. Also no #ifdefs...
> Java really only has tools for programmers, not psuedo-programmer artist types who typically create cool things in Flash. Sun seems to have never gotten this aspect.
They actually have, and it's called Java FX.
I noticed quite a few of those as well. Many items on that list are false and completely unsubstantiated. Java is very good, it is still my preferred language, but c# .NET is also fairly good.
You sound spot on with your list on what the demo shows and why those are important points.
The rest doesn't matter. As long as the framework can draw graphics to the system consistently across devices, nothing else really matters. Flash is become the ultimate platform for GUI development.
The rest matters. Enough that I find your last assertion horrible depressing. I could go on trying to explain the reasons why I think so, but your initial point is more valid for this story. Regardless of what is being done to the user experience, the implementation behind the demo seems like it could help Flash / AS3 developers make money. Besides, if someone writes a great iPhone app, I won't complain if it doesn't require any additional work for there to be an Android release as well.
after HTML5 obsoletes flash adobe is sunk
They still have Photoshop and a bunch of other products.
SLAM Productions (www.slam-productions.co.uk) has had this technology for years - the same code base for games on the Playstation 2, Playstation 3, Playstation Portable, Nintendo DS, Nintendo Wii, Xbox 360, PC, Mac, iPhone, Linux...
I haven't tried it on all the platforms they mentioned, but AFAIK the following source code will compile and execute just fine on all those OS's with no modifications needed on an OS specific basis:
#include
using namespace std;
void main()
{
cout
but hey I could be wrong, like I said I haven't tried it on all of them.
Saying Java sucks or Java is slow is like saying Lord of the Rings is a lousy story because it had lousy bookcover illustration.
From the years of reading Slashdot and more than a decade on the web reading about how people bash Java, it is pretty clear how many people can't tell the difference between a platform and an API. It is worrying how much of these people make up the world's pool of software professionals.
While it is true that Sun dropped the ball on Java marketing and the Swing API, it is also true that Microsoft wielded its evil muscle trying to kill it (how many can claim to have survived such attacks?) in the 90's (anyone remember the 9-year lawsuit that Sun eventually won?) and Java as a platform and ecosystem stalled because of that. As a 20-year software veteran who used to write in C/C++ and assembly, I'm happily making a good living writing real-time graphics apps with Java that runs on Mac, Windows and Linux. Those who bash Java just don't know what they are missing and I'm happy to keep it that way: less competition for me.
Lastly, Adobe Flexbuilder, the IDE that this iReversi game was written in, is based on Eclipse. And Eclipse is written in Java using the SWT API. Eclipse is also one of the world's most complex piece of software that runs on Mac, Windows and Linux. Adobe's marketing should eat its own smelly socks.
www.rexguo.com - Technologist + Designer
Lazarus is a fun IDE/RAD if you don't mind using Object Pascal, which I don't mind. http://www.lazarus.freepascal.org/
"There's no other platform in the world that can boast this level of flexibility — not even close."?
Let's see.. Javascript, Java .. is Python available on the iDevices?
how many other platforms can ya'all think of that could do this? Excluding the iDevice requirement, hundreds?
"Champagne for my real friends - and real pain for my sham friends!" http://ericblade.postalboard.com/
"I just wrote something basic enough that avoids the big issues."
Have you considered that this _not considering_ the design properly from the outset is the problem? I think that's the real issue is knowing what to avoid doing when you make a cross platform app.
Perl::Gtk, tcl/tk, need I say more? I was writing "multiplatform apps" from a single codebase a decade ago, and I'm sure many out there beat me to it by at least that much more.
"Please describe the scientific nature of the 'whammy'" - Agent Scully
Many applications that I use in my workplace are developed in Java and they are so slow to start up and to refresh after a long idle time that it always make me cry.
The amount of RAM that Java use is huge and unjustified. It does also have a level of complexity with a ton of layers that make the task of programming seems like a bureaucratic task.
The only reason Java is so popular in the enterprise environment is because it does allow to develop quickly complicate applications by using an army of mediocre programmers.
I'm really happy that Java is going to die.
...runs entirely in software on everything from the dreaded MSJVM through modern implementations, does non-linear and blended animations, overbright lighting, has speaking and animating characters, and runs on every platform we've tried including Solaris, OSX, Win-whatever you want, Linux, et cetera. No different code bases, no platform specific anything.
What is it with people claiming "I've built the first rocket to go to the moon" while standing in Huntsville Alabama?
Loading...
If you look around at the huge number of completely cross platform apps and tools out there you will find that many of them are sitting on top of SDL (www.libsdl.org). SDL has been providing a cross platform multimedia development platform for so long that an on going maintenance issue is deciding when a platform is really truly dead so that support can be removed. :-)
I thought I'd throw that out as my current favorite example of yet another cross platform tool. I've seen so many of these that I lost count about 20 years ago. The original article (if you can call it that considering how little information it contained) is about as news worthy as "Man Misses Public Urinal".
Stonewolf
it all depends on the runtime-enviroment that is created for each platform. If you only stick to the API which is provided by your own created runtime which you have written specifically for each platform it won't be a problem. The only problem with this approach is that your application won't make the best use of the hardware for any specific platform. But apperantly these days nobody cares anymore as (web)programmers seem to think people have supercomputers anyway, and otherwise they'll buy a new computer anyway. (just like this slashdot site which is hindered by it's scripts and is sluggish as hell sadly on my XP IE8 Intel P4 3..2Ghz 3GB mem).
Java? It's really sluggish and non-elegant
Have you looked at Java in, say, the last 5 years? Java is very quick and responsive now.
Commodore 64 emulators run on a dizzying variety of platforms, everything from Androids and iPhones up to room sized mainframes and including every single target that AIR supports. I think that means that "Archon" and "Seven Cities of Gold" boast a good deal more flexibility than "ifdefreversi" does.
Still, it's a nice try. Maybe if Adobe is still interested in multi-platform apps they can try writing a nice little 'Hello World' in Perl or learning some FORTRAN and COBOL.
Not that i agree with the article, but LabVIEW sucks.
Yes, this also means its likely that the widget will work wrong across all platforms as the only right way is the native way.
Considering it more or less requires you to create an app that breaks native OS look and feel, I'd say you are certainly wrong in almost every single possible case.
If you're making flash apps I'm sorry but the reality of it is that its highly unlikely you know how to make a GUI better than the OS designers. Even just copying the native widget is practically impossible from a end developer perspective due to the shear number of variations you have to deal with.
Flash is not intended to be aware of platform issues, it simply ignores them. Anyone worth there salt as a developer can tell you how ignoring the platform specific makes your app asstastic rather rapidly.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
There are no GUI widgets in Flash / AS3. Everything is actually drawn on screen using vector or bitmap graphics. There are components that you can use that emulate widgets (drop downs, date pickers, etc) but those are not native. This means that they will work consistently across all platforms.
That's what lightweight widgets are (a la Swing) -- control presentation across platforms and don't rely on native libraries and threads for creating and destroying native UI elements (peers). This is not a new idea. One of the first implementations of this for performance reasons that I'm aware of was in Swing's grid widget (JTable), where a single lightweight component is reused for drawing each cell that uses the same rendering logic. This is in contrast to how it might have been done using a native widget, which would have to be instantiated for each visible cell separately.
There's nothing magical about native widgets -- at some point it all comes down to drawing stuff on the screen. It just depends on which library does it and how efficiently (threads, memory, hardware acceleration, etc.).
Alexey
Speaking as a self-confessed 'psuedo-programmer artist type', I can say that those tools definitely are available in the form of Processing.
If you really want cross platform and variable display resolution, look at Squeak Smalltalk, an open source implementation of Smalltalk that is the balm and can, in fact, run cross platform on any device for which a c compilier is available. There are several forks, one of which, Pharo, is targeted at commercial developers.
http://www.squeak.org/About/
"Major computing platforms supported include most versions of Windows including CE/PocketPC, MacOS, Linux/Unix, OS/2 Warp, Acorn RiscOS, and even a bare chip (the Mitsubishi M32R/D)."
http://www.pharo-project.org/home
People this is reversi, it can be done in a js file, two gifs, and some divs in one evening, and more portably too. This is some marketing hack doing what he does.
I bet you're running old apps on the horrible Microsoft JVM.
Java will be around for a long, long time considering how widely it's used across platforms and the fact that it's the most popular programming language in the world.
Mod me down, my New Earth Global Warmingist friends!
Slashvertisement for AIR... nothing to see here...
One can use Lazarus IDE (Free pascal Compiler) and compile native apps for Windows (32/64bit), Windows CE, MacOS, Linux (GTK1&2, QT), web services and other things using same single source base. :)
It's not an inovation. It's just an PR thing
without widgets, its moot.
qt or swing will utterly blow flash out of the water in real world programs
each program having it's own drawing style is a boondoggle that hinders internationalization (forget accessing any market except the English speaking world), performance (say goodbye to the embedded market or real-time systems), and accessibility (say goodbye to having program be used in government, military, education, or any business receiving government money)
I would add: .NET. In fact the ones that you simply can't do in 100% .NET, you outright can't do in java AT ALL. How is that better? .zip file. .NET had hardware acceleration through DirectX long before Java ever did.
2) The majority of the framework is now openly viewable.
3) Hype, you can do many many projects in 100%
4) Internet statistics and quite contrary to what I see.
6) An opinion, one that I disagree with very strongly.
9) False.
10) False.
11) Again, how is java's inability to call native things, a plus?
12) More languages? Really? ROFL! Java VS VB, C#, Cobol, Python, F#, and many others? How is java "More languages"?
15) False.
19) Unproven.
24) ?
25) False.
27) False. Try LINQ which is built-in and you don't even need a
28) False, has always been false.
29) Unproven.
30) Eclipse.
31) False.
33) Casini, littleweb.
34) Mono.
35) False.
36) Absolutely False.
37) False.
38) False. Linq.
39) ISO.
40) False, and
43) False.
46) False.
47) False, all of them, and native managed drivers as well.
And on and on and on.
Considering it more or less requires you to create an app that breaks native OS look and feel, I'd say you are certainly wrong in almost every single possible case.
Thank you, well put. That was exactly my reaction that I wasn't able to put into words in my response.
Unless she shows it being compiled as native code, I call it bullshit.
Hey, guess what: my little Python Twitter Client also runs unmodified on Linux, OS X, Windows and Maemo. All that due the nature of a VM running under those machines.
"Oh, but what about the iPad and the iPhone?" Adobe probably have an iPad/iPhone version of their VM running around and he installed it using the ad-hoc feature.
Honestly: bullshit. Big steaming pile of bullshit.