SlideShare a Scribd company logo
1 of 37
Download to read offline
Winning the Application
Server Arms Race
Using Smalltalk to Redefine Web Development
Avi Bryant
Web apps: why bother?
“I’m more of the mind that HTML based
apps suck.”
— James Robertson
Web apps: why bother?
“One of the reasons to use Lisp in writing
Web-based applications is that you ca!
use Lisp. When you’re writing software
that is only going to run on your own
servers, you can use whatever language
you want.”
— Paul Graham
What is a web app?
“A collection of functions that take
HTTP requests as input and produce
HTTP responses as output.”
What is a web app?
User with Web Browser
GET /foo?x=3
...
Content-Type:
text/html
...
/foo
What is a web app?
User with Web Browser
GET /foo?x=3
...
Content-Type:
text/html
<a href=“/bar”
...
/foo /bar /baz
Client/server app
VisualWorks Client
GemStone Server
Get
Shipping
Address
Get
Billing
Address
Get
Payment
Info
Show
Confirmation
Get
Shipping
Address
Get
Billing
Address
Get
Payment
Info
Show
Confirmation
Cart info Cart info
Shipping info
Cart info
Shipping info
Billing info
Cart info
Shipping info
Billing info
Payment info
/shipping
User with Web Browser
cart
/billing
cart
shipping
cart
shipping
/payment
cart
shipping
billing
cart
shipping
billing
cart
shipping
billing
payment
User with Web Browser
cart cart
shipping
cart
shipping
cart
shipping
billing
cart
shipping
billing
cart
shipping
billing
payment
formatting
processing
formatting
do stuff
processing
formatting
do stuffdo stuff
processing
an App
a32cf6d
a Sessiona Sessiona Session
76ebc65
...
User
GET /foo?sid=a32cf6d
... <a href=“/bar?sid=a32cf6d”>...
/foo
an App
a32cf6d
a Sessiona Sessiona Session
76ebc65
...
User
GET /bar?sid=a32cf6d
... <a href=“/baz?sid=a32cf6d”>...
/bar
/shipping
User with Web Browser
/billing
sid
shipping
/payment
sid
billing
sid
payment
a Session
shipping billing
sid sid sid
sessions
Book
flight
Browse
flights
Choose
flight
Choose
seat
Why global session state is evil
Book
flight
Browse
flights
Choose
flight
Choose
seat
Choose
flight
Choose
seat
Why global session state is evil
Book
flight
Browse
flights
Choose
flight
Choose
seat
Choose
flight
Choose
seat
?
Why global session state is evil
an App
a32cf6d
a Sessiona Sessiona Session
76ebc65
...
a Component
f5c
a Component a Component
a21
...
... <input name=“page”
value=“f5b”>...
a Session
a21
a BrowseFlights
POST ... page=a21&flight=747
... <input name=“page”
value=“a21”>...
User a ChooseFlight
f5b
a Session
a21
a BrowseFlights
POST ... page=a21&flight=525
User
... <input name=“page”
value=“cc4”>...
a ChooseFlight
cc4
f5b
a ChooseFlight
WOComponent
subclass: #BillingAddress
instanceVariableNames: ‘ship bill’
response
^ ‘<form ...’
processRequest: aRequest
bill := self addressFrom: aRequest.
^ PaymentInfo new
shippingAddress: ship;
billingAddress: bill;
yourself
“Seaside is to most other Smalltalk web
toolkits as Smalltalk is to most other OO
languages, it’s as simple as that.”
— Cees de Groot
WebObjects
• http://www.apple.com/webobjects/
• http://jakarta.apache.org/tapestry/
WOComponent
subclass: #BillingAddress
instanceVariableNames: ‘ship bill’
processRequest: aRequest
bill := self addressFrom: aRequest.
^ PaymentInfo new
shippingAddress: ship;
billingAddress: bill;
yourself
WOComponent
subclass: #BillingAddress
instanceVariableNames: ‘ship bill’
processRequest: aRequest
bill := self addressFrom: aRequest.
^ PaymentInfo new
shippingAddress: ship;
billingAddress: bill;
next: (ConfirmationPage new)
yourself
WOComponent
subclass: #BillingAddress
instanceVariableNames: ‘ship bill’
processRequest: aRequest
bill := self addressFrom: aRequest.
^ next
shippingAddress: ship;
billingAddress: bill;
yourself
checkoutProcess
^ (ShippingAddress new next:
(BillingAddress new next:
(PaymentInfo new next:
(ConfirmationPage new))))
WOComponent
subclass: #BillingAddress
instanceVariableNames: ‘ship bill’
processRequest: aRequest
bill := self addressFrom: aRequest.
^ next value: bill
“BillingAddress new next:
[:bill |
PaymentInfo new
billingAddress: bill;
....]”
checkoutProcess
^ ShippingAddress new next:
[:ship |
BillingAddress new next:
[:bill |
PaymentInfo new next:
[:pay |
ConfirmationPage new
shippingAddress: ship;
billingAddress: bill;
paymentInfo: pay;
yourself]
checkoutProcess
^ PaymentInfo new next:
[:pay |
ShippingAdress new next:
[:ship |
BillingAddress new next:
[:bill |
ConfirmationPage new
shippingAddress: ship;
billingAddress: bill;
paymentInfo: pay;
yourself]
“...programming language features do well
(all other things being equal) when they
eliminate either distant or dynamic state
and replace it with either close or lexical
state. The underlying point being that we
may favour language features that
facilitate copying and modifying small
bits of code -- fragments which work in
their new context -- as a fundamental
programming activity.”
— Graydon Hoare
checkoutProcess
|pay ship bill|
pay := self call: PaymentInfo new.
ship := self call: ShippingAddress new.
bill := self call: BillingAddress new.
self call:
(ConfirmationPage new
shippingAddress: ship;
billingAddress: bill;
paymentInfo: pay)
“We could write the code to say, if the
user clicks on this link, go to the color
selection page, and then come back
here.... It made our software visibly more
sophisticated than that of our
competitors.”
— Paul Graham
<form>
Name: <input name="name"><br>
Street: <input name="street"><br>
City: <input name="city"><br>
Country:
<select name="country">
<option value="CA">Canada</option>
<option value="US">US</option>
</select>
<br>
<input type="submit">
</form>
aRequest( ‘name’->‘Avi’,
‘street’-> ‘123 W. 15th’
‘city’->‘Vancouver’,
‘country’-> ‘CA’)
renderOn: html
html form: [
html label: ‘Name’.
html textInputNamed: ‘name’; break.
html label: ‘Street’.
html textInputNamed: ‘street’; break.
html label: ‘City’.
html textInputNamed: ‘city’; break.
html label: ‘Country’.
html selectNamed: ‘country’ do: [
html optionNamed: ‘CA’ label: ‘Canada’.
html optionNamed: ‘US’ label: ‘US’.
]; break.
html submitButton.
]
processRequest: aRequest
name := aRequest at: ‘name’.
street := aRequest at: ‘street’.
...
renderOn: html
html form: [
html label: ‘Name’.
html textInputWithCallback: [:v | name := v]; break.
html label: ‘Street’.
html textInputWithCallback: [:v | street := v]; break.
html label: ‘City’.
html textInputWithCallback: [:v | city := v]; ‘city’; break.
html label: ‘Country’.
html selectFromList: self countries; break.
html submitButtonWithAction: [self saveAddress].
]
<form>
Name: <input name="1"><br>
Street: <input name="2"><br>
City: <input name="3"><br>
Country:
<select name="4">
<option value="5">Canada</option>
<option value="6">US</option>
</select>
<br>
<input type="submit" name="7" value="Submit">
</form>
aRequest(
‘1’->‘Avi’,
‘2’->...,
‘7’-> ‘Submit’)
aCallbackStore(
‘1’->[:v | name := v],
‘2’->...,
‘7’->[self saveAddress])

More Related Content

Viewers also liked

Erlang in 11 Minutes
Erlang in 11 MinutesErlang in 11 Minutes
Erlang in 11 MinutesESUG
 
PyPy
PyPyPyPy
PyPyESUG
 
Glass
GlassGlass
GlassESUG
 
Daily Living Solutions Product Catalog v4-02
Daily Living Solutions Product Catalog v4-02Daily Living Solutions Product Catalog v4-02
Daily Living Solutions Product Catalog v4-02Courtney Berg
 
Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...
Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...
Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...Thorne & Derrick International
 
Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...
Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...
Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...Thorne & Derrick International
 
ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01
ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01
ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01Optelec US Inc.
 
Extreme
ExtremeExtreme
ExtremeESUG
 
Starting fresh every morning
Starting fresh every morningStarting fresh every morning
Starting fresh every morningESUG
 
Krestianstvo
KrestianstvoKrestianstvo
KrestianstvoESUG
 
A JIT Smalltalk VM written in itself
A JIT Smalltalk VM written in itselfA JIT Smalltalk VM written in itself
A JIT Smalltalk VM written in itselfESUG
 
Эмнэлгийн тавилга - Provita general catalogue
Эмнэлгийн тавилга - Provita general catalogue Эмнэлгийн тавилга - Provita general catalogue
Эмнэлгийн тавилга - Provita general catalogue Medimpex Mongolia
 
Advanced Techniques for BuildingTestingTools
Advanced Techniques for BuildingTestingToolsAdvanced Techniques for BuildingTestingTools
Advanced Techniques for BuildingTestingToolsESUG
 
Calling Java - JNIPort for VisualWorks
Calling Java - JNIPort for VisualWorksCalling Java - JNIPort for VisualWorks
Calling Java - JNIPort for VisualWorksESUG
 
Para ANAIS
Para ANAISPara ANAIS
Para ANAISchp
 
Tegnologia aplicada
Tegnologia  aplicadaTegnologia  aplicada
Tegnologia aplicadamarlencuesta
 
Kundenrezensionen und ihre Wirkung auf das Kaufverhalten
Kundenrezensionen und ihre Wirkung auf das KaufverhaltenKundenrezensionen und ihre Wirkung auf das Kaufverhalten
Kundenrezensionen und ihre Wirkung auf das KaufverhaltenBenjamin Kurczyk
 

Viewers also liked (20)

Erlang in 11 Minutes
Erlang in 11 MinutesErlang in 11 Minutes
Erlang in 11 Minutes
 
PyPy
PyPyPyPy
PyPy
 
Glass
GlassGlass
Glass
 
Daily Living Solutions Product Catalog v4-02
Daily Living Solutions Product Catalog v4-02Daily Living Solutions Product Catalog v4-02
Daily Living Solutions Product Catalog v4-02
 
Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...
Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...
Tomar Emergency Vehicle Products - Lightbars, LED Lightheads, Self-contained ...
 
Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...
Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...
Tomar Industrial Signalling Products - Visual Signals, LED, Strobe Lighting, ...
 
Sunsplash ohp manual
Sunsplash ohp manualSunsplash ohp manual
Sunsplash ohp manual
 
ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01
ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01
ShopLowVision.com Products for Eye Care Professionals product catalog, v. 4.01
 
Extreme
ExtremeExtreme
Extreme
 
Starting fresh every morning
Starting fresh every morningStarting fresh every morning
Starting fresh every morning
 
Krestianstvo
KrestianstvoKrestianstvo
Krestianstvo
 
RESTful services Design Lab
RESTful services Design LabRESTful services Design Lab
RESTful services Design Lab
 
A JIT Smalltalk VM written in itself
A JIT Smalltalk VM written in itselfA JIT Smalltalk VM written in itself
A JIT Smalltalk VM written in itself
 
Эмнэлгийн тавилга - Provita general catalogue
Эмнэлгийн тавилга - Provita general catalogue Эмнэлгийн тавилга - Provita general catalogue
Эмнэлгийн тавилга - Provita general catalogue
 
Advanced Techniques for BuildingTestingTools
Advanced Techniques for BuildingTestingToolsAdvanced Techniques for BuildingTestingTools
Advanced Techniques for BuildingTestingTools
 
Calling Java - JNIPort for VisualWorks
Calling Java - JNIPort for VisualWorksCalling Java - JNIPort for VisualWorks
Calling Java - JNIPort for VisualWorks
 
Para ANAIS
Para ANAISPara ANAIS
Para ANAIS
 
Tegnologia aplicada
Tegnologia  aplicadaTegnologia  aplicada
Tegnologia aplicada
 
Vamos De Compras
Vamos De ComprasVamos De Compras
Vamos De Compras
 
Kundenrezensionen und ihre Wirkung auf das Kaufverhalten
Kundenrezensionen und ihre Wirkung auf das KaufverhaltenKundenrezensionen und ihre Wirkung auf das Kaufverhalten
Kundenrezensionen und ihre Wirkung auf das Kaufverhalten
 

Similar to Winning the Application Server Arms Race

The Future of Progressive Web Apps - View Source conference, Berlin 2016
The Future of Progressive Web Apps - View Source conference, Berlin 2016The Future of Progressive Web Apps - View Source conference, Berlin 2016
The Future of Progressive Web Apps - View Source conference, Berlin 2016Robert Nyman
 
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...Sencha
 
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...Amazon Web Services
 
Building Advanced Serverless Applications
Building Advanced Serverless ApplicationsBuilding Advanced Serverless Applications
Building Advanced Serverless ApplicationsAmazon Web Services
 
The Future of the Web - Cold Front conference 2016
The Future of the Web - Cold Front conference 2016The Future of the Web - Cold Front conference 2016
The Future of the Web - Cold Front conference 2016Robert Nyman
 
cross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecturecross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architectureOleksandr Tserkovnyi
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3masahiroookubo
 
First impression of the new cloud native programming language ballerina
First impression of the new cloud native programming language ballerinaFirst impression of the new cloud native programming language ballerina
First impression of the new cloud native programming language ballerinaRichárd Kovács
 
Distributed Parcel Tracking/Management System Overview
Distributed Parcel Tracking/Management System OverviewDistributed Parcel Tracking/Management System Overview
Distributed Parcel Tracking/Management System OverviewMark Cheeseman
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션Amazon Web Services Korea
 
MongoDB.local Berlin: App development in a Serverless World
MongoDB.local Berlin: App development in a Serverless WorldMongoDB.local Berlin: App development in a Serverless World
MongoDB.local Berlin: App development in a Serverless WorldMongoDB
 
Clean up this mess - API Gateway & Service Discovery in .NET
Clean up this mess - API Gateway & Service Discovery in .NETClean up this mess - API Gateway & Service Discovery in .NET
Clean up this mess - API Gateway & Service Discovery in .NETMarcin Tyborowski
 
Hilfe, wir brauchen ein Frontend
Hilfe, wir brauchen ein FrontendHilfe, wir brauchen ein Frontend
Hilfe, wir brauchen ein FrontendOPEN KNOWLEDGE GmbH
 
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client ManagerDrupalDay
 
Building a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBuilding a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBen Limmer
 

Similar to Winning the Application Server Arms Race (20)

The Future of Progressive Web Apps - View Source conference, Berlin 2016
The Future of Progressive Web Apps - View Source conference, Berlin 2016The Future of Progressive Web Apps - View Source conference, Berlin 2016
The Future of Progressive Web Apps - View Source conference, Berlin 2016
 
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
 
Web I - 04 - Forms
Web I - 04 - FormsWeb I - 04 - Forms
Web I - 04 - Forms
 
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
 
Building Advanced Serverless Applications
Building Advanced Serverless ApplicationsBuilding Advanced Serverless Applications
Building Advanced Serverless Applications
 
The Future of the Web - Cold Front conference 2016
The Future of the Web - Cold Front conference 2016The Future of the Web - Cold Front conference 2016
The Future of the Web - Cold Front conference 2016
 
Payments On Rails
Payments On RailsPayments On Rails
Payments On Rails
 
cross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecturecross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecture
 
08 ajax
08 ajax08 ajax
08 ajax
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3
 
First impression of the new cloud native programming language ballerina
First impression of the new cloud native programming language ballerinaFirst impression of the new cloud native programming language ballerina
First impression of the new cloud native programming language ballerina
 
Web services intro.
Web services intro.Web services intro.
Web services intro.
 
Distributed Parcel Tracking/Management System Overview
Distributed Parcel Tracking/Management System OverviewDistributed Parcel Tracking/Management System Overview
Distributed Parcel Tracking/Management System Overview
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
 
MongoDB.local Berlin: App development in a Serverless World
MongoDB.local Berlin: App development in a Serverless WorldMongoDB.local Berlin: App development in a Serverless World
MongoDB.local Berlin: App development in a Serverless World
 
Introduction ASP
Introduction ASPIntroduction ASP
Introduction ASP
 
Clean up this mess - API Gateway & Service Discovery in .NET
Clean up this mess - API Gateway & Service Discovery in .NETClean up this mess - API Gateway & Service Discovery in .NET
Clean up this mess - API Gateway & Service Discovery in .NET
 
Hilfe, wir brauchen ein Frontend
Hilfe, wir brauchen ein FrontendHilfe, wir brauchen ein Frontend
Hilfe, wir brauchen ein Frontend
 
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
 
Building a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBuilding a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profit
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 

Recently uploaded (20)

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 

Winning the Application Server Arms Race