SlideShare a Scribd company logo
Object	Calisthenics
9	steps	to	better	OO	code
Agenda
Learn	how	to	make	our	code	more:
readable
reusable
testable
maintainable
Raise	you	hand	if	you	know
one	of	the	following:
DRY
KISS
SOLID
YAGNI
Zen	of	Python
Calisthenics
Cal	•	is	•	then	•	ics	-	/ˌkaləsˈTHeniks/
"Calisthenics	are	exercises	consisting	of	a
variety	of	gross	motor	movements;	often
rhythmical	and	generally	without	equipment
or	apparatus."
Wikipedia
Object	Calisthenics
Jeff	Bay
Written	for	Java
Why	bother?
Code	is	read	more
than	it's	written
Author	unknown
You	need	to	write	code	that
minimizes	the	time	it	would
take	someone	else	to
understand	it	-	even	if	that
someone	else	is	you
Art	of	Readable	Code	by	Dustin	Boswell,
Trevor	Foucher
Rule	#1
Only	one	level	of
indentation	per	method
class	Board(object):
				def	__init__(self,	data):
								#	Level	0
								self.buf	=	""
								for	i	in	range(10):
												#	Level	1
												for	j	in	range(10):
																#	Level	2
																self.buf	+=	data[i][j]
class	Board(object):
				def	__init__(self,	data):
								self.buf	=	""
								self.collect_rows(data)
				
				def	collect_rows(self,	data):
								for	i	in	range(10):
												self.collect_row(data[i])
												
				def	collect_row(self,	row):
								for	j	in	range(10):
												self.buf	+=	row[j]
products	=	self.get_products_by_user(...)
if	products	is	None:
				products	=	self.get_products_by_media(...)
				if	products	is	None:
								products	=	self.get_products_by_domain(...)
								if	products	is	None:
												products	=	self.get_any_products(...):
												if	products	is	None:
																raise	Exception('Access	denied')
												else:
																...
								else:
												...
				else:
								...
else:
				...
Chain	of	command
Benefits
Single	responsibility
Better	naming
Shorter	methods
Reusable	methods
Rule	#2
Do	not	use	else	keyword
if	options.get_categories()	is	None:
				...
elif	len(options.get_categories())	==	1:
				...
elif	SPECIAL_CATEGORY	in	options.get_categories():
				...
elif	options.get_categories()	and	options.get_query():
				...
elif	options.get_content_type():
				...
def	login	(self,	request):
				if	request.user.is_authenticated():
								return	redirect("homepage")
				else:
								messages.add_message(request,	
																													messages.INFO,	
																													'Bad	credentials')
								return	redirect("login")
def	login	(self,	request):
				if	request.user.is_authenticated():
								return	redirect("homepage")
				messages.add_message(request,	
																									messages.INFO,	
																									'Bad	credentials')
				return	redirect("login")
def	function(param):
				if	param	is	not	None:
								value	=	param
				else:
								value	=	"default"
				return	value
def	function(param):
				value	=	"default"
				if	param	is	not	None:
								value	=	param
				return	value
Extract	code
Default	value
Polymorphism
Strategy	pattern
State	pattern
Examples
https://github.com/gennad/Design-Patterns-in-Python
https://www.quora.com/Is-it-true-that-a-good-
programmer-uses-fewer-if-conditions-than-an-amateur
Benefits
Avoids	code	duplication
Lower	complexity
Readability
Rule	#3
Wrap	primitive	types	if	it
has	behaviour
Value	Object	in	DDD
class	Validator(object):
				def	check_date(self,	year,	month,	day):
								pass
#	10th	of	December	or	12th	of	October?
validator	=	Validator()
validator.check_date(2016,	10,	12)
class	Validator(object):
				def	check_date(self,	year:	Year,	month:	Month,	day:	Day)	->	bool:
								pass
#	Function	call	leaves	no	doubt.
validator.check_date(Year(2016),	Month(10),	Day(12))
Benefits
Encapsulation
Type	hinting
Attracts	similar	behaviour
Rule	#4
Only	one	dot	per	line
OK:	Fluent	interface
class	Poem(object):
				def	__init__(self,	content):
								self.content	=	content
				def	indent(self,	spaces):
								self.content	=	"	"	*	spaces	+	self.content
								return	self
				def	suffix(self,	content):
								self.content	=	self.content	+	"	-	"	+	content
								return	self
Poem("Road	Not	Travelled").indent(4)
				.suffix("Robert	Frost")
				.content
Not	OK:	getter	chain
class	CartService(object):
				def	get_token(self):
								token	=	self.get_service('auth')
												.auth_user('user',	'password')
												.get_result()
												.get_token()
								return	token
#	1.	What	if	None	is	returned	instead	of	object?
#	2.	How	about	exceptions	handling?
class	Field(object):
				def	__init__(self):
								self.current	=	Piece()
class	Piece(object):
				def	__init__(self):
								self.representation	=	"	"
class	Board(object):
				def	board_representation(self,	board):
								buf	=	''
								for	field	in	board:
												buf	+=	field.current.representation
								return	buf
class	Field(object):
				def	__init__(self):
								self.current	=	Piece()
								
				def	add_to(self,	buffer):
								return	self.current.add_to(buffer)
class	Piece(object):
				def	__init__(self):
								self.representation	=	"	"
								
				def	add_to(self,	buffer):
								return	buffer	+	self.representation
class	Board(object):
				def	board_representation(self,	board):
								buf	=	''
								for	field	in	board:
												buf	=	field.add_to(buf)
								return	buf
Benefits
Encapsulation
Demeter's	law
Open/Closed	Principle
Rule	#5
Do	not	abbreviate
Why	abbreviate?
Too	many	responsibilities
Name	too	long?
Split	&	extract
Duplicated	code?
Refactor!
class	Order(object):
				def	ship_order(self):
								pass
order	=	Order()
order.ship_order()
//	vs
class	Order(object):
				def	ship(self):
								pass
order	=	Order()
order.ship()
acc	=	0
//	accumulator?	accuracy?
pos	=	100
//	position?	point	of	sale?	positive?
auth	=	None
//	authentication?	authorization?	both?
Benefits
Clear	intentions
Indicate	underlying	problems
Rule	#6
Keep	your	classes	small
What	is	small	class?
15-20	lines	per	method
50	lines	per	class
10	classes	per	module
Benefits
Single	Responsibility
Smaller	modules
Rule	#7
No	more	than	2	instance
	variable	per	class
Class	should	handle	single
variable	state
In	some	cases	it	might	be
two	variables
class	CartService(object):
				def	__init__(self):
								self.logger	=	Logger()
								self.cart	=	CartCollection()
								self.translationService	=	TranslationService()
								self.auth_service	=	AuthService()
								self.user_service	=	UserService()
Benefits
High	cohesion
Encapsulation
Fewer	dependencies
Rule	#8
First	class	collections
collections	module
Benefits
Single	Responsibility
Rule	#9
Do	not	use	setters/getters
Accessors	are	fine
Don't	make	decisions
outside	of	class
Let	class	do	it's	job
Tell,	don't	ask
class	Game(object):
				def	__init__(self):
								self.score	=	0
				def	set_score(self,	score):
								self.score	=	score
				def	get_score(self):
								return	self.score
#	Usage
ENEMY_DESTROYED_SCORE	=	10
game	=	Game()
game.set_score(game.get_score()	+	ENEMY_DESTROYED_SCORE)
class	Game(object):
				def	__init__(self):
								self.score	=	0
				
				def	add_score(self,	score):
								self.score	+=	score
#	Usage
ENEMY_DESTROYED_SCORE	=	10
game	=	Game()
game.add_score(ENEMY_DESTROYED_SCORE)
Benefits
Open/Closed	Principle
Catch	'em	all!
Catch	'em	all!	
1.	 Only	one	level	of	indentation	per	method,
2.	 Do	not	use	else	keyword,
3.	 Wrap	primitive	types	if	it	has	behavior,
4.	 Only	one	dot	per	line,
5.	 Don’t	abbreviate,
6.	 Keep	your	entities	small,
7.	 No	more	than	two	instance	variable	per	class,
8.	 First	Class	Collections,
9.	 Do	not	use	accessors
Catch	'em	all!	
1.	 Only	one	level	of	indentation	per	method,
2.	 Do	not	use	else	keyword,
3.	 Wrap	primitive	types	if	it	has	behavior,
4.	 Only	one	dot	per	line,
5.	 Don’t	abbreviate,
6.	 Keep	your	entities	small,
7.	 No	more	than	two	instance	variable	per	class,
8.	 First	Class	Collections,
9.	 Do	not	use	accessors
10.	 ???
11.	 PROFIT!
Homework
Create	new	project	up	to
1000	lines	long
Apply	presented	rules	as
strictly	as	possible
Draw	your	own	conculsions
Customize	these	rules
Final	thoughts
These	are	not	best	practices
These	are	just	guidelines
Use	with	caution!
Questions?
Links
https://en.wikipedia.org/wiki/Calisthenics
https://www.cs.helsinki.fi/u/luontola/tdd-
2009/ext/ObjectCalisthenics.pdf
https://pragprog.com/book/twa/thoughtworks-anthology
https://github.com/gennad/Design-Patterns-in-Python
https://en.wikipedia.org/wiki/Law_of_Demeter
https://www.quora.com/Is-it-true-that-a-good-
programmer-uses-fewer-if-conditions-than-an-amateur
Thank	you!

More Related Content

Viewers also liked

Edición perfil estudiante
Edición perfil estudianteEdición perfil estudiante
Edición perfil estudiante
Pilar Mendoza
 
operating system
operating systemoperating system
operating system
subashini mari
 
Tipologia y caracter
Tipologia y caracterTipologia y caracter
Tipologia y caracter
Sheyla Rangel Hernández
 
Planeación (cuidemos nuestra ciudad) (1)
Planeación (cuidemos nuestra ciudad) (1)Planeación (cuidemos nuestra ciudad) (1)
Planeación (cuidemos nuestra ciudad) (1)
leslymh
 
Utilizing social media to sustain your club - Soroptimist edition
Utilizing social media to sustain your club - Soroptimist editionUtilizing social media to sustain your club - Soroptimist edition
Utilizing social media to sustain your club - Soroptimist edition
Sarah K Miller
 
Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)
Paweł Lewtak
 
Dulce caraballo arquitectura barroc
Dulce caraballo arquitectura barrocDulce caraballo arquitectura barroc
Dulce caraballo arquitectura barroc
dulce caraballo meneses
 
Αερόβια -αναερόβια ασκηση
Αερόβια -αναερόβια ασκησηΑερόβια -αναερόβια ασκηση
Αερόβια -αναερόβια ασκηση
aristea chintiraki
 
Lesiones cuadro comparativo
Lesiones cuadro comparativoLesiones cuadro comparativo
Lesiones cuadro comparativo
Selene Baoiz
 
Haemangioma
HaemangiomaHaemangioma
Haemangioma
adarsh abhijit
 
REVISTA PSICOLOGIA CLINICA
REVISTA PSICOLOGIA CLINICAREVISTA PSICOLOGIA CLINICA
REVISTA PSICOLOGIA CLINICA
Gisel Milagros Vaderna Martinez
 
Complessità, Flessibilità, Semplessità
Complessità, Flessibilità, SemplessitàComplessità, Flessibilità, Semplessità
Complessità, Flessibilità, Semplessità
Laura Antichi
 
Measuring Learning Outcomes
Measuring Learning Outcomes Measuring Learning Outcomes
Measuring Learning Outcomes
Rouel Marcon
 
Planeacion camino a la escuela (1)
Planeacion   camino a la escuela (1)Planeacion   camino a la escuela (1)
Planeacion camino a la escuela (1)
leslymh
 
Intoxicación por acetaminofén y escopolamina
Intoxicación por acetaminofén  y escopolaminaIntoxicación por acetaminofén  y escopolamina
Intoxicación por acetaminofén y escopolamina
Lis Puccini
 
Ingresantes a la UNT sede Trujillo grupo Ciencias
Ingresantes a la UNT sede Trujillo grupo CienciasIngresantes a la UNT sede Trujillo grupo Ciencias
Ingresantes a la UNT sede Trujillo grupo Ciencias
weblaindustria
 
Listados escritura 5 b
Listados  escritura 5 bListados  escritura 5 b
Listados escritura 5 b
N/A
 
Listados escritura 5 a
Listados  escritura 5 aListados  escritura 5 a
Listados escritura 5 a
N/A
 
Minerales de la tecnología
Minerales de la tecnologíaMinerales de la tecnología
Minerales de la tecnología
mineraltecnolog
 

Viewers also liked (20)

Edición perfil estudiante
Edición perfil estudianteEdición perfil estudiante
Edición perfil estudiante
 
operating system
operating systemoperating system
operating system
 
Tipologia y caracter
Tipologia y caracterTipologia y caracter
Tipologia y caracter
 
Planeación (cuidemos nuestra ciudad) (1)
Planeación (cuidemos nuestra ciudad) (1)Planeación (cuidemos nuestra ciudad) (1)
Planeación (cuidemos nuestra ciudad) (1)
 
Utilizing social media to sustain your club - Soroptimist edition
Utilizing social media to sustain your club - Soroptimist editionUtilizing social media to sustain your club - Soroptimist edition
Utilizing social media to sustain your club - Soroptimist edition
 
5 mathematic03
5 mathematic035 mathematic03
5 mathematic03
 
Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)
 
Dulce caraballo arquitectura barroc
Dulce caraballo arquitectura barrocDulce caraballo arquitectura barroc
Dulce caraballo arquitectura barroc
 
Αερόβια -αναερόβια ασκηση
Αερόβια -αναερόβια ασκησηΑερόβια -αναερόβια ασκηση
Αερόβια -αναερόβια ασκηση
 
Lesiones cuadro comparativo
Lesiones cuadro comparativoLesiones cuadro comparativo
Lesiones cuadro comparativo
 
Haemangioma
HaemangiomaHaemangioma
Haemangioma
 
REVISTA PSICOLOGIA CLINICA
REVISTA PSICOLOGIA CLINICAREVISTA PSICOLOGIA CLINICA
REVISTA PSICOLOGIA CLINICA
 
Complessità, Flessibilità, Semplessità
Complessità, Flessibilità, SemplessitàComplessità, Flessibilità, Semplessità
Complessità, Flessibilità, Semplessità
 
Measuring Learning Outcomes
Measuring Learning Outcomes Measuring Learning Outcomes
Measuring Learning Outcomes
 
Planeacion camino a la escuela (1)
Planeacion   camino a la escuela (1)Planeacion   camino a la escuela (1)
Planeacion camino a la escuela (1)
 
Intoxicación por acetaminofén y escopolamina
Intoxicación por acetaminofén  y escopolaminaIntoxicación por acetaminofén  y escopolamina
Intoxicación por acetaminofén y escopolamina
 
Ingresantes a la UNT sede Trujillo grupo Ciencias
Ingresantes a la UNT sede Trujillo grupo CienciasIngresantes a la UNT sede Trujillo grupo Ciencias
Ingresantes a la UNT sede Trujillo grupo Ciencias
 
Listados escritura 5 b
Listados  escritura 5 bListados  escritura 5 b
Listados escritura 5 b
 
Listados escritura 5 a
Listados  escritura 5 aListados  escritura 5 a
Listados escritura 5 a
 
Minerales de la tecnología
Minerales de la tecnologíaMinerales de la tecnología
Minerales de la tecnología
 

Similar to Object Calisthenics (PyCon Slovakia 2017)

Core java Basics
Core java BasicsCore java Basics
Core java Basics
RAMU KOLLI
 
Weaponizing Neural Networks. In your browser!
Weaponizing Neural Networks. In your browser!Weaponizing Neural Networks. In your browser!
Weaponizing Neural Networks. In your browser!
DefCamp
 
Moose
MooseMoose
Introduction to the Android NDK
Introduction to the Android NDKIntroduction to the Android NDK
Introduction to the Android NDK
BeMyApp
 
Intro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-CIntro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-C
Andrew Rohn
 
Java Course — Mastering the Fundamentals
Java Course — Mastering the FundamentalsJava Course — Mastering the Fundamentals
Java Course — Mastering the Fundamentals
nehash4637
 
DevOps. If it hurts, do it more often.
DevOps. If it hurts, do it more often.DevOps. If it hurts, do it more often.
DevOps. If it hurts, do it more often.
Uldis Karlovs-Karlovskis
 
GOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter SlidesGOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter Slides
Alexandra Masterson
 
Core_java_ppt.ppt
Core_java_ppt.pptCore_java_ppt.ppt
Core_java_ppt.ppt
SHIBDASDUTTA
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-C
AdamFallon4
 
Presentation to java
Presentation  to  javaPresentation  to  java
Presentation to java
Ganesh Chittalwar
 
Python basic
Python basicPython basic
Python basic
SOHIL SUNDARAM
 
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGNIntroducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Manish Pandit
 
Clean Code 2
Clean Code 2Clean Code 2
Clean Code 2
Fredrik Wendt
 
Core java part1
Core java  part1Core java  part1
Core java part1
VenkataBolagani
 
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsPython for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Roelof Pieters
 

Similar to Object Calisthenics (PyCon Slovakia 2017) (20)

Sep 15
Sep 15Sep 15
Sep 15
 
Sep 15
Sep 15Sep 15
Sep 15
 
Core java Basics
Core java BasicsCore java Basics
Core java Basics
 
Weaponizing Neural Networks. In your browser!
Weaponizing Neural Networks. In your browser!Weaponizing Neural Networks. In your browser!
Weaponizing Neural Networks. In your browser!
 
Object Calisthenics
Object CalisthenicsObject Calisthenics
Object Calisthenics
 
Moose
MooseMoose
Moose
 
Introduction to the Android NDK
Introduction to the Android NDKIntroduction to the Android NDK
Introduction to the Android NDK
 
Intro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-CIntro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-C
 
Java Course — Mastering the Fundamentals
Java Course — Mastering the FundamentalsJava Course — Mastering the Fundamentals
Java Course — Mastering the Fundamentals
 
DevOps. If it hurts, do it more often.
DevOps. If it hurts, do it more often.DevOps. If it hurts, do it more often.
DevOps. If it hurts, do it more often.
 
GOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter SlidesGOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter Slides
 
Core_java_ppt.ppt
Core_java_ppt.pptCore_java_ppt.ppt
Core_java_ppt.ppt
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-C
 
Presentation to java
Presentation  to  javaPresentation  to  java
Presentation to java
 
Python basic
Python basicPython basic
Python basic
 
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGNIntroducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
 
Clean Code 2
Clean Code 2Clean Code 2
Clean Code 2
 
Core java part1
Core java  part1Core java  part1
Core java part1
 
JAVA BASICS
JAVA BASICSJAVA BASICS
JAVA BASICS
 
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsPython for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
 

More from Paweł Lewtak

Jak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokachJak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokach
Paweł Lewtak
 
Good project from scratch - from developer's point of view
Good project from scratch - from developer's point of viewGood project from scratch - from developer's point of view
Good project from scratch - from developer's point of view
Paweł Lewtak
 
Long-term IT projects
Long-term IT projectsLong-term IT projects
Long-term IT projects
Paweł Lewtak
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
Paweł Lewtak
 
Improve your developer's toolset
Improve your developer's toolsetImprove your developer's toolset
Improve your developer's toolset
Paweł Lewtak
 
2nd hardest thing in computer science
2nd hardest thing in computer science2nd hardest thing in computer science
2nd hardest thing in computer science
Paweł Lewtak
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
Paweł Lewtak
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
Paweł Lewtak
 

More from Paweł Lewtak (8)

Jak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokachJak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokach
 
Good project from scratch - from developer's point of view
Good project from scratch - from developer's point of viewGood project from scratch - from developer's point of view
Good project from scratch - from developer's point of view
 
Long-term IT projects
Long-term IT projectsLong-term IT projects
Long-term IT projects
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
 
Improve your developer's toolset
Improve your developer's toolsetImprove your developer's toolset
Improve your developer's toolset
 
2nd hardest thing in computer science
2nd hardest thing in computer science2nd hardest thing in computer science
2nd hardest thing in computer science
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
 

Recently uploaded

Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Yara Milbes
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
abdulrafaychaudhry
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 

Recently uploaded (20)

Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 

Object Calisthenics (PyCon Slovakia 2017)