SlideShare a Scribd company logo
Ruby Smells
 
Pivorak Edition
code example caveats
instance state denoted via @instance_variables
assume those instance variables are
set in constructors | dependency injected
(constructors skipped for simplicity)
(yes, I would use getters in actual code)
(yes, some examples are very badly refactored)
c l a s s M e e t u p
d e f w e a t h e r _ a s s e s s m e n t
i f @ w e a t h e r _ s o u r c e . w e a t h e r _ a t ( @ c i t y ) . s k i e s = = : c l e a r
' T o o s u n n y '
e l s i f @ w e a t h e r _ s o u r c e . w e a t h e r _ a t ( @ c i t y ) . t e m p > 2 0
' T o o h o t '
e l s e
' P e r f e c t f o r c o d i n g '
e n d
e n d
e n d
duplicate method call
the same call made more than once
refactoring: factor out a single call
caveat: readability
c l a s s M e e t u p
d e f w e a t h e r _ a s s e s s m e n t
w e a t h e r = @ w e a t h e r _ s o u r c e . w e a t h e r _ a t ( @ c i t y )
i f w e a t h e r . s k i e s = = : c l e a r
' T o o s u n n y '
e l s i f w e a t h e r . t e m p > 2 0
' T o o h o t '
e l s e
' P e r f e c t f o r c o d i n g '
e n d
e n d
e n d
m o d u l e A r t D e c o m p
c l a s s S e p s
d e f s e p a r a t e s ? ( r o w , c o l )
m a t r i x [ r o w ] a n d m a t r i x [ r o w ] [ c o l ] . n o n z e r o ?
e n d
e n d
e n d
m o d u l e A r t D e c o m p
c l a s s A r c h S i z e r
d e f m i n _ q u a r t e r s
c a s e
w h e n i . z e r o ? , o . z e r o ? t h e n 0
w h e n i < = 5 t h e n ( o / 2 . 0 ) . c e i l
e l s e [ ( i / 5 . 0 ) . c e i l , ( o / 2 . 0 ) . c e i l ] . m a x
e n d
e n d
e n d
e n d
c l a s s M e e t u p
d e f d i r e c t i o n s ( s o u r c e _ l a t , s o u r c e _ l o n )
@ n a v _ s o u r c e . d i r e c t i o n s ( f r o m : [ s o u r c e _ l a t , s o u r c e _ l o n ] , t o : [ @ l a t , @ l o n ] )
e n d
d e f d i s t a n c e ( s o u r c e _ l a t , s o u r c e _ l o n )
@ n a v _ s o u r c e . d i s t a n c e ( f r o m : [ s o u r c e _ l a t , s o u r c e _ l o n ] , t o : [ @ l a t , @ l o n ] )
e n d
d e f n e e d s _ p a s s p o r t ? ( s o u r c e _ l a t , s o u r c e _ l o n )
@ n a v _ s o u r c e . b o r d e r s ? ( f r o m : [ s o u r c e _ l a t , s o u r c e _ l o n ] , t o : [ @ l a t , @ l o n ] )
e n d
e n d
data clump
the same set of variables passed in many contexts
refactoring: create a composite (value?) object
caveat: make sure the clumped variables are related
L o c a t i o n = S t r u c t . n e w ( : l a t , : l o n )
c l a s s M e e t u p
d e f d i r e c t i o n s ( s o u r c e _ l o c a t i o n )
@ n a v _ s o u r c e . d i r e c t i o n s ( f r o m : s o u r c e _ l o c a t i o n , t o : @ l o c a t i o n )
e n d
d e f d i s t a n c e ( s o u r c e _ l o c a t i o n )
@ n a v _ s o u r c e . d i s t a n c e ( f r o m : s o u r c e _ l o c a t i o n , t o : @ l o c a t i o n )
e n d
d e f n e e d s _ p a s s p o r t ? ( s o u r c e _ l o c a t i o n )
@ n a v _ s o u r c e . b o r d e r s ? ( f r o m : s o u r c e _ l o c a t i o n , t o : @ l o c a t i o n )
e n d
e n d
c l a s s M e e t u p
d e f d i r e c t i o n s ( s o u r c e _ l o c a t i o n )
i f @ l o c a t i o n
@ n a v _ s o u r c e . d i r e c t i o n s ( f r o m : s o u r c e _ l o c a t i o n , t o : @ l o c a t i o n )
e n d
e n d
d e f d i s t a n c e ( s o u r c e _ l o c a t i o n )
i f @ l o c a t i o n
@ n a v _ s o u r c e . d i s t a n c e ( f r o m : s o u r c e _ l o c a t i o n , t o : @ l o c a t i o n )
e n d
e n d
d e f n e e d s _ p a s s p o r t ? ( s o u r c e _ l o c a t i o n )
i f @ l o c a t i o n
@ n a v _ s o u r c e . b o r d e r s ? ( f r o m : s o u r c e _ l o c a t i o n , t o : @ l o c a t i o n )
e n d
e n d
e n d
repeated conditional
the same condition is checked in many places
refactoring: factor out LocatedMeetup
refactoring: make NavSource work with NullLocation
caveat: sometimes readability trumps purer design
c l a s s M e e t u p
d e f i n i t i a l i z e ( n a m e = n i l )
@ n a m e = n a m e
e n d
d e f a c r o n y m ?
! ! @ n a m e . m a t c h ( /  A (  p { U p p e r } ) +  z / ) u n l e s s @ n a m e . n i l ?
e n d
e n d
nil check
usually means there’s a missing type in the system
refactoring: find the missing type (a null object?)
caveat: make sure you don’t sacrifice simplicity
c l a s s U n n a m e d M e e t u p
d e f a c r o n y m ?
f a l s e # o r i s i t ? : )
e n d
e n d
c l a s s M e e t u p
d e f s e l f . n e w ( n a m e = n i l )
n a m e ? s u p e r : U n n a m e d M e e t u p . n e w
e n d
d e f i n i t i a l i z e ( n a m e )
@ n a m e = n a m e
e n d
d e f a c r o n y m ?
! ! @ n a m e . m a t c h ( /  A (  p { U p p e r } ) +  z / )
e n d
e n d
c l a s s M e e t u p
d e f r u b y ? ( s t r i c t = t r u e )
i f s t r i c t
@ l a n g u a g e s = [ ' R u b y ' ]
e l s e
@ l a n g u a g e s . i n c l u d e ? ( ' R u b y ' )
e n d
e n d
e n d
boolean parameter
the caller directly controls calee’s code execution
refactoring: split into dedicated methods (classes?)
caveat: consider caller usability
c l a s s M e e t u p
d e f s u r e l y _ r u b y ?
@ l a n g u a g e s = [ ' R u b y ' ]
e n d
d e f p o s s i b l y _ r u b y ?
@ l a n g u a g e s . i n c l u d e ? ( ' R u b y ' )
e n d
e n d
c l a s s M e e t u p
d e f i n t e r e s t i n g ? ( a t t e n d e e )
c a s e a t t e n d e e
w h e n ' p y t h o n i s t a ' t h e n d y n a m i c ?
w h e n ' r u b y i s t ' t h e n l a i d _ b a c k ?
w h e n ' r u s t a c e a n ' t h e n s y s t e m ?
e n d
e n d
e n d
control parameter
the caller knows which path the code will take
refactoring: split into dedicated methods
caveat: consider caller usability (more likely)
c l a s s M e e t u p
d e f i n t e r e s t i n g _ t o _ p y t h o n i s t a s ?
d y n a m i c ?
e n d
d e f i n t e r e s t i n g _ t o _ r u b y i s t s ?
l a i d _ b a c k ?
e n d
d e f i n t e r e s t i n g _ t o _ r u s t a c e a n s ?
s y s t e m ?
e n d
e n d
c l a s s M e e t u p
d e f s u c c e s s f u l ? ( a t t e n d e e s )
e x c i t e d , i n d i f f e r e n t = a t t e n d e e s . p a r t i t i o n ( & : e x c i t e d ? )
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
e n d
utility function
a method that does not depend on instance state
can be moved anywhere in the system
refactoring: move it to where it belongs
caveat: sometimes it’s just a (private?) helper
c l a s s M e e t u p
d e f s u c c e s s f u l ?
e x c i t e d , i n d i f f e r e n t = @ a t t e n d e e s . p a r t i t i o n ( & : e x c i t e d ? )
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
e n d
c l a s s M e e t u p
d e f s u c c e s s f u l ?
@ a t t e n d e e s . e x c i t e d ?
e n d
e n d
c l a s s A t t e n d e e s < A r r a y
d e f e x c i t e d ?
e x c i t e d , i n d i f f e r e n t = p a r t i t i o n ( & : e x c i t e d ? )
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
e n d
r e q u i r e ' f o r w a r d a b l e '
c l a s s A t t e n d e e s
e x t e n d F o r w a r d a b l e
d e f i n i t i a l i z e ( c o l l e c t i o n )
@ c o l l e c t i o n = c o l l e c t i o n
e n d
d e f e x c i t e d ?
e x c i t e d , i n d i f f e r e n t = p a r t i t i o n ( & : e x c i t e d ? )
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
d e l e g a t e p a r t i t i o n : : @ c o l l e c t i o n
e n d
c l a s s M e e t u p
d e f s u c c e s s f u l ? ( a t t e n d e e s )
e x c i t e d , i n d i f f e r e n t = a t t e n d e e s . p a r t i t i o n d o | a t t e n d e e |
a t t e n d e e . e x c i t e d ? | | @ l a n g u a g e = = ' R u b y ' & & a t t e n d e e . r u b y i s t ?
e n d
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
e n d
feature envy
partially refers to instance, but mostly to arguments
refactoring: move code to one of the arguments
caveat: make sure the knowledge is local to the
problem
c l a s s M e e t u p
d e f s u c c e s s f u l ?
@ a t t e n d e e s . e x c i t e d ? ( l a n g u a g e : @ l a n g u a g e )
e n d
e n d
c l a s s A t t e n d e e s
d e f e x c i t e d ? ( l a n g u a g e : n i l )
e x c i t e d , i n d i f f e r e n t = p a r t i t i o n { | a t t e n d e e | a t t e n d e e . e x c i t e d ? ( l a n g u a g e : l a n g u a g e ) }
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
e n d
c l a s s A t t e n d e e
d e f e x c i t e d ? ( l a n g u a g e : n i l )
@ e x c i t e d | | @ r u b y i s t & & l a n g u a g e = = ' R u b y '
e n d
e n d
c l a s s M e e t u p
d e f i n i t i a l i z e ( c i t y : , n a m e : )
@ c i t y = c i t y
@ n a m e = n a m e
e n d
a t t r _ a c c e s s o r : c i t y , : n a m e
e n d
attribute
setters: bad
getters: it depends
refactoring: tell, don’t ask
refactoring: immutability via #update (or #with)
caveat: an overkill in simplest (riiight…) projects
c l a s s M e e t u p
d e f i n i t i a l i z e ( c i t y : , n a m e : )
@ c i t y = c i t y
@ n a m e = n a m e
e n d
a t t r _ r e a d e r : c i t y , : n a m e
d e f u p d a t e ( c i t y : @ c i t y , n a m e : @ n a m e )
s e l f . c l a s s . n e w ( c i t y : c i t y , n a m e : n a m e )
e n d
e n d
real world examples
(433 lines)
(759 lines)
(1595 lines)
Matrix::EigenvalueDecomposition#hessenberg_to_real_schur
TkItemConfigMethod#__itemconfiginfo_core
RDoc::Markdown#_Code
so… how can we find code
smells in our Ruby apps?
by hand
using Reek
very opinionated
static code analyser
for finding smells
RuboCop for architecture
Reek usage
$ g e m i n s t a l l r e e k
$ r e e k - - n o - w i k i - l i n k s m e e t u p . r b
m e e t u p . r b - - 1 0 w a r n i n g s :
[ 4 0 , 4 2 ] : D u p l i c a t e M e t h o d C a l l : M e e t u p # w e a t h e r _ a s s e s s m e n t c a l l s @ w e a t h e r _ s o u r c e . w e a t h e r _ a t ( @ c i t y
[ 2 1 , 2 7 , 3 3 ] : D a t a C l u m p : M e e t u p t a k e s p a r a m e t e r s [ s o u r c e _ l a t , s o u r c e _ l o n ] t o 3 m e t h o d s
[ 2 2 , 2 8 , 3 4 ] : R e p e a t e d C o n d i t i o n a l : M e e t u p t e s t s @ l a t & & @ l o n a t l e a s t 3 t i m e s
[ 5 7 ] : N i l C h e c k : M e e t u p # a c r o n y m ? p e r f o r m s a n i l - c h e c k
[ 6 ] : C o n t r o l P a r a m e t e r : M e e t u p # i n t e r e s t i n g ? i s c o n t r o l l e d b y a r g u m e n t a t t e n d e e
[ 1 3 ] : B o o l e a n P a r a m e t e r : M e e t u p # r u b y ? h a s b o o l e a n p a r a m e t e r ' s t r i c t '
[ 1 4 ] : C o n t r o l P a r a m e t e r : M e e t u p # r u b y ? i s c o n t r o l l e d b y a r g u m e n t s t r i c t
[ 5 1 , 5 1 ] : F e a t u r e E n v y : M e e t u p # s u c c e s s f u l ? r e f e r s t o a t t e n d e e m o r e t h a n s e l f ( m a y b e m o v e i t t o a
[ 2 ] : A t t r i b u t e : M e e t u p # c i t y i s a w r i t a b l e a t t r i b u t e
[ 1 ] : I r r e s p o n s i b l e M o d u l e : M e e t u p h a s n o d e s c r i p t i v e c o m m e n t
configuration: .reek
D a t a C l u m p :
m a x _ c o p i e s : 2
m i n _ c l u m p _ s i z e : 2
L o n g P a r a m e t e r L i s t :
m a x _ p a r a m s : 3
o v e r r i d e s :
i n i t i a l i z e :
m a x _ p a r a m s : 5
T o o M a n y I n s t a n c e V a r i a b l e s :
m a x _ i n s t a n c e _ v a r i a b l e s : 4
T o o M a n y S t a t e m e n t s :
e x c l u d e :
- i n i t i a l i z e
m a x _ s t a t e m e n t s : 5
excludes: from Class#method to /meth/
configuration: code comments
# : r e e k : U t i l i t y F u n c t i o n
d e f s u c c e s s f u l ? ( a t t e n d e e s )
e x c i t e d , i n d i f f e r e n t = a t t e n d e e s . p a r t i t i o n ( & : e x c i t e d ? )
e x c i t e d . c o u n t > i n d i f f e r e n t . c o u n t
e n d
# : r e e k : D u p l i c a t e M e t h o d C a l l : { m a x _ c a l l s : 2 }
d e f w e a t h e r _ a s s e s s m e n t
i f @ w e a t h e r _ s o u r c e . w e a t h e r _ a t ( @ c i t y ) . s k i e s = = : c l e a r
' T o o s u n n y '
e l s i f @ w e a t h e r _ s o u r c e . w e a t h e r _ a t ( @ c i t y ) . t e m p > 2 0
' T o o h o t '
e l s e
' P e r f e c t f o r c o d i n g '
e n d
e n d
per­directory configuration
caveat emptor
making Reek happy with my code
taught me the most about OOP
in the last year
but
always be critical of such tools
Piotr Solnica, Clean Code Cowboy
Piotr Solnica, Clean Code Cowboy
world domination plans
try out 
maybe add it to  ?
don’t be overwhelmed by the potential smells
reek--todo might be a good start!
please let us know what doesn’t work
have fun with
refactoring | enlightened whitelisting
Reek
Code Climate
thanks!
Piotr Szotkowski
@chastell
talks.chastell.net

More Related Content

What's hot

Backup of diccionary copy
Backup of diccionary copyBackup of diccionary copy
Backup of diccionary copy
Enrique Marquez
 
ground water contamination
ground water contaminationground water contamination
ground water contamination
AnushkeMadurawala
 
Ceh v8 labs module 18 buffer overflow
Ceh v8 labs module 18 buffer overflowCeh v8 labs module 18 buffer overflow
Ceh v8 labs module 18 buffer overflow
Mehrdad Jingoism
 
PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!
Blanca Mancilla
 
Modeling avengers – open source technology mix for saving the world econ fr
Modeling avengers – open source technology mix for saving the world econ frModeling avengers – open source technology mix for saving the world econ fr
Modeling avengers – open source technology mix for saving the world econ fr
Cédric Brun
 
Hoja de vida jogc
Hoja de vida jogcHoja de vida jogc
Hoja de vida jogc
jogc62
 
Japan Lease, English
Japan Lease, EnglishJapan Lease, English
Japan Lease, English
Anon User
 
Passivhaus on a shoestring
Passivhaus on a shoestringPassivhaus on a shoestring
Passivhaus on a shoestring
Paul Testa
 
Html + wordpress ppt.
Html + wordpress ppt.Html + wordpress ppt.
Html + wordpress ppt.
Nazmul Hossain Rana
 
Backup of diccionary
Backup of diccionaryBackup of diccionary
Backup of diccionary
Enrique Marquez
 
Social Network Analysis With R
Social Network Analysis With RSocial Network Analysis With R
Social Network Analysis With R
David Chiu
 
Towards Exemplary Moodle Courses at YSJU
Towards Exemplary Moodle Courses at YSJUTowards Exemplary Moodle Courses at YSJU
Towards Exemplary Moodle Courses at YSJU
Phil Vincent
 
Conférence - Du bon usage d'une charte graphique
Conférence - Du bon usage d'une charte graphiqueConférence - Du bon usage d'une charte graphique
Conférence - Du bon usage d'une charte graphique
David Endico
 
Continuous delivery with Gradle
Continuous delivery with GradleContinuous delivery with Gradle
Continuous delivery with Gradle
Bob Paulin
 
Testing Fuse Fabric with Pax Exam
Testing Fuse Fabric with Pax ExamTesting Fuse Fabric with Pax Exam
Testing Fuse Fabric with Pax Exam
Henryk Konsek
 
Airfeed II - The future of pigs feeding
Airfeed II  - The future of pigs feedingAirfeed II  - The future of pigs feeding
Airfeed II - The future of pigs feeding
Marcio Schmidt
 
Simple vs sap b1 vs dynamics
Simple vs sap b1 vs dynamicsSimple vs sap b1 vs dynamics
Simple vs sap b1 vs dynamics
Tanay Sharma
 
Profiling Web Archives IIPC GA 2015
Profiling Web Archives IIPC GA 2015Profiling Web Archives IIPC GA 2015
Profiling Web Archives IIPC GA 2015
Sawood Alam
 
TicsDzm
TicsDzmTicsDzm
TicsDzm
KerstynZ
 
No Flex Zone: Empathy Driven Development
No Flex Zone: Empathy Driven DevelopmentNo Flex Zone: Empathy Driven Development
No Flex Zone: Empathy Driven Development
Duretti H.
 

What's hot (20)

Backup of diccionary copy
Backup of diccionary copyBackup of diccionary copy
Backup of diccionary copy
 
ground water contamination
ground water contaminationground water contamination
ground water contamination
 
Ceh v8 labs module 18 buffer overflow
Ceh v8 labs module 18 buffer overflowCeh v8 labs module 18 buffer overflow
Ceh v8 labs module 18 buffer overflow
 
PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!
 
Modeling avengers – open source technology mix for saving the world econ fr
Modeling avengers – open source technology mix for saving the world econ frModeling avengers – open source technology mix for saving the world econ fr
Modeling avengers – open source technology mix for saving the world econ fr
 
Hoja de vida jogc
Hoja de vida jogcHoja de vida jogc
Hoja de vida jogc
 
Japan Lease, English
Japan Lease, EnglishJapan Lease, English
Japan Lease, English
 
Passivhaus on a shoestring
Passivhaus on a shoestringPassivhaus on a shoestring
Passivhaus on a shoestring
 
Html + wordpress ppt.
Html + wordpress ppt.Html + wordpress ppt.
Html + wordpress ppt.
 
Backup of diccionary
Backup of diccionaryBackup of diccionary
Backup of diccionary
 
Social Network Analysis With R
Social Network Analysis With RSocial Network Analysis With R
Social Network Analysis With R
 
Towards Exemplary Moodle Courses at YSJU
Towards Exemplary Moodle Courses at YSJUTowards Exemplary Moodle Courses at YSJU
Towards Exemplary Moodle Courses at YSJU
 
Conférence - Du bon usage d'une charte graphique
Conférence - Du bon usage d'une charte graphiqueConférence - Du bon usage d'une charte graphique
Conférence - Du bon usage d'une charte graphique
 
Continuous delivery with Gradle
Continuous delivery with GradleContinuous delivery with Gradle
Continuous delivery with Gradle
 
Testing Fuse Fabric with Pax Exam
Testing Fuse Fabric with Pax ExamTesting Fuse Fabric with Pax Exam
Testing Fuse Fabric with Pax Exam
 
Airfeed II - The future of pigs feeding
Airfeed II  - The future of pigs feedingAirfeed II  - The future of pigs feeding
Airfeed II - The future of pigs feeding
 
Simple vs sap b1 vs dynamics
Simple vs sap b1 vs dynamicsSimple vs sap b1 vs dynamics
Simple vs sap b1 vs dynamics
 
Profiling Web Archives IIPC GA 2015
Profiling Web Archives IIPC GA 2015Profiling Web Archives IIPC GA 2015
Profiling Web Archives IIPC GA 2015
 
TicsDzm
TicsDzmTicsDzm
TicsDzm
 
No Flex Zone: Empathy Driven Development
No Flex Zone: Empathy Driven DevelopmentNo Flex Zone: Empathy Driven Development
No Flex Zone: Empathy Driven Development
 

Viewers also liked

Building a team by Doina Leca
Building a team by Doina LecaBuilding a team by Doina Leca
Building a team by Doina Leca
Pivorak MeetUp
 
Piotr Szotkowski about "Bits of ruby"
Piotr Szotkowski about "Bits of ruby"Piotr Szotkowski about "Bits of ruby"
Piotr Szotkowski about "Bits of ruby"
Pivorak MeetUp
 
Building Distributed Systems
Building Distributed SystemsBuilding Distributed Systems
Building Distributed Systems
Pivorak MeetUp
 
Lets build a game (in 24 min) by Ivan Zarea
Lets build a game (in 24 min) by Ivan ZareaLets build a game (in 24 min) by Ivan Zarea
Lets build a game (in 24 min) by Ivan Zarea
Pivorak MeetUp
 
Code smells and remedies
Code smells and remediesCode smells and remedies
Code smells and remedies
Md.Mojibul Hoque
 
Code Smells
Code SmellsCode Smells
Fighting Ruby code smell
Fighting Ruby code smellFighting Ruby code smell
Fighting Ruby code smell
olegshpynov
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
Mario Sangiorgio
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summary
Jan de Vries
 

Viewers also liked (10)

Building a team by Doina Leca
Building a team by Doina LecaBuilding a team by Doina Leca
Building a team by Doina Leca
 
Piotr Szotkowski about "Bits of ruby"
Piotr Szotkowski about "Bits of ruby"Piotr Szotkowski about "Bits of ruby"
Piotr Szotkowski about "Bits of ruby"
 
Building Distributed Systems
Building Distributed SystemsBuilding Distributed Systems
Building Distributed Systems
 
Lets build a game (in 24 min) by Ivan Zarea
Lets build a game (in 24 min) by Ivan ZareaLets build a game (in 24 min) by Ivan Zarea
Lets build a game (in 24 min) by Ivan Zarea
 
Code smells and remedies
Code smells and remediesCode smells and remedies
Code smells and remedies
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Fighting Ruby code smell
Fighting Ruby code smellFighting Ruby code smell
Fighting Ruby code smell
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summary
 

Similar to Piotr Szotkowski about "Ruby smells"

Spring Roo 2.0 Preview at Spring I/O 2016
Spring Roo 2.0 Preview at Spring I/O 2016 Spring Roo 2.0 Preview at Spring I/O 2016
Spring Roo 2.0 Preview at Spring I/O 2016
DISID
 
Classroom Structuring and Management.ppt
Classroom Structuring and Management.pptClassroom Structuring and Management.ppt
Classroom Structuring and Management.ppt
BelceZeusAsuncion1
 
1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx
1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx
1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx
JohnLagman3
 
Ember js meetup treviso liquid-fire
Ember js meetup treviso liquid-fireEmber js meetup treviso liquid-fire
Ember js meetup treviso liquid-fire
William Bergamo
 
Ceh v8 labs module 06 trojans and backdoors
Ceh v8 labs module 06 trojans and backdoorsCeh v8 labs module 06 trojans and backdoors
Ceh v8 labs module 06 trojans and backdoors
Mehrdad Jingoism
 
Breathe life into your designer!
Breathe life into your designer!Breathe life into your designer!
Breathe life into your designer!
Cédric Brun
 
Rigger and Signal Person
Rigger and Signal PersonRigger and Signal Person
Rigger and Signal Person
Jason Wilson
 
Winload.efi.mui
Winload.efi.muiWinload.efi.mui
Winload.efi.mui
jason reynolds
 
Antropometria y ergonometria
Antropometria y ergonometriaAntropometria y ergonometria
Antropometria y ergonometria
Valentina Lobo
 
School Violence and student
School Violence and studentSchool Violence and student
School Violence and student
acastane
 
Scanned by CamScannerG o o d w M P r e p a id r e n t.docx
Scanned by CamScannerG o o d w M  P r e p a id  r e n t.docxScanned by CamScannerG o o d w M  P r e p a id  r e n t.docx
Scanned by CamScannerG o o d w M P r e p a id r e n t.docx
kenjordan97598
 
From simple to more advanced: Lessons learned in 13 months with Tableau
From simple to more advanced: Lessons learned in 13 months with TableauFrom simple to more advanced: Lessons learned in 13 months with Tableau
From simple to more advanced: Lessons learned in 13 months with Tableau
Sergii Khomenko
 
Hacking web applications CEHv8 module 13
Hacking web applications CEHv8 module 13Hacking web applications CEHv8 module 13
Hacking web applications CEHv8 module 13
Wise Person
 
The Library As Indicator Species: Evolution, or Extinction?
The Library As Indicator Species: Evolution, or Extinction?The Library As Indicator Species: Evolution, or Extinction?
The Library As Indicator Species: Evolution, or Extinction?
char booth
 
From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...
From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...
From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...
Johannes Bjerva
 
Transcripts and PC
Transcripts and PCTranscripts and PC
Transcripts and PC
Akshay Padwal
 
Presentation For Minnor Project MCET
Presentation For Minnor Project MCETPresentation For Minnor Project MCET
Presentation For Minnor Project MCET
ShhuvradipChakrabort
 
Evaluation progresion path loss model
Evaluation progresion path loss modelEvaluation progresion path loss model
Evaluation progresion path loss model
Nguyen Minh Thu
 
114PPTMATHS.pptx
114PPTMATHS.pptx114PPTMATHS.pptx
114PPTMATHS.pptx
SuchandaBanerjee6
 
Scanned by CamScannerT a b i c 4 2 0 13 2 0 14 V ( ï l .docx
Scanned by CamScannerT  a b i c  4 2 0 13 2 0 14  V ( ï l .docxScanned by CamScannerT  a b i c  4 2 0 13 2 0 14  V ( ï l .docx
Scanned by CamScannerT a b i c 4 2 0 13 2 0 14 V ( ï l .docx
anhlodge
 

Similar to Piotr Szotkowski about "Ruby smells" (20)

Spring Roo 2.0 Preview at Spring I/O 2016
Spring Roo 2.0 Preview at Spring I/O 2016 Spring Roo 2.0 Preview at Spring I/O 2016
Spring Roo 2.0 Preview at Spring I/O 2016
 
Classroom Structuring and Management.ppt
Classroom Structuring and Management.pptClassroom Structuring and Management.ppt
Classroom Structuring and Management.ppt
 
1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx
1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx
1-SYSTEM-ANALYSIS-AND-DESIGN-INTRODUCTION.pptx
 
Ember js meetup treviso liquid-fire
Ember js meetup treviso liquid-fireEmber js meetup treviso liquid-fire
Ember js meetup treviso liquid-fire
 
Ceh v8 labs module 06 trojans and backdoors
Ceh v8 labs module 06 trojans and backdoorsCeh v8 labs module 06 trojans and backdoors
Ceh v8 labs module 06 trojans and backdoors
 
Breathe life into your designer!
Breathe life into your designer!Breathe life into your designer!
Breathe life into your designer!
 
Rigger and Signal Person
Rigger and Signal PersonRigger and Signal Person
Rigger and Signal Person
 
Winload.efi.mui
Winload.efi.muiWinload.efi.mui
Winload.efi.mui
 
Antropometria y ergonometria
Antropometria y ergonometriaAntropometria y ergonometria
Antropometria y ergonometria
 
School Violence and student
School Violence and studentSchool Violence and student
School Violence and student
 
Scanned by CamScannerG o o d w M P r e p a id r e n t.docx
Scanned by CamScannerG o o d w M  P r e p a id  r e n t.docxScanned by CamScannerG o o d w M  P r e p a id  r e n t.docx
Scanned by CamScannerG o o d w M P r e p a id r e n t.docx
 
From simple to more advanced: Lessons learned in 13 months with Tableau
From simple to more advanced: Lessons learned in 13 months with TableauFrom simple to more advanced: Lessons learned in 13 months with Tableau
From simple to more advanced: Lessons learned in 13 months with Tableau
 
Hacking web applications CEHv8 module 13
Hacking web applications CEHv8 module 13Hacking web applications CEHv8 module 13
Hacking web applications CEHv8 module 13
 
The Library As Indicator Species: Evolution, or Extinction?
The Library As Indicator Species: Evolution, or Extinction?The Library As Indicator Species: Evolution, or Extinction?
The Library As Indicator Species: Evolution, or Extinction?
 
From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...
From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...
From Phonology to Syntax: Unsupervised Linguistic Typology at Different Level...
 
Transcripts and PC
Transcripts and PCTranscripts and PC
Transcripts and PC
 
Presentation For Minnor Project MCET
Presentation For Minnor Project MCETPresentation For Minnor Project MCET
Presentation For Minnor Project MCET
 
Evaluation progresion path loss model
Evaluation progresion path loss modelEvaluation progresion path loss model
Evaluation progresion path loss model
 
114PPTMATHS.pptx
114PPTMATHS.pptx114PPTMATHS.pptx
114PPTMATHS.pptx
 
Scanned by CamScannerT a b i c 4 2 0 13 2 0 14 V ( ï l .docx
Scanned by CamScannerT  a b i c  4 2 0 13 2 0 14  V ( ï l .docxScanned by CamScannerT  a b i c  4 2 0 13 2 0 14  V ( ï l .docx
Scanned by CamScannerT a b i c 4 2 0 13 2 0 14 V ( ï l .docx
 

More from Pivorak MeetUp

Lisp(Lots of Irritating Superfluous Parentheses)
Lisp(Lots of Irritating Superfluous Parentheses)Lisp(Lots of Irritating Superfluous Parentheses)
Lisp(Lots of Irritating Superfluous Parentheses)
Pivorak MeetUp
 
Some strange stories about mocks.
Some strange stories about mocks.Some strange stories about mocks.
Some strange stories about mocks.
Pivorak MeetUp
 
Business-friendly library for inter-service communication
Business-friendly library for inter-service communicationBusiness-friendly library for inter-service communication
Business-friendly library for inter-service communication
Pivorak MeetUp
 
How i was a team leader once
How i was a team leader onceHow i was a team leader once
How i was a team leader once
Pivorak MeetUp
 
Rails MVC by Sergiy Koshovyi
Rails MVC by Sergiy KoshovyiRails MVC by Sergiy Koshovyi
Rails MVC by Sergiy Koshovyi
Pivorak MeetUp
 
Introduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy HinyukIntroduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy Hinyuk
Pivorak MeetUp
 
Ruby OOP (in Ukrainian)
Ruby OOP (in Ukrainian)Ruby OOP (in Ukrainian)
Ruby OOP (in Ukrainian)
Pivorak MeetUp
 
Testing in Ruby
Testing in RubyTesting in Ruby
Testing in Ruby
Pivorak MeetUp
 
Ruby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
Ruby Summer Course by #pivorak & OnApp - OOP Basics in RubyRuby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
Ruby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
Pivorak MeetUp
 
The Saga Pattern: 2 years later by Robert Pankowecki
The Saga Pattern: 2 years later by Robert PankoweckiThe Saga Pattern: 2 years later by Robert Pankowecki
The Saga Pattern: 2 years later by Robert Pankowecki
Pivorak MeetUp
 
Data and Bounded Contexts by Volodymyr Byno
Data and Bounded Contexts by Volodymyr BynoData and Bounded Contexts by Volodymyr Byno
Data and Bounded Contexts by Volodymyr Byno
Pivorak MeetUp
 
Successful Remote Development by Alex Rozumii
Successful Remote Development by Alex RozumiiSuccessful Remote Development by Alex Rozumii
Successful Remote Development by Alex Rozumii
Pivorak MeetUp
 
Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
Pivorak MeetUp
 
Functional Immutable CSS
Functional Immutable CSS Functional Immutable CSS
Functional Immutable CSS
Pivorak MeetUp
 
Multi language FBP with Flowex by Anton Mishchuk
Multi language FBP with Flowex by Anton Mishchuk Multi language FBP with Flowex by Anton Mishchuk
Multi language FBP with Flowex by Anton Mishchuk
Pivorak MeetUp
 
Detective story of one clever user - Lightning Talk By Sergiy Kukunin
Detective story of one clever user - Lightning Talk By Sergiy KukuninDetective story of one clever user - Lightning Talk By Sergiy Kukunin
Detective story of one clever user - Lightning Talk By Sergiy Kukunin
Pivorak MeetUp
 
CryptoParty: Introduction by Olexii Markovets
CryptoParty: Introduction by Olexii MarkovetsCryptoParty: Introduction by Olexii Markovets
CryptoParty: Introduction by Olexii Markovets
Pivorak MeetUp
 
How to make first million by 30 (or not, but tryin') - by Marek Piasecki
How to make first million by 30 (or not, but tryin') - by Marek PiaseckiHow to make first million by 30 (or not, but tryin') - by Marek Piasecki
How to make first million by 30 (or not, but tryin') - by Marek Piasecki
Pivorak MeetUp
 
GIS on Rails by Oleksandr Kychun
GIS on Rails by Oleksandr Kychun GIS on Rails by Oleksandr Kychun
GIS on Rails by Oleksandr Kychun
Pivorak MeetUp
 
Unikernels - Keep It Simple to the Bare Metal
Unikernels - Keep It Simple to the Bare MetalUnikernels - Keep It Simple to the Bare Metal
Unikernels - Keep It Simple to the Bare Metal
Pivorak MeetUp
 

More from Pivorak MeetUp (20)

Lisp(Lots of Irritating Superfluous Parentheses)
Lisp(Lots of Irritating Superfluous Parentheses)Lisp(Lots of Irritating Superfluous Parentheses)
Lisp(Lots of Irritating Superfluous Parentheses)
 
Some strange stories about mocks.
Some strange stories about mocks.Some strange stories about mocks.
Some strange stories about mocks.
 
Business-friendly library for inter-service communication
Business-friendly library for inter-service communicationBusiness-friendly library for inter-service communication
Business-friendly library for inter-service communication
 
How i was a team leader once
How i was a team leader onceHow i was a team leader once
How i was a team leader once
 
Rails MVC by Sergiy Koshovyi
Rails MVC by Sergiy KoshovyiRails MVC by Sergiy Koshovyi
Rails MVC by Sergiy Koshovyi
 
Introduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy HinyukIntroduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy Hinyuk
 
Ruby OOP (in Ukrainian)
Ruby OOP (in Ukrainian)Ruby OOP (in Ukrainian)
Ruby OOP (in Ukrainian)
 
Testing in Ruby
Testing in RubyTesting in Ruby
Testing in Ruby
 
Ruby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
Ruby Summer Course by #pivorak & OnApp - OOP Basics in RubyRuby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
Ruby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
 
The Saga Pattern: 2 years later by Robert Pankowecki
The Saga Pattern: 2 years later by Robert PankoweckiThe Saga Pattern: 2 years later by Robert Pankowecki
The Saga Pattern: 2 years later by Robert Pankowecki
 
Data and Bounded Contexts by Volodymyr Byno
Data and Bounded Contexts by Volodymyr BynoData and Bounded Contexts by Volodymyr Byno
Data and Bounded Contexts by Volodymyr Byno
 
Successful Remote Development by Alex Rozumii
Successful Remote Development by Alex RozumiiSuccessful Remote Development by Alex Rozumii
Successful Remote Development by Alex Rozumii
 
Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
 
Functional Immutable CSS
Functional Immutable CSS Functional Immutable CSS
Functional Immutable CSS
 
Multi language FBP with Flowex by Anton Mishchuk
Multi language FBP with Flowex by Anton Mishchuk Multi language FBP with Flowex by Anton Mishchuk
Multi language FBP with Flowex by Anton Mishchuk
 
Detective story of one clever user - Lightning Talk By Sergiy Kukunin
Detective story of one clever user - Lightning Talk By Sergiy KukuninDetective story of one clever user - Lightning Talk By Sergiy Kukunin
Detective story of one clever user - Lightning Talk By Sergiy Kukunin
 
CryptoParty: Introduction by Olexii Markovets
CryptoParty: Introduction by Olexii MarkovetsCryptoParty: Introduction by Olexii Markovets
CryptoParty: Introduction by Olexii Markovets
 
How to make first million by 30 (or not, but tryin') - by Marek Piasecki
How to make first million by 30 (or not, but tryin') - by Marek PiaseckiHow to make first million by 30 (or not, but tryin') - by Marek Piasecki
How to make first million by 30 (or not, but tryin') - by Marek Piasecki
 
GIS on Rails by Oleksandr Kychun
GIS on Rails by Oleksandr Kychun GIS on Rails by Oleksandr Kychun
GIS on Rails by Oleksandr Kychun
 
Unikernels - Keep It Simple to the Bare Metal
Unikernels - Keep It Simple to the Bare MetalUnikernels - Keep It Simple to the Bare Metal
Unikernels - Keep It Simple to the Bare Metal
 

Recently uploaded

一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
kgyxske
 
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical OperationsEnsuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
OnePlan Solutions
 
Optimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptxOptimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptx
WebConnect Pvt Ltd
 
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
The Third Creative Media
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
campbellclarkson
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Peter Caitens
 
ppt on the brain chip neuralink.pptx
ppt  on   the brain  chip neuralink.pptxppt  on   the brain  chip neuralink.pptx
ppt on the brain chip neuralink.pptx
Reetu63
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
Jhone kinadey
 
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
kalichargn70th171
 
Hands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion StepsHands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion Steps
servicesNitor
 
Refactoring legacy systems using events commands and bubble contexts
Refactoring legacy systems using events commands and bubble contextsRefactoring legacy systems using events commands and bubble contexts
Refactoring legacy systems using events commands and bubble contexts
Michał Kurzeja
 
Streamlining End-to-End Testing Automation
Streamlining End-to-End Testing AutomationStreamlining End-to-End Testing Automation
Streamlining End-to-End Testing Automation
Anand Bagmar
 
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdfTheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
Ortus Solutions, Corp
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
How GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdfHow GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdf
Zycus
 
Beginner's Guide to Observability@Devoxx PL 2024
Beginner's  Guide to Observability@Devoxx PL 2024Beginner's  Guide to Observability@Devoxx PL 2024
Beginner's Guide to Observability@Devoxx PL 2024
michniczscribd
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
sandeepmenon62
 
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA ComplianceSecure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
ICS
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
kalichargn70th171
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
wonyong hwang
 

Recently uploaded (20)

一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
 
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical OperationsEnsuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
 
Optimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptxOptimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptx
 
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
 
ppt on the brain chip neuralink.pptx
ppt  on   the brain  chip neuralink.pptxppt  on   the brain  chip neuralink.pptx
ppt on the brain chip neuralink.pptx
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
 
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
 
Hands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion StepsHands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion Steps
 
Refactoring legacy systems using events commands and bubble contexts
Refactoring legacy systems using events commands and bubble contextsRefactoring legacy systems using events commands and bubble contexts
Refactoring legacy systems using events commands and bubble contexts
 
Streamlining End-to-End Testing Automation
Streamlining End-to-End Testing AutomationStreamlining End-to-End Testing Automation
Streamlining End-to-End Testing Automation
 
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdfTheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
How GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdfHow GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdf
 
Beginner's Guide to Observability@Devoxx PL 2024
Beginner's  Guide to Observability@Devoxx PL 2024Beginner's  Guide to Observability@Devoxx PL 2024
Beginner's Guide to Observability@Devoxx PL 2024
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
 
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA ComplianceSecure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
 

Piotr Szotkowski about "Ruby smells"