<br>+1 <br>It think this post should be reworked for the evaluation section.<br><br><div class="gmail_quote">On Thu, Apr 10, 2008 at 9:08 AM, Tim Knapp &lt;<a href="mailto:duffyd@kokorice.org">duffyd@kokorice.org</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">On Thu, 2008-04-10 at 15:21 +0200, Sebastian Ware wrote:<br>
&gt; couldn&#39;t this post be added to the &quot;evaluate&quot; section of the website?<br>
<br>
</div>+1 Great post Martijn!<br>
<font color="#888888"><br>
-Tim<br>
</font><div><div></div><div class="Wj3C7c"><br>
&gt;<br>
&gt; Mvh Sebastian<br>
&gt;<br>
&gt; 10 apr 2008 kl. 15.06 skrev Martijn Faassen:<br>
&gt;<br>
&gt; &gt; Hey Johathan,<br>
&gt; &gt;<br>
&gt; &gt; Welcome!<br>
&gt; &gt;<br>
&gt; &gt; Jonathan Ellis wrote:<br>
&gt; &gt;&gt; Okay, that&#39;s a big subject. :) &nbsp;Let me narrow it down to something<br>
&gt; &gt;&gt; hopefully more manageable:<br>
&gt; &gt;&gt; * Grok offers a lot of building blocks for your web application. *<br>
&gt; &gt;&gt; Grok is informed by a lot of hard-earned wisdom.<br>
&gt; &gt;&gt; What are some specifics? &nbsp;What does Grok give me that, say, django<br>
&gt; &gt;&gt; does not?<br>
&gt; &gt;<br>
&gt; &gt; Big question still! Grok is an integrated megaframework. That is, it<br>
&gt; &gt; features replaceable best-of-breed components (megaframework) while<br>
&gt; &gt; still aims to give you an integrated feel (the parts tend to follow<br>
&gt; &gt; style guidelines and make use of the component architecture).<br>
&gt; &gt;<br>
&gt; &gt; On to your question on what Grok gives you that Django doesn&#39;t. I&#39;m<br>
&gt; &gt; not<br>
&gt; &gt; sure whether Django can add a view to a content object defined in an<br>
&gt; &gt; altogether different package. Grok is built around patterns that let<br>
&gt; &gt; you<br>
&gt; &gt; do this - the component architecture. Extensibility and evolvability<br>
&gt; &gt; through views and adapters and event handlers. In longer-term or<br>
&gt; &gt; larger<br>
&gt; &gt; applications such a general way to extend and evolve and application<br>
&gt; &gt; becomes quite important.<br>
&gt; &gt;<br>
&gt; &gt; Concerning components, I believe we have a lot to pick from. We can<br>
&gt; &gt; still do a lot better in presenting the components that are<br>
&gt; &gt; available in<br>
&gt; &gt; the Zope 3 world, and I don&#39;t promise that all these components are<br>
&gt; &gt; equally mature, equally integrated in Grok (there&#39;s no need for this<br>
&gt; &gt; except to make life easier, though), or that they are easy to adopt,<br>
&gt; &gt; but<br>
&gt; &gt; I&#39;ll give you a grab bag list of some of the things here:<br>
&gt; &gt;<br>
&gt; &gt; * manage part-of-page views, per context object, per view, per area on<br>
&gt; &gt; page, per skin (viewlets)<br>
&gt; &gt;<br>
&gt; &gt; * manage vocabularies (for drop-down lists, say)<br>
&gt; &gt;<br>
&gt; &gt; * display HTML tables<br>
&gt; &gt;<br>
&gt; &gt; * auto-generate forms from schemas, with a wide selection of widgets<br>
&gt; &gt;<br>
&gt; &gt; * integrate with ORMs (Storm, SQLAlchemy)<br>
&gt; &gt;<br>
&gt; &gt; * authentication (basic auth, session auth, pluggable infrastructure<br>
&gt; &gt; on<br>
&gt; &gt; where to get users, etc)<br>
&gt; &gt;<br>
&gt; &gt; * authorization: users, groups, per-user/group per-object permissions<br>
&gt; &gt; and roles<br>
&gt; &gt;<br>
&gt; &gt; * REST, JSON, XMLRPC, WebDAV<br>
&gt; &gt;<br>
&gt; &gt; * i18n, localization of things like date/time, country names, etc<br>
&gt; &gt;<br>
&gt; &gt; * locking and freezing objects<br>
&gt; &gt;<br>
&gt; &gt; * sending, queuing mail<br>
&gt; &gt;<br>
&gt; &gt; * workflow<br>
&gt; &gt;<br>
&gt; &gt; * XML-export and import of schema-driven content<br>
&gt; &gt;<br>
&gt; &gt; * making objects appear in multiple places at once in the traversal<br>
&gt; &gt; hierarchy, including generating correct urls for them and the urls of<br>
&gt; &gt; sub-objects (zc.shortcut)<br>
&gt; &gt;<br>
&gt; &gt; * versioning objects in a version control system (zc.vault)<br>
&gt; &gt;<br>
&gt; &gt; * object indexing and search (grok.Indexes makes this easier)<br>
&gt; &gt;<br>
&gt; &gt; * lucene, xapian indexing integration<br>
&gt; &gt;<br>
&gt; &gt; * relation indexing (zc.relation)<br>
&gt; &gt;<br>
&gt; &gt; * caching, support for protocols like ICP (zc.icp)<br>
&gt; &gt;<br>
&gt; &gt; * unit testing, doc testing, fake browser doc testing, driving<br>
&gt; &gt; selenium<br>
&gt; &gt; from browser doc testing, driving a real browser from browser doc<br>
&gt; &gt; testing<br>
&gt; &gt;<br>
&gt; &gt; These components are are typically packaged as eggs, are doctested<br>
&gt; &gt; (frequently extensively so), and define explicit APIs (using<br>
&gt; &gt; interfaces). They use the component architecture for extensibility<br>
&gt; &gt; points. They share a uniform extensibility mechanism.<br>
&gt; &gt;<br>
&gt; &gt; What we&#39;re trying to do with Grok is to mine this pool of components<br>
&gt; &gt; to<br>
&gt; &gt; try to make their initial use easier. That doesn&#39;t mean that you can&#39;t<br>
&gt; &gt; use them out of the box anyway without efforts on our part - Zope 3<br>
&gt; &gt; and Grok are compatible. But with Grok, we consider the existence of<br>
&gt; &gt; a component the half-way-point; now that it&#39;s there, we should make<br>
&gt; &gt; it *easy*.<br>
&gt; &gt;<br>
&gt; &gt;&gt; My impression is that in the past couple years the rest of the world<br>
&gt; &gt;&gt; has rapidly caught up to zope3; is that incorrect?<br>
&gt; &gt;<br>
&gt; &gt; I think it&#39;s a mix. On the one hand, the rest of the world has been<br>
&gt; &gt; doing all sorts of things (like MVC and automatic form generation)<br>
&gt; &gt; that<br>
&gt; &gt; Zope 3 has been doing for a while, and also of course things that<br>
&gt; &gt; Zope 3<br>
&gt; &gt; didn&#39;t do yet (ORM is an example, though we had early pioneering in<br>
&gt; &gt; that<br>
&gt; &gt; area with things like ZPatterns, back in &#39;00 or so).<br>
&gt; &gt;<br>
&gt; &gt; On the other hand, the rest of the world doesn&#39;t use object<br>
&gt; &gt; databases (which some people still see as &quot;future magic&quot;, though it<br>
&gt; &gt; obviously also has drawbacks), or advanced permission-based<br>
&gt; &gt; security, and is behind on the curve in catching up on extensible,<br>
&gt; &gt; buildout systems. I also have a suspicion (that I cannot prove) that<br>
&gt; &gt; the use of an object database makes the combination of content-<br>
&gt; &gt; components and configuration-components into new higher-level<br>
&gt; &gt; frameworks and applications more easy than is perhaps the case with<br>
&gt; &gt; relational database backed system.<br>
&gt; &gt;<br>
&gt; &gt; I think Zope&#39;s strongest area is the component architecture, which<br>
&gt; &gt; provides a uniform system for extensibility. We&#39;ve seen a vast<br>
&gt; &gt; explosion<br>
&gt; &gt; of components over the last few years - evidence that the<br>
&gt; &gt; component-driven approach is working. You can look at the index page<br>
&gt; &gt; of<br>
&gt; &gt; <a href="http://svn.zope.org" target="_blank">svn.zope.org</a> to get an impression (and there are also quite a few<br>
&gt; &gt; components maintained elsewhere, such as in the Plone collective).<br>
&gt; &gt;<br>
&gt; &gt; Again though, this is a sucky presentation of what&#39;s there, and of<br>
&gt; &gt; course some of these components will be better maintained and more<br>
&gt; &gt; useful than others.<br>
&gt; &gt;<br>
&gt; &gt;&gt; Question 2, to people who came to zope via grok instead of the<br>
&gt; &gt;&gt; other way around: how quickly did you find you had to learn about<br>
&gt; &gt;&gt; zope3<br>
&gt; &gt;&gt; gory details? &nbsp;I.e., how leaky of an abstraction layer is Grok?<br>
&gt; &gt;<br>
&gt; &gt; Grok isn&#39;t an abstraction layer over Zope 3. It&#39;s therefore very<br>
&gt; &gt; leaky.<br>
&gt; &gt; :) Technically, it&#39;s an alternative configuration layer, replacing<br>
&gt; &gt; ZCML.<br>
&gt; &gt; It replaces ZCML pretty effectively, and I&#39;d say there&#39;s not much that<br>
&gt; &gt; leaks there - we only use ZCML to trigger the whole grokking process,<br>
&gt; &gt; typically.<br>
&gt; &gt;<br>
&gt; &gt; Philosophically, Grok is an approach towards Zope 3 that makes it more<br>
&gt; &gt; agile in use and more easy to learn. We try to reuse existing<br>
&gt; &gt; components, putting them together for 90% of the use cases, where<br>
&gt; &gt; straight Zope 3 just offers a giant roll-your-own toolbox. We add<br>
&gt; &gt; convenience features. We try to create simple documentation. When I<br>
&gt; &gt; read about the TurboGears 2 effort, I figured it was trying to do<br>
&gt; &gt; with Pylons what Grok is trying to do with Zope 3. This is a big<br>
&gt; &gt; continuing effort.<br>
&gt; &gt;<br>
&gt; &gt; If you are going to do hard stuff, you are going to have to try to<br>
&gt; &gt; understand the various Zope 3 components you want to do hard stuff<br>
&gt; &gt; with. Gory details galore there. I believe that this is inescapable.<br>
&gt; &gt; What we *do* try is push the boundaries of what is actually hard.<br>
&gt; &gt; Zope 3 components do this by offering new features and building<br>
&gt; &gt; abstraction layers. With Grok we add easier assembly, and pre-<br>
&gt; &gt; assembly.<br>
&gt; &gt;<br>
&gt; &gt; Regards,<br>
&gt; &gt;<br>
&gt; &gt; Martijn<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Grok-dev mailing list<br>
&gt; &gt; <a href="mailto:Grok-dev@zope.org">Grok-dev@zope.org</a><br>
&gt; &gt; <a href="http://mail.zope.org/mailman/listinfo/grok-dev" target="_blank">http://mail.zope.org/mailman/listinfo/grok-dev</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Grok-dev mailing list<br>
&gt; <a href="mailto:Grok-dev@zope.org">Grok-dev@zope.org</a><br>
&gt; <a href="http://mail.zope.org/mailman/listinfo/grok-dev" target="_blank">http://mail.zope.org/mailman/listinfo/grok-dev</a><br>
<br>
_______________________________________________<br>
Grok-dev mailing list<br>
<a href="mailto:Grok-dev@zope.org">Grok-dev@zope.org</a><br>
<a href="http://mail.zope.org/mailman/listinfo/grok-dev" target="_blank">http://mail.zope.org/mailman/listinfo/grok-dev</a><br>
</div></div></blockquote></div><br>