SlideShare a Scribd company logo
ESUG 2000




   When Smalltalk Meets the WEB

             Juan Carlos Cruz
            Valtech AG, Zurich
Solutions
•    VisualWave™ - Cincom
•    VisualWorks plugIn™ - Cincom
•    Classic Blend 2.0 ™ - Applied Reasoning
•    Classic Blend 3.0 ™ - Applied Reasoning
•    VisualAge ULC - IBM
•    CORBA - OMG
•    RMI-IIOP - Sun
The VisualWorks plugIn
                         WEB Browser

                         PlugIn (.DLL)
                 HTML

                Applet

                         Virtual Machine
To Install :
vw5iplugin-win32.exe      PlugIn Image
The plugIn Development
  Environment (PDE)
                 •  Generate Smalltalk
                    applets
                 •  Generate a customize
                    plugIn image
                 •  Debug Smalltalk web-
                    based applications



 PluginDev.pcl
Developing a PlugIn Applet
•  Install the PDE in your development image
   Tools->Load Parcel Named… PluginDev.pcl
•  Define your applet as Subclass of
   AppletModel
•  Create a parcel containing your applet
•  Save the parcel as an applet
   Parcel -> save…      …
                          plugin Parcel
                      …
Running an Applet in a Browser
                                Calculator.html
<HTML>
<HEAD> </HEAD>
<BODY> <P> MyTest </P>                            HTML
<EMBED SRC=“Calculator.pcl”
   VWOPEN= “CalculatorExample”
   WIDTH=“233” HEIGHT = “245”
   TYPE =“application/x-visualworks-parcel”>
</BODY>
</HTML>



                                                  Do it
Adapting an Existing Application
•  Duplicate a subset of the AppletModel
   protocol in your application class
•  File in…     applet-api.st

•  The essential protocol is:
  –  AppletModel >> isAppletModel
  –  AppletModel >> pluginConnection:
  –  AppletModel >> pluginConnection
Using the plugIn debugger
•  Start a plugIn debug session
   Tools -> Plug-in Debug tool
•  Click Enable Debug
•  Open the HTML page containing the applet in a
   web browser
•  Click Connect
•  Debug as you normally do …
•  Click Disable Debug when you have finished
Adding an Application to a
             Web Page
<EMBED
  SRC=“Calculator.pcl”                                    HTML
  VWOPEN= “CalculatorExample”
  WIDTH=“233” HEIGHT = “245”
  TYPE =“application/x-visualworks-parcel”>

Attributes:
SRC            The parcel containing the applet code
WIDTH          The width of the applet window
HEIGHT         The height of the applet window
TYPE           MIME type for the plugIn applet
VWOPEN         Class containing window specification
VWPRELOAD      A list of parcel file names to be loaded
Building a Custom plugIn Image
•  Standart plug-in image is plugin-base.im
•  For larger applications include much of the
   application in either:
  –  a custom-image or
  –  as additional parcels (invoked by the
     VWPRELOAD attribute in the EMBED tag)
•  Use Runtime Packager™ to build a custom-
   image. Parameters file: vwplugin.rtp
PlugIn Initialization File
              VWPLUGIN.INI
Attributes:
DIRECTORY             Current directory for launching VisualWorks
OBJECTENGINE          Name of the OE
BASEIMAGE             Name of the image to load
APPLICATION           Value matching the VWAPPL tag
EXTRA                 Extra information of interest to the application

Security Mesures:    “Trusted Site Strategy”
ALLOW                < all | local | hostID >
DENY                 < all | local | hostID >

- By default if a site is not listed it is ALLOWed. To switch begin
sequence with DENY ALL.
- Parcels are downloaded only if their sites are ALLOWed.
Communicating With a PlugIn
        Application
•  HTTP GET and POST operations.
  GET
  self getURL: url target: ‘target’
  self getURLAsString: url …

  POST
  self postToURL: url file: aFile
  self postToURL: url string: aString …

•  Sockets
•  Database Connect, DST, VisualWave
Classic Blend 2.0




Architecture: (1) a generic Java applet on the client, (2) a
portable application server, and (3) a lightweigth ORB
How CB works ?
           WEB Browser
                         Application Server
   HTML
                          VisualWorks

Java Virtual Machine         Application Model


  Generic Java Applet        Classic Blend Server


         ORB                        ORB

      CLIENT                       SERVER
How CB Works ?
HTML APPLET tag
<APPLET                                                  HTML
  code = com.arscorp.cb.icf.support.CbApplet
  codebase = <absolute URL for CbApplet>
  width = <pixel width> height= <pixel height>
  archive = <path to JAR files> ex: “cbClassNN.jar”>”
 <PARAM name “server”          value = “socket://<hostA: portA>;
                                       http://<hostB: portB>”>
 <PARAM name “appletType” value = “<Smalltalk-class>”>
 <PARAM name ‘specName” value = “<window-spec-method>”
 ..
</APPLET>
HTML Generator Tool
Classic Blend Server
13. Appendix A: Unsupported
        VisualWorks features
All Widgets                           CBDevelopersGuide 2.0
·    drag and drop
·    entry and exit notification
·    entry and exit validation
·    selection foreground and background color
·    full text attributes
·    dynamic focus control (#hasFocus: and its derivates)
•        border decoration policies
…. etc
Designing and Implementing
     Custom Widgets
Classic Blend Load Balancer
What is the difference between
      CB 2.0 and CB 3.0
•  Include Java and VisualAge Smalltalk as
   server platforms
•  Classic Blend is bean-based. Client GUIs
   can be constructed in any bean-compliant
   GUI builder
•  Flexibility to add any custom code or
   validation they want to their clients
Classic Blend 3.0
         •  Client CB Server
                   cbClient.jar
         •  Install Server
            Java
                   cbServer.jar
                  serverSrc.zip

           Smalltalk
                    cb30st.dat /
              otiadds.pcl+cb30vw.pcl
Building the Java GUI
package com.arscorp.demos.colorTest;
import java.awt.*;
import java.awt.event.*;
import com.arscorp.cbng.client.*;
import com.arscorp.cbng.client.builder.*;

 public class ColorTest extends CbBeanContainer implements
    InitializeListener {
     protected CbFrame _cbFrame;
     protected Panel _panel = null;
    protected Presenter _presenter;
    protected Button _buttonRed = null;
    protected Button _buttonBlue = null;
}
Building the Java GUI
public void buildWidgets() {
    _cbFrame.setName("CbFrame");
    _panel.setName("ButtonPanel");
    _cbFrame.setServerObject("ColorTestPresenter");
    _cbFrame.setSessionName("ColorServer");
    _cbFrame.setLayout(new GridLayout());
    _cbFrame.setBounds(116, 255, 538, 65);
    _buttonRed = new Button("Red");
    _buttonRed.setName("RedButton");
    _buttonRed.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent ae) {
                   _presenter.sendMessage(ae, "redButtonClicked");
           }
    });
    …

    _cbFrame.add(_panel, BorderLayout.NORTH);
    _panel.add(_buttonRed);
    _panel.add(_buttonBlue);
}
Creating the SM Server
•  Create a subclass of ArcbPresenter named
   ColorTestPresenter
•  Create a service method
 changePanelColorTo: newColor
     | buttonPanel |
     buttonPanel := self getPanelNamed:'ButtonPanel'.
     buttonPanel setBackground: newColor.
     buttonPanel repaint.

•  Add a method name
 redButtonClicked
     self changePanelColorTo: ColorValue red.
     ^nil
HTML File
<html>
<body>
<applet code="com.arscorp.cbng.client.CbApplet" align="baseline"
width="350" height="60">
<param name="BeanClass" value="com.arscorp.demos.colorTest.ColorTest">
<param name="SkipMessage" value="false">
<param name="LaunchButtonText" value="Press to start the Color Test">
<param name="PropertiesURL" value="file://127.0.0.1/c:cbClient
clientProperties.txt">
</applet>
</body>
</html>

ATTRIBUTES
code=com.arscorp.cbng.client.CbApplet
<PARAM name="BeanClass" value="[class-of-application-window]">
<PARAM name="LaunchMessage" value="[text-of-launch-message]">
References
  Technology
•  VW plugIn: www.cincom.com
•  ClassicBlend: www.appliedreasoning.com
•  VAST-ULC: www.ibm.com
  Consulting

•  Valtech: www.valtech.com

More Related Content

What's hot

EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
Rob Tweed
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
Rob Tweed
 
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenBP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
Michael McGarel
 
Word press, the automated way
Word press, the automated wayWord press, the automated way
Word press, the automated way
Michaël Perrin
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
Rob Tweed
 
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
Rob Tweed
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Ryan Weaver
 
Introduce native html5 streaming player
Introduce native html5 streaming playerIntroduce native html5 streaming player
Introduce native html5 streaming player
Jesse (Chien Chen) Chen
 
yapi.js introduction (mopcon 2016 version)
yapi.js introduction (mopcon 2016 version)yapi.js introduction (mopcon 2016 version)
yapi.js introduction (mopcon 2016 version)
Jesse (Chien Chen) Chen
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
Jim Jeffers
 
The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)
David Gibbons
 
Yapi.js, An Adaptive Streaming Web Player
Yapi.js, An Adaptive Streaming Web PlayerYapi.js, An Adaptive Streaming Web Player
Yapi.js, An Adaptive Streaming Web Player
Jesse (Chien Chen) Chen
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java bin
Olve Hansen
 
Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)
Katy Slemon
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress Plugin
Brad Williams
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
Externalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIs
Externalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIsExternalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIs
Externalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIs
Salesforce Developers
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Binary Studio
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!
David Gibbons
 
PhoneGap: Accessing Device Capabilities
PhoneGap: Accessing Device CapabilitiesPhoneGap: Accessing Device Capabilities
PhoneGap: Accessing Device Capabilities
Ivano Malavolta
 

What's hot (20)

EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
 
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenBP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
 
Word press, the automated way
Word press, the automated wayWord press, the automated way
Word press, the automated way
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
Introduce native html5 streaming player
Introduce native html5 streaming playerIntroduce native html5 streaming player
Introduce native html5 streaming player
 
yapi.js introduction (mopcon 2016 version)
yapi.js introduction (mopcon 2016 version)yapi.js introduction (mopcon 2016 version)
yapi.js introduction (mopcon 2016 version)
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)
 
Yapi.js, An Adaptive Streaming Web Player
Yapi.js, An Adaptive Streaming Web PlayerYapi.js, An Adaptive Streaming Web Player
Yapi.js, An Adaptive Streaming Web Player
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java bin
 
Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress Plugin
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
 
Externalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIs
Externalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIsExternalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIs
Externalizing Chatter Using Heroku, Angular.js, Node.js and Chatter REST APIs
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!
 
PhoneGap: Accessing Device Capabilities
PhoneGap: Accessing Device CapabilitiesPhoneGap: Accessing Device Capabilities
PhoneGap: Accessing Device Capabilities
 

Similar to When Smalltalk Meets the Web

Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)
yann_s
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containers
inside-BigData.com
 
Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...
Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...
Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...
Amazon Web Services
 
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket
Damien Krotkine
 
HOW TO DRONE.IO IN CI/CD WORLD
HOW TO DRONE.IO IN CI/CD WORLDHOW TO DRONE.IO IN CI/CD WORLD
HOW TO DRONE.IO IN CI/CD WORLD
Aleksandr Maklakov
 
Presentation Tier optimizations
Presentation Tier optimizationsPresentation Tier optimizations
Presentation Tier optimizations
Anup Hariharan Nair
 
MesosCon - Be a microservices hero
MesosCon - Be a microservices heroMesosCon - Be a microservices hero
MesosCon - Be a microservices hero
Dragos Dascalita Haut
 
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty ProfileAAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
WASdev Community
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
Amazon Web Services
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
Amazon Web Services
 
Building production-quality apps with Node.js
Building production-quality apps with Node.jsBuilding production-quality apps with Node.js
Building production-quality apps with Node.js
mattpardee
 
Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"
Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"
Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"
Lviv Startup Club
 
2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta
Daniel Fisher
 
The Challenges of Becoming Cloud Native
The Challenges of Becoming Cloud NativeThe Challenges of Becoming Cloud Native
The Challenges of Becoming Cloud Native
Ben Hall
 
Iac d.damyanov 4.pptx
Iac d.damyanov 4.pptxIac d.damyanov 4.pptx
Iac d.damyanov 4.pptx
Dimitar Damyanov
 
Native client
Native clientNative client
Native client
zyc901016
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework Basic
Mario Romano
 
Codegnitorppt
CodegnitorpptCodegnitorppt
Codegnitorppt
sreedath c g
 
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar SeriesContinuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Amazon Web Services
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
Kevin Decker
 

Similar to When Smalltalk Meets the Web (20)

Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containers
 
Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...
Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...
Integrating Infrastructure as Code into a Continuous Delivery Pipeline | AWS ...
 
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket
 
HOW TO DRONE.IO IN CI/CD WORLD
HOW TO DRONE.IO IN CI/CD WORLDHOW TO DRONE.IO IN CI/CD WORLD
HOW TO DRONE.IO IN CI/CD WORLD
 
Presentation Tier optimizations
Presentation Tier optimizationsPresentation Tier optimizations
Presentation Tier optimizations
 
MesosCon - Be a microservices hero
MesosCon - Be a microservices heroMesosCon - Be a microservices hero
MesosCon - Be a microservices hero
 
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty ProfileAAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
 
Building production-quality apps with Node.js
Building production-quality apps with Node.jsBuilding production-quality apps with Node.js
Building production-quality apps with Node.js
 
Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"
Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"
Lviv MD Day 2015 Олексій Озун "Introduction to the new Apple TV and TVos"
 
2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta
 
The Challenges of Becoming Cloud Native
The Challenges of Becoming Cloud NativeThe Challenges of Becoming Cloud Native
The Challenges of Becoming Cloud Native
 
Iac d.damyanov 4.pptx
Iac d.damyanov 4.pptxIac d.damyanov 4.pptx
Iac d.damyanov 4.pptx
 
Native client
Native clientNative client
Native client
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework Basic
 
Codegnitorppt
CodegnitorpptCodegnitorppt
Codegnitorppt
 
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar SeriesContinuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
 

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 programming
ESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
ESUG
 
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
ESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
ESUG
 
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 results
ESUG
 
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
ESUG
 
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
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
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
ESUG
 
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
ESUG
 
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
ESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
ESUG
 
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
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
ESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
ESUG
 
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
ESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
ESUG
 
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
ESUG
 

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

Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
Federico Razzoli
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
Postman
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 

Recently uploaded (20)

Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 

When Smalltalk Meets the Web

  • 1. ESUG 2000 When Smalltalk Meets the WEB Juan Carlos Cruz Valtech AG, Zurich
  • 2. Solutions •  VisualWave™ - Cincom •  VisualWorks plugIn™ - Cincom •  Classic Blend 2.0 ™ - Applied Reasoning •  Classic Blend 3.0 ™ - Applied Reasoning •  VisualAge ULC - IBM •  CORBA - OMG •  RMI-IIOP - Sun
  • 3. The VisualWorks plugIn WEB Browser PlugIn (.DLL) HTML Applet Virtual Machine To Install : vw5iplugin-win32.exe PlugIn Image
  • 4. The plugIn Development Environment (PDE) •  Generate Smalltalk applets •  Generate a customize plugIn image •  Debug Smalltalk web- based applications PluginDev.pcl
  • 5. Developing a PlugIn Applet •  Install the PDE in your development image Tools->Load Parcel Named… PluginDev.pcl •  Define your applet as Subclass of AppletModel •  Create a parcel containing your applet •  Save the parcel as an applet Parcel -> save… … plugin Parcel …
  • 6. Running an Applet in a Browser Calculator.html <HTML> <HEAD> </HEAD> <BODY> <P> MyTest </P> HTML <EMBED SRC=“Calculator.pcl” VWOPEN= “CalculatorExample” WIDTH=“233” HEIGHT = “245” TYPE =“application/x-visualworks-parcel”> </BODY> </HTML> Do it
  • 7. Adapting an Existing Application •  Duplicate a subset of the AppletModel protocol in your application class •  File in… applet-api.st •  The essential protocol is: –  AppletModel >> isAppletModel –  AppletModel >> pluginConnection: –  AppletModel >> pluginConnection
  • 8. Using the plugIn debugger •  Start a plugIn debug session Tools -> Plug-in Debug tool •  Click Enable Debug •  Open the HTML page containing the applet in a web browser •  Click Connect •  Debug as you normally do … •  Click Disable Debug when you have finished
  • 9. Adding an Application to a Web Page <EMBED SRC=“Calculator.pcl” HTML VWOPEN= “CalculatorExample” WIDTH=“233” HEIGHT = “245” TYPE =“application/x-visualworks-parcel”> Attributes: SRC The parcel containing the applet code WIDTH The width of the applet window HEIGHT The height of the applet window TYPE MIME type for the plugIn applet VWOPEN Class containing window specification VWPRELOAD A list of parcel file names to be loaded
  • 10. Building a Custom plugIn Image •  Standart plug-in image is plugin-base.im •  For larger applications include much of the application in either: –  a custom-image or –  as additional parcels (invoked by the VWPRELOAD attribute in the EMBED tag) •  Use Runtime Packager™ to build a custom- image. Parameters file: vwplugin.rtp
  • 11. PlugIn Initialization File VWPLUGIN.INI Attributes: DIRECTORY Current directory for launching VisualWorks OBJECTENGINE Name of the OE BASEIMAGE Name of the image to load APPLICATION Value matching the VWAPPL tag EXTRA Extra information of interest to the application Security Mesures: “Trusted Site Strategy” ALLOW < all | local | hostID > DENY < all | local | hostID > - By default if a site is not listed it is ALLOWed. To switch begin sequence with DENY ALL. - Parcels are downloaded only if their sites are ALLOWed.
  • 12. Communicating With a PlugIn Application •  HTTP GET and POST operations. GET self getURL: url target: ‘target’ self getURLAsString: url … POST self postToURL: url file: aFile self postToURL: url string: aString … •  Sockets •  Database Connect, DST, VisualWave
  • 13. Classic Blend 2.0 Architecture: (1) a generic Java applet on the client, (2) a portable application server, and (3) a lightweigth ORB
  • 14. How CB works ? WEB Browser Application Server HTML VisualWorks Java Virtual Machine Application Model Generic Java Applet Classic Blend Server ORB ORB CLIENT SERVER
  • 16. HTML APPLET tag <APPLET HTML code = com.arscorp.cb.icf.support.CbApplet codebase = <absolute URL for CbApplet> width = <pixel width> height= <pixel height> archive = <path to JAR files> ex: “cbClassNN.jar”>” <PARAM name “server” value = “socket://<hostA: portA>; http://<hostB: portB>”> <PARAM name “appletType” value = “<Smalltalk-class>”> <PARAM name ‘specName” value = “<window-spec-method>” .. </APPLET>
  • 19. 13. Appendix A: Unsupported VisualWorks features All Widgets CBDevelopersGuide 2.0 · drag and drop · entry and exit notification · entry and exit validation · selection foreground and background color · full text attributes · dynamic focus control (#hasFocus: and its derivates) • border decoration policies …. etc
  • 20. Designing and Implementing Custom Widgets
  • 21. Classic Blend Load Balancer
  • 22. What is the difference between CB 2.0 and CB 3.0 •  Include Java and VisualAge Smalltalk as server platforms •  Classic Blend is bean-based. Client GUIs can be constructed in any bean-compliant GUI builder •  Flexibility to add any custom code or validation they want to their clients
  • 23. Classic Blend 3.0 •  Client CB Server cbClient.jar •  Install Server Java cbServer.jar serverSrc.zip Smalltalk cb30st.dat / otiadds.pcl+cb30vw.pcl
  • 24. Building the Java GUI package com.arscorp.demos.colorTest; import java.awt.*; import java.awt.event.*; import com.arscorp.cbng.client.*; import com.arscorp.cbng.client.builder.*; public class ColorTest extends CbBeanContainer implements InitializeListener { protected CbFrame _cbFrame; protected Panel _panel = null; protected Presenter _presenter; protected Button _buttonRed = null; protected Button _buttonBlue = null; }
  • 25. Building the Java GUI public void buildWidgets() { _cbFrame.setName("CbFrame"); _panel.setName("ButtonPanel"); _cbFrame.setServerObject("ColorTestPresenter"); _cbFrame.setSessionName("ColorServer"); _cbFrame.setLayout(new GridLayout()); _cbFrame.setBounds(116, 255, 538, 65); _buttonRed = new Button("Red"); _buttonRed.setName("RedButton"); _buttonRed.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { _presenter.sendMessage(ae, "redButtonClicked"); } }); … _cbFrame.add(_panel, BorderLayout.NORTH); _panel.add(_buttonRed); _panel.add(_buttonBlue); }
  • 26. Creating the SM Server •  Create a subclass of ArcbPresenter named ColorTestPresenter •  Create a service method changePanelColorTo: newColor | buttonPanel | buttonPanel := self getPanelNamed:'ButtonPanel'. buttonPanel setBackground: newColor. buttonPanel repaint. •  Add a method name redButtonClicked self changePanelColorTo: ColorValue red. ^nil
  • 27. HTML File <html> <body> <applet code="com.arscorp.cbng.client.CbApplet" align="baseline" width="350" height="60"> <param name="BeanClass" value="com.arscorp.demos.colorTest.ColorTest"> <param name="SkipMessage" value="false"> <param name="LaunchButtonText" value="Press to start the Color Test"> <param name="PropertiesURL" value="file://127.0.0.1/c:cbClient clientProperties.txt"> </applet> </body> </html> ATTRIBUTES code=com.arscorp.cbng.client.CbApplet <PARAM name="BeanClass" value="[class-of-application-window]"> <PARAM name="LaunchMessage" value="[text-of-launch-message]">
  • 28. References Technology •  VW plugIn: www.cincom.com •  ClassicBlend: www.appliedreasoning.com •  VAST-ULC: www.ibm.com Consulting •  Valtech: www.valtech.com