December 2nd, 2011, 08:21 AM
Help in deciding on approach/language for Web App
I have a personal project - a web application I wanted to develop - but I'm confused on which route to take.
I know a little programming, and have dabbled in Pascal, C, HTML, CSS and Actionscript (for Flash). And I don't mind learning a new language (PHP, Python, mySQL, etc). I am not under any time constraint.
About the App:
The best I can describe it is as a kind of expert system (but not AI) that needs to find the best workflow for a process, given a set of initial and final parameters. E.g. a 'capsule' of data must pass through many 'tools' or 'environments' to reach a desired output - something like a very complicated car wash.
Let's say there are many tools that can be used at various stages in the process. I have estimated there are at least 500 tools as of now, and it is bound to grow in the future as newer tools are introduced. Existing tools will also have version updates.
Each tool, on average, has at least 100 properties that define the tool. Some of them have as high as 1000 unique properties. Some of these tools are linked to each other - e.g if one tool is selected, there are only n tools that can correspond to it for the next step in the process. I also have the problem of 'matching' the tools for analysis. E.g. Tool A might have only three fixed rpms - 100, 200 and 500, but Tool B might have rpms from 20 to 2000. I'm not sure how I can construct a database without spelling out each number, as in the example above.
The total number of tools needed for the process can be defined at the beginning, however, it will change as the application becomes more complex in the future. I plan to address every contingency in the process. The idea is - if the user inputs the initial parameters and the desired outcome (another set of parameters), the app must find the 'best' path - sort of like a decision tree. The best path can be the fastest, cheapest, etc. I would like the user to choose what is best for him/her.
Unfortunately, parameters might change, relationships might change (but not regularly) - the 'rules' I will be using might be revised for better accuracy in prediction.
I also need to track each user's path and solutions' for future reference (but no personal details except username and email address for logging in). Maybe when the app is up and running, I'd like to make it more democratic, with users contributing to refining the logic/rules involved.
If possible, I would also like the app to output a graphical flowchart at the end showing the workflow with all tools grouped in an easy to understand layout.
1. Do I need a database?
2. If yes to the first question, will the app be better served with a relational DB like mySQL or an Object database?
3. Can I make this work with PHP+AJAX+CSS+mySQL? Is there a better alternative? I would prefer free programs - I intend this app to be free, but I might want to make it commercial later on. I need this program to run on any device that can connect to the internet, including tablets and mobiles, etc.
4. What is the best way to increase speed, if speed is a concern? I will be using a shared hosting provider.
5. Do I need a framework?
6. Which is the best way for me to begin, considering I might have to scale it up in the future - with more data, more users simultaneously logged in, and more algorithms? I don't want to change solutions later on - if I have to invest time and effort I'd rather do it the right way from the beginning.
I would appreciate any help in getting started. Thank you in advance.
Last edited by kbs_01; December 2nd, 2011 at 08:28 AM.
December 2nd, 2011, 04:26 PM
1. Sounds like it.
2. Relational databases are better for most applications.
3. You could.
4. One way to increase speed is to not use a shared hosting provider. Another is to improve the efficiency of your code; but obviously you can't really do that until you have code to improve.
5. A framework is not a requirement but might be helpful.
6. If you've never programmed a major application before then your solutions are going to have to change to some degree as you learn. Even people who have years of experience and know exactly what they are doing end up having to make changes as they go and new design requirements are uncovered.
This sounds like a complicated project for someone who only knows a little programming. It's hard to give specific advice regarding design without specific requirements and constraints. Even small seemingly unimportant details can radically affect the way a system is designed (details that those not familiar with programming might be inclined to omit, which is one reason why even experienced programmers find themselves making changes to the design as they go).
December 2nd, 2011, 10:47 PM
Thank you, E-Oreo for taking the time out in replying. I understand it is a complex project. I have to build a simple version and keep adding complexity as required. As you might have guessed, it's a niche web app.
Originally Posted by E-Oreo
What I do know at this point is that as more and more data and possibilities are added, the permutations and combinations will grow, and more calculations will be required. I will probably also have to precompute algorithms (with C or C++?) to make it faster. Once the program is up and running, I will shift to a dedicated server, but I have to do things one baby step at a time.
One of the main areas I'm stuck in is whether to use a relational DB or Object DB. I've read a lot of posts and articles on both but am still confused. Maybe I should stick to mySQL.
If it's PHP, then should I go with Symfony or CodeIgniter, and mySQL?
If it's Python, then should I go with Django (for relational), or ZOPE (for object DB)?
May I ask what you personally prefer to tackle projects of this complexity? Thanks again for any support. Appreciate it.
December 2nd, 2011, 11:33 PM
I would use PHP and MySQL without hesitation, not because they have any special capabilities for handling a project like this, but because I am so proficient with them.
CodeIgniter is a nice framework.
December 3rd, 2011, 01:54 AM
Thanks! That was helpful.
Originally Posted by E-Oreo