SlideShare a Scribd company logo
1 of 74
Download to read offline
Refactoring for Software Design Smells
Ganesh Samarthyam
ganesh@codeops.tech
#XPIndia2016	
–Craig Larman
"The critical design tool for software development
is a mind well educated in design principles"
#XPIndia2016	
Warm-up question #1
What does this tool
visualize?
#XPIndia2016	
Warm-up question #2
Who coined
the term
“code smell”?
Hint: He also
originated the
terms TDD
and XP
#XPIndia2016	
Warm-up question #3
Who wrote the foreword for
our book?
#XPIndia2016	
–Craig Larman
"The critical design tool for software development
is a mind well educated in design principles"
#XPIndia2016	
Why care about design quality and design principles?
‹#›
#XPIndia2016	
Why care about design quality and design principles?
Poor software quality costs
more than $150 billion per year
in U.S. and greater than $500
billion per year worldwide
- Capers Jones
Why care? Reason #1
#XPIndia2016	
*	h$p://sqgne.org/presenta2ons/2012-13/Jones-Sep-2012.pdf	
0	
20	
40	
60	
80	
100	
120	
IBM	
Corporta+on	
(MVS)	
SPR	Corpora+on	
(Client	Studies)	
TRW	
Corpora+on	
MITRE	
Corpora+on	
Nippon	Electric	
Corp	
Percentage	Contribu+on	
Industry	Data	on	Defect	Origins	
Adminstra+ve	Errors	
Documenta+on	Errors	
Bad	Fixes	
Coding	Errors	
Design	Errors	
Requirements	Errors	
Up	to	64%	of	soNware	defects	can	be	traced	back	
to	errors	in	soNware	design	in	enterprise	soNware!		
Why care? Reason #1
#XPIndia2016	
Source: Consortium of IT Software Quality (CISQ), Bill Curtis, Architecturally Complex Defects, 2012
“The problem with quick and dirty...is that dirty
remains long after quick has been forgotten”
Steve C McConnell
#XPIndia2016	
Why care? Reason #3
“Technical debt is the debt that accrues
when you knowingly or unknowingly make
wrong or non-optimal design decisions”
#XPIndia2016	
Why care? Reason #3
#XPIndia2016	
"We thought we were just programming on an airplane”
- Kent Beck
Why care? Reason #2
#XPIndia2016	
Fundamental principles in software design
Principles*
Abstrac/on*
Encapsula/on*
Modulariza/on*
Hierarchy*
#XPIndia2016	
Effective design: Java parallel streams
❖ Applies the principles of abstraction and encapsulation
effectively to significantly simplify concurrent
programming
Parallel code
Serial code
#XPIndia2016	
Parallel streams: example
import java.util.stream.LongStream;
class PrimeNumbers {
private static boolean isPrime(long val) {
for(long i = 2; i <= val/2; i++) {
if((val % i) == 0) {
return false;
}
}
return true;
}
public static void main(String []args) {
long numOfPrimes = LongStream.rangeClosed(2, 50_000)
.parallel()
.filter(PrimeNumbers::isPrime)
.count();
System.out.println(numOfPrimes);
}
}
#XPIndia2016	
long numOfPrimes = LongStream.rangeClosed(2, 100_000)
.filter(PrimeNumbers::isPrime)
.count();
System.out.println(numOfPrimes);
Prints 9592
2.510 seconds
#XPIndia2016	
Parallel code
Serial code
Let’s flip the switch by
calling parallel() function
#XPIndia2016	
long numOfPrimes = LongStream.rangeClosed(2, 100_000)
.parallel()
.filter(PrimeNumbers::isPrime)
.count();
System.out.println(numOfPrimes);
Prints 9592
1.235 seconds
#XPIndia2016	
Proactive application: enabling techniques
#XPIndia2016	
Reactive application: smells
#XPIndia2016	
What are smells?
“Smells'are'certain'structures'
in'the'code'that'suggest'
(some4mes'they'scream'for)'
the'possibility'of'refactoring.”''
#XPIndia2016	
What is refactoring?
Refactoring (noun): a change
made to the internal structure of
software to make it easier to
understand and cheaper to
modify without changing its
observable behavior
Refactor (verb): to restructure
software by applying a series
of refactorings without
changing its observable
behavior
#XPIndia2016	
Should this be “refactored”?
abstract class Printer {
private Integer portNumber = getPortNumber();
abstract Integer getPortNumber();
public static void main(String[]s) {
Printer p = new LPDPrinter();
System.out.println(p.portNumber);
}
}
class LPDPrinter extends Printer {
/* Line Printer Deamon port no is 515 */
private Integer defaultPortNumber = 515;
Integer getPortNumber() {
return defaultPortNumber;
}
}
#XPIndia2016	
Should this be “refactored”?
Calendar calendar = new Calendar.Builder()
.set(YEAR, 2003)
.set(MONTH, APRIL)
.set(DATE, 6)
.set(HOUR, 15)
.set(MINUTE, 45)
.set(SECOND, 22)
.setTimeZone(TimeZone.getDefault())
.build();
System.out.println(calendar);
Does this have “long
message chains” smell?
No - it’s a feature
(use of builder pattern)!
#XPIndia2016	
Design smells: Example
public'class'Forma.ableFlags'{'
''''//'Explicit'instan7a7on'of'this'class'is'prohibited.'
''''private'Forma.ableFlags()'{}'
''''/**'LeBCjus7fies'the'output.''*/'
''''public'sta7c'final'int'LEFT_JUSTIFY'='1<<0;'//''C''
''''/**'Converts'the'output'to'upper'case'*/''
''''public'sta7c'final'int'UPPERCASE'='1<<1;''''//''S''
''''/**Requires'the'output'to'use'an'alternate'form.'*/'
''''public'sta7c'final'int'ALTERNATE'='1<<2;''''//''#''
}'
“Lazy class”
smell
#XPIndia2016	
Duplicated Code
#XPIndia2016	
Duplicated Code
• exactly(iden,cal(except'for'varia.ons'in'whitespace,'layout,'and'
comments'
Type'1'
• syntac,cally(iden,cal(except'for'varia.on'in'symbol'names,'whitespace,'
layout,'and'comments'
Type'2'
• iden.cal'except'some'statements(changed,(added,(or(removed(
Type'3'
• when'the'fragments'are'seman,cally(iden,cal(but'implemented'by'
syntac.c'variants'
Type'4'
#XPIndia2016	
What’s that smell?
public'Insets'getBorderInsets(Component'c,'Insets'insets){'
''''''''Insets'margin'='null;'
'''''''''//'Ideally'we'd'have'an'interface'defined'for'classes'which'
''''''''//'support'margins'(to'avoid'this'hackery),'but'we've'
''''''''//'decided'against'it'for'simplicity'
''''''''//'
''''''''if'(c'instanceof'AbstractBuEon)'{'
'''''''''''''''''margin'='((AbstractBuEon)c).getMargin();'
''''''''}'else'if'(c'instanceof'JToolBar)'{'
''''''''''''''''margin'='((JToolBar)c).getMargin();'
''''''''}'else'if'(c'instanceof'JTextComponent)'{'
''''''''''''''''margin'='((JTextComponent)c).getMargin();'
''''''''}'
''''''''//'rest'of'the'code'omiEed'…'
#XPIndia2016	
Refactoring
#XPIndia2016	
Refactoring
!!!!!!!margin!=!c.getMargin();
!!!!!!!!if!(c!instanceof!AbstractBu8on)!{!
!!!!!!!!!!!!!!!!!margin!=!((AbstractBu8on)c).getMargin();!
!!!!!!!!}!else!if!(c!instanceof!JToolBar)!{!
!!!!!!!!!!!!!!!!margin!=!((JToolBar)c).getMargin();!
!!!!!!!!}!else!if!(c!instanceof!JTextComponent)!{!
!!!!!!!!!!!!!!!!margin!=!((JTextComponent)c).getMargin();!
!!!!!!!!}
#XPIndia2016	
Design smells: Example
#XPIndia2016	
Discussion example
#XPIndia2016	
Design smells: Example
#XPIndia2016	
Discussion example
#XPIndia2016	
Design smells: example #3
#XPIndia2016	
Discussion example
// using java.util.Date
Date today = new Date();
System.out.println(today);
$ java DateUse
Wed Dec 02 17:17:08 IST 2015
Why should we get the
time and timezone details
if I only want a date? Can
I get rid of these parts?
No!
#XPIndia2016	
So what!
Date today = new Date();
System.out.println(today);
Date todayAgain = new Date();
System.out.println(todayAgain);
System.out.println(today.compareTo(todayAgain) == 0);
Thu Mar 17 13:21:55 IST 2016
Thu Mar 17 13:21:55 IST 2016
false
What is going
on here?
#XPIndia2016	
Refactoring for Date
Replace inheritance
with delegation
#XPIndia2016	
Joda API
Stephen Colebourne
#XPIndia2016	
java.time package!
Date, Calendar, and TimeZone
Java 8 replaces
these types
#XPIndia2016	
Refactored solution
LocalDate today = LocalDate.now();
System.out.println(today);
LocalDate todayAgain = LocalDate.now();
System.out.println(todayAgain);
System.out.println(today.compareTo(todayAgain) == 0);
2016-03-17
2016-03-17
true
Works fine
now!
#XPIndia2016	
Refactored example …
You can use only date,
time, or even timezone,
and combine them as
needed!
LocalDate today = LocalDate.now();
System.out.println(today);
LocalTime now = LocalTime.now();
System.out.println(now);
ZoneId id = ZoneId.of("Asia/Tokyo");
System.out.println(id);
LocalDateTime todayAndNow = LocalDateTime.now();
System.out.println(todayAndNow);
ZonedDateTime todayAndNowInTokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(todayAndNowInTokyo);
2016-03-17
13:28:06.927
Asia/Tokyo
2016-03-17T13:28:06.928
2016-03-17T16:58:06.929+09:00[Asia/Tokyo]
#XPIndia2016	
More classes in Date/Time API
#XPIndia2016	
What’s that smell?
#XPIndia2016	
Liskov’s Substitution Principle (LSP)
It#should#be#possible#to#replace#
objects#of#supertype#with#
objects#of#subtypes#without#
altering#the#desired#behavior#of#
the#program#
Barbara#Liskov#
#XPIndia2016	
Refactoring
Replace inheritance
with delegation
#XPIndia2016	
What’s that smell?
switch'(transferType)'{'
case'DataBuffer.TYPE_BYTE:'
byte'bdata[]'='(byte[])inData;'
pixel'='bdata[0]'&'0xff;'
length'='bdata.length;'
break;'
case'DataBuffer.TYPE_USHORT:'
short'sdata[]'='(short[])inData;'
pixel'='sdata[0]'&'0xffff;'
length'='sdata.length;'
break;'
case'DataBuffer.TYPE_INT:'
int'idata[]'='(int[])inData;'
pixel'='idata[0];'
length'='idata.length;'
break;'
default:'
throw' new' UnsupportedOperaQonExcepQon("This' method' has' not' been' "+' "implemented'
for'transferType'"'+'transferType);'
}'
#XPIndia2016	
Replace conditional with polymorphism
protected(int(transferType;! protected(DataBuffer(dataBuffer;!
pixel(=(dataBuffer.getPixel();(
length(=(dataBuffer.getSize();!
switch((transferType)({(
case(DataBuffer.TYPE_BYTE:(
byte(bdata[](=((byte[])inData;(
pixel(=(bdata[0](&(0xff;(
length(=(bdata.length;(
break;(
case(DataBuffer.TYPE_USHORT:(
short(sdata[](=((short[])inData;(
pixel(=(sdata[0](&(0xffff;(
length(=(sdata.length;(
break;(
case(DataBuffer.TYPE_INT:(
int(idata[](=((int[])inData;(
pixel(=(idata[0];(
length(=(idata.length;(
break;(
default:(
throw( new( UnsupportedOperaRonExcepRon("This( method(
has( not( been( "+( "implemented( for( transferType( "( +(
transferType);(
}!
#XPIndia2016	
Scenario
How to separate:
a) code generation logic
from node types?
b) how to support different
target types?
class Plus extends Expr {
private Expr left, right;
public Plus(Expr arg1, Expr arg2) {
left = arg1;
right = arg2;
}
public void genCode() {
left.genCode();
right.genCode();
if(t == Target.JVM) {
System.out.println("iadd");
}
else { // DOTNET
System.out.println("add");
}
}
}
#XPIndia2016	
A solution using Visitor pattern
class Plus extends Expr {
private Expr left, right;
public Plus(Expr arg1, Expr arg2) {
left = arg1;
right = arg2;
}
public Expr getLeft() {
return left;
}
public Expr getRight() {
return right;
}
public void accept(Visitor v) {
v.visit(this);
}
}
class DOTNETVisitor extends Visitor {
public void visit(Constant arg) {
System.out.println("ldarg " + arg.getVal());
}
public void visit(Plus plus) {
genCode(plus.getLeft());
genCode(plus.getRight());
System.out.println("add");
}
public void visit(Sub sub) {
genCode(sub.getLeft());
genCode(sub.getRight());
System.out.println("sub");
}
public void genCode(Expr expr) {
expr.accept(this);
}
}
#XPIndia2016	
Visitor pattern: structure
Source: “Design Patterns: Elements of Reusable Object-Oriented Software”, Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Addison-Wesley,1994
#XPIndia2016	
Visitor pattern: call sequence
Source: “Design Patterns: Elements of Reusable Object-Oriented Software”, Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Addison-Wesley,1994
#XPIndia2016	
Visitor pattern: Discussion
Represent an operation to be performed on the elements of an object structure.
Visitor lets you define a new operation without changing the classes of the
elements on which it operations
❖ Create two class
hierarchies:
❖ One for the elements
being operated on
❖ One for the visitors that
define operations on the
elements
#XPIndia2016	
Refactoring with Lambdas
File[] files = new File(".").listFiles(
new FileFilter() {
public boolean accept(File f) { return f.isFile(); }
}
);
for(File file: files) {
System.out.println(file);
}
Arrays.stream(new File(“.”)
.listFiles(file -> file.isFile()))
.forEach(System.out::println);
#XPIndia2016	
Refactoring APIs
public	class	Throwable	{	
//	following	method	is	available	from	Java	1.0	version.		
//	Prints	the	stack	trace	as	a	string	to	standard	output		
//	for	processing	a	stack	trace,		
//	we	need	to	write	regular	expressions		
public	void	printStackTrace();						
//	other	methods	omiEed		
}
#XPIndia2016	
Refactoring: Practical concerns
“Fear of breaking
working code”
Is management buy-in necessary for refactoring?
How to refactor code in legacy projects (no automated
tests, difficulty in understanding, lack of motivation, …)?
Where do I have time
for refactoring?
#XPIndia2016	
Tool driven approach for design quality
#XPIndia2016	
Comprehension tools
STAN
http://stan4j.com
#XPIndia2016	
Comprehension tools
Code City
http://www.inf.usi.ch/phd/wettel/codecity.html
#XPIndia2016	
Comprehension tools
Imagix 4D
http://www.imagix.com
#XPIndia2016	
Smell detection tools
Infusion
www.intooitus.com/products/infusion
#XPIndia2016	
Smell detection tools
Designite
www.designite-tools.com
#XPIndia2016	
Clone analysers
PMD Copy Paste Detector (CPD)
http://pmd.sourceforge.net/pmd-4.3.0/cpd.html
#XPIndia2016	
Metric tools
Understand
https://scitools.com
#XPIndia2016	
Technical debt quantification/visualization tools
Sonarqube
http://www.sonarqube.org
#XPIndia2016	
Refactoring tools
ReSharper
https://www.jetbrains.com/resharper/features/
#XPIndia2016	
Source: Neal Ford, Emergent Design: https://dl.dropbox.com/u/6806810/Emergent_Design%28Neal_Ford%29.pdf
#XPIndia2016	
Tangles in
JDK
#XPIndia2016
#XPIndia2016
#XPIndia2016	
Refactoring for Software Architecture Smells
Ganesh Samarthyam, Tushar Sharma and Girish Suryanarayana
http://www.softrefactoring.com/
#XPIndia2016	
ganesh@codeops.tech @GSamarthyam
www.codeops.tech slideshare.net/sgganesh
+91 98801 64463 bit.ly/ganeshsg

More Related Content

Viewers also liked

C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...
C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...
C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...
3GDR
 
Bram Platel
Bram PlatelBram Platel
Bram Platel
NFBI
 

Viewers also liked (20)

Ehit Ltd Health Gateway
Ehit Ltd Health GatewayEhit Ltd Health Gateway
Ehit Ltd Health Gateway
 
C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...
C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...
C-Change (Communications for Change) Use of Mobile Phones for FP Programs in ...
 
22 FOUR Mobile Payment Solution Pakistan
22 FOUR Mobile Payment Solution Pakistan22 FOUR Mobile Payment Solution Pakistan
22 FOUR Mobile Payment Solution Pakistan
 
Smartphones: a Clinical Trial Platform
Smartphones: a Clinical Trial PlatformSmartphones: a Clinical Trial Platform
Smartphones: a Clinical Trial Platform
 
mHealth: taking Pharma beyond the Doctors Office
mHealth: taking Pharma beyond the Doctors OfficemHealth: taking Pharma beyond the Doctors Office
mHealth: taking Pharma beyond the Doctors Office
 
Presentación1
Presentación1Presentación1
Presentación1
 
Evento
EventoEvento
Evento
 
Social policy
Social policySocial policy
Social policy
 
What's new septembre 2016
What's new septembre 2016What's new septembre 2016
What's new septembre 2016
 
UM BIBLIOTECÁRIO E SUA PAIXÃO: leituras da Biblioteconomia brasileira a parti...
UM BIBLIOTECÁRIO E SUA PAIXÃO: leituras da Biblioteconomia brasileira a parti...UM BIBLIOTECÁRIO E SUA PAIXÃO: leituras da Biblioteconomia brasileira a parti...
UM BIBLIOTECÁRIO E SUA PAIXÃO: leituras da Biblioteconomia brasileira a parti...
 
Cities as warehouses
Cities as warehousesCities as warehouses
Cities as warehouses
 
Οι γυναίκες της επανάστασης: Λ.Μπουμπουλίνα,Μ.Μαυρογένους
Οι γυναίκες της επανάστασης: Λ.Μπουμπουλίνα,Μ.ΜαυρογένουςΟι γυναίκες της επανάστασης: Λ.Μπουμπουλίνα,Μ.Μαυρογένους
Οι γυναίκες της επανάστασης: Λ.Μπουμπουλίνα,Μ.Μαυρογένους
 
Data protection ownership and portability a code of conduct for mHealth apps
Data protection ownership and portability a code of conduct for mHealth apps Data protection ownership and portability a code of conduct for mHealth apps
Data protection ownership and portability a code of conduct for mHealth apps
 
Brillo operating system(os)
Brillo operating system(os)Brillo operating system(os)
Brillo operating system(os)
 
IoT at Google Scale
IoT at Google ScaleIoT at Google Scale
IoT at Google Scale
 
Bram Platel
Bram PlatelBram Platel
Bram Platel
 
UK mHealth app assessment
UK mHealth app assessmentUK mHealth app assessment
UK mHealth app assessment
 
Project Ara
Project AraProject Ara
Project Ara
 
Project Ara
Project AraProject Ara
Project Ara
 
Memory Management in Android
Memory Management in AndroidMemory Management in Android
Memory Management in Android
 

Similar to Refactoring for Software Design smells - XP Conference - August 20th 2016

Similar to Refactoring for Software Design smells - XP Conference - August 20th 2016 (20)

Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkRefactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 
Refactoring
RefactoringRefactoring
Refactoring
 
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
 
Systematic Generation Data and Types in C++
Systematic Generation Data and Types in C++Systematic Generation Data and Types in C++
Systematic Generation Data and Types in C++
 
Tech talks#6: Code Refactoring
Tech talks#6: Code RefactoringTech talks#6: Code Refactoring
Tech talks#6: Code Refactoring
 
Architecture refactoring - accelerating business success
Architecture refactoring - accelerating business successArchitecture refactoring - accelerating business success
Architecture refactoring - accelerating business success
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
Apex code Benchmarking
Apex code BenchmarkingApex code Benchmarking
Apex code Benchmarking
 
How much performance can you get out of Javascript? - Massimiliano Mantione -...
How much performance can you get out of Javascript? - Massimiliano Mantione -...How much performance can you get out of Javascript? - Massimiliano Mantione -...
How much performance can you get out of Javascript? - Massimiliano Mantione -...
 
Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
Hello world! Intro to C++
Hello world! Intro to C++Hello world! Intro to C++
Hello world! Intro to C++
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Rits Brown Bag - TypeScript
Rits Brown Bag - TypeScriptRits Brown Bag - TypeScript
Rits Brown Bag - TypeScript
 
How to Apply Design Principles in Practice
How to Apply Design Principles in PracticeHow to Apply Design Principles in Practice
How to Apply Design Principles in Practice
 
From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017
 
Consequences of using the Copy-Paste method in C++ programming and how to dea...
Consequences of using the Copy-Paste method in C++ programming and how to dea...Consequences of using the Copy-Paste method in C++ programming and how to dea...
Consequences of using the Copy-Paste method in C++ programming and how to dea...
 
CSE215_Module_02_Elementary_Programming.ppt
CSE215_Module_02_Elementary_Programming.pptCSE215_Module_02_Elementary_Programming.ppt
CSE215_Module_02_Elementary_Programming.ppt
 

More from CodeOps Technologies LLP

More from CodeOps Technologies LLP (20)

AWS Serverless Event-driven Architecture - in lastminute.com meetup
AWS Serverless Event-driven Architecture - in lastminute.com meetupAWS Serverless Event-driven Architecture - in lastminute.com meetup
AWS Serverless Event-driven Architecture - in lastminute.com meetup
 
Understanding azure batch service
Understanding azure batch serviceUnderstanding azure batch service
Understanding azure batch service
 
DEVOPS AND MACHINE LEARNING
DEVOPS AND MACHINE LEARNINGDEVOPS AND MACHINE LEARNING
DEVOPS AND MACHINE LEARNING
 
SERVERLESS MIDDLEWARE IN AZURE FUNCTIONS
SERVERLESS MIDDLEWARE IN AZURE FUNCTIONSSERVERLESS MIDDLEWARE IN AZURE FUNCTIONS
SERVERLESS MIDDLEWARE IN AZURE FUNCTIONS
 
BUILDING SERVERLESS SOLUTIONS WITH AZURE FUNCTIONS
BUILDING SERVERLESS SOLUTIONS WITH AZURE FUNCTIONSBUILDING SERVERLESS SOLUTIONS WITH AZURE FUNCTIONS
BUILDING SERVERLESS SOLUTIONS WITH AZURE FUNCTIONS
 
APPLYING DEVOPS STRATEGIES ON SCALE USING AZURE DEVOPS SERVICES
APPLYING DEVOPS STRATEGIES ON SCALE USING AZURE DEVOPS SERVICESAPPLYING DEVOPS STRATEGIES ON SCALE USING AZURE DEVOPS SERVICES
APPLYING DEVOPS STRATEGIES ON SCALE USING AZURE DEVOPS SERVICES
 
BUILD, TEST & DEPLOY .NET CORE APPS IN AZURE DEVOPS
BUILD, TEST & DEPLOY .NET CORE APPS IN AZURE DEVOPSBUILD, TEST & DEPLOY .NET CORE APPS IN AZURE DEVOPS
BUILD, TEST & DEPLOY .NET CORE APPS IN AZURE DEVOPS
 
CREATE RELIABLE AND LOW-CODE APPLICATION IN SERVERLESS MANNER
CREATE RELIABLE AND LOW-CODE APPLICATION IN SERVERLESS MANNERCREATE RELIABLE AND LOW-CODE APPLICATION IN SERVERLESS MANNER
CREATE RELIABLE AND LOW-CODE APPLICATION IN SERVERLESS MANNER
 
CREATING REAL TIME DASHBOARD WITH BLAZOR, AZURE FUNCTION COSMOS DB AN AZURE S...
CREATING REAL TIME DASHBOARD WITH BLAZOR, AZURE FUNCTION COSMOS DB AN AZURE S...CREATING REAL TIME DASHBOARD WITH BLAZOR, AZURE FUNCTION COSMOS DB AN AZURE S...
CREATING REAL TIME DASHBOARD WITH BLAZOR, AZURE FUNCTION COSMOS DB AN AZURE S...
 
WRITE SCALABLE COMMUNICATION APPLICATION WITH POWER OF SERVERLESS
WRITE SCALABLE COMMUNICATION APPLICATION WITH POWER OF SERVERLESSWRITE SCALABLE COMMUNICATION APPLICATION WITH POWER OF SERVERLESS
WRITE SCALABLE COMMUNICATION APPLICATION WITH POWER OF SERVERLESS
 
Training And Serving ML Model Using Kubeflow by Jayesh Sharma
Training And Serving ML Model Using Kubeflow by Jayesh SharmaTraining And Serving ML Model Using Kubeflow by Jayesh Sharma
Training And Serving ML Model Using Kubeflow by Jayesh Sharma
 
Deploy Microservices To Kubernetes Without Secrets by Reenu Saluja
Deploy Microservices To Kubernetes Without Secrets by Reenu SalujaDeploy Microservices To Kubernetes Without Secrets by Reenu Saluja
Deploy Microservices To Kubernetes Without Secrets by Reenu Saluja
 
Leverage Azure Tech stack for any Kubernetes cluster via Azure Arc by Saiyam ...
Leverage Azure Tech stack for any Kubernetes cluster via Azure Arc by Saiyam ...Leverage Azure Tech stack for any Kubernetes cluster via Azure Arc by Saiyam ...
Leverage Azure Tech stack for any Kubernetes cluster via Azure Arc by Saiyam ...
 
YAML Tips For Kubernetes by Neependra Khare
YAML Tips For Kubernetes by Neependra KhareYAML Tips For Kubernetes by Neependra Khare
YAML Tips For Kubernetes by Neependra Khare
 
Must Know Azure Kubernetes Best Practices And Features For Better Resiliency ...
Must Know Azure Kubernetes Best Practices And Features For Better Resiliency ...Must Know Azure Kubernetes Best Practices And Features For Better Resiliency ...
Must Know Azure Kubernetes Best Practices And Features For Better Resiliency ...
 
Monitor Azure Kubernetes Cluster With Prometheus by Mamta Jha
Monitor Azure Kubernetes Cluster With Prometheus by Mamta JhaMonitor Azure Kubernetes Cluster With Prometheus by Mamta Jha
Monitor Azure Kubernetes Cluster With Prometheus by Mamta Jha
 
Jet brains space intro presentation
Jet brains space intro presentationJet brains space intro presentation
Jet brains space intro presentation
 
Functional Programming in Java 8 - Lambdas and Streams
Functional Programming in Java 8 - Lambdas and StreamsFunctional Programming in Java 8 - Lambdas and Streams
Functional Programming in Java 8 - Lambdas and Streams
 
Distributed Tracing: New DevOps Foundation
Distributed Tracing: New DevOps FoundationDistributed Tracing: New DevOps Foundation
Distributed Tracing: New DevOps Foundation
 
"Distributed Tracing: New DevOps Foundation" by Jayesh Ahire
"Distributed Tracing: New DevOps Foundation" by Jayesh Ahire  "Distributed Tracing: New DevOps Foundation" by Jayesh Ahire
"Distributed Tracing: New DevOps Foundation" by Jayesh Ahire
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Recently uploaded (20)

Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

Refactoring for Software Design smells - XP Conference - August 20th 2016