<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="Street"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="place"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="City"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="address"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:1146894947;
        mso-list-type:hybrid;
        mso-list-template-ids:-867664104 -1384711498 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
        {mso-level-start-at:2;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Arial;
        mso-fareast-font-family:"Times New Roman";}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
-->
</style>

</head>

<body lang=EN-GB link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>InstantApp sounds like a great idea.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>I like what&#8217;s in InstantCRUD and
when I played with it I thought of some app layer features that would be good
to have. <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>They could be built-in on top as optional
parts.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>1) Data dictionary<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Admin screen to set up and edit the
dictionary.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Keyed by partial field name and optional
screen id. Looks up a field on a screen. Look for first match from among: exact
field + screen id, exact field, field suffix. E.g. dictionary might have an entry
for key and screen id of (&#8220;media_id&#8221;,&#8221;&#8221;). Then field &#8220;bk_media_id&#8221;
on screen &#8220;MD5&#8221; would match. If you added an entry of (&#8220;bk_media_id&#8221;,&#8221;&#8221;)
that would override it. An entry of (&#8220;bk_media_id&#8221;,&#8221;MD5&#8221;)
would override that again and be the most specific.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Gives label text, information on links to
other screens, and preferred display options, e.g. whether to show a date as a
text input or calendar picker, which can be passed into your screen renderer.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The renderer might know bk_slot_from_dt is
of type datetime and have a default screen element it uses for datetime. The
dictionary display option might change the behaviour for bk_slot_from_dt on all
screens. A more specific entry could override that for a particular screen id.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>2) List screen pager class driven by list
definition file<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Defines some attributes and behaviours for
a list, including top level themed template to use, list of helper classes, information
about the data source (DBIx::Class Model), ordered list of column fields, list
of calculated fields (method names or anonymous coderefs), list of additional
info block methods to call/show between each display row, default search
criteria, primary and secondary search fields (secondary hidden in a
display:none until they click a show link to save space),<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>special search fields (methods or
coderefs), any special search options (profile code searches, free text
searches).<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>List class runs off the list definition
file and gives a fairly sophisticated list interface with paging without the
developer having to know too much about the database model or screen renderer.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Admin screen which can query the data
source to get lists of database fields and allow user to change the fields to
display, their order, set attributes like heading title and theme.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>I&#8217;m putting these two features into
an app we&#8217;re writing, maybe we could mail you some samples when it&#8217;s
working properly?<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>I&#8217;d like to use a similar approach
for a screen definition file at some point. The reason for that is to make it
easier for users to be able to alter screen layout (through the app) and for
novice developers to set up and change apps.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Talking about the developer side, one
problem I&#8217;ve found with perl and web frameworks is that average programmers
find it too much to learn and remember (perl + framework classes + ORM classes)
. They&#8217;re much happier working within a smaller problem space with some
visual tools to help them. <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>If I think back to using MS Access, Visual
C++, VB, I think what worked well was being able to<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>create
default screens from a data model<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>integrated
DB access; set screen properties for database fields<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>set screen
element properties visually<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>preview
screens with sample data from the data source<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>What didn&#8217;t work well was:<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>VC++. One-off
generation of class code. You&#8217;d do that, change the db model later, then
have to make a lot of code changes manually. That&#8217;s time consuming and
error prone. Complicated framework.<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>VB. Hard-coded
screen layout and fragmentation of code into screen object event handlers which
would become unmaintainable<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><span style='mso-list:Ignore'>-<font size=1 face="Times New Roman"><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></font></span></span></font><![endif]><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>Access. Data
dictionary not fully integrated into screens, which were generated on a one-off
basis. Change the data model and you have to manually find the inconsistent
screens.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Much better to have a meta layer
describing a screen and data source and work with that using a visual tool.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Regards, Peter<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=gray face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:gray'><a href="http://www.dragonstaff.com/"><font
color=gray><span style='color:gray'>http://www.dragonstaff.com</span></font></a>&nbsp;
Business IT Consultancy</span></font><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'><o:p></o:p></span></font></p>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span lang=EN-US
style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span lang=EN-US style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span lang=EN-US
style='font-size:10.0pt;font-family:Tahoma;font-weight:bold'>From:</span></font></b><font
size=2 face=Tahoma><span lang=EN-US style='font-size:10.0pt;font-family:Tahoma'>
catalyst-dev-bounces@lists.rawmode.org
[mailto:catalyst-dev-bounces@lists.rawmode.org] <b><span style='font-weight:
bold'>On Behalf Of </span></b>Zbigniew Lukasiak<br>
<b><span style='font-weight:bold'>Sent:</span></b> 07 July 2006 08:44<br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">Development
 of the elegant MVC web framework</st1:PersonName><br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Catalyst-dev]
Opinionation</span></font><span lang=EN-US><o:p></o:p></span></p>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>Hi Brandon,<br>
<br>
InstantCRUD is definitively evolving into the direction that you described
below.&nbsp; As we add new features to it (like sessions, authentication,
authorisation) it is less and less InstantCRUD and I am thinking about renaming
it to InstantApp.&nbsp; It has a replacement for catalyst.pl.&nbsp; Currently
you need to specify all the inputs to it on the commandline - perhaps we can
turn it into a wizard but with wizards you still need to at least save the
chosen options somewhere so that the user does not need to go again and again
through the whole process when fixing some mistakes he did and that makes it a
bit complicated. <br>
<br>
--<br>
Zbyszek<o:p></o:p></span></font></p>

<div>

<p class=MsoNormal><span class=gmailquote><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'>On 7/5/06, <b><span style='font-weight:bold'>Brandon
Black</span></b> &lt;<a href="mailto:blblack@gmail.com">blblack@gmail.com</a>&gt;
wrote:</span></font></span><o:p></o:p></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>On 7/3/06, <st1:PersonName w:st="on">Matt S Trout</st1:PersonName> &lt;<a
href="mailto:dbix-class@trout.me.uk">dbix-class@trout.me.uk</a>&gt; wrote:<br>
&gt; I think I might have finally figured out the answer:<br>
&gt;<br>
&gt; Catalyst has a <st1:Street w:st="on"><st1:address w:st="on">One True Way</st1:address></st1:Street>.<br>
&gt;<br>
&gt; &quot;Do whatever makes most sense within the design of *your*
application&quot;<br>
&gt;<br>
<br>
Agreed here.&nbsp;&nbsp;But to expand in a certain direction: I've always<br>
pictured in my head that eventually Catalyst will gain a couple of new <br>
layers on top of the existing open-ended, flexible framework for<br>
guiding new users into building apps with minimal effort along the<br>
lines of the <st1:Street w:st="on"><st1:address w:st="on">One True Way</st1:address></st1:Street>
(and still making it easy for them, as they<br>
become more advanced, to deviate from the <st1:Street w:st="on"><st1:address
 w:st="on">One True Way</st1:address></st1:Street> as much as <br>
neccesary).<br>
<br>
One of those layers could be the idea of an app-construction &quot;wizard&quot;<br>
of sorts, like catalyst.pl on steroids.<br>
<br>
&quot;Do you need to support sessioning? [Yes]&quot;, &quot;Do you need to
support <br>
user authentication? [No]&quot;, etc ....&nbsp;&nbsp;Importantly, this wizard
forces<br>
the user down the best practices path.&nbsp;&nbsp;That means it does *not* ask<br>
questions like &quot;which view|orm|widget|ajax module?&quot;, only questions <br>
that are relevant to the (relatively unknowledgeable about the<br>
Catalyst universe) user.<br>
<br>
This wizard then does catalyst.pl + setting all the right plugins, and<br>
sets up their basic config file with the right DSNs (and perhaps <br>
commented out examples for changing the config of some of the plugins<br>
loaded), and even sets up a few new controllers aside from the<br>
standard welcome page, which demonstrate the set of plugins in use and<br>
how to use them properly. <br>
<br>
Its a somewhat tough project (not in coding terms, but more in design<br>
terms), but I feel it could be a big win for the Cat community too.<br>
<br>
You could of course take this idea to a whole new level by making a <br>
minimal Cat app implementation of the above wizard, and when the<br>
wizard is done it cpan-downloads all the neccesary but missing plugins<br>
into the app directory and overwrites itself with the new sample app.<br>
Then the user can just &quot;./cat- wizard.pl MyApp&quot; (which creates the<br>
wizard app at MyApp and fires up the built-in server on port 3000),<br>
and walk through a web-wizard to tweak up his new application.<br>
<br>
-- <st1:City w:st="on"><st1:place w:st="on">Brandon</st1:place></st1:City><br>
<br>
_______________________________________________ <br>
Catalyst-dev mailing list<br>
<a href="mailto:Catalyst-dev@lists.rawmode.org">Catalyst-dev@lists.rawmode.org</a><br>
<a href="http://lists.rawmode.org/mailman/listinfo/catalyst-dev">http://lists.rawmode.org/mailman/listinfo/catalyst-dev
</a><o:p></o:p></span></font></p>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><br>
<br clear=all>
<br>
-- <br>
Zbigniew Lukasiak<br>
<a href="http://brudnopis.blogspot.com/">http://brudnopis.blogspot.com/</a> <o:p></o:p></span></font></p>

</div>

</body>

</html>