Building SEO desktop applications, experience from developing RankerX

Discussion in 'Programming' started by neteater, Jan 28, 2017.

  1. neteater

    neteater Jr. VIP Jr. VIP

    Feb 14, 2009
    Likes Received:
    somewhere between CPU an d heat sink
    Home Page:
    Following the discussion here. I think I want share some thoughts about developing desktop applications nowadays.

    When I started developing RankerX, I needed to choose a proper developing platform for the software. I listed down some of the prevalant technologies that are being used to develop desktop applications:

    1) WinForms (with Mono for Linux and Mac)
    2) MFC
    3) Java Swing
    4) Java FX
    5) HTML + JavaScript + CSS

    The criteria for choosing the platform is:
    a) It needs to be portable (be able to run on different popular OS)
    b) It needs to look good
    c) Users do not need to install dependencies in order to run the software
    d) If I want to create a web service based on the code base of the desktop software it must be easy enough.
    e) The software must be strong enough to make it difficult for crackers to crack it.

    So let's go through the list of these technologies:

    1) WinForms. It is not really portable, beause it runs awfully on MacOS (-a). Yes it looks OK because there are quite a lot of UI packages (+b). Users need .NET Framework (-c). And definitely not easy to create a web service from the code base (-d). You can protect the code using obfucator solutions or VM (Themida). Obfuscated code can be decoced by some unpackers. Themida causes instablity. With good tool sets, you can deobfuscate the software like Senuke and Massplanner.
    2) MFC. You need to be proficient in C++. Developing a proper code base is just difficult. And it's not portable so out of the questions for me.
    3,4) Java Swing and Java FX. These technologies are very portable. The software can run on most of the available PC platforms. But the UI looks awful to me. It even doesn't work properly with HiDPI screens. But there is a plus. There is a technology that convert the byte code to binary code. A big YES for me to protect the software from crackers.
    5) Portable, looks really good, no dependencies, easy to use as front end for web services. But you will expose your code. Luckily this is just front end code, there is no application logic in it.

    So after some serious consideration, I chose the option (5). Below is how I did it:

    1) Most of the SEO UI would look like an admin Panel. So you can save a lot of time by going to themeforest to search for Admin Templates based on Twitter Bootstrap. Those themes are highly customizable. Your job is just to copy, paste blocks of components to meet your requirements.
    2) All the interation with users and backend will be coded using Facebook ReactJS. With skills in Javascript, you can have it up and running in just a few days.
    3) With all those UI stuff, where would I put the application logic. Luckily, there are many embedded web servers available in different languages. The web servers need to be portable, which means I am left with two choices: Java and Golang from Google. Both of the options are great, have all the packages to code virtually anything. At the time that I started coding RankerX, Golang is not mature enough (not have enough required libraries), so I ended up choosing Java for RankerX. If I need to code RankerX again now, I would choose Golang because it is very very lightweight.

    So after choosing Java. I needed to choose a webserver. The webserver should be able to use as an embedded one and as a fully fledged web server so if I want to have a hosted version of RankerX, I can easily do that. So I endded up using for its performance and versatility.

    No, when it comes to database to database. I want to have an embedded database that need to be performant and SQL compatible so when I convert RankerX to a web service I can do that easily because the common SQL interface. SQLite is an obvious choice but its concurrency performance is awful. Users can run RankerX with hundereds of threads so it is not suitable. I did some research then chose Berkeley DB with SQL ite interface (you just use SQLlite api and copy the Berkeley DB dll as the replacement for SQLite dll)

    Let me know if you guys have any questions.
    • Thanks Thanks x 1