views:

276

answers:

9

I plan to start a mid sized web project, what language + framework would you recommend? I know Java and Python. I am looking for something simple.

Is App Engine a good option? I like the overall simplicity and free hosting, but I am worried about the datastore (how difficult is it to make it similarly fast as a standard SQL solution? + I need fulltext search + I need to filter objects by several parameters).

What about Java with Stripes? Should I use another framework in addition to Stripes (e.g. for database).

UPDATE: Thanks for the advice, I finally decided to use Django with Eclipse/PyDev as an IDE. Python/Django is simple and elegant, it's widely used and there is a great documentation. A small disadvantage is that perhaps I'll have to buy a VPS, but it shouldn't be very hard to port the project to App Engine, which is free to some extent.

+4  A: 

Since you mentioned python, I would suggest looking into Django. You may need to look harder for hosting options, however...

Justin Ethier
I quite liked django, what development environment for python/django is good?
fhucho
There are a few low-cost hosters around that do good Django hosting. I'm happy with Webfaction. Also, Django projects can be hosted inside AppEngine.
chryss
There was recently a thread on the Django Users mailing list about just this (development environments). Lots of great options turned up: http://groups.google.com/group/django-users/browse_thread/thread/8bcbb9a64d2fd5b9/2387b6393c66dcb4
David Winslow
I finally decided to use Django with Eclipse + PyDev as an IDE.
fhucho
A: 

I've been kick App Engine around a little bit, and so far the DataStore is pretty quick... there is a bit of a learning curve compared to SQL, but I've had no real issues. I'm not sure about fulltext search, however filtering is simple, you would just run each filter one at a time.

class DBModel(db.Model):
    field1 = db.StringProperty()
    field2 = db.StringProperty()
    field3 = db.IntegerProperty()

GQLObj = DBModel.all().filter('field1 =', 'Foo')
GQLObj = GQLObj.filter('field2 =', 'Bar')

As far as hosting, with GAE I'm not sure you even get a choice, I know you can register your own domain with google though.

Timbermar
A: 

I don't think the datastore is a problem. Many people will reject it out of hand because they want a standard relational database; if you are willing to consider a datastore in general then I doubt you will have any problems with the GAE datastore. Personally, I quite like it.

The thing that might trip you up is the operational limitations. For example, did you know that an HTTP request must complete within 10 seconds?

What if you get 50% of the way through a project and then find that a web service you are using sometimes take 15 seconds to respond? Now you are toast. You can't pay extra to get the limit raised or anything like that.

So, my point is that you must approach GAE with great care. Learn about the limitations and make sure that they will not be a problem before you start using it.

qwavel
I agree with the sentiments about the datastore.However... request handlers have 30 seconds to complete. Not 10.
Greg
@Greg: qwavel is referring to outgoing HTTP requests (urlfetch), as clarified by his following paragraphs.
Nick Johnson
+3  A: 

Is App Engine a good option? I like the overall simplicity and free hosting, but I am worried about the datastore (how difficult is it to make it similarly fast as a standard SQL solution? + I need fulltext search + I need to filter objects by several parameters).

App Engine is nice. It supports Pyhton or Java (with some limitations), it provides free hosting for small needs (rare, at least for Java). But I wouldn't expect the exact same performances than with dedicated servers, the cloud is about scalability, not performance (you won't always get the fastest response time for a single hit; however, GAE would handle gazillions of concurrent hits without any problem while your servers would be on fire). But this scalability is not without cost and if you don't need it, the development tradeoffs may be too much troubles. And also note that it does not support full text search out of the box (what an irony), you will have to use extra tooling.

What about Java with Stripes? Should I use another framework besides Stripes (e.g. for database).

I like Stripes very much. I love its conventions over configuration approach, it's a very elegant and simple framework (but still powerful). Definitely not a bad choice. For the persistence, if you go for GAE, you will have to use JPA or JDO. If you don't, it's at your discretion (although I would go for JPA).

See also

Pascal Thivent
Perhaps you can elaborate on what the practical difference is between performance and scalability, here? And why precisely App Engine would have poorer performance than a dedicated server?
Nick Johnson
@Nick I won't spend much more time on this question but I tried to clarify a bit (I'm just not going to explain why I think that a scalable architecture is not the same as one based on optimizing speed).
Pascal Thivent
95% of the things I do in GAE have fantastic performance. But there is probably some truth to the scaling element for the last 5%. Is it fair to say that datastore writes are more expensive in a distributed architecture?The flip side of this of course is that the distributed environment provides performance optimizations for other aspects of your app. So it depends a lot on the type of app you're building.
Greg
+2  A: 

As many things in life, this depends on what your goals are. If you intend to learn a web framework that is used in corporate environments, then choose a Java solution. If not, don't. Python is certainly more elegant and generally more fun in pretty much every way.

As to which framework to use, django has the most mindshare, as evidenced by the number of questions asked about it here. My understanding is that it's also pretty good. It's best suited for CMS-like web sites, though - at least that's what it's coming from and what it's optimized for. You might also have a look at one of the simpler, nimbler ones, such as the relatively new flask. All of these are enjoyable, though they may not all have all features on AppEngine.

loevborg
+1 for flask -- an excellent microframework!
Sean Vieira
I like Java because there is a suberb IDE for it (Eclipse) and that it's a static language, which has several advantages especially in larger projects. But I went for Python + django - Python's more fun as you say and I really like django too.
fhucho
A: 

It depends on your personality. There's no right answer to this question any more than there's a right answer to "what kind of car should I drive?"

If you're artistic and believe code should be beautiful, use Rails.

If you're a real hacker type, I think you'll find a full-stack framework such as Rails or Django to be unsatisfying. These frameworks are "opinionated" software, which means you have to really embrace the author's vision to be most productive.

The wonderful thing about web development in the Python world is there's several great minimal frameworks. I've used several, including web.py, GAE's webapp, and cherrypy. These frameworks are like "here's a request, give me a string to serve up." It's raw. Don't think you'll be stuck in Python concatenating strings though, God no. There's also several excellent templating libraries for Python. I can personally recommend Cheetah but Mako also looks good.

darkporter
A: 

Google App Engine + GWT and you have a pretty powerful combination for developing web applications. The datastore is quite fast, and it has so far done the job quite nicely for me.

In my project I had to do a lot of redesigning of my database model, because it was made for a traditional relational database, and some things were not (directly) possible with the datastore.

GWT has a fairly moderate learning curve, but it gets the job done very well. The gui code is really easy to get started with, but it's the asynchronous way of thinking that's the hardest part.

As for search I don't think it's supported in the framework. Filtering is possible on parameters.

There are some limitations to GAE, and you should consider them before putting all your eggs in that basket. The fact that GAE uses J2EE distribution standards makes the application very easy to move to a dedicated server, should the limitations of GAE become a problem. In fact I only think you would have to refactor the part of your code that makes the queries and stores the data (which shouldn't be much more than 100 lines).

Jes
For a python port of GWT take a look at Pyjamas (http://pyjs.org/). It compiles Python code to Javascript, or you can run the code natively on the desktop.
Dave Kirby
A: 

I've built several apps on GAE (with Python) over the last year. It's hard to beat the ease with which you can get an app up and running quickly. Don't discount the value in that alone.

While you may not understand the datastore yet, it is extremely well documented and there are great resources - including this one - to help you get past any problem you might have.

Greg
+1  A: 

Kay and Tipfy are excellent Python framework choices when you target specifically GAE. Kay is modelled after and similar to Django, but is better suited to GAE.

Onestone