Nicholas Moore | 4 Feb 19:17
Favicon

WebDav

Does anyone have an example of how to set up WebDav access using Aida?

Nicholas
--

Nicholas Moore

Robert Calco | 6 Feb 14:17
Picon
Gravatar

Roles/Parties/etc.

Janko et al.,


I like that Aida provides a framework for managing users and roles and was wondering if you could give a bit of detail about the use cases the current implementation does (and does not) support. 

I have a rather complex user access model I need to support and my hierarchy starts with Person also, so I'm wondering whether and how far I can base my implementation on the abstractions you supply (and indeed, whether I must as a matter of design of Aida)?

My model also requires capturing login dates, IP address, and other kinds of information when users log in, so we can detect irregular patterns of usage, etc. I was also wondering if you knew of any geo-location packages for VW that I can use to determine, for example, the country of origin for a given new user, so that the right locale can be selected and displayed to them.

TIA!

- Bob
Robert Calco | 7 Feb 14:45
Picon
Gravatar

Aida Internals and upcoming 6.5

I want to understand Aida's internal design. Does anyone have a sort of 30,000 ft view of what happens in the course of multiple HTTP requests internally to preserve state in the components in Aida? I am trying to study all the individual objects in each package but I could benefit from a high-level understanding of what's going on, and how the different pieces relate.

Also I would like to know how (and whether) others are providing web service APIs in Aida. I understand the new 6.5 Aida coming out soon will have more explicit support for REST (which I need, like, yesterday :) ), but maybe some other people have rolled their own support and I'm curious how you did it and what you learned along the way.

Thanks,

Bob
Janko Mivšek | 7 Feb 18:32
Picon
Gravatar

Request path (was Re: Internals and upcoming 6.5)

S, Robert Calco piše:

> I want to understand Aida's internal design. Does anyone have a sort of
> 30,000 ft view of what happens in the course of multiple HTTP requests
> internally to preserve state in the components in Aida? I am trying to
> study all the individual objects in each package but I could benefit
> from a high-level understanding of what's going on, and how the
> different pieces relate.

Ok, let we start with a web request path in an Aida app from tutorial,
to the anAddressBook therefore:

1. Swazoo web server opens a connection and receives a request
2. it finds a proper AIDASite and calls its answerTo: method
3. user's session is found (from a cookie) or created
4. request is now routed to the right domain object for that URL
5. domain object is asked for it's presenter
6. presenter is returned or created, an instance of AddressBookApp in
   our case,
7. presenter is asked to represent itself as a web page
8. a composite web page (like a DOM tree) is composed
9. streaming as HTML to the web response of web page is the last step.

To step through that sequence you can put a breakpoint in
AidaSite>>answerTo: . then open object's URL. Some more intereting
objects and methods to wach through that journey (Aida 6.5!):

AIDASite answerTo: aRequest

 WebSessionManager findOrCreateSessionFor: aRequest
 WebRouter resourceFor: aRequest
  URLResolver resourceFor: aRequest
   URLResolver objectOnUrl: url

  AIDASite answer: anObject to: aRequest on: aSession
   AIDASite answer: anObject toGetOrPost: aRequest on: aSession
    AddressBook(Object) aidaPresenterFor: aRequest on: aSession
     AddressBook(Object) aidaWebAppFor: aSession
      WebApplication newFor: anObject on: aSession

     AdressBookApp(WebApplication) composeWebPageFor: aRequest
      AdressBookApp(WebApplication) composeWebPageStepTwoFor: aRequest
       AdressBookApp(WebApplication) composeWebView:aViewSymbol for:aReq
	AddressBookApp class viewMethodForView: aViewSymbol
        AddressBookApp perform: method

    AIDASite addResponseHeadersTo: response forPage: presenter on:..
    AddressBookApp streamHtmlTo: aStream for: aRequest on: aSession
     WebPage streamHtmlTo: aStream for: aRequest on: aSession
      WebWindow streamHtmlTo: aStream for: aRequest on: aSession
        WebWidget streamHtmlTo: aStream for: aRequest on: aSession
          etc... recursively down to all composition

> 
> Also I would like to know how (and whether) others are providing web
> service APIs in Aida. I understand the new 6.5 Aida coming out soon will
> have more explicit support for REST (which I need, like, yesterday :) ),
> but maybe some other people have rolled their own support and I'm
> curious how you did it and what you learned along the way.
> 
> Thanks,
> 
> Bob
> 
> 
> 
> _______________________________________________
> Aida mailing list
> Aida <at> aidaweb.si
> http://lists.aidaweb.si/mailman/listinfo/aida

--

-- 
Janko Mivšek
Aida/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
Aida mailing list
Aida <at> aidaweb.si
http://lists.aidaweb.si/mailman/listinfo/aida
Janko Mivšek | 8 Feb 00:17
Picon
Gravatar

Re: Aida Internals and upcoming 6.5

Hi Bob,

S, Robert Calco piše:

> I want to understand Aida's internal design. Does anyone have a sort of
> 30,000 ft view of what happens in the course of multiple HTTP requests
> internally to preserve state in the components in Aida? I am trying to
> study all the individual objects in each package but I could benefit
> from a high-level understanding of what's going on, and how the
> different pieces relate.

The Architecture page with a lot diagrams can probably help you too:

	http://www.aidaweb.si/architecture

I added few more diagrams and I propose  that you look then ask
questions. Answers will then go to that page as well to become more
complete.

> Also I would like to know how (and whether) others are providing web
> service APIs in Aida. I understand the new 6.5 Aida coming out soon will
> have more explicit support for REST (which I need, like, yesterday :) ),
> but maybe some other people have rolled their own support and I'm
> curious how you did it and what you learned along the way.
> 
> Thanks,
> 
> Bob
> 
> 
> 
> _______________________________________________
> Aida mailing list
> Aida <at> aidaweb.si
> http://lists.aidaweb.si/mailman/listinfo/aida

--

-- 
Janko Mivšek
Aida/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
Aida mailing list
Aida <at> aidaweb.si
http://lists.aidaweb.si/mailman/listinfo/aida
Robert Calco | 8 Feb 08:36
Picon
Gravatar

Re: Aida Internals and upcoming 6.5

Hi Janko,


Is the main Aida site down? I keep getting connection reset errors trying to access it.

- Bob

2012/2/7 Janko Mivšek <janko.mivsek <at> eranova.si>
Hi Bob,

S, Robert Calco piše:

> I want to understand Aida's internal design. Does anyone have a sort of
> 30,000 ft view of what happens in the course of multiple HTTP requests
> internally to preserve state in the components in Aida? I am trying to
> study all the individual objects in each package but I could benefit
> from a high-level understanding of what's going on, and how the
> different pieces relate.

The Architecture page with a lot diagrams can probably help you too:

       http://www.aidaweb.si/architecture

I added few more diagrams and I propose  that you look then ask
questions. Answers will then go to that page as well to become more
complete.



> Also I would like to know how (and whether) others are providing web
> service APIs in Aida. I understand the new 6.5 Aida coming out soon will
> have more explicit support for REST (which I need, like, yesterday :) ),
> but maybe some other people have rolled their own support and I'm
> curious how you did it and what you learned along the way.
>
> Thanks,
>
> Bob
>
>
>
> _______________________________________________
> Aida mailing list
> Aida <at> aidaweb.si
> http://lists.aidaweb.si/mailman/listinfo/aida

--
Janko Mivšek
Aida/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
Aida mailing list
Aida <at> aidaweb.si
http://lists.aidaweb.si/mailman/listinfo/aida

Janko Mivšek | 8 Feb 12:01
Picon
Gravatar

Re: Aida Internals and upcoming 6.5


S, Robert Calco piše:
> Hi Janko,
> 
> Is the main Aida site down? I keep getting connection reset errors
> trying to access it.

Ups, sorry, it is now up again. I'm namelly chasing one infinite
recursion bug but forgot to include back the chaser.

Maybe you'll find interesting how this chaser looks like. It is a prime
example of power of Smalltalk and its reflective capabilities. In this
case I'm using the Climbing of the Stack "superpower":

WebForm allFieldsIncludingSubforms
  "return all fields (form elements) in down the form hierarchy"

  | set  count stContext |
  count := 0.
  stContext := thisContext sender.   "TEMPORARY, FOR DEBUGGING!"
  [stContext notNil] whileTrue: [
    (stContext receiver isKindOf: WebForm) ifTrue:
	[count := count +1].
	stContext := stContext sender].
     count > 20 ifTrue:
       [self error: 'WebForm allFields infinite recursion!'].

   set := self allFields.
   self subforms do: [:subform |
       set addAll: subform allFieldsIncludingSubforms].
   ^set

So, with pseudo variable thisContext i came to the current execution
context and count if it is in WebForm class. Then i go to the next
context up in the stack etc. After counting 20 occurences of WebForm I
declare an infinite recursion.

This Climbing of the Stack is used quite intesively in Aida, just look
at all Object first*FromTheStack methods. Main advantage is that this
way it is sometime the easiest to find a referecnce to some important
objects like session, request, anApp etc.

Best regards
Janko

> 
> - Bob
> 
> 2012/2/7 Janko Mivšek <janko.mivsek <at> eranova.si
> <mailto:janko.mivsek <at> eranova.si>>
> 
>     Hi Bob,
> 
>     S, Robert Calco piše:
> 
>     > I want to understand Aida's internal design. Does anyone have a
>     sort of
>     > 30,000 ft view of what happens in the course of multiple HTTP requests
>     > internally to preserve state in the components in Aida? I am trying to
>     > study all the individual objects in each package but I could benefit
>     > from a high-level understanding of what's going on, and how the
>     > different pieces relate.
> 
>     The Architecture page with a lot diagrams can probably help you too:
> 
>            http://www.aidaweb.si/architecture
> 
>     I added few more diagrams and I propose  that you look then ask
>     questions. Answers will then go to that page as well to become more
>     complete.
> 
> 
> 
>     > Also I would like to know how (and whether) others are providing web
>     > service APIs in Aida. I understand the new 6.5 Aida coming out
>     soon will
>     > have more explicit support for REST (which I need, like, yesterday
>     :) ),
>     > but maybe some other people have rolled their own support and I'm
>     > curious how you did it and what you learned along the way.
>     >
>     > Thanks,
>     >
>     > Bob
>     >
>     >
>     >
>     > _______________________________________________
>     > Aida mailing list
>     > Aida <at> aidaweb.si <mailto:Aida <at> aidaweb.si>
>     > http://lists.aidaweb.si/mailman/listinfo/aida
> 
>     --
>     Janko Mivšek
>     Aida/Web
>     Smalltalk Web Application Server
>     http://www.aidaweb.si
>     _______________________________________________
>     Aida mailing list
>     Aida <at> aidaweb.si <mailto:Aida <at> aidaweb.si>
>     http://lists.aidaweb.si/mailman/listinfo/aida
> 
> 
> 
> 
> _______________________________________________
> Aida mailing list
> Aida <at> aidaweb.si
> http://lists.aidaweb.si/mailman/listinfo/aida

--

-- 
Janko Mivšek
Aida/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
Aida mailing list
Aida <at> aidaweb.si
http://lists.aidaweb.si/mailman/listinfo/aida
empty | 8 Feb 15:43

can't find out how use Javascript libs such as HighStock

Hi 
I'm very new to JavaScript as well as Aida/Web.
The task is to show chart in HighStock JavaScript on a page that represents
an object that holds the data.
The chart lib has several js files, namely, a "js/highchart.js",
"/adapter/prototype-adapter.js", "/adapter/mootools.js" and
"/modules/exporting.js" and some /themes/xyz.js
In WebStyle I manually added  methods for those JavaScript, after the
examples found in WebStyle such as jQurery, including xyzResource and
ensureXYZ etc.
And I added lines to WebElement intending to add those JavaScript into the
<head>.
After this I used scriptAfter: to insert the code for charting. The code is
just a copy of original example code.
Well, it doesn't work.
Any advises?

Yours,

JG

P.S.
Here are some code:

viewChart

	| e |
	e := WebElement new.
	e ensureId.
	e addTextH1: 'highstock charts'.
	e addInputFieldAspect: #id for: self.
	e addButtonText: 'chart' action: #chart.
	e addBreak.
        e add: self chartElement. 
	e addBreak.
 	self style pageFrameWith: e title: 'charts'

chartElement

	| e |
	e := WebElement new.
	e ensureId.
	(e app style)
		ensureJQuery;
		ensureHighStock;
		ensureDarkBlueThemes;
		ensureDarkGreenThemes;
		ensureGrayThemes;
		ensureGridThemes;
		ensureSkiesThemes.
	"ensurePrototypeAdapter;
		ensureMooltoolsAdapter;"
	"ensureExportingModule;"
	"ensurePrototype;"
	"ensureHighStockProduction;"
	e addTextSmall: '*Charts to be improved'.
	e addBreak.
	e scriptAfter: self chartScript.
 	e update.
	^e

chartScript

	^'$(function() {
	var seriesOptions = [],
		yAxisOptions = [],
		seriesCounter = 0,
		names = [''MSFT'', ''AAPL'', ''GOOG''],
		colors = Highcharts.getOptions().colors;

	$.each(names, function(i, name) {

		$.getJSON(''http://www.highcharts.com/samples/data/jsonp.php?filename=''+
name.toLowerCase() +''-c.json&callback=?'',	function(data) {

			seriesOptions[i] = {
				name: name,
				data: data
			};

			// As we''re loading the data asynchronously, we don''t know what order
it will arrive. So
			// we keep a counter and create the chart when all the data is loaded.
			seriesCounter++;

			if (seriesCounter == names.length) {
				createChart();
			}
		});
	});

	// create the chart when all data is loaded
	function createChart() {

		chart = new Highcharts.StockChart({
		    chart: {
		        renderTo: ''container''
		    },

		    rangeSelector: {
		        selected: 4
		    },

		    yAxis: {
		    	labels: {
		    		formatter: function() {
		    			return (this.value > 0 ? ''+'' : '''') + this.value + ''%'';
		    		}
		    	},
		    	plotLines: [{
		    		value: 0,
		    		width: 2,
		    		color: ''silver''
		    	}]
		    },
		    
		    plotOptions: {
		    	series: {
		    		compare: ''percent''
		    	}
		    },
		    
		    tooltip: {
		    	pointFormat: ''{series.name}: *{point.y}* ({point.change}%)<br/>'',
		    	yDecimals: 2
		    },
		    
		    series: seriesOptions
		});
	}

});'

WebStyle>>ensureHighStock
	"ensure jQuery JavaScript call in header of the page"

	| page url headerValue |
	self highStockProduction.	"to ensure it"
	self highStockProductionResource.
	page := self app context page.
	url := '/highstock.js'.
	headerValue := ' src="' , url
				, '" language="JavaScript" type="text/javascript"'.
	(page headers
		contains: [:each | each key = 'script' and: [each value = headerValue]])
			ifFalse: [page addHeader: 'script' value: headerValue]

highStockProductionResource
	"WebStyle new highStockProductionResource"

	^self resources at: #highStockProduction
		ifAbsentPut: 
			[WebMethodResource
				fromMethod: #highStockProduction
				on: self
				contentType: 'text/javascript'
				preferedUrl: '/highstock.js'
				site: self site]

highStockProduction

	^'/*
 Highstock JS v1.1.0 (2011-12-14)

 (c) 2009-2011 Torstein H?nsi

 License: www.highcharts.com/license
*/
(function(){function H(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return
a}function Ka(){for(var
a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}function
N(a,b){return parseInt(a,b||10)}function Bb(a){return typeof
a==="string"}function sb(a){return typeof a==="object"}function Ub(a){return
typeof a==="number"}function Ib(a){return ta.log(a)/ta.LN10}function
pc(a){return ta.pow(10,a)}function Jb(a,b){for(var
c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function z(a){return a!==
B&&a!==null}function O(a,b,c){var 
................................................... some more
.................................. ....
'

-----
南無佛 南無法 南無僧
--
View this message in context: http://forum.world.st/can-t-find-out-how-use-Javascript-libs-such-as-HighStock-tp4369643p4369643.html
Sent from the AIDA/Web mailing list archive at Nabble.com.
_______________________________________________
Aida mailing list
Aida <at> aidaweb.si
http://lists.aidaweb.si/mailman/listinfo/aida
Janko Mivšek | 8 Feb 16:03
Picon
Gravatar

Re: can't find out how use Javascript libs such as HighStock

Hi Empty,

First welcome to the list!

Please check the resulting page with FireBug or similar to see if
libraries are present in a header, then open each library in web browser
manually, like http:.../adapter/mootols.js' to check if they are
composed correctly.

Also check in FireBug if script you put after the element is actually
there. Also are some JS errors shown in console?

Hope this helps
Best regards
Janko

S, empty piše:
> Hi 
> I'm very new to JavaScript as well as Aida/Web.
> The task is to show chart in HighStock JavaScript on a page that represents
> an object that holds the data.
> The chart lib has several js files, namely, a "js/highchart.js",
> "/adapter/prototype-adapter.js", "/adapter/mootools.js" and
> "/modules/exporting.js" and some /themes/xyz.js
> In WebStyle I manually added  methods for those JavaScript, after the
> examples found in WebStyle such as jQurery, including xyzResource and
> ensureXYZ etc.
> And I added lines to WebElement intending to add those JavaScript into the
> <head>.
> After this I used scriptAfter: to insert the code for charting. The code is
> just a copy of original example code.
> Well, it doesn't work.
> Any advises?
> 
> Yours,
> 
> JG
> 
> P.S.
> Here are some code:
> 
> viewChart
> 
> 	| e |
> 	e := WebElement new.
> 	e ensureId.
> 	e addTextH1: 'highstock charts'.
> 	e addInputFieldAspect: #id for: self.
> 	e addButtonText: 'chart' action: #chart.
> 	e addBreak.
>         e add: self chartElement. 
> 	e addBreak.
>  	self style pageFrameWith: e title: 'charts'
> 
> 
> chartElement
>  
> 	| e |
> 	e := WebElement new.
> 	e ensureId.
> 	(e app style)
> 		ensureJQuery;
> 		ensureHighStock;
> 		ensureDarkBlueThemes;
> 		ensureDarkGreenThemes;
> 		ensureGrayThemes;
> 		ensureGridThemes;
> 		ensureSkiesThemes.
> 	"ensurePrototypeAdapter;
> 		ensureMooltoolsAdapter;"
> 	"ensureExportingModule;"
> 	"ensurePrototype;"
> 	"ensureHighStockProduction;"
> 	e addTextSmall: '*Charts to be improved'.
> 	e addBreak.
> 	e scriptAfter: self chartScript.
>  	e update.
> 	^e
> 
> chartScript
>  
> 	^'$(function() {
> 	var seriesOptions = [],
> 		yAxisOptions = [],
> 		seriesCounter = 0,
> 		names = [''MSFT'', ''AAPL'', ''GOOG''],
> 		colors = Highcharts.getOptions().colors;
> 
> 	$.each(names, function(i, name) {
> 
> 		$.getJSON(''http://www.highcharts.com/samples/data/jsonp.php?filename=''+
> name.toLowerCase() +''-c.json&callback=?'',	function(data) {
> 
> 			seriesOptions[i] = {
> 				name: name,
> 				data: data
> 			};
> 
> 			// As we''re loading the data asynchronously, we don''t know what order
> it will arrive. So
> 			// we keep a counter and create the chart when all the data is loaded.
> 			seriesCounter++;
> 
> 			if (seriesCounter == names.length) {
> 				createChart();
> 			}
> 		});
> 	});
> 
> 
> 
> 	// create the chart when all data is loaded
> 	function createChart() {
> 
> 		chart = new Highcharts.StockChart({
> 		    chart: {
> 		        renderTo: ''container''
> 		    },
> 
> 		    rangeSelector: {
> 		        selected: 4
> 		    },
> 
> 		    yAxis: {
> 		    	labels: {
> 		    		formatter: function() {
> 		    			return (this.value > 0 ? ''+'' : '''') + this.value + ''%'';
> 		    		}
> 		    	},
> 		    	plotLines: [{
> 		    		value: 0,
> 		    		width: 2,
> 		    		color: ''silver''
> 		    	}]
> 		    },
> 		    
> 		    plotOptions: {
> 		    	series: {
> 		    		compare: ''percent''
> 		    	}
> 		    },
> 		    
> 		    tooltip: {
> 		    	pointFormat: ''{series.name}: *{point.y}* ({point.change}%)<br/>'',
> 		    	yDecimals: 2
> 		    },
> 		    
> 		    series: seriesOptions
> 		});
> 	}
> 
> });'
> 
> 
> 
> WebStyle>>ensureHighStock
> 	"ensure jQuery JavaScript call in header of the page"
> 
> 	| page url headerValue |
> 	self highStockProduction.	"to ensure it"
> 	self highStockProductionResource.
> 	page := self app context page.
> 	url := '/highstock.js'.
> 	headerValue := ' src="' , url
> 				, '" language="JavaScript" type="text/javascript"'.
> 	(page headers
> 		contains: [:each | each key = 'script' and: [each value = headerValue]])
> 			ifFalse: [page addHeader: 'script' value: headerValue]
> 
> highStockProductionResource
> 	"WebStyle new highStockProductionResource"
> 
> 	^self resources at: #highStockProduction
> 		ifAbsentPut: 
> 			[WebMethodResource
> 				fromMethod: #highStockProduction
> 				on: self
> 				contentType: 'text/javascript'
> 				preferedUrl: '/highstock.js'
> 				site: self site]
> 
> highStockProduction
> 
> 	^'/*
>  Highstock JS v1.1.0 (2011-12-14)
> 
>  (c) 2009-2011 Torstein H?nsi
> 
>  License: www.highcharts.com/license
> */
> (function(){function H(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return
> a}function Ka(){for(var
> a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}function
> N(a,b){return parseInt(a,b||10)}function Bb(a){return typeof
> a==="string"}function sb(a){return typeof a==="object"}function Ub(a){return
> typeof a==="number"}function Ib(a){return ta.log(a)/ta.LN10}function
> pc(a){return ta.pow(10,a)}function Jb(a,b){for(var
> c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function z(a){return a!==
> B&&a!==null}function O(a,b,c){var 
> ................................................... some more
> .................................. ....
> '
> 
> 
> -----
> 南無佛 南無法 南無僧
> --
> View this message in context: http://forum.world.st/can-t-find-out-how-use-Javascript-libs-such-as-HighStock-tp4369643p4369643.html
> Sent from the AIDA/Web mailing list archive at Nabble.com.
> _______________________________________________
> Aida mailing list
> Aida <at> aidaweb.si
> http://lists.aidaweb.si/mailman/listinfo/aida

--

-- 
Janko Mivšek
Aida/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
Aida mailing list
Aida <at> aidaweb.si
http://lists.aidaweb.si/mailman/listinfo/aida
Robert Calco | 10 Feb 15:06
Picon
Gravatar

Vision for Aida

Janko,


I was wondering if you could reveal any grand plans you might have for the future of Aida?

What I like about Aida compared to Seaside is its relative simplicity and portability. Seaside uses features of Smalltalk that are not really portable between smalltalks to do its magic (continuations and pragmas being the big ones that I've noticed, which prevent it from being used fully in Dolphin, for example). 

It feels to me like Aida doesn't try to reinvent too many wheels, meaning it's a bit more accessible to people coming from, say, Rails, like myself. It has relatively more steak than sizzle, whereas Seaside has relatively more sizzle than steak. I like my steak rare ("still twitching" is what I tell waitresses at restaurants), so I don't care about sizzle so much. That said, my favourite way to prepare steak is 'black and blue' -- but it takes a rather industrial-size furnace to cook it that way, but, working for a charity, I usually only have a couple matches and a little kindling to start my fire pit. ;)

What I don't like about Aida is the documentation, which is a bit scattered by topic and somewhat stream of consciousness. Seaside has Aida beat hands-down in this department. There are books, well-designed tutorials, lots of samples, etc. It's actually very hard, if you're me, to ignore that big plus for Seaside.

I think Aida needs a much better, much more in-depth tutorial, that really highlights its best parts, and suggests where it's going to get better over time. I am not sure I like all the parts of Aida included -- for example, I've been reviewing the (very involved) Parties/Roles packages and it encroaches a lot on my domain model, meaning I either have to use all of it or none of it. But maybe I have misinterpreted its design? Maybe it's better than my slogging in the code has revealed, and I should use it? Some documentation about the rationale for the abstractions chosen and how they're implemented would be nice.

What I'd like to see in Aida is a greater commitment to REST and maybe XMLRPC API support (seems you're working on that one quite aggressively), more of an MVP vs MVC pattern for rendering, and perhaps support for rich web clients a la Amber (I see there is WebDAV support in Aida, so perhaps you're already intending to go that route), and better security (I really need to support HTTPS, and support API keys securely). Seaside has done a good job in its HTML API, but Aida's abstractions feel somewhat heavy (gazillions of methods). Some refactoring of that seems like it could be good.

Neither framework handles layouts, look-feel, or any of the design intensive side of web development as nicely as I imagine it could be done. This could be an area for huge win in Aida, as I see you've tried to make it easy to reskin a site by supplying a new web style. However, I tried doing this with the demo app and only just mucked stuff up. Again, good documentation about this important area of implementation and some idea of what the end-goal is for it would be awesome.

I'm willing to contribute but I need to get up and running and confident in what I'm doing still. It's been a bit of a ramp up. But I think I'll do well with this choice for what I need to do. I would just like to know what the future holds as I think there is still a lot of room for innovation in web development, and it doesn't all have to be heretical to be on the bleeding edge, so to speak. I'll feel better about Aida knowing that it's roadmap is a good one.

- Bob



Gmane