SlideShare ist ein Scribd-Unternehmen logo
1 von 80
Downloaden Sie, um offline zu lesen
Ruby
   A Programmer’s Best Friend




Jonathan Weiss <jw@innerewut.de>

               1
Überblick
Einführung
Getting started
Grundlagen
Blocks und Iteratoren
Goodies
Resources
Ruby on Rails - Übung
                        2
Einführung


    3
Ruby?
Ruby ist eine vollständig
objektorientierte
Skriptsprache

Das Beste von Perl und
Python

Public release 1995 durch
Yukihiro Matsumoto,
a.k.a “Matz”

                            4
Wichtigste Eigenschaften
 Interpretierte Skriptsprache
 Aktuell ist Ruby 1.8.2
 Komplett Objekt-Orientiert
 Dynamische Typbindung
 Verfügbar über GPL oder eigene Lizenz
 The 5 E’s (by DHH)
                                         5
The 5 E’s

Everything is an object
Elegant blocks give inline power
Exploring with reflection
Extending at runtime
Extensive standard libray

                                   6
Beispiel 0
5.times do puts “ruby ist cool”.upcase end



Output:
RUBY IST   COOL
RUBY IST   COOL
RUBY IST   COOL
RUBY IST   COOL
RUBY IST   COOL



                     7
Getting Started


       8
Ruby installieren
 GPL , somit Sourcen verfügbar:
CVS, tar, make && make install


 Binary installer für Windows
http://rubyforge.org/projects/
rubyinstaller/
                                  9
Ruby ausführen
 Interpreter aufrufen und Skript
 übergeben:
prompt> ruby meinprogramm.rb
 Shebang:
#!/usr/local/bin/ruby
print “a”
                                   10
Interactive Ruby
Interactive Ruby (irb) ist eine Ruby
“Shell”
Erlaubt ausführen von eingegeben Code
oder lesen von Code aus Dateien
Shell-Eigenschaften wie History, Job-
Controll und Commandline-Editing
Perfekt, um zu probieren und spielen
                                        11
Demo




       12
Dokumentation
Ruby wird meist in RDoc dokumentiert
(vergleichbar JavaDoc)
Konvertierung in HTML und ri
ri erlaubt Zugang über
Kommandozeile:
prompt> ri WAS_ICH_WISSEN_WILL

                                       13
Demo




       14
Grundlagen


    15
Grundregeln
Kein Semikolon am Ende der Zeile (bei
einer Anweisung pro Zeile)
Keine geschweiften Klammern zur
Deklaration vom Blöcken, sondern
“xxxx......end”
Keine Deklaration von Variablen!
() können bei Methoden weggelassen
werden                                  16
Alles ist ein Objekt
 Nummern und Strings sind auch
 Objekte
 “nil” als Null-Objekt statt null-pointer
 Zugang zu Instanz-Methoden über:
Instanz.methode(arg1, arg2)
 Zugang zu Instanz-Attributen über:
Instanz.attribut = 5
                                            17
Beispiel 1
a=9
b=1
c=a+b
print c ; c = “Hi”; print c
d = c.length + c.index(”i”)
c = -99.abs
ein_string = String.new(”HALLO”)
auch_ein_string = ‘a’ + “bcdefg #{c}”




                     18
Funktionen/Methoden
 Einleitung mit
def funktions_name(argument)
....
end
 implizites return des letzten
 Ausdruckes (wie überall in Ruby)
                                    19
Beispiel 2
def my_func
 puts “abc”
 99
end
def my_func2(a, b)
 return a+b
end
def a; “a”; end

ergebnis = my_func(1,2)
a()
                     20
Namen

Klassen, Konstanten und Module
fangen mit Grossbuchstaben an
Methodennamen sind kleingeschrieben
Variablen (somit Objekte) fangen mit
Kleinbuchstaben an

                                       21
Namen 2

Instanzvariablen fangen mit @ an
Klassenvariablen fangen mit @@ an
Globale Variablen beginnen mit $
Lokale Variablen beginnen mit
Kleinbuchstaben

                                    22
Klassen
 Zugriff auf Klasseneigenschaften über
Klasse.methode(arg1, arg2, arg3)
Klasse.klassenvariable
Klasse::KONSTANTE
 Definition von Klassen-Methoden über
 Klassenname.methode
                                         23
Beispiel 3
class Person
  @name                  #Instanz-var
  @alter                  #Instanz-var
  @@anzahl_auf_der_welt #Klassen-var
  MAX_ALTER = 100          #Konstante
  def check_alter(alter)   #Instanz-meth
    alter < Person::MAX_ALTER
  end
end

a = Person.new
if a.check_alter(90)
  puts “jung genug”
end                    24
Beispiel 3 cont
class Person
  def Person.how_many
    @@anzahl_auf_der_welt
  end
end

anzahl = Person.how_many




                   25
Vererbung

Konstruktor-Methode ist “initialize”
class a < b   bedeutet, dass a von b erbt
“super” ist der Konstruktor der
SuperKlasse


                                            26
Demo




       27
Access Control

Private, public und protected
Methoden sind default public
Instanzvariablen gar nicht zugänglich,
man muss erst passende Methoden
erschaffen (Attribute)

                                         28
Beispiel 4
class Person
  @name                    #Instanz-var
  @alter                   #Instanz-var
  def name
    @name
  end
  public def alter
    @alter
  end
  protected :alter
end

print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
                     29
Attribute

Zuweisung auf Instanzvariablen durch
Methoden:
def funk_name=(arg)
....
end

                                       30
Beispiel 5
class Person
  def name=(wie_soll_ich_heissen)
    @name = wie_soll_ich_heissen
  end
  attr_writer :alter
end

Hansi = Person.new
Hansi.name = “Hansi”
Hansi.alter = 12
print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”



                     31
Automatische Attribute


Benutzung der Macros “attr_reader”,
“attr_writer” oder “attr_access”




                                      32
Standard Datentypen
Numbers (Fixum, Bignum)
Strings
Array
Hash
Regular expression
Range
                          33
Beispiel 6
string_a = “HUIBU”
fixnummer = 9
big_nummer = 1.23e10
m_array = [”a”, “b”, [1,2], “c”, 3]
mein_hash = {’anfang’ => “abc”, ‘ende’ => “xyz”}

puts string_a + mein_hash[’anfang’] + m_array[0]

meine_range = 1..10
meine_range.include?(5)




                     34
Blocks und Iteratoren


          35
Blocks
Blocks sind eine Art anonyme
Funktion
Sie werden (fast) immer mit
“normalen” Funktionen eingesetzt
Dabei wird der Kontrollfluß zwischen
den Funktionen hin und her gereicht

                                       36
Blocks

Blocks werden auf der selben Zeile wie
der Methoden-Aufruf geschrieben
Notation in {...} oder do...end
Die “normale” Funktion kann den
Block über “yield” aufrufen

                                         37
Beispiel 7
def foo
 yield
 puts “2 von foo”
 yield
end

foo { print “2 von Block”}


Output:
2 von Block
2 von foo
2 von Block
                      38
Beispiel 8
def foo
 yield
 puts “2 von foo”
 yield
end

foo do
  puts “2 von Block”
end

Output:
2 von Block
2 von foo
2 von Block            39
Yield
 Yield kann auch Variablen übergeben,
 die an den Block weitergereicht werden
 Das Ergebnis des Blocks wird die
 Rückgabe von yield
{|var1, var2| print var1 .....}
do |var3, var4|
 ...end
                                          40
Beispiel 9
def foo(a, b)
 c=a+b
 print yield(c)
end

foo(1,2) do |var1|
  var1 * 2
end

Output:
6



                     41
Iteratoren
Iteratoren sind Funktionen, die Blocks
repetitiv aufrufen
Finden dort Einsatz, wo andere
Sprachen normalerweise Schleifen
nutzen würden
Intuitiv zu benutzten

                                         42
Beispiel 9
5.times { puts “Hi”}

a = [1, 2]
a.each do |the_one|
  print the_one
end

[”H”, “A”, “L”].collect {|x| x.succ} --> [”I”, “B”, “M”]

[1, 2, 3, 5, 7, 9].find {|v| v*v > 30} --> 7




                        43
Beispiel 10
class Array
  def find
    for i in 0..size
      value = self[i]
      return value if yield(value)
    end
    return nil
  end
end




                       44
Proc Objekt
Man kann Blocks mit Hilfer der lamba
Funktion oder des Konstruktor der Proc-
Klasse in Objekte verwandeln
Diese kann man nun “rumreichen”
Abfangen des Blocks und Umwandeln
in Proc auch in der “normalen” Methode
möglich
                                          45
Demo




       46
Goodies


   47
Exceptions

Ruby unterstützt und benutzt (!!!)
Exceptions
Schlüsselwörter raise, rescue und ensure
Kontrollflußsteuerung über throw/catch


                                           48
Beispiel 11
begin

 funktion_die_schief_laufen_kann(1,2,”aaa”)

rescue StandardError

 puts “Fehler aufgetreten”

ensure

 puts “wird immer ausgeführt”

end


                    49
Integrierter Debugger


Aufrufbar über:
prompt> ruby -r debug skript.rb
Breakpoint, Watches, Steps,....



                                  50
Integriertes UnitTest
Framework
 Ruby 1.8 hat das Test::Unit Framework
 integriert
 Unterstützung von Cases +Suits
 Neuer Test:
requiere test/unit
class TestUser < Test::Unit::Case
                                         51
Mixes
Module und deren Eigenschaften
können in beliebige Klassen “gemixt”
werden
Diese erhalten somit alle Methoden und
Variablen
Eine Art Java Interfaces nur mit
Implementierung
                                         52
RubyGems
 Paketverwaltung für Ruby Programme
 und Bibliotheken
 Vergleichbar mit Pear und CPAN
 Installation von Programmen in
 verschiedenen Versionen möglich
gem install rails --remote
gem upgrade --remote
                                      53
erb, eruby und
mod_ruby
erb und eruby sind filter, die es
erlauben, Ruby Code in HTML
unterzubringen (PHP)
<h1> Willkommen,
<% print #{Hansi.name} %>
</h1>
mod_ruby vergleichbar mit mod_php
                                    54
Ruby on Rails

Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei:
Datenbank Zugangsdaten
THE REASON to check out Ruby

                                55
Integrierter Webserver

WEBrick ist ein in Ruby geschriebener
Webserver, der in der Standard
Distribution enthalten ist
Kann als Servlet-Container arbeiten


                                        56
Grafische Oberflächen

RubyTK/GTK, FXRuby, ruby-gnome2,
QT/Ruby, Ruby/Cocoa, WxRuby,
FLTK, RubyWise, ParaGUI,
Widestudio, Apollo,....
Somit “normale” GUI-Programme
möglich

                                   57
Taint Obejcts
Taint-modus, ähnlich wie bei Perl
Setzen des Levels(1-4) über $SAFE
Alle externen Daten sind “tainted”
Tainted Objects können nicht an
gefährliche Funktionen übergeben
werden (z.B. System)

                                     58
Reflection

Ruby hat massive Reflection API
Möglich unbekannte Objekte, Klassen,
Module und Funktionen zu inspizieren
Wichtig für Debugger, IDEs und
dynamische Erweiterbarkeit

                                       59
Distributed Ruby

drb erlaubt ausführen von RubyCode
auf entfernen Rechnern
Vergleichbar CORBA, Java-RMI
Einfach und schnell
1GHz PowerBook: 500 Calls pro Sek

                                     60
Crossplatform IDE
FreeRIDE ist eine Ruby IDE
für Windows, UNIX und
Mac OS X

Unterstützung von
Debugging, Code
completion, Refactoring,
remote pair-programming

http://
freeride.rubyforge.org
                             61
Resources


    62
Prgramming Ruby
The PickAxe Book

Standardwerk von
den Pragmatic
Programmers

Tutorial und
Referenz

Absolut zu
empfehlen
                   63
www.ruby-lang.org

Rubys Homepage
Sourcecode und FAQ
Links zu anderen Ruby Seiten
Ruby Application Archive (RAA)


                                 64
www.ruby-doc.org


Zentrale Dokumentation
RDoc Dokumentation als HTML
Erste Version PickAxe als HTML



                                 65
www.rubygarden.org


WebBlog/Wiki von Ruby Entwicklern
Viele gute Artikel zum Thema Ruby
Viele gute Links



                                    66
Bibliotheken und Pakete
 RubyForge
http://www.rubyforge.org
 Ruby Production Archive
http://rpa-base.rubyforge.org/wiki/
wiki.cgi
 Ruby Application Archive
http://raa.ruby-lang.org
                                      67
Ruby on Rails
     Übung




      68
Ruby on Rails

Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei:
Datenbank Zugangsdaten
THE REASON to check out Ruby

                                69
Überblick


Einführung MVC
Überblick Rails-Architektur
Übung



                              70
Model-View-Controller
Design-Pattern für Programme mit
Interaktion mit dem Benutzer
KLassen werden in drei Gruppen
eingeteilt, die sich auf ihre jeweillige
Aufgabe spezialisieren
Vorteil: Entkopplung und somit
Wiederverwendbarkeit
                                           71
Model

Klasse, die das Business-Objekt abbildet
mit allen seinen Funktionalitäten
BSP:
Klasse Benutzer
Klasse Buch

                                           72
View
Eigentliche Darstellung für den User
Keine Funktionalität, nur Design
+Anzeige
BSP:
 Template, dass alle Bücher im System
 anzeigt
 Template, dass alle Bücher eines
 Benutzers anzeigt
                                        73
Controller
Verbindung zwischen Model und View
Lädt benötigte Daten aus dem Model
und füttert sie in den View
Prozess-Logik
BSP:
 Lade alle Bücher im System und gebe
 sie dem richtigem Template
                                       74
Rails-Architektur




                    75
Active Record

Model
Verbindet Ruby-Klasse mit Daten aus
der Datenbank
Bereitstellung von Funktionen zur
Manipulation der Daten in der DB

                                      76
Action Controller

Controller
Bietet die eigentlichen Funktionalitäten
an, mit denen der Benutzer interagiert
Lädt den passenden Action View


                                           77
Action View

View
Ruby Template
HTML mit ERb-tags
Das was der Benutzer zu sehen
bekommt

                                78
Übung
Implementierung einer Webapplikation in weniger als 30
                      Minuten




                          79
Fin
Fragen?




  80

Weitere ähnliche Inhalte

Was ist angesagt?

Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Editionlichtkind
 
Perl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, WerkzeugePerl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, Werkzeugelichtkind
 
Was geht mit Java 17?
Was geht mit Java 17?Was geht mit Java 17?
Was geht mit Java 17?gedoplan
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1DraphonyGames
 
C Sharp Einfuehrung Teil 2
C Sharp Einfuehrung Teil 2C Sharp Einfuehrung Teil 2
C Sharp Einfuehrung Teil 2DraphonyGames
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmersBernhard Huemer
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7msebel
 
Die freie Programmiersprache Python
Die freie Programmiersprache Python Die freie Programmiersprache Python
Die freie Programmiersprache Python Andreas Schreiber
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitFrank Müller
 
P6kontext2014
P6kontext2014P6kontext2014
P6kontext2014lichtkind
 
Ruby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: ClosuresRuby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: ClosuresDirk Breuer
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 
Tech Talk: Groovy
Tech Talk: GroovyTech Talk: Groovy
Tech Talk: Groovymwie
 
T2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschritteneT2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschrittenedominion
 
Referat T13 Javadoc
Referat T13 JavadocReferat T13 Javadoc
Referat T13 Javadocminiroquer
 
C# Workshop - Threading
C# Workshop - ThreadingC# Workshop - Threading
C# Workshop - ThreadingQiong Wu
 
Einführung in .NET mit C#
Einführung in .NET mit C#Einführung in .NET mit C#
Einführung in .NET mit C#mspgermany
 

Was ist angesagt? (20)

P6oo
P6ooP6oo
P6oo
 
Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Edition
 
Perl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, WerkzeugePerl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, Werkzeuge
 
Ruby, Ruby, Ruby!
Ruby, Ruby, Ruby!Ruby, Ruby, Ruby!
Ruby, Ruby, Ruby!
 
Was geht mit Java 17?
Was geht mit Java 17?Was geht mit Java 17?
Was geht mit Java 17?
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
 
C Sharp Einfuehrung Teil 2
C Sharp Einfuehrung Teil 2C Sharp Einfuehrung Teil 2
C Sharp Einfuehrung Teil 2
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmers
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
 
Die freie Programmiersprache Python
Die freie Programmiersprache Python Die freie Programmiersprache Python
Die freie Programmiersprache Python
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der Nebenläufigkeit
 
P6kontext2014
P6kontext2014P6kontext2014
P6kontext2014
 
Ruby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: ClosuresRuby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: Closures
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Tech Talk: Groovy
Tech Talk: GroovyTech Talk: Groovy
Tech Talk: Groovy
 
FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
T2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschritteneT2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschrittene
 
Referat T13 Javadoc
Referat T13 JavadocReferat T13 Javadoc
Referat T13 Javadoc
 
C# Workshop - Threading
C# Workshop - ThreadingC# Workshop - Threading
C# Workshop - Threading
 
Einführung in .NET mit C#
Einführung in .NET mit C#Einführung in .NET mit C#
Einführung in .NET mit C#
 

Ähnlich wie An Introduction to Ruby

An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On RailsJonathan Weiss
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureSascha Koch
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweiternjan_mindmatters
 
Ruby On Rails Einführung
Ruby On Rails EinführungRuby On Rails Einführung
Ruby On Rails EinführungReinhold Weber
 
Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Martin Alfke
 
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Javatim
 
Object-orientied way of using mysqli interface - Workshop
Object-orientied way of using mysqli interface - WorkshopObject-orientied way of using mysqli interface - Workshop
Object-orientied way of using mysqli interface - WorkshopWaldemar Dell
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
Nigh Session Scala
Nigh Session ScalaNigh Session Scala
Nigh Session Scalaadesso AG
 
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike MüllerAberla
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 

Ähnlich wie An Introduction to Ruby (20)

An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On Rails
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit Clojure
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Ruby on Rails SS09 03
Ruby on Rails SS09 03Ruby on Rails SS09 03
Ruby on Rails SS09 03
 
Ruby on Rails SS09 04
Ruby on Rails SS09 04Ruby on Rails SS09 04
Ruby on Rails SS09 04
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
 
Ruby On Rails Einführung
Ruby On Rails EinführungRuby On Rails Einführung
Ruby On Rails Einführung
 
Unixkurs 06 - Shellskripte
Unixkurs 06 - ShellskripteUnixkurs 06 - Shellskripte
Unixkurs 06 - Shellskripte
 
Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014
 
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
 
Object-orientied way of using mysqli interface - Workshop
Object-orientied way of using mysqli interface - WorkshopObject-orientied way of using mysqli interface - Workshop
Object-orientied way of using mysqli interface - Workshop
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
Nigh Session Scala
Nigh Session ScalaNigh Session Scala
Nigh Session Scala
 
Scala Workshop
Scala WorkshopScala Workshop
Scala Workshop
 
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike Müller
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 

Mehr von Jonathan Weiss

Docker on AWS OpsWorks
Docker on AWS OpsWorksDocker on AWS OpsWorks
Docker on AWS OpsWorksJonathan Weiss
 
ChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The HoodChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The HoodJonathan Weiss
 
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014Jonathan Weiss
 
DevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloudDevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloudJonathan Weiss
 
Introduction to Backbone.js
Introduction to Backbone.jsIntroduction to Backbone.js
Introduction to Backbone.jsJonathan Weiss
 
Build your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollectiveBuild your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollectiveJonathan Weiss
 
NoSQL - Motivation and Overview
NoSQL - Motivation and OverviewNoSQL - Motivation and Overview
NoSQL - Motivation and OverviewJonathan Weiss
 
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBNoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBJonathan Weiss
 
Amazon EC2 in der Praxis
Amazon EC2 in der PraxisAmazon EC2 in der Praxis
Amazon EC2 in der PraxisJonathan Weiss
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with ChefJonathan Weiss
 
Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2Jonathan Weiss
 
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010Jonathan Weiss
 
CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010Jonathan Weiss
 
NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3Jonathan Weiss
 

Mehr von Jonathan Weiss (20)

Docker on AWS OpsWorks
Docker on AWS OpsWorksDocker on AWS OpsWorks
Docker on AWS OpsWorks
 
ChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The HoodChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The Hood
 
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
 
DevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloudDevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloud
 
Amazon SWF and Gordon
Amazon SWF and GordonAmazon SWF and Gordon
Amazon SWF and Gordon
 
Introduction to Backbone.js
Introduction to Backbone.jsIntroduction to Backbone.js
Introduction to Backbone.js
 
Scalarium and CouchDB
Scalarium and CouchDBScalarium and CouchDB
Scalarium and CouchDB
 
Build your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollectiveBuild your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollective
 
NoSQL - Motivation and Overview
NoSQL - Motivation and OverviewNoSQL - Motivation and Overview
NoSQL - Motivation and Overview
 
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBNoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
 
Running on Amazon EC2
Running on Amazon EC2Running on Amazon EC2
Running on Amazon EC2
 
Amazon EC2 in der Praxis
Amazon EC2 in der PraxisAmazon EC2 in der Praxis
Amazon EC2 in der Praxis
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
 
Rails in the Cloud
Rails in the CloudRails in the Cloud
Rails in the Cloud
 
EventMachine
EventMachineEventMachine
EventMachine
 
CouchDB on Rails
CouchDB on RailsCouchDB on Rails
CouchDB on Rails
 
Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2
 
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010
 
CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010
 
NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3
 

An Introduction to Ruby