Best Language For Experimental GUI Demo Projects?
New submitter GrantRobertson writes with a question about quickly developing prototypes for new interface design concepts "My research/tinkering will be along two main lines: (1) Devising entirely new graphical user interface elements, mostly in 2D, though often in a true or simulated 3-D space. I am working on ways to visualize, navigate, and manipulate very, VERY large data-sets of academic research information. (2) Computer based education software, though of a type never seen before. This will combine some of the GUI elements invented in (1) as well as displaying standard HTML or HTML5 content via a browser engine My requirements are: (A) A decent IDE ecosystem; (B) A decent set of libraries, but ones that don't lock me in to a particular mind-set like Swing does in Java. (Boxes in boxes in boxes, Oh My!); (C) An ability to easily draw what I want, where I want and make any surface of that 3D object become a source for capturing events; (D) Ease of cross-platform use. (So others can easily look at my examples and run with them.); (E) No impediments to open-source licensing my code or for others to go commercial with it either (as I have seen when I looked into Qt). So, should I just stick with Java and start looking outside the box for GUI toolkits? Or is there something else out there I should be looking at?"
I'm not sure what impediments Qt has to proprietization of software since it's LGPL nowadays; in any case, Qt Quick and GNOME's Clutter seem like they could be a useful. Read on for more context.
"I am not a professional software developer and never have any aspirations to become one. I've been through a generic university computer science degree-program and I can tolerate C++ begrudgingly. I do OK with Java and prefer it, though I still have to look up every API before I use it. Most of the code I want to write will be not much more than prototypes or proof of concept stuff for the research I will be doing, rather than full-on applications ready for distribution and use. I can learn any language out there, if need be, but these days it is more about the ecosystem than the core language. IDEs, libraries, cross-platform compatibility, user support, open source licensing."
I'd use Cocoa on a Mac, and stick to the (large) subset supported by GnuStep. Bonus, you'd be able to test IOS devices with your data set with a little more effort...
Simon
Physicists get Hadrons!
I'd be tempted to do it in English, but, given current demographic patterns, Chinese may be better in the long run...
Im sort of in the same boat (Graphic Designer with aspirations to be a UI/UX designer) and am learning to code of my own accord. I've had much success with Processing. It's really easy to get started and get functional code running. Also, you can run your processing files on a webpage with Java or Processing.js. I don't know about the large data sets you're dealing with, but since Processing is java based, I assume there won't be much difficulty
...I would recommend a careful combination of watercolor and origami.
If you need 3d and you are building your interface from scratch then you are probably going to want to use OpenGL in whatever language you are most comfortable with. Trying to bend an existing GUI toolkit into something it isn't designed to be will probably be more trouble than it is worth.
https://developer.mozilla.org/En/XUL
Multi-platform with Xulrunner, integration with HTML5 engine if needed.
Léa Gris
This is probably going to draw some heat, but frankly, it sounds like using Flash and ActionScript 3 may be a good fit for the prototyping work. You probably wouldn't want your final deliverables that way, but as a prototyping framework, you could get pretty far with it.
I'm not sure what the state of Flash's 3D support is these days, but I know that back in the day when I used to work with it more heavily (about 8 years ago) there were things like Swift3D that you could export 3D models from applications like Lightwave and bring them into Flash. Although I think this was less from a data-driven standpoint and more from an animation standpoint, but that may have evolved since then - I simply don't know.
AFAIK there shouldn't be any problem with you open sourcing AS3 code. And while the Flash IDE itself is commercial, you can get an AS3 compiler from Adobe for free and just write everything in AS3, although you wouldn't have the ease of use of the IDE itself for drawing on the stage, doing keyframe animation, etc. But that may not matter to you.
Flash has a plethora of UI components and modules out there that are free (and some commercial, too) that you can use. It ships with many re-usable components to add things like collapsable lists, windows, text editing fields, etc. It also has some sugar to make working with data easier, though personally I always preferred writing clean AS directly.
Full disclosure: I haven't bothered with Flash in at least 3 or 4 years now, but based on my current knowledge it still sounds like a potential fit. Haters are gonna hate no matter what, so don't let all the negative hype get in your way of using it in a controlled environment as a prototyping system. After all, a prototype is just a prototype, not the finished product.
1. Processing (http://http://processing.org/) is great for visualizations, worth a look. It's used a lot for interactive visualisation tools
2. Clojure is a great option for general purpose prototyping. It has the advantage of being able to use all the Java libraries and tools, but on top of that is an excellent modern dynamic programming language with great code-generation capabilities. It's great for creating DSLs, for example there is a Clojure GUI library called seesaw that defines UIs like this:
(frame :title "Hello", :content "Hello, Seesaw", :on-close :exit)
I don't always write GUIs, but when I do, I prefer wx. But in all seriousness - I hate writing GUIs. I write embedded C for a living and am lost when it comes to the differences between window manager(s) on Linux or Windows or whatever. When I need to whip something up quick (and it's not embedded, and we're not going to sell it) sometimes I switch over to Python, and if that quick thing needs a GUI, wxPython (the port of wxWidgets from C to python) is something you can tack on there with minimum hassle. If you need a portion to be fast for your math calcs or whatever you can write that part in C. There's a boatload of tutorials via google (and youTube).
Use the language your developers know. If they say the problem is too hard in the language they have been using, maybe you need new developers?
Seriously, C++ is pretty awesome, for me, I use it for lots of rapid gui design - mostly with Qt, but it sounds like you'll be crunching some of your own 3D...
Well, Nokia open sourced Qt under the LGPL 2-3 years ago. I am a Nokia systems engineer. We are still the primary maintainers, but we are committed to keeping it that way (open source), and with the current moves of the company toward Windows Mobile on our high-end phones, we may well be considering pushing it out to the community entirely, but with some resources still assigned to it. I don't know for sure, but I'll try to find out what the plans are for it. Qt is an important part of our Meego and Symbian phones, which are still popular and getting a few new models. My own company phone is an N8 Symbian device.
A GUI in Visual Basic. I hear its good for this internetz stuff.
And not because C# is 'superior' or anything like that.
The basics are easy to learn (for C++ or Java programmer).
But more importantly it is the integration with Visual Studio. Netbeans, Eclipse, KDevelop are all a distant 2nd compared to the ease of development in Visual Studio. Besides, I think you need a i7 Extreme edition to run Eclipse....
WYSIWYG development. Drop in a button, anywere you want, then start using it.
For 3D and graphics you have WPF, XNA and a little off the reservation, stuff like SDL.NET.
I personally enjoy how they blended the Visual Basic stuff in. Enumerators make for some interesting code when you use them like rate buffers. I hate most multi-threaded programming. 15 years ago I thought it was cool. Now I've come to realize that it has ruined most applications. Which is why I personally believe most Java applications suck. Because the only solution that the novices seem to come up for any requirements seems to be spawn a thread and have it do whatever is required. You end up with programs that are either non-responsive, or worse, the response is variable - click a button, nothing happens, click again, then it suddenly happens twice. Ugh. I built programs on 133Mhz Pentiums that were better. If you can avoid garbage collection, learn how to use enumerators to pull data as needed, it makes for snappy programs.
Isn't that vector-drawing in a nutshell?
Yes...I know...Pascal..Ugh (it's a shame so many people under rate Delphi's Object Pascal). But, Embarcadero Delphi will enable you to build FireMonkey based apps that can run on Mac, Windows and iOS. FireMonkey still has a ways to go. However, if you look at the whitepapers posted on the Embarcadero.com website, you will see some interesting stuff. FireMonkey is evolving. Once of the nice things is that it can use the GPU vs the CPU for rendering. This makes 2D and 3D rendering a piece of cake. Additionally, FireMonkey controls can (and should be) stylized. The number of effects one can achieve for a simple button is amazing. Imagine what one can do in terms of designing new UI paradigms.
Are are some blog on using FireMonkey to render functions and demonstrate wave interference (in 3D).
http://blogs.embarcadero.com/ao/2012/02/02/39215/
http://blogs.embarcadero.com/ao/2012/01/30/39208/
http://blogs.embarcadero.com/ao/2012/01/27/39206/
and, for a commercial product by TMS Software http://blogs.embarcadero.com/davidi/2012/02/07/41510/
FreePascal w/ Lazarus is another way to experiment (and, get Linux and ARM as target environments as well). FireMonkey for iOS depends on the ARM compiler to bring the apps to iOS (at least until Embarcadero writes their own ARM compiler).
Granted, the tool isn't cheap. But, if you have the budget, it's worth adding to your tool bag.
Another alternative is getting intimately family with JQuery and the DOM. There is a lot you can do to experiment with new UIs.
Haskell is the best language for anything new and interesting!
The Christian religion has been and still is the principal enemy of moral progress in the world. -- Bertrand Russell
good luck with that.... as a coder i'd just use opendx, make it work properly(not an easy task), and show some results quickly, less effort and you will have fun with the data.
For those who love how Groovy/Grails makes Java less verbose and its convention over configuration approach, I highly recommend Griffon. It can work with Swing, AWT, QT or whatever you want to use and is very clean, simple and easy to understand and is based on tried and true technologies and libraries.
This is my sig. There are many like it but this one is mine.
What about QML? It's designed for rapid prototyping, it's cross platform, and you can extend it with C++.
There's no -1 for "I don't get it."
http://processing.org/
It's been ported to nearly every language, does 2d and 3d, has a straightforward syntax and lots of math libraries, physics engines, etc etc.
A fool throws a stone into a well and a thousand sages can not remove it.
As someone with experience with just about every major programming language. I'd seriously consider Javascript. Rather than "Embedding" something to render HTML, embed your special sauce in an HTML5 Canvas. Specifically consider writing it as a Chrome App. Not only will it be fast you'll automatically have a standard platform to release your work onto, no installer, no pain in pushing out updates as your work evolves.
See some examples here: http://net.tutsplus.com/articles/web-roundups/21-ridiculously-impressive-html5-canvas-experiments/
JSON is becoming the defacto data interchange format used by just about all web services and Javascript can also be used on the backend via node.js. You or anyone you're working with can easily learn javascript from places like http://www.codecademy.com/. Plenty of IDE support, but Chrome itself provides excellent debugging tools via "Inspection" and a javascript console which can be used as a rapid prototyping shell.
As an added bonus, javascript provides the best of both functional and object oriented programming, and just about every decent programmer knows javascript or can learn it easily.
WXlua lua fltk, wxpython, processing (java)
Swing does in Java. (Boxes in boxes in boxes, Oh My!)
Oh my, is that what it troubles you? Let's see...
draw what I want, where I want and make any surface of that 3D object become a source for capturing events;
And you want to do this without imposing any hierarchy (of the type "boxes withing boxes") on the 3D object's surface, yes? Assuming that it is possible, once the event is generated, how would you implement the event processing if you can't discriminate on the type of your "event source"?
I do OK with Java and prefer it, though I still have to look up every API before I use it
Looking into every API, you say. And you say you'd like to finish looking in this life, so that you could do something?
My advice for this case: the shortest path to destination is the one you already know. Otherwise, if you don't plan to become a professional software developer, hire one.
Questions raise, answers kill. Raise questions to stay alive.
Are you really going to have time to learn something new with all that groundbreaking paradigm shifting you'll be doing?
Leverage your core competencies to push the envelope on impactful best practices, and hit the ground running - it's a win-win!
Synergy.
sic transit gloria mundi
Subj sez it all... Cf Physion.net for details (I didn't notice any src being offered there...)
You might look at some game engines, they have decent GUI's these days and are designed to handle large data sets. They usually have multi-lingual support also so you can work in a few languages.
I did a few projects in Irrlicht and ogre3d and was really impressed - I was able to work in Java, C# and C++ in the same project with some work and message passing.
Good luck
I said no... but I missed and it came out yes.
GWT
"Devising entirely new graphical user interface elements, mostly in 2D, though often in a true or simulated 3-D space"
"This will combine some of the GUI elements invented in (1) as well as displaying standard HTML or HTML5 content via a browser engine"
to use Office products during classes in college, I think about how they wouldn't be above paying someone to spam slashdot with this stuff, over and over, even after the guy -specifically required portability-.
You dismissed the one framework that would do what you want. LGPL and if really necessary, Digia does not charge that much for a commercial license. I've been doing cross platform work for 20 years. Java was my first foray. Star Framework (Star Office was written with this) was a pretty good framework. But QT beats them all hands down.
If you want demonstrations and "proof of concept" stuff, you want a language which is expressive, not a language which is easy to learn or which generates heavily optimized code.
In the demo phase, you're not really worried about performance. The goal is to have something showing as quickly as possible, and not worry too much about how fast it runs, or how much memory it takes. Overspec your demo system for the time being (ie - make it really fast and install lots of memory), and once you have a reasonable interface go back and recode it in a simpler language which can be more easily optimized.
Languages which are simple to learn (c++, for example) are generally not very expressive. You end up wasting tons of time debugging issues of memory allocation, library interface details, and datatype conversion.
Languages which are expressive are a little harder to learn, but any individual line in the expressive language does a lot more. Since you are writing fewer lines, and since the fewer lines do more, you end up making programs more easily and in less time.
Yes, the programs will execute a little slower, but as mentioned, this is not important in the demo stage. Your productivity will be much higher.
Perl was written by a linguist, not an engineer. As such, it's harder to learn (it's got tons more keywords and context), but once you get the hang of it it's much more expressive. The following single line:
@Lines = sort { $a->{Name} cmp $b->{Name} } @Lines;
unfolds into several lines of C++, plus a subroutine definition with datatype definitions. The following line:
@Files = <c:/Windows/*.exe>;
can be implemented using one of over a dozen possible library calls in C++, but is builtin in perl. You don't have to look up the library call interface specific to your system.
I hear that Python is also expressive, although I don't use it.
One quirk to be aware of with Qt. Once you do work with it in the LGPL, then you can never upgrade that work to a commercial license, thus even experimenting with it carries risk.
Who wants a commercial license you ask? Ignoring the pricetag, without a commercial license you can't static link the Qt libs. So if you want a mobile Qt app, your say 150k program will have to come with 11Mb of 'library', which has been enough to blow some mobile app store limits (to say nothing of how much your end users will appreciated it.) Unless Qt's already supported on the platform, so that gets you ... Symbian.
either that or (god help me) Silverlight + C#/VB. Both do a really good job of separating GUI & program logic, and both have easy access to high performance display libraries (opengl for Droid, directx for Silverlight). I'm working on a combination Droid/Sliverlight app where the front end user data stuff runs off Android and the backend creations tools are in Silverlight. Oh, both have the added value of being free to develop on.
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
I'm sure you won't like opencobalt.org since it's not biased towards Html ...
Programmers stopped being programmers when they stopped talking about what algorithms they should use and started going on about what languages and IDEs and APIs they should use.
I've been following the protyping languages closely, looking for a better and more open option than Matlab. I haven't found it, but in the process of writing a book on scientific prototype-to-product development, I'm getting a better idea of what this language/environment should do.
"The ability to delude yourself may be an important survival tool" - Jane Wagner -
Short answer.
Python Matplotlib covers some of what you might be interested in and it can be used with other GUI toolkits see http://www.scipy.org/Cookbook/Matplotlib and http://matplotlib.sourceforge.net/ - at the very minimum it might provide some food for thought about the feature-set you're seeking.
worth a look anyway...
http://sencha.com
http://www.sencha.com/products/extjs/
http://www.sencha.com/products/extgwt/
I know you said cross platform but...
iOS offers you touch sensitive pane of any size (UIView), onto which you can put any controls you want - then you can apply a 3D transform.
You can group the views (place one view inside another and move the whole unit). You can apply alpha to any view, arbitrarily block or accept input on any surface. Any of the views can be an OpenGL surface itself for more advanced rendering.
You can draw bitmaps into views, or also use a vector based system to place shapes in views which the system will render with high levels of performance.
On top of all that you can also easily animate many properties of views, allowing motion to easily and smoothly factor into your UI.
To my mind iOS is a pretty awesome system for exploration of alternative UI's, which I have been thinking about myself for a long time...
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Isn't this what Croquet was designed for? Does anyone have experience with it?
Don't assume too much in terms of playing nice with straight-up JAVA. I've been building a lot of interactive video projects (kinect interface with JSON queries to databases holding IP addresses, for mapping animations on spheres) and I've been using the Eclipse rather than the Proceesing IDE. There's a lot of weird shortcuts that the Processing IDE does to make it easy for n00bs (that's why I got into it ;) but once you start doing stuff with openGL, threading, or (most importantly for the OP) using fonts and UI elements, things get really convoluted. And the debugger blows.
Not to say you shouldn't do it-- but while the Processing learning curve is pretty easy, it gets quite steep when you want to incorporate more high-level functionality.
That said, there's a lot of libraries that will address most stuff you'll need in terms of UI elements-- controlP5 is one that deals with text fields, text boxes, etc, for instance.
Don't knock it, but for fast, easy and deployable experimental UI work, give Flash a shot. The Flex UI toolkit can be used (and skinned) for custom looks, or completely ditched for the Flash display tree. It works everywhere (except cell phones, heh).
Approaching Flash development with Flex Builder as a C/C++ guy, ended up being extremely easy (ActionScript 3 is somewhere between C/C++ and JavaScript, with most of the nice features of both, with only a few of the ugly bits).
Flex is open source these days too (the platform isn't however).
QT controls are not designed with either the user or the UI designer in mind (and they're not easy to learn to program for, either). AND, they're ugly! Designing layouts with QT seems to be built around a philosophy that the application developer should not actually have much control over how the controls are rendered at runtime, but the end user should somehow understand how to reconfigure everything about the application's visuals to his liking. Plus, as much as nobody wants to hear it, no cross-platform IDE holds a candle to a vendor provided solution such as Visual Studio or Borland's very fine offerings.
I admit to not having used Visual Studio in a while -- and I have never used .NET. I have programmed extensively using the Qt framework and find your comments about Qt to be completely off the mark. If you want to control your Qt widgets programmatically, you can. If you want to "skin" them with CSS, you can. If you want to drag-and-drop design your layouts, you can.
I'm old school -- I code everything by hand and find Qt to be very simple and straightforward to use. I also have found that I can have complete control over my widgets. If you don't want to use QLayout (QGridLayout, QHBoxLayout, QVBoxLayout, ...) then just implement QResizeEvent and take pixel level control over where your widgets to go and what their sizes are.
Having used MFC (yes, I'm showing my age), I find that the Qt approach is far more powerful. The signal-slot mechanism for inter-object communication decouples class dependencies offering a much cleaner design. The event propagation through the class hierarchy is another sound approach. I find overall classes are much simpler to manage with far less inter-class dependencies.
Since it sounds like you are uninterested in programming (and talking about 'prototyping' significant/difficult functionality), why not play with ideas at a much more prototypical level. Your favorite painting/drawing tool (could even be non-electronic!) or something like PowerPoint could allow you to try out ideas much quicker. I've seen some pretty good mock-ups through PP that showed an entire user flow for some specific functionality.
For 3D, specific 3D drawing/rending tools would obviously be part of the toolchain as well.
"Sanskrit" is the best candidate for this.
My suggestion for you would be to check out Lazarus and Free Pascal. Lazarus is a cross platform and open source clone of Borland's (or whoever the hell own the company now) Delphi. Free Pascal is the compiler it uses, and it is pretty damn close to source compatible with Delphi, and also provides compatibility modes for other Pascal dialects as well, including it's own Object Pascal mode which fixes some of the stupid design decisions in the Delphi version of Object Pascal. The compiler itself has very speedy compilation times compared to C++ compilers, and generates decently quick code as well. The compiler itself is very mature and well maintained, and it gaining new features all the time. Lazarus is the IDE, which provides you with a RAD environment to quickly piece together the UI, and it is packed with all kinds of awesome features. The LCL, it's supporting library, wraps all of these functions up in a way that makes it very easy to deploy cross platform applications. It covers OSX, Linux (GTK+ and Qt), and Windows. The Free Pascal compiler can compile code for many more platforms, and has in fact supported some even before GCC. If you stick with the LCL, just about everything is covered between platforms and it uses the native components of the platform it is compiled for. It has a very healthy community, with plenty of bindings for all different kinds of libraries. It also provides a good method for creating custom components and reusing them, allowing you to install them in to the IDE and drag and drop them in the form designer just like you would with a standard button or text box. I've never done any stuff with 3-d graphics, but there's all kinds of OpenGL stuff available, and anything you can do in the native widgetsets you can do with Lazarus. The issue with Lazarus is that the IDE is still beta, and there still are a few bugs here and there, but they are fixed pretty quick, and there aren't any major show stoppers. The big issue is that it uses GDB for debugging (there is a native Object Pascal debugger in the works, but it won't be finished anytime soon), which is really aimed towards C based languages, so debugging isn't always smooth. Most of the basic tasks, like setting breakpoints and stepping through a program/function work fine, but there are a few issues with the differences between Pascal datatypes and C datatypes that can make things confusing.
The reason I recommend this tool is because even though it doesn't have a massive ecosystem like C++, it is coherent and works very well between platforms. The Object Pascal language is very easy to learn, it's powerful, and well designed. While not as fast as C or C++, is you look at the alioth debian language shootout page, it is pretty quick compared to other languages. It provides access to all of the familiar C library functions, and includes all kinds of stuff in the language for compatibility with the C language. It's not the old Pascal from the Turbo Pascal days that people like to bash, almost all of the complaints I hear about the language itself were taken care of a decade ago. The only issue I can really think of is that the language can be a bit verbose compared to C, but compared to Java it's pretty succinct.
I've never used a language better than WPF for experimenting with unconventional GUIs, even with very large datasets. You can create both 2D and 3D designs quickly using imported data from Illustrator or any vector graphics and turn them into usable controls easily, with practice. It encourages you to objectify everything, which is great when doing quick GUI mockups, in case one of them is selected so you don't have to rewrite the hacked code you had before.
I know people love their open-source here on slashdot, but WPF is just awesome for GUI design.
JavaFX is worth a look. It's now a Java library, works really well. At present it's supported on Windows, and is close to general release on Mac (it works well in OS X 10.7), and just released in beta for Linux. I have written some pretty complicated UIs in JavaFX, so speak from personal experience.
Not that I would recommend swing as the greatest option for prototyping, but the boxes within boxes issue that you describe has nothing to do with Swing itself, but with your layout manager. If you use the built in layout managers, sure, you will have those issues: I tend to only use BorderLayout out of those, and that's under duress. There's other options for layouts that do away with the problem. If you are using a graphical editor for your layout, there's FormLayout by JGoodies. If you want to lay it all down in code, there's MiGLayout instead.
There are plenty of 3D engines with Lua scripting
I use VTK. Great for visualizing large data sets. Native C++, most everything exposed in Tcl, java, and python. Lots of data set processing functions. Interfaces with Fltk, Qt, etc. if you want to write a full gui. Use ParaView or Mayavi2 to get started. If VTK can handle simulations of supernovas, it can probably handle your dataset.
virtually nobody writes the GUI code by hand. wx and Qt run circles round it.
Both statements are false.
There is a whole school of thought that people should shun IB for better UI performance. As a result there are lots of people that write all UI elements by hand. It's not hard, but there are a lot of properties you usually need to tweak.
I myself like to use IB when possible, but have also done a LOT of dynamic UI, including building whole screens dynamically from configuration files.
On performance - frankly you are dreaming if you think wx and Qt run circles around iOS UI elements, which have all the rendering accelerated by the graphics hardware (since every view is really a plane in a 3D world!).
"There is more worth loving than we have strength to love." - Brian Jay Stanley
you can use Qt legally if you don't static link to Qt libraries.. if you don't know what it means just install Qt by default and build your application and ship it with Qt libraries (those dll files).
this is what everyone does and there is no problem if your application is commercial or not (dosen't matter if its opensource or whatever).
look at need for speed the run.. they use Qt for in game GUI stuff and shipped their game with Qt dlls.. and they didn't have to buy licence or anything.. also remember to include the Qt LGPL license file in your project..
believe me Qt is great.. it has a very clean documentation.
I'd use [software environment and platform here] ...
No. Just use paper and pencil. Create a story board, http://en.wikipedia.org/wiki/Story_board, showing how the user will use the interface.
Go to the academics that represent your users. Ask them what they want to see in a visualization, how they expect to do a search, how they expect to manipulate things. Give them paper and pencil and tell them to just draw things however they think it should be, not what they are used to seeing in their current environment and applications, rather whatever they can imagine would be a good way, a way that feels natural.
Seriously. Excel.
http://www.amazon.com/Effective-Prototyping-Excel-Interactive-Technologies/dp/0120885824
Why not just use Flash & ActionScript, along with Unreal. Specifically, Scaleform. Since it already does the "never before seen" 3D GUIs you want, and game engines are particularly good at visualising extremely large data sets (we call them game worlds).
Any amount of searching "HTML 3D" would have turned up WebGL, which uses OpenGL in existing browsers... That would be a good prototype platform for me.
I take particular issue with the childish statements against using Java (and Swing), considering they already support 3D Swing components (see XTrans demo). Swing displays HTML components, even in tool tips. In fact, there is already an entire 3D collaboration framework in Java ready for any "Never Seen Before" GUIs you wish to dream up... It displays HTML, images, & PDFs etc.
Furthermore, their indignant remarks smack of ignorance, considering Java 2D & Java 3D exist, and both have rich non standard box shape intersection libraries, which can be used to create custom components of any shape or position, hierarchical or not restricted only in that they should be used in a Canvas, to save yourself some time.
They want someone to hand them a magic library that has all the bells and whistles already to go, but heaven forbid any of them have an API that requires using... Have fun inventing that shiny new wheel.
Seriously consider hiring a professionnal and experienced coder. Several of your requirements are very hard to combine : large data sets, cross-platform, HTML rendering and 3D rendering. You won't find an off-the-shelf library that does all of that directly. You will find pieces of what you need, but making them work coherently together is a hard work.
Know your limits as a coder. You need someone with several years of experience to help you identify the technical limits and guide your design. Someone who can tell you if the size of your datasets mean that you have to do things around a powerful database engine or if you should rather use a game engine and add a standard database, for instance.
The Wise adapts himself to the world. The Fool adapts the world to himself. Therefore, all progress depends on the Fool.
maybe try one of the open source 3d rendering engines like Ogre3D or Panda3D.
These both wrap both OpenGL or DirectX and provide higher level coding of the scene and behaviour.
The lower levels are all C++ for speed, but all of the API's are accessible from Python for development productivity.
Surfaces etc. are queryable (that's how they figure out where your game character got shot).
If you don't need real 3D objects and moving 2D controls in 3D space is all that you really want, the easiest way is using css transforms, transitions and key animations. If you need to impress with your prototypes/demos, present it on OSX + safari to get smooth animations (chrome & firefox are better browsers, but safari wins in that very specific department).
Perhaps see if you can get in the NeosisGUI beta. It looks very interesting: http://www.noesisengine.com/noesis_gui_features.htm You write the GUI in XAML, and the rest of the API is C++. It's all 3D, and is built on top of OpenGL and DirectX. It looks mega fast. For rapid prototyping, perhaps consider Processing. It is essentially Java, with some nice APIs, and a rendering context already setup for you.
The ClanLib SDK contains a full GUI with CSS support.
Check out examples at Windows 7 and Linux
You cannot beat in productivity while creating GUI or GUI widget classes. E.g. the whole Button definition in U++ is about 20 lines of C++.
http://www.ultimatepp.org/www$uppweb$overview$en-us.html
You can also use JMonkeyEngine for 3D engines in Java. Or you can use Piccolo2D for 2D in Java.
http://www.mueller-public.de - My site http://www.anr-institute.com/ - Advanced Natural Research Institute
As many have said opengl. How about going down a slight variation of that theme though rather than doing ogl on the desktop or as part of another frame work why not approach it as more of a "game" ui where the elements of data are elements within a 3d world. your 2d data can be represented as "pictures" on a wall and your 3d date could be truely interactive. Perhaps ogre3d for your engine (or any other engine would work too) and awesomium (http://awesomium.com/) for your html rendering engine for doing the whole html5 stuff you mentioned.
I think before fucking around with advanced multidimensional displays you should learn to use line breaks, you retarded spacktard.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
Whereas Indian ones think they do.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
research is prototyping, showing it can be done. supporting something as complex as you propose on all OSes/platforms will be a lot of work.
find an api/package that works and get on with your reseach.
Oh, but Microsoft does employ a vast number of shills to astroturf /.
See who is in charge of Microsoft's PR
http://www.microsoft.com/presspass/pr_contacts.mspx
And see what they do for Microsoft
http://www.waggeneredstrom.com/practices
The people responsible for Microsoft shills boast that they apply the right people and best resources to help build influence around any business issue, for any client, anywhere. In short, they comb through forums to manipulate discussions and spread FUD and propaganda.
I've been working on my own toolkit to prototype new interfaces. http://canvas.dennisschaaf.com
If you're doing a new UI (like say the iPod touch one before it was around), you need a language that allows you to collect events that most languages don't. In fact most languages don't deal with the events at all, they just let the OS cope with some of it and massive libraries of poorly written software for the rest.
What language allows you to hook into the condition where a mouse down event happened here and then there were motion events along this path... It gets even stranger when you start to deal with gestures or eye movements or whatever else you need to do to invent a new UI.
The result of all that leaves C, assembly and forth with top layers in whatever you want.
1. Learn to program and Design GUI, Windows 8 is a good reference
2. Make a GUI for Mono on Linux, like WinForms
This is a crucial point - there needs to be a couple of languages that don't need to target enterprise apps, just get a n00b ANYWHERE so that he can play with his pet project. I had a lot of fun as a child with the Commodore 128: 300 lines of code and I was playing my own games including "Navigate the Space Maze without crashing into the walls", custom-warped versions of standard logic puzzle games, dark versions of Eliza, and more. It was the most powerful programming language I have seen in years: draw a line, print text, make a sprite, simple data in variables. It was BASIC beyond steroids - it was on a rocket launcher.
I know, I know, none of that matters In Today's World. But it should. I can't count the times I wanted to build a cute little app to do something fun for a month, only to take a look at virtually all the languages and it a brick wall. Java and Javascript are a mess. So the Processing concept looks promising. Then if someone gets inspired enough to move on, by that point they should be good enough to port over their concept to a heavy lifter language.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
You are facing a classical trade-off between quality and effort. If you are looking to just get something that works, I'd recommend Matlab. If you positively want to craft new GUI's, look to more low-level tools.
Matlab does have a workable IDE built-in, and being an interpreted language the development cycle is short. The code that you develop can be licensed under GPL, but any recipient will need Matlab to run it (Octave won't do the full GUI stuff).
It easily does 2-D and 3-D visualisations and it has things like sliders, knobs, selection-lists, and buttons that allow you to fiddle with you data.
However, it does not support (or at least I don't know how to do that) custom-built widgets, which is what you will be looking for if you are considering radical GUI innovations. You can easily cobble together existing widgets though.
I'm not a visualisation specialist, but I have a lot of experience pooring at data and I rarely ever found the pressing need for any "radically new" GUIs.
I could always "make do" with customising existing ones. For me quick adaptation and sensible customisation of standard elements was sufficient 60% of the time. In 30% of the cases I was better off with one of the graphics packages provided by R. The remaining 10% I just exported the data to another, domain-specific, package.
This may or may not not be an option for you since you sound as the programmer being tasked with providing graphics.
The project is the result of more than 3 years of programming with multitouch devices (interactives wall, multitouch tables), and from one year now, we worked hard to make it professionnal! We runned a Game contest last month, you should take a look to see what we could do. And go to our Gallery too!
for detailed control....or Latin. Latin is used a lot for demos...of document formatting-styles.
Remember if the real thing ever gets built it will be different, be using tech from 3 years down the line, being coded by other people. In the meantime don't worry about cross-platform and cool and correct. You're cooking things up in the lab not producing a finished product.
Of Java there exists only two mindsets; one of do, and one of do-not. Choose one you must, but cease to cherish these boxes.
Join the Slashcott! Feb 10 thru Feb 17!
I thought I would share some info with you about how one team did this, what was cutting edge work at the time.
Not that I am saying you should use these tools although it seems they are one possibility.
Here are links related to a quite interesting software project developed by Christophe Mertz and others at CENA.
The Digistrips system was a user interface prototype demonstration system written in Perl for the design of new touch screen based air traffic controller systems that mimic the traditional system in which paper strips are used to represent aircraft in flight. The demonstration is said to have been successful, and there are a number of papers written about user interaction in the system.
It used Ivy (a cross platform message bus in Perl) and TkZinc (an OpenGL and 2d capable canvas).
Below are numerous links to papers and software sites although the openatc.org website is no longer in service itself. It is possible to download Ivy and TkZinc it seems.
keywords: cena france french aircraft controller prototype perl perl-anim gui prototyping tk-zinc opengl perl strips
Ivy Software Bus
http://www2.tls.cena.fr/products/ivy/
http://freecode.com/projects/ivy
http://www2.tls.cena.fr/products/ivy/download/desc/ivy-perl-deb.html
Ivy is a simple protocol and a set of open-source (LGPL) libraries and programs that allows applications to broadcast information through text messages, with a subscription mechanism based on regular expressions. Ivy libraries are available in C, C++, Java, Python and Perl, on Windows and Unix boxes and on Macs. Several Ivy utilities and hardware drivers are available too.
Ivy is currently used in research projects in the air traffic control and human-computer interaction research communities as well as in commercial products. It is also taught to CS students.
http://wiki.tcl.tk/9246
Christophe Mertz
Zinc.pm
http://search.cpan.org/~zincdev/tk-zinc-3.303/Zinc.pm
Patrick Lecoanet
http://search.cpan.org/~cmertz/svg-svg2zinc-0.05/svg2zinc.pl
though openatc.org is down.
TkZinc
http://www.tkzinc.org/tkzinc/index.php
http://freecode.com/projects/zincisnotcanvas
http://wiki.tcl.tk/2798
TkZinc is a Tk widget developed with Perl/Tk, Tcl/Tk and Python/Tk bindings. TkZinc widgets are very similar to Tk canvases in that they support structured graphics. Graphical items can be manipulated, and bindings can be associated with them to implement interaction behaviors. But unlike the canvas, TkZinc can structure the items in a hierarchy, and has support for affine 2D transforms. Clipping can be set for sub-trees of the item hierarchy and the item set is quite more powerful, including field-specific items for Air Traffic systems. TkZinc is fast enough to allow the implementation of 2k2k radar displays with smooth animations. It is structured enough to allow the implementation of direct manipulation desktop GUIs.
Since the 3.2.2 version, TkZinc also offers as a runtime option, support for openGL rendering, giving access to features such as antialiasing, transparency, color gradients and even a new, openGL oriented, item type : triangles. In order to use the openGL features, you need the support of the GLX extension on your X11 server.
Zinc Is Not Canvas!
Tkzinc has been developped at CENA to help building experimental user interfaces for Air Traffic Control. Tkzinc is a Tk widget, with Tcl, Perl/Tk, and Python/Tkinter bindings. Tkzinc is available as open source under the GNU Les
Take a look at witty (WT), http://www.webtoolkit.eu/wt
Just my two cents here. Although you do get locked into a framework it is totally written in C++.
It is platform independent, fast and secure.
I second processing. Also, if his project is going to be in HTML/HTML5, he should check out the javascript successor to processing.org, which is d3.js.
I love it when people exclude Java when it is the obvious choice and the one that best covers the problem domain. Translation: I'm going to learn a language but I don't want it to be Java for some imagined reason. Undoubtedly the other solutions that have been offered are a complete mess, especially when considering he needs to use this to manage information. Just use Java. Great 3D, 2D, and whatever else you need. You are building a new UI anyway, why bother with swing.
I object to power without constructive purpose. --Spock
Look kids it's a java watchdog.
I object to power without constructive purpose. --Spock
Java and Javascript related to each other by a word in the same context? Huh? What are you talking about? Javascript is for simple UI tasks that cannot be accomplished by the server side. Java is for building applications that require an object structure. I wouldn't describe either as a mess. Sure, if I leave an incompetent asshole alone to solve a complicated problem they will surely return a mess--no matter what the tool. I recently found a script used by a large bank written in Javascript that was grabbing the screen resolution and doing a bunch of calculations to layout the screen for a simple login. If you had your browser zoomed it would not work---total fail. That, is a mess, and I would hardly blame Javascript.
I object to power without constructive purpose. --Spock
I would give Tcl / Tk a try!
Then use Crayola Crayons! The best for over 100 years or so. ;) Nothing beats speaking the native tongue when it comes to communications, and nothing beats a good box of 64 colored crayons. Splurging on the bigger box is just so liberal and gay. Don't do it.
Java2D is and JOGL or Java3D are full blown first quality graphics libraries upon which Swing is built. The Swing widget library- the boxes you refer to- are so people don't have to re-create commonly used widgets over and over again. You're free to ignore them and go straight for the drawing library creating literally anything you want.
Either you're going to use a widget library or you're gong to be drawing freehand. If you want to draw freehand then Java2D and JOGL or Java3D are the way to go . I have used these many times to great effect. There are tons of libraries out there for scene graphs for instance if you want to go that way to graphing packages to number crunching to text processing all active all first rate.
Where does over aggressive language faddishness come from? "Java is a bloated and slow .. Swing is dead... " stuff like that?
IMO it comes ultimately from consultants who are always looking to have rare expertise they can charge a lot for. They make a boat load of money when they're one of the first 25, 50, 100 consultants who know about "New Breakthrough Technology Which Is Where Everyone Is Going To Go" and can charge 250-500 an hour consulting to companies who buy into The Dream.
Every language has its place and every language is interesting and worthy in its own right and is perhaps the best language for a particular task. Languages get nicer to use *in some ways for some uses* over time but they also lack things like a wide range proven libraries and tool support which makes for huge productivity boosts.
i am not dissing anyone's choice of language here. I just have to note the misconception embedded in the OP's characterization of Swing and Java and how or why he may have acquired it. It can't be first hand or he wold know that he can use Java for interfaces and not use Swing, and this gets me thinking about why language wars even exist at all in the form that they do with the FUD, the bashing, the wide dissemination of plainly false characterizations etc etc .
See http://www.dodgycoder.net/2012/01/modern-cross-platform-development.html
In addition to Qt, GTK+ and wxWidgets it discusses some alternatives such as Moai, Corona etc.
I've been busy porting apps I wrote circa 1997-2005 or so in Win32 over to Win64 using Delphi in RAD studio XE2 (apps were written in Delphi 3/5/7)!
Yes- it's as SIMPLE/EASY as it gets imo for "porting" across memory boundaries, for lack of a better expression!
(E.G.-> No need to directly "mess with" going std x86 registers out to ebx/rbx stuff).
The MOST I have "run into" was recompiling the JEDI libs &/or Indy-OverByte VCLs for 64-bit (that "threw me" for a bit, lol)... I figured they'd be "ready to go" outta the box, & would have the {IFDEF Win32) vs. 64-bit in place - they didn't lol! Live & learn...
Also, then, changing some typecasts on pointers (no need on variables though thank goodness) - but, so far @ least? That's about it... not that tough as I am sure you know.
* Delphi/Object Pascal's also been KNOWN to outperform BOTH MSVC++ &/or VB5 onwards, from as far back as 1997 (when it displaced MSVC++ & VB as my fav. dev. tools, because of this) in the Sept./Oct. 1997 issue "Inside the VB5 Compiler" where Delphi SOUNDLY "knocked-the-chocolate" out of BOTH MSVC++ &/or VB5 on 6/10 tests done, as well as DOUBLING even MSVC++ on both string and math work (which EVERY PROGRAM DOES).
APK
P.S.=> I've tried a LOT of dev. IDE's, & languages over time since 1982, but Delphi/ObjectPascal "stole me away" from all of them + keeps me coming back too!
(That's from also around a dozen languages it did that for me with)...
Yes... Delphi's got the "multiplatform/cross-platform" game down too (& if ONLY XE2 studio would incorporate CLX again so Linux was doable, as it was in Kylix? It'd be PERFECT!).
Only languages I know that can port to as many platforms are JAVA (too slow & buggy imo), & C/C++ (fast, but a more difficult language imo than the others) & perhaps RealBASIC!
Still - however, to be able to build as FAST as VB, & yet have more speed/performance than C++ even? That's for ME... don't know about the rest of you!
... apk
QML is really a breeze to write, and you can get very impressive visual effects easily. It has CSS-like transitions (but easier and with added benefits), and the property-system allows you to easily build complex relations between the visual elements. Objects are laid out using anchoring, where rather than defining x,y coordinates you just define the relations between the element. This also means that everything is out of the box adaptible to a wide array of screen sizes.
QML supports JavaScript inline and also the relations between the objects can be defined as JavaScript statements. Or, you can easily define methods to your QML objects by just writing out the JavaScript function in the code.
Extending from C++ has a small learning curve, but once you get into it there's nothing to stop you from doing your own components, or even implementing the whole visual element stack from the beginning. Not that you would really need to: the JavaScript is runtime compiled to machine code and executes so well that the interface is fast and responsive even on a smartphone.
LGPL is non-issue: it is both friendly to open source applications and fully proprietary closed source commercial applications, and places no legal constrains on your application code.
You can get started with QML right now. I dare you will be able to write your first app UI after 30 minutes.
I'm working on a very similar project, and have chosen to use the Clutter toolkit along with Python. Both are cross-platform, and both are well suited to the task. Clutter is a little rough-around-the-edges, but it's getting better, and Python is the best language out there for quick, easy development.
I would use Scala with a custom UI toolkit built around something like OpenGL.
Scala is a sufficiently advanced and expressive language to make representing new UI abstractions less painful than most other languages. The type system will also keep you honest and help you to design a thoroughly modular library. It has good IDE support now, plenty of libraries (both native and Java based), and is plenty fast for most tasks.
OpenGL / OpenVG / Cairo all make sense for different reasons. OpenGL will give you the most flexibility but may be lower level than you'd prefer. OpenVG seems like a good compromise if you want primarily 2D, vector based graphics. You could also go with something like Cairo for the latter, although I would tend to prefer OpenVG as it is a standard.
Hope that helps.
Why would anybody want to waste their time with a proprietary API using a splinter language and throw cross platform development to the wind?
In the case of research he could have many more advanced prototypes done far more quickly. Remember that was the whole point - experimenting with data visualization UI's. Why does that NEED to be cross platform, for exploration it just needs to be quick, then you can port the UI ideas that work out.
But also it's not true that ObjC is not cross platform. It's on iOS and also the Mac. That's two very distinct platforms.
Someone else mentioned GnuStep but I don't think the UI elements it offers have the same level of functionality to make it worth looking into.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
3rd line.
Apparently, I didn't state that very well: I meant that having to toy directly with registers is NOT a problem... like you must in assembly.
(Ala ax/bx/cx/dx -> eax/ebx/ecx/edx -> rax/rbx/rcx/rdx or any HIGH order vs. LOW order parts of them)
I.E. - Yes, you can, but the language is VERY fast, as is (and much of its sourcecode, which Delphi comes with source to its controls/vcl, has that in them ala "inlined asm" etc. (but using it yourself via the asm directive HAS changed from how it used to be done in older versions of Delphi as I understand)).
* Hope that clarifies my statement on the 3rd line better... thanks.
APK
P.S.=> Sorry if I didn't state that up to spec etc. (busy day here, people coming & going all day long @ my place) - and they're STILL doing it, lol, man... sometimes? I wish I was on a desert island! apk
I've never learned how to make a tool designed UI properly respond to resizing.
IB (Interface Builder, built into XCode now) is really excellent in this regard. Through a combination of grouping and spring/strut style auto-resizing behaviors you can get UI's to scale almost any way you want.
IB is the ONLY GUI development tool I have ever liked. In every other language I also just did all my GUI programming in code. The reason I like IB is because it's not a code generator, but an object instantiator and freezer.
On the Mac, IB has way more advanced techniques to help with dynamic scaling of interfaces, in part to help with localized interfaces not needing extra work to define.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
"Delphi2010 had some actual improvements, but still no 64 bit support." - by rev0lt (1950662) on Tuesday February 21, @07:11PM (#39118389)
See my subject-line: "It's in there"... & I am currently 'porting' my apps I wrote circa 1997-2006 or thereabouts in 32-bit Delphi (versions 3/5/7), and it's a snap using it.
---
"The last significant version of Delphi probably was v7, in 2002. " - by rev0lt (1950662) on Tuesday February 21, @07:11PM (#39118389)
It was excellent, & it WAS my fav. Delphi build environment/IDE, until XE2 that is... I can even do C++ Builder in it too!
APK
P.S.=> Not only will it produce "standalone portable executables", but also .NET runtime driven ones as well, and it can produce programs for Apple platforms as well as win32/64 also (& I wish they'd bring back Kylix CLX so that Linux would be in the mix as well as it used to be in Kylix/Delphi/C++ Builder - it'd be a PERFECT dev. toolset then (and be like RealBASIC is, and produce executables for "the big 3" in Win32/64-Apple-Linux)... apk
Qt.
COBOL
If it is a prototype and you don't want to be a developer then I would recommend Qt in Gambas. You cast all caution to the wind, even program willie nillie, if so inclined. Declare variables? Not use globals? Require modues? Pffft! Wimps. Those guys are all probably still sitting in car seats! http://gambas.sourceforge.net/en/main.html