1

I currently have a .NET app that I want to convert to being cross platform, as a growing number of my users want a Mac version. Since this forum doesn't seem to like questions that are "what languages are suitable for these requirements", I'll focus this question on Python as the language of choice. Will Python be a good fit for the requirements below? Drawbacks?

  • Desktop app - many of my users do not have an Internet connection where they use the software, so a web app will not do
  • Object oriented
  • Store data in a relational database as well as configuration files
  • Reporting engine, preferably using templates
  • Network connectivity - Some users setup multiple workstations sharing a single data file
  • Support RS-232 serial port communications, read and write
  • Support video capture
  • Play WAV and other sound files
  • Simple app installation - too many of my users are not very computer savvy, so the easier the install the better
  • Be able to implement a demo or time-limited licensing model

I considered Java, but am hesitant being at the mercy of Oracle and many people have had security concerns about the JVM. I also considered the Mono project to keep the app in .NET, but their MoMA utility shows thousands of unsupported items. I really prefer to have just one code base to maintain, instead of one for Windows and one for Mac. Python seems to be what I keep coming back to.

For some background on myself, most of my experience has been with VB, VB.NET, C#, and Java with some dabbling in PHP/Javascript/HTML. All of my desktop experience has been with Windows.

  • 2
    AFAIK Python isn't included in Windows by default - so users would need to install Python in order to be able to run the software on Windows. That being said, (again AFAIK) the installation for Python isn't as 'easy' as others (such as the JRE), and Python is not something a lot of 'ordinary people' know about. Just my two cents - I wouldn't want to install Python just to run one application, if I were a normal end-user. – Chris Cirefice Feb 4 '14 at 20:25
  • possible duplicate of Need cross platform language recommendation for desktop app – gnat Feb 4 '14 at 20:28
  • @gnat - I am trying to focus on if Python will meet the needs of my app, since the powers that be don't like general questions. If you would like to respond to the question, I'd appreciate it. – gpraceman Feb 4 '14 at 20:33
  • 1
    @Chris Cirefice - I thought that I read that you can distribute the Python dlls with the app, so a user did not have to install Python. – gpraceman Feb 4 '14 at 20:34
  • 1
    @gpraceman, you are correct. I didn't even think about that! I would suggest using Mono though, as was suggested by another user in your last question (also linked here). Even though there may be some functionality missing, you can always work around it. In the end, it will likely be much easier to make it Mono-compatible than to rewrite the application entirely in Python. I'm sure there are tools out there that can tell you (if Mono doesn't directly) what the problem areas of the application are, if any exist in your current code base. – Chris Cirefice Feb 4 '14 at 20:52
4

You'd be surprised at how feature rich the python environment is. Going down the list, I'll try and give feedback on each of the points.

  • Desktop app - Yes. You can write applications which require no internet connectivity to function.
  • Object oriented - Big yes. Python supports lots of fun stuff with objects, such as injecting methods into individual instances of classes. You may find some parts less intuitive though, like a lack of a scope, or interfaces.
  • Store data in a relational database as well as configuration files - Yep. You can use databases either locally or through the web. Here's a link to some more info
  • Reporting engine, preferably using templates - A simple google search showed options of varying complexity based on what you need
  • Network connectivity - Yes, networking is fully supported. You can get down to creatig sockets if you want, or use fully formed libararies to do the lifting for you.
  • Support RS-232 serial port communications, read and write - PySerial
  • Support video capture - Video Libraries are an option
  • Play WAV and other sound files - PyAudio
  • Simple app installation - You talked about this in the comments, but you could also look into python eggs as a form of distribution, or .deb packages if you're running debian
  • Be able to implement a demo or time-limited licensing model - This is pretty much just limiting the source code that you provide to them. This is no different than any other language in that regard though.
  • I appreciate your thoughtful and detailed answer. On the desktop app requirement, I would actually love to make it a web app. However, I really don't see many of our users being able to setting up their computer as a web server. Some are really computer challenged. – gpraceman Feb 7 '14 at 21:39
  • Python doesn't have interfaces? The current .NET app uses quite a few interfaces. – gpraceman Feb 7 '14 at 21:49
  • 1
    No, python doesn't have interfaces. If you approach it trying to replicate 1 to 1 your current .NET implementation, you could run into some significant problems. It definitely requires a slightly different paradigm to understand than C# or Java, but it's not so different as to be incompatible! – Ampt Feb 8 '14 at 2:26
  • It does seem to support abstract classes, so not all is lost. – gpraceman Feb 8 '14 at 19:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.