Status of Illiad; JS lib integration

56 views
Skip to first unread message

Sha Ping

unread,
Apr 29, 2020, 6:31:38 PM4/29/20
to Iliad project
Hi all.

I've recently been re-investigating (nine years later) AIDAweb (Aida) on VW 8.3.2, where I'm firmly planted, until I can finally port to Pharo.  Janko is working on some bug-fixes and on the real-time parts of the framework. 

The time for a port is approaching, as Pharo's GUI finally becomes fast enough and the Git issues are resolved.  If anyone here has experience porting VW to Pharo, and has used the Ring framework in Pharo to do that, I would like to know how your port went. 

Is Illiad in active development?  I see that it exists for Pharo but not VW.  The current work schedule requires that I stay in VW, because a full port of 25 years of code will take some time.  However, I may be able to port just the current project.  Pharo seems to have better web tools and more active development these days.  Does everyone agree?

I'm not convinced that Seaside 3.2 in the Cincom pubic respo healthy.  The main and example bundles loaded, but not the test bundles.

I need speed.  I'm not sure Seaside is a good choice, no matter the Smalltalk vendor, but I don't know much about its performance, except that an old benchmark shows Aida running about twice as fast as Seaside:  https://www.aidaweb.si/benchmarks/wapt-swazoo-20?version=7.s.

The current project needs to interface to a tree-grid and candlestick JS chart components.  Can I do that is Illiad, and is integration with JS libs generally working well?

What are the current problems with Illiad?  What does it not do well yet?


Cheers,

Shaping

Shaping

unread,
Apr 29, 2020, 11:06:36 PM4/29/20
to Iliad project
(I just realized I'm mispelling 'Iliad'.  Corrections below.)


I've recently been re-investigating (nine years later) AIDAweb (Aida) on VW 8.3.2, where I'm firmly planted, until I can finally port to Pharo.  Janko is working on some bug-fixes and on the real-time parts of the framework. 

The time for a port is approaching, as Pharo's GUI finally becomes fast enough and the Git issues are resolved.  If anyone here has experience porting VW to Pharo, and has used the Ring framework in Pharo to do that, I would like to know how your port went. 

Is Iliad in active development?  I see that it exists for Pharo but not VW.  The current work schedule requires that I stay in VW, because a full port of 25 years of code will take some time.  However, I may be able to port just the current project.  Pharo seems to have better web tools and more active development these days.  Does everyone agree?

I'm not convinced that Seaside 3.2 in the Cincom pubic respo healthy.  The main and example bundles loaded, but not the test bundles.

I need speed.  I'm not sure Seaside is a good choice, no matter the Smalltalk vendor, but I don't know much about its performance, except that an old benchmark shows Aida running about twice as fast as Seaside:  https://www.aidaweb.si/benchmarks/wapt-swazoo-20?version=7.s.

The current project needs to interface to  tree-grid and candlestick JS chart components.  Can I do that in Iliad, and is integration with JS libs generally working well?

What are the current problems with Iliad?  What does it not do well yet?


Cheers,

Shaping

Shaping

unread,
Apr 30, 2020, 1:34:46 AM4/30/20
to Iliad project
When I load Iliad into Pharo 8.0 64-bit (stable) using

Metacello new
    smalltalkhubUser: 'hernan' project: 'Iliad';
    configuration: 'Iliad';
    version: #stable;
    load

I get the following exception:


Load Conflict between existing BaselineOfGrease [baseline] from github://SeasideSt/Grease:v1.5.x/repository and ConfigurationOfGrease 1.3.0 from http://smalltalkhub.com/mc/Pharo/MetaRepoForPharo60/main/

What should I do differently to get Iliad loaded into Pharo 8?


Shaping

Shaping

unread,
Apr 30, 2020, 11:03:42 PM4/30/20
to Iliad project
Is anyone watching the Iliad list?


Shaping

Siemen Baader

unread,
May 1, 2020, 1:32:01 AM5/1/20
to il...@googlegroups.com
Is anyone watching the Iliad list? 

Yes. But replies are usually not on the same day. I think someone - perhaps me - will get back to you once they have found the time to understand & answer your questions. :)


Cheers
Siemen


Shaping

--
You received this message because you are subscribed to the Google Groups "Iliad project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to iliad+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/iliad/a1ad8af5-3b06-4356-ab80-e8f9ff6d59c8%40googlegroups.com.

Siemen Baader

unread,
May 1, 2020, 4:20:04 AM5/1/20
to il...@googlegroups.com
Iliad only works on pharo 6.1. There have been efforts to port it but I think this will take some time. So if you need pharo 8 or 9 specifically Iliad would not be the right thing for you now. 

Siemen 

Sent from my iPhone

On 30 Apr 2020, at 07.34, Shaping <sha...@uurda.org> wrote:


--
You received this message because you are subscribed to the Google Groups "Iliad project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to iliad+un...@googlegroups.com.

Siemen Baader

unread,
May 1, 2020, 4:32:48 AM5/1/20
to il...@googlegroups.com
Speed - what kind of speed do you need? Iliad creates  fast UIs because it only updates changed parts of the DOM, similar to React, so you get at snappy user experience while you get a pharo live programming dev experience. But I don’t know how well it fares in specific benchmarks and which ones you are interested in. 

Personally I’d just use Pharos profiling tools and optimize the code that is too slow for my use cases, be it app or framework code since you often can override framework in app classes subclassed from Iliad. I don’t find the distinction between framework and app code very firm in smalltalk. You can browse, live debug, subclass and patch framework classes from within your own packages. That’s also why I personally am not so worried about how well Iliad is maintained. 

I don’t know anything about the other smalltalks or porting, it’s interesting you consider Pharo to (possibly) be better than the commercial ones. I sometimes wonder if I’m missing out since I never tried them. 

Sent from my iPhone

On 30 Apr 2020, at 00.31, Sha Ping <sha...@uurda.org> wrote:


--
You received this message because you are subscribed to the Google Groups "Iliad project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to iliad+un...@googlegroups.com.

Siemen Baader

unread,
May 1, 2020, 4:46:26 AM5/1/20
to il...@googlegroups.com
JS: I have not used many JS libs with Iliad, but there it should be very straightforward. You use them on the page and can communicate with the server by triggering event on widget that then pass the data to your server side app code. You can also make raw XHR requests to controllers but I had some unresolved issues with that recently, as you can see in the archives. 

i think as with seaside the community here is small and the Docs outdated so you   need to be comfortable  browsing the sources  and examples and using the general debugging tools of you don’t want to be stuck for too long during work. But Iliad is stable and predictable so i find it not too frustrating. Could be cool to have you as part of this community and perhaps more activity on the mailing list. 

Also you could try these tutorials - https://leonardoce.wordpress.com/tag/iliad/

HTH
Siemen 

Sent from my iPhone

On 30 Apr 2020, at 00.31, Sha Ping <sha...@uurda.org> wrote:


--

Shaping

unread,
May 1, 2020, 6:11:50 AM5/1/20
to Iliad project
To unsubscribe from this group and stop receiving emails from it, send an email to il...@googlegroups.com.

I responded twice to the group by e-mail but I don't see either post yet.  Composing in Outlook is easier.  How long do e-mailed messages take to show?

Siemen Baader

unread,
May 1, 2020, 6:18:27 AM5/1/20
to il...@googlegroups.com
I don’t know. I use it via email. Seems like you got my response immediately and vice versa...?

Sent from my iPhone

On 1 May 2020, at 12.11, Shaping <sha...@uurda.org> wrote:


To unsubscribe from this group and stop receiving emails from it, send an email to iliad+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/iliad/423aeacb-44a2-448b-92e2-447c7f045881%40googlegroups.com.

Shaping

unread,
May 1, 2020, 6:21:27 AM5/1/20
to Iliad project
Okay, so e-mailed responses to a Google group don't work.  Why does that feel completely wrong?  I'll repost using the web app.

Shaping

unread,
May 1, 2020, 6:23:48 AM5/1/20
to Iliad project

Speed - what kind of speed do you need?

 

What Aida provides or better.  The application is math-modeling.  I’m serving rich graphics (3rd-party JS components) and doing lots of calculations to update the data in those components.  The calc/rendering loop is 2 to 5 s.  Should be okay.

 

Iliad creates  fast UIs because it only updates changed parts of the DOM, similar to React, so you get at snappy user experience while you get a pharo live programming dev experience.

 

Sweet.  That’s what I have in mind.

 

But I don’t know how well it fares in specific benchmarks and which ones you are interested in. 

 

I’m willing to play with it if I can get something working quickly.  Otherwise, the schedule near-term dictates that I have to make Aida work

 

Personally I’d just use Pharos profiling tools and optimize the code that is too slow for my use cases, be it app or framework code since you often can override framework in app classes subclassed from Iliad. I don’t find the distinction between framework and app code very firm in smalltalk.

 

Indeed.  This is the good and bad of Smalltalk, in one sense, depending on how we handle the details.

 

You can browse, live debug, subclass and patch framework classes from within your own packages. That’s also why I personally am not so worried about how well Iliad is maintained. 

 

Right.

 

I don’t know anything about the other smalltalks or porting, it’s interesting you consider Pharo to (possibly) be better than the commercial ones. I sometimes wonder if I’m missing out since I never tried them. 

 

I’m not sure Pharo is run-time superior (faster with shorter GCs) than VW.  It probably isn’t in many ways.  I did, however, recently confirm that the Zinc HTTP transfer rates are about twice as fast as VW’s (lots of primitives in Pharo do this).  Pharo is visually superior to VW.  I don’t think anyone would argue that.   Pharo is keyboard-and-mouse mushy/slow—puts me to sleep in under an hour sometimes.   Mouse-click response latencies can reach 100 to 200 ms, especially in the more complex GUIs.  Those latencies are too long.  They mess with your nervous system in bad ways.  VW is much snapper, but even it is slow.  The Pharo GUI slowness is changing with Spec2 (I assume), but I’ve not seen it happen yet, and Spec2 is out and available.  This will take some time,  I suppose. 

 

I keep trying to port from VW to Pharo mostly because I want to work with:  stateful traits; Woden, GT, and the latest Roassal 3 stuff (which I suppose will be on the Cincom repo soon, anyway).  I’m not happy about Git with Smalltalk, but suppose I’ll get used to it.  I’m not happy about giving up namespaces. I loathe Hungarian on my class names.  I keep trying to port, but something goofy and annoying in the GUI always stops me--14 years on and still can’t port.  It’s kinda funny.

 

 

 

Shaping

To unsubscribe from this group and stop receiving emails from it, send an email to il...@googlegroups.com.

Shaping

unread,
May 1, 2020, 6:26:15 AM5/1/20
to Iliad project

JS: I have not used many JS libs with Iliad, but there it should be very straightforward. You use them on the page and can communicate with the server by triggering event on widget that then pass the data to your server side app code. You can also make raw XHR requests to controllers but I had some unresolved issues with that recently, as you can see in the archives. 

 

I have tricky custom coloring of numbers in grids.  I need to do that on the Smalltalk side, where it is already coded and working but in the Aragon NewDataSet, which is showing its age, especially in comparison to some of the JS components.

 

i think as with seaside the community here is small and the Docs outdated so you   need to be comfortable  browsing the sources  and examples and using the general debugging tools of you don’t want to be stuck for too long during work. But Iliad is stable and predictable so i find it not too frustrating.

 

That’s fine. But I need code for VW to save time if possible.  Porting Iliad from Pharo to VW is probably less risky than porting my current project to Pharo and also getting comfortable with all the new tools (and hassles that go with that).

 

Could be cool to have you as part of this community and perhaps more activity on the mailing list. 

 

Yeah, I don’t understand what’s going on with the web-app-framework scene in Smalltalk.  Maybe you guys can explain it to me.

 

Is Seaside slow?  Is it still being actively maintained, or is it basically dead and in maintenance mode?  Why is there not more enthusiasm over live St-based web dev?  No one should be editing files now in the 21st century.  It’s silly and awkward and kills the joy.  I don’t get it.  I’m missing something.  I guess the culture sees only React, Angular, and View.  Can we do the same slick things in Iliad?  And wouldn’t it be a lot more fun?

 

 

Also you could try these tutorials - https://leonardoce.wordpress.com/tag/iliad/

 

Thank you.  I wasn’t able to find that on the site.

 

Do you guys have some of the Pharo code ported to VW, or must I start from zero if I want Iliad on VW 8.3.2?  If you have nothing done that I can start with, my plan would be to make a Pharo 6.1 image, load Iliad, and move it over manually, unless you have a filtering tool that helps.  I don’t see such a tool for Pharo to VW, only one for VW to Pharo.

 

 

I just tried to load Iliad into Pharo 6.1:

 

Metacello new

    smalltalkhubUser: 'hernan' project: 'Iliad';

    configuration: 'Iliad';

    version: #stable;

    load

 

 

I got an exception involving FFI:

 

 

Author: S

 

FFICallout>>loaderForArgNamed:

FFICallout>>loaderForArgNamed:indirectIndex:

FFICallout>>argName:indirectIndex:type:ptrArity:

FFIFunctionParser>>parseArgument

FFIFunctionParser>>parseArguments

FFIFunctionParser>>parseNamedFunction:

FFICalloutMethodBuilder>>parseSignature:

FFICalloutMethodBuilder>>generate

FFICalloutMethodBuilder>>build:

FFICalloutAPI>>function:module:

LGitFetchOptions(LGitExternalStructure)>>callUnchecked:options:

LGitFetchOptions>>fetch_init_options:version:

[ self

                fetch_init_options: self

                version: LGitOptionsVersionsEnum git_fetch_options_version_1 ] in LGitFetchOptions>>initializeWithDefaults

LGitFetchOptions(LGitExternalStructure)>>withReturnHandlerDo:

LGitFetchOptions>>initializeWithDefaults

LGitFetchOptions class(LGitStructWithDefaults class)>>defaults

LGitCloneOptions class>>withCredentialsProvider:

self location in IceLibgitLocalRepository>>cloneRepositoryFrom:branch:

[ self checkInitialized.

arg1 value ] in LGitGlobal class>>runSequence:

[ tmp1 psValueAt: index put: arg1.

arg2 value ] in LGitActionSequence(DynamicVariable)>>value:during:

BlockClosure>>ensure:

LGitActionSequence(DynamicVariable)>>value:during:

LGitActionSequence class(DynamicVariable class)>>value:during:

LGitGlobal class>>runSequence:

IceLibgitLocalRepository>>cloneRepositoryFrom:branch:

IceRepositoryCreator>>createRepository

[ | tmp6 |

tmp6 := IceRepositoryCreator new.

tmp6

                url: tmp4;

                subdirectory: repoPath;

                branchName: self projectVersion.

tmp6 createRepository register ] in [ | tmp4 |

tmp4 := tmp2 url.

[ | tmp6 |

tmp6 := IceRepositoryCreator new.

tmp6

                url: tmp4;

                subdirectory: repoPath;

                branchName: self projectVersion.

tmp6 createRepository register ]

                on: IceAuthenticationError

                do: [ :arg2 |

                                self

                                                crLog:

                                                                ('I got an error while cloning: {1}. I will try to clone the HTTPS variant.'

                                                                                format: {arg2 messageText}).

                                tmp4 := tmp2 httpsUrl.

                                arg2 retry ] ] in MCGitHubRepository(MCGitBasedNetworkRepository)>>getOrCreateIcebergRepository

BlockClosure>>on:do:

[ | tmp4 |

tmp4 := tmp2 url.

[ | tmp6 |

tmp6 := IceRepositoryCreator new.

tmp6

                url: tmp4;

                subdirectory: repoPath;

                branchName: self projectVersion.

tmp6 createRepository register ]

                on: IceAuthenticationError

                do: [ :arg2 |

                                self

                                                crLog:

                                                                ('I got an error while cloning: {1}. I will try to clone the HTTPS variant.'

                                                                                format: {arg2 messageText}).

                                tmp4 := tmp2 httpsUrl.

                                arg2 retry ] ] in MCGitHubRepository(MCGitBasedNetworkRepository)>>getOrCreateIcebergRepository

OrderedCollection(Collection)>>detect:ifFound:ifNone:

OrderedCollection(Collection)>>detect:ifNone:

MCGitHubRepository(MCGitBasedNetworkRepository)>>getOrCreateIcebergRepository

IceGithubRepositoryType>>mcRepository

Iceberg class>>mcRepositoryFor:

IceMetacelloPharoPlatform>>createRepository:

MetacelloMCProject>>createRepository:

MetacelloRepositorySpec>>createRepository

[ arg3 createRepository ] in [ :arg3 |

| tmp3 tmp4 |

tmp3 := arg3 description.

(tmp4 := tmp1

                detect: [ :arg4 | arg4 description = tmp3 ]

                ifNone: [ arg3 createRepository ]) ~~ nil

                ifTrue: [ tmp2 add: tmp4 ] ] in MetacelloEnsureFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>repositoriesFrom:ignoreOverrides:

Array(Collection)>>detect:ifFound:ifNone:

Array(Collection)>>detect:ifNone:

[ :arg3 |

| tmp3 tmp4 |

tmp3 := arg3 description.

(tmp4 := tmp1

                detect: [ :arg4 | arg4 description = tmp3 ]

                ifNone: [ arg3 createRepository ]) ~~ nil

                ifTrue: [ tmp2 add: tmp4 ] ] in MetacelloEnsureFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>repositoriesFrom:ignoreOverrides:

Array(SequenceableCollection)>>do:

MetacelloEnsureFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>repositoriesFrom:ignoreOverrides:

MetacelloEnsureFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>repositoriesFrom:

MetacelloPackageSpec>>explicitLoadUsing:

MetacelloPackageSpec>>ensureLoadUsing:

MetacelloMCBaselineOfProjectSpec(MetacelloMCProjectSpec)>>ensureLoadUsing:

[ super ensureLoadUsing: arg1 ] in MetacelloMCBaselineOfProjectSpec>>ensureLoadUsing:

BlockClosure>>on:do:

MetacelloMCBaselineOfProjectSpec>>ensureLoadUsing:

MetacelloMCBaselineOfProjectSpec(MetacelloMCProjectSpec)>>ensureProjectLoaded

[...]

 

 

 

Anyone know how to get a good load of Iliad?

 

 

Is everyone one on this list mostly using Pharo?  Are you happy with it?  Does anyone want to see Iliad run on VW?

 

 

Shaping

Shaping

unread,
May 1, 2020, 6:45:33 AM5/1/20
to Iliad project
Typo:  'Vue' not 'View'.

Hernán Morales Durand

unread,
May 1, 2020, 2:02:50 PM5/1/20
to il...@googlegroups.com
I read it from time to time, but as you can understand some of us are working in other projects.

And nobody, at least to me, paid me a cent for maintaining Iliad or developing some parts (I don't know others).

But now there are multiple options to collaborate as this is fully Open Source, you can actually clone and try to integrate into Pharo 8 with the recent Zinc changes which Benoit did.

 Cheers,

Hernán

Shaping

--
You received this message because you are subscribed to the Google Groups "Iliad project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to iliad+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/iliad/a1ad8af5-3b06-4356-ab80-e8f9ff6d59c8%40googlegroups.com.

Shaping

unread,
May 1, 2020, 4:27:23 PM5/1/20
to Iliad project
I would be willing to work on a port to VW 8.3.2 if I can get a clean load of Iliad into Pharo 6.1, but this

Metacello new
    smalltalkhubUser: 'hernan' project: 'Iliad';
    configuration: 'Iliad';
    version: #stable;
    load



loads from SmalltalkHub.  Is that the correct source of Iliad?


Is the above the current GitHub repo?  If so, the code base has not changed in eight years.  Is this old version being used actively by anyone today?

I see in another thread that someone is contemplating a port to Pharo 7/8.  Porting from Pharo 7/8 to VW might make more sense.  Thoughts?  I don't know the condition of the old code base.




Shaping

benoit

unread,
May 2, 2020, 1:40:23 PM5/2/20
to il...@googlegroups.com
Hi Shaping,

about the "web-app-framework scene in Smalltalk", the thing is that
nowadays the state-the-art architecture in web apps is :
- a stateless server ;
- talking via a REST API ;
- to a single page webapp coded in some JS framework.

Aida, Iliad and Seaside are all strangers to this world.

This is bad because what was our strong point : widgets, is now done
on the client side. And we can't really reuse it nor compete with it
(low manpower and no afaik there isn't any widget library project in the
web-app-framework scene in Smalltalk).
From what I can see, Seaside has aknowledge that and is trying to
integrate better with existing javascript web frameworks. But from the
beginning it was more natural for Seaside than Iliad and Aida.

From my point of view, for web developement with Smalltalk today you
have three, no four choices :
- the mainstream way : use Smalltalk only for backend with Zinc (and
Teapot, and OpenAPI) to provide the REST API, and use whatever you want
on the front side (ReactJS, Angular, View, etc) ;
- the middle road : use Seaside and/or things on top of it like Willow
and all the Seaside bindings of JS library ;
- the old way : all the work is done on serverside with the DOM updated
on client side via AJAX requests (this is the way of Iliad and Aidaweb) ;
- the "strange way" : develop in Smalltalk but execute as Javascript
with Amber or PharoJS.

Before you put effort in Iliad, you need to be sure that's the way you
want to go.
I am sure you can do nice things with Iliad (otherwise I wouldn't be
working on it) but you won't be able to reuse a lot of outside world work.

You said you need to interface to a tree-grid and candlestick JS chart
components. If I was you I would first look at Seaside :
- see how Seaside implements bindings to a js library (like ChartJs) as
it would give you an idea of the work needed and could probably be
usefull even if choosing Iliad at end (I don't think we have any example
in Iliad) ;
- create a test app, a simple one but trying to simulate the specifics
of your needs and see if the performance of Seaside is enough for your
needs.

Sure it would be nice to have you here, and we will help you on Iliad
topics. But Seaside has a bigger community and looks to me more logical
with your needs.

@+
Benoit


Le 01/05/20 à 12:26, Shaping a écrit :
> now in the 21^st century.  It’s silly and awkward and kills the joy.  I
> don’t get it.  I’m missing something.  I guess the culture sees only
> React, Angular, and View.  Can we do the same slick things in Iliad?
> And wouldn’t it be _a lot_ more fun?
>> <https://www.aidaweb.si/benchmarks/wapt-swazoo-20?version=7.s>.
>>
>> The current project needs to interface to a tree-grid and
>> candlestick JS chart components.  Can I do that is Illiad,
>> and is integration with JS libs generally working well?
>>
>> What are the current problems with Illiad?  What does it
>> not do well yet?
>>
>>
>> Cheers,
>>
>> Shaping
>>
>> --
>> You received this message because you are subscribed to
>> the Google Groups "Iliad project" group.
>> To unsubscribe from this group and stop receiving emails
>> from it, send an email to il...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/iliad/69ab229b-ee3e-45ef-b223-9eb3486ec7a5%40googlegroups.com
>> <https://groups.google.com/d/msgid/iliad/69ab229b-ee3e-45ef-b223-9eb3486ec7a5%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
>
> I responded twice to the group by e-mail but I don't see either
> post yet.  Composing in Outlook is easier.  How long do e-mailed
> messages take to show?
>
>
> Okay, so e-mailed responses to a Google group don't work.  Why does
> that feel completely wrong?  I'll repost using the web app.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Iliad project" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to iliad+un...@googlegroups.com
> <mailto:iliad+un...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/iliad/ca1a0c77-3099-4ea7-8319-6fb334011090%40googlegroups.com
> <https://groups.google.com/d/msgid/iliad/ca1a0c77-3099-4ea7-8319-6fb334011090%40googlegroups.com?utm_medium=email&utm_source=footer>.

benoit

unread,
May 2, 2020, 1:51:23 PM5/2/20
to il...@googlegroups.com
Hi Shaping,

> I would be willing to work on a port to VW 8.3.2 if I can get a clean
> load of Iliad into Pharo 6.1, but this
>
> |Metacello new smalltalkhubUser: 'hernan' project: 'Iliad';
> configuration: 'Iliad'; version: #stable; load
>
> loads from SmalltalkHub.  Is that the correct source of Iliad?

Yes it is. The latest stable version of Iliad for Pharo 6 is on Hernán
repo in SmalltalkHub.


> https://github.com/NicolasPetton/iliad
>
> Is the above the current GitHub repo?  If so, the code base has not
> changed in eight years.  Is this old version being used actively by
> anyone today?

Afaik, this version isn't used by anyone today.

> I see in another thread that someone is contemplating a port to Pharo
> 7/8.  Porting from Pharo 7/8 to VW might make more sense.  Thoughts?  I
> don't know the condition of the old code base.

That should be me. I am working on porting Iliad on top of Zinc, then
we should be able to have it run on Pharo 7 and 8.

My work is allready in Hernán repo and is roughly working but need
some polishing.
Can't make promises about a date however.


If you make a port of Iliad to VW, which webserver will you use ? Is
Zinc present in VW ?

@+
Benoit

benoit

unread,
May 2, 2020, 4:58:18 PM5/2/20
to il...@googlegroups.com
>> I responded twice to the group by e-mail but I don't see either post
>> yet.  Composing in Outlook is easier.  How long do e-mailed messages
>> take to show?
>>
>
> Okay, so e-mailed responses to a Google group don't work.  Why does that
> feel completely wrong?  I'll repost using the web app.


I had the same issue a few years ago. I was able to fix it, but I
don't remember exactly what I did.
I am using Thunderbird and it's working as intended, so you should be
able to get Outlook working.

@+
Benoit

Shaping

unread,
May 2, 2020, 11:51:06 PM5/2/20
to Iliad project

 

  about the "web-app-framework scene in Smalltalk", the thing is that nowadays the state-the-art architecture in web apps is :

                - a stateless server ;

                - talking via a REST API ;

                - to a single page webapp coded in some JS framework.

 

  Aida, Iliad and Seaside are all strangers to this world.

 

Yes, but must this situation persist?

 

  This is bad because what was our strong point : widgets, is now done on the client side.

 

Agreed.  This is mostly correct, and we should have an attractive way to use JS-based client-side rending.  However, if you study the server-rendered stuff in Elixir/Erlang, in particular, you can verify that a very fast server and fast HTML construction work well in some cases.  It's not a panacea for all web-apps, but Elixir performance is very remarkable to watch.  The Elixir sites I’ve tested do real-time updates at rates mostly indistinguishable from what is expected from JS running locally.  I wonder how close we can get to such performance with Iliad.

 

I have deep interest in Wasm/WASM (usable now) and in WebGPU (not quite ready).  I plan to take all of my development toward Wasm, even the VM.  It’s mostly about the speed, easy deployment on one target, and built-in security (WASI).

 

And we can't really reuse it nor compete with it (low manpower and no afaik there isn't any widget library project in the web-app-framework scene in Smalltalk).

 

  From what I can see, Seaside has aknowledge that and is trying to integrate better with existing javascript web frameworks.

 

--as is Cincom’s AppeX, but I’ve not been able to use it yet.   Any thoughts on the AppeX architecture?

 

Should we use some of Seaside’s ideas for JS lib integration?  I’m still not sure how JS libs are working yet in Aida.

 

But from the beginning it was more natural for Seaside than Iliad and Aida.

 

What then is the plan for Iliad going forward?   Have we agreement now on how to change Iliad?

 

  From my point of view, for web developement with Smalltalk today you have three, no four choices :

                - the mainstream way : use Smalltalk only for backend with Zinc (and Teapot, and OpenAPI) to provide the REST API, and use whatever you want on the front side (ReactJS, Angular, View, etc) ;

                - the middle road : use Seaside and/or things on top of it like Willow and all the Seaside bindings of JS library ;

 

I looked briefly at Willow.  I enjoy the brevity of its expressions. 

 

                - the old way : all the work is done on serverside with the DOM updated on client side via AJAX requests (this is the way of Iliad and Aidaweb) ;

 

Right.  The problem then with this approach is that sometimes performance lags behind JS local rendering when complex pages are built/updated.  How can Iliad claim JS integration and not let the JS run on the client (“tight integration between Javascript components on the client”)?  I guess I need a definition for this integration.  A JS graphical component is useless if not running on the client and rendering some graphics.  What is Aida (or Illiad) doing with all the compiled, class-side Js (and other JS-lib-sourced resources) methods?

 

I eventually want to code all in Smalltalk, compile to s-expressions (.wat), and use the available binaries via FFI to convert .wat to .wasm before sending it to the browser. 

 

                - the "strange way" : develop in Smalltalk but execute as Javascript with Amber or PharoJS.

 

Yes, strange indeed. I don’t like JS, even though it runs the web universe, more or less.  I think it will gradually be marginalized by Wasm and WebGPU/WebGL, as JS vendors start targeting the Wasm for its much higher speed.  I want to start now in that direction, and not just conform to the new trend when it becomes abundantly evident later, as JS-vendors start to switch their products to a Wasm target.

 

  Before you put effort in Iliad, you need to be sure that's the way you want to go.

 

Correct.  I think I see a way to make Iliad work.  Some of the details are unclear.  I need to practice with Iliad and Aida.  I almost have Aida working smoothly.  

 

All decisions in this business (or any) reduce to:  1) values; 2) measurements.

 

We all value speed—fast building of HTML docs and fast transmissions of those docs to the client.

 

We value ergonomic, graceful language and dev dynamic.  That’s why we use Smalltalk.  For some of us, language quality matter much more.  I want to take the language-ergonomics much further.  That’s mostly what I’m about--that and concurrency.   The language ergonomics are all about saving dev time and being able to debug an app of any complexity with trivial effort and rapidly.  This is why my Smalltalk style is becoming extremely functional over the years.  I want all of this code I’m writing to run effortlessly on many cores, and that’s a degenerately easy task with a purely functional programming pattern.  It’s impossible if side-effects are not managed very systematically.  Functional programming has some affect, too, on the natural-language grammars chosen to represent domain logic, but I digress.  Reading/thinking/debugging efficiently is my overarching objective as I do the smaller tasks.  It’s another subject for another time, but I mention it now because this one constraint precludes my using any language that looks even a little like Algol-60 (which is most of them).  I use the JS somewhat begrudgingly because it’s a necessary evil, and it has utility.

 

We value small program sizes and efficient use of memory, but I prefer to burn memory to get speed whenever possible, because memory is cheap and because I crunch numbers and do 3D graphics.  However, liberal use of memory is more doable on the locally running program (most of what I write now) than on a web server with lots of users to server.  It’s a value that doesn’t scale as well in the web context. 

 

Practically my constraints are:  use Smalltalk; use Wasm; use JS as needed for glue in the one HTML page, and phase out JS when/where possible.  My problem is that near-term I need to use 3rd-party JS components to do graphically complicated work quickly.  I’m assuming Iliad can handle this.

 

Do you have automated benchmarks (measurements) for Iliad?  Is there a CI loop or is one being planned?

 

  I am sure you can do nice things with Iliad (otherwise I wouldn't be working on it) but you won't be able to reuse a lot of outside world work.

 

Can you give more detail here?  Aida lets you parse and compile a JS lib as class-side methods in a *Library class.  I suppose Iliad does something similar.

 

Do you know how to use Aida? 

 

In Aida,  I just made an AnyChartLibary by parsing the downloaded .js file for AnyChart with WebMethodLibrary (I had to hack around all the unix-centric file handling to make it work for Windows).  The new AnyChartLibrary now has 2000+ methods on the class side.  Some of them seem reasonable, based on the way the other libraries look.  I’ve methods of the form *Txt *Css *Json *Svg.  But I also have huge *Zip methods that bloat my image from 400 MB to 800 MB.  Those zip files probably shouldn’t be compiled.  I’m not sure.  Does anyone know?  Do I need to unzip those inner zips first?  In many cases they contain fonts.

 

  You said you need to interface to tree-grid and candlestick JS chart components. If I was you I would first look at Seaside :

 

I am reading the Seaside tut, but Seaside is a big system, and one comment that comes up on SO is that it’s hard to get going even with a simple app.  (I loaded Seaside in VW and have no idea how to get started with it in VW.)  There was another SO poster who loved Iliad.  Why is Iliad the lesser choice when a big JS lib must be used?

 

                - see how Seaside implements bindings to a js library (like ChartJs) as it would give you an idea of the work needed and could probably be usefull even if choosing Iliad at end (I don't think we have any example in Iliad) ;

 

Yes, I was thinking something similar.  Has anyone integrated a JS lib in Iliad and had a good experience?

 

                - create a test app, a simple one but trying to simulate the specifics of your needs and see if the performance of Seaside is enough for your needs.

 

I must near-term stay in VW because of time constraints.  I would like to port the most recent work to Pharo 8, but I think the task will be a destructive time sink.  I’m willing to try this if someone can suggest the best tools to use and has actually tried it.  Then I can make a more informed decision.

 

I found https://github.com/ObjectProfile/Pharo2VW for going the other way:  Pharo to VW.  I could port Iliad to VW after you port Iliad from Pharo 6.1 to 8.

 

  Sure it would be nice to have you here, and we will help you on Iliad topics. But Seaside has a bigger community and looks to me more logical with your needs.

 

Is Seaside slower as the Aida benchmarks show?   If Iliad is faster and smaller and therefore easier to grasp in a short time, what stops me from using a JS lib there?   Here is the first paragraph on the Iliad site:

 

“Iliad is a web framework for Smalltalk, an object-oriented, dynamically typed, reflective programming language. Iliad is heavily based on reusable stateful widgets, Iliad lets you build powerful dynamic applications easily. Iliad was designed around tight integration between Javascript components on the client and Smalltalk components on the server. It has the following main features:”

 

I’m not understanding why Iliad would be a bad choice if I want to use a graphically rich JS lib.

 

 

Shaping

 

Reply all
Reply to author
Forward
0 new messages