[Q] CMS/Swiki development
Raymond Asselin
raymondasselin at sympatico.ca
Thu Mar 6 03:02:39 UTC 2003
Merci Goran for this explanation of HttpView it is interesting to
compare with others solutions.
Le Mercredi, 5 mars 2003, à 03:19 America/Montreal,
goran.hultgren at bluefish.se a écrit :
> Hi Chris!
>
> Just my 2 cents below. :-)
>
> Chris Burkert <christian.burkert at s2000.tu-chemnitz.de> wrote:
>> Hi
>>
>> I plan to develop a kind of Swiki that is more what I want (nothing
>> against swiki, but it's not really the thing I want :-) I think the
>> best
>> is with commanche.
>>
>> 1) What would you say is the best starting point (It should be faster
>> than swiki)?
>> - start from scratch
>> - change the existing swiki
>> - build with seaside
>
> Do not try to change the existing ComSwiki. We have done a lot of
> extensions to ComSwiki (sessions, better searching, smarter recent
> changes that marks unread pages as bold yadda yadda) but the
> architecture is a pain to work with. The authors tried to create a very
> dynamic malleable system but I think it got a bit out of hand. But it
> was probably explorative programming trying to see how stuff turned out
> so they are excused! :-) Just don't go there.
>
> Don't go "from scratch". Comanche is a very nice bottom layer and it is
> "just a HTTP server" so you can't possibly go wrong with it, no point
> in
> not using it. And you can always (as we have done on many occasions)
> put
> Apache in front of it to get https, virtual hosts etc.
>
> Seaside is cool - I haven't used it yet, but Avi/Julian are bright guys
> and Seaside can do amazing stuff. You should look at it - at least to
> learn some new interesting ways to build web apps.
>
> If you are leaning towards some form of "embed code in HTML
> templates"-solution then there are/have been a bunch of those, I would
> guess a few are on SqueakMap. Personally I don't like those solutions.
>
> And then of course we have my own little pet - HttpView. Think of it as
> a much simpler (and thus also less fancy) Seaside. It isn't well
> documented but on the other hand I have plenty of sample code and it is
> very small.
>
> Some of the cool aspects of HttpView is that it is *all Squeak* (no
> file
> templates at all), urls map very easily and simply onto methods and web
> pages are built using an HtmlBuilder. It also does very cool things
> with
> Forms. (Seaside has similar mechanisms but IIRC doesn't have "nice
> simple bookmarkable urls". But that is a consequence of having other
> nice things.)
>
> Compared to Seaside I think HttpView is:
> - Much simpler (and thus less capable of the advanced stuff, on the
> other hand HttpView doesn't tie your hands so that you can't do things
> "your own way" when you want to.)
> - Much smaller (let me count - 22 classes of which you only need to
> learn 3. The other 19 are "internal")
>
> If HttpView sounds interesting I can dig up some sample code for you.
> NOTE: The HttpView on SM is not up to date. I need to scramble together
> my latest into a release.
>
>> 2) What do you say about regular expressions. Is the plugin build in
>> in
>> the default VM or does the admin has to compile a new VM? Then I had
>> to
>> use Streams.
>>
>> Here's what I want.
>> - (Commanche) sessions
>
> Ease pie. I think Diego's cookie support is included in the current
> Comanche on SM so sessions are easy. I have build 4 different webapps
> using HttpView with sessions in all of them.
>
>> - pages sit in a tree (swiki has a graph structure)
>
> Ok. Fair enough.
>
>> - userlogin
>
> Simple. I just use a normal Form together with cookies. You can get
> basic auth to work too - Jonas added that for our internal ComSwiki,
> but
> who cares.
>
>> - permissions (from user to admin)
>> - permissions are bound to a user/page combination and are
>> inherited down the tree.
>> - Squeakcode in <squeak> ^'Hello World!' </squeak>
>
> Personally I would instead use some form of HtmlBuilder (like in
> HttpView or Seaside). Cleaner. And yeah, btw - I do have a Swiki syntax
> single class that transforms the Swiki syntax (a bit extended) into
> HTML. It is a very simple to use reimplementation of the syntax in
> ComSwiki - I use it in another project called "Homepage Builder". You
> don't want to try to extract that code from ComSwiki...
>
> So in short - go with Comance + Seaside/HttpView and build it from
> there. The Swiki syntax class you can get from me or Avi (he may have
> improved it). I also have lots of other code around like an "upload
> documents" facility etc.
>
> Btw, just to give you a little taste of HttpView, here is a little
> "hello world" I just typed into one of my running webapps (I did
> *nothing more* than to add the method seen below), you can see it in
> action at:
>
> http://hb.bluefish.se/hello
>
> WBServerView>>hello
> "WBServerView inherits from HVHttpView. To get a new 'page' in your
> app
> simply add a method - that is it. Here we added #hello which means
> an url like http://localhost/myappbase/hello would suddenly work.
>
> Note that the method returns the builder which Comanche later will
> send a message to in order to get some HTML. That is when the actual
> rendering takes place. The builder creates standard XHTML."
>
> | b name age |
> b _ self builder. "Inherited, get ourselves a builder object"
> b start; h1: 'My little app'. "Start the page and add a heading"
> b p: 'Hello brave new world!'. "And a paragraph"
> b postForm. "Start a form, the action url will by default go
> to
> this page"
>
> "Add a text field, hold the field widget in a local var, give the
> field
> a default value"
> name _ b html: 'Name: ', inputTextValue: 'Joe Schmoe'.
>
> "Add a drop down select box of objects. If they respond to name, show
> that - otherwise printString.
> Tell the select box to add nil first and to show that as Will not
> tell."
> age _ b br; html: 'Older than :';
> selectObjectsNilFirst: #(10 20 30 40 50 60 70 80 90)
> asOrderedCollection
> nilLabel: 'WIll not tell'.
>
> "Add a break, a submit button with text Go, and end the form"
> b br; submit: 'Go'; endForm.
>
> "Check if this was a post, in that case look at the values in the
> widgets and add some stuff to the page.
> Note that the value of age is not an id or string - it is the selected
> object in the collection."
> b ifPost: [
> b p: 'Hi ', name value, '!'.
> age value
> ifNil: [b p: 'You are a chicken, confess!']
> ifNotNil: [age value > 30
> ifTrue: [b p: 'You are older than me!']
> ifFalse: [p p: 'You are younger than me!']]].
>
> "Close the page and return the builder"
> b end.
> ^b
>
>
> regards, Göran
>
>
More information about the Squeak-dev
mailing list
|