

Ask HN: Recommendations for a desktop app development environment? - nir

We need to build a small downloadable client software to complement our web app. Basically users will download this, install and it will guide them through a series of steps to help them upload certain files.<p>Most of the current solutions in this space use Java applets, which are often not supported by default and thus hard for our users (who are relatively non-technical)<p>Would love to hear your recommendations for a good solutions to this. Ideally we'd like to have one codebase, but having separate executables for Win/OSX/Linux would be fine.<p>Our priorities are as follows:<p>1. The final product should be easy to install for the user (ie not require them to install any additional software)<p>2. Decent looking GUI (doesn't have to be perfectly native looking)<p>3. Quick to develop in<p>4. Ideally single codebase, at least for Win/OSX<p>EDIT: cleaned up a bit and added requirements
======
xordon
<http://en.wikipedia.org/wiki/Java_Web_Start>

Java applications can be launched by downloading a small file (JNLP).

1) Java is required to be installed, but is fairly common already.

2) Decent loooking GUI, it can look a little dated but it works.

3) Java is relatively easy to develop with.

4) Java is cross platform so it will work on Windows/OSX/Linux.

~~~
dkarl
I heartily agree with this for a simple uploader app. The work required to get
a basic version running and ready for distribution is minimal. However, make
sure you test it on several platforms to make sure it looks nice and intuitive
on each one. I have used one or two Swing apps with extremely strange-looking
file pickers that did confusing things like consistently open up to / instead
of to the user's home directory. I've also seen Java Web Start apps that used
the Motif look and feel on OSX! I think things like that only happen if you go
out of your way to screw up, but test to be sure. Avoid silly mistakes like
that and Java Web Start will be just fine for such a simple application, and
much less trouble to package and distribute.

------
wazoox
It depends upon your language of choice; I'd advise you to use a well known
and well supported cross-platform GUI toolkit (by order of personal
recommendation): WxWidgets, Qt, Gtk, Tk, GNUStep,Fltk ... It largely depends
upon your familiarity with the toolkit, the quality of available bindings for
your language of choice, and the importance (or not) of having a nice GUI,
following more or less closely the host system visual guidelines.

Generally I'd naturally go for WxWidgets, which is mature, relatively easy to
use, provides bindings for about any language in common use, and gives a good
look-and-feel and OS integration on Windows, Mac OS X and Gnome/KDE desktops.

Many people (more often Apple purists) will pretend that cross-platform
toolkits are ugly and don't fit well anywhere. That's blatant nonsense, IMO;
nowadays in fact it's quite the opposite, even the old cranky Tk can be made
decent-looking without much work (but good knowledge of its internals).

Java applets are a real problem mostly on windows, because windows hasn't come
with Java pre-installed for a very long time; the JRE is a complete PITA to
manage (long, slow updates about each time you need it...), then Java desktop
apps have pretty horrible startup time and heavy memory usage. Python, or
Perl, or even C/C++/ObjC are probably saner and easier choices overall.

------
flatline3
If your goal is to provide a quality solution for your users, you should be
writing it in the native platform SDKs.

If your goal is to try to save yourself some effort, even though it will
negatively impact your users, then you should use whatever set of cross-
platform tools you can be successful in.

------
andrewf
IMO, if conversion rates are a concern, the need to download a separate
runtime first makes Java, newer versions of .NET, etc non-starters. Note that
Adobe AIR doesn't require this anymore:
[http://www.adobe.com/devnet/air/articles/air3-install-and-
de...](http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-
options.html)

If you're providing a useful tool to already-committed users of your website,
this might not be an issue.

If slightly non-native looks aren't a concern, go with whatever's easiest. I'd
choose Qt/C++, but I'm already comfortable with them. py2exe/py2app are
probably reasonable if you know Python.

Consider outsourcing this if you can. The details will occupy a lot of your
time. For instance: you ideally want both a standard Windows installer (put
together with something like NSIS), and to sign your installer + installed
executable to avoid Windows warning your users that it's probably malware.
That's a day's work for someone who has done it before, probably a week for
you to do it the first time.

EDIT: that said, if you do outsource, beware that most contractors will be
blind to their preferred environment's sore spots. Java+Swing devs don't
account for Swing apps looking like ass, .NET devs don't care that needing to
find, download and install the _Microsoft .NET 4.5 Runtime Environment_ pisses
your users off and hurts conversion rates, etc.

EDIT 2: test, test, and test some more. Just because your app runs fine on
Windows XP doesn't mean it will work fine on Windows 7 64-bit, and vice versa.
If you're eligible (most startups are), it's worth signing up to Microsoft
BizSpark just to get access to ISOs of every Windows version from XP up from
MSDN.

------
lumberjack
Look into Qt. It's cross platform and widely used and I think you can even use
JavaScript if you aren't familiar with other programming languages.

Also personally for a simply program I would not have the users install it. A
self contained executable would be sufficient and less of a hassle. You can
still put store data in the user's own configuration directory.

------
rabidsnail
python + pyside + {py2exe, py2app} is pretty nice, but it still has the
problem of users having to find a file that they downloaded to run it.

If you know what browser they're running the extension apis for firefox,
chrome, and safari give you access to the OS and the ability to run your own
native code.

------
Geee
I'd pick Qt. If you are more familiar with web technologies, the QML based UI-
design comes naturally. If your app is very simple (like static content with
state changes), you can code most of it in QML/JavaScript. It's cross-
platform, quick to develop, native UI, etc.

------
tga
You might have some luck with wrapping a web application into a desktop one by
using something like Tide SDK (formerly Titanium Desktop). You wouldn't get a
proper desktop application, but I think it would definitely work as a file
uploader and it should be easier for your team to manage.

<http://www.tidesdk.org/>

Things like Adobe AIR would serve the same purpose, but the user experience
isn't that great, arguably on the same level with Java if not worse.

------
democracy
Since you already hava java applets, looks like developing it in Java Swing is
a no brainer. Bundle JVM with your application. Yes, it will take ~50 megs in
size, but:

1\. It is cross-platform (yes, to the extent) but much better than anything
else out there.

2\. Pluggable LaF.

3\. Utilize your java skills and knoweldge.

4\. Potentially - easy start on Android.

------
shousper
If it's just for uploading files, I would (if you haven't already) seriously
consider your options for just building it into the web app.

Otherwise, I'd vote Qt/C++ as I've seen quite a few solid, fast apps built on
this platform, though I'm not a C++ dev.

------
sfreiberg
Have a look at Real Studio
<[http://www.realsoftware.com/realstudio/>](http://www.realsoftware.com/realstudio/>).
I've used it for several cross platform projects and it's reasonably
inexpensive and produces decent apps.

------
nir
Thanks everyone for the recommendations so far! Looks like we need to check
out Qt and wxWindows. BTW does anyone have any experience with Adobe Air for
this? (Not sure if still maintained or not..)

~~~
srik
It still is. In fact AIR might be the simplest choice out there, since you can
develop for it with web based technologies. But it is severely restricted when
it comes to accessing native desktop APIs. The default look and feel are very
...web-ish, that might or might not be what you want. One thing for sure is
that the look is pretty consistent as they include a Webkit rendering engine.

My biggest gripe with with AIR is that the user has to install Adobe AIR
before he can install your application and you know how Adobe installations
are.

------
seltzered_
dropbox uses python extensively in their client apps, with some bindings to
native platforms.

Personally, I'm looking into doing c#/mono and either qt or sdl for graphics,
but wouldn't really recommend it unless your app depends on graphics speed.

------
dotomaz
Why not build a web app?

~~~
victorhn
"to complement our web app"

~~~
dotomaz
My bad. But If a app will only be used for uploading files, you can do that in
a web app. Every user would get a personalized link. No installation required.

------
SwearWord
When you say not supported by default do you mean not supported when the user
doesn't have a JRE installed?

~~~
nir
Yes, and it also seems like Java applet support is not switched on by default
in many (most?) modern browsers.

