Your SlideShare is downloading. ×
0
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Offline Arbeiten
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Offline Arbeiten

1,765

Published on

Rails Applikationen Offline nehmen. Ein Überblick über Techniken und vertiefte Betrachtung zu Joyent Slingshot

Rails Applikationen Offline nehmen. Ein Überblick über Techniken und vertiefte Betrachtung zu Joyent Slingshot

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,765
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Offline Arbeiten (wie im letzten Jahrtausend) rails-konferenz.de 2007 Jens-Christian Fischer http://blog.invisible.ch
  • 2. Notizen einer Reise
  • 3. „The Internet is a series of tubes“ – Ted Stevens
  • 4. Das Internet wiegt ca. 60 Gramm http://adamant.typepad.com/seitz/2006/10/weighing_the_we.html
  • 5. Web No Web
  • 6. Web No Web
  • 7. Offline Szenarios Flugzeug, Bahn, Auto Beim Kunden (Firewalls) In der Wüste ...
  • 8. Lösung 0.1
  • 9. Lösung 1.0
  • 10. Lösung 1.0 1986
  • 11. Lösung 1.0 1986
  • 12. Lösung 1.0 1986 Lotus Notes 1.0
  • 13. Replikation
  • 14. Replikation
  • 15. Redundanz ist gut
  • 16. Redundanz ist gut • keine Relationen
  • 17. Redundanz ist gut • keine Relationen • keine „richtige“ Datenbank
  • 18. Redundanz ist gut • keine Relationen • keine „richtige“ Datenbank • free-form „Dokumente“
  • 19. Redundanz ist gut • keine Relationen • keine „richtige“ Datenbank • free-form „Dokumente“ • skaliert nicht
  • 20. Redundanz ist gut • keine Relationen • keine „richtige“ Datenbank • free-form „Dokumente“ • skaliert nicht
  • 21. Redundanz ist gut • keine Relationen • keine „richtige“ Datenbank • free-form „Dokumente“ • skaliert nicht • aber repliziert! (prä Internet)
  • 22. Laptop Benutzer Telefon netz Server 2 Server 1 beliebige Topologien beliebig viele Repliken
  • 23. Lösung nach DHH http://www.37signals.com/svn/posts/347-youre-not-on-a- fucking-plane-and-if-you-are-it-doesnt-matter
  • 24. Lösung nach DHH http://www.37signals.com/svn/posts/347-youre-not-on-a- fucking-plane-and-if-you-are-it-doesnt-matter
  • 25. 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
  • 26. Realität
  • 27. Realität
  • 28. Realität
  • 29. Offline Lösungen • Adobe Integrated Runtime (AIR) • Google Gears • Joyent Slingshot
  • 30. AIR
  • 31. AIR Flash standalone
  • 32. AIR Flash standalone Flash!
  • 33. AIR Flash standalone Flash! Offline Möglichkeiten
  • 34. AIR Flash standalone Flash! Offline Möglichkeiten (roll your own)
  • 35. Google Gears
  • 36. The Rails Way?
  • 37. Slingshot • Lokaler Applikationsserver (mongrel) • Datenbank (SQLite) • Applikation mit Webbbrowser (Mac OS X, Windows) • Desktop Integration (Drag & Drop)
  • 38. Demo legacy Rails Applikation
  • 39. Demo en b legacy Rails Applikation ho sc er v
  • 40. Implementation
  • 41. hic sunt dracones
  • 42. App svn co http://svn.joyent.com/slingshot/osx
  • 43. To-Do Liste • Datenbank anpassen • SyncController • Sync Up / Sync Down • Haare ausreissen • HTTP Authentication • Drag & Drop • Packaging
  • 44. 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...
  • 45. SyncController $ ruby script/plugin install ... slingshot_plugin $ ruby script/generate sync_controller
  • 46. 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
  • 47. Sync Controller auch in slingshot_task.rake in vendor/plugins...!
  • 48. Sync Controller Tasc auch in slingshot_task.rake in vendor/plugins...!
  • 49. Down Sync Testen
  • 50. 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
  • 51. 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
  • 52. Lokal bearbeiten Arwen:~/dev/rtime-s/VM/trunk jcf$ ruby script/server Slingsho t Server
  • 53. 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>
  • 54. 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?
  • 55. Replikationskonflikt
  • 56. Replikationskonflikt
  • 57. id
  • 58. 42
  • 59. e9638f8c-200c-11dc- a6c3-0016cb8a850e
  • 60. 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
  • 61. DB Adapter hacking
  • 62. DB Adapter hacking
  • 63. DB Setup
  • 64. DB Setup
  • 65. DB Setup
  • 66. DB Setup
  • 67. Model
  • 68. Slingshot Hacking lib/slingshot.rb
  • 69. Slingshot Hacking lib/slingshot.rb
  • 70. Der Weg ist das Ziel
  • 71. 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
  • 72. Gotcha 2 • Beim synchronisieren in die lokale DB wird AR.save aufgerufen • Aufpassen auf Validierungen, before_create, before_save etc...
  • 73. Gotcha 3
  • 74. Gotcha 3
  • 75. Gotcha 3
  • 76. Gotcha 4 ActiveRecord::Base.default_timezone = :utc
  • 77. Gut
  • 78. Gut es funktioniert
  • 79. Gut es funktioniert (irgendwann)
  • 80. Gut es funktioniert (irgendwann) Windows & Mac Version
  • 81. Gut es funktioniert (irgendwann) Windows & Mac Version OpenSource
  • 82. Gut es funktioniert (irgendwann) Windows & Mac Version OpenSource (irgendwann)
  • 83. Schlecht
  • 84. Schlecht Applikation ist 100MB gross
  • 85. Schlecht Applikation ist 100MB gross (noch)
  • 86. Schlecht Applikation ist 100MB gross (noch) Sehr primitives Syncing
  • 87. Schlecht Applikation ist 100MB gross (noch) Sehr primitives Syncing keine Auflösung von Konflikten
  • 88. Schlecht Applikation ist 100MB gross (noch) Sehr primitives Syncing keine Auflösung von Konflikten kein erkennen von Konflikten
  • 89. Vorwärts in die Vergangenheit
  • 90. Vorwärts in die Vergangenheit verteilte Datenhaltung und Abgleich sind keine trivialen Probleme...
  • 91. Vorwärts in die Vergangenheit verteilte Datenhaltung und Abgleich sind keine trivialen Probleme... vor allem in relationalen Datenbanken
  • 92. Vorwärts in die Vergangenheit verteilte Datenhaltung und Abgleich sind keine trivialen Probleme... vor allem in relationalen Datenbanken
  • 93. Einsatzgebiete (heute)
  • 94. Einsatzgebiete (heute) Single User Anwendungen (ToDo Liste)
  • 95. Einsatzgebiete (heute) Single User Anwendungen (ToDo Liste) strikte Trennung der generierten / bearbeiteten Daten (Zeiterfassung)
  • 96. Einsatzgebiete (heute) Single User Anwendungen (ToDo Liste) strikte Trennung der generierten / bearbeiteten Daten (Zeiterfassung) File Upload / Download (Drag & Drop)
  • 97. Einsatzgebiete (morgen)
  • 98. Einsatzgebiete (morgen) Beliebige Web 1.0, 1.5 und Web 2.0 (beta) Anwendungen
  • 99. Einsatzgebiete (morgen) Beliebige Web 1.0, 1.5 und Web 2.0 (beta) Anwendungen Überall, Immer, Jederzeit
  • 100. Ressourcen http://developer.joyent.net http://invisible.ch/projects/rtime/branches/slingshot http://blog.invisible.ch jcf@invisible.ch
  • 101. 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.

×