SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
WebObjects + Scala
Building Concurrent WebObjects applications with Scala
                     Ravi Mendis
Why Concurrent Programming?
2005
The year of Dual Core
2010
Today
Entry-Level


                    Cores   Threads

AMD Opteron            4       4


IBM Power7             4      16


 Intel Xeon            4       8
High-End


                   Cores   Threads

AMD Opteron          12      12


IBM Power7           8       32


 Intel Xeon          6       12
2011
Tomorrow
Roadmap


                  Cores   Threads

AMD Opteron         16      16


IBM Power7          ?       ??


 Intel Xeon         8       16
“By 2015 we will likely have over 100 cores on a many-
   core processing chip in our notebook computers.”
                  - Computerworld
Welcome to the world of Multi-cores!
Q: How do we take advantage of
    multi-core processors?
A: Concurrent Programming
#1 Threads & Locks
“Concurrency is hard. It involves a lot of problems that are very difficult
         to think about and reason about and understand”
                  - Tim Bray co-inventor of XML
#1 Threads & Locks
•   HARD to program

•   HARD to scale

•   Contentious
java.lang.IllegalArgumentException: Cannot determine primary key for entity ASCCarveout from row: {charge = 3027.00;
claimID = 321839138; }
! at com.webobjects.eoaccess.EODatabaseChannel._fetchObject(EODatabaseChannel.java:348)
! at com.webobjects.eoaccess.EODatabaseContext._objectsWithFetchSpecificationEditingContext
(EODatabaseContext.java:3071)
! at com.webobjects.eoaccess.EODatabaseContext.objectsWithFetchSpecification(EODatabaseContext.java:3195)
! at com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsWithFetchSpecification(EOObjectStoreCoordinator.java:
488)
! at com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4069)

                                         ...Deadlock!
! at er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1211)
! at com.webobjects.eoaccess.EODatabaseContext.objectsForSourceGlobalID(EODatabaseContext.java:4084)
! at com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsForSourceGlobalID(EOObjectStoreCoordinator.java:
634)
! at com.webobjects.eocontrol.EOEditingContext.objectsForSourceGlobalID(EOEditingContext.java:3923)
! at er.extensions.eof.ERXEC.objectsForSourceGlobalID(ERXEC.java:1169)
! at com.webobjects.eoaccess.EODatabaseContext._fireArrayFault(EODatabaseContext.java:4245)
! at com.webobjects.eoaccess.EOAccessArrayFaultHandler.completeInitializationOfObject
(EOAccessArrayFaultHandler.java:77)
! at com.webobjects.eocontrol._EOCheapCopyMutableArray.willRead(_EOCheapCopyMutableArray.java:37)
! at com.webobjects.eocontrol._EOCheapCopyMutableArray.count(_EOCheapCopyMutableArray.java:86)
! at com.mpv.evaluation.ClaimEvaluator.validateClaim(ClaimEvaluator.java:398)
! ...
BBC2, Top Gear - Series 15, Episode 1 - June 27 ’10
#2 Actor Model
  (A Share NOTHING Model)
Slowmation
Demo
html5 <video>
<video poster="/slowmation/screenshots/0/2/4/425.jpg">
!   <source type="video/ogg" src="/slowmation/videos/6/d/8/423.ogg" />
!   <source type="video/mp4" src="/slowmation/videos/d/6/4/424.mp4" />
</video>
HTML5 Video Conversion



                                Thumbnail (.jpg)




                             Screenshot (.jpg)




                      Video (.mp4)



       Video (.ogg)
Slowmation Actor
                           (Video Processor)



•   actor ! THUMBNAIL

•   actor ! GRAB

•   actor ! CONVERT2H264

•   actor ! CONVERT2OGG
!
Actor Messaging
•   Asynchronous

    •   Non-blocking


•   Immutable Messages

    •   NO shared data
Scala
Scala
•   Immutable/Mutable datatypes

•   Anonymous Functions (~Closures)

•   No Static variables and methods

•   Extensible
Scala
val greeting: String = “Hello World”;
Scala
val greeting = “Hello World”;
Scala
val greeting = “Hello World”
Scala
val greeting = “Hello World”   // immutable
var response = new String()    // mutable

response = “Hey!”
Java - Static Vars
public class _Talent extends EOGenericRecord {
	    public static final String ENTITY_NAME	 = "Talent";
}
Scala - Companion Object
object Talent extends EOGenericRecord {
	    val ENTITY_NAME = "Talent"
}
Thread-Safe
Scala - Pattern Matching
case a => {
   ...
}
Scala - Pattern Matching
try {
     var epi: EditPageInterface = D2W.factory.editPageForNewObjectWithEntityNamed(entityName, session)
} catch {
     case e: IllegalArgumentException => {
            var epf: ErrorPageInterface = D2W.factory.errorPage(session)
            epf.setMessage(e.toString)
     }
}
Scala - Case Classes
case class PING
case class PONG
Scala - Case Classes
actor ! PING
actor ! PONG
Scala - Case Classes
case PING => {
   ...
}

case PONG => {
   ...
}
Scala - Anonymous Functions
x => x^2
Scala - Anonymous Functions
x, y => x + y
Scala - Anonymous Functions
x, y => {x + y}
Scala - Anonymous Functions
case (PING => {...})

case (PONG => {...})
λ - Expressions
Scala Actors - Example
case class THUMBNAIL(filepath: String)	    // Actor msg case class

val processor = actor {
	    loop {
	    	    react() {
	    	         case THUMBNAIL(filepath: String) => {
	    	    	         ...
	    	          }
          }
	    }
}

// asynchronous
processor ! THUMBNAIL(“/Library/WebServer/Documents/slowmation/screenshots/0/2/4/422.jpg”)
#2 Actor Model
•   EASY to program

•   Scalable

•   NO Deadlocks!
Q: Why can Scala be used with WebObjects?
A: Scala compiles to Java Byte-code
WebObjects + Concurrency
Why?
Performance
•   Exploit multi-core processors
Ajax
•   More responsive UI
How?
Properties
WOAllowsConcurrentRequestHandling=true
Java - Synchronize Static Variables
private static String greeting = “Hello”;     // private

public void setGreeting(String aGreeting) {
    synchronized(greeting) {                  // synchronized block
        greeting = aGreeting;
    }
}
Free!
WO - What is Shared?
•   Application

•   Session (concurrent WO)
Use ERXEC
•   Project Wonder

•   Automatic lock/unlock handling
Properties
er.extensions.ERXEC.safeLocking=true
Debugging
Demo
Properties
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

// Specific port
-Dcom.sun.management.jmxremote.port=20102
Bottlenecks
EOF - Bottleneck
•   Shared Object-cache

    •   Antithesis to Share Nothing
        model

    •   Uses single database connection

    •   Single-Threaded
#3 STM
(Software Transactional Memory)
EOF + Scala
•   DOESN’T work in Scala Actors!

•
Solutions
•   Use Raw SQL

•   Alternative database access

    •   Squeryl

    •   ...
Squeryl
Demo
Squeryl
•   POSOs

•   Actor Compatible

•   Concurrent
“Scala as a concurrent programming language is
         powerful, safe and easy-to-use”
Benchmarks
The Test
•   ERWOAdaptor (Mina)

    •   WO Worker as Actor

•   Apache bench

    •   c = 5...65

    •   n = 500
Results
Time per req. (mean)

200 ms



150 ms



100 ms



 50 ms



  0 ms
         5   10   15   20   25   30   35   40   45   50   55   60   65

   WOAdaptor                ERWOScalaAdaptor                   ERWOAdaptor
Requests per second

800



600



400



200



  0
      5   10   15   20    25   30   35   40   45   50   55   60   65

WOAdaptor                ERWOScalaAdaptor                    ERWOAdaptor
“Scala as a concurrent programming language is powerful,
                  safe and easy-to-use”
The R&D Imperative
       In life long love
            The key
             Is R&D

   The ladder of invention
  Has eternal slide extension
          Rung by rung
 You’ll climb to heaven above.

     Constant innovation
    Guarantees a satiation
  Of that ever changing want
     And deepening need

    Nourishment and care
      To think anew…
     Makes passions flair
   And lets a culture breed
    Between the sheets…

      - by Emma Ahmad
Q&A
References

•   What will YOU do with 100 cores?
    http://www.computerworld.com.au/article/354261/

•   WebObjects with Scala
    http://wiki.objectstyle.org/confluence/display/WO/WebObjects+with+Scala

•   Case Study: Slowmation
    http://slowmation.uow.edu.au

•   Source: ERWOScalaAdaptor
    http://services.wocommunity.org/wowodc/ERWOScalaAdaptor

Mais conteúdo relacionado

Mais procurados

Concurrency in Scala - the Akka way
Concurrency in Scala - the Akka wayConcurrency in Scala - the Akka way
Concurrency in Scala - the Akka way
Yardena Meymann
 

Mais procurados (20)

Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
 
Scala in a wild enterprise
Scala in a wild enterpriseScala in a wild enterprise
Scala in a wild enterprise
 
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
 
Akka and the Zen of Reactive System Design
Akka and the Zen of Reactive System DesignAkka and the Zen of Reactive System Design
Akka and the Zen of Reactive System Design
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
 
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
 
Concurrency in Scala - the Akka way
Concurrency in Scala - the Akka wayConcurrency in Scala - the Akka way
Concurrency in Scala - the Akka way
 
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
 
SQLAlchemy Primer
SQLAlchemy PrimerSQLAlchemy Primer
SQLAlchemy Primer
 
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor ExtensionsConnect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 
The Why and How of Scala at Twitter
The Why and How of Scala at TwitterThe Why and How of Scala at Twitter
The Why and How of Scala at Twitter
 
The Cloud-natives are RESTless @ JavaOne
The Cloud-natives are RESTless @ JavaOneThe Cloud-natives are RESTless @ JavaOne
The Cloud-natives are RESTless @ JavaOne
 
Introduction to Akka - Atlanta Java Users Group
Introduction to Akka - Atlanta Java Users GroupIntroduction to Akka - Atlanta Java Users Group
Introduction to Akka - Atlanta Java Users Group
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
 
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akka
 
Demystifying Oak Search
Demystifying Oak SearchDemystifying Oak Search
Demystifying Oak Search
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 

Destaque (6)

Programmation 2011-2012
Programmation 2011-2012Programmation 2011-2012
Programmation 2011-2012
 
Mathematical formulation of inverse scattering and korteweg de vries equation
Mathematical formulation of inverse scattering and korteweg de vries equationMathematical formulation of inverse scattering and korteweg de vries equation
Mathematical formulation of inverse scattering and korteweg de vries equation
 
Google
GoogleGoogle
Google
 
Emisión de co²
Emisión de co²Emisión de co²
Emisión de co²
 
2
22
2
 
CIC CAO Inst. Nov09
CIC CAO Inst. Nov09CIC CAO Inst. Nov09
CIC CAO Inst. Nov09
 

Semelhante a Building Concurrent WebObjects applications with Scala

Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
Luka Zakrajšek
 
Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»
e-Legion
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
Vinay H G
 

Semelhante a Building Concurrent WebObjects applications with Scala (20)

Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
 
Server Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David DelabasseeServer Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David Delabassee
 
Scala Frustrations
Scala FrustrationsScala Frustrations
Scala Frustrations
 
Avatar 2.0
Avatar 2.0Avatar 2.0
Avatar 2.0
 
4 JVM Web Frameworks
4 JVM Web Frameworks4 JVM Web Frameworks
4 JVM Web Frameworks
 
Multi-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and QuasarMulti-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and Quasar
 
Solid and Sustainable Development in Scala
Solid and Sustainable Development in ScalaSolid and Sustainable Development in Scala
Solid and Sustainable Development in Scala
 
Scala Introduction
Scala IntroductionScala Introduction
Scala Introduction
 
Devoxx
DevoxxDevoxx
Devoxx
 
Concurrency in Eclipse: Best Practices and Gotchas
Concurrency in Eclipse: Best Practices and GotchasConcurrency in Eclipse: Best Practices and Gotchas
Concurrency in Eclipse: Best Practices and Gotchas
 
Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»
 
Advanced akka features
Advanced akka featuresAdvanced akka features
Advanced akka features
 
Persistent Session Storage
Persistent Session StoragePersistent Session Storage
Persistent Session Storage
 
Play framework
Play frameworkPlay framework
Play framework
 
Scala
ScalaScala
Scala
 
Eclipse e4
Eclipse e4Eclipse e4
Eclipse e4
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
 
Full Stack Scala
Full Stack ScalaFull Stack Scala
Full Stack Scala
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala
 

Mais de WO Community

In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engine
WO Community
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
WO Community
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
WO Community
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
WO Community
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
WO Community
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
WO Community
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnit
WO Community
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
WO Community
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
WO Community
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
WO Community
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
WO Community
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
WO Community
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
WO Community
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
WO Community
 

Mais de WO Community (20)

KAAccessControl
KAAccessControlKAAccessControl
KAAccessControl
 
In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engine
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
 
High availability
High availabilityHigh availability
High availability
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWS
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnit
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
 
WOver
WOverWOver
WOver
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

Building Concurrent WebObjects applications with Scala