

Ask HN:I want to build desktop application but dont know which direction to go - umenline

Hello HN 
let me first say , i dont like web apps i never did 
i really want to build good old fashion desktop application.
what do you think is there a place for this kind of application this days?
======
pornel
Just a note: from Mac user perspective cross-platform often means second-rate.

Portable toolkits just copy superficial look of Cocoa controls, but don't
mimic "feel" part correctly. Not all mouse interactions and keyboard shortcuts
work "right".

And even if your toolkit uses real Cocoa controls, there's still problem of
window layout and UI design patterns, which aren't portable to Mac OS X (e.g.
non-destructive preferences don't have OK/Apply buttons, drag'n'drop is
expected almost everywhere, OK/Cancel are in reverse order than on Windows,
etc.)

e.g. do you know OS X has separate clipboard for search fields? Cmd+E/Cmd+G. I
like it and use it, but it doesn't work in "fake" Mac apps.

If you want to make _good_ portable app that supports Mac well, then separate
UI from the rest of the application and on Mac add Cocoa GUI (you don't need
ObjC, you can use PyObjC or MacRuby).

~~~
cjg
The OP didn't say he wanted to make a cross-platform app or a portable one.

~~~
VBprogrammer
He also didn't specify which platform he was targeting. A lot of the points
pornel mention apply equally to GUI toolkits running on Windows or Linux. You
sacrifice some control in order to get cross-platform compatibility (as you
have to do with certain CSS / Javascript elements). Java is probably the worst
of all worlds in terms of the look and feel of its de-facto standard GUI
library.

~~~
umenline
well cross platform is a dream , but i do know its so hard when you working
with desktop app. my toolkit is Qt. i guess first i will go with windows.

------
davidw
As someone with a fair amount of Tcl and Tk experience, I think the web is the
way to go. It's simply faster and cheaper to develop and deploy with. Fix a
bug? All you have to do is upload a new version to the server.

Here's patio11 on desktop vs web:
[http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-
web-a...](http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-web-apps/)

That said, Tcl and Tk are a fun, fast way to hack up little applications if
you need something local.

~~~
LeBlanc
Or you could do something like the Notch, the developer of Minecraft did. The
MineCraft desktop app checks with the server to update itself every time it
loads. This is very common for multiplayer games. Giving your desktop app the
ability to store data on the server is also a great idea.

I really like the idea of desktop/web hybrid apps like Dropbox. You can get
the best of both platforms.

------
SandB0x
Most definitely. Eg I'm not happy to rely on having a constant internet
connection for editing photos or doing some writing while on holiday, and even
with a connection in both these cases the desktop options are much better.

I recommend learning the QT framework. It's cross-platform, unlike .NET, has
very well designed libraries, and bindings for a bunch of languages if you
don't want to write in C++.

It's nice if a desktop program syncs to an online service though (eg Picasa).

~~~
dazzawazza
+1 for QT. I picked it up for the first time a few weeks ago and built a basic
spotify clone[1] in one week for fun. Very nice API and as close to native
look as I have ever seen from a XP framework.

I think there is a place for native applications, as long as you've got a
niche that needs filling. The web isn't the answer to everything.

[1] -
[http://www.executionunit.com/blog/2010/metalify_spotify_clon...](http://www.executionunit.com/blog/2010/metalify_spotify_clone.html)

~~~
umenline
I did something similar , You-tube player for private use i hate the you-tube
personal channel , and all its music editing features very useful to
me...using Qt.

------
gregschlom
I definitely recommend learning C++ and Qt. At first, I was quite afraid of
learning C++, it's supposed to be a difficult language, without all the
niceties of python, javascript, php and the like.

But actually Qt really adds a great abstraction layer that makes coding in C++
as enjoyable as Java, for example. Easy string manipulation, easy iterators,
the signal/slot stuff is awesome, and the community is _great_.

Yes, HTML5 is here, but there is still a lot of stuff that you can't do with
HTML/CSS/javascript. So my advice is: go for it. You won't regret.

------
arethuza
Unfortunately the answer is "it depends":

\- What kind of application do you want to build?

\- What OS platforms will the users have?

\- What experience do you have or is there a platform you particularly want to
learn?

If you can narrow it down to one platform then most of these have pretty
decent tools - if you want to support multiple platforms then things get
interesting.

------
djhworld
What operating system do you want to develop for? I've found desktop
application development quite enjoyable on OSX when using things like
InterfaceBuilder and Objective-C, and those skills can be transferable for
iPhone development too!

~~~
umenline
i guess windows maybe mac latter

------
sown
You can Visual Studio Express for Windows for free now days. XCode for Mac is
free, as is the GNOME environment for Gnome/Linux systems. I would suggest you
look for tutorials surrounding those environments.

------
statictype
There are many toolkits to use. It depends on the type of app you're writing
and who's going to use it and what platform its for.

Is it mainly for Windows users? Might want to go with .NET. There are free
versions of Visual Studio available for this purpose.

Is it for Linux systems? GTK with C/Python or Qt with C++/Python maybe a
better option. All the libraries and compilers are free. Mono (an open source
.NET implementation) also works well on Linux.

If its for the Mac then Objective-C + Cocoa is the de facto method. The IDE,
Xcode is a free download from Apple. You can also get python bindings for
Objective-C.

If it has to run on many platforms then you might want to think of a cross-
platform toolkit.

If the program has a very simple UI, then you can probably get away with using
wxWidgets or QT with Python.

If UI is more involved, then you will probably want to write the front-end for
each in it's own native framework.

------
catch404
I've been using wpf and xaml for making nice quick applications for windows. I
need a dsl for the xaml or a ruby wrapper for the API - Which I'm currently
investigating. Too bad mono doesn't support wpf.

I've been looking at shoes by _why with some interest but think a dsl/swing
(jvm) comboo would be the quickest and easiest cross platform option.

------
ericz
.NET and C# make developing Windows desktop apps ridiculously easy. There is a
.NET API for just about everything and you can get started for free with
Visual Studio Express.

As a bonus Visual Studio has awesome auto-completion features and is a great
WYSIWYG GUI editor.

MS really ought to pay me =p

~~~
mahmud
What if he wants to run his app on Unix and Mac?

Qt via Python or Ruby bindings might be the best way to go.

~~~
poloniculmov
Qt via Mono on Unix/Mac and WPF on Windows. As long he uses MVP or some other
pattern to decouple the presentation layer from the business layer. Sure it
will be harder to maintain 3 apps, but having apps that follow the platforms
guidelines is worth it.

~~~
andrewf
I think doing more than one UI upfront is an optimistic mistake.

Pick a primary platform and optimise it. Maybe do a less-than-awesome port, if
you're eager. If, down the road, your experience with the primary platform
leads you to believe there is a large market for the taking, then you can
weigh up improved sales versus development effort for a truly excellent
implementation on another platform.

Regarding Qt on the Mac: I've done it before. It would be my less-than-awesome
port. If you're not using Cocoa on the Mac, making a UI on par with a "native"
app is a sisyphean task: you're fighting uphill and you never quite get there.

------
cammil
What do you guys think of java as a language for desktop applications? I have
a web app that I already use java for, and it could use a tiny desktop app to
leverage it. I say tiny because all it will do is receive web requests which
inform the user that they should visit the main web app.

~~~
mahmud
Java is excellent for cross-platform desktop GUI. Eclipse's SWT looks perfect,
but careful not to get dragged into their elaborate "Rich Client Platform"
crap. If you can manage to use _just_ SWT, you will win.

Having said that, Swing, the offical GUI toolkit can be themed to look quite
native. And Java Webstart is an absolute win: one-click deployment on every
platform.

~~~
Sandman
Eclipse RCP can be challenging, and, quite frankly, overwhelming when you
first start using it, but after a while, you begin to see the benefits that
you get from developing your application on the RCP instead of doing it as a
raw SWT app. That being said, there are situations where the RCP's provided
solution to a problem you're having may be overly complex, and you're better
off rolling your own solution.

------
borisk
IMHO there are a lot of opportunities in the desktop market. Most competent
developers moved to Web apps and Linux long ago and left the Windows desktops
lacking in many areas.

If your looking to low level system stuff or prioritize app speed have a look
at Visual C++. Even Google used if for Chrome.

The most advanced UI framework I've seen is WPF. It has GPU acceleration;
compatible, but separate tools for developers and designers; lots of 3rd party
controls; can run in browsers through Silverlight.

Both these unfortunately come from Microsoft. You can get the dev tools for
free or at low cost through programs like BizSpark.

~~~
lelele
> If your looking to low level system stuff or prioritize app speed have a
> look at Visual C++. Even Google used if for Chrome.

As an experienced C++ developer I recommend you avoid C++ at all costs, even
if you are an experienced C++ developer. A blend of C and another high-level
language is a better choice.

~~~
umenline
Im using at my day job Qt with Visual studio express 2008 and its a great
combination for developing. im doing small tools. its very fast with Qt

------
Tichy
Personally, since I come from a web dev background, I would probably look into
Adobe Air or some of the frameworks that allow you to wrap up web applications
into desktop apps (don't recall any names atm, but I think Mozilla has one?).

~~~
superted
You might be thinking about Mozilla Prism (<http://prism.mozillalabs.com/>)

------
jon914
There's still a place for desktop applications. It depends upon what you're
building and whether that's a fit for the medium.

For example, I've built game creation tools. These are better suited for the
desktop because of the complex interactions and user data involved.

There are plenty of startups that have built their software partially or
wholly on the desktop such as Dropbox and Unity3D. For small developers,
building desktop clients to popular web services like Twitter is another
relevant path to take.

~~~
umenline
Hi this is exactly what i was thinking and your application looks great! i
once was thinking about the same idea . even using the Scratch method for
conditions and loops wish you best lock ! what framework/tools do you use?

~~~
jon914
Thanks! The application is actually written in Java and uses Swing.

Not the sexiest thing to use, but Swing is very customizable, and I wanted to
ensure that it was cross-platform from the get go. In addition to that, we
also have an ActionScript-based player/engine and invoke the Flex SDK to
compile auto-generated AS3 source into a SWF.

The app also communicates with a server-side webapp to provide the resource
sharing, so we've got a little bit of everything in our technology stack. ;)

~~~
umenline
hey , i just want to say the gui of your application is looking great and it
is fast! how did you do that ?

------
tjansen
Depends a bit on what you mean with "a place". There's certainly a market, at
least when you write a Windows application. I guess most people don't care
much where their application runs, at long as it help them to do their work
(or have fun, depending on the app) and the app does not cause any trouble.
The latter is the reason why traditional desktop apps are slowly disappearing,
being replaced by web apps or at least controlled environments such as iOS's
app store.

~~~
dasil003
_The latter is the reason why traditional desktop apps are slowly
disappearing_

Is it? I thought the main reasons were: no install, cross-platform, data
available everywhere.

~~~
tjansen
Installing and data availablity are a huge part of what I meant with
'trouble'.

------
hcho
No, there is not. Unless of course, the application has a very good reason to
be a desktop app.

Downloading and installing adds extra friction to your distribution, which you
can live without for most of the cases.

------
herval
Looks like no o e mentioned Adobe Air. Quite easy to pick up and allows you to
go cross platform with much less hassle than java, for instance (the runtime
is smaller/easier to autoinstall, etc)

------
astrofinch
If you're sympathetic to claims that you should build for the web, you might
want to try Pyjamas. It advertises being able to simultaneously target both
the browser and the desktop.

------
16s
I suggest trying wxwidgets or FLTK. And yes, desktop is not dead, far from it.

~~~
umenline
i really like the FLTK framework , but its looks not so pretty as a gui

