SlideShare ist ein Scribd-Unternehmen logo
1 von 113
Downloaden Sie, um offline zu lesen
Refactoring
                           { :from => :mess,
                               :to => :clean_code,
                                 :through => :patterns }



                                                                @caike
  Orlando Ruby User Group                        http://caikesouza.com
  January 2010
Friday, January 15, 2010
Agile


Friday, January 15, 2010
Testing


Friday, January 15, 2010
Patterns


Friday, January 15, 2010
Professionalism


Friday, January 15, 2010
Software Craftsmanship


Friday, January 15, 2010
?
Friday, January 15, 2010
http://www.flickr.com/photos/eurleif/255241547/




Friday, January 15, 2010
"Any fool can write code that
         a computer can understand.
      Good programmers write code that
          humans can understand"
               (Martin Fowler)



Friday, January 15, 2010
“Free software only matters
                             to those who can read”
                              (Robert M. Lefkowitz)



Friday, January 15, 2010
Friday, January 15, 2010
http://www.flickr.com/photos/dhammza/91435718/




Friday, January 15, 2010
Given messy code that works
          When I refactor
Then it should be easier to understand
           And still work!



Friday, January 15, 2010
Cleaning up the house



Friday, January 15, 2010
http://www.flickr.com/photos/benfrantzdale/208672143/




                                                            http://www.flickr.com/photos/improveit/1574023621/




Friday, January 15, 2010
wiki, Fit, JUnit




     http://www.flickr.com/photos/benfrantzdale/208672143/




                  eXtreme
                Programming
                                                               http://www.flickr.com/photos/improveit/1574023621/




Friday, January 15, 2010
Friday, January 15, 2010
http://www.flickr.com/photos/adewale_oshineye/2933030620




Friday, January 15, 2010
Some reasons...


Friday, January 15, 2010
Design++


Friday, January 15, 2010
Money++


Friday, January 15, 2010
Respond to changes
                        Money++


Friday, January 15, 2010
Respond to changes
           Money++
    Release with confidence

Friday, January 15, 2010
Effort--


Friday, January 15, 2010
Waterfall




                           Jan   Feb   Mar    Apr     May     Jun           Jul

                                        Cost of Maintenance         Extreme Programming Explained: Embrace Change
                                                                                Addison Wesley, 2000




Friday, January 15, 2010
XP




                           Jan   Feb   Mar    Apr     May     Jun           Jul

                                        Cost of Maintenance         Extreme Programming Explained: Embrace Change
                                                                                Addison Wesley, 2000




Friday, January 15, 2010
code LESS
                                                  sleep MORE
    http://www.flickr.com/photos/x180/503574487/




Friday, January 15, 2010
http://www.flickr.com/photos/rockinrob/1485573200/




Friday, January 15, 2010
When ?


Friday, January 15, 2010
When you add a function


Friday, January 15, 2010
When you fix a bug


Friday, January 15, 2010
Code Reviews


Friday, January 15, 2010
http://www.flickr.com/photos/highwayoflife/2699887178/




Friday, January 15, 2010
Code Smells


Friday, January 15, 2010
Duplicated Code

                           Code Smells


Friday, January 15, 2010
Duplicated Code

                           Code Smells
                                 Long Method


Friday, January 15, 2010
Duplicated Code
     Large Class
                           Code Smells
                                 Long Method


Friday, January 15, 2010
Duplicated Code
     Large Class      Divergent Change
                           Code Smells
                                 Long Method


Friday, January 15, 2010
Duplicated Code
     Large Class      Divergent Change
                           Code Smells
       Long Parameter
             List                Long Method


Friday, January 15, 2010
Test Driven
                           Development


Friday, January 15, 2010
Red
                            Green
                           Refactor

Friday, January 15, 2010
What if I Don’t ?


Friday, January 15, 2010
Debt Metaphor


Friday, January 15, 2010
http://www.flickr.com/photos/benfrantzdale/208672143/




Friday, January 15, 2010
http://www.flickr.com/photos/didmyself/3050138294/




Friday, January 15, 2010
Get ready for code!


Friday, January 15, 2010
managers = []

                         employees.each do |e|
                           managers << e if e.is_manager?
                         end




Saturday, January 16, 2010
managers = []

                         employees.each do |e|
                           managers << e if e.is_manager?
                         end




Saturday, January 16, 2010
Replace Loop with
                              Closure Method




Saturday, January 16, 2010
managers = []

                         employees.each do |e|
                           managers << e if e.is_manager?
                         end




Saturday, January 16, 2010
managers = employees.
                        select { |e| e.is_manager? }




Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                          def recommended?
                            ((@stars > 5) ? 8 : 1) >= 8
                          end
                        end




Saturday, January 16, 2010
http://www.flickr.com/photos/anirudhkoul/3804552280/




Saturday, January 16, 2010
http://www.bartcop.com/marilyn-monroe001.jpg




Saturday, January 16, 2010
http://thetorchonline.com/wp-content/uploads/2009/04/deathstar.jpg




Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                          def recommended?
                            ((@stars > 5) ? 8 : 1) >= 8
                          end
                        end




Saturday, January 16, 2010
Introduce Explaining
                                   Variable




Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                          def recommended?
                            ((@stars > 5) ? 8 : 1) >= 8
                          end
                        end




Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                          def recommended?
                            rating = (@stars > 5) ? 8 : 1
                            rating >= 8
                          end
                        end



Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                          def recommended?
                            rating = (@stars > 5) ? 8 : 1
                            rating >= 8
                          end
                        end



Saturday, January 16, 2010
Replace Temp
                             With Query




Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                          def recommended?
                            rating = (@stars > 5) ? 8 : 1
                            rating >= 8
                          end
                        end



Saturday, January 16, 2010
class Movie
                          def initialize(stars)
                            @stars = stars
                          end

                             def recommended?
                               rating >= 8
                             end

                          def rating
                            (@stars > 5) ? 8 : 1
                          end
                        end
Saturday, January 16, 2010
OMG,
                             This is sooooo cooooool!




Saturday, January 16, 2010
class Movie

                             def recommended?
                               rating >= 8
                             end

                          def rating
                            (@stars > 5) ? 8 : 1
                          end
                        end




Saturday, January 16, 2010
class Movie

                             def recommended?
                               rating >= 8
                             end

                             def rating
                               more_than_five_stars? ? 8 : 1
                             end

                          def more_than_five_stars?
                            @stars > 5
                          end
                        end
Saturday, January 16, 2010
Inline Method




Saturday, January 16, 2010
class Movie
                          def initialize...end
                          def recommended?
                            rating >= 8
                          end

                             def rating
                               more_than_five_stars? ? 8 : 1
                             end

                          def more_than_five_stars?
                            @stars > 5
                          end
                        end
Saturday, January 16, 2010
class Movie
                          def initialize...end
                          def recommended?
                            rating >= 8
                          end

                             def rating
                               @stars > 5 ? 8 : 1
                             end




                        end
Saturday, January 16, 2010
mock = mock('user')
                       expectation = mock.expects(:find)
                       expectation.with("1")
                       expectation.returns([])




Saturday, January 16, 2010
mock = mock('user')
                       expectation = mock.expects(:find)
                       expectation.with("1")
                       expectation.returns([])




Saturday, January 16, 2010
Replace Temp
                              With Chain




Saturday, January 16, 2010
mock = mock('user')
                       expectation = mock.expects(:find)
                       expectation.with("1")
                       expectation.returns([])




Saturday, January 16, 2010
mock = mock('user')
                       mock.expects(:find).with("1").
                             returns([])




Saturday, January 16, 2010
def expects
                               ...
                               self
                             end

                             def with
                               ...
                               self
                             end

                             def returns
                               ...
                               self
                             end

Saturday, January 16, 2010
def charge(amount, ccnumber)
           begin
             conn = CC_Charger_Server.connect(...)
             conn.send(amount, ccnumber)
           rescue IOError => e
             Logger.log "Error: #{e}"
             return nil
           ensure
             conn.close
           end
         end



Saturday, January 16, 2010
def charge(amount, ccnumber)
           begin
             conn = CC_Charger_Server.connect(...)
             conn.send(amount, ccnumber)
           rescue IOError => e
             Logger.log "Error: #{e}"
             return nil
           ensure
             conn.close
           end
         end



Saturday, January 16, 2010
Extract Surrounding
                                   Method




Saturday, January 16, 2010
def charge(amount, ccnumber)
           begin
             conn = CC_Charger_Server.connect(...)
             conn.send(amount, ccnumber)
           rescue IOError => e
             Logger.log "Error: #{e}"
             return nil
           ensure
             conn.close
           end
         end



Saturday, January 16, 2010
def charge(amount, ccnumber)
                  connect do |conn|
                    conn.send(amount, ccnumber)
                  end
                end




Saturday, January 16, 2010
def connect
           begin
             conn = CC_Charger_Server.connect(...)
             yield conn
           rescue IOError => e
             Logger.log "Error: #{e}"
             return nil
           ensure
             conn.close
           end
         end



Saturday, January 16, 2010
def body_fat_percentage(name,
        age, height, weight, metric_system)
        ...
      end




Saturday, January 16, 2010
body_fat_percentage("fred", 30, 1.82, 90, 1)
    body_fat_percentage("joe", 32, 6, 220, 2)




Saturday, January 16, 2010
body_fat_percentage("fred", 30, 1.82, 90, 1)
    body_fat_percentage("joe", 32, 6, 220, 2)




Saturday, January 16, 2010
Introduce Named Parameter




Saturday, January 16, 2010
def body_fat_percentage(name,
        age, height, weight, metric_system)
        ...
      end




Saturday, January 16, 2010
def            body_fat_percentage(name, params={})
        #            params[:age]
        #            params[:height]
        #            params[:weight]
        #            params[:metric_system]
      end




Saturday, January 16, 2010
body_fat_percentage("fred", 30, 1.82, 90, 1)
    body_fat_percentage("joe", 32, 6, 220, 2)




Saturday, January 16, 2010
body_fat_percentage("fred", :age => 30,
              :height => 1.82, :weight => 90,
              MetricSystem::METERS_KG)

            body_fat_percentage("joe", :age => 32,
              :height => 6, :weight => 220,
              MetricSystem::FEET_LB)




Saturday, January 16, 2010
user.posts.paginate(:page => params[:page],
      :per_page => params[:per_page] || 15)




Saturday, January 16, 2010
user.posts.paginate(:page => params[:page],
      :per_page => params[:per_page] || 15)




Saturday, January 16, 2010
Replace Magic Number
                             with Symbolic Constant




Saturday, January 16, 2010
user.posts.paginate(:page => params[:page],
      :per_page => params[:per_page] || 15)




Saturday, January 16, 2010
CONTACTS_PER_PAGE = 15

  user.posts.paginate(:page => params[:page],
      :per_page => params[:per_page] ||
  CONTACTS_PER_PAGE)




Saturday, January 16, 2010
class MountainBike
               def price
                 ...
               end
             end

             MountainBike.new(:type => :rigid, ...)
             MountainBike.new(:type => :front_suspension, ...)
             MountainBike.new(:type => :full_suspension, ...)




Saturday, January 16, 2010
def price
                               if @type_code == :rigid
                                   (1 + @comission) * @base_price
                               end
                               if @type_code == :font_suspension
                                 (1 + @comission) * @base_price +
                                 @front_suspension_price
                               end
                               if @type_code == :full_suspension
                                 (1 + @comission) * @base_price+
                                 @front_suspension_price +
                                 @rear_suspension_price
                               end




                             end
Saturday, January 16, 2010
def price
                               if @type_code == :rigid
                                   (1 + @comission) * @base_price
                               end
                               if @type_code == :font_suspension
                                 (1 + @comission) * @base_price +
                                 @front_suspension_price
                               end
                               if @type_code == :full_suspension
                                 (1 + @comission) * @base_price+
                                 @front_suspension_price +
                                 @rear_suspension_price
                               end
                               if @type_code == :ultra_suspension
                                   ...
                               end
                             end
Saturday, January 16, 2010
Saturday, January 16, 2010
Replace Conditional
                             With Polymorphism




Saturday, January 16, 2010
class MountainBike
                      def price
                        ...
                      end
                    end




Saturday, January 16, 2010
module MountainBike
                      def price
                        ...
                      end
                    end




Saturday, January 16, 2010
class RigidMountainBike
                      include MountainBike
                    end

                    class FrontSuspensionMountainBike
                      include MountainBike
                    end

                    class FullSuspensionMountainBike
                      include MountainBike
                    end




Saturday, January 16, 2010
RigidMountainBike.new(:type => :rigid, ...)

             FrontSuspensionMountainBike.new(:type =>
             :front_suspension, ...)

             FullSuspensionMountainBike.new(:type =>
              :full_suspension, ...)




Saturday, January 16, 2010
class RigidMountainBike
                      include MountainBike

                      def price
                        (1 + @comission) * @base_price
                      end
                    end




Saturday, January 16, 2010
def price
                               if @type_code == :rigid
                                 raise "should not be called"
                               end
                               if @type_code == :font_suspension
                                 (1 + @comission) * @base_price +
                                 @front_suspension_price
                               end
                               if @type_code == :full_suspension
                                 (1 + @comission) * @base_price+
                                 @front_suspension_price +
                                 @rear_suspension_price
                               end
                             end

Saturday, January 16, 2010
class FrontSuspensionMountainBike
                      include MountainBike
                      def price
                        (1 + @comission) * @base_price +
                        @front_suspension_price
                      end
                    end

                    class FullSuspensionMountainBike
                      include MountainBike
                      def price
                        (1 + @comission) * @base_price +
                        @front_suspension_price +
                        @rear_suspension_price
                      end
                    end

Saturday, January 16, 2010
def price
                               if @type_code == :rigid
                                 raise "should not be called"
                               end
                               if @type_code == :font_suspension
                                 raise "should not be called"
                               end
                               if @type_code == :full_suspension
                                 raise "should not be called"
                               end
                             end



Saturday, January 16, 2010
def price
                               if @type_code == :rigid
                                 raise "should not be called"
                               end
                               if @type_code == :font_suspension
                                 raise "should not be called"
                               end
                               if @type_code == :full_suspension
                                 raise "should not be called"
                               end
                             end



Saturday, January 16, 2010
class RigidMountainBike
                      include MountainBike
                    end

                    class FrontSuspensionMountainBike
                      include MountainBike
                    end

                    class FullSuspensionMountainBike
                      include MountainBike
                    end




Saturday, January 16, 2010
Only the beginning...
Saturday, January 16, 2010
Coding Dojo



                                       http://www.flickr.com/photos/el_ser_lomo/3267627038/




                                  http://orlandodojo.wordpress.com/
                             http://groups.google.com/group/orlando-dojo/
Saturday, January 16, 2010
Saturday, January 16, 2010
Thank you!
                                                   @caike
                                    http://caikesouza.com

Saturday, January 16, 2010

Weitere ähnliche Inhalte

Andere mochten auch

Agile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDDAgile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDD
AgileCommunity
 
Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)
Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)
Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)
Peter Kofler
 

Andere mochten auch (14)

Kiev Coding Dojo
Kiev Coding DojoKiev Coding Dojo
Kiev Coding Dojo
 
RailsWayCon 2010 Coding Dojo
RailsWayCon 2010 Coding DojoRailsWayCon 2010 Coding Dojo
RailsWayCon 2010 Coding Dojo
 
Agile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDDAgile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDD
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
Coding Dojo: Data Munging (2016)
Coding Dojo: Data Munging (2016)Coding Dojo: Data Munging (2016)
Coding Dojo: Data Munging (2016)
 
XpUg Coding Dojo: KataYahtzee in Ocp way
XpUg Coding Dojo: KataYahtzee in Ocp wayXpUg Coding Dojo: KataYahtzee in Ocp way
XpUg Coding Dojo: KataYahtzee in Ocp way
 
Construindo um Servidor Web com GO
Construindo um Servidor Web com GOConstruindo um Servidor Web com GO
Construindo um Servidor Web com GO
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Coding dojo C# com NUnit
Coding dojo C# com NUnitCoding dojo C# com NUnit
Coding dojo C# com NUnit
 
InCuca - Coding dojo - AngularJS
InCuca - Coding dojo - AngularJSInCuca - Coding dojo - AngularJS
InCuca - Coding dojo - AngularJS
 
Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)
Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)
Coding Dojo for Testers/Testing Dojo: Designing Test Cases with FitNesse (2014)
 
TDD Dojo - Test Driven Development Coding Dojo
TDD Dojo - Test Driven Development Coding DojoTDD Dojo - Test Driven Development Coding Dojo
TDD Dojo - Test Driven Development Coding Dojo
 
Teaching and Learning TDD in the Coding Dojo
Teaching and Learning TDD in the Coding DojoTeaching and Learning TDD in the Coding Dojo
Teaching and Learning TDD in the Coding Dojo
 
#safaDojo - Coding Dojo Go lang
#safaDojo - Coding Dojo Go lang#safaDojo - Coding Dojo Go lang
#safaDojo - Coding Dojo Go lang
 

Ähnlich wie Refactoring

The Art of the Spike
The Art of the SpikeThe Art of the Spike
The Art of the Spike
Aaron Bedra
 
Elretodelanube conclusiones
Elretodelanube conclusionesElretodelanube conclusiones
Elretodelanube conclusiones
salesatocha
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010
Zi Bin Cheah
 
The IT Philharmonic - OSCON 2010
The IT Philharmonic - OSCON 2010 The IT Philharmonic - OSCON 2010
The IT Philharmonic - OSCON 2010
Chef Software, Inc.
 
TwitCasting Asian Tech Night
TwitCasting Asian Tech NightTwitCasting Asian Tech Night
TwitCasting Asian Tech Night
yoski
 
CrossMark Sneak Peek 2010 CrossRef Workshops
CrossMark Sneak Peek 2010 CrossRef WorkshopsCrossMark Sneak Peek 2010 CrossRef Workshops
CrossMark Sneak Peek 2010 CrossRef Workshops
Crossref
 

Ähnlich wie Refactoring (20)

The Art of the Spike
The Art of the SpikeThe Art of the Spike
The Art of the Spike
 
Elretodelanube conclusiones
Elretodelanube conclusionesElretodelanube conclusiones
Elretodelanube conclusiones
 
Marhmallow game presentation
Marhmallow game presentationMarhmallow game presentation
Marhmallow game presentation
 
The Marshmellow challenge - esercizio di teambuilding
The Marshmellow challenge - esercizio di teambuildingThe Marshmellow challenge - esercizio di teambuilding
The Marshmellow challenge - esercizio di teambuilding
 
使用 PandaForm.com 製作及管理網上表格
使用 PandaForm.com 製作及管理網上表格使用 PandaForm.com 製作及管理網上表格
使用 PandaForm.com 製作及管理網上表格
 
Drupal In The Cloud
Drupal In The CloudDrupal In The Cloud
Drupal In The Cloud
 
Please Don't Touch the Slow Parts V2
Please Don't Touch the Slow Parts V2Please Don't Touch the Slow Parts V2
Please Don't Touch the Slow Parts V2
 
The Limited Red Society
The Limited Red SocietyThe Limited Red Society
The Limited Red Society
 
Layar event US introduction and cases
Layar event US introduction and casesLayar event US introduction and cases
Layar event US introduction and cases
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010
 
The IT Philharmonic - OSCON 2010
The IT Philharmonic - OSCON 2010 The IT Philharmonic - OSCON 2010
The IT Philharmonic - OSCON 2010
 
Dinámica: Reto de la nube. Charo Fernández.
Dinámica: Reto de la nube. Charo Fernández. Dinámica: Reto de la nube. Charo Fernández.
Dinámica: Reto de la nube. Charo Fernández.
 
Summer of Tech Careers Seminar 2010
Summer of Tech Careers Seminar 2010Summer of Tech Careers Seminar 2010
Summer of Tech Careers Seminar 2010
 
Intro to Twitter
Intro to TwitterIntro to Twitter
Intro to Twitter
 
Tunisia on Rails 2010
Tunisia on Rails 2010Tunisia on Rails 2010
Tunisia on Rails 2010
 
27 development
27 development27 development
27 development
 
TwitCasting Asian Tech Night
TwitCasting Asian Tech NightTwitCasting Asian Tech Night
TwitCasting Asian Tech Night
 
Implementing a WAF
Implementing a WAFImplementing a WAF
Implementing a WAF
 
Managing technical communicators in an XML environment
Managing technical communicators in an XML environmentManaging technical communicators in an XML environment
Managing technical communicators in an XML environment
 
CrossMark Sneak Peek 2010 CrossRef Workshops
CrossMark Sneak Peek 2010 CrossRef WorkshopsCrossMark Sneak Peek 2010 CrossRef Workshops
CrossMark Sneak Peek 2010 CrossRef Workshops
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

Refactoring