SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
B 
 
DSL

G VM










M 
M
@mthmulders  javaBin
W 
A 
Y 
C 
F
www.slido.com,
event
code
#26563
@mthmulders  javaBin
D 
S 
L
https://pxhere.com/en/photo/1057524
@mthmulders  javaBin
SELECT


country,










COUNT(1)
AS
count

FROM




Customer

GROUP
BY
country;

@mthmulders  javaBin
Given
my
account
has
a
balance
of
€
430

When
I
receive
a
money
transfer
of
€
500

Then
my
account
should
have
a
balance
of
€
930

@mthmulders  javaBin
Setup(





Boat
on
StartingShore,





Wolf
on
StartingShore,





Sheep
on
StartingShore,





Cabbage
on
StartingShore

)
execute
(





Boat
move
Cabbage
to
StartingShore,





Boat
move
Sheep
to
DestinationShore,





Boat
move
None
to
StartingShore,





Boat
move
Cabbage
to
DestinationShore,





Boat
move
Sheep
to
StartingShore,





Boat
move
Wolf
to
DestinationShore,





Boat
move
None
to
StartingShore,





Boat
move
Sheep
to
DestinationShore

)

https://github.com/NRBPerdijk/dsl-for-the-dense/
@mthmulders  javaBin
+
+
>
+
+
+
+
+
[
<
+
>
-
]
+
+
+
+
+
+
+
+
[
<
+
+
+
+
+
+
>
-
]
<
.

@mthmulders  javaBin
B
This
program
adds
the
numbers
2
and
5



+
+















Store
the
number
2
in
the
f rst
slot

>
+
+
+
+
+







Store
the
number
5
in
the
second
slot



[

















Move
back
and
forth
between
f rst
and
second
slot







<
+
>
-







While
"moving"
ones
from
the
second
to
the
f rst
slot

]



The
f rst
slot
now
has
'7'
in
it
but
we
need
to
output
the
ASCII
value
for
that

The
ASCII
value
is
48
higher
than
the
number
we
have



The
second
slot
is
now
empty

It
will
act
as
a
counter
so
we
can
add
6
*
8
to
the
f rst
slot

+
+
+
+
+
+
+
+



Store
8
in
it



[

















Again
move
back
and
forth
between
f rst
and
second
slot





<
+
+
+
+
+
+

while
adding
6
to
the
f rst
slot





>
-











before
reducing
the
counter
in
the
second
slot

]



<
.















Go
back
to
the
f rst
slot
and
print
it

@mthmulders  javaBin
0 1 2 3 4 ... 29
997 29
998 29
999
2 5 3 0 0 0 0 0
↑
@mthmulders  javaBin
command meaning
+ increase
value
­ decrease
value
. print
value
to
std
out
, read
one
byte
from
std
in
[ if
value
eq
0,
jump
after
matching
]
] if
value
neq
0,
jump
after
matching
[
< move
pointer
left
> move
pointer
right
@mthmulders  javaBin
https://www.thepinkhumanist.com/articles/330-life-of-alan-turing-examined-in-a-new-graphic-novel
@mthmulders  javaBin
https://commons.wikimedia.org/wiki/File:USA_tar_bubble_la_brea_CA.jpg
@mthmulders  javaBin
G VM
“One
VM
to
rule
them
all
cc-by-sa/2.0
-
©
Lairich
Rig
-
https://www.geograph.org.uk/photo/3203827
@mthmulders  javaBin
@mthmulders  javaBin
B
yapi.bf
calculating
15
digits
of
π
Runtime Average
time
(ms/op) Error
Java
HotSpot(TM)
64-Bit
Server
VM 53 ±
1
OpenJDK
GraalVM
CE
19.0.0 45 ±
1
All
tests
are
ran
on
an
2018
MacBook
Pro
with
2.6
GHz
Intel
Core
i7
and
16
GB
2400
MHz
DDR4.
The
machine
runs
macOS
Mojave
10.14.4
and
JDK
1.8.0_212.
Tests
measured
with
 .
Each
test
ran
5
times
with
5
warmup
iterations.jmh
@mthmulders  javaBin
B
yapi.bf
calculating
45
digits
of
π
Runtime Average
time
(ms/op) Error
Java
HotSpot(TM)
64-Bit
Server
VM 207 ±
2
OpenJDK
GraalVM
CE
19.0.0 185 ±
3
All
tests
are
ran
on
an
2018
MacBook
Pro
with
2.6
GHz
Intel
Core
i7
and
16
GB
2400
MHz
DDR4.
The
machine
runs
macOS
Mojave
10.14.4
and
JDK
1.8.0_212.
Tests
measured
with
 .
Each
test
ran
5
times
with
5
warmup
iterations.jmh
@mthmulders  javaBin
T
cc-by-sa/2.5
-
©
Darvin
DeShazer
-
https://mushroomobserver.org/2538
“open
source
library
for
building
programming
language
implementations
as
interpreters
for
self-modifying
Abstract
Syntax
Trees.
@mthmulders  javaBin
A 
S 
T
ROOT
INCR_VAL INCR_VAL INCR_VAL INCR_VAL INCR_VAL JUMP INCR_VAL INCR_VAL
DECR_PTR INCR_VAL INCR_PTR DECR_VAL
(part
of
the
program
that
adds
5
and
2)
@mthmulders  javaBin
https://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf
@mthmulders  javaBin
P 
E
Calculate
 
for
positive
integers
If
we
know
(or
assume)
that
 ,
the
program
becomes
simpler:
x
n
f (x, n) =
⎧
⎩
⎨
⎪
⎪
1
,(f (x, 0.5 ∗ n))
2
x ∗ f (x, n − 1),
if n = 0
if n is
even
otherwise
n = 5
f (x) = x ∗ ( )x
2
2
@mthmulders  javaBin
N 
 
POJO
public
class
BFIncrementByteNode
extends
Node
{





/**
The
slot
that
holds
the
data
pointer.
 





private
f nal
FrameSlot
dataPointerSlot;







public
BFIncrementByteNode(f nal
FrameSlot
dataPointerSlot)
{









this.dataPointerSlot
=
dataPointerSlot;





}







@Override
public
void
execute(f nal
VirtualFrame
frame)
{









 
Find
the
memory
location









f nal
int
dataPointer
=
FrameUtil.getIntSafe(frame,
dataPointerSlot);









f nal
FrameSlot
currentByteSlot
=
frame.getFrameDescriptor().f ndFrameSlot(dataPointer);











 
Find
the
current
value
in
that
location









f nal
byte
currentValue
=
FrameUtil.getByteSafe(frame,
currentByteSlot);











 
Increase
the
current
value









f nal
byte
newValue
=
(byte)
(1
+
currentValue);











 
Store
the
current
value









frame.setByte(getSlot(frame),
newValue);





}

}

@mthmulders  javaBin
B
https://pxhere.com/en/photo/493605
@mthmulders  javaBin
B
@Override

public
void
execute(f nal
VirtualFrame
frame)
{





f nal
int
currentValue
=
someCalculation();





doPrint(getContext().getOutput(),
(char)
currentValue);

}



@TruffleBoundary

private
void
doPrint(f nal
PrintWriter
out,
f nal
char
value)
{





out.print(value);





out.flush();

}

@mthmulders  javaBin
S
https://www.mammoet.com/cases/Tennet/
@mthmulders  javaBin
S
@Specialization(guards
=
"b
 
0")

public
double
divide(int
a,
int
b)
{





return
a
/
b;

}

@mthmulders  javaBin
S
@Specialization(rewriteOn
=
ArithmeticException.class)

int
doAddNoOverflow(int
a,
int
b)
{





return
Math.addExact(a,
b);

}



@Specialization

long
doAddWithOverflow(int
a,
int
b)
{





return
a
+
b;

}

execute(Integer.MAX_VALUE
-
1,
1)
 
doAddNoOverflow(Integer.MAX_VALUE
-
1,
1)



execute(Integer.MAX_VALUE



,
1)
 
doAddNoOverflow(Integer.MAX_VALUE,
1)






































throws
ArithmeticException



































 
doAddWithOverflow(Integer.MAX_VALUE,
1)



execute(Integer.MAX_VALUE
-
1,
1)
 
doAddWithOverflow(Integer.MAX_VALUE
-
1,
1)

@mthmulders  javaBin
W 
 
G VM
 
 
 
 
JVM
function
abs
(int
i)






if
(
 
we
saw
only
positive
integers
in
the
input
 
)
{









return
i;





}
else
{










transferToInterpreterAndInvalidate;









return
i
<
0
?
 i
:
i;





}

}

@mthmulders  javaBin
B 
 
 
 
T
@mthmulders  javaBin
@mthmulders  javaBin
L
Converts
a
sequence
of
characters
into
a
sequence
of
tokens.








@mthmulders  javaBin
P
Converts
a
sequence
of
tokens
into
(hierarchical)
data
structure.








@mthmulders  javaBin
P 
 
L 

1.
Write
some
regular
expressions
2.
Use
a
parser
generator
(like
 )ANTLR
cc-by-nc/2.5
-
©
Randall
Munroe
-
https://www.xkcd.com/1171/
@mthmulders  javaBin
I 
 

@mthmulders  javaBin
G VM
U
GraalVM
comes
with
the
GraalVM
Updater
(gu)
Use
gu
to
install
components,
such
as
language
packs
or
tools.
e.g.
gu
install
native­image
gu
-L
install
brainfuck-0.1-SNAPSHOT-component.jar

@mthmulders  javaBin
C
Distribute
your
language
implementation
as
a
component:
$
tree

.

├──
META-INF

│


├──
MANIFEST.MF

│


├──
permissions

│


└──
symlinks

└──
jre





└──
languages









└──
bf













├──
bin













│


└──
bf













├──
brainfuck.jar













└──
launcher

















└──
bf launcher.jar



6
directories,
6
f les

@mthmulders  javaBin
U 
 
 

1.
Prepare
source
code
2.
Prepare
GraalVM
polyglot
context
3.
Evaluate
the
source
code
input
=
"+
+
>
+
+
+
+
+
[
<
+
>
-
]
+
+
+
+
+
+
+
+
[
<
+
+
+
+
+
+
>
-
]
<
.";

source
=
Source.newBuilder("bf",
input,
"user
input").build();

output
=
new
ByteArrayOutputStream();

context
=
Context.newBuilder("bf").out(output).build();

context.eval(source);

System.out.println(output.toString());

@mthmulders  javaBin
T
“Implementing
your
own
language
using
GraalVM
will
not
only
give
you
high
performance.
More
importantly,
it
allows
your
language
to
connect
with
the
rich
tooling
provided
by
the
GraalVM
ecosystem.
https://www.graalvm.org/docs/graalvm-as-a-platform/
https://pxhere.com/en/photo/1067853
@mthmulders  javaBin
G 
L 
D
Start
the
launcher
with
­­inspect
Debugger
listening
on
port
9229.

To
start
debugging,
open
the
following
URL
in
Chrome:





chrome­devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/77b52d12­53f20cb0ab35

@mthmulders  javaBin
@mthmulders  javaBin
G 
L 
C 

Start
the
launcher
with
­­coverage,
and
optionally


­­coverage.Output=detailed

­­coverage.OutputFile=coverage.txt
------------------------------------------------------------------------------------------------

Code
coverage
histogram.



Shows
what
percent
of
each
element
was
covered
during
execution

------------------------------------------------------------------------------------------------


Path






















































|

Statements
|



Lines
|



Roots


------------------------------------------------------------------------------------------------


~/Code/brainfuck jvm/launcher/src/test/resources/sample.bf
|




100.00%
|

100.00%
|



0.00%


------------------------------------------------------------------------------------------------

@mthmulders  javaBin
W 
 
 

The
Truffle
framework
has
an
Instrument
API
to
write
other
tools:
1.
Source
code-related
events
2.
Allocation
events
3.
Language
runtime
and
thread
creation
events
4.
Application
execution
events
@mthmulders  javaBin
W 

Yes,
you
can
run
any
language
with
GraalVM.

...
but
it
may
take
some
time.
It's
certainly
fun

...
and
it
might
even
be
profitable.
@mthmulders  javaBin
T 

You
don't
need
to
write
a
parser
yourself

(and
maybe
you
don't
want
to,
either)
Take
time
to
think
about
the
AST
using
a
wrong
structure
leads
to
hard-to-track
bugs
refactoring
it
later
is
very
hard
and
time-consuming
@mthmulders  javaBin
Q
 
A








Sample
code:

Follow-up
project:

http://bit.ly/brainfuck-jvm
https://bit.ly/scheme4graalvm
@mthmulders  javaBin

Weitere ähnliche Inhalte

Mehr von Maarten Mulders

React in 40 minutes (Voxxed Days Romania)
React in 40 minutes (Voxxed Days Romania) React in 40 minutes (Voxxed Days Romania)
React in 40 minutes (Voxxed Days Romania) Maarten Mulders
 
React in 40 minutes (JCON)
React in 40 minutes (JCON) React in 40 minutes (JCON)
React in 40 minutes (JCON) Maarten Mulders
 
React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)Maarten Mulders
 
React in 50 Minutes (JNation)
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation) Maarten Mulders
 
SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand) SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand) Maarten Mulders
 
Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)Maarten Mulders
 
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)Maarten Mulders
 
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)Maarten Mulders
 
SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)Maarten Mulders
 
SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)Maarten Mulders
 
React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue) React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue) Maarten Mulders
 
React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus) React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus) Maarten Mulders
 
React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)Maarten Mulders
 
Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Maarten Mulders
 
SSL/TLS for Mortals (Devoxx)
 SSL/TLS for Mortals (Devoxx) SSL/TLS for Mortals (Devoxx)
SSL/TLS for Mortals (Devoxx)Maarten Mulders
 
Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)Maarten Mulders
 
Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)Maarten Mulders
 
Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL) Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL) Maarten Mulders
 
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Maarten Mulders
 
Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)Maarten Mulders
 

Mehr von Maarten Mulders (20)

React in 40 minutes (Voxxed Days Romania)
React in 40 minutes (Voxxed Days Romania) React in 40 minutes (Voxxed Days Romania)
React in 40 minutes (Voxxed Days Romania)
 
React in 40 minutes (JCON)
React in 40 minutes (JCON) React in 40 minutes (JCON)
React in 40 minutes (JCON)
 
React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)
 
React in 50 Minutes (JNation)
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation)
 
SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand) SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand)
 
Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)
 
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
 
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
 
SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)
 
SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)
 
React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue) React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue)
 
React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus) React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus)
 
React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)
 
Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)
 
SSL/TLS for Mortals (Devoxx)
 SSL/TLS for Mortals (Devoxx) SSL/TLS for Mortals (Devoxx)
SSL/TLS for Mortals (Devoxx)
 
Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)
 
Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)
 
Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL) Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL)
 
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)
 
Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)
 

Kürzlich hochgeladen

The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 

Kürzlich hochgeladen (20)

The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 

Building a DSL with GraalVM (javaBin online)