SlideShare a Scribd company logo
Making	JavaFX	Groovy	
Dierk	König	
Canoo	Engineering	AG	
dierk.koenig@canoo.com	
@mittie	on	Twitter	
GroovyFX
GroovyFXFirst	App		
import static groovyx.javafx.GroovyFX.start
start {
stage(title: "GroovyFX @ JavaONE", show: true ) {
scene(fill: groovyblue, width: 420, height: 420 ) {
text("Hello World!", layoutY: 50, font: ”bold 48pt serif")
}
}
}
GroovyFXFirst	App	(Java)	
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class HelloWorld extends Application {
@Override
public void start(Stage primaryStage) {
Font font = Font.font("serif", FontWeight.BOLD, 48);
Text text = new Text("Hello World!");
text.setLayoutY(50);
text.setFont(font);
Group parent = new Group(text);
Scene scene = new Scene(parent, 420, 420, Color.rgb(99, 152, 170));
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX @ JavaONE");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
import static groovyx.javafx.GroovyFX.start
GroovyFX.start {
stage(title: "GroovyFX @ JavaONE", show: true ) {
scene(fill: groovyblue, width: 420, height: 420 ) {
text("Hello World!", layoutY: 50,
font: ”bold 48pt serif")
}
}
}
GroovyFXThe	SceneGraph	
stage(title: "GroovyFX BorderPane Demo", show: true) {
scene(fill: groovyblue, width: 650, height:450) {
borderPane {
top(align: CENTER, margin: [10,0,10,0]) {
button("Top Button")
}
right(align: CENTER, margin: [0,10,0,1]) {
toggleButton("Right Toggle")
}
left(align: CENTER, margin: [0,10]) {
checkBox("Left Check")
}
bottom(align: CENTER, margin: 10) {
textField("Bottom TextField")
}
label("Center Label")
}
}
}
GroovyFXWhat	you	see
GroovyFXColors	-	Gradients	
stage(title: "GroovyFX @ JavaONE”, show: true) {
scene(width: 420, height:420) {
fill linearGradient(
start: [0, 0.4], end: [0.9, 0.9],
stops: [groovyblue, rgb(153,255,255)])
==================================================================
fill radialGradient(radius: 0.6, center:[0.5, 0.5],
focusDistance: 0.6, focusAngle: -65,
stops: [groovyblue, '#99FFFF'])
GroovyFXWhat	you	see
GroovyFXGraphics	&	Effects 		
stage(title: 'GroovyFX ColorfulCircles', resizable: false, show: true) {
scene(width: 800, height: 600, fill: black) {
group {
group {
30.times {
circle(radius: 200, strokeWidth: 4, strokeType: 'outside',
fill: rgb(255, 255, 255, 0.05),
stroke: rgb(255, 255, 255, 0.16))
}
effect boxBlur(width: 10, height: 10, iterations: 3)
}
rectangle(width: 800, height: 600, blendMode: 'overlay') {
def stops = ['#f8bd55', '#c0fe56', '#5dfbc1', '#64c2f8',
'#be4af7', '#ed5fc2', '#ef504c', '#f2660f']
fill linearGradient(start: [0f, 1f], end: [1f, 0f], stops: stops)
}
}
}
}
GroovyFXWhat	you	see
GroovyFXAnimation	
		stage(title:	"GroovyFX	@	JavaONE",	show:	true)	{	
									scene(fill:	groovyblue,	width:	420,	height:420)	{	
													rect	=	rectangle(width:	75,	height:	50,	fill:	navy)	{	
																	effect	reflection()	
																	animation	=	parallelTransition(cycleCount:	indefinite,	autoReverse:	true)	{	
																					translateTransition(4.s,	fromX:	0,	fromY:	0,	toX:	420-75,	toY:	300)	
																					rotateTransition(4.s,	toAngle:	360)	
																					fillTransition(4.s,	from:	navy,	to:	cyan)	
																					sequentialTransition()	{	
																									scaleTransition(2.s,	from:	1.0,	to:	2)	
																									scaleTransition(2.s,	from:	2,	to:	1.0)	
																					}	
																	}	animation.playFromStart();	
													}	
									}	
				}
GroovyFXWhat	you	see
GroovyFXAnimation	-	Timeline	
start {
stage(title: "GroovyFX Timeline Demo", show: true) {
scene(fill: groovyblue, width: 300, height:200) {
circle(id: “circ”, radius: 25, rotationAxis: [0,1,1]) {
fill radialGradient(radius: 1, center:[0.5, 1],
stops:[[0, magenta], [0.75, indigo], [1, black]])
effect dropShadow()
}
}
timeline (cycleCount: indefinite, autoReverse: true) {
at(2.s) {
change(circ.layoutXProperty()) { to 150; tween easeboth }
change(circ.layoutYProperty()) { to 150; tween easeboth }
change(circ.scaleXProperty()) { to 2 }
change(circ.scaleYProperty()) { to 2 }
change(circ.rotateProperty()) { to 180 }
}
}.playFromStart()
}
}
GroovyFXWhat	you	see
GroovyFXGroovyFX	Binding
GroovyFXBinding	–	Analog	Clock	
@FXBindable
class Time {
Integer hours
Integer minutes
Integer seconds
Double hourAngle
Double minuteAngle
Double secondAngle
public Time() {
// bind the angle properties to the clock time
hourAngleProperty.bind((hours() * 30.0) + (minutes() * 0.5))
minuteAngleProperty.bind(minutes() * 6.0)
secondAngleProperty.bind(seconds() * 6.0)
// Set the initial clock time
def calendar = Calendar.instance
hours = calendar.get(Calendar.HOUR)
minutes = calendar.get(Calendar.MINUTE)
seconds = calendar.get(Calendar.SECOND)
}
public void addOneSecond() {
seconds = (seconds + 1) % 60
if (seconds == 0) {
minutes = (minutes + 1) % 60
if (minutes == 0)
hours = (hours + 1) % 12
}
}
}
JavaFX	Properties	
GroovyFX	
Binding	DSL
GroovyFXBinding	–	Analog	Clock	
// hour hand
path(fill: black) {
rotate(angle: bind(time.hourAngle()))
moveTo(x: 4, y: -4)
arcTo(radiusX: -1, radiusY: -1, x: -4, y: -4)
lineTo(x: 0, y: -radius / 4 * 3)
}
// minute hand
path(fill: black) {
rotate(angle: bind(time.minuteAngle()))
moveTo(x: 4, y: -4)
arcTo(radiusX: -1, radiusY: -1, x: -4, y: -4)
lineTo(x: 0, y: -radius)
}
// second hand
line(endY: -radius - 3, strokeWidth: 2, stroke: red) {
rotate(angle: bind(time.secondAngle()))
}
GroovyFXMore	Binding	
class QuickTest {
@FXBindable String qtText = "Quick Test”
private int clickCount = 0
def onClick = {
qtText = "Quick Test ${++clickCount}"
}
}
start {
def qt = new QuickTest()
stage(title: "GroovyFX Bind Demo", x: 100, y: 100, show: true) {
scene(fill: groovyblue, width: 400, height: 400) {
vbox(spacing: 10, padding: 10) {
TextField tf = textField(text: 'Change Me!')
button(text: bind(tf,'text'), onAction: {qt.onClick()})
label(text: bind(tf.textProperty()))
label(text: bind({tf.text}))
label(text: bind(tf.text()))
// Bind to POGO fields annotated with @FXBindable
// These next two bindings are equivalent
label(text: bind(qt, 'qtText'))
label(text: bind(qt.qtText()))
label(text: bind(qt.qtTextProperty()).using({"<<< ${it} >>>"}) )
}
}
}
}
GroovyFXWhat	you	see
GroovyFXTableView	Control	
The	Java	Way:	
public class Person {
private StringProperty firstName;
public void setFirstName(String val) { firstNameProperty().set(val); }
public String getFirstName() { return firstNameProperty().get(); }
public StringProperty firstNameProperty() {
if (firstName == null)
firstName = new SimpleStringProperty(this, "firstName");
return firstName;
}
private StringProperty lastName;
public void setLastName(String value) { lastNameProperty().set(value); }
public String getLastName() { return lastNameProperty().get(); }
public StringProperty lastNameProperty() {
// etc.
}
}
GroovyFXTableView	Control	
The	Java	Way:	
ObservableList<Person> items = ...
TableView<Person> tableView = new TableView<Person>(items);
TableColumn<Person,String> firstNameCol =
new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(
new Callback<CellDataFeatures<Person, String>,
ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Person, String> p) {
return p.getValue().firstNameProperty();
}
});
tableView.getColumns().add(firstNameCol);
GroovyFXTableView	Control	
enum Gender { MALE, FEMALE }
@Canonical
Class Person {
@FXBindable String name
@FXBindable int age
@FXBindable Gender gender
@FXBindable Date dob
}
def persons = [
new Person("Jim Clarke", 29, Gender.MALE, new Date()),
new Person(”Dierk König", 30, Gender.MALE, new Date()),
new Person("Angelina Jolie", 36, Gender.FEMALE, new Date())
]
GroovyFXTableView	Control	
def dateFormat = new SimpleDateFormat("yyyy-MM-dd");
start {
stage(title: "GroovyFX Table Demo", show: true) {
scene(fill: groovyblue, width: 500, height: 200) {
tableView(items: persons) {
tableColumn(property: "name", text: "Name", prefWidth: 150)
tableColumn(property: "age", text: "Age", prefWidth: 50)
tableColumn(property: "gender", text: "Gender", prefWidth: 150)
tableColumn(property: "dob", text: "Birth", prefWidth: 150,
type: Date,
converter: { from ->
return dateFormat.format(from)
}
)
}
}
}
}
GroovyFXWhat	you	see
GroovyFXTableView	Control	
tableView(items: persons, selectionMode: "single",
cellSelectionEnabled: true, editable: true) {
tableColumn(editable: true, property: "name", text: "Name",
prefWidth: 150,
onEditCommit: { event ->
int row = event.tablePosition.row
Person item = event.tableView.items.get(row)
item.name = event.newValue
})
tableColumn(editable: true, property: "dob", text: "Birth",
prefWidth: 150, type: Date,
converter: { from ->
return dateFormat.format(from)
},
onEditCommit: { event ->
int row = event.tablePosition.row
Person item = event.tableView.items.get(row)
// convert TextField string to a date object.
Date date = dateFormat.parse(event.newValue)
item.dob = date
})
}
GroovyFXWhat	you	see
GroovyFXLayout	
JavaFX	uses	static	methods	to	set	constraints:	
	
TextField urlField = new TextField(“http://www.google.com”);
HBox.setHgrow(urlField, Priority.ALWAYS);
HBox hbox = new HBox();
hbox.getChildren().add(urlField);
WebView webView = new WebView();
VBox.setVgrow(webView, Priority.ALWAYS);
VBox vbox = new VBox();
vbox.getChildren().addAll(hbox, webView);
GroovyFXLayout	
stage(title:	"GroovyFX	WebView	Demo",	visible:	true)	{	
				scene(fill:	groovyblue,	width:	1024,	height:	800)	{	
								vbox	{	
												hbox(padding:	10,	spacing:	5)	{	
																urlField	=	textField(text:	homePage,	onAction:	goAction,	hgrow:	"always")	
																button("Go",	onAction:	goAction)	
												}	
												webView(vgrow:	"always")	
								}	
				}	
}
GroovyFXWhat	you	see
GroovyFXLayout	
gridPane(hgap: 5, vgap: 10, padding: 25) {
columnConstraints(minWidth: 50, halignment: "right")
columnConstraints(prefWidth: 250)
label("Send Us Your Feedback", font: "24pt sanserif",
row: 0, columnSpan: GridPane.REMAINING, halignment: "center",
margin: [0, 0, 10])
label("Name: ", row: 1, column: 0)
textField(promptText: "Your name", row: 1, column: 1, hgrow: 'always')
label("Email:", row: 2, column: 0)
textField(promptText: "Your email", row: 2, column: 1, hgrow: 'always')
label("Message:", row: 3, column: 0, valignment: "baseline")
textArea(row: 3, column: 1, hgrow: "always", vgrow: "always")
button("Send Message", row: 4, column: 1, halignment: "right")
}
GroovyFXWhat	you	see
GroovyFXGroovyFX	+	Griffon
GroovyFXGroovyFX	+	Griffon	
•  Download	JavaFX	archetype	from:		
–  http://deanriverson.github.com/griffon-javafx-archetype	
•  griffon	install-archetype	javafx-griffon-archetype.zip	
•  griffon	create-app	CoolApp	-archetype=javafx
GroovyFXGroovyFX	+	Griffon
GroovyFXGroovyFX	usage	
in	OpenDolphin
GroovyFXGroovyFX	usage	
in	OpenDolphin
GroovyFXGroovyFX	3D	usage	
in	OpenDolphin
GroovyFXResources	
•  GroovyFX	Website:	
– http://groovyfx.org	
•  Griffon	Website:	
– http://griffon.codehaus.org	
•  OpenDolphin	
– http://open-dolphin.org

More Related Content

What's hot (20)

PDF
The Ring programming language version 1.7 book - Part 73 of 196
Mahmoud Samir Fayed
 
ODP
Jersey Guice AOP
Domenico Briganti
 
PDF
The Ring programming language version 1.8 book - Part 75 of 202
Mahmoud Samir Fayed
 
PDF
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
PDF
Jggug 2010 330 Grails 1.3 観察
Tsuyoshi Yamamoto
 
PDF
The Ring programming language version 1.5.1 book - Part 64 of 180
Mahmoud Samir Fayed
 
PDF
COScheduler In Depth
WO Community
 
PDF
The Ring programming language version 1.7 book - Part 72 of 196
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.9 book - Part 99 of 210
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.8 book - Part 74 of 202
Mahmoud Samir Fayed
 
PDF
Testing a 2D Platformer with Spock
Alexander Tarlinder
 
PDF
多治見IT勉強会 Groovy Grails
Tsuyoshi Yamamoto
 
PPTX
What’s new in C# 6
Fiyaz Hasan
 
PDF
The Ring programming language version 1.6 book - Part 70 of 189
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.1 book - Part 12 of 180
Mahmoud Samir Fayed
 
PDF
Intro to Clojure's core.async
Leonardo Borges
 
PDF
The Ring programming language version 1.2 book - Part 48 of 84
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.4 book - Part 67 of 185
Mahmoud Samir Fayed
 
PDF
Clojure for Java developers - Stockholm
Jan Kronquist
 
PDF
RxJava и Android. Плюсы, минусы, подводные камни
Stfalcon Meetups
 
The Ring programming language version 1.7 book - Part 73 of 196
Mahmoud Samir Fayed
 
Jersey Guice AOP
Domenico Briganti
 
The Ring programming language version 1.8 book - Part 75 of 202
Mahmoud Samir Fayed
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
Jggug 2010 330 Grails 1.3 観察
Tsuyoshi Yamamoto
 
The Ring programming language version 1.5.1 book - Part 64 of 180
Mahmoud Samir Fayed
 
COScheduler In Depth
WO Community
 
The Ring programming language version 1.7 book - Part 72 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 99 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 74 of 202
Mahmoud Samir Fayed
 
Testing a 2D Platformer with Spock
Alexander Tarlinder
 
多治見IT勉強会 Groovy Grails
Tsuyoshi Yamamoto
 
What’s new in C# 6
Fiyaz Hasan
 
The Ring programming language version 1.6 book - Part 70 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 12 of 180
Mahmoud Samir Fayed
 
Intro to Clojure's core.async
Leonardo Borges
 
The Ring programming language version 1.2 book - Part 48 of 84
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 67 of 185
Mahmoud Samir Fayed
 
Clojure for Java developers - Stockholm
Jan Kronquist
 
RxJava и Android. Плюсы, минусы, подводные камни
Stfalcon Meetups
 

Similar to Greach, GroovyFx Workshop (20)

PDF
Griffon @ Svwjug
Andres Almiray
 
PPTX
JavaFX 2.0 With Alternative Languages - JavaOne 2011
Stephen Chin
 
PPTX
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
PPTX
The definitive guide to java agents
Rafael Winterhalter
 
PPTX
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
PPTX
JavaFX 2.0 With Alternative Languages [Portuguese]
Stephen Chin
 
PPT
Groovy & Grails: Scripting for Modern Web Applications
rohitnayak
 
PPTX
JavaFX 2.0 and Alternative Languages
Stephen Chin
 
PDF
How to Clone Flappy Bird in Swift
Giordano Scalzo
 
PDF
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
Tsuyoshi Yamamoto
 
PDF
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
jaxconf
 
DOCX
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
PDF
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
Stephen Chin
 
PDF
Vaadin7
Joonas Lehtinen
 
PDF
つくってあそぼ Kotlin DSL ~拡張編~
kamedon39
 
PPTX
JavaFX Your Way - Devoxx Version
Stephen Chin
 
PDF
Construire une application JavaFX 8 avec gradle
Thierry Wasylczenko
 
PDF
Vaadin 7
Joonas Lehtinen
 
ODP
JavaFX introduction
José Maria Silveira Neto
 
PPT
Javaone2008 Bof 5101 Groovytesting
Andres Almiray
 
Griffon @ Svwjug
Andres Almiray
 
JavaFX 2.0 With Alternative Languages - JavaOne 2011
Stephen Chin
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
The definitive guide to java agents
Rafael Winterhalter
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
JavaFX 2.0 With Alternative Languages [Portuguese]
Stephen Chin
 
Groovy & Grails: Scripting for Modern Web Applications
rohitnayak
 
JavaFX 2.0 and Alternative Languages
Stephen Chin
 
How to Clone Flappy Bird in Swift
Giordano Scalzo
 
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
Tsuyoshi Yamamoto
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
jaxconf
 
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
Stephen Chin
 
つくってあそぼ Kotlin DSL ~拡張編~
kamedon39
 
JavaFX Your Way - Devoxx Version
Stephen Chin
 
Construire une application JavaFX 8 avec gradle
Thierry Wasylczenko
 
Vaadin 7
Joonas Lehtinen
 
JavaFX introduction
José Maria Silveira Neto
 
Javaone2008 Bof 5101 Groovytesting
Andres Almiray
 
Ad

More from Dierk König (12)

PDF
OpenDolphin with GroovyFX Workshop at GreachConf, Madrid
Dierk König
 
PDF
Monads from Definition
Dierk König
 
PDF
FregeFX - JavaFX with Frege, a Haskell for the JVM
Dierk König
 
PDF
Software Transactional Memory (STM) in Frege
Dierk König
 
PDF
Quick into to Software Transactional Memory in Frege
Dierk König
 
PDF
Frege Tutorial at JavaOne 2015
Dierk König
 
PDF
Frege - consequently functional programming for the JVM
Dierk König
 
PDF
FregeDay: Parallelism in Frege compared to GHC Haskell (Volker Steiss)
Dierk König
 
PDF
FregeDay: Design and Implementation of the language (Ingo Wechsung)
Dierk König
 
PDF
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
Dierk König
 
PDF
UI Engineer - the missing profession, devoxx 2013
Dierk König
 
PDF
OpenDolphin: Enterprise Apps for collaboration on Desktop, Web, and Mobile
Dierk König
 
OpenDolphin with GroovyFX Workshop at GreachConf, Madrid
Dierk König
 
Monads from Definition
Dierk König
 
FregeFX - JavaFX with Frege, a Haskell for the JVM
Dierk König
 
Software Transactional Memory (STM) in Frege
Dierk König
 
Quick into to Software Transactional Memory in Frege
Dierk König
 
Frege Tutorial at JavaOne 2015
Dierk König
 
Frege - consequently functional programming for the JVM
Dierk König
 
FregeDay: Parallelism in Frege compared to GHC Haskell (Volker Steiss)
Dierk König
 
FregeDay: Design and Implementation of the language (Ingo Wechsung)
Dierk König
 
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
Dierk König
 
UI Engineer - the missing profession, devoxx 2013
Dierk König
 
OpenDolphin: Enterprise Apps for collaboration on Desktop, Web, and Mobile
Dierk König
 
Ad

Recently uploaded (20)

PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PPTX
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PPTX
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
PDF
introduction to computer hardware and sofeware
chauhanshraddha2007
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
introduction to computer hardware and sofeware
chauhanshraddha2007
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
The Future of Artificial Intelligence (AI)
Mukul
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 

Greach, GroovyFx Workshop