On Fri, Jul 10, 2009 at 3:40 AM, rb <[email protected]> wrote: > > Interesting post, Yarko. I think Sergey has a good idea of what I'm up > to (gee, I didn't discover/invent this?;-) > > My plan is to use web2py to provide the business logic and db, ie "the > server" functionality, although it will co-exist on the same machine > as the thick client (until the project moves along quite a bit). > However, I distinguish the diff between a thick and thin client not by > where I place the business logic (the only logic on the client is > validation-code) but by what means (or protocol) the high-speed > interaction of the user input/feedback with the business logic takes > place (whew!). For a clarification of that last sentence consider a > simple webpage with an html form. It is the prototypical thin client > because there is (almost) no client side logic. In comes ajax and > google and you have a whole ecosystem of ajax technologies (like > Google Web Toolkit) which can greatly speed up the interaction of the > thin client with the user - using javascript, the web browser can now > run client side logic, yet we still call this a "thin" client - even > if that muddies the waters. A thick client, because it has great > client side code-power, can have all sorts of fancy-shmancy widgets > (we'll ignore Google and their GWT for now), that can interact at high > speed with the user. If this client only does (rudimentary) validation > of input and sends the bulk of the raw data over to the server, where > business logic there processes it then I call this a "thick" client > and (I assert) it is not rally doing any more of the business logic > than the thin client, it's just much faster interacting with the user.
Ok - I understand you now - this is still thin client, I think, at least by what I know, and by: http://en.wikipedia.org/wiki/Fat_client http://en.wikipedia.org/wiki/Thin_client and many other references... Regardless, you are trying to use something other than a browser for the client end (if I recall), so that does deserve some extra discussion, as the view part of web2py assumes an html / xhtml client (that's what it generates to send out the wire, that's the protocol. > > > So, before the advent of ajax, the choice was between simplistic (and > slow) thin clients (that required no deployment) and fast, fancy, > interactive thick clients that required deployment and complicated/low- > level communication protocols (like sockets). Today the choice seems > (to me) to be to use ajax and thin clients. However, I'm new to this > web programming gig (previous experience in CRUD apps and systems > programming) and I worked thru Google's GWT example app on line. > OH_MY_GAWD. You've GOT to be kidding me. To generate an app which has > a textbox and can populate a list from entries in the textbox which > pretends to be a stock ticker with a timer that fires to update > (random) deltas in the stock price involves PAGES of code. Great > heaping GOBS of code. Code of all manner. CSS stuff, XML, blah blah > blah. My old company has a team of twenty writing their ajax/GWT > platform for their app and they've been at it for 6 months now - > they're now getting ready to hand the SDK over to the app > programmers. > > I don't have the resources for ajax thin client programming. I'll > stick with the trials of deploying the thick client. > > But wait, I'll also need to generate lots of "reports" and you could > burn me with fire before I'll slog through using Crystal Reports for > this. No, I can use Web2py and python and code up some html reports > from the db. The entry forms and inquiry forms of the thick client I'm > doing in wxPython will work fine. I can use xmlrpc for the client-to- > svr protocol. Who cares if its grossly slow ? (even though I'm led to > believe that it's not so slow) if it's all on the same machine. > However, the customer wants to see his reports from his browser out on > the 'net somewhere. How can I deliver such? Oh look, there's web2py. > Awesome. In a few short days of reading even *I* can understand how to > hack something together - and I'm just starting (in python). I've > still got to watch out for the speed of communication issue but that's > tomorrow's problem and there won't be a tomorrow if I have to use > ajax. > > But again, I'm kinda new to all this stuff, so I stand to be corrected > if I'm being naive... ;-) > > --- > Rb > > > > On Jul 10, 12:31 am, Yarko Tymciurak <[email protected]> wrote: > > I just have to point this out: by definition (at least some) thick > clients > > operate regardless of being connected to a network or not... > > > > So - here's anther way to talk about that concept; Given a network > > architecture something like this: > > > > Presentatoin > > ---------- > > Logic > > -------- > > Data persistence or device layer > > > > (and we could show this as 4 or 5 layers, but the point remains the same) > > it is a design choice where you put the network boundray. > > > > Presentation > > ------< network >------ > > Logic > > ------------ > > Data Layer > > > > would be what is typically called a thin client: the business and > > engineering logic is on the server; you can't run without it. > > In web2py terms, the models and controllers are the two server layers. > > > > Now, this change: > > > > Presentation > > ------------- > > Logic > > -------< network >------ > > Data Layer > > > > would be the fundamental change that would make for a thick / rich > client. > > > > Now, it can get fuzzy in the details - Flash (for example) is a rich > client > > which runs symbiotically with a "rich" server, BUT for these purposes, a > > flash application in your browser (however rich) does not make for an > > application that can run free of the network. > > > > SO - my point is this: web2py is a server-based application host, for > use > > with what would normally be called thin clients. > > > > That is not to say that you could not have a thick client that would > > interact symbiotically with a web2py server, but I would think that would > be > > through services. > > > > When I read your question, and your statement about thick client, and how > > you get web2py to work with it, I cannot help but wonder - whcih are you > > doing --> building a thick client, or building a web2py application? (Of > > course you could be doing both, but that would be somewhat a special > case, > > and interesting in more details and discussion). > > > > Regards > > > > - Yarko > > > > On Fri, Jul 10, 2009 at 1:55 AM, rb <[email protected]> wrote: > > > > > Thx for the speedy reply. Here's another question: > > > > > 3) Because I'm doing a thick client, it creates db queries (SQL CRUD) > > > which need to be communicated back to the controller which must query > > > the db. The two ways to do this are: > > > > > a) use a SQL statement within a executesql command, or > > > > > b) create a DAL row selection criteria string and a column selection > > > criteria string, send them back to the controller which feeds them > > > through a python eval statement within a DAL function. > > > > > It is always pointed out that b) is dangerous because it's possible > > > for unintended string matter to get fed into the eval - which can reek > > > havoc. However only *my* strings from the client which I have > > > carefully massaged will ever be sent (e.g. I collect the column names > > > from the db beforehand and provide them to the db().select(<fieldnames- > > > here>) statement). Further, if I craft a SQL string then it too can > > > suffer from bad input. I just have to be extra careful when creating > > > the query strings. > > > > > However if I use a) then I lose all of the functionality provided by > > > the DAL. I've never been a fan of SQL and I'd like to avoid it in > > > favour of what the DAL can offer. > > > > > So I've implemented b) and it is working. My questions are: > > > > > i) am I missing the obvious? Is there a much simpler/better way to do > > > this? > > > ii) does the DAL add much overhead? > > > > > On Jul 9, 9:21 pm, mdipierro <[email protected]> wrote: > > > > On Jul 9, 11:04 pm, rb <[email protected]> wrote: > > > > > > > Hi all, > > > > > > > I'm using Web2py to serve a wxPython thick client via XMLRPC. I'm > > > > > currently using SQLite (I like the zero db config ;-) and I have a > few > > > > > questions: > > > > > > > 1) I have missed how to specify table constraints across several > > > > > fields (in SQLite). For example, in a table the primary key > consists > > > > > of two fields - how do I specify that these two fields must > comprise a > > > > > UNIQUE value? In other dbs I could use executesql to just give the > SQL > > > > > commands, but SQLite (unless I'm mistaken) only allows table > > > > > constraints within the CREATE TABLE SQL command. So can this be > done > > > > > in Web2py? > > > > > > You cannot create such constraint database side from > > > > web2py. Your options are: > > > > 1) enforce the constraint at the validators level > > > > 2) create the table outside web2py and set migrate=False > > > > > > > 2) I'm confused as to which models get run when a controller is > > > > > accessed. If I have db.py and uom.py models and I access the uom > > > > > controller, what happens? From stepping thru the debugger I saw > db.py > > > > > get run first, then uom.py and then uom.py again (weird). I've > > > > > simplified things down to just one (db.py) file for now, but I'm > > > > > wondering if the infrastructure's intent is to run all model files > > > > > upon each and every controller access. Oh, my access of the > controller > > > > > is via XMLRPC function (if that changes anything). > > > > > > All of them. Alphabetically. There has been some discussion on > whether > > > > there should be exceptions to this rule. It would be easy to > inplmenet > > > > but there was no consensus on whether an improvement was necessary. > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

