IWETHEY v. 0.3.0 | TODO
1,095 registered users | 0 active users | 0 LpH | Statistics
Login | Create New User
IWETHEY Banner

Welcome to IWETHEY!

New Thoughts...
First off, I've used every single one of these frameworks and all of the technology therein to build applications much less trivial than what he displays.

These are stream of consciousness comments typed in as I watch.

1) He's not a very good Emacs user if he's not using dired to rename directories...

2) Boilerplate is for ze cut and ze paste when you start a new app. Negative points for dinging stuff on it.

3) Hello World is a stupid test. The actual benefits/detriments of a particular platform aren't going to show up until you have a real application.

4) Gee, Zope sure looks whiz bang, dunnit? The reality is that programming applications via a web interface well and truly sucks. More Hello World Is A Stupid Test there.

5) Zero configuration doesn't mean zero configuration. Again, the nifty Rails/TurboGears/Django management scripts are nice, but you don't see what goes on after the fact when you want more pages and so on.

6) Regex URLs do not suck. They kick much ass in a real application.

7) No one uses servlets any more. Use Spring or something. Lame.

8) You can use annotations instead of Hibernate XML.

9) A real J2EE dev environment (ie. not Maven) doesn't require server restarts (or compiling if you're just changing a JSP, for that matter).

10) He doesn't understand I18N in J2EE if he doesn't see how to make it internationalized in an easy fashion.

11) SQL frameworks are great... until you come up against a legacy db that doesn't follow the required naming conventions. Something like hibernate errs on the side of allowing flexibility in mapping that at the expense of lots of config, while something like Rails errs on the side of making new applications easy and legacy integration a PITA.

12) Plone looks great, but repository development can really, really suck (Hi Todd!). You pay for that easy Zopeness in maintenance costs.

13) The Zope object database is great for insular projects, sucks for real databases (like Postgres). Once again, it demos great, but fails in the real world.

14) Autogenerated pages are great for whiz bang tables, but for anything more complex than simple CRUD (which is admittedly a lot) they fail. Or, if you want to do anything slightly non-conformist with your CRUD, they fail as well (to varying degrees).

15) By his standards, none of the templating languages have good integration. Anything that lets you do an if/then statement will look odd. You can't get around this if you're templating. Having said that, the Django and TG templates are much more editor friendly than JSP.

16) I disagree with his documentation comment on Django. Django has practical documentation that actually helps you write apps, as opposed to J2EE or TG.

17) Django has built-in I18N along the same lines as J2EE (and much better when it comes to translations in code, actually). He failed both of these. It's no harder than creating a file with your translated strings and using a slightly different syntax in your code or template.

18) He really should have done a Spring application with a decent build system.

Some final thoughts:

J2EE isn't as bad as he says it is, if you're smart about what you're doing. Use Hibernate and Spring. When would I recommend this? You're in an all Java shop with conservative managers, and/or you have 30-40 people of varying skill levels all working on the same application. Note that Hibernate doesn't work well with Oracle Object Types, however. That's s discussion for some other time.

What you really want is something that does the easy stuff easily, but really buckles down and helps when things get hairy and unconventional.

Ruby on Rails: easy stuff is kinda easy as long as you are working on a new app, the language itself is kind of weird but usable, but it's somewhat unfinished and naive in places.

Turbo Gears: ditto, minus the comment about the language. Python is a joy. YMMV.

Zope: avoid unless you have the most cookie cutter of apps to build. Once you have to start digging into internals and changing things, you lose a lot of time and encounter a lot of headaches.

Django: Easy for easy stuff, and really pretty easy for hard stuff. The regex URLs let you solve a lot of problems you can't with the other frameworks, the templating is refreshingly practical, and there are a number of tools built-in that help you with more complex problems (like the wonderful template tag system -- beats taglibs hands down). The admin interface is sufficiently customizable that you can actually program to it if you want. Not a big deal. He didn't cover generic views or forms; good stuff there too. Django suffers a little from the same legacy DB problem that RoR has, excepting that you can change your models to do Hibernate-stylee remapping via the definitions.

Of all of these, Django is in my mind the best for this kind of development. Ease + flexibility + practicality.

Final final thought: the older I get, the more I come to appreciate explicit coding. I look on magic mapping and hidden functionality with a jaundiced eye, as these things 1) make maintenance (especially other peoples stuff) a pain in the ass, and 2) they make stepping outside the bounds of the magic unnecessarily difficult. XML configs are the worst of both worlds: encoding explicit magic. Yuck.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Other thoughts
I happen to be at the Smalltalk Solutions conference in Toronto this week and attended a talk by the Smalltalk Industry Council - sort of a lobbying group for Smalltalk. Also here were some Ruby types giving "Rails for Smalltalkers". The latter was pretty entertaining as the audience frequently pointed out questionable design decisions and better ways to do stuff. In the end the general feeling was "too many files to keep track of".

A consulting company that does a lot of Smalltalk consulting (along with other kind) shared some of their costing model they use when estimating projects. To develop the model, a bunch of metrics from Capers Jones, Humphreys, SEI, etc were examined (over 4000 projects). A couple things stressed:

1) J2EE is just about the most expensive way to develop a web application that there is, largely due to Java's low productivity. Cost is about 5x a similar smalltalk project.

2) Defects per function point are also pretty high in J2EE (about 3x most anything else).
-----
A couple other observations:
HTML/Code Templates are fragile and produces buggy HTML. Builder pattern document generation is definitely the way to go.

XHTML is a dead end. HTML 5 has traction.

Boilerplate obfuscates

Smalltalk is not a "repository based" system. It is a machine based system. All source code is in memory (or in a swap file but you can't tell). Files are an unnecessary distraction and interfere with refactoring. Which is why things like eclipse work hard at making it look like all your source code is right at hand.

Just because Zope's repository system sucks, doesn't make it representative.

None of the aforementioned systems provide any kind of help for application management/monitoring/hot updating/load balancing/periodic cycling across a fleet of machines.




We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis Aug. 21, 2007, 06:05:11 AM EDT
New Other other thoughts...
Agree on the productivity/bugs/boilerplate observations.

Disagree on templates. I *hate* document generation. I need to be able to see the structure of the document in an editor. Generation obfuscates that, and it's one step removed from string catenation. I've used such systems before and they're ugly. Although having said that, I don't know what you mean by "builder pattern".

On repositories: note that I said they can really, really suck. YMMV. However, I have to say that with Squeak at least the editor is ass. Sorry. Probably personal preference, but it's not Emacs.

On files being a distraction: you and I will disagree on this to the end of time, I'm sure. :-) Don't confuse Java's many nasty files with something like Python, though. Dired is sufficient to manage source files.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Builder pattern
It is detailed in Object Design Patterns.

In squeak, html rendering looks like:

\nrenderContentOn: html\n\nhtml heading level:2; with: 'Title of My Page'.\nhtml orderedList cssClass: 'tab-bar'; with:\n[\n    collection do: \n    [:item | \n        html listItem cssClass: 'tab-item'; with: \n        [\n            html anchor \n               cssClass: 'tab-link'; \n               callback: [self call: (ItemEditor on: item)]; \n               with: item asString. \n        ]\n    ]\n]


html produces objects - one per logical construct ( or tag ), each tag supports several methods for filling in various attributes, plus the with: takes either a String or a Block of code that is executed. The tag object writes the open tag to the stream, executes the block, then writes the close tag. HTML output is simple. All visual appearance is done using CSS. Using this technique, it is simply impossible to produce a malformed document. The code looks something like the HTML, and you can have subcomponents.

As to squeak's editor - it has improved a lot recently and now sports coloring, auto-completion, and of course, refactoring. Plus the monticello version control system is light years ahead of text based solutions. I think someone did emacs and vi key bindings too.

When dissing too many files - I was thinking of Rails. If I want to rename a method, I want the system to understand where all the method calls are and show me so I can update them. Ditto class name, variable names, etc. It just isn't generally there in file based systems although things like IDEA do a fair job of faking it.



We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis May 6, 2007, 07:58:04 PM EDT
Expand Edited by tuberculosis Aug. 21, 2007, 06:05:30 AM EDT
New Not impressed.
Looks like every other one I've seen, other than the Smalltalky bits. I really dislike systems that conflate HTML with code. I find them difficult to debug (where is this HTML coming from?) and difficult to rearrange when I want the page to look like something else.

I don't want it to look "something" like the HTML... I want to look at it and immediately understand what I'm getting. Difficult stuff can be put in a tag and called from the template.

Django's template system has a thing called [link|http://www.djangoproject.com/documentation/templates/#template-inheritance|blocks] as well:

In a parent template:
{% block foo %}This is the default.{% endblock %}

Then inherit that parent, and replace the 'foo' block if you want to specialize:
{% block foo %}This is not the default.{% endblock %}

Very useful. Django templates have the added bonus of being output-neutral: use them for emails, CSV, whatever.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New You still don't get it
First, your example can produce broken html - just forget one of those endblock thingys.

Second, Seaside has components - like widgets. You don't put the whole thing in one page, you have components like WebObjects or conventional GUI's had them.

Then there are halos. You can turn on halos in your page (from a set of links at the bottom) and boxes get drawn around all the component boundaries so you can see what part of the page is produced by which component. When halos are on, there are switches that let you render the HTML source for any PART of the page (or all of it). See below. Clicking the R shows you the Rendered html. S turns on the source view (see lower left).

The wrench opens a source code browser on the component. The eye is an inspector on the image where you can view/edit all the fields in the object. The crayon allows you edit css for that page region. I have no trouble telling where every bit of html comes from.

[image|http://www.inextenso.com/misc/blogs/sw2-halos/1.jpg||||]



We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis Aug. 21, 2007, 06:07:07 AM EDT
New No, I get it just fine.
I just don't agree with you that it's as useful as you seem to think it is, and I dislike the paradigm itself. Don't confuse disagreement with ignorance.

I prefer my HTML widgets to be written in HTML and markup, thank you very much. Not some unrelated language.

And if I forget and endblock, I produce a trace showing me that I forgot an endblock... not broken HTML.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Been there before - maintenance Hell - not going back



We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis Aug. 21, 2007, 06:07:34 AM EDT
New Your experience differs from mine.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Apparently so



We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis Aug. 21, 2007, 06:08:11 AM EDT
New Builder pattern... :-O
The problem with such a builder pattern is two-fold: 1. Can I trust whoever wrote it did everything 'right'? 2. What happens when I need it to do something it can't do - what sort of magic do I do to fix that? OTOH, I'd like see what it is like to actually use.

I've found that real HTML isn't something you want to get too far away from. Creating broken markup is the risk of staying close. But often it's an acceptable risk.

Wade.


Is it enough to love
Is it enough to breathe
Somebody rip my heart out
And leave me here to bleed
 
Is it enough to die
Somebody save my life
I'd rather be Anything but Ordinary
Please



-- "Anything but Ordinary" by Avril Lavigne.

· my ·
· [link|http://staticsan.livejournal.com/|blog] ·
· [link|http://yceran.org/|website] ·

New Two things
First - there' s nothing it can't do. Consider at its lowest level it uses something like

html tagNamed: 'exotic'

which means you can create any kind of tag you like.

Second you have the source code - extend it. There are several extensions floating around already that support things like yahoo web kit, scriptaculous effects, and so forth.

It doesn't take you far from the html however it makes you describe the document structure, not just spew bytes. Which means the structure can be verified and guaranteed.

HTML is a tree, not a stream. I've used many "templating systems". They all suck rocks for maintainability and are terribly fragile. They also don't generally enable component reuse.



We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis Aug. 21, 2007, 06:07:31 AM EDT
New Oi! Even if your screen is six foot wide, not everyone's is!
Could you break that fat-ass innermost line of the loop up into at least two chunks, so the less fortunate among us can read the fucking thread without scrolling hori-fucking-zontally?

Thank you.


   [link|mailto:MyUserId@MyISP.CountryCode|Christian R. Conrad]
(I live in Finland, and my e-mail in-box is at the Saunalahti company.)
Ah, the Germans: Masters of Convoluted Simplification. — [link|http://www.thetruthaboutcars.com/?p=1603|Jehovah]
New Do you have a 1886 Volvo CRT, too?
It looks fine here on my laptop screen at 1400 x 1050. Are you running CGA or something?

;-)

Cheers,
Scott.
New El Cheapo older(ish) HP laptop, 1024 x 768 I think.
And I like to use slightly larger(ish) fonts than most browsers default to.


   [link|mailto:MyUserId@MyISP.CountryCode|Christian R. Conrad]
(I live in Finland, and my e-mail in-box is at the Saunalahti company.)
Ah, the Germans: Masters of Convoluted Simplification. — [link|http://www.thetruthaboutcars.com/?p=1603|Jehovah]
New Yah sure - done



We posture as apostles of fair play, as good sportsmen, as professional knights-errant-- and we throw beer bottles at the umpire when he refuses to cheat for our side...We save the black-and-tan republics from their native [statesmen]--and flood them with "deserving" democrats of our own. We deafen the world with our whoops for liberty--and submit to laws that destroy our most sacred rights...We play policeman and Sunday-school superintendent to half of Christendom--and lynch a darky every two days in our own backyard.


H.L. Mencken, 1914
Expand Edited by tuberculosis Aug. 21, 2007, 06:16:45 AM EDT
New Great, Thanks.
New Document generation in code

Works really, really, really well for XML, and is in fact the only way anyone should ever try to generate XML.

\r\n\r\n

For document formats which don't slaughter all the firstborn children in your city because you forgot to encode an ampersand, Builder-style document generation is often more cumbersome than other solutions, and the time spent fixing any stray errors is often less than the time spent re-jiggering a bunch of document-builder classes when the boss tells you the navigation has to be on the other side, in reverse alphabetical order.

\r\n\r\n

For HTML to be used in production on the web:

\r\n\r\n
    \r\n
  • If you are Amazon, Google, Yahoo, Microsoft, eBay or a handful of other companies: not so bad, but still really cumbersome.
  • \r\n
  • If you are anyone else: blows great big steaming donkey balls. Having to develop the in-code document structures to represent the prototype for tomorrow's meeting, and not having the designer be able to even look at it until you've gotten it to compile and output the right structure will kill the average web shop. Having designers able to mock up the frontend in an HTML-ish language with little or no logic, while programmers build the backend to supply content bits, is really the only way such a shop can survive.
  • \r\n
\r\n\r\n

Let markup be markup. It was designed to be written by humans (or, at least, it was until XML came along and introduced the aforementioned child-slaughtering technique for error handling), and it's pretty good at that.

--\r\nYou cooin' with my bird?
New Thanks.
I thought the idea of doing a "Hello, World" to illustrate the benefits and drawbacks of the various approaches was a little silly (though entertaining). J2EE wouldn't be a [link|http://en.wikipedia.org/wiki/Java_EE_version_history|~ decade-long project] if it was designed to make efficient "Hello, World"s.

I'd like to know how robust the various approaches were when it came time to upgrade the framework (due to security patches, fancy new features, etc.), but that's probably beyond the scope of any multi-framework comparison. A framework that's great at a particular instance, but has too many changes too rapidly that cause existing apps to become non-upgradable is a broken framework.

Cheers,
Scott.
(Who only saw about half the presentation because it was too annoying to watch due to the periodic 1-2 s pauses, but that's probably just my machine at the time.)
New If you only saw half you missed the best parts. :-)
All frameworks will suffer from upgrades.

With Django, it's not even to version 1.0 so pieces are still in flux. What I do right now is symlink a Subversion checkout into my Python lib directory and periodically update it. Nothing drastic has broken yet.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New What was at the end?
I found it halfway through my lunch half-hour and haven't had time to go back to it yet.


BTW mad props to this place for collectively recognizing both the fun and the futility of the demo, and having a reasonable discussion about the reality behind it. If I were actually looking to choose a framework, I'd bookmark this thread.
===

Kip Hawley is still an idiot.

===

Purveyor of Doc Hope's [link|http://DocHope.com|fresh-baked dog biscuits and pet treats].
[link|http://DocHope.com|http://DocHope.com]
New He built an actual application with each.
Trivial, still, and he didn't really know what he was doing with several of the frameworks, but nonetheless somewhat instructional.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Re: If you only saw half you missed the best parts. :-)
\r\n

Nothing drastic has broken yet.

\r\n
\r\n\r\n

Give us time :)

\r\n\r\n

OK, not really drastic, but when newforms-admin lands on trunk a bunch of stuff will change, and Malcolm's Unicode work is going to hopefully make everybody quit bytestrings cold turkey (which, given where Python 3 is going, is good practice anyway).

--\r\nYou cooin' with my bird?
New Django newforms...
What exactly is it? I've yet to find a decent explanation of the changes, or even how to use newforms (if any changes in usage are even necessary).
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Re: Django newforms...

Beginnings of the new documentation are [link|http://www.djangoproject.com/documentation/newforms/|here].

\r\n\r\n

In a nutshell:

\r\n\r\n
    \r\n
  • Manipulators were cumbersome to write, so a declarative metaclass has been introduced for specifying form fields. Form classes can now be declared in much the same way as models.
  • \r\n
  • Separation of several concerns; there's now a "widget" layer which handles the actual HTML presentation, and allows you to interchangeably specify different widget types for different fields in the form class.
  • \r\n
  • Easier usage; instead of the nasty copy-POSTdata-into-dict-and-validate stuff, you can now pass request.POST directly to a form, and forms have an is_valid method carries out validation for you on demand; you can then read known-good data out of the form's clean_data dictionary, which will also have the values converted to appropriate Python types (removing the need for do_html2python).
  • \r\n
  • Custom validation methods can be declared as methods of the form class, taking their names from fields they validate; a clean_foo method will be called to validate the form field named foo, for example.
  • \r\n
  • The internals of newforms work purely with Unicode strings, and we're moving toward having all of Django's internals do that to get out of the hell of "what encoding is this data in".
  • \r\n
\r\n\r\n

So far I'm a big fan of it; I was able to whip up [link|http://django-registration.googlecode.com/svn/trunk/forms.py|a nice little user-registration form] without much code at all, as my first foray into newforms.

\r\n\r\n

The integration into the admin is going to be the next big step; the admin app is getting heavily refactored to take full advantage of newforms and add a lot more flexibility (for example, you'll be able to easily override individual parts of the admin, with full access to the request to do more advanced permissions filtering).

--\r\nYou cooin' with my bird?
Expand Edited by ubernostrum May 5, 2007, 09:21:19 PM EDT
New Good deal.
Doesn't sound like porting to newforms will be a huge concern, either. The concepts are mostly the same; just move the logic somewhere else.

I remember when Twisted went from woven to nevow. What a cluster that was.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Yeah.

The admin migration will involve some code changes because we're taking the opportunity to move admin definitions out of the model classes, but aside from that it's not a terribly difficult change to make, and code ends up a lot cleaner afterwards.

--\r\nYou cooin' with my bird?
New I don't use the admin stuff
So no big deal.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
     Nifty demo of J2EE vs Zope vs RoR vs django vs etc ... - (drewk) - (32)
         WooHoo! J2EE is the way to go! ;-) -NT - (Another Scott)
         Thoughts... - (admin) - (27)
             Other thoughts - (tuberculosis) - (16)
                 Other other thoughts... - (admin) - (14)
                     Builder pattern - (tuberculosis) - (13)
                         Not impressed. - (admin) - (5)
                             You still don't get it - (tuberculosis) - (4)
                                 No, I get it just fine. - (admin) - (3)
                                     Been there before - maintenance Hell - not going back -NT - (tuberculosis) - (2)
                                         Your experience differs from mine. -NT - (admin) - (1)
                                             Apparently so -NT - (tuberculosis)
                         Builder pattern... :-O - (static) - (1)
                             Two things - (tuberculosis)
                         Oi! Even if your screen is six foot wide, not everyone's is! - (CRConrad) - (4)
                             Do you have a 1886 Volvo CRT, too? - (Another Scott) - (1)
                                 El Cheapo older(ish) HP laptop, 1024 x 768 I think. - (CRConrad)
                             Yah sure - done -NT - (tuberculosis) - (1)
                                 Great, Thanks. -NT - (CRConrad)
                 Document generation in code - (ubernostrum)
             Thanks. - (Another Scott) - (9)
                 If you only saw half you missed the best parts. :-) - (admin) - (8)
                     What was at the end? - (drewk) - (1)
                         He built an actual application with each. - (admin)
                     Re: If you only saw half you missed the best parts. :-) - (ubernostrum) - (5)
                         Django newforms... - (admin) - (4)
                             Re: Django newforms... - (ubernostrum) - (3)
                                 Good deal. - (admin) - (2)
                                     Yeah. - (ubernostrum) - (1)
                                         I don't use the admin stuff - (admin)
         He needed to investigate integration - (warmachine) - (2)
             Depends on what you're doing - (admin) - (1)
                 I have back-ends - (warmachine)

Reply with that mantra and - I won't ever be seeing your unread gloat.
133 ms