SlideShare ist ein Scribd-Unternehmen logo
Offline Arbeiten
(wie im letzten Jahrtausend)
         rails-konferenz.de 2007

         Jens-Christian Fischer
         http://blog.invisible.ch
Notizen einer Reise
„The Internet is a series of tubes“
                    – Ted Stevens
Das Internet wiegt
    ca. 60 Gramm




http://adamant.typepad.com/seitz/2006/10/weighing_the_we.html
Web No Web
Web No Web
Offline Szenarios

Flugzeug, Bahn, Auto
Beim Kunden (Firewalls)
In der Wüste
...
Lösung 0.1
Lösung 1.0
Lösung 1.0
  1986
Lösung 1.0
  1986
Lösung 1.0
   1986




Lotus Notes 1.0
Replikation
Replikation
Redundanz ist gut
Redundanz ist gut
• keine Relationen
Redundanz ist gut
• keine Relationen
• keine „richtige“ Datenbank
Redundanz ist gut
• keine Relationen
• keine „richtige“ Datenbank
• free-form „Dokumente“
Redundanz ist gut
• keine Relationen
• keine „richtige“ Datenbank
• free-form „Dokumente“
• skaliert nicht
Redundanz ist gut
• keine Relationen
• keine „richtige“ Datenbank
• free-form „Dokumente“
• skaliert nicht
Redundanz ist gut
• keine Relationen
• keine „richtige“ Datenbank
• free-form „Dokumente“
• skaliert nicht

• aber repliziert! (prä Internet)
Laptop Benutzer




               Telefon
                netz




    Server 2



                            Server 1




 beliebige Topologien
beliebig viele Repliken
Lösung nach DHH




http://www.37signals.com/svn/posts/347-youre-not-on-a-
       fucking-plane-and-if-you-are-it-doesnt-matter
Lösung nach DHH




http://www.37signals.com/svn/posts/347-youre-not-on-a-
       fucking-plane-and-if-you-are-it-doesnt-matter
Lösung nach DHH


   f*** you
http://www.37signals.com/svn/posts/347-youre-not-on-a-
       fucking-plane-and-if-you-are-it-doesnt-matter
Realität
Realität
Realität
Offline Lösungen

• Adobe Integrated Runtime (AIR)
• Google Gears
• Joyent Slingshot
AIR
AIR

 Flash standalone
AIR

 Flash standalone
       Flash!
AIR

  Flash standalone
        Flash!
Offline Möglichkeiten
AIR

  Flash standalone
        Flash!
Offline Möglichkeiten
  (roll your own)
Google Gears
The Rails Way?
Slingshot

• Lokaler Applikationsserver (mongrel)
• Datenbank (SQLite)
• Applikation mit Webbbrowser
  (Mac OS X, Windows)
• Desktop Integration (Drag & Drop)
Demo


legacy Rails Applikation
Demo

                  en
                b
legacy Rails Applikation
             ho
          sc
       er
      v
Implementation
hic sunt dracones
App
svn co http://svn.joyent.com/slingshot/osx
To-Do Liste
• Datenbank anpassen
• SyncController
• Sync Up / Sync Down
• Haare ausreissen
• HTTP Authentication
• Drag & Drop
• Packaging
Datenbank
Alle synchronisierten Tabellen müssen
created_at und updated_at Spalten enthalten


Ich bin mir nicht sicher, ob das eine gute Idee
ist...


Timezone...
SyncController

$ ruby script/plugin install ... slingshot_plugin
$ ruby script/generate sync_controller
routes

map.with_options(:controller =>
                  'slingshot_sync') do |sync|
    sync.up   'sync/up', :action => 'up'
    sync.down 'sync/down', :action => 'down'
    sync.log 'sync/log', :action => 'log'
end
Sync Controller




auch in slingshot_task.rake in vendor/plugins...!
Sync Controller


                    Tasc




auch in slingshot_task.rake in vendor/plugins...!
Down Sync Testen
Down Sync Testen
Arwen:~/dev/rtime jcf$ ruby script/server -p 3030
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3030
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3030
Down Sync Testen
Arwen:~/dev/rtime jcf$ ruby script/server -p 3030
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3030
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3030


Arwen:~/dev/rtime-s/VM jcf$ ./bin/sync_down.sh jcf 123456 localhost:3030
(in /Users/jcf/dev/rtime-s/VM/trunk)
Syncing downward
/Users/jcf/dev/rtime-s/VM/trunk/config/..
offline mode is
http://jcf:123456@localhost:3030/sync
response.body <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<SlingshotDown>
  <CurrentMigration>2</CurrentMigration>
  <SyncTime>Wed Jun 20 20:27:26 UTC 2007</SyncTime>
  <ValidIDBlock>customers,1
projects,1
tasks,1
users,1
Lokal bearbeiten
Arwen:~/dev/rtime-s/VM/trunk jcf$ ruby script/server
    Slingsho
               t


                   Server
Up Sync Testen
Arwen:~/dev/rtime-s/VM jcf$ ./bin/sync_up.sh jcf 123456 localhost:3030
(in /Users/jcf/dev/rtime-s/VM/trunk)
** Invoke joyent_slingshot:sync_up (first_time)
** Execute joyent_slingshot:sync_up
Syncing upward
/Users/jcf/dev/rtime-s/VM/trunk/config/..
offline mode is
#<Tasc:0x2482320>
<SlingshotUp>
<CreatedRecords>
<tascs>
<tasc>
  <billable type=quot;booleanquot;>true</billable>
  <created-at type=quot;datetimequot;>2007-06-21T08:16:44Z</created-at>
  <description>blubber</description>
Quiz!

• Was passiert, wenn Änderungen sowohl in
  der lokalen Kopie und auf dem Server
  gemacht werden?
• Was passiert, wenn neue Einträge lokal und
  auf dem Server gemacht werden?
Replikationskonflikt
Replikationskonflikt
id
42
e9638f8c-200c-11dc-
 a6c3-0016cb8a850e
UUID statt ID

   $ sudo gem install uuidtools
   app/helpers/uuidhelper.rb




http://codesnipers.com/?q=node/143&title=Using-UUID/GUID-as-Primary-Key-in-Rails
DB Adapter hacking
DB Adapter hacking
DB Setup
DB Setup
DB Setup
DB Setup
Model
Slingshot Hacking
    lib/slingshot.rb
Slingshot Hacking
    lib/slingshot.rb
Der Weg ist das Ziel
Gotcha?
== AddSlinghotColumns: migrating
==============================================
-- add_column(:customers, :created_at, :datetime)
rake aborted!
SQLite3::SQLException: near quot;ADDquot;: syntax error: ALTER
TABLE customers ADD quot;created_atquot; datetime




   unterschiedliche Version von SQLite3 auf der
 Entwicklungsmaschine und im Slingshot Verzeichnis

                $ source jenv.sh
Gotcha 2

• Beim synchronisieren in die lokale DB wird
  AR.save aufgerufen
• Aufpassen auf Validierungen, before_create,
  before_save etc...
Gotcha 3
Gotcha 3
Gotcha 3
Gotcha 4


ActiveRecord::Base.default_timezone = :utc
Gut
Gut
      es funktioniert
Gut
      es funktioniert
       (irgendwann)
Gut
         es funktioniert
           (irgendwann)
  Windows & Mac Version
Gut
         es funktioniert
           (irgendwann)
  Windows & Mac Version
            OpenSource
Gut
         es funktioniert
           (irgendwann)
  Windows & Mac Version
            OpenSource
           (irgendwann)
Schlecht
Schlecht



    Applikation ist 100MB gross
Schlecht



    Applikation ist 100MB gross
                         (noch)
Schlecht



    Applikation ist 100MB gross
                          (noch)
         Sehr primitives Syncing
Schlecht



     Applikation ist 100MB gross
                           (noch)
          Sehr primitives Syncing
  keine Auflösung von Konflikten
Schlecht



     Applikation ist 100MB gross
                           (noch)
          Sehr primitives Syncing
  keine Auflösung von Konflikten
   kein erkennen von Konflikten
Vorwärts in die Vergangenheit
Vorwärts in die Vergangenheit




verteilte Datenhaltung und Abgleich sind keine
             trivialen Probleme...
Vorwärts in die Vergangenheit




verteilte Datenhaltung und Abgleich sind keine
             trivialen Probleme...
    vor allem in relationalen Datenbanken
Vorwärts in die Vergangenheit




verteilte Datenhaltung und Abgleich sind keine
             trivialen Probleme...
    vor allem in relationalen Datenbanken
Einsatzgebiete (heute)
Einsatzgebiete (heute)

Single User Anwendungen (ToDo Liste)
Einsatzgebiete (heute)

Single User Anwendungen (ToDo Liste)
      strikte Trennung der generierten /
    bearbeiteten Daten (Zeiterfassung)
Einsatzgebiete (heute)

Single User Anwendungen (ToDo Liste)
      strikte Trennung der generierten /
     bearbeiteten Daten (Zeiterfassung)
File Upload / Download (Drag & Drop)
Einsatzgebiete (morgen)
Einsatzgebiete (morgen)

 Beliebige Web 1.0, 1.5 und Web
        2.0 (beta) Anwendungen
Einsatzgebiete (morgen)

 Beliebige Web 1.0, 1.5 und Web
        2.0 (beta) Anwendungen


       Überall, Immer, Jederzeit
Ressourcen

http://developer.joyent.net
http://invisible.ch/projects/rtime/branches/slingshot
http://blog.invisible.ch
jcf@invisible.ch
Photo Credits
•   road: http://flickr.com/photos/glennharper/49536169/

•   Karte: http://www.maphist.nl/ill/glareanus.jpg

•   Beach: http://flickr.com/photos/bryce_edwards/522900051/

•   angel: http://flickr.com/photos/jesst7/396824760/

•   bike: http://flickr.com/photos/vrogy/514733529/

•   devil: http://flickr.com/photos/annia316/312666478/

•   pipes, philosophers stone, bangkor library, bowl, cat cabling, alp-pc: from flickr with
    cc licenses, urls lost in crash - please contact me for proper credits

•   book: iStockPhoto

•   Lotus Notes: IBM Corp.
Offline Arbeiten

Weitere ähnliche Inhalte

Was ist angesagt?

HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas LangeOSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
NETWAYS
 
Admincamp 2016 - Securing IBM Collaboration with TLS (German)
Admincamp 2016 - Securing IBM Collaboration with TLS (German)Admincamp 2016 - Securing IBM Collaboration with TLS (German)
Admincamp 2016 - Securing IBM Collaboration with TLS (German)
Novakenstein
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
Gunther Pippèrr
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
German Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als CodeGerman Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als CodeJan Gehring
 
DOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFS
DOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFSDOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFS
DOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFS
JomaSoft
 
Homebrew
HomebrewHomebrew
Homebrew
Hussein Morsy
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Gunther Pippèrr
 
Unser Weg zum Frankenstack
Unser Weg zum FrankenstackUnser Weg zum Frankenstack
Unser Weg zum Frankenstack
Sascha Vogt
 
IBM Sametime 9.0.1 "basic" (aka. limited use)
IBM Sametime 9.0.1 "basic" (aka. limited use)IBM Sametime 9.0.1 "basic" (aka. limited use)
IBM Sametime 9.0.1 "basic" (aka. limited use)
Novakenstein
 
Inside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddlerInside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddler
Max Nowack
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
NETWAYS
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
AOE
 
Docker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebugDocker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebug
Alexander Bohndorf
 
Agorum Core Installation Netzlaufwerke
Agorum Core Installation NetzlaufwerkeAgorum Core Installation Netzlaufwerke
Agorum Core Installation Netzlaufwerkeguest41eb8bd
 
Website Performance
Website PerformanceWebsite Performance
Website Performance
skyfyre
 

Was ist angesagt? (17)

HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas LangeOSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
 
Admincamp 2016 - Securing IBM Collaboration with TLS (German)
Admincamp 2016 - Securing IBM Collaboration with TLS (German)Admincamp 2016 - Securing IBM Collaboration with TLS (German)
Admincamp 2016 - Securing IBM Collaboration with TLS (German)
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
German Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als CodeGerman Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als Code
 
DOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFS
DOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFSDOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFS
DOAG2018 / Oracle DB erfolgreich betreiben auf SPARC/LDoms/Solaris/ZFS
 
Homebrew
HomebrewHomebrew
Homebrew
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
 
Unser Weg zum Frankenstack
Unser Weg zum FrankenstackUnser Weg zum Frankenstack
Unser Weg zum Frankenstack
 
IBM Sametime 9.0.1 "basic" (aka. limited use)
IBM Sametime 9.0.1 "basic" (aka. limited use)IBM Sametime 9.0.1 "basic" (aka. limited use)
IBM Sametime 9.0.1 "basic" (aka. limited use)
 
Inside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddlerInside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddler
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Docker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebugDocker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebug
 
Agorum Core Installation Netzlaufwerke
Agorum Core Installation NetzlaufwerkeAgorum Core Installation Netzlaufwerke
Agorum Core Installation Netzlaufwerke
 
Website Performance
Website PerformanceWebsite Performance
Website Performance
 

Ähnlich wie Offline Arbeiten

Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
Torsten Kleiber
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
Mayflower GmbH
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Gregor Biswanger
 
Rails i18n - Railskonferenz 2007
Rails i18n - Railskonferenz 2007Rails i18n - Railskonferenz 2007
Rails i18n - Railskonferenz 2007
jan_mindmatters
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
André Goliath
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
Jens Siebert
 
SignalR
SignalRSignalR
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
OPEN KNOWLEDGE GmbH
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
johofer
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
Ramon Anger
 
Mehrserver Lösungen
Mehrserver LösungenMehrserver Lösungen
Mehrserver Lösungen
Avarteq
 
Private Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStackPrivate Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStack
Daniel Schneller
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
Ulrich Krause
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
Jan Gehring
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und Ausblick
Amazee Labs
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
Ulrich Krause
 

Ähnlich wie Offline Arbeiten (20)

Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Ruby on Rails SS09 04
Ruby on Rails SS09 04Ruby on Rails SS09 04
Ruby on Rails SS09 04
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
 
Rails i18n - Railskonferenz 2007
Rails i18n - Railskonferenz 2007Rails i18n - Railskonferenz 2007
Rails i18n - Railskonferenz 2007
 
PHP Sucks?!
PHP Sucks?!PHP Sucks?!
PHP Sucks?!
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
SignalR
SignalRSignalR
SignalR
 
Hdc2012 cordova-präsi
Hdc2012 cordova-präsiHdc2012 cordova-präsi
Hdc2012 cordova-präsi
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
 
Mehrserver Lösungen
Mehrserver LösungenMehrserver Lösungen
Mehrserver Lösungen
 
Private Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStackPrivate Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStack
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und Ausblick
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 

Mehr von Jens-Christian Fischer

Beyond HTML Internet Briefing
Beyond HTML Internet BriefingBeyond HTML Internet Briefing
Beyond HTML Internet Briefing
Jens-Christian Fischer
 
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrBeyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Jens-Christian Fischer
 
Architektur der kleinen Bausteine
Architektur der kleinen BausteineArchitektur der kleinen Bausteine
Architektur der kleinen Bausteine
Jens-Christian Fischer
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
Jens-Christian Fischer
 
Mobino at Webmondy Frankfurt, Mai 2011
Mobino at Webmondy Frankfurt, Mai 2011Mobino at Webmondy Frankfurt, Mai 2011
Mobino at Webmondy Frankfurt, Mai 2011
Jens-Christian Fischer
 
Testing distributed, complex web applications
Testing distributed, complex web applicationsTesting distributed, complex web applications
Testing distributed, complex web applications
Jens-Christian Fischer
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
Jens-Christian Fischer
 
Ruby Coding Dojo
Ruby Coding DojoRuby Coding Dojo
Ruby Coding Dojo
Jens-Christian Fischer
 

Mehr von Jens-Christian Fischer (8)

Beyond HTML Internet Briefing
Beyond HTML Internet BriefingBeyond HTML Internet Briefing
Beyond HTML Internet Briefing
 
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrBeyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
 
Architektur der kleinen Bausteine
Architektur der kleinen BausteineArchitektur der kleinen Bausteine
Architektur der kleinen Bausteine
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
 
Mobino at Webmondy Frankfurt, Mai 2011
Mobino at Webmondy Frankfurt, Mai 2011Mobino at Webmondy Frankfurt, Mai 2011
Mobino at Webmondy Frankfurt, Mai 2011
 
Testing distributed, complex web applications
Testing distributed, complex web applicationsTesting distributed, complex web applications
Testing distributed, complex web applications
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
 
Ruby Coding Dojo
Ruby Coding DojoRuby Coding Dojo
Ruby Coding Dojo
 

Offline Arbeiten