<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Using Magritte With Seaside</title>
	<atom:link href="http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/feed/" rel="self" type="application/rss+xml" />
	<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/</link>
	<description>thoughts on Smalltalk and programming in general...</description>
	<pubDate>Wed, 23 Jul 2008 20:23:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Miguel Cobá</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-13015</link>
		<dc:creator>Miguel Cobá</dc:creator>
		<pubDate>Sat, 10 May 2008 06:12:24 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-13015</guid>
		<description>Until this week I finally began to learn Magritte. I read all the tutorials, all the documentation I could find in the web and, in a post in the mailing list, a link to your post.
First it seemed like Magritte was the perfect tool to speed up the development of a couple projects I have in mind. The examples from the tutorials were amazing. You can build/validate forms with little effort. All seemed perfect. But, when I began to do the real work of my project I find myself trying to change the way Magritte do things by default. The layout of fields, the css, the validations, etc.
A feeling of being programing something that was not the app, but the meta/descriptions/custom renderers began to grow inside me. 
Often I was trying to solve problems related to Magritte (customize it to adapt to my needs) instead of solving problems of my project.
Of course you save time by no writing forms by hand. But many times, the time saved was lost trying to adapt Magritte.
Furthermore, the code began to have classes (like CAFancyCheckbox or MACssRenderer in your example) that had nothing to do with my problem domain. Like another layer that you have to understand before getting to the problem domain.
So, when I saw your comments I realize that I was not the only with this feeling. I agree with you that, as Seaside allows you to quickly create exactly what you need, in the long term the benefit of Magritte are not as evident and useful as initially appears.
I have Magritte in a very high concept, both as a framework as and thesis work, but I think that Seaside is more than enough to write a big project without the need of another layer hiding your problem domain.

Cheers,
Miguel Cobá</description>
		<content:encoded><![CDATA[<p>Until this week I finally began to learn Magritte. I read all the tutorials, all the documentation I could find in the web and, in a post in the mailing list, a link to your post.<br />
First it seemed like Magritte was the perfect tool to speed up the development of a couple projects I have in mind. The examples from the tutorials were amazing. You can build/validate forms with little effort. All seemed perfect. But, when I began to do the real work of my project I find myself trying to change the way Magritte do things by default. The layout of fields, the css, the validations, etc.<br />
A feeling of being programing something that was not the app, but the meta/descriptions/custom renderers began to grow inside me.<br />
Often I was trying to solve problems related to Magritte (customize it to adapt to my needs) instead of solving problems of my project.<br />
Of course you save time by no writing forms by hand. But many times, the time saved was lost trying to adapt Magritte.<br />
Furthermore, the code began to have classes (like CAFancyCheckbox or MACssRenderer in your example) that had nothing to do with my problem domain. Like another layer that you have to understand before getting to the problem domain.<br />
So, when I saw your comments I realize that I was not the only with this feeling. I agree with you that, as Seaside allows you to quickly create exactly what you need, in the long term the benefit of Magritte are not as evident and useful as initially appears.<br />
I have Magritte in a very high concept, both as a framework as and thesis work, but I think that Seaside is more than enough to write a big project without the need of another layer hiding your problem domain.</p>
<p>Cheers,<br />
Miguel Cobá</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-11006</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Wed, 20 Feb 2008 05:14:24 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-11006</guid>
		<description>Oh, good catch, typo on my part, corrected.</description>
		<content:encoded><![CDATA[<p>Oh, good catch, typo on my part, corrected.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leon Smith</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-10979</link>
		<dc:creator>Leon Smith</dc:creator>
		<pubDate>Tue, 19 Feb 2008 20:59:29 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-10979</guid>
		<description>I think you meant WAFormDialog rather than MAFormDialog right ?</description>
		<content:encoded><![CDATA[<p>I think you meant WAFormDialog rather than MAFormDialog right ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9214</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Fri, 07 Dec 2007 22:25:37 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9214</guid>
		<description>Check out my latest image.</description>
		<content:encoded><![CDATA[<p>Check out my latest image.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sophie</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9208</link>
		<dc:creator>Sophie</dc:creator>
		<pubDate>Fri, 07 Dec 2007 18:27:14 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9208</guid>
		<description>&#62; it's easier to have a single form component that uses metadata
&#62; to render itself dynamically. This approach works better for very
&#62; customized programatically generated Ajaxy forms because I can
&#62; drop into raw Seaside whenever necessary to customize it.

I am really starting to need something like this. I'll either (muddle 
through) building it, or beg or borrow it. Any chance you could share your 
code for this e.g. as a fileOut?

Thanks - Sophie (p.s. sent email, but never know with spam filters ...)</description>
		<content:encoded><![CDATA[<p>&gt; it&#8217;s easier to have a single form component that uses metadata<br />
&gt; to render itself dynamically. This approach works better for very<br />
&gt; customized programatically generated Ajaxy forms because I can<br />
&gt; drop into raw Seaside whenever necessary to customize it.</p>
<p>I am really starting to need something like this. I&#8217;ll either (muddle<br />
through) building it, or beg or borrow it. Any chance you could share your<br />
code for this e.g. as a fileOut?</p>
<p>Thanks - Sophie (p.s. sent email, but never know with spam filters &#8230;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9186</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Thu, 06 Dec 2007 06:05:59 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9186</guid>
		<description>Yea, I understand, but I decided a while back to find a gig that didn't force me to do things I disagree with, it's just not worth the bitterness you eventually develop.  I take every opportunity to replace Microsoft stuff with better open source alternatives.</description>
		<content:encoded><![CDATA[<p>Yea, I understand, but I decided a while back to find a gig that didn&#8217;t force me to do things I disagree with, it&#8217;s just not worth the bitterness you eventually develop.  I take every opportunity to replace Microsoft stuff with better open source alternatives.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9179</link>
		<dc:creator>Joe</dc:creator>
		<pubDate>Thu, 06 Dec 2007 00:53:24 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9179</guid>
		<description>Ramon,

Agreed, but unless you are self employed, not always realistic. Microsoft certain is in love with this direction and it is certainly not helping the enterprise level consultant. See InfoPath, SharePoint "development platform", Oracle, etc.</description>
		<content:encoded><![CDATA[<p>Ramon,</p>
<p>Agreed, but unless you are self employed, not always realistic. Microsoft certain is in love with this direction and it is certainly not helping the enterprise level consultant. See InfoPath, SharePoint &#8220;development platform&#8221;, Oracle, etc.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9093</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Thu, 29 Nov 2007 19:49:40 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9093</guid>
		<description>"The problem is when you have clients who get ideas in their head otherwise, i.e. hire me to do build something to eliminate future need for developers"

I'd just say no.  You want something like that, go look at DabbleDB, Salesforce, WuFoo, etc, and when you figure out that isn't really what you want, come back, and we'll talk about what you want me to build and maintain for you.  

End user programming is a myth, they don't really want to program, they just want to save money and think that's the answer.  Once they try out such a system and run into its limitations, they'll either accept them, or change their mind and decide they have to pay a programmer to get what they really want, which is usually something simple and highly custom.  

Things like DabbleDB, Salesforce, and WuFoo are just way to complex for your average user, they want apps to use, not meta apps that can build apps they can use.  The people who want meta apps, are middle men who think they can build and brand apps to sell to end users.</description>
		<content:encoded><![CDATA[<p>&#8220;The problem is when you have clients who get ideas in their head otherwise, i.e. hire me to do build something to eliminate future need for developers&#8221;</p>
<p>I&#8217;d just say no.  You want something like that, go look at DabbleDB, Salesforce, WuFoo, etc, and when you figure out that isn&#8217;t really what you want, come back, and we&#8217;ll talk about what you want me to build and maintain for you.  </p>
<p>End user programming is a myth, they don&#8217;t really want to program, they just want to save money and think that&#8217;s the answer.  Once they try out such a system and run into its limitations, they&#8217;ll either accept them, or change their mind and decide they have to pay a programmer to get what they really want, which is usually something simple and highly custom.  </p>
<p>Things like DabbleDB, Salesforce, and WuFoo are just way to complex for your average user, they want apps to use, not meta apps that can build apps they can use.  The people who want meta apps, are middle men who think they can build and brand apps to sell to end users.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9092</link>
		<dc:creator>Joe</dc:creator>
		<pubDate>Thu, 29 Nov 2007 18:26:20 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9092</guid>
		<description>Agreed, I can do/think the same. The problem is when you have clients who get ideas in their head otherwise, i.e. hire me to do build something to eliminate future need for developers (me and others). It sounds ridiculous but it's true all the time now. There's also this huge push with bigger clients towards COTS which I absolutely hate.

Smalltalk is definitely a breath of fresh air since there are few people imposing that I generate GUIDS and XML files simply to write "hello world" in some terrible bloated piece of garbage software. Working with everything from windows driver programming to Outlook programming w/ MAPI to ASP.NET w/ AJAX has really made me appreciate Smalltalk so much more then when I first touched it in the 80s. I swear there was a time in C  /MS world especially where though you maybe had to write a VESA driver and GUI for your app, it was easier doing that than dealing with some wannabe developer end user system/framework/builder like we get now.</description>
		<content:encoded><![CDATA[<p>Agreed, I can do/think the same. The problem is when you have clients who get ideas in their head otherwise, i.e. hire me to do build something to eliminate future need for developers (me and others). It sounds ridiculous but it&#8217;s true all the time now. There&#8217;s also this huge push with bigger clients towards COTS which I absolutely hate.</p>
<p>Smalltalk is definitely a breath of fresh air since there are few people imposing that I generate GUIDS and XML files simply to write &#8220;hello world&#8221; in some terrible bloated piece of garbage software. Working with everything from windows driver programming to Outlook programming w/ MAPI to ASP.NET w/ AJAX has really made me appreciate Smalltalk so much more then when I first touched it in the 80s. I swear there was a time in C  /MS world especially where though you maybe had to write a VESA driver and GUI for your app, it was easier doing that than dealing with some wannabe developer end user system/framework/builder like we get now.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9053</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Wed, 28 Nov 2007 00:59:00 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9053</guid>
		<description>"I know that Pier does some of this and uses Magritte, but I don’t really like the user experience in Pier despite the quality of the code"

Same here, the code is great, but I don't like the design.  The problem with Pier is the same as the problem with many frameworks... someone else wrote them.  I've come to the conclusion that the only CMS framework I'll ever be happy with, is my own.  Seaside gives me too much power to have to put up with someone else's code.  

So my advice is, build your own, there's nothing like knowing every line of code inside and out, and you'll never be stuck trying to figure out how to make it do something it wasn't intended for.

I gave up on the idea of end user programming, I'm a developer, and it's just easier for me to hop in and add something that to build some uber meta system that just serves to replace me.  Smalltalk is my runtime configurable uber system, and I can make changes just as fast in it as some homebrew webified IDE that I'd cook up to give to users.</description>
		<content:encoded><![CDATA[<p>&#8220;I know that Pier does some of this and uses Magritte, but I don’t really like the user experience in Pier despite the quality of the code&#8221;</p>
<p>Same here, the code is great, but I don&#8217;t like the design.  The problem with Pier is the same as the problem with many frameworks&#8230; someone else wrote them.  I&#8217;ve come to the conclusion that the only CMS framework I&#8217;ll ever be happy with, is my own.  Seaside gives me too much power to have to put up with someone else&#8217;s code.  </p>
<p>So my advice is, build your own, there&#8217;s nothing like knowing every line of code inside and out, and you&#8217;ll never be stuck trying to figure out how to make it do something it wasn&#8217;t intended for.</p>
<p>I gave up on the idea of end user programming, I&#8217;m a developer, and it&#8217;s just easier for me to hop in and add something that to build some uber meta system that just serves to replace me.  Smalltalk is my runtime configurable uber system, and I can make changes just as fast in it as some homebrew webified IDE that I&#8217;d cook up to give to users.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9051</link>
		<dc:creator>Joe</dc:creator>
		<pubDate>Tue, 27 Nov 2007 23:29:01 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9051</guid>
		<description>Ramon,

You have a good point regarding the practicality of user generated forms. For my particular application, user generated forms are a part of a whole, mainly because that is what the client wants. In other words, most of the time I am not creating components that use user generated forms, rather the forms are more of an add-on for when the pre-canned stuff is not enough. It seems whether I use pre-canned or user generated forms, I need to add metadata to all my models because the canned objects may have to evolve to support a user generated form, for instance when type Customer is extended to VIPCustomer, necessitating 3 more fields.

I suppose I like the fact that Magritte seems to allow me some flexibility designing the components. I can either just create a single component that uses the meta-data as needed for things like the memento cache, or create a series of components for the auto-generated forms. Obviously, the auto-generated forms are not going to be as powerful, but I think they are better than nothing at all. 

Case in point, image a CMS system. With each page, there is a potentially unknown amount of meta-data that needs to be added. In some cases, maybe it is just keyword and tags will suffice, but in others it may be adding business fields. I know that Pier does some of this and uses Magritte, but I don't really like the user experience in Pier despite the quality of the code, and it's not really that applicable for everything in my case anyway.  How would you add meta-data to something like this without a dynamic such as Magritte? Would this always be time to have a developer intervene?

Certainly the surge in popularity of the numerous CMS and Portal products (SharePoint again for example) prove that there is at least some desire for user defined models. I think it's a bit different in the case of dabble db since it's pretty much ground 0 until you do some work, vs a system where you have a lot of pre-canned stuff and then realize the need to expand it. Where these systems suck is the nightmare of XML, assembly/jar hell, and horrible relational mapping (rows acting as columns ala SharePoint's database). The Magritte way is probably a lot better compromise than the existing implementations I have seen.

I certainly agree and appreciate your practicality. Coming from the Assembly/C  , Java, and .NET world myself mainly, I see my share of ridiculous over engineering and complexity. If you've ever worked with Microsoft CRM, Peoplesoft, SharePoint, or Oracle  product, you are definitely aware of just how badly these guys glue stuff together when it needs to be dynamic. I suppose the only way I'm going to find out for myself with this is to move beyond my proof of concepts I have built with Squeak and into something more tangible.</description>
		<content:encoded><![CDATA[<p>Ramon,</p>
<p>You have a good point regarding the practicality of user generated forms. For my particular application, user generated forms are a part of a whole, mainly because that is what the client wants. In other words, most of the time I am not creating components that use user generated forms, rather the forms are more of an add-on for when the pre-canned stuff is not enough. It seems whether I use pre-canned or user generated forms, I need to add metadata to all my models because the canned objects may have to evolve to support a user generated form, for instance when type Customer is extended to VIPCustomer, necessitating 3 more fields.</p>
<p>I suppose I like the fact that Magritte seems to allow me some flexibility designing the components. I can either just create a single component that uses the meta-data as needed for things like the memento cache, or create a series of components for the auto-generated forms. Obviously, the auto-generated forms are not going to be as powerful, but I think they are better than nothing at all. </p>
<p>Case in point, image a CMS system. With each page, there is a potentially unknown amount of meta-data that needs to be added. In some cases, maybe it is just keyword and tags will suffice, but in others it may be adding business fields. I know that Pier does some of this and uses Magritte, but I don&#8217;t really like the user experience in Pier despite the quality of the code, and it&#8217;s not really that applicable for everything in my case anyway.  How would you add meta-data to something like this without a dynamic such as Magritte? Would this always be time to have a developer intervene?</p>
<p>Certainly the surge in popularity of the numerous CMS and Portal products (SharePoint again for example) prove that there is at least some desire for user defined models. I think it&#8217;s a bit different in the case of dabble db since it&#8217;s pretty much ground 0 until you do some work, vs a system where you have a lot of pre-canned stuff and then realize the need to expand it. Where these systems suck is the nightmare of XML, assembly/jar hell, and horrible relational mapping (rows acting as columns ala SharePoint&#8217;s database). The Magritte way is probably a lot better compromise than the existing implementations I have seen.</p>
<p>I certainly agree and appreciate your practicality. Coming from the Assembly/C  , Java, and .NET world myself mainly, I see my share of ridiculous over engineering and complexity. If you&#8217;ve ever worked with Microsoft CRM, Peoplesoft, SharePoint, or Oracle  product, you are definitely aware of just how badly these guys glue stuff together when it needs to be dynamic. I suppose the only way I&#8217;m going to find out for myself with this is to move beyond my proof of concepts I have built with Squeak and into something more tangible.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9044</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Tue, 27 Nov 2007 21:14:58 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9044</guid>
		<description>What you're describing is much more oriented towards what Magritte was actually designed for, it already is a meta model and has the ability to allow user generated objects and forms.  The only place it's seriously lacking is Ajax, and field to field interactions.  

My problem with it isn't conceptual, it's practical.  Every time I have to move beyond a demo and build a real complex form with field to field interactions and Ajax stuff, I have to start building custom seaside components and figure out how to tie them together somehow when fields interact.  Suddenly, it's much easier to just build a single Seaside component for the whole form, rather than a component per field.  

Put simply, Magritte is too abstract, Seaside is the perfect level of abstraction (for me) to allow the control necessary.  Rather than composing forms from subcomponents, it's easier to have a single form component that uses metadata to render itself dynamically.  This approach works better for very customized programatically generated Ajaxy forms because I can drop into raw Seaside whenever necessary to customize it.  I don't want or need runtime generated forms, frankly, users can't handle that no matter how slick you try and make it.  There will always be those who build things, those who use them.  People don't want to build their own forms... unless they're developers.  Dabbledb has found out just how many of their users are actually semi-developers trying to use dabble to sell custom applications.

If you want user built forms, Magritte is probably much more your cup of tea, that's what it was designed for.  Just be aware, if you want Ajax, you'll likely have to build all of your own Magritte components anyway, the default ones are very vanilla.  But, runtime building and modification of descriptions is what Magritte was meant for.</description>
		<content:encoded><![CDATA[<p>What you&#8217;re describing is much more oriented towards what Magritte was actually designed for, it already is a meta model and has the ability to allow user generated objects and forms.  The only place it&#8217;s seriously lacking is Ajax, and field to field interactions.  </p>
<p>My problem with it isn&#8217;t conceptual, it&#8217;s practical.  Every time I have to move beyond a demo and build a real complex form with field to field interactions and Ajax stuff, I have to start building custom seaside components and figure out how to tie them together somehow when fields interact.  Suddenly, it&#8217;s much easier to just build a single Seaside component for the whole form, rather than a component per field.  </p>
<p>Put simply, Magritte is too abstract, Seaside is the perfect level of abstraction (for me) to allow the control necessary.  Rather than composing forms from subcomponents, it&#8217;s easier to have a single form component that uses metadata to render itself dynamically.  This approach works better for very customized programatically generated Ajaxy forms because I can drop into raw Seaside whenever necessary to customize it.  I don&#8217;t want or need runtime generated forms, frankly, users can&#8217;t handle that no matter how slick you try and make it.  There will always be those who build things, those who use them.  People don&#8217;t want to build their own forms&#8230; unless they&#8217;re developers.  Dabbledb has found out just how many of their users are actually semi-developers trying to use dabble to sell custom applications.</p>
<p>If you want user built forms, Magritte is probably much more your cup of tea, that&#8217;s what it was designed for.  Just be aware, if you want Ajax, you&#8217;ll likely have to build all of your own Magritte components anyway, the default ones are very vanilla.  But, runtime building and modification of descriptions is what Magritte was meant for.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9040</link>
		<dc:creator>Joe</dc:creator>
		<pubDate>Tue, 27 Nov 2007 15:42:18 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-9040</guid>
		<description>Ramon,

I have had my eye on Magritte for many months now and I have been reading your blog, mailing list posts, and Lukas's posts from the mailing list. As with a good deal of frameworks/idioms/etc. written by others, I spend a lot of time trying to listen to the "bad" chatter which is often more telling than the good (I have reviewed the source and agree that it is great OO code). 

Consequently, your last comment about how you've strayed from Magritte has really made me question whether I should use it at all. I suppose it depends on the particular project and what goals. I fear like you mentioned in another comment that I will just end up building more or less the same thing.

As part of a much larger system, I want to create a system that does some of the following:

1) Allows the user to dynamically add fields to a form. A good example of this in production is Microsoft SharePoint, albeit one that does it rather poorly IMO.

2) Allows a user to add simple, but possibly chained dynamic validation rules. This is something SharePoint sucks at beyond "required" fields, which would be a simple #isRequired type idiom if I wanted to go that route.

3) Ability to define new simple business objects based off existing primitives, for instance create a "Actress" based on a "Person" object, then add a "Movies" (collection of movies) to the object.

4) AJAX, AJAX, AJAX. No, not for gimmicky purposes, but because parts of this application are very "desktop" like and constant reloading really is more of a pain in some places.

5) Lots of self-contained widgets that broadcast events if they need to talk to/provide data to other widgets


I plan not to really use the built-in Magritte forms templates and instead implement my own custom, theme-able forms. I think though what I am really interested in is not so much generating these forms well automagicallly, but the possibility of manipulating the meta-data at runtime. For instance, creating a description at runtime. I would prefer to avoid the meta-data route in some ways for reasons you mentioned because I really would prefer to just have the application somehow generate a concrete smalltalk class, but I am not so sure that is possible/good idea when you're dealing with hundreds of images scaled out. Ideas?

I really like the way Lukas implemented security and other functionality in Pier using Magritte. This is what originally attracted me, not really the forms part, but it seems like it could be a daunting task really learning how to effectively use what he built despite documentation. Building my own system would take a lot of time, but in a sense it would do exactly what I want without mucking things up by being too generic.

Do you think Magritte is still a good thing to use in a system like this? Thoughts? Thanks.</description>
		<content:encoded><![CDATA[<p>Ramon,</p>
<p>I have had my eye on Magritte for many months now and I have been reading your blog, mailing list posts, and Lukas&#8217;s posts from the mailing list. As with a good deal of frameworks/idioms/etc. written by others, I spend a lot of time trying to listen to the &#8220;bad&#8221; chatter which is often more telling than the good (I have reviewed the source and agree that it is great OO code). </p>
<p>Consequently, your last comment about how you&#8217;ve strayed from Magritte has really made me question whether I should use it at all. I suppose it depends on the particular project and what goals. I fear like you mentioned in another comment that I will just end up building more or less the same thing.</p>
<p>As part of a much larger system, I want to create a system that does some of the following:</p>
<p>1) Allows the user to dynamically add fields to a form. A good example of this in production is Microsoft SharePoint, albeit one that does it rather poorly IMO.</p>
<p>2) Allows a user to add simple, but possibly chained dynamic validation rules. This is something SharePoint sucks at beyond &#8220;required&#8221; fields, which would be a simple #isRequired type idiom if I wanted to go that route.</p>
<p>3) Ability to define new simple business objects based off existing primitives, for instance create a &#8220;Actress&#8221; based on a &#8220;Person&#8221; object, then add a &#8220;Movies&#8221; (collection of movies) to the object.</p>
<p>4) AJAX, AJAX, AJAX. No, not for gimmicky purposes, but because parts of this application are very &#8220;desktop&#8221; like and constant reloading really is more of a pain in some places.</p>
<p>5) Lots of self-contained widgets that broadcast events if they need to talk to/provide data to other widgets</p>
<p>I plan not to really use the built-in Magritte forms templates and instead implement my own custom, theme-able forms. I think though what I am really interested in is not so much generating these forms well automagicallly, but the possibility of manipulating the meta-data at runtime. For instance, creating a description at runtime. I would prefer to avoid the meta-data route in some ways for reasons you mentioned because I really would prefer to just have the application somehow generate a concrete smalltalk class, but I am not so sure that is possible/good idea when you&#8217;re dealing with hundreds of images scaled out. Ideas?</p>
<p>I really like the way Lukas implemented security and other functionality in Pier using Magritte. This is what originally attracted me, not really the forms part, but it seems like it could be a daunting task really learning how to effectively use what he built despite documentation. Building my own system would take a lot of time, but in a sense it would do exactly what I want without mucking things up by being too generic.</p>
<p>Do you think Magritte is still a good thing to use in a system like this? Thoughts? Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-7404</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Tue, 06 Nov 2007 22:46:45 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-7404</guid>
		<description>As always, my code is available in my image.  The next time I update my image that should be available as SSForm in the SentorsaSeaside package.</description>
		<content:encoded><![CDATA[<p>As always, my code is available in my image.  The next time I update my image that should be available as SSForm in the SentorsaSeaside package.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bill</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-7392</link>
		<dc:creator>Bill</dc:creator>
		<pubDate>Tue, 06 Nov 2007 18:29:36 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-7392</guid>
		<description>&#62; so I’m hacking up my own form generator that uses pragmas from the model 
&#62; to control how it render

Any chance you can share this? Even if very specific to your style I'm sure it would be very useful to Seasiders in general.

Thanks.</description>
		<content:encoded><![CDATA[<p>&gt; so I’m hacking up my own form generator that uses pragmas from the model<br />
&gt; to control how it render</p>
<p>Any chance you can share this? Even if very specific to your style I&#8217;m sure it would be very useful to Seasiders in general.</p>
<p>Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-6501</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Sat, 20 Oct 2007 20:15:40 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-6501</guid>
		<description>Building forms is something you can do with Magritte, but I think Lukas intended Magritte as a meta layer for further describing objects.  At one point I was using them to generate Glorp mappings, Pier uses them to search its object model and at one point you could generate both Seaside forms and Morphic forms from them.

However, in truth, I've become less and less enamored with Magritte as I find myself having to jump through too many hoops and remember too many details about its object model to really customize it.

Sebastian's comment above really got me to thinking about just how useful Magritte is.  Ajaxify'ing Magritte is no easy task especially when you want to have several fields tied together in various ways.

I've come to realize the problem is Magritte is so meta that it forces you to solve the meta problem you're having rather than the actual problem you're having.  You can't easily rig up something to solve a problem with a particular form without having to solve it for all forms.  

For example, making a select box be redrawn via Ajax when another one changes.  I did this, and I had to wire up descriptions to be dependents of other descriptions, and then extend the container to send messages between the individual views, it was a pain, I could have (and have) done this much faster by just dropping into raw Seaside.

So, long story short, I've decided I prefer the approach taken by WAFormDialog, a single superclass that can be extended to create specific forms quickly.  I don't actually use WAFormDialog because I also like using metadata, so I'm hacking up my own form generator that uses pragmas from the model to control how it renders forms based on a few simple conventions that suite my style.  It allows me to easily override the automation on a per field basis to drop into Seaside and manually render anything that needs to be Ajaxified or fancier than the defaults provide.  So far I'm liking this approach much better than Magritte.

So, I'd recommend taking a look at WAFormDialog and then hacking up something similar that suits you.  Seaside's reusable components are great, but I'm finding that mostly, I don't want to reuse components I didn't build myself because they are never quite what I want and it's so easy in Seaside to simply build your own component that is *exactly* what you want, no more, no less.

I doubt I'll be using Magritte much anymore, but I learned a lot from it.  It's a great framework, but it's just not what I need.

My browser customization can be found in the class SentorsaBrowser.  Sebastian, I appreciate the thoughtful comments, sometimes one spends so much time learning something that you forget just how complicated it seems, I'm glad I revisited my usage of Magritte and I much prefer my own method to using it.</description>
		<content:encoded><![CDATA[<p>Building forms is something you can do with Magritte, but I think Lukas intended Magritte as a meta layer for further describing objects.  At one point I was using them to generate Glorp mappings, Pier uses them to search its object model and at one point you could generate both Seaside forms and Morphic forms from them.</p>
<p>However, in truth, I&#8217;ve become less and less enamored with Magritte as I find myself having to jump through too many hoops and remember too many details about its object model to really customize it.</p>
<p>Sebastian&#8217;s comment above really got me to thinking about just how useful Magritte is.  Ajaxify&#8217;ing Magritte is no easy task especially when you want to have several fields tied together in various ways.</p>
<p>I&#8217;ve come to realize the problem is Magritte is so meta that it forces you to solve the meta problem you&#8217;re having rather than the actual problem you&#8217;re having.  You can&#8217;t easily rig up something to solve a problem with a particular form without having to solve it for all forms.  </p>
<p>For example, making a select box be redrawn via Ajax when another one changes.  I did this, and I had to wire up descriptions to be dependents of other descriptions, and then extend the container to send messages between the individual views, it was a pain, I could have (and have) done this much faster by just dropping into raw Seaside.</p>
<p>So, long story short, I&#8217;ve decided I prefer the approach taken by WAFormDialog, a single superclass that can be extended to create specific forms quickly.  I don&#8217;t actually use WAFormDialog because I also like using metadata, so I&#8217;m hacking up my own form generator that uses pragmas from the model to control how it renders forms based on a few simple conventions that suite my style.  It allows me to easily override the automation on a per field basis to drop into Seaside and manually render anything that needs to be Ajaxified or fancier than the defaults provide.  So far I&#8217;m liking this approach much better than Magritte.</p>
<p>So, I&#8217;d recommend taking a look at WAFormDialog and then hacking up something similar that suits you.  Seaside&#8217;s reusable components are great, but I&#8217;m finding that mostly, I don&#8217;t want to reuse components I didn&#8217;t build myself because they are never quite what I want and it&#8217;s so easy in Seaside to simply build your own component that is *exactly* what you want, no more, no less.</p>
<p>I doubt I&#8217;ll be using Magritte much anymore, but I learned a lot from it.  It&#8217;s a great framework, but it&#8217;s just not what I need.</p>
<p>My browser customization can be found in the class SentorsaBrowser.  Sebastian, I appreciate the thoughtful comments, sometimes one spends so much time learning something that you forget just how complicated it seems, I&#8217;m glad I revisited my usage of Magritte and I much prefer my own method to using it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bill</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-6500</link>
		<dc:creator>Bill</dc:creator>
		<pubDate>Sat, 20 Oct 2007 18:03:25 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-6500</guid>
		<description>&#62; Magritte’s capable of more than you’ll likely use if you’re 
 &#62; just wanting to build forms with Seaside. I’m going to 
 &#62; ignore those other abilities because frankly, I don’t use 
 &#62; them and don’t plan to.

Could you expand a bit on the other features Magritte offers, and why you don't plan to use them? e.g. are the default Viewers not as useful as the default Editors? Do you just need too many customizations to every viewer to benefit from Magritte, and not so for forms? Are the editors easy to Ajax-ify?

Also, is there a set of components you would recommend to get started with, both for Seaside and Magritte?

Lastly, where (in your image) would I find the code that creates your IDE customizations e.g. for description generation?

Thanks!</description>
		<content:encoded><![CDATA[<p>&gt; Magritte’s capable of more than you’ll likely use if you’re<br />
 &gt; just wanting to build forms with Seaside. I’m going to<br />
 &gt; ignore those other abilities because frankly, I don’t use<br />
 &gt; them and don’t plan to.</p>
<p>Could you expand a bit on the other features Magritte offers, and why you don&#8217;t plan to use them? e.g. are the default Viewers not as useful as the default Editors? Do you just need too many customizations to every viewer to benefit from Magritte, and not so for forms? Are the editors easy to Ajax-ify?</p>
<p>Also, is there a set of components you would recommend to get started with, both for Seaside and Magritte?</p>
<p>Lastly, where (in your image) would I find the code that creates your IDE customizations e.g. for description generation?</p>
<p>Thanks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5911</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Sun, 23 Sep 2007 20:35:44 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5911</guid>
		<description>It's simple really, you get to describe your domain objects *once* and then generate any number of *validated* forms from that single description.  

While you can customize every part of Magritte for each project, you generally don't.  What you end up doing is customizing once, so it works the way you like, and you reuse those customizations in every project you do.

The descriptions themselves can be auto generated by your IDE when you create accessors, and quickly customized with properties like #beRequired, #default:, #options:, #addCondition:labelled:,#min:, #max, etc.  Believe it or not, it does result in having to write much less code and a project wide consistency in how forms look and feel that you won't get by manually building your forms.  It's also much faster than manually writing your forms.

A better way to think of it is this, if you manually build your forms, and then factor your technique into something more reusable to save yourself time in the future, at some point, you'll end up with something similar to Magritte.  At that point, you'll understand you should've just used something like Magritte to begin with.  

It's nothing more than a meta-model that allows you to add extra meta-data to your objects so that generic view components have everything they need to be bound to the model in a reusable fashion.</description>
		<content:encoded><![CDATA[<p>It&#8217;s simple really, you get to describe your domain objects *once* and then generate any number of *validated* forms from that single description.  </p>
<p>While you can customize every part of Magritte for each project, you generally don&#8217;t.  What you end up doing is customizing once, so it works the way you like, and you reuse those customizations in every project you do.</p>
<p>The descriptions themselves can be auto generated by your IDE when you create accessors, and quickly customized with properties like #beRequired, #default:, #options:, #addCondition:labelled:,#min:, #max, etc.  Believe it or not, it does result in having to write much less code and a project wide consistency in how forms look and feel that you won&#8217;t get by manually building your forms.  It&#8217;s also much faster than manually writing your forms.</p>
<p>A better way to think of it is this, if you manually build your forms, and then factor your technique into something more reusable to save yourself time in the future, at some point, you&#8217;ll end up with something similar to Magritte.  At that point, you&#8217;ll understand you should&#8217;ve just used something like Magritte to begin with.  </p>
<p>It&#8217;s nothing more than a meta-model that allows you to add extra meta-data to your objects so that generic view components have everything they need to be bound to the model in a reusable fashion.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sebastian</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5910</link>
		<dc:creator>Sebastian</dc:creator>
		<pubDate>Sun, 23 Sep 2007 13:48:58 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5910</guid>
		<description>Hey Ramon, your post covers details about using Magritte very useful to evaluate using it. In fact it encouraged me to make a little experiment from which I came out asking myself where is the *real gain*? by real gain I mean what are the concrete savings of using Magritte?
As probably happens with every automagic form generator, they easily happen to become useful as a factory of forms. That maybe good maybe don't. 
Todays if I want to make a site, I mean, a web application which makes a difference in the user experience, then I should think a lot about interface very carefully designed for every step of the workflow. Said that (1), knowing that Magritte is extensible enough to allow me to make my own canvas for any given control like the fancycheckbox (2) and having in mind the trend that web apps have interfaces highly customized for every step of their workflow (3), then I'm definitively not convinced of the applicability of Magritte.
Why? because is not answered what a factory of forms can do for me if: 1 for everything I need I need to generate a description, 2 if the standard build does not satisfies (when it does really?) I have to emend the canvas 3 making simple things can easily become complex 4 I have to pay the indirect costs of the learning curve of programming describing instead of directly programming. Also you have to ponder that you can have a nice factored hierarchy of components of your own that does directly the *boring* thing in a simpler way. So I say that I save if I don't use that factory at all and use the description knowledge to build components myself and implement them myself well fatored. Of course a final conclusion should be taken from making the real numbers of forms and metrics as such for a formal applicability evaluation. For my, using this rule of thumb, don't gets interesting.
One thing that could make a turn and justify using it is gaining OR mapping for the "same price". But ActiveRecords are not yet ready to go and any OR designed to map tables to classes I know are a real pain to scale in complexity. So I'm returning to the same skeptical position.
Anyway my curiosity to see where Magritte lead others is far from being dead :) so I'm glad you write your comments.</description>
		<content:encoded><![CDATA[<p>Hey Ramon, your post covers details about using Magritte very useful to evaluate using it. In fact it encouraged me to make a little experiment from which I came out asking myself where is the *real gain*? by real gain I mean what are the concrete savings of using Magritte?<br />
As probably happens with every automagic form generator, they easily happen to become useful as a factory of forms. That maybe good maybe don&#8217;t.<br />
Todays if I want to make a site, I mean, a web application which makes a difference in the user experience, then I should think a lot about interface very carefully designed for every step of the workflow. Said that (1), knowing that Magritte is extensible enough to allow me to make my own canvas for any given control like the fancycheckbox (2) and having in mind the trend that web apps have interfaces highly customized for every step of their workflow (3), then I&#8217;m definitively not convinced of the applicability of Magritte.<br />
Why? because is not answered what a factory of forms can do for me if: 1 for everything I need I need to generate a description, 2 if the standard build does not satisfies (when it does really?) I have to emend the canvas 3 making simple things can easily become complex 4 I have to pay the indirect costs of the learning curve of programming describing instead of directly programming. Also you have to ponder that you can have a nice factored hierarchy of components of your own that does directly the *boring* thing in a simpler way. So I say that I save if I don&#8217;t use that factory at all and use the description knowledge to build components myself and implement them myself well fatored. Of course a final conclusion should be taken from making the real numbers of forms and metrics as such for a formal applicability evaluation. For my, using this rule of thumb, don&#8217;t gets interesting.<br />
One thing that could make a turn and justify using it is gaining OR mapping for the &#8220;same price&#8221;. But ActiveRecords are not yet ready to go and any OR designed to map tables to classes I know are a real pain to scale in complexity. So I&#8217;m returning to the same skeptical position.<br />
Anyway my curiosity to see where Magritte lead others is far from being dead :) so I&#8217;m glad you write your comments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5873</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Tue, 18 Sep 2007 03:32:05 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5873</guid>
		<description>Probably the cleanest thing to do would be to build a custom ChainDescription, I just haven't found it necessary yet.  A few more forms like this and I might.</description>
		<content:encoded><![CDATA[<p>Probably the cleanest thing to do would be to build a custom ChainDescription, I just haven&#8217;t found it necessary yet.  A few more forms like this and I might.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5872</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Tue, 18 Sep 2007 01:28:28 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5872</guid>
		<description>Should there be a more declarative way to use MAChainAccessor? Does much of it boil down to a tree of symbols?
 (descriptionEmail
  descriptionPassword
  descriptionConfirmedPassword
  address 
     (street
       city
       zip)
  creditCard
     *
 )</description>
		<content:encoded><![CDATA[<p>Should there be a more declarative way to use MAChainAccessor? Does much of it boil down to a tree of symbols?<br />
 (descriptionEmail<br />
  descriptionPassword<br />
  descriptionConfirmedPassword<br />
  address<br />
     (street<br />
       city<br />
       zip)<br />
  creditCard<br />
     *<br />
 )</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cdrick</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5845</link>
		<dc:creator>cdrick</dc:creator>
		<pubDate>Wed, 12 Sep 2007 16:13:15 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5845</guid>
		<description>really cool, concise and clear !

I thinks this examples could be put in some magritte class comments...

Thanks Ramon, I was missing your posts ;)

Maybe a post on how to link seaside/magritte and database would be cool :) Is it in relation to a special accesor, for instance MABlockAccessor ?

Thanks</description>
		<content:encoded><![CDATA[<p>really cool, concise and clear !</p>
<p>I thinks this examples could be put in some magritte class comments&#8230;</p>
<p>Thanks Ramon, I was missing your posts ;)</p>
<p>Maybe a post on how to link seaside/magritte and database would be cool :) Is it in relation to a special accesor, for instance MABlockAccessor ?</p>
<p>Thanks</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5843</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Wed, 12 Sep 2007 13:59:27 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5843</guid>
		<description>To do so would require modifying Magritte to traverse the domain object for its conditions, a workable approach, but maybe too much work.  

Since the descriptions are part of the domain class, I could just consider them the constraint system and give my domain objects the ability to validate themselves against their descriptions anytime.  I think that'd solve my objections and meet the requirements you laid out above.  I appreciate your thoughts on the matter.</description>
		<content:encoded><![CDATA[<p>To do so would require modifying Magritte to traverse the domain object for its conditions, a workable approach, but maybe too much work.  </p>
<p>Since the descriptions are part of the domain class, I could just consider them the constraint system and give my domain objects the ability to validate themselves against their descriptions anytime.  I think that&#8217;d solve my objections and meet the requirements you laid out above.  I appreciate your thoughts on the matter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5839</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Wed, 12 Sep 2007 01:53:33 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5839</guid>
		<description>Can try :-)  Consistency constraints should be defined on the domain model itself, that is where they belong "definitionally". The constraints on Person would be defined on class Person (modulo instance-specific specialization), but represented in a form Magritte can traverse and reason with e.g.

Person constraintOn: #dateOfBirth is: [....]

Consider multiple channels that manipulate that domain model. On some channels the consistency checks may be enforced in the UI layer itself, on some other channels the checking should be done in a "server-side" call. This decision can be late bound (in an extreme case, perhaps even entirely dynamic on each call, if the call carries enough contextual info for validations). Just as Magritte creates components by walking descriptions, it could follow a logic that knew something about the properties of a channel (whether shallow or deep, determined dynamically on each call or relatively static) to customize which, how, and where constraints are checked.

If some constraints vary depending on component used (e.g. free-form text field for a date vs. a date picker) the composition would be a bit more involved but same basic idea.</description>
		<content:encoded><![CDATA[<p>Can try :-)  Consistency constraints should be defined on the domain model itself, that is where they belong &#8220;definitionally&#8221;. The constraints on Person would be defined on class Person (modulo instance-specific specialization), but represented in a form Magritte can traverse and reason with e.g.</p>
<p>Person constraintOn: #dateOfBirth is: [....]</p>
<p>Consider multiple channels that manipulate that domain model. On some channels the consistency checks may be enforced in the UI layer itself, on some other channels the checking should be done in a &#8220;server-side&#8221; call. This decision can be late bound (in an extreme case, perhaps even entirely dynamic on each call, if the call carries enough contextual info for validations). Just as Magritte creates components by walking descriptions, it could follow a logic that knew something about the properties of a channel (whether shallow or deep, determined dynamically on each call or relatively static) to customize which, how, and where constraints are checked.</p>
<p>If some constraints vary depending on component used (e.g. free-form text field for a date vs. a date picker) the composition would be a bit more involved but same basic idea.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5837</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Tue, 11 Sep 2007 17:25:04 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5837</guid>
		<description>Care to expand on that thought further?  Where would you define them?  How would such a model look?</description>
		<content:encoded><![CDATA[<p>Care to expand on that thought further?  Where would you define them?  How would such a model look?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5836</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Tue, 11 Sep 2007 17:22:20 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/using-magritte-with-seaside/#comment-5836</guid>
		<description>&#62; It bothers me a little because it weakens the domain model, 

I think the constraints should be defined, just once, alongside the domain model. Whether these are converted to conditions that are checked the way Magritte does should be a later bound decision, possibly dynamic.</description>
		<content:encoded><![CDATA[<p>&gt; It bothers me a little because it weakens the domain model, </p>
<p>I think the constraints should be defined, just once, alongside the domain model. Whether these are converted to conditions that are checked the way Magritte does should be a later bound decision, possibly dynamic.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
