SlideShare uma empresa Scribd logo
1 de 113
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

RailsWayCon 2010 Coding Dojo
RailsWayCon 2010 Coding DojoRailsWayCon 2010 Coding Dojo
RailsWayCon 2010 Coding DojoMichael Mahlberg
 
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 TDDAgileCommunity
 
Coding dojo
Coding dojoCoding dojo
Coding dojovietnt84
 
Coding Dojo: Data Munging (2016)
Coding Dojo: Data Munging (2016)Coding Dojo: Data Munging (2016)
Coding Dojo: Data Munging (2016)Peter Kofler
 
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 wayGiordano Scalzo
 
Construindo um Servidor Web com GO
Construindo um Servidor Web com GOConstruindo um Servidor Web com GO
Construindo um Servidor Web com GOBeto Muniz
 
Coding dojo C# com NUnit
Coding dojo C# com NUnitCoding dojo C# com NUnit
Coding dojo C# com NUnitFabricio Panhan
 
InCuca - Coding dojo - AngularJS
InCuca - Coding dojo - AngularJSInCuca - Coding dojo - AngularJS
InCuca - Coding dojo - AngularJSInCuca
 
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
 
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 DojoRoberto Bettazzoni
 
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 DojoEmily Bache
 
#safaDojo - Coding Dojo Go lang
#safaDojo - Coding Dojo Go lang#safaDojo - Coding Dojo Go lang
#safaDojo - Coding Dojo Go langMarcelo Andrade
 

Destaque (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
 

Semelhante a Refactoring

The Art of the Spike
The Art of the SpikeThe Art of the Spike
The Art of the SpikeAaron Bedra
 
Elretodelanube conclusiones
Elretodelanube conclusionesElretodelanube conclusiones
Elretodelanube conclusionessalesatocha
 
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 teambuildingIrene Morrione
 
使用 PandaForm.com 製作及管理網上表格
使用 PandaForm.com 製作及管理網上表格使用 PandaForm.com 製作及管理網上表格
使用 PandaForm.com 製作及管理網上表格Daniel Cheng
 
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 V2Federico Galassi
 
Mobile JavaScript Development - QCon 2010
Mobile JavaScript Development - QCon 2010Mobile JavaScript Development - QCon 2010
Mobile JavaScript Development - QCon 2010Nikolai Onken
 
The Limited Red Society
The Limited Red SocietyThe Limited Red Society
The Limited Red SocietyNaresh Jain
 
Layar event US introduction and cases
Layar event US introduction and casesLayar event US introduction and cases
Layar event US introduction and casesLayar
 
Agile teams as innovation teams
Agile teams as innovation teamsAgile teams as innovation teams
Agile teams as innovation teamsOpenAgile Romania
 
Agile Teams as Innovation Teams
Agile Teams as Innovation TeamsAgile Teams as Innovation Teams
Agile Teams as Innovation TeamsRobert Dempsey
 
Simple Steps to Great Web Design
Simple Steps to Great Web DesignSimple Steps to Great Web Design
Simple Steps to Great Web DesignMatthew Smith
 
Social Media For Museums
Social Media For MuseumsSocial Media For Museums
Social Media For Museumsmichellej
 
Kodak, strategic management
Kodak, strategic managementKodak, strategic management
Kodak, strategic managementguest4ba1d1
 
The Future of Technology
The Future of TechnologyThe Future of Technology
The Future of TechnologyDavid Bill
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Zi 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.
 
Rabobank randmeren presentatie
Rabobank randmeren presentatieRabobank randmeren presentatie
Rabobank randmeren presentatieVincent Everts
 

Semelhante a 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
 
Mobile JavaScript Development - QCon 2010
Mobile JavaScript Development - QCon 2010Mobile JavaScript Development - QCon 2010
Mobile JavaScript Development - QCon 2010
 
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
 
Agile teams as innovation teams
Agile teams as innovation teamsAgile teams as innovation teams
Agile teams as innovation teams
 
Agile Teams as Innovation Teams
Agile Teams as Innovation TeamsAgile Teams as Innovation Teams
Agile Teams as Innovation Teams
 
Simple Steps to Great Web Design
Simple Steps to Great Web DesignSimple Steps to Great Web Design
Simple Steps to Great Web Design
 
Social Media For Museums
Social Media For MuseumsSocial Media For Museums
Social Media For Museums
 
Kodak, strategic management
Kodak, strategic managementKodak, strategic management
Kodak, strategic management
 
The Future of Technology
The Future of TechnologyThe Future of Technology
The Future of Technology
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010
 
TwitterOne
TwitterOneTwitterOne
TwitterOne
 
The IT Philharmonic - OSCON 2010
The IT Philharmonic - OSCON 2010 The IT Philharmonic - OSCON 2010
The IT Philharmonic - OSCON 2010
 
Rabobank randmeren presentatie
Rabobank randmeren presentatieRabobank randmeren presentatie
Rabobank randmeren presentatie
 

Último

AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfJamie (Taka) Wang
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
Valere | Digital Solutions & AI Transformation Portfolio | 2024
Valere | Digital Solutions & AI Transformation Portfolio | 2024Valere | Digital Solutions & AI Transformation Portfolio | 2024
Valere | Digital Solutions & AI Transformation Portfolio | 2024Alexander Turgeon
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 

Último (20)

AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
Valere | Digital Solutions & AI Transformation Portfolio | 2024
Valere | Digital Solutions & AI Transformation Portfolio | 2024Valere | Digital Solutions & AI Transformation Portfolio | 2024
Valere | Digital Solutions & AI Transformation Portfolio | 2024
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 

Refactoring