SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Infrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous DeliveryInfrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous DeliveryCarlo Bonamico
 
Hands on react native
Hands on react nativeHands on react native
Hands on react nativeJay Nagar
 
Building Cross Platform Mobile Apps
Building Cross Platform Mobile AppsBuilding Cross Platform Mobile Apps
Building Cross Platform Mobile AppsShailendra Chauhan
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal JavaPhilippe Riand
 
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016Spark Solutions
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativePolidea
 
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5Aaron Jacobson
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVCIntroduction to ASP.NET MVC
Introduction to ASP.NET MVCSirwan Afifi
 
Introduction to Development for the Internet
Introduction to Development for the InternetIntroduction to Development for the Internet
Introduction to Development for the InternetMike Crabb
 
Angular js Fundamentals
Angular js FundamentalsAngular js Fundamentals
Angular js FundamentalsRenien Joseph
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Stephen Chin
 
ReactJS or Angular
ReactJS or AngularReactJS or Angular
ReactJS or Angularboyney123
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersEtiene Dalcol
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Nativedvcrn
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsArchitecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsRasheed Waraich
 
Razor and the Art of Templating
Razor and the Art of TemplatingRazor and the Art of Templating
Razor and the Art of TemplatingJess Chadwick
 

Was ist angesagt? (20)

Blazor
BlazorBlazor
Blazor
 
Infrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous DeliveryInfrastructure as Data with Ansible for easier Continuous Delivery
Infrastructure as Data with Ansible for easier Continuous Delivery
 
OSGi with the Spring Framework
OSGi with the Spring FrameworkOSGi with the Spring Framework
OSGi with the Spring Framework
 
Hands on react native
Hands on react nativeHands on react native
Hands on react native
 
Building Cross Platform Mobile Apps
Building Cross Platform Mobile AppsBuilding Cross Platform Mobile Apps
Building Cross Platform Mobile Apps
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVCIntroduction to ASP.NET MVC
Introduction to ASP.NET MVC
 
Introduction to Development for the Internet
Introduction to Development for the InternetIntroduction to Development for the Internet
Introduction to Development for the Internet
 
Angular js Fundamentals
Angular js FundamentalsAngular js Fundamentals
Angular js Fundamentals
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
 
Angular vs. React
Angular vs. ReactAngular vs. React
Angular vs. React
 
ReactJS or Angular
ReactJS or AngularReactJS or Angular
ReactJS or Angular
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsArchitecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web Apps
 
Razor and the Art of Templating
Razor and the Art of TemplatingRazor and the Art of Templating
Razor and the Art of Templating
 
AngularJS
AngularJS AngularJS
AngularJS
 

Ähnlich wie AppeX and JavaScript Support Enhancements in Cincom Smalltalk

JavaScript New Tutorial Class XI and XII.pptx
JavaScript New Tutorial Class XI and XII.pptxJavaScript New Tutorial Class XI and XII.pptx
JavaScript New Tutorial Class XI and XII.pptxrish15r890
 
How to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScaleHow to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScalePhil Leggetter
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteChristian Heilmann
 
Unit 4 Java script.pptx
Unit 4 Java script.pptxUnit 4 Java script.pptx
Unit 4 Java script.pptxGangesh8
 
Integrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMSIntegrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMSTom Borger
 
WT Module-3.pptx
WT Module-3.pptxWT Module-3.pptx
WT Module-3.pptxRamyaH11
 
WEB MODULE 3.pdf
WEB MODULE 3.pdfWEB MODULE 3.pdf
WEB MODULE 3.pdfDeepika A B
 
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptxtilejak773
 
How I learned to stop worrying and love embedding JavaScript
How I learned to stop worrying and love embedding JavaScriptHow I learned to stop worrying and love embedding JavaScript
How I learned to stop worrying and love embedding JavaScriptKevin Read
 
Embedding V8 in Android apps with Ejecta-V8
Embedding V8 in Android apps with Ejecta-V8Embedding V8 in Android apps with Ejecta-V8
Embedding V8 in Android apps with Ejecta-V8Kevin Read
 
Javascript - Ebook (A Quick Guide)
Javascript - Ebook (A Quick Guide)Javascript - Ebook (A Quick Guide)
Javascript - Ebook (A Quick Guide)sourav newatia
 

Ähnlich wie AppeX and JavaScript Support Enhancements in Cincom Smalltalk (20)

IP Unit 2.pptx
IP Unit 2.pptxIP Unit 2.pptx
IP Unit 2.pptx
 
JavaScript New Tutorial Class XI and XII.pptx
JavaScript New Tutorial Class XI and XII.pptxJavaScript New Tutorial Class XI and XII.pptx
JavaScript New Tutorial Class XI and XII.pptx
 
How to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScaleHow to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that Scale
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynote
 
Angular js
Angular jsAngular js
Angular js
 
Java script
Java scriptJava script
Java script
 
Java script
Java scriptJava script
Java script
 
Unit 4 Java script.pptx
Unit 4 Java script.pptxUnit 4 Java script.pptx
Unit 4 Java script.pptx
 
Integrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMSIntegrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMS
 
Java script
Java scriptJava script
Java script
 
WT Module-3.pptx
WT Module-3.pptxWT Module-3.pptx
WT Module-3.pptx
 
Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)
 
WEB MODULE 3.pdf
WEB MODULE 3.pdfWEB MODULE 3.pdf
WEB MODULE 3.pdf
 
Ajax
AjaxAjax
Ajax
 
Javascript tutorial
Javascript tutorialJavascript tutorial
Javascript tutorial
 
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
 
How I learned to stop worrying and love embedding JavaScript
How I learned to stop worrying and love embedding JavaScriptHow I learned to stop worrying and love embedding JavaScript
How I learned to stop worrying and love embedding JavaScript
 
Embedding V8 in Android apps with Ejecta-V8
Embedding V8 in Android apps with Ejecta-V8Embedding V8 in Android apps with Ejecta-V8
Embedding V8 in Android apps with Ejecta-V8
 
Javascript - Ebook (A Quick Guide)
Javascript - Ebook (A Quick Guide)Javascript - Ebook (A Quick Guide)
Javascript - Ebook (A Quick Guide)
 
Javascript 01 (js)
Javascript 01 (js)Javascript 01 (js)
Javascript 01 (js)
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...masabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...chiefasafspells
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 

Kürzlich hochgeladen (20)

WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 

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
 sfortman@cincom.com
 @SuzCST (Twitter) Arden Thomas 
 Product Manager
 athomas@cincom.com
 @ArdenTCST (Twitter) Vladimir Degen
 vdegen@cincom.com @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