<!doctype html>
<html lang="en">

<head>
<meta charset="utf-8">

<title>Ruby basics</title>

<meta name="description" content="Ruby basics">
<meta name="author" content="Krzysztof Kotlarek">

<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">

<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/lis2.css" id="theme">

<!-- Code syntax highlighting -->
<link rel="stylesheet" href="lib/css/zenburn.css">

<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>

<!--[if lt IE 9]>
    <script src="lib/js/html5shiv.js"></script>
    <![endif]-->
</head>

<body>

<div class="reveal">

  <!-- Any section element inside of this container is displayed as a slide -->
  <div class="slides">
    <section class="start" data-background="images/ruby.jpg">
      <h1><span>Ruby</span> basics</h1>
      <div>
        <h3>Twitter: @krzkot</h3>
        <h3>Github:  lis2</h3>
        <h3>Email:   kotlarek.krzysztof@gmail.com</h3>
      </div>
    </section>

    <section data-background="images/min.png">
      <img src="images/me.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/matz.JPG">
      <div>
      <ul>
        <li>Yukihiro Matsumoto</li>
        <li>1995</li>
      </ul>
      </div>
    </section>

    <section data-background="images/min.png">
      <div>
        <ul>
          <li>Based on Perl, Smalltalk, Eiffel, Ada, Lisp</li>
          <li>Offers automatic memory management</li>
          <li>Written in C</li>
          <li>It is a strong object oriented programming language</li>
          <li>Open Source</li>
       </ul>
    </section>

    <section class="start" data-background="images/min.png">
      <div>
        <ul>
          <li>Simple</li>
          <li>Easy to write</li>
          <li>Elegant</li>
        </ul>
      </div>
    </section>

    <section data-background="images/min.png">
      <img src="images/tiobe1.png">
    </section>

    <section data-background="images/min.png">
      <img src="images/tiobe2.png">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/ror.jpg">
      <div>
      <ul>
        <li>David Heinemeier Hansson</li>
        <li>December 2005</li>
      </ul>
      </div>
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/github.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/basecamp.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/shopify.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/airbnb.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/groupon.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/twitter.png">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/infakt.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/kontomierz.jpg">
    </section>

    <section class="start" data-background="images/ruby.jpg">
      <img src="images/wml.jpg">
    </section>

    <section class="start" data-background="images/min.png">
      <h1>Comments</h1>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  # example comment
      </code></pre>

      </section>
    <section data-background="images/min.png">
      <pre><code>
    puts("Hello World") 
      </pre></code>
    </section>

    <section data-background="images/min.png">
      <pre><code>
    puts("Hello World") # Hello World
      </pre></code>
    </section>
    <section data-background="images/min.png">
      <pre><code>
    puts "Hello World" # Hello World
      </pre></code>
    </section>
    <section class="start" data-background="images/min.png">

      <h1>Variables</h1>
    </section>

    <section class="start" data-background="images/min.png">
      <h1>Duck typing</h1>
      <h3>When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck</h3>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  name = "John"
  age = 29
  a = [2, 3, 1, 4, 5]
  h = { name: 'John', age: 29 }
  
  puts name.upcase # JOHN
  puts age # 29
  puts a.sort # [1, 2, 3, 4, 5]
  puts a[:name] # John
      </code></pre>

    </section>
    <section data-background="images/min.png">
      <pre><code>
  name = "John"
  age = 29
  a = [2, 3, 1, 4, 5]
  h = { name: 'John', age: 29 }
  
  puts name.upcase # JOHN
  puts age # 29
  puts a.sort # [1, 2, 3, 4, 5]
  puts a[:name] # John
  
  puts name.class # String
  puts age.class # Fixnum
  puts a.class # Array
  puts h.class # Hash
      </code></pre>
    </section>

    <section class="start" data-background="images/min.png">
      <h1>Everything is an object</h1>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  puts 1 + 2 # 3
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <pre><code>
   class Fixnum
     def +(other)
       return 4
     end
   end
   puts 1 + 2 # 4
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <h2>Functions</h2>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  def full_name(first_name, last_name)
    return "#{first_name} #{last_name}"
  end
  
  puts full_name('John', 'Snow') # John Snow
      </code></pre>
    </section>
    <section data-background="images/min.png">
      <pre><code>
  def full_name(first_name, last_name)
    "#{first_name} #{last_name}"
  end
  
  puts full_name('John', 'Snow') # John Snow
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <h2>Yield</h2>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  def test
    puts "1"
    yield 2
    puts "3"
  end
  test() { |number| puts number }
  # 1
  # 2
  # 3
      </code></pre>
      </section>

    <section data-background="images/min.png">
      <pre><code>
  def full_name(first_name, last_name)
    "#{first_name} #{last_name}"
  end
  
  def greeting(first_name, last_name)
    name = full_name(first_name, last_name)
    yield(name)
  end
  
  greeting('John', 'Snow') {|full_name| puts "Welcome, #{full_name}"}
  # Welcome, John Snow
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  def connect
    connect.connect('localhost:3000')
    connect.auth('lis2', 'password')
    yield connect
    connect.end
  end

  connect { |c| c.get_users }
  connect { |c| c.delete_user(1) }
  
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <h2>Loops</h2>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  (1..10).each do |number|
    if number % 2 == 0
      puts number 
    end
  end # 2, 4, 6, 8, 10
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  (1..10).each do |number|
      puts number if number % 2 == 0
  end # 2, 4, 6, 8, 10
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <h2>Classes</h2>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  class Person
    def initialize(first_name, last_name)
      @first_name = first_name
      @last_name = last_name
    end
  
    def full_name
      "#{@first_name} #{@last_name}"
    end
  end

  person = Person.new('John', 'Snow')
  puts person.full_name # John Snow
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  class Person
    attr_accessor :first_name
  
    def initialize(first_name, last_name)
      @first_name = first_name
      @last_name = last_name
    end
  
    def full_name
      "#{@first_name} #{@last_name}"
    end
  end

  person = Person.new('John', 'Snow')
  puts person.full_name # John Snow
  person.first_name = 'Peter'
  puts person.full_name # Peter Snow
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <h2>Inherintance</h2>
    </section>
    
    <section data-background="images/min.png">
      <pre><code>
  class Dog < Person
    def full_name
      "I am a dog - #{super}"
    end
  end
  
  dog = Dog.new('Einstein', 'Brown')
  puts dog.full_name # I am a dog - Einstein Brown
      </code></pre>
    </section>
    <section data-background="images/min.png">
      <h2>Tests</h2>
    </section>

    <section data-background="images/min.png">
      <h3>person_test.rb</h3>
      <pre><code>
  require "minitest/autorun"
  require "./person.rb"
  
  class TestPerson < Minitest::Test
    def setup
      @person = Person.new('John', 'Snow')
    end
  
    def test_full_name
      assert_equal "John Snow", @person.full_name
    end

    def test_fail
      assert_equal "Johnny Cage", @person.full_name
    end
  end
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <img src="images/test.png">
    </section>
    
    <section data-background="images/min.png">
      <code><pre>

  class TestPerson < Minitest::Test
    def setup
      @person = Person.new('John', 'Snow')
    end
  
    def test_full_name
      assert_equal "John Snow", @person.full_name
    end

    def test_first_name
      assert_equal "John", @person.first_name
    end
  end
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <img src="images/test2.png">
    </section>

    <section data-background="images/min.png">
      <h2>Metaprogramming</h2>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  def a1
    "a1_whatever"
  end
  
  def a2
    "a2_whatever"
  end
  
  def a3
    "a3_whatever"
  end
  puts a3 # a3_whatever
      </code></pre>
    </section>

    <section data-background="images/min.png">
      <pre><code>
  ['a1', 'a2', 'a3'].each do |method_name|
    define_method method_name do
      "#{method_name}_whatever"
    end
  end
  puts a3 # a3_whatever
      </code></pre>
    </section>
    <section data-background="images/min.png">
      <img src="images/money.gif">
    </section>

    <section data-background="images/min.png">
      <img src="images/forum.png">
    </section>

    <section data-background="images/min.png">
      <img src="images/remote.png">
    </section>
    <section data-background="images/ruby.jpg">
      <h1>Downsides</h1>
    </section>

    <section data-background="images/ruby.jpg">
      <h1>Anyway, I wanna learn</h1>
    </section>

    <section data-background="images/min.png">
      <img src="images/codeschool.png">
    </section>

    <section data-background="images/min.png">
      <img src="images/codewars.png">
    </section>

    <section data-background="images/min.png">
      <img src="images/koans.png">
    </section>

    <section data-background="images/min.png">
      <img src="images/warrior.png">
    </section>

    <section data-background="images/ruby.jpg">
      <h2>KoRUG?</h2>
    </section>

    <section data-background="images/ruby.jpg">
      <div>
        <h3>http://railspoint.com/ruby</h3>
      </div>
    </section>
    <section class="start" data-background="images/ruby.jpg">
      <h1><span>Thank</span> you</h1>
    </section>
</div>


          </div>

          <script src="lib/js/head.min.js"></script>
          <script src="js/reveal.js"></script>

          <script>

// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
          Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,

transition: 'slide', // none/fade/slide/convex/concave/zoom

// Optional reveal.js plugins
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true }
]
});

          </script>

          </body>
          </html>
