Seaside (software)

{{Short description|Smalltalk web framework}}

{{Infobox software

| name = Seaside

| logo = Seaside.png

| logo caption = Seaside logo

| screenshot = Seaside-development.png

| caption = Screenshot of a web application in development mode

| developer = The Seaside Team[http://www.seaside.st/community/contributors/ The Seaside Team]

| released = {{Start date and age|2002}}

| latest release version = 3.5.9

| latest release date = {{Start date and age|2024|10|25}}{{Cite web|url=https://github.com/SeasideSt/Seaside/releases|title=Releases · SeasideSt/Seaside|website=GitHub}}

| programming language = Smalltalk

| operating system = Cross-platform

| platform = IA-32, x86-64, ARM

| size =

| language = English

| genre = Web framework

| license = MIT

}}

Seaside, an acronym that stands for “Squeak Enterprise Aubergines Server with Integrated Development Environment,” is computer software, a web framework to develop web applications in the programming language Smalltalk. It is distributed as free and open-source software under an MIT License.

Seaside provides a component architecture in which web pages are built as trees of individual, stateful components, each encapsulating a small part of a page. Seaside uses continuations to model multiple independent flows between different components.[http://www.iam.unibe.ch/~scg/Archive/Papers/Duca04eSeaside.pdf Seaside – a Multiple Control Flow Web Application Framework] Thus, it is a continuation-based web framework[http://www-128.ibm.com/developerworks/java/library/j-cb03216/ IBM DeveloperWorks: Crossing borders: Continuations, Web development, Java programming] based on the ability to manipulate the execution stack of some implementations of Smalltalk.

Key features

Although subsequent improvement of state handling in web browser JavaScript engines have meant this aspect is less important today,{{ref needed|date=December 2022}} Seaside's method of handling of browser state (via continuations) was an initial point of interest in the first years following its 2002 release. This mechanism provides for rollback and resumption, resolving many common issues then occurring with running web applications, adequately sustaining the state on the server-side even when the web browser's 'back' and 'forward' or 'refresh' buttons are used. Continuation based servers give the developer the ability to maintain state on the server in a scalable manner.[http://scg.unibe.ch/archive/papers/Duca07a-SeasideIEEE-SCG.pdf Seaside: A Flexible Environment for Building Dynamic Web Applications]

A distinctive feature of Seaside is its integrated development environment, providing access to development tools and debugging support within an application. In development-mode, unhandled errors are reported to the web page; developers can access and alter the program code and state directly from the web page, allowing bug identifying and fixing processes to occur within an integrated development environment (IDE).[http://www.seaside.st/documentation/debugging Debugging Seaside Applications]

A Seaside application is a set of interacting components. Each one stores state across page views and can render itself to the HTML stream. Thus, it is straightforward to write a component once and then reuse it elsewhere in an application. Seaside also supports the notion of tasks, which allow a programmer to describe the high-level logic of component interaction.

Seaside is not template-oriented, and does not offer generating or using HTML templates; HTML markup is generated programmatically. (The Seaside-based Pier content-management framework does offer wiki-markup syntax for templating.) Seaside uses callbacks on closures to specify actions to be taken when clicking on a link or submitting a form. The developers and users of Seaside argue that this helps enforce separation of structure (markup) from content and presentation (Cascading Style Sheets (CSS)).[http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&entry=3257728961 Avi Bryant explains why Seaside doesn't use templates] Seaside's combination of components, callbacks, and closures can significantly reduce the semantic gap between a complex workflow and its representation in code.[https://github.com/accursoft/binding/wiki/Web%20Application%20Frameworks.pdf Web Application Frameworks: A Comparative Study]

Seaside supports Ajax through integration with script.aculo.us and jQuery. Seaside also supports Comet-style server-push technology.[http://www.lukas-renggli.ch/smalltalk/seaside/videos/comet.mov Screencast: Seaside Comet Chat Application]

Seaside can work with either Smalltalk-based web server implementations or other non-Smalltalk ones (Nginx, Apache).

Philosophy

Over the last few years, some best practices have come to be widely accepted in the web development field:

  • Share as little state as possible.
  • Use clean, carefully chosen, and meaningful URLs.
  • Use templates to separate the model from the presentation.

Seaside deliberately breaks all of these rules. Avi Bryant, then of Dabble DB, in 2006 described it as a 'heretical' framework, arguing that this careful and reasoned rejection of the conventional wisdoms of web development led to a very effective model for developing web applications.{{cite web|url=http://conferences.oreillynet.com/cs/os2006/view/e_sess/8942 |title='Web Heresies: The Seaside Framework' Session notes, OSCON 2006 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20140830152243/http://conferences.oreillynet.com/cs/os2006/view/e_sess/8942 |archive-date=2014-08-30 }}

Ports

The main development of Seaside is implemented in Pharo Smalltalk.[http://seaside.st/about/history "Seaside 2.9 is current implemented on Pharo that serves as a reference implementation."] Ports for other Smalltalk dialects exist.

The original development of Seaside was done on Squeak in the early 2000s.

Michel Bany implemented ports to VisualWorks through Seaside version 2.7; Cincom Systems supports Seaside as part of VisualWorks as of early 2008. Instantiations announced Seaside support in its VAST (VA Smalltalk) Platform version 8.0 in 2009. The VAST Platform has continued to support Seaside through its latest version.

Esteban Maringolo maintained the 2.8 port, plus some other add-ons (such as script.aculo.us) for Dolphin Smalltalk X6.[http://dolphinseaside.blogspot.com/ Seaside for Dolphin Smalltalk blog]

Gemstone Systems implemented a port to Gemstone/S.[http://lists.squeakfoundation.org/pipermail/seaside/2006-November/009886.html Seaside2.6g]

A port of 2.8 was completed for GemStone,[http://gemstonesoup.wordpress.com/2007/07/12/seaside-28-ported-to-gemstones/ Seaside 2.8] and a preliminary version of 3.0 runs on GNU Smalltalk 3.0a and later.[http://smalltalk.gnu.org/faq/43 Does Seaside run on GNU Smalltalk], GNU Smalltalk FAQ

The web server package in the standard library of Racket (Programming language) uses a very similar philosophy, also based on continuations.{{cite web | url=https://docs.racket-lang.org/continue/index.html | title=Continue: Web Applications in Racket }}

Criticisms

  • Compared to other web frameworks, Seaside is memory intensive. One session could accumulate several hundred kilobytes of RAM. A later release, version 2.8, significantly reduces this size (e.g., a formerly typical 200 KB size becomes 50 KB).
  • Seaside does not follow representational state transfer (REST) by default. Instead, Uniform Resource Locators (URLs) hold session key information, and meaningful URLs must be generated explicitly.

Open-source projects using it

Many open-source projects use Seaside, some of which are:

  • Magritte – a meta-description framework with a tight integration into Seaside
  • Pier – a content management system and high level application framework for Seaside
  • ADK Project

Proprietary projects using it

Many proprietary projects use Seaside, some of which are:

  • Dabble DB – web-based database application[http://weblog.infoworld.com/udell/2006/10/31.html Jon Udell article in InfoWorld] {{webarchive|url=https://web.archive.org/web/20070212055642/http://weblog.infoworld.com/udell/2006/10/31.html |date=2007-02-12 }}
  • Cmsbox – a content management system (CMS) made available by netstyle.ch for the Swiss market.

See also

{{Portal|Free and open-source software}}

References

{{Reflist|2}}