Top Banner
Offline Arbeiten (wie im letzten Jahrtausend) rails-konferenz.de 2007 Jens-Christian Fischer http://blog.invisible.ch
125

Offline Arbeiten

Nov 17, 2014

Download

Technology

Rails Applikationen Offline nehmen. Ein Überblick über Techniken und vertiefte Betrachtung zu Joyent Slingshot
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Offline Arbeiten

Offline Arbeiten(wie im letzten Jahrtausend)

rails-konferenz.de 2007

Jens-Christian Fischerhttp://blog.invisible.ch

Page 2: Offline Arbeiten

Notizen einer Reise

Page 3: Offline Arbeiten

„The Internet is a series of tubes“– Ted Stevens

Page 4: Offline Arbeiten

Das Internet wiegt ca. 60 Gramm

http://adamant.typepad.com/seitz/2006/10/weighing_the_we.html

Page 5: Offline Arbeiten
Page 6: Offline Arbeiten
Page 7: Offline Arbeiten
Page 8: Offline Arbeiten
Page 9: Offline Arbeiten
Page 10: Offline Arbeiten
Page 11: Offline Arbeiten
Page 12: Offline Arbeiten
Page 13: Offline Arbeiten
Page 14: Offline Arbeiten
Page 15: Offline Arbeiten
Page 16: Offline Arbeiten

Web No Web

Page 17: Offline Arbeiten

Web No Web

Page 18: Offline Arbeiten

Flugzeug, Bahn, Auto

Beim Kunden (Firewalls)

In der Wüste

...

Offline Szenarios

Page 19: Offline Arbeiten

Lösung 0.1

Page 20: Offline Arbeiten
Page 21: Offline Arbeiten

Lösung 1.0

Page 22: Offline Arbeiten

Lösung 1.0

1986

Page 23: Offline Arbeiten

Lösung 1.0

1986

Page 24: Offline Arbeiten

Lösung 1.0

1986

Lotus Notes 1.0

Page 25: Offline Arbeiten

Replikation

Page 26: Offline Arbeiten

Replikation

Page 27: Offline Arbeiten

Redundanz ist gut

Page 28: Offline Arbeiten

Redundanz ist gut

• keine Relationen

Page 29: Offline Arbeiten

Redundanz ist gut

• keine Relationen

• keine „richtige“ Datenbank

Page 30: Offline Arbeiten

Redundanz ist gut

• keine Relationen

• keine „richtige“ Datenbank

• free-form „Dokumente“

Page 31: Offline Arbeiten

Redundanz ist gut

• keine Relationen

• keine „richtige“ Datenbank

• free-form „Dokumente“

• skaliert nicht

Page 32: Offline Arbeiten

Redundanz ist gut

• keine Relationen

• keine „richtige“ Datenbank

• free-form „Dokumente“

• skaliert nicht

Page 33: Offline Arbeiten

Redundanz ist gut

• keine Relationen

• keine „richtige“ Datenbank

• free-form „Dokumente“

• skaliert nicht

• aber repliziert! (prä Internet)

Page 34: Offline Arbeiten

Telefon

netz

Laptop Benutzer

Server 1

Server 2

beliebige Topologienbeliebig viele Repliken

Page 35: Offline Arbeiten
Page 36: Offline Arbeiten
Page 40: Offline Arbeiten

Realität

Page 41: Offline Arbeiten

Realität

Page 42: Offline Arbeiten

Realität

Page 43: Offline Arbeiten

Offline Lösungen

• Adobe Integrated Runtime (AIR)

• Google Gears

• Joyent Slingshot

Page 44: Offline Arbeiten

AIR

Page 45: Offline Arbeiten

AIR

Flash standalone

Page 46: Offline Arbeiten

AIR

Flash standaloneFlash!

Page 47: Offline Arbeiten

AIR

Flash standaloneFlash!

Offline Möglichkeiten

Page 48: Offline Arbeiten

AIR

Flash standaloneFlash!

Offline Möglichkeiten (roll your own)

Page 49: Offline Arbeiten

Google Gears

Page 50: Offline Arbeiten
Page 51: Offline Arbeiten
Page 52: Offline Arbeiten
Page 53: Offline Arbeiten

The Rails Way?

Page 54: Offline Arbeiten

Slingshot

• Lokaler Applikationsserver (mongrel)

• Datenbank (SQLite)

• Applikation mit Webbbrowser (Mac OS X, Windows)

• Desktop Integration (Drag & Drop)

Page 55: Offline Arbeiten

Demo

legacy Rails Applikation

Page 56: Offline Arbeiten

Demo

legacy Rails Applikationverschoben

Page 57: Offline Arbeiten

Implementation

Page 58: Offline Arbeiten

hic sunt dracones

Page 59: Offline Arbeiten

Appsvn co http://svn.joyent.com/slingshot/osx

Page 60: Offline Arbeiten

To-Do Liste

• Datenbank anpassen

• SyncController

• Sync Up / Sync Down

• Haare ausreissen

• HTTP Authentication

• Drag & Drop

• Packaging

Page 61: Offline Arbeiten

DatenbankAlle synchronisierten Tabellen müssen created_at und updated_at Spalten enthalten

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

Timezone...

Page 62: Offline Arbeiten
Page 63: Offline Arbeiten

SyncController

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

Page 64: Offline Arbeiten

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

Page 65: Offline Arbeiten

Sync Controller

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

Page 66: Offline Arbeiten

Sync Controller

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

Tasc

Page 67: Offline Arbeiten

Down Sync Testen

Page 68: Offline Arbeiten

Down Sync TestenArwen:~/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

Page 69: Offline Arbeiten

Down Sync TestenArwen:~/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/syncresponse.body <?xml version="1.0" encoding="UTF-8"?><SlingshotDown> <CurrentMigration>2</CurrentMigration> <SyncTime>Wed Jun 20 20:27:26 UTC 2007</SyncTime> <ValidIDBlock>customers,1projects,1tasks,1users,1

Page 70: Offline Arbeiten

Lokal bearbeitenArwen:~/dev/rtime-s/VM/trunk jcf$ ruby script/server

Slingshot

Server

Page 71: Offline Arbeiten

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_upSyncing upward/Users/jcf/dev/rtime-s/VM/trunk/config/..offline mode is #<Tasc:0x2482320><SlingshotUp><CreatedRecords><tascs><tasc> <billable type="boolean">true</billable> <created-at type="datetime">2007-06-21T08:16:44Z</created-at> <description>blubber</description>

Page 72: Offline Arbeiten
Page 73: Offline Arbeiten

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?

Page 74: Offline Arbeiten

Replikationskonflikt

Page 75: Offline Arbeiten

Replikationskonflikt

Page 76: Offline Arbeiten

id

Page 77: Offline Arbeiten

42

Page 78: Offline Arbeiten
Page 79: Offline Arbeiten

e9638f8c-200c-11dc-a6c3-0016cb8a850e

Page 80: Offline Arbeiten

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

Page 81: Offline Arbeiten

DB Adapter hacking

Page 82: Offline Arbeiten

DB Adapter hacking

Page 83: Offline Arbeiten

DB Setup

Page 84: Offline Arbeiten

DB Setup

Page 85: Offline Arbeiten

DB Setup

Page 86: Offline Arbeiten

DB Setup

Page 87: Offline Arbeiten

Model

Page 88: Offline Arbeiten

Slingshot Hackinglib/slingshot.rb

Page 89: Offline Arbeiten

Slingshot Hackinglib/slingshot.rb

Page 90: Offline Arbeiten
Page 91: Offline Arbeiten
Page 92: Offline Arbeiten
Page 93: Offline Arbeiten

Der Weg ist das Ziel

Page 94: Offline Arbeiten

== AddSlinghotColumns: migrating ==============================================-- add_column(:customers, :created_at, :datetime)rake aborted!SQLite3::SQLException: near "ADD": syntax error: ALTER TABLE customers ADD "created_at" datetime

Gotcha?

unterschiedliche Version von SQLite3 auf derEntwicklungsmaschine und im Slingshot Verzeichnis

$ source jenv.sh

Page 95: Offline Arbeiten

Gotcha 2

• Beim synchronisieren in die lokale DB wird AR.save aufgerufen

• Aufpassen auf Validierungen, before_create, before_save etc...

Page 96: Offline Arbeiten

Gotcha 3

Page 97: Offline Arbeiten

Gotcha 3

Page 98: Offline Arbeiten

Gotcha 3

Page 99: Offline Arbeiten

Gotcha 4

ActiveRecord::Base.default_timezone = :utc

Page 100: Offline Arbeiten

Gut

Page 101: Offline Arbeiten

Gutes funktioniert

Page 102: Offline Arbeiten

Gutes funktioniert

(irgendwann)

Page 103: Offline Arbeiten

Gutes funktioniert

(irgendwann)Windows & Mac Version

Page 104: Offline Arbeiten

Gutes funktioniert

(irgendwann)Windows & Mac Version

OpenSource

Page 105: Offline Arbeiten

Gutes funktioniert

(irgendwann)Windows & Mac Version

OpenSource(irgendwann)

Page 106: Offline Arbeiten

Schlecht

Page 107: Offline Arbeiten

Schlecht

Applikation ist 100MB gross

Page 108: Offline Arbeiten

Schlecht

Applikation ist 100MB gross(noch)

Page 109: Offline Arbeiten

Schlecht

Applikation ist 100MB gross(noch)

Sehr primitives Syncing

Page 110: Offline Arbeiten

Schlecht

Applikation ist 100MB gross(noch)

Sehr primitives Syncingkeine Auflösung von Konflikten

Page 111: Offline Arbeiten

Schlecht

Applikation ist 100MB gross(noch)

Sehr primitives Syncingkeine Auflösung von Konflikten

kein erkennen von Konflikten

Page 112: Offline Arbeiten

Vorwärts in die Vergangenheit

Page 113: Offline Arbeiten

Vorwärts in die Vergangenheit

verteilte Datenhaltung und Abgleich sind keine trivialen Probleme...

Page 114: Offline Arbeiten

Vorwärts in die Vergangenheit

verteilte Datenhaltung und Abgleich sind keine trivialen Probleme...

vor allem in relationalen Datenbanken

Page 115: Offline Arbeiten

Vorwärts in die Vergangenheit

verteilte Datenhaltung und Abgleich sind keine trivialen Probleme...

vor allem in relationalen Datenbanken

Page 116: Offline Arbeiten

Einsatzgebiete (heute)

Page 117: Offline Arbeiten

Einsatzgebiete (heute)

Single User Anwendungen (ToDo Liste)

Page 118: Offline Arbeiten

Einsatzgebiete (heute)

Single User Anwendungen (ToDo Liste)strikte Trennung der generierten /

bearbeiteten Daten (Zeiterfassung)

Page 119: Offline Arbeiten

Einsatzgebiete (heute)

Single User Anwendungen (ToDo Liste)strikte Trennung der generierten /

bearbeiteten Daten (Zeiterfassung)File Upload / Download (Drag & Drop)

Page 120: Offline Arbeiten

Einsatzgebiete (morgen)

Page 121: Offline Arbeiten

Einsatzgebiete (morgen)

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

Page 122: Offline Arbeiten

Einsatzgebiete (morgen)

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

Überall, Immer, Jederzeit

Page 124: Offline Arbeiten

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.

Page 125: Offline Arbeiten