<div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hello Patrik,</div><div><br></div><div>More good questions my answers are inlined..</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Nov 22, 2024 at 4:30 AM Patrik Svestka via Glass <<a href="mailto:glass@lists.gemtalksystems.com" target="_blank">glass@lists.gemtalksystems.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
...<br>
Are there any examples/overview how does Rowan (1 -> 2 -> 3) improve on<br>
its predecessor Metacello or among its own versions? It would be nice<br>
to see, on some examples,<br></blockquote><div> Metacello solved a big problem but there were flaws with using a package load order algorithm in a multi-project system:<br>
- In a large multi-project (BaselineOf) image, package load order loops
were inevitable and difficult to detect and even more difficult to
resolve.<br> - The relationships between projects was specified in
terms of a package in another BaselineOf... which meant that for every
package in a BaselineOf there needed to be a valid load order that would
result in a functioning set of classes.<br><br>When Rowan was
conceived, we planned on sticking with the tonel/filetree format for packages and
replacing the BaselineOf with a set of object-based load component
structures. A load component is a specification of the supported entry
points into a system. In Metacello any package in a project was
fair game for loading, in Rowan, the project owner explicitly defines
the supported entry points into a project by using load components ... so yes multiple load components may be specified.<br><br>Here is an example of a load component[1] from an example project[2]:<br><br> RwLoadComponent {<br> #name : 'Core',<br> #projectNames : [ ],<br> #componentNames : [<br> 'tests/Tests'<br> ],<br> #packageNames : [<br> 'Rowan3Example-Core'<br> ],<br> #comment : ''<br> }<br><br>The
RwLoadComponent is the only class of component that may be specified for
loading. In this example The Core component will load the package
named: 'Rowan3Example-Core'. There are no projects referenced by this
component so no other projects will be loaded when this component is
loaded.<br><br>The component named 'tests/Tests' is referenced so here is what it looks like[3]:<br><br> RwSubcomponent {<br> #name : 'tests/Tests',<br> #condition : 'tests',<br> #projectNames : [ ],<br> #componentNames : [ ],<br> #packageNames : [<br> 'Rowan3Example-Tests'<br> ],<br> #comment : ''<br> }<br><br>The
RwSubComponent can only be referenced from a load component or another
sub component, so it is not possible to load just the tests/Tests packages ... </div><div><br></div><div>Note that the package 'Rowan3Example-Tests' will only be
loaded if 'tests' is include2 in the #customConditionalAttributes of a RwLoadSpecification ... coming up.<br><br>Here's an example of load component that references an external project[4]:<br><br> RwLoadComponent {<br> #name : 'Core',<br> #projectNames : [<br> 'RowanSample10'<br> ],<br> #componentNames : [<br> 'tests/Tests'<br> ],<br> #packageNames : [<br> 'RowanSample9V3-Core'<br> ],<br> #comment : 'Primary component used for loading the core classes.'<br> }<br><br>Note
that this time, a project name is specified 'RowanSample10' in the #projectNames field. This
indicates that there will be a load specification of that name in the
"projects" directory of the RowanSample9V3 project ... and here it
is[5]:<br><br> RwLoadSpecificationV2 {<br> #specName : 'RowanSample10',<br> #projectName : 'RowanSample10',<br> #gitUrl : 'git@github.com:dalehenrich/RowanSample10.git',<br> #revision : 'spec_0001',<br> #projectSpecFile : 'rowan/project.ston',<br> #componentNames : [<br> 'Core'<br> ],<br> #customConditionalAttributes : [<br> 'tests'<br> ],<br> #platformProperties : {<br> 'gemstone' : {<br> 'allusers' : {<br> #defaultSymbolDictName : 'RowanSample9_2'<br> }<br> }<br> },<br> #comment : ''<br> }<br><br>A
load specification is an object that specifies the default parameters
that are used to load the project. Note that the #gitUrl field
references the RowanSampl10 project on github[6] and specifies the
branch name 'spec_0001' from the revision field. <br><br>From the load
spec above, you can see that the component named 'Core' will be loaded
and that the 'tests' attribute is set and as we have seen above, that
means the tests subcomponent will be loaded...<br><br>To kick off the load process for RowanSample10 by itself, you would execute the following smalltalk expression:<br><br> (RwSpecification fromUrl: '<a href="https://raw.githubusercontent.com/dalehenrich/RowanSample10/refs/heads/spec_0001/rowan/specs/spec_0001.ston" target="_blank">https://raw.githubusercontent.com/dalehenrich/RowanSample10/refs/heads/spec_0001/rowan/specs/spec_0001.ston</a>') <br> projectsHome: '<path directory to clone the project>';<br> load<br><br>The
component structure is an object-based declaration of the relationship
of the packages in the project and external projects ....<br><br>Rowan
also provides a fairly complete API for constructing and manipulating
Rowan definitions. Here's a link to the README[7] of the Rowan3Example
from above. The README contains the smalltalk code used to create and
load the project...<br><br>There's more, but hopefull, this will give you an idea of some of the improvements over Metacello that Rowan brings.<br><br>[1] <a href="https://github.com/dalehenrich/Rowan3Example/blob/master/rowan/components/Core.ston" target="_blank">https://github.com/dalehenrich/Rowan3Example/blob/master/rowan/components/Core.ston</a><br>[2] <a href="https://github.com/dalehenrich/Rowan3Example" target="_blank">https://github.com/dalehenrich/Rowan3Example</a><br>[3] <a href="https://github.com/dalehenrich/Rowan3Example/blob/master/rowan/components/tests/Tests.ston" target="_blank">https://github.com/dalehenrich/Rowan3Example/blob/master/rowan/components/tests/Tests.ston</a><br>[4] <a href="https://github.com/dalehenrich/RowanSample9V3/blob/spec_0060/rowan/components/Core.ston" target="_blank">https://github.com/dalehenrich/RowanSample9V3/blob/spec_0060/rowan/components/Core.ston</a><br>[5] <a href="https://github.com/dalehenrich/RowanSample9V3/blob/spec_0060/rowan/projects/RowanSample10.ston" target="_blank">https://github.com/dalehenrich/RowanSample9V3/blob/spec_0060/rowan/projects/RowanSample10.ston</a><br>[6] <a href="https://github.com/dalehenrich/RowanSample10/tree/spec_0001" target="_blank">https://github.com/dalehenrich/RowanSample10/tree/spec_0001</a><br>[7] <a href="https://github.com/dalehenrich/Rowan3Example/blob/master/README.md" target="_blank">https://github.com/dalehenrich/Rowan3Example/blob/master/README.md</a></div><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I also did not find any code/examples how it integrates with git. <br></blockquote><div><br></div><div> The following statement is from the Rowan3Example README[1] and if you add the ">" line where indicated, a git repository will be created in that disk location, unless it is already a git repository:<br><br> definedProject := (Rowan newProjectNamed: projectName)<br> projectsHome: rowanProjectsHome;<br>">" gitUrl: 'gitUrl://', rowanProjectsHome, '/', projectName<br> specName: projectName;<br> specComponentNames: { 'Core' };<br> "..."<br><br>[1] <a href="https://github.com/dalehenrich/Rowan3Example/blob/master/README.md" target="_blank">https://github.com/dalehenrich/Rowan3Example/blob/master/README.md</a></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> Is it using FileTree to export the files which then can be picked up by git?</blockquote><div><br></div><div>Rowan writes FileTree and Tonel format packages ... each project can select the package format to use for the project.<br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I tried to export a library from GemStone 3.7.1 using Jade (Dev) and<br>
seaside extent (from UserGlobals), but the "Save as Tonel Package"<br>
option is grayed out (unavailable). I can FileOut the UserGlobals<br>
dictionary, but I wonder why I can't use export Tonel package. <br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Is it due to a fact that Rowan 3 is not available for the this extent? <br></blockquote><br><div>This would be a question for James, since he maintains Jade. At the present time Jade is not expected to work with Rowan. It is in the plans to allow Jade to be used to edit code in a Rowan image, but unless explicit support is added Jadeite, the Rowan API would be used to export changes made in a Rowan image using Jade ... HOWEVER right now, you need to use Rowan 3 and JadeiteForPharo to experiment with Rowan <br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Can I use a lower version of Rowan (1 or 2) for Jade/Jadeite (since I'm<br>
not using JadeiteForPharo) with the GS 3.7.x<br></div></blockquote><div><br></div><div>Patrik, I want to be clear that Jade and Jadeite and JadeiteForPharo are three separate code browser solutions for GemStone and only Jadeite and JadeiteForPharo are expected to work with Rowan... and if you are experimenting with Rowan and Jadeite, you should be using extent0.rowan3.dbf and JadeiteForPharo ... extent0.rowan3.dbf is only available in 3.7.1 and later releases.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div> or I have to wait until Rowan3 is compatible with seaside? <br></div></blockquote><div>well if you want to use Rowan to work with existing github projects for GemStone, you have to wait a little bit longer ... </div><div><br></div><div>We certainly understand that we need to provide a way to convert a BaselineOf into Rowan 3 meta data ... We're still working on fleshing out some of the missing features of Rowan 3 so even if we had a BaselineOf to Rowan conversion script it wouldn't be a good time to expect to use Rowan 3 for production ...<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div></div><br>
As I understand it, for now you need Rowan 3 for JadeiteForPharo only.<br></blockquote><div>That is correct. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
This is really important piece of puzzle that I was missing.<br></blockquote><div>sorry about that ... <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> <br>
> What we are working on that might be helpful for you, is a version of<br>
> Jadeite for Pharo that is usable against extent0.dbf, without needing<br>
> to <br>
> load all of Rowan....<br>
> <br>
Yes, this will be really useful if I could use JadeiteForPharo, Rowan 3<br>
, and seaside at the same time.<br></blockquote><div>Until Rowan 3 has become release ready you will be able to use JadeiteForPharo with seaside, but we are still ironing out the details since code will have to be added to an extent0.seaside.dbf to be able to use JadeiteForPharo with a non-Rowan image ... Currently we are able to browse and edit a seaside extent with JadeiteForPharo but we still need to add a Monticello package browser and work out the details of how we're going to handle installing the "RowanToMonticello glue"code into an image ... this will have to include support for upgrades,as well, I assume ...</div><div><br></div><div>And again, JadeiteForPharo cannot be used with GemStone versions older that 3.7.0...</div><div><br></div><div>Dale<br></div></div></div>
</div>