ADVOCACY: "every single other Python program ever written uses imports"?

324 views
Skip to first unread message

Mariano Reingart

unread,
Jan 6, 2011, 7:12:44 PM1/6/11
to web...@googlegroups.com
Reading the reddit discusion, specifically the post of jacobian (one
of the Django creators) that says:

"I know that in your mind skipping imports is about "not repeating
yourself". But look guys: every single other Python program ever
written uses imports. By not including them you've basically made sure
that learning web2py is different from learning Python."

I would say this is incorrect, at least there are other kind of python
programs that doesn't use imports, see PL/Python, the PostgreSQL
Python procedural language:

* Executes codes (uses PyEval_EvalCode, ops, doesn't import it...)
* Doesn't need to import obvious modules (like plpy, the
PostgreSQL/Python interface)
* Uses global variables to handle persistent data storage (GD, SD,
TD: global, sessión and trigger dictionaries) and pass function
parameters! (like web2py controllers...)

Here is a minimal example:

CREATE FUNCTION say_hi (your_name TEXT) RETURNS VOID AS $$

plpy.notice("hello %s" % your_name)

$$ LANGUAGE plpythonu;

SELECT say_hi('mariano');

See the PostgreSQL documentation for detailed explanation of this "issues":
http://www.postgresql.org/docs/9.0/interactive/plpython-funcs.html

For Technical details refer to source code:
http://doxygen.postgresql.org/plpython_8c.html


With this I only want to help to demystify this negative appreciation
about web2py, surely there are many more examples like this as Python
is a dynamic language specially designed to execute and evaluate code
(i.e., OpenOffice/GIMP/etc. uses similar approach)

Anyone have more examples?
What do you think?

BTW, about the Python Zen rule "Explicit is better than implicit",
there is also "Although practicality beats purity.", and Python is a
practical language, or do we import len, list, dict...

>>> len(dir(__builtins__))
135


Best regards,

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com

Jonathan Lundell

unread,
Jan 6, 2011, 7:47:28 PM1/6/11
to web...@googlegroups.com
On Jan 6, 2011, at 4:12 PM, Mariano Reingart wrote:
>
> With this I only want to help to demystify this negative appreciation
> about web2py, surely there are many more examples like this as Python
> is a dynamic language specially designed to execute and evaluate code
> (i.e., OpenOffice/GIMP/etc. uses similar approach)
>
> Anyone have more examples?
> What do you think?
>
> BTW, about the Python Zen rule "Explicit is better than implicit",
> there is also "Although practicality beats purity.", and Python is a
> practical language, or do we import len, list, dict...
>
>>>> len(dir(__builtins__))
> 135

Indeed.

Moreover, while it's not best practice, it's certainly common enough to see

from somewhere import *

which "magically" injects a bunch of names into the namespace.

Your suggestion that web2py simply has a small set of built-ins strikes me as right on.

mikech

unread,
Jan 6, 2011, 8:17:29 PM1/6/11
to web...@googlegroups.com
That conversation is over my head in a lot of ways.  Despite my time on this list I'm a rank beginner in Python and Web2py.  I've never been confused about the lack of imports in some programs, or the source of db.xxx vs. dict(), but then I'm reading the book :)  I can't imagine anyone using web2py alone to learn python, though admittedly it seems to make the process much less painful.   I sort of view web2py as a gateway to learning Python in that it gives me an understandable framework from which to launch my investigations.  I haven't looked too long at Django, but I don't think that you could say the same about it re: learning Python.



rochacbruno

unread,
Jan 6, 2011, 10:05:32 PM1/6/11
to web...@googlegroups.com
Nobody advise me that I need to write some PEP proposal to be elegible to join the Python Conmunity.

Lets start to write a PEP right now. LOL

pbreit

unread,
Jan 7, 2011, 12:13:56 AM1/7/11
to web...@googlegroups.com
When I started learning Python the excessive importing made no sense to me. It seemed like something that obviously the computer should figure out (isn't that what computers are good at?). If it would make people happy, I suppose we could add "from glon imprt web2py" (or whatever) to every file.

That said, I can understand that perhaps explicit impeding cold have perfomanxe advantages (does it?) or that there is some perceptual value to explicitness,

cjrh

unread,
Jan 7, 2011, 3:02:17 AM1/7/11
to web2py-users
On Jan 7, 2:12 am, Mariano Reingart <reing...@gmail.com> wrote:
> "I know that in your mind skipping imports is about "not repeating
> yourself". But look guys: every single other Python program ever
> written uses imports. By not including them you've basically made sure
> that learning web2py is different from learning Python."

Excessive desire to see all import statements comes from (OCD) fear.
Fear leads to hate. Hate leads to the dark side :)

My 2c is that guys like Jacobian are really, really scared of web2py,
and want to kill it now before it grows bigger. Otherwise, they
wouldn't go out of their way to write these huge posts about it.

VP

unread,
Jan 7, 2011, 3:18:55 AM1/7/11
to web2py-users
Jacobian made a few bogus statements. One is about imports.

In fact, you don't need to import anything to use Python globals or
primitive data structures. Why? because those primitives structures
are so useful and often used that they are automatically imported for
use.

This is conceptually similar about the Web2py primitives. These
primitives are so often used that there are automatically imported.

Another bogus statement is about web2py is harder to learn. Now.
Jacob is a very smart guy with proven records. But he doesn't have a
record of being a teacher, one that Massimo has. I think it is this
experience that Massimo understands better what it is easy or
difficult for beginners to learn. Personally, I have two Django books
in my bookshelf, but I eventually gave up Django to look for other
options that did waste my time. A little more objective, if people
pay attention to the tweets, there are lots of beginners who love
web2py and find it so easy to learn.



The most outrageous thing that comes out of Jacob and some other folks
is this mentality that "Python experts will look down to you if you
use web2py" or "sure, beginners love web2py because they are
beginners". These guys seem to have no clue about the increasingly
pervasive nature of computing in society today. There are many very
smart and intelligent "beginners" who know little about web frameworks
or even Python. They simply look for tools to develop their ideas.
In fact, you see many scientists and researchers who write programs
and develop webapps (in particular). My thinking is in the short
future many more (smart) people who will be writing programs,
naturally. They will look for tools that in the easiest manner
facilitate the creation of what they want to do.

It is very unfortunately that these young and smart guys are trapped
in their narrow world. So much group-think. So narrow-minded.

My advice again is simply to ignore them. As I said in a previous
post, as long as you mention Flask, Django in the same breath as
web2py, it's going to be a negative experience.







puercoespin

unread,
Jan 7, 2011, 5:15:25 AM1/7/11
to web2py-users
> Indeed.
>
> Moreover, while it's not best practice, it's certainly common enough to see
>
>         from somewhere import *
>
> which "magically" injects a bunch of names into the namespace.
>
> Your suggestion that web2py simply has a small set of built-ins strikes me as right on.

For exemple

from gluon.tools import *

in db.py.

:)

Anthony

unread,
Jan 7, 2011, 10:11:38 AM1/7/11
to web...@googlegroups.com
+1

Jonathan Lundell

unread,
Jan 7, 2011, 10:36:19 AM1/7/11
to web...@googlegroups.com

Exactly right. I've removed a few of those, but it's tedious work.

I've been using pyflakes as a quick check on my Python coding. Pyflakes is very handy, but it's also fairly simpleminded. If you say "from gluon.tools import *", it doesn't look in gluon.tools to see what that might mean; it just turns off its search for undefined symbols. So to get its benefit, you have to fix the import *.

For the same reason, a lot of my code starts out with:

if False:
import request, response, session, T, (etc)

OTOH, pyflakes has built-in knowledge of built-in Python globals.

One of the things that the web2py-imports discussion tends to miss, though, is that the web2py "globals" exist precisely because they're *not* globals--they have request scope, not global scope. They can't be imported (in a straightforward way, anyway), and it would be a PITA to have to pass them around everywhere. That would have been an alternative strategy for web2py: every argument list starts with the request-global, which would include all that stuff.

Bruno Rocha

unread,
Jan 7, 2011, 10:40:41 AM1/7/11
to web...@googlegroups.com
After being offended by web2py being in Pycon, they made a major attack on reddit, raised a bunch of lies. Alarmed against web2py on twitter (they managed to enter to the top tweets) and this created a certain discomfort.

Some of my clients (two of them) called me asking for explanations about it. (Interestingly, after my explanation they seem much more confident)

Moreover two new possible new clients came to me today (one by experts4solutions), one of them commented about the topic and the tweets, so it awakened interest to evaluate web2py to a new small project.

A company that offers online training came to me asking me to submit a web2py training to their program,  they think web2py is trendy and many people are talking about it on the web, then it is a good time to offer training.

thanks to @jacob, @armin, @GrahamDumpleton and @benbangert and others. They promote web2py!

After that:

@jacob decide to escape from threads (leaving unanswered questions)

@Mike slept upset


and @armin still wants to propose a PEP which tends to remove the execfile() statement from Python2.x language. LOL



I love this community... :)

Please: "Don't call me Pythonic" I never wrote a PEP.. LOL

Luther Goh Lu Feng

unread,
Jan 7, 2011, 10:55:36 AM1/7/11
to web2py-users
Gosh I am glad I can share about web2py in with my country's php,
django and rails programmers without all this nonsense.

On Jan 7, 11:40 pm, Bruno Rocha <rochacbr...@gmail.com> wrote:
> After being offended by web2py being in Pycon, they made a major
> attack on reddit, raised a bunch of lies. Alarmed against web2py on
> twitter (they managed to enter to the top tweets) and
> this created a certain discomfort.
>
> Some of my clients (two of them) called me asking for explanations about it.
> (Interestingly, after my explanation they seem much more confident)
>
> Moreover two new possible new clients came to me today (one by
> experts4solutions), one of them commented about the topic and the tweets, so
> it awakened interest to evaluate web2py to a new small project.
>
> A company that offers online training came to me asking me to submit a
> web2py training to their program,  they think web2py is trendy and many
> people are talking about it on the web, then it is a good
> time to offer training.
>
> thanks to @jacob, @armin, @GrahamDumpleton and @benbangert and others. They
> promote web2py!
>
> After that:
>
> @jacob decide to escape from threads (leaving unanswered questions)http://twitter.com/#!/jacobian/status/23138026796355584
>
> @Mike slept upsethttp://twitter.com/#!/zzzeek/status/23160805851668480
>
> http://twitter.com/#!/zzzeek/status/22788155665031168
>
> and @armin still wants to propose a PEP which tends to remove the execfile()
> statement from Python2.x language. LOLhttp://twitter.com/#!/mitsuhiko/status/23082854590185472
>
> http://twitter.com/#!/mitsuhiko/status/23089568890753025
>
> I love this community... :)
>
> Please: "Don't call me Pythonic" I never wrote a PEP.. LOL
>
> <http://twitter.com/#!/jacobian/status/23138026796355584>--
> Bruno Rochahttp://about.me/rochacbruno/bio

Philip

unread,
Jan 7, 2011, 1:17:32 PM1/7/11
to web2py-users
> These guys seem to have no clue about the increasingly
> pervasive nature of computing in society today.  There are many very
> smart and intelligent "beginners" who know little about web frameworks
> or even Python.  They simply look for tools to develop their ideas.
> In fact, you see many scientists and researchers who write programs
> and develop webapps (in particular).  My thinking is in the short
> future many more (smart) people who will be writing programs,
> naturally.  They will look for tools that in the easiest manner
> facilitate the creation of what they want to do.

I just want to second this point. I fit this description. I'm a
business guy, and no part of my job description would mention setting
up databases or writing software, but often software is a way to
increase efficiency dramatically, even if it's just a VB script in
Excel to automate some repetitive or complex task. I recognized that
my team would benefit a lot if we had a gold copy of certain data in a
database accessible to everyone (with normal CRUD features and some
canned ways of presenting it). In the past, I would have thrown
together a MS Access DB, but I realized that a web-based app would be
far better, and that the web frameworks out there would make that
equally as easy to put together. I took some CS classes in college
(15 years ago) and wrote a decent amount of code back then (Fortran,
Lisp, C) but had never used Python nor had I ever done any web-related
development (heck, I even had to brush up on HTML!) before deciding to
set this up.
After looking around at frameworks (with the most time spent on Django
including some initial app prototyping), I chose web2py. It was a no-
brainer, because it was very easy to get started with, and yet as far
as I can tell, there is nothing that I cannot do in web2py that I
could do, or could do easier, in any other framework. I taught myself
Python to use web2py, and I put together an app that we now use in
production in our firm. It was a nights and weekends project, and it
took longer than it should have because of my inexperience, but in the
grand scheme of things it took very little effort relative to the
value it created.

Web2py is to me the next generation of MS Access, and I mean that as a
compliment. MS Access first opened up the world of database-driven
applications to business people. With Access they could throw
together a simple application to manage a database (CRUD and reports)
without having to hire a developer or wait on their IT staff to write
one. Web2py does the same thing. It is easy enough for a business
user to throw something together very quickly and be up and running
immediately. The amount of development expertise required is
trivial. For a basic app, if you read the web2py book, you don't even
have to understand more than the very basics of python.

For really, big complex apps, there may be some reason that Django is
preferable - I'll leave that to the professional web developers to
figure out the tools they need - but I can't say enough about how
great my experience has been with web2py, as a non-developer looking
for the "tools that in the easiest manner facilitate the creation of
what I want to do" (to use your words). I just needed to get stuff
done, and web2py worked.

Philip Kilner

unread,
Jan 7, 2011, 4:06:36 PM1/7/11
to web...@googlegroups.com
Hi Philip,

On 07/01/11 18:17, Philip wrote:
> Web2py is to me the next generation of MS Access, and I mean that as a
> compliment. MS Access first opened up the world of database-driven
> applications to business people. With Access they could throw
> together a simple application to manage a database (CRUD and reports)
> without having to hire a developer or wait on their IT staff to write
> one. Web2py does the same thing. It is easy enough for a business
> user to throw something together very quickly and be up and running
> immediately. The amount of development expertise required is
> trivial. For a basic app, if you read the web2py book, you don't even
> have to understand more than the very basics of python.
>

+1

I'm database developer (going back to DataEase for DOS and FoxPro, and
the IBM S/26) in need of a data-driven front end, and I see web2py as
the perfect tool for me. I have no desire to tinker /inside/ web2py - I
just want to use it to develop apps.

Rather than competing with Django /et al/, which are defined as much by
a culture as the technology, I'd like to see some advocacy to promote
web2py to people who simply aren't in a position to use Django, but who
can get up to speed with web2py very easily.

The comment earlier about Massimo's approach being informed by his
teaching experience seemed very sharp to me.

> For really, big complex apps, there may be some reason that Django is
> preferable - I'll leave that to the professional web developers to
> figure out the tools they need - but I can't say enough about how
> great my experience has been with web2py, as a non-developer looking
> for the "tools that in the easiest manner facilitate the creation of
> what I want to do" (to use your words). I just needed to get stuff
> done, and web2py worked.
>

Just so.

--

Cheers,

PhilK

Michele Comitini

unread,
Jan 7, 2011, 4:45:26 PM1/7/11
to web...@googlegroups.com
I think the most misunderstood fact with web2py is that web2py
implementation is improving every day,
because of TOP-DOWN approach choosen by Massimo.
What does that mean? If someone finds that something has big impact
on perfomace, web2py gets changed to better and the users can upgrade
safely, because
the external simple API of the framework does not change.
So critics are welcome, the more the better.

"exec ccode in ...." is not injection? It is IoC for sure.
http://en.wikipedia.org/wiki/Inversion_of_control

where is it deprecated? I cannot read it.
http://docs.python.org/reference/simple_stmts.html#the-exec-statement


remove "exec ... in ..." from python? On what basis? if you want a
static language go out of python. I wonder what GVR thinks about that.

The only good reasons at the moment to change that are:
1) exec statement bug
2) drastic performance improvement

Neither is true AFAIK, but maybe web2py's IoC will change, for testing
and debugging purposes, this is free (not as a beer) software indeed,
so a new solution would be adopted if one comes with a better one
instead of talking about plain aesthetics, which is a good thing
although it is not alway viable in this world. But if that would
happen fear not, we won't notice, we will not have to change our code.

mic/mcm

2011/1/7 Philip Kilner <phil....@gmail.com>:

cjrh

unread,
Jan 8, 2011, 7:31:38 AM1/8/11
to web2py-users
On Jan 7, 11:45 pm, Michele Comitini <michele.comit...@gmail.com>
wrote:
> I think the most misunderstood fact with web2py is that web2py
> implementation is improving every day,

Do you really think the designers of other web frameworks do not
understand how web2py works? They definitely understand, and they
probably understand better than you or I. The problem is that web2py
design is different from their own design. Because we operate in the
same space, they try to show why their decisions are better. To be
fair, Massimo has been doing exactly the same thing by comparing w2py
versus the others for years. Quid pro quo. If we get to say why ours
is better, then they get to do likewise.

However, these subjective discussions simply don't matter. The things
that they complain about are *fundamental* to how web2py works, and
that is why these topics are selected for ridicule. It is
fundamental to w2py that controllers are executed by the framework
(and IMO its best feature, and why I chose it over Django). Whether
this approach is better or worse than any other framework cannot be
determined theoretically, it has be be shown in practice, and we just
haven't been seeing the kind of problems that detractors have been
suggesting. And really, it's been getting ridiculous. Jacob KM
suggesting we're "not a python framework" and inviting us to "join the
party". Such incredible arrogance.

web2py doesn't have to win reddit arguments. All web2py has to do is
support the creation of many awesome websites. We only need to
maintain focus on the core design criteria that have already been in
place since the start. We do not need to have a huge community. We
do not need to be the next big thing. We do not have to slice toast
and make coffee or rear ponies.

Just be the best at making web app creation fast, easy and secure.

Anthony

unread,
Jan 8, 2011, 9:12:55 AM1/8/11
to web...@googlegroups.com
+1

On Saturday, January 8, 2011 7:31:38 AM UTC-5, cjrh wrote:
On Jan 7, 11:45 pm, Michele Comitini <michele....@gmail.com>
wrote:
> I think the most misunderstood fact with web2py is that web2py
> implementation is improving every day,

Do you really think the designers of other web frameworks do not
understand how web2py works?  They definitely understand, and they
probably understand better than you or I.   The problem is that web2py
design is different from their own design.  Because we operate in the
same space, they try to show why their decisions are better.  To be
fair, Massimo has been doing exactly the same thing by comparing w2py
versus the others for years.  Quid pro quo.  If we get to say why ours
is better, then they get to do likewise.
 
Good point, though it's not exactly the same. Massimo may claim that the web2py way is better (actually, he doesn't really make that strong claim -- rather, I think he would claim that there are trade-offs in design and that he and many others prefer the trade-offs web2py has made while still respecting that others may prefer different trade-offs). But I don't think I've seen Massimo claim that the design decisions of frameworks like Django and Flask are actually bad or harmful. In fact, he usually has quite positive things to say about other frameworks. The guys on reddit, on the other hand, are claiming that web2py's design decisions are outside the bounds of acceptability (at least within the Python world) and therefore merit either correction or ostracism (in fact, Jacob is not the first guy I've seen try to expunge web2py from the community by claiming it's not really a "Python" framework and doesn't use "real" Python). Basically, Massimo is saying Django, Flask, etc. are all good frameworks that you'll probably be happy with, but web2py is even better, and you should give it a try. The other guys are saying Django, Flask, etc. are the only "real" Python frameworks, and web2py is harmful (technically, and to the community) and to be avoided at all costs (until it completely changes its fundamental design distinctives and does things the way they do).
 
Cheers.
 
Anthony

Anthony

unread,
Jan 8, 2011, 9:34:18 AM1/8/11
to web...@googlegroups.com
On Saturday, January 8, 2011 9:12:55 AM UTC-5, Anthony wrote:
+1

On Saturday, January 8, 2011 7:31:38 AM UTC-5, cjrh wrote:
On Jan 7, 11:45 pm, Michele Comitini <miche...@gmail.com>
 
Also, you are right that many of the web2py detractors do probably understand at least at a high level "how web2py works," but I've been very surprised at how frequently these supposed experts exhibit complete misconceptions about web2py. Most of them have never used web2py to build a real application, and many of them have probably never even downloaded it and played with it (or read the docs, or looked at the source code). I am by no means an expert and am relatively new to both Python and web2py, and yet I routinely spot (and point out) very basic errors these guys make in their understanding of web2py. If they can't be bothered to comprehend the very basic things that even I know, their opinions about web2py really can't be taken seriously. The problem isn't that they don't know web2py, it's that they're willing to make such bold proclamations about it despite their ignorance and lack of experience with it. The fact that web2py has been around for several years and has a growing, active, and highly satisfied user base provides them no clue that perhaps their hypothetical concerns don't play out in reality.
 
Anthony

pbreit

unread,
Jan 8, 2011, 9:53:18 AM1/8/11
to web...@googlegroups.com
I think we could do ourselves a favor by taking the feedback seriously and not being so dismissive of criticism. There are pros and cons of the various approaches and we happen to think Web2py's design decisions have good merit. Hiding behind DRY for the importing situation is not productive. The reality is that it is a relatively non-standard approach but one that we think makes good sense and is certainly "real" Python.

It's fine to get the word out but let's not look like trolls on every Python framework thread. There is still a dearth of significant Web2py-based sites. Let's work on that.

Anthony

unread,
Jan 8, 2011, 10:09:30 AM1/8/11
to web...@googlegroups.com
On Saturday, January 8, 2011 9:53:18 AM UTC-5, pbreit wrote:
I think we could do ourselves a favor by taking the feedback seriously and not being so dismissive of criticism. There are pros and cons of the various approaches and we happen to think Web2py's design decisions have good merit. Hiding behind DRY for the importing situation is not productive. The reality is that it is a relatively non-standard approach but one that we think makes good sense and is certainly "real" Python.
 
You are right, though I think we have indeed adopted the very position you state above. What is being dismissed are not the reasonable criticisms or concerns that some people make, but the arrogant and over-the-top calls to drive web2py from the "Python community." We should always listen to feedback and be willing to learn from others.
 
Anthony

Thadeus Burgess

unread,
Jan 9, 2011, 5:41:37 AM1/9/11
to web...@googlegroups.com
I believe this is why web2py receives much criticism. I speak from experience in using (and contributing to) web2py.

web2py cannot share objects in an importable namespace with other python applications ecause of its design architecture. This is an absolute requirement for most "enterprise" or "real world" applications.

Two examples. (however there are many more than I have time to iterate over)

Exhibit A: Multiple websites that share some or all database models and utility functions. A public site may use only some of the models needed for say user signup, and a dashboard that may be IP restricted for internal use only.
Exhibit B: Must share database models with stand alone python programs. A long running process that sits in the background, but needs access to the database.

web2py cannot do either of these, and unless web2py uses import it will never be able to. Currently, to accomplish exhibit A or B, code spaghetti-fication must occur, and maintainance of model definitions in multiple places now becomes a royal pain in the ass. That or you must use some of the other many (unprofessional, hard to maintain) hacks just to work around this limitation.

With other frameworks, such as flask/sqlalchemy it is a python program like anything else. You can do "from dashboard.models import person". You only maintain one model, but you can use it in all applications that may need it, since you can easy_install your site into a virtualenv.

Another issue that I have ran into more often than not is the limitations in the web2py core. Certain things (like SQLForm, auth, sessions, etc) are great for rapid prototyping, but when you actually need to do something "real" with them, they just get in the way. For example, a form that has a subform or a built in subtable (like a form you might build in Access), or cookie stored sessions for scalability. Again, these are just simple examples when the real world implementation is much more complex.

Another problem that the current design of web2py inherently brings is it enforces a functional programming style. You can use classes, but then you end up having to throw pointers around of your basic objects (db, session, etc). Using classes the way they are designed to be used with a normal object lifecycle (imported, instantiated, etc...) is extemely difficult to do in web2py. There is nothing wrong with functional programming, but the code can easily become a mess even if you are a good programmer.

Just to give an example of how amazing a class based system is, I re-wrote appadmin for Flask+SQLAlchemy+WTForms in 80 lines of python code, with pagination, searching, creating, updating, and deleting. Think of how maintainable that is. I don't even know what is going on inside of web2pys appadmin... I try to stay away from it *wink*.

One of the biggest arguments vs other frameworks is the speed of development time of a web2py app vs other framework. I disagree with this, I am usually able to add new features to my flask apps much faster than I can in web2py. This is probably due to the simplicity of other frameworks and not having to fight with anything being pre-determined for me (such as database tables forced to lowercase).

As long as all your doing is building a simple website that will be completely 100% self contained into web2py and it isn't expected to grow over 10K lines of python code, web2py is great.

If you are doing something that requires code to be shared, and has lots of complex models and a large codebase that will need to be maintained by other people than yourself in the future... I would pick Flask.

I speak most of this from real world experience. I work in both web2py and flask every single day and know the strengths and weaknesses of both.

I just wanted to take the time to chime in as to why some feel they way they do with web2py... maybe they just don't know how to explain it, or don't want to take the time to explain it.

--
Thadeus

Massimo Di Pierro

unread,
Jan 9, 2011, 10:28:14 AM1/9/11
to web2py-users
This is my prospective: Everything has a trade off. We want the
ability to edit files via the web interface and see the effect of the
change immediately, even on a production system using apache. That is
not possible using imports. Django and Flask provide a module reload
mechanism. That works only if/when they use a python based web server
(not production solution) and it can lead to problems.

If we did not execute models/controllers at every request something
like this:

db.define_table('table',Field('field',default=request.now))

would not work any more because the define would be executed only once
before the http request exists. request.now would have to a lazy
object (thus introducing complexity) or moved to every action that
needs it (this introducing repetition).

Thanks to your work (Thadeus) about template.py and the new dal, most
of web2py modules can now be used with other frameworks.

If you do not want the web2py way (i.e. models/controllers are not
modules), you can still use all of the web2py helpers, validators,
dal, template language, etc with the dispatcher of any other
frameworks.

The current design is not an accident. It was a choice to
differentiate from what others do.

This forum is about web2py and web2py is defined by its current
design. Changing that design would break backward compatibility and it
would not be web2py any more.

As I said multiple times, there may be a web3py and it may very well
have a different architecture. Although for me the issue is not
whether to use exec or not. The issue is whether to use Python at all
given its scalability problems on multicore and the lack of a proper
garbage collection. I am very much open to a discussion on web3py (it
is inevitable since python 3.x broke backward compatibility anyway)
but I am not sure it belongs to this mailing list.

Massimo

pbreit

unread,
Jan 9, 2011, 12:24:49 PM1/9/11
to web...@googlegroups.com
So I guess the question remains: is Web2py suitable for large, public web sites or does it max out as a rapid prototyper and smaller "intranet" type sites?

Massimo Di Pierro

unread,
Jan 9, 2011, 12:44:33 PM1/9/11
to web2py-users
I do not think this discussion has anything to do with it. This is a
scalability issue and web2py scales as well as any of the other web
frameworks. The issue is whether people like or not the programming
style. If you like it you use web2py. If you do not like it you use
something else.

Bruno Rocha

unread,
Jan 9, 2011, 12:50:32 PM1/9/11
to web...@googlegroups.com
2011/1/9 pbreit <pbreit...@gmail.com>

So I guess the question remains: is Web2py suitable for large, public web sites or does it max out as a rapid prototyper and smaller "intranet" type sites?


http://www.web2py.com/poweredby (this site has not every web2py powered site around the globe, people needs to update)

To point few of these sites:
SahanaEden, RadBox, TenthRow, Ru.ly, Campus Online, Latinux, Paraiba Brazilian State Government, NatalAnimal (My non profit e-commerce like website), 

The list above is not about prototype or intranet websites.

Also, at my tiny company ( blouweb.com ) we are working only with web2py development, in one year of existence we are making our lives working only with web2py (developing and training)

Besides the public websites and intranets, we are developing some corporate systems. Some of them are in production already, for more than 6 months and we are having a great experience.

I also working a lot giving web2py classes (in-company) , and for example one of the biggest state-company of Brazil are getting trained and developing internal solutions with web2py.

Now, we are in the way to sign a contract to develop a financial system for one of the São Paulo stock-exchange companies.

I think web2py is very good for 'Corporate' and 'Enterprise', but perhaps we need to be less pretentious and change the slogan for something like:

web2py - the getting things done web framework

Kuba Kucharski

unread,
Jan 9, 2011, 12:55:53 PM1/9/11
to web...@googlegroups.com
Bruno, Pbreit, the discussion was starting to get really interesting,
please don't let it go OT

David Marko

unread,
Jan 9, 2011, 1:38:24 PM1/9/11
to web...@googlegroups.com
I really reminds me situation I started to work with PlayFramework a few years ago. Its excelent JAVA web framework, but its done in completely(internaly) different way than how the rest of the JAVA frameworks being  done(using standard servlet concept). The developers of Play! have a nice section on their site(under FAQ) called: "You guys don’t even know how to program in Java..." and they are trying to explain here why they did many things in a very different way in many areas that others describe as it is against a "good JAVA practices"


David

VP

unread,
Jan 9, 2011, 2:46:54 PM1/9/11
to web2py-users
>>I think web2py is very good for 'Corporate' and 'Enterprise', but perhaps we
>>need to be less pretentious and change the slogan for something like:

>>web2py - the getting things done web framework

I know much less about web2py than most people here, but I feel
compelled to add an opinion. There are many different things that are
touched upon in this thread.

First is the slogan of web2py. I think the word "enterprise" is a
mistake. But at the same time, the attacks that center around this
word is very unjustified. For the sake of comparison, let's take a
look at the Django's slogan: Webframework for perfectionists with
deadlines. Now, you can easily attack this slogan in much the same
ways people have attacked Web2py. But most people don't do that.
Massimo is not great at PR, so his PR approach is easily prone to
attack. But at the same time, a slogan is just a slogan. And yet
people unfairly focused on a little slogan repeatedly. That's utterly
unfair.

Second, let's talk about what it means to be "enterprise". I think a
many people tend to make this type of reasoning: (1) I am doing real
work, (2) this tool isn't quite the best thing for this work, (3)
therefore, it is not "real" (enterprise). I do not agree with this
line of reasoning. A tool, any tool, has its limitations and within
its boundary of effectiveness it can be as real as any other tool.
Drupal, for example, has been used extensively in many big companies
to do real things. And yet, Drupal, at its heart, is a CMS, and
therefore is not as flexible as something like a webframework. As
such the domain of effectiveness of a CMS is smaller than that of a
webframework. But when people need to build CMS, Drupal is very
effective and *real*.

The right word, I think, is "generality". A full stack webframework
like web2py is more general than a CMS like Drupal. Thus, it can do
more things. Something like Flask is not a full-stack framework, as
such, it makes fewer assumptions, and it is more general than a full-
stack framework. At the same time, it doesn't have as much
batteries. And many will find a full-stack framework more useful in
that regards.

So to say that because you can not import pieces of a model into an
app, therefore web2py is inappropriate for enterprise, is not right.
I think many enterprise apps do not have to have highly connected
models. There are many other dimensions that are important with
respect to what it means to be enterprise, such as scalability,
maintainability, etc. And I think that web2py still needs to be
proven in this regards.


And third, there's a criticism that the internals of web2py is a
mess. That might or might not be true. There are a few things I'd
like to say in this regards. First, from a user's point of view, this
criticism is not very interesting. But this criticism implies
indirectly a few things, such as there are many bugs; or it's not easy
to add features to web2py. From an outsider's point of view, this is
what I see. In terms of man power, web2py has fewer than Django. I
think Flask also has a decent number of developers working on it.
Web2py has mainly Massimo, who wears many hats; plus maybe 2, 3 other
people putting a lot of time into it. And yet, you look at features,
there's not much Django has that Web2py doesn't have. Another thing
that adding features to Web2py is quite quick. This is what I often
see around here. When someone has an idea, Massimo often does it
right away. Recently, it took a relatively quick effort for Massimo
(and probably a handful of other people) to rewrite DAL
completely. Now, going back to the criticism that Web2py's
internal is real bad. I am very reluctant to believe that is the
case, given all of these I have seen and experienced around here.


Having said this, I don't think I am a web2py zealous fan. Trust me,
if there are better frameworks, I'd jump in a second. I have perused
the Flask/Bottle/Django documentations countless of times, and each
time, I just decided they do not yet have what I want. Further,
there are a few things I still wish web2py do better. Frankly, one of
the design decision that I do not care for too much is the web IDE and
backward compatibility (which I think is useful but should not be an
absolute).

I am looking forward to web3py. I hope Massimo starts this right
away, drawing lessons from web2py and other frameworks.










Thadeus Burgess

unread,
Jan 9, 2011, 3:13:59 PM1/9/11
to web...@googlegroups.com
I think Massimo hit it on the spot. Its about coding style. Most of the people I see giving web2py criticism are young. Considering that beginning in about 2001 colleges starting only teaching java and handing out degrees, it might be safe to assume that most of these guys knew Java as their first language.  Not to mention that someone who went to school for 4 years for software engineering will have been uniquely tuned to a specific coding style (object oriented).

I like web2py, and I do have uses for it on a daily basis to accomplish real world work. I use web2py alot to provide a web based access to automating statistical analysis. Usually these type of apps need to change often and can even change drastically, which is why I like web2py for them.

--
Thadeus

pbreit

unread,
Jan 9, 2011, 4:27:43 PM1/9/11
to web...@googlegroups.com
I don't buy the problem with integrating enterprise systems. Components should be more loosely coupled.

I do wonder about the balance between the features that make Web2py great for rapid prototyping vs what you would need to do "in the real world". But it seems to me that the productivity features are not required and that Web2py offers sufficient flexibility.

I'm not experienced enough to weigh-in on the functional vs object programming discussion.

Massimo Di Pierro

unread,
Jan 9, 2011, 4:35:20 PM1/9/11
to web2py-users
About "enterprise":

For me "enterprise" always meant "business and non-profit" as a way to
emphasize "non-profit" since that is what I have major interest in. It
looks like many people read "enterprise" as large and bloated
businesses.
I have nothing against changing the slogan (and we have have a poll
like we did for the logo) but I stand by original intention: web2py
targets businesses and non-profits as opposed to the occasional
hacker. I claim this because our goals are backward compatibility,
easy of development and security. Other frameworks like those that
require programming at the WSGI level and release a new version under
a different name every six months, seem to target python experts with
above average hacking abilities.

I also want to challenge the notion that I am the only web2py
developer. If you look at commits in the last 6 months, there has been
way more code contributed by Jonathan, for example, than by me. The
new template.py was written entirely by Thadeus. A lof of the code
from contrib was created by Mariano. It is true that I have know
web2py longer than other and I may know some inner working details
better than other, but for every web2py module, there is somebody who
know is at least as well than me if not better.

Massimo

pbreit

unread,
Jan 9, 2011, 4:37:35 PM1/9/11
to web...@googlegroups.com
Interesting points. One thing I don't understand is the objection to the web IDE since it is 100% optional. Could it be presented differently so that people understand that instantly?

I like the commitment to backwards compatibility. Are there any good examples of things that would be worth changing or adding that would break backwards compatibility? A subtle but significant benefit of backwards compatibility is that it forces restraint and good design.

pbreit

unread,
Jan 9, 2011, 4:49:45 PM1/9/11
to web...@googlegroups.com
It might make sense to dropt "enterprise" from the slogan. For one, I don't think businesses care much about backwards compatibility. My experience in the enterprise was that vendors were constantly churning out non-backwards-compatibile updates and customers were routinely several versions behind.

I also don't think "enterprise" suggests "non-profit". Perhaps the opposite, even.

Finally, I think it's fine to attract the "hacker" audience.

Tom Atkins

unread,
Jan 9, 2011, 4:56:02 PM1/9/11
to web...@googlegroups.com
web2py - the resilient web framework ;-)

Jonathan Lundell

unread,
Jan 9, 2011, 4:59:45 PM1/9/11
to web...@googlegroups.com
On Jan 9, 2011, at 1:35 PM, Massimo Di Pierro wrote:
>
> About "enterprise":
>
> For me "enterprise" always meant "business and non-profit" as a way to
> emphasize "non-profit" since that is what I have major interest in. It
> looks like many people read "enterprise" as large and bloated
> businesses.

I think that's right, especially in the world of frameworks. The meaning of "enterprise" here has been established (polluted?) by Enterprise Java, which is a large and bloated framework (or pile of frameworks). (Java is the new Cobol.)

I understand what you mean by "enterprise", but it's definitely not what readers are going to understand.

At the moment, I don't have a better idea. But I'm sure we can come up with one.

Mengu

unread,
Jan 9, 2011, 6:17:36 PM1/9/11
to web2py-users
as david said, play! destroyed the traditional java -web app-
programming. it doesn't use servlets so it is extremely flexible. it
doesn't use maven, it uses python. it doesn't use jsp views, it is
using a template system built with groovy, and so forth. there are
lots of people using play!, contributing to play! and supporting play!
they stand for it.

i do not support the elitist criticism on reddit against web2py. these
guys, especially armin*, have a thing against web2py for a long time
now. web2py is not a library, its a platform where and what people
build web applications with. however the criticism by thadeus must be
taken very seriously as he is one of the oldest, most experienced and
top contributed web2py users.

* i like armin's work, especially werkzeug and pygments. however
nothing more.

Anthony

unread,
Jan 9, 2011, 8:36:50 PM1/9/11
to web...@googlegroups.com
On Sunday, January 9, 2011 4:49:45 PM UTC-5, pbreit wrote:
For one, I don't think businesses care much about backwards compatibility. My experience in the enterprise was that vendors were constantly churning out non-backwards-compatibile updates and customers were routinely several versions behind.
 
Maybe they remain several versions behind because they don't want to keep dealing with backwards-incompatible upgrades (i.e., skip a few versions and just deal with an occasional big incompatible change). The cool thing about web2py is you can take advantage of every new feature that comes out (every couple weeks) without breaking your programs.

Michele Comitini

unread,
Jan 10, 2011, 5:34:26 AM1/10/11
to web...@googlegroups.com
From my perspective, web2py style is very much influenced by its
functional approach and the usage of functors. This gives a great
amount
of tools to new comers, but can be problmematic with experienced
programmers that have been working with a COO (class object oriented:
read java)
language.

I have a bit of experience with OO (truly object oriented) languages
besides python, such as lisp or scheme so I feel web2py confortable.
But with java experience and being used to the define Interface,
define Class, define Subclass of Class, instanciate Object and so on,
I understand that it is not
clear how and where you can do that. Maybe it is just a matter of
documentation, a "Library Reference" distinct from a "Tutorial" ?

Other python frameworks stick to COO so maybe more people feel
confortable, and have a API or Library Reference?

mic

2011/1/10 Anthony <abas...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages