SlideShare a Scribd company logo
The 25th Annual European
Smalltalk User Group ConferenceSeptember 4, 2017
AppeX and JavaScript
Support Enhancements in
Cincom Smalltalk™
Speaker: Vladimir K. Degen
Proprietary & Confidential
A Bargain
Two talks in one!
• Generic JavaScript code management in Smalltalk,
(a segue)
• JavaScript evaluation and web automation from within
Smalltalk.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
A Misconception
• Lots of developers, Smalltalkers included, want to get
involved in web development.
• They might think that Smalltalk and JavaScript don’t go
together well, or that the mindsets are incompatible.
• Nothing could be further from the truth!
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Actually,

Smalltalk and JavaScript

go together like…
Beer and Bratwurst
Lox and Cream Cheese
Chocolate and Peanut
Butter
Proprietary & Confidential
A Little Recap of AppeX
• AppeX manages your JavaScript code versioning
• It allows you to build client-side JavaScript in an Object
Oriented manner.
• In practical terms, this means defining JavaScript “classes”, and
creating “instance” methods on them.
• Take a quick look at the IDE to give a baseline for this
presentation
@cincomsmalltalk #ESUG17
Proprietary & Confidential
More Recap of AppeX
[Open the IDE, show senders/implementers etc.]
• What you write in the JavaScript function template is the JavaScript 

you get in the web browser!
• Developing in AppeX is good way to hone your JavaScript skills while
leveraging the Smalltalk IDE.
• See 3 previous ESUG presentations on AppeX, including
https://www.slideshare.net/esug/2014-0817esug2014appe-x
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Some Subtleties, but only Briefly
• Up until EcmaScript6, JavaScript did not have a standard for class
hierarchies and method inheritance.
• Thus many products, including AppeX have implemented their own
class hierarchy inheritance frameworks.
• AppeX emphasizes the ApplicationClient as a delivery mechanism
of the JavaScript to the web client, with other JavaScript delivered
as external libraries.
• However the external libraries lose out on the code management
tools of AppeX.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Ok, a Bit of the Inheritance Hierarchy
JavascriptCode
JavascriptObject GenericJavascript
JavascriptArray,etc ApplicationClient JavascriptClosure
This talk
@cincomsmalltalk #ESUG17
Proprietary & Confidential
And a Couple More Subtleties
• With GenericJavascript, we are easing the process of delivering
JavaScript in any form.
• And this JavaScript can be completely managed within AppeX.
• This opens up further the possibility of easily porting sophisticated
web application code to and from AppeX, 

and also to use AppeX to produce applications in any

software design style that you wish.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript
• GenericJavascript just means code that will be displayed and
executed as written.
• The code in “initialize” will be delivered to the client as is and
executed immediately.
• The functions will appear as global functions on the client.
• Since the code is in the IDE , you get syntax highlighting, senders and
implementers and code version management.
• The markup in the comments below is so Smalltalk can parse it.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript – Code1
// <startContents: #{AppeX.HelloScript}>
function say(aString) {
var myDiv;
myDiv = document.createElement("div");
myDiv.innerHTML = aString;
document.body.appendChild(myDiv);
}
function sayHello(){
say('Hello from sayHello');
}
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript – Code 2
// <startInitialize: #{AppeX.HelloScript}>
document.body = document.body ||
document.createElement("body");
sayHello();
// <endContents: #{AppeX.HelloScript}>
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure
• A subclass of GenericJavascript which avoids creating globals.
• With JavascriptClosure, you get in addition that your code is
encapsulated in functions.
• That is, you get method and data encapsulation.
• You can also make private methods, though this is still work in
progress.
• You do *not* get class hierarchy inheritance
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure – Code 1
This is how it looks like in JavaScript:
Object.defineProperty(AppeX.PersonClosure.prototype,'say
Goodbye',
{value: function sayGoodbye(){
this.say('Goodbye', this.getIsWhispering());
},
enumerable: false, writable: true
});
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure - Function
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure - Initialization
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Application on the Server for the JavascriptClosure
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavaScript Closures and Generic JavaScript Scripts
• Note that the file based serving still works for these.
• However, cannot just parse and file in random JavaScript.
• We produce the code in a certain format (i.e. annotated with
comments) and file it in and parse it using the same format.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure and GenericJavascript - 1
• One advantage comes in how you can more naturally view and perhaps
reuse your code when the view is restricted to the single method, but
the methods are listed and grouped.
• The Smalltalk tools based browsers and code separation aids in
understandability of JavaScript as well as it does for Smalltalk.
 
• Suppose that you had a bunch of JavaScript Code that was kind of
complex and maybe not optimally written. Obviously not your own
code. Might’ve been your coworkers or just something you got from the
web.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavaScript Closure and Generic JavaScript - 2
• Putting your JavaScript into AppeX helps you to rationalize it. 

You are strongly encouraged by the tools to at least identify your
functions, the scopes of your variables, your objects, in order to get the
benefit of the tools.
 
• You could dump all your code into a big GenericJavascript, 

but that might not buy you much. So you can do this to get 

your application working then refactor from there.
• AppeX encourages an iterative development style.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
On to the JSAutomator/JSEvaluator
• JSEvaluator uses whatever web browser is available on the
server to evaluate JavaScript from within the AppeX IDE.
• Development only, not run-time.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Evaluating JavaScript in Smalltalk (sort of)
• Start the JSEvaluator Server
• Here are a few expressions that you might try in a workspace,
and comparing with the result when the JavaScript is evaluated in
a web browser console:
JSEvaluator evaluateJavaScript: '"a" + "c"'. "ac"
JSEvaluator evaluateJavaScript: ' 1 2 '. "Error"
JSEvaluator evaluateJavaScript:‘JSON.stringify(window.location);'.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
A More Practical Example, the Beautifier
• To try out JavaScript formatting using the open source
library jsbeautifier (http://jsbeautifier.org/):
a) Make a change to a JavaScript method in the 

refactoring browser
b)Try Menu...Edit...Format to observe the results.
• Conclusion:We have some ideas for useful external
JavaScript libraries, perhaps you have others.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Before Beautifying
@cincomsmalltalk #ESUG17
Proprietary & Confidential
After Beautifying
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Website Automation
• We have a lot of web application examples that we want to retest,
naturally, during internal releases.
• We created the JSAutomator, build upon the JSEvaluator.
• A test (or automation) script is injected into the application to be
tested.
• The injected JavaScript exercises the web application's functionality
and sends results back to the Smalltalk server.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Non-Intrusive Testing
• One goal was to have a completely non-intrusive testing mechanism
that does not require one modify the “tested” application in any way,
whether the application is external or internal.
• The JSAutomator uses a couple of techniques to achieve this goal.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Injecting Code
• Ideally the JSAutomator just adds its own code libraries 

(very easy when dealing with AppeX applications).
• Or:The Hammer
Inserting script tags at the end of the initial HTML document, and
then including the JSAutomator libraries.
• The downloaded code uses a couple of techniques to manipulate
the client browser, such as function wrapping and setTimeout.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Waiting for Results
• Ultimately, Smalltalk waits upon the “promise” or expected
results from the client browser.
• Internally, we’ve created a bunch of SUnit tests for our
examples. I’d like to show you a couple of those now.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Demos
Order of display:
• First an AppeX example opened and exercised manually:
HelloLocalized.
• Then automated.
• Finally, all of them automated.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Conclusions
• GenericJavascript increases flexibility of coding different types of
applications in AppeX while leveraging the Smalltalk IDE.
• GenericJavascript is used in the JSEvaluator, and hence the
JSAutomator.
• The JSAutomator framework has already proven useful to us for
regression testing of web applications.
• We hope you have fun with these new AppeX tools and capabilities.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Contact Us
Suzanne Fortman 

Director of Smalltalk Global Operations

sfortman@cincom.com

@SuzCST (Twitter)
Arden Thomas 

Product Manager

athomas@cincom.com

@ArdenTCST (Twitter)
Vladimir Degen

vdegen@cincom.com
@cincomsmalltalk #ESUG17
ThankYou!
Any questions?
Cincom, the Quadrant Logo, Cincom Smalltalk, Cincom ObjectStudio and CincomVisualWorks
are trademarks or registered trademarks of Cincom Systems, Inc.
©2017 Cincom Systems, Inc.
All Rights Reserved
Ad

Recommended

TRAX technical highlights
TRAX technical highlights
ESUG
 
Towards Modularity in Live Visual Modeling: A case-study with OpenPonk and Ke...
Towards Modularity in Live Visual Modeling: A case-study with OpenPonk and Ke...
ESUG
 
Do Visualizations help during development? Using Moose while coding.
Do Visualizations help during development? Using Moose while coding.
ESUG
 
Mini-Training: NDepend
Mini-Training: NDepend
Betclic Everest Group Tech Team
 
What's new in Visual Studio 2013 & TFS 2013
What's new in Visual Studio 2013 & TFS 2013
Danijel Malik
 
Back to the ng2 Future
Back to the ng2 Future
Jeremy Likness
 
Advanced AngularJS Tips and Tricks
Advanced AngularJS Tips and Tricks
Jeremy Likness
 
Vue micro frontend implementation patterns
Vue micro frontend implementation patterns
Albert Brand
 
Blazor
Blazor
Ed Charbeneau
 
Infrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous Delivery
Carlo Bonamico
 
OSGi with the Spring Framework
OSGi with the Spring Framework
Patrick Baumgartner
 
Hands on react native
Hands on react native
Jay Nagar
 
Building Cross Platform Mobile Apps
Building Cross Platform Mobile Apps
Shailendra Chauhan
 
MWLUG - Universal Java
MWLUG - Universal Java
Philippe Riand
 
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Spark Solutions
 
Introduction to React Native
Introduction to React Native
Polidea
 
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Aaron Jacobson
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVC
Sirwan Afifi
 
Introduction to Development for the Internet
Introduction to Development for the Internet
Mike Crabb
 
Angular js Fundamentals
Angular js Fundamentals
Renien Joseph
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
Stephen Chin
 
Angular vs. React
Angular vs. React
OPITZ CONSULTING Deutschland
 
ReactJS or Angular
ReactJS or Angular
boyney123
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
Etiene Dalcol
 
Introduction to React Native
Introduction to React Native
dvcrn
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web Apps
Rasheed Waraich
 
Razor and the Art of Templating
Razor and the Art of Templating
Jess Chadwick
 
AngularJS
AngularJS
Vineeth Nair
 
Pragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScript
davejohnson
 
Java script core
Java script core
Vaishnu Vaishu
 

More Related Content

What's hot (20)

Blazor
Blazor
Ed Charbeneau
 
Infrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous Delivery
Carlo Bonamico
 
OSGi with the Spring Framework
OSGi with the Spring Framework
Patrick Baumgartner
 
Hands on react native
Hands on react native
Jay Nagar
 
Building Cross Platform Mobile Apps
Building Cross Platform Mobile Apps
Shailendra Chauhan
 
MWLUG - Universal Java
MWLUG - Universal Java
Philippe Riand
 
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Spark Solutions
 
Introduction to React Native
Introduction to React Native
Polidea
 
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Aaron Jacobson
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVC
Sirwan Afifi
 
Introduction to Development for the Internet
Introduction to Development for the Internet
Mike Crabb
 
Angular js Fundamentals
Angular js Fundamentals
Renien Joseph
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
Stephen Chin
 
Angular vs. React
Angular vs. React
OPITZ CONSULTING Deutschland
 
ReactJS or Angular
ReactJS or Angular
boyney123
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
Etiene Dalcol
 
Introduction to React Native
Introduction to React Native
dvcrn
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web Apps
Rasheed Waraich
 
Razor and the Art of Templating
Razor and the Art of Templating
Jess Chadwick
 
AngularJS
AngularJS
Vineeth Nair
 
Infrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous Delivery
Carlo Bonamico
 
Hands on react native
Hands on react native
Jay Nagar
 
Building Cross Platform Mobile Apps
Building Cross Platform Mobile Apps
Shailendra Chauhan
 
MWLUG - Universal Java
MWLUG - Universal Java
Philippe Riand
 
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Spark Solutions
 
Introduction to React Native
Introduction to React Native
Polidea
 
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Aaron Jacobson
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVC
Sirwan Afifi
 
Introduction to Development for the Internet
Introduction to Development for the Internet
Mike Crabb
 
Angular js Fundamentals
Angular js Fundamentals
Renien Joseph
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
Stephen Chin
 
ReactJS or Angular
ReactJS or Angular
boyney123
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
Etiene Dalcol
 
Introduction to React Native
Introduction to React Native
dvcrn
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web Apps
Rasheed Waraich
 
Razor and the Art of Templating
Razor and the Art of Templating
Jess Chadwick
 

Similar to AppeX and JavaScript Support Enhancements in Cincom Smalltalk (20)

Pragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScript
davejohnson
 
Java script core
Java script core
Vaishnu Vaishu
 
BSides Leeds - Performing JavaScript Static Analysis
BSides Leeds - Performing JavaScript Static Analysis
Lewis Ardern
 
Clojurescript slides
Clojurescript slides
elliando dias
 
JavaScript Misunderstood
JavaScript Misunderstood
Bhavya Siddappa
 
Expert JavaScript Programming
Expert JavaScript Programming
Yoshiki Shibukawa
 
Basic Java script handouts for students
Basic Java script handouts for students
shafiq sangi
 
Using RequireJS for Modular JavaScript Code
Using RequireJS for Modular JavaScript Code
Thomas Lundström
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues
Núcleo de Electrónica e Informática da Universidade do Algarve
 
JAVASRIPT and PHP Basics# Unit 2 Webdesign
JAVASRIPT and PHP Basics# Unit 2 Webdesign
NitinShelake4
 
Practical JavaScript Programming - Session 8/8
Practical JavaScript Programming - Session 8/8
Wilson Su
 
Johnson at RubyConf 2008
Johnson at RubyConf 2008
jbarnette
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
John Stevenson
 
Java Script - A New Look
Java Script - A New Look
rumsan
 
Reverse Engineering Malicious Javascript
Reverse Engineering Malicious Javascript
Yusuf Motiwala
 
JavaScript: Implementations And Applications
JavaScript: Implementations And Applications
Pragya Pai
 
Javascript - How to avoid the bad parts
Javascript - How to avoid the bad parts
Mikko Ohtamaa
 
Introduction to Java script for web .pptx
Introduction to Java script for web .pptx
FahimMousa
 
HNDIT1022 Week 08, 09 10 Theory web .pptx
HNDIT1022 Week 08, 09 10 Theory web .pptx
IsuriUmayangana
 
CSC PPT 12.pptx
CSC PPT 12.pptx
DrRavneetSingh
 
Pragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScript
davejohnson
 
BSides Leeds - Performing JavaScript Static Analysis
BSides Leeds - Performing JavaScript Static Analysis
Lewis Ardern
 
Clojurescript slides
Clojurescript slides
elliando dias
 
JavaScript Misunderstood
JavaScript Misunderstood
Bhavya Siddappa
 
Expert JavaScript Programming
Expert JavaScript Programming
Yoshiki Shibukawa
 
Basic Java script handouts for students
Basic Java script handouts for students
shafiq sangi
 
Using RequireJS for Modular JavaScript Code
Using RequireJS for Modular JavaScript Code
Thomas Lundström
 
JAVASRIPT and PHP Basics# Unit 2 Webdesign
JAVASRIPT and PHP Basics# Unit 2 Webdesign
NitinShelake4
 
Practical JavaScript Programming - Session 8/8
Practical JavaScript Programming - Session 8/8
Wilson Su
 
Johnson at RubyConf 2008
Johnson at RubyConf 2008
jbarnette
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
John Stevenson
 
Java Script - A New Look
Java Script - A New Look
rumsan
 
Reverse Engineering Malicious Javascript
Reverse Engineering Malicious Javascript
Yusuf Motiwala
 
JavaScript: Implementations And Applications
JavaScript: Implementations And Applications
Pragya Pai
 
Javascript - How to avoid the bad parts
Javascript - How to avoid the bad parts
Mikko Ohtamaa
 
Introduction to Java script for web .pptx
Introduction to Java script for web .pptx
FahimMousa
 
HNDIT1022 Week 08, 09 10 Theory web .pptx
HNDIT1022 Week 08, 09 10 Theory web .pptx
IsuriUmayangana
 
Ad

More from ESUG (20)

Words words words... Automatic detection of word repetition
Words words words... Automatic detection of word repetition
ESUG
 
ShowUs: Compiling with inlining Druid + Opal = DrOpal
ShowUs: Compiling with inlining Druid + Opal = DrOpal
ESUG
 
Show us your Prokject #esug2024: "Gregg Shorthand"
Show us your Prokject #esug2024: "Gregg Shorthand"
ESUG
 
Slides from ShowUs #esug2024: "QuickTalk: Multicultural Microwiki"
Slides from ShowUs #esug2024: "QuickTalk: Multicultural Microwiki"
ESUG
 
Pharo GitLab Example: This is a simple Pharo Smalltalk pipeline example
Pharo GitLab Example: This is a simple Pharo Smalltalk pipeline example
ESUG
 
Show us your Project @ ESUG2024: Security cards
Show us your Project @ ESUG2024: Security cards
ESUG
 
Phausto: fast and accessible DSP programming for sound and music creation in ...
Phausto: fast and accessible DSP programming for sound and music creation in ...
ESUG
 
Modest-Pharo: Unit Test Generation Based on Traces and Metamodels
Modest-Pharo: Unit Test Generation Based on Traces and Metamodels
ESUG
 
GLOSS - A GLSP1 Model Server on the Smalltalk Platform
GLOSS - A GLSP1 Model Server on the Smalltalk Platform
ESUG
 
Smalltalk JIT Compilation: LLVM Experimentation
Smalltalk JIT Compilation: LLVM Experimentation
ESUG
 
Towards resilience against highly dynamic challenges for Wireless Sensor Netw...
Towards resilience against highly dynamic challenges for Wireless Sensor Netw...
ESUG
 
SoSAF: A Pharo-Based Framework for Enhancing System-Of-Systems Dependencies A...
SoSAF: A Pharo-Based Framework for Enhancing System-Of-Systems Dependencies A...
ESUG
 
Pyramidion : a framework for Domain-Specific Editor
Pyramidion : a framework for Domain-Specific Editor
ESUG
 
Intentional Benchmarking of Dynamic Languages
Intentional Benchmarking of Dynamic Languages
ESUG
 
MethodProxies: A Safe and Fast Message-Passing Control Library
MethodProxies: A Safe and Fast Message-Passing Control Library
ESUG
 
Runtime Type Collection and its usage in Code Transpiling
Runtime Type Collection and its usage in Code Transpiling
ESUG
 
Inlined Code Generation for Smalltalk. From IWST2024
Inlined Code Generation for Smalltalk. From IWST2024
ESUG
 
Redesigning FFI calls in Pharo: Exploiting the baseline JIT for more performa...
Redesigning FFI calls in Pharo: Exploiting the baseline JIT for more performa...
ESUG
 
gt4llm: Software Development with LLMs in Glamorous Toolkit
gt4llm: Software Development with LLMs in Glamorous Toolkit
ESUG
 
Attack chains construction: Towards detecting and preventing Pharo vulnerabil...
Attack chains construction: Towards detecting and preventing Pharo vulnerabil...
ESUG
 
Words words words... Automatic detection of word repetition
Words words words... Automatic detection of word repetition
ESUG
 
ShowUs: Compiling with inlining Druid + Opal = DrOpal
ShowUs: Compiling with inlining Druid + Opal = DrOpal
ESUG
 
Show us your Prokject #esug2024: "Gregg Shorthand"
Show us your Prokject #esug2024: "Gregg Shorthand"
ESUG
 
Slides from ShowUs #esug2024: "QuickTalk: Multicultural Microwiki"
Slides from ShowUs #esug2024: "QuickTalk: Multicultural Microwiki"
ESUG
 
Pharo GitLab Example: This is a simple Pharo Smalltalk pipeline example
Pharo GitLab Example: This is a simple Pharo Smalltalk pipeline example
ESUG
 
Show us your Project @ ESUG2024: Security cards
Show us your Project @ ESUG2024: Security cards
ESUG
 
Phausto: fast and accessible DSP programming for sound and music creation in ...
Phausto: fast and accessible DSP programming for sound and music creation in ...
ESUG
 
Modest-Pharo: Unit Test Generation Based on Traces and Metamodels
Modest-Pharo: Unit Test Generation Based on Traces and Metamodels
ESUG
 
GLOSS - A GLSP1 Model Server on the Smalltalk Platform
GLOSS - A GLSP1 Model Server on the Smalltalk Platform
ESUG
 
Smalltalk JIT Compilation: LLVM Experimentation
Smalltalk JIT Compilation: LLVM Experimentation
ESUG
 
Towards resilience against highly dynamic challenges for Wireless Sensor Netw...
Towards resilience against highly dynamic challenges for Wireless Sensor Netw...
ESUG
 
SoSAF: A Pharo-Based Framework for Enhancing System-Of-Systems Dependencies A...
SoSAF: A Pharo-Based Framework for Enhancing System-Of-Systems Dependencies A...
ESUG
 
Pyramidion : a framework for Domain-Specific Editor
Pyramidion : a framework for Domain-Specific Editor
ESUG
 
Intentional Benchmarking of Dynamic Languages
Intentional Benchmarking of Dynamic Languages
ESUG
 
MethodProxies: A Safe and Fast Message-Passing Control Library
MethodProxies: A Safe and Fast Message-Passing Control Library
ESUG
 
Runtime Type Collection and its usage in Code Transpiling
Runtime Type Collection and its usage in Code Transpiling
ESUG
 
Inlined Code Generation for Smalltalk. From IWST2024
Inlined Code Generation for Smalltalk. From IWST2024
ESUG
 
Redesigning FFI calls in Pharo: Exploiting the baseline JIT for more performa...
Redesigning FFI calls in Pharo: Exploiting the baseline JIT for more performa...
ESUG
 
gt4llm: Software Development with LLMs in Glamorous Toolkit
gt4llm: Software Development with LLMs in Glamorous Toolkit
ESUG
 
Attack chains construction: Towards detecting and preventing Pharo vulnerabil...
Attack chains construction: Towards detecting and preventing Pharo vulnerabil...
ESUG
 
Ad

Recently uploaded (20)

Transmission Media. (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
FME as an Orchestration Tool - Peak of Data & AI 2025
FME as an Orchestration Tool - Peak of Data & AI 2025
Safe Software
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Porting Qt 5 QML Modules to Qt 6 Webinar
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
How to Choose the Right Web Development Agency.pdf
How to Choose the Right Web Development Agency.pdf
Creative Fosters
 
Decipher SEO Solutions for your startup needs.
Decipher SEO Solutions for your startup needs.
mathai2
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
soulamaabdoulaye128
 
Migrating to Azure Cosmos DB the Right Way
Migrating to Azure Cosmos DB the Right Way
Alexander (Alex) Komyagin
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
How the US Navy Approaches DevSecOps with Raise 2.0
How the US Navy Approaches DevSecOps with Raise 2.0
Anchore
 
Download Adobe Illustrator Crack free for Windows 2025?
Download Adobe Illustrator Crack free for Windows 2025?
grete1122g
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
Artificial Intelligence Workloads and Data Center Management
Artificial Intelligence Workloads and Data Center Management
SandeepKS52
 
Transmission Media. (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
FME as an Orchestration Tool - Peak of Data & AI 2025
FME as an Orchestration Tool - Peak of Data & AI 2025
Safe Software
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Porting Qt 5 QML Modules to Qt 6 Webinar
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
How to Choose the Right Web Development Agency.pdf
How to Choose the Right Web Development Agency.pdf
Creative Fosters
 
Decipher SEO Solutions for your startup needs.
Decipher SEO Solutions for your startup needs.
mathai2
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
soulamaabdoulaye128
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
How the US Navy Approaches DevSecOps with Raise 2.0
How the US Navy Approaches DevSecOps with Raise 2.0
Anchore
 
Download Adobe Illustrator Crack free for Windows 2025?
Download Adobe Illustrator Crack free for Windows 2025?
grete1122g
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
Artificial Intelligence Workloads and Data Center Management
Artificial Intelligence Workloads and Data Center Management
SandeepKS52
 

AppeX and JavaScript Support Enhancements in Cincom Smalltalk

  • 1. The 25th Annual European Smalltalk User Group ConferenceSeptember 4, 2017 AppeX and JavaScript Support Enhancements in Cincom Smalltalk™ Speaker: Vladimir K. Degen
  • 2. Proprietary & Confidential A Bargain Two talks in one! • Generic JavaScript code management in Smalltalk, (a segue) • JavaScript evaluation and web automation from within Smalltalk. @cincomsmalltalk #ESUG17
  • 3. Proprietary & Confidential A Misconception • Lots of developers, Smalltalkers included, want to get involved in web development. • They might think that Smalltalk and JavaScript don’t go together well, or that the mindsets are incompatible. • Nothing could be further from the truth! @cincomsmalltalk #ESUG17
  • 4. Proprietary & Confidential Actually,
 Smalltalk and JavaScript
 go together like… Beer and Bratwurst Lox and Cream Cheese Chocolate and Peanut Butter
  • 5. Proprietary & Confidential A Little Recap of AppeX • AppeX manages your JavaScript code versioning • It allows you to build client-side JavaScript in an Object Oriented manner. • In practical terms, this means defining JavaScript “classes”, and creating “instance” methods on them. • Take a quick look at the IDE to give a baseline for this presentation @cincomsmalltalk #ESUG17
  • 6. Proprietary & Confidential More Recap of AppeX [Open the IDE, show senders/implementers etc.] • What you write in the JavaScript function template is the JavaScript 
 you get in the web browser! • Developing in AppeX is good way to hone your JavaScript skills while leveraging the Smalltalk IDE. • See 3 previous ESUG presentations on AppeX, including https://www.slideshare.net/esug/2014-0817esug2014appe-x @cincomsmalltalk #ESUG17
  • 7. Proprietary & Confidential Some Subtleties, but only Briefly • Up until EcmaScript6, JavaScript did not have a standard for class hierarchies and method inheritance. • Thus many products, including AppeX have implemented their own class hierarchy inheritance frameworks. • AppeX emphasizes the ApplicationClient as a delivery mechanism of the JavaScript to the web client, with other JavaScript delivered as external libraries. • However the external libraries lose out on the code management tools of AppeX. @cincomsmalltalk #ESUG17
  • 8. Proprietary & Confidential Ok, a Bit of the Inheritance Hierarchy JavascriptCode JavascriptObject GenericJavascript JavascriptArray,etc ApplicationClient JavascriptClosure This talk @cincomsmalltalk #ESUG17
  • 9. Proprietary & Confidential And a Couple More Subtleties • With GenericJavascript, we are easing the process of delivering JavaScript in any form. • And this JavaScript can be completely managed within AppeX. • This opens up further the possibility of easily porting sophisticated web application code to and from AppeX, 
 and also to use AppeX to produce applications in any
 software design style that you wish. @cincomsmalltalk #ESUG17
  • 10. Proprietary & Confidential GenericJavascript • GenericJavascript just means code that will be displayed and executed as written. • The code in “initialize” will be delivered to the client as is and executed immediately. • The functions will appear as global functions on the client. • Since the code is in the IDE , you get syntax highlighting, senders and implementers and code version management. • The markup in the comments below is so Smalltalk can parse it. @cincomsmalltalk #ESUG17
  • 11. Proprietary & Confidential GenericJavascript – Code1 // <startContents: #{AppeX.HelloScript}> function say(aString) { var myDiv; myDiv = document.createElement("div"); myDiv.innerHTML = aString; document.body.appendChild(myDiv); } function sayHello(){ say('Hello from sayHello'); } @cincomsmalltalk #ESUG17
  • 12. Proprietary & Confidential GenericJavascript – Code 2 // <startInitialize: #{AppeX.HelloScript}> document.body = document.body || document.createElement("body"); sayHello(); // <endContents: #{AppeX.HelloScript}> @cincomsmalltalk #ESUG17
  • 14. Proprietary & Confidential JavascriptClosure • A subclass of GenericJavascript which avoids creating globals. • With JavascriptClosure, you get in addition that your code is encapsulated in functions. • That is, you get method and data encapsulation. • You can also make private methods, though this is still work in progress. • You do *not* get class hierarchy inheritance @cincomsmalltalk #ESUG17
  • 15. Proprietary & Confidential JavascriptClosure – Code 1 This is how it looks like in JavaScript: Object.defineProperty(AppeX.PersonClosure.prototype,'say Goodbye', {value: function sayGoodbye(){ this.say('Goodbye', this.getIsWhispering()); }, enumerable: false, writable: true }); @cincomsmalltalk #ESUG17
  • 16. Proprietary & Confidential JavascriptClosure - Function @cincomsmalltalk #ESUG17
  • 17. Proprietary & Confidential JavascriptClosure - Initialization @cincomsmalltalk #ESUG17
  • 18. Proprietary & Confidential Application on the Server for the JavascriptClosure @cincomsmalltalk #ESUG17
  • 19. Proprietary & Confidential JavaScript Closures and Generic JavaScript Scripts • Note that the file based serving still works for these. • However, cannot just parse and file in random JavaScript. • We produce the code in a certain format (i.e. annotated with comments) and file it in and parse it using the same format. @cincomsmalltalk #ESUG17
  • 20. Proprietary & Confidential JavascriptClosure and GenericJavascript - 1 • One advantage comes in how you can more naturally view and perhaps reuse your code when the view is restricted to the single method, but the methods are listed and grouped. • The Smalltalk tools based browsers and code separation aids in understandability of JavaScript as well as it does for Smalltalk.   • Suppose that you had a bunch of JavaScript Code that was kind of complex and maybe not optimally written. Obviously not your own code. Might’ve been your coworkers or just something you got from the web. @cincomsmalltalk #ESUG17
  • 21. Proprietary & Confidential JavaScript Closure and Generic JavaScript - 2 • Putting your JavaScript into AppeX helps you to rationalize it. 
 You are strongly encouraged by the tools to at least identify your functions, the scopes of your variables, your objects, in order to get the benefit of the tools.   • You could dump all your code into a big GenericJavascript, 
 but that might not buy you much. So you can do this to get 
 your application working then refactor from there. • AppeX encourages an iterative development style. @cincomsmalltalk #ESUG17
  • 22. Proprietary & Confidential On to the JSAutomator/JSEvaluator • JSEvaluator uses whatever web browser is available on the server to evaluate JavaScript from within the AppeX IDE. • Development only, not run-time. @cincomsmalltalk #ESUG17
  • 23. Proprietary & Confidential Evaluating JavaScript in Smalltalk (sort of) • Start the JSEvaluator Server • Here are a few expressions that you might try in a workspace, and comparing with the result when the JavaScript is evaluated in a web browser console: JSEvaluator evaluateJavaScript: '"a" + "c"'. "ac" JSEvaluator evaluateJavaScript: ' 1 2 '. "Error" JSEvaluator evaluateJavaScript:‘JSON.stringify(window.location);'. @cincomsmalltalk #ESUG17
  • 24. Proprietary & Confidential A More Practical Example, the Beautifier • To try out JavaScript formatting using the open source library jsbeautifier (http://jsbeautifier.org/): a) Make a change to a JavaScript method in the 
 refactoring browser b)Try Menu...Edit...Format to observe the results. • Conclusion:We have some ideas for useful external JavaScript libraries, perhaps you have others. @cincomsmalltalk #ESUG17
  • 25. Proprietary & Confidential Before Beautifying @cincomsmalltalk #ESUG17
  • 26. Proprietary & Confidential After Beautifying @cincomsmalltalk #ESUG17
  • 27. Proprietary & Confidential Website Automation • We have a lot of web application examples that we want to retest, naturally, during internal releases. • We created the JSAutomator, build upon the JSEvaluator. • A test (or automation) script is injected into the application to be tested. • The injected JavaScript exercises the web application's functionality and sends results back to the Smalltalk server. @cincomsmalltalk #ESUG17
  • 28. Proprietary & Confidential Non-Intrusive Testing • One goal was to have a completely non-intrusive testing mechanism that does not require one modify the “tested” application in any way, whether the application is external or internal. • The JSAutomator uses a couple of techniques to achieve this goal. @cincomsmalltalk #ESUG17
  • 29. Proprietary & Confidential Injecting Code • Ideally the JSAutomator just adds its own code libraries 
 (very easy when dealing with AppeX applications). • Or:The Hammer Inserting script tags at the end of the initial HTML document, and then including the JSAutomator libraries. • The downloaded code uses a couple of techniques to manipulate the client browser, such as function wrapping and setTimeout. @cincomsmalltalk #ESUG17
  • 30. Proprietary & Confidential Waiting for Results • Ultimately, Smalltalk waits upon the “promise” or expected results from the client browser. • Internally, we’ve created a bunch of SUnit tests for our examples. I’d like to show you a couple of those now. @cincomsmalltalk #ESUG17
  • 31. Proprietary & Confidential Demos Order of display: • First an AppeX example opened and exercised manually: HelloLocalized. • Then automated. • Finally, all of them automated. @cincomsmalltalk #ESUG17
  • 32. Proprietary & Confidential Conclusions • GenericJavascript increases flexibility of coding different types of applications in AppeX while leveraging the Smalltalk IDE. • GenericJavascript is used in the JSEvaluator, and hence the JSAutomator. • The JSAutomator framework has already proven useful to us for regression testing of web applications. • We hope you have fun with these new AppeX tools and capabilities. @cincomsmalltalk #ESUG17
  • 33. Proprietary & Confidential Contact Us Suzanne Fortman 
 Director of Smalltalk Global Operations
 [email protected]
 @SuzCST (Twitter) Arden Thomas 
 Product Manager
 [email protected]
 @ArdenTCST (Twitter) Vladimir Degen
 [email protected] @cincomsmalltalk #ESUG17
  • 35. Cincom, the Quadrant Logo, Cincom Smalltalk, Cincom ObjectStudio and CincomVisualWorks are trademarks or registered trademarks of Cincom Systems, Inc. ©2017 Cincom Systems, Inc. All Rights Reserved