First (alpha!) release of Pier running with Magma Persistency.
Image available from ftp.seasidehosting.st
User: preloaded Password: squeak
enjoy
Keith
------
Image Use Instructions
In pier configuration click on 'Magma Control Panel', which will inform
you that the repository does not exist. If you have placed this image on
seasidehosting then you will have to manually create the repository
directory. Given the list of options as to what repository to create,
click the 'create' button (and wait). The existing pier kernel should
appear in the list with a 'persist' button next to it, click 'persist'.
Then try it and see!
------
------
Detailed Log of Image Creation Steps (alternative title: "monticello
tutorial")
This image was prepared as follows:
Beginning with Squeak3.8-6555full
Initial start asks for updates: select "do not ask again" - this is
important should you wish to deploy. Headless servers (e.g.
seasidehosting) cannot handle user interaction and will stop at this point.
From "world menu > open.... > Monticello Browser"
Browser opens with (Monticello....)
Click the "+Repository Button", select "HTTP" as the repository type,
and enter
MCHttpRepository
location: 'http://www.squeaksource.com/Seaside'
user: ''
password: ''
as the repository info (if you have a login on Squeaksource then you can
enter your initials
as the 'user' above.)
Add the following repository for Monticello.
MCHttpRepository
location: 'http://www.squeaksource.com/Monticello'
user: ''
password: ''
Add the following repository for Magma.
MCHttpRepository
location: 'http://www.squeaksource.com/MagmaTester'
user: ''
password: ''
and the following two repositories for Magritte and Pier
MCHttpRepository
location: 'http://mc.lukas-renggli.ch/magritte'
user: ''
password: ''
MCHttpRepository
location: 'http://mc.lukas-renggli.ch/pier'
user: ''
password: ''
also:
MCHttpRepository
location: 'http://www.squeaksource.com/OmniBrowser'
user: ''
password: ''
(to edit this information:
click the menu button in the right hand pane of the Monticello Browser)
----
Loading Latest Monticello.
More recent versions of Monticello provide better feedback as to which
packages are currently loaded.
Select the http://www.squeaksource.com/Monticello repository, click
"open", select the latest package (Monticello-avi.279) from the main
"Monticello" branch, and click "load".
Select the Monticello package on the left hand pane, and the
squeaksource/Monticello repository in the right hand pane. Click 'open'.
In the repository browser, click on the latest version
(Monticello-avi.279.mcz) and click 'Load'.
----
Loading Seaside
Select "world menu > open... SqueakMap"... and a dialog will ask if you
wish to upgrade SqueakMap. Which you do. Notice that SMBase, SMLoader
packages appeaer in the Monticello browser, since the upgrade is
performed by loading Monticello packages.
In SqueakMap, select the ever so convenient "Seaside Installer" which
should load in the whole of seaside with its dependencies in one go. To
do this select the left had pane menu button, "install". (Part way
through the install you will be prompted to enter an admin username
(seaside) and password (admin))
(if SqueakMap doesnt work it is being knobbled by a more recent
package-cache, remove it and try again)
Select the seaside repositoryClick the "open" and the repository browser
will open.
Select Seaside2.6b1 which is the current latest. In the right hand pane
are the releases. Releases may be made by anyone and they may be small
branches off from the main stream. Periodically an effort will be made
to ensure that all changes are merged. Click the history button in order
to browse the history of this package to get some idea of what is going
on. Look at the ancestors of a package to see if one version is being
sequentially built on the next, or whether any branching is occurring.
Seaside is fairly mature and changes infrequent, therefore it is likely
to be safe to grab the latest version.
Loaded Seaside2.6b1-mb.79
Loaded Scriptaculous-lr.137
To start Seaside doit:
WAKom startOn: 8080.
( Or use the "beach flags" SeasideMorph
available from: http://minnow.cc.gatech.edu/squeak/5862 )
To test if everything is running, check the following url in your normal
web browser.
http://localhost:8080/seaside/config
you should be prompted for you username and password (as given earlier).
----
Loading Magma
Back to the Monticello Browser. Deselect the selected package by
clicking on it once. This should re-reveal all of the registered
repositories.
(It is worth saving this. In the right hand side pane menu button there
is a menu item: "Save Repositories", which writes a simple configuration
script to the working directory.)
Select the http://www.squeaksource.com/MagmaTester repository, and click
"open".
Select MagmaServerLoader, and click "load". (it takes a while!)
loaded MagmaServerLoader-cmm.21
loaded Ma client server-cmm.123
loaded Ma exception handling-cmm.22
loaded Ma time objects-cmm.37
----
Load Magma Seaside Integration Package
Select "Magma Seaside" (lhs) and the latest package and click "load",
loaded Magma Seaside-kph.18
----
Load Magma Seaside Sushi Store Demo fixes
loaded Seaside-Examples-Store-Magma.kph-11
----
Before using Magma may need to execute the following.
MagmaSession initialize.
MagmaRepositoryController initialize.
useful snippets
MagmaSession allInstances cleanUp.
MagmaSession disconnectAndCloseAllConnectedSessions.
----
Load Magritte
loaded Magritte-All-lr.171
Load Pier
loaded Pier-All-lr.109
Load OmniBrowser
loaded OmniBrowser-avi.258
loaded Pier-OmniBrowser-lr.19
----
Latest Pier-Magma code
loaded Pier-Model-kph.80
loaded Pier-Seaside-kph.80
loaded Pier-Magma-kph.1
----
Pre-upload actions:
Monticello Browser - "flush cached versions".
----
Release Preloaded Image as Sqk3.8f-smp.image
___________________________________________________________
The all-new Yahoo! Mail goes wherever you go - free your email address from your Internet provider. http://uk.docs.yahoo.com/nowyoucan.html
Just found http://www.wikimatrix.org. I'm wondering why Pier is not
listed there. Is there some other reason apart from "no one registered
it yet"?
Cheers, Elfi
Hi,
I'm dealing now quite a bit of time with Magritte to do a
web application. It took a while to get into Magritte and
I'm not sure how much I've grasped til now. But I'm quite
impressed by the power of Magritte. It seems to be customiz-
able at the right places which distinguishes it from others.
At the moment I'm refactoring the code I hacked the last weeks.
I have a few questions about best practice patterns using
Magritte. For the demo, you have a model and you just need
any component, the case is quite easy. aModel asComponent
will do. But most of the tasks that have to be done for a
web application aren't that trivial. You need to have a
customized layout (which can be very complex), you need your
own components etc.
For customization I put every little bit in a wrapper class
around the generated Magritte component. This is for customizing
the generated component as well as to do some manual html if
it isn't avoidable. I have the feeling that this is not the
right way to do but I have no better idea. To minimize the effort
to do a component for a model component I've built a base class
which should ease the customization of the component. The parameters
for the base component are:
- descriptionSelector
This is a symbol which is invoke on the model if you need a subset
of the descriptions. The default value is #description
- componentRenderer
The visitor which is used to render the component
- buttons
A Collection of Associations (button label -> selector). MAForm-
Decoration is only useful if you have save and cancel buttons. As the
selectors are performed on the MAContainerComponent there is no way of
extending it. I extendend MAFormDecoration to have associations for
buttons (to distinguish the button label and the selector to use) and
to be created with a delegator. The selector is than performed on the
delegate which leads to a usage form
component addDecoration:
(WHFormDecoration delegate: self)
buttons: #( #ok -> commit. #abbrechen -> abort)
- validation
There are three choices:
* no validation
* validation by MAValidationDecoration (or similar)
I must confess that I never understood processChildCallbacks.
* manual validation and error handling
Using the form
[self component validate]
on: MAError
do: [:anException | self exception: anException].
- answering
Having a wrapper component I need to process answer in the wrapper.
This can be customized by defining answerBlock. Default value is
self component onAnswer: (
answerBlock ifNil: [
[:anAnswer | self answer: anAnswer]
]
)
- readonly/readwrite
I'm mimicking the behaviour in MAElementComponent having
renderViewerOn:/renderEditorOn:. This is a good way to switch a
component between readonly and readwrite mode. In my case the layout
of the component is completely different between those two modes. So
I use two different renderers for readonly and for readwrite mode.
- really complex layout cases
I have one case where it is necessary to put css classes to some of
the components of a form. The best way I found so far (being dirty)
is to use propertyAt:put: at description level and use this in a
specialized renderer
So far so good. I like to hear your oppions and experiences doing this
kind of stuff.
Another problem I have no solution til now is the mixture of models into
one component. Sometimes you build your data model and then page layout
forces you to edit two objects at the same time. I have no problem to
mix descriptions in a desired way. But by invoking asComponentOn: they
would have all the same model which is wrong for a subset of the
descriptions. Is there any clever way to mix descriptions, set the model
accordingly and then produce the component?
thanks in advance,
Norbert
Hi Lukas,
Smallwiki rocks! I made a custom stylesheet for Smallwiki, how can I
add it to the list of defaults?
My stylesheet is called "The Pixel is Dead" and can adapt to any user-
given font-size in the browser. for an example see http://
smallwiki.unibe.ch/moose/
cheers,
AA
All the latest versions of magritte in the
Monticello repository seem to be empty. For expample,
I downloaded the latest Magritte-Seaside (219) with my
web browser from mc.lukas-renggli.ch. The mcz file is
16205 bytes in size. source.st is just 279 bytes. This
doesn't seem to be a full release.
Norbert
This list used to be readable via gmane. That stopped in September 2006.
Did the list move or something like that? Would it be possible to update
the gmane information?
Elfi (again)
I get error's like this sometimes when I click a link in pier:
Error: "/seaside/mmiki/seaside/mmiki/A-Page" not found.
Notice the path is duplicated. I figure that this is an error that
occurs after the page time's out. yes?
How can I fix this? Why does this happen? Lukas mentioned a thread to
search for but I can't find that message (sorry!) and I haven't found a
good explanation.
Can anyone point me in the right direction?
thanks,
brad
--
brad fuller
http://www.Sonaural.com/
+1 (408) 799-6124
Hello,
I am trying to figure out the design of the classes in Pier Blog. I am
wondering why PBBlog is a subclass of PRCase, and not a direct
subclass of PRStructure:
PRStructure #('parent' 'name' 'title' 'tags')
PRCase #('document')
PBBlog #('managingEditor' 'webMaster' 'copyright' 'language'
'itemCount'
'feedTitle' 'commentTimeout')
PBEntry #('uuid' 'author' 'publication')
PBComment #()
PBPost #('sourceUrl' 'sourceTitle' 'enclosure')
PRPage #()
PRComponent #('componentClass' 'settings')
PRFile #('file')
PRForm #('model' 'metamodel')
PRCase's class comment says:"I am an abstract class holding onto a
document definition representing the contents of the receiver. Most of
my subclasses will allow user to edit myself using the Wiki syntax."
I guess my question is: for an application that is similar to a blog
(managing a list of homogeneous entries, maybe nested), is it a good
idea to make it a direct subclass of PRStructure?
Matthias