Alert Dialog There are unsaved changes What would you like to do? Don't Save Cancel Save Rails Standalone Rails como aplicação desktop por Fabio Akita - 2007 Surgeworks Brazil Rails Practice Manager
Obs. Software inacabado Discussão de idéias e conceitos
Por quê? Força de Vendas Suporte e manutenção Coleta de Dados Regiões sem cobertura Quiosques
Requerimentos Internet Cliente Offline O usuário precisa trabalhar offline Servidor Online A aplicação precisa ser atualizada Os dados precisam ser sincronizados
Problema 1 Offline
Ruby2Exe EXE Ruby Tar App Ruby em Tar Tar com bootstrap
Ruby2Exe Problemas Descompacta em dir. temporário Não tem interface de cliente Suporte genérico a Ruby (não a Rails) Melhor para apps. menores
Joyent
Slingshot Interface de Usuário (Mac e Win) Encapsulamento de Apps. Ruby Suporte a Rails (Mongrel) Agora Open Source
Estrutura
Aplicação
Mongrel
Embedded Browser
GUI
Slingshot Sua aplicação Rails GUI Gems Ruby
Problema 2 Atualização
Open Source
Open Source
Subversion
Problema 3 Sincronização
Usuário 1 ID Name Age Usuário 2 ID Name Age Servidor ID Name Age
Usuário 1 ID Name Age 1 David 25 Usuário 2 ID Name Age Servidor ID Name Age
Usuário 1 ID Name Age 1 David 25 Usuário 2 ID Name Age 1 Steve 55 Servidor ID Name Age
Usuário 1 ID Name Age 1 David 25 Usuário 2 ID Name Age 1 Steve 55 Servidor ID Name Age 1 David 25 1 Steve 55
Usuário 1 ID Name Age 1 David 25 Usuário 2 ID Name Age 1 Steve 55 Servidor ID Name Age 1 David 25 1 Steve 55
Google Gears Sincronização servidor-cliente Não é replicação bi-direcional Melhor para apps. tipo Readers Melhor como cache offline
Problemas Primary Keys sequenciais Rastreamento Identificação Comunicação Transferência de dados
Alex MacCaw
Acts As Syncable Primary Keys sequenciais Rastreamento Identificação Comunicação Transferência de dados
Primary Keys gem install uuidtools >> UUID.timestamp_create().to_s => "7030ef1c-4c60-11dc-861f-0016cbcc6803"
UUID 128-bits 1 trilhão de UUIDs / 1 nanoseg. por 10 bilhões de anos RFC 4122 - (Version 4 - Random Numbers) Risco de Duplicar: levar um meteorito na cabeça
Usuário 1 ID Name Age 7030ef1c-4c60-11dc-861f-0016cbcc6803 David 25 Usuário 2 ID Name Age 0886defc-4c61-11dc-861f-0016cbcc6803 Steve 55 Servidor ID Name Age 7030ef1c-4c60-11dc-861f-0016cbcc6803 David 25 0886defc-4c61-11dc-861f-0016cbcc6803 Steve 55
Slingshot Rastreamento
Rastreamento
Polymorphic Association
Polymorphic Association
Post id Title Comments id post_id Comment Syncs crud id type deleted_id
Post id Title 1000 New Post Comments id post_id Comment Syncs crud id type deleted_id create 1000 Post
Post id Title 1000 New Post Comments id post_id Comment 2000 1000 Hello World! Syncs crud id type deleted_id create 1000 Post create 2000 Comment
Post id Title 1000 New Post Comments id post_id Comment 2000 1000 Hello World! 2010 1000 Hello Again! Syncs crud id type deleted_id create 1000 Post create 2000 Comment create 2010 Comment
Post id Title 1000 Editing Title Comments id post_id Comment 2000 1000 Hello World! 2010 1000 Hello Again! Syncs crud id type deleted_id create 1000 Post create 2000 Comment create 2010 Comment update 1000 Post
Post id Title 1000 Editing Title Comments id post_id Comment 2010 1000 Hello Again! Syncs crud id type deleted_id create 1000 Post create 2000 Comment create 2010 Comment update 1000 Post destroy 2000 Comment 2000
Post id Title 1000 Editing Title Comments id post_id Comment 2010 1000 Hello! Syncs crud id type deleted_id create 1000 Post create 2000 Comment create 2010 Comment update 1000 Post destroy 2000 Comment 2000 update 2010 Comment
Identificação
UserStamp
Comunicação
Comunicação
Transferência de Dados
Processo
GET /syncs/handshake.yaml Handshake
Handshake GET /syncs/handshake.yaml session_id challenge_key
Handshake GET /syncs/handshake.yaml session_id challenge_key POST /syncs/handshake.yaml?client_id=&challenge_response=
Handshake GET /syncs/handshake.yaml session_id challenge_key POST /syncs/handshake.yaml?client_id=&challenge_response= 99/99/9999T99:99:99
Download GET /syncs/handshake.yaml session_id challenge_key POST /syncs/handshake.yaml?client_id=&challenge_response= 99/99/9999T99:99:99 POST /syncs/down.yaml&for_when=9999-99-99t99:99:99-99:99
Download GET /syncs/handshake.yaml session_id challenge_key POST /syncs/handshake.yaml?client_id=&challenge_response= 99/99/9999T99:99:99 POST /syncs/down.yaml&for_when=9999-99-99t99:99:99-99:99 <YAML::Object>
Upload GET /syncs/handshake.yaml session_id challenge_key POST /syncs/handshake.yaml?client_id=&challenge_response= 99/99/9999T99:99:99 POST /syncs/down.yaml&for_when=9999-99-99t99:99:99-99:99 POST /syncs/up.yaml?syncs=<yaml::object> <YAML::Object>
Requerimentos Internet Cliente Offline Servidor Online O usuário precisa trabalhar offline A aplicação precisa ser atualizada Os dados precisam ser sincronizados
Solução Internet Cliente Offline Servidor Online O usuário precisa trabalhar offline Joyent Slingshot A aplicação precisa ser atualizada Os dados precisam ser sincronizados
Solução Internet Cliente Offline Servidor Online O usuário precisa trabalhar offline Joyent Slingshot A aplicação precisa ser atualizada Subversion Client Os dados precisam ser sincronizados
Solução Internet Cliente Offline O usuário precisa trabalhar offline Joyent Slingshot A aplicação precisa ser atualizada Subversion Client Os dados precisam ser sincronizados Acts As Replica Servidor Online
Perguntas? www.akitaonrails.com code.google.com/p/actsasreplica
Obrigado!