Rails Standalone Rails como aplicação desktop por Fabio Akita Surgeworks Brazil Rails Practice Manager Rails como aplicação desktop por Fabio Akita 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 O usuário precisa trabalhar offline A aplicação precisa ser atualizada Os dados precisam ser sincronizados
Problema 1 Offline
Ruby2Exe 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
Problema 2 Atualização
Open Source
Subversion
Problema 3 Sincronização
IDNameAge Usuário 1 IDNameAge Usuário 2 IDNameAge Servidor
IDNameAge 1David25 Usuário 1 IDNameAge Usuário 2 IDNameAge Servidor
IDNameAge 1David25 Usuário 1 IDNameAge 1Steve55 Usuário 2 IDNameAge Servidor
IDNameAge 1David25 Usuário 1 IDNameAge 1Steve55 Usuário 2 IDNameAge 1David25 1Steve55 Servidor
IDNameAge 1David25 Usuário 1 IDNameAge 1Steve55 Usuário 2 IDNameAge 1David25 1Steve55 Servidor
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 (Version 4 - Random Numbers) Risco de Duplicar: levar um meteorito na cabeça
IDNameAge 7030ef1c-4c60-11dc-861f-0016cbcc6803 David25 Usuário 1 IDNameAge 0886defc-4c61-11dc-861f-0016cbcc6803 Steve55 Usuário 2 IDNameAge 7030ef1c-4c60-11dc-861f-0016cbcc6803 David defc-4c61-11dc-861f-0016cbcc6803 Steve55 Servidor
Rastreamento Slingshot
Rastreamento
Polymorphic Association
idTitle Post idpost_idComment Comments crudidtypedeleted_id Syncs
idTitle 1000New Post Post idpost_idComment Comments crudidtypedeleted_id create1000Post Syncs
idTitle 1000New Post Post idpost_idComment Hello World! Comments crudidtypedeleted_id create1000Post create2000Comment Syncs
idTitle 1000New Post Post idpost_idComment Hello World! Hello Again! Comments crudidtypedeleted_id create1000Post create2000Comment create2010Comment Syncs
idTitle 1000Editing Title Post idpost_idComment Hello World! Hello Again! Comments crudidtypedeleted_id create1000Post create2000Comment create2010Comment update1000Post Syncs
idTitle 1000Editing Title Post idpost_idComment Hello Again! Comments crudidtypedeleted_id create1000Post create2000Comment create2010Comment update1000Post destroy2000Comment2000 Syncs
idTitle 1000Editing Title Post idpost_idComment Hello! Comments crudidtypedeleted_id create1000Post create2000Comment create2010Comment update1000Post destroy2000Comment2000 update2010Comment Syncs
Identificação
UserStamp
Comunicação
Transferência de Dados
Processo
Handshake GET /syncs/handshake.yaml
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= T99: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= T99:99:99-99:99
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= T99:99:99-99:99 POST /syncs/up.yaml?syncs=
Requerimentos O usuário precisa trabalhar offline A aplicação precisa ser atualizada Os dados precisam ser sincronizados
Solução O usuário precisa trabalhar offline Joyent Slingshot A aplicação precisa ser atualizada Os dados precisam ser sincronizados
Solução O usuário precisa trabalhar offline Joyent Slingshot A aplicação precisa ser atualizada Subversion Client Os dados precisam ser sincronizados
Solução O usuário precisa trabalhar offline Joyent Slingshot A aplicação precisa ser atualizada Subversion Client Os dados precisam ser sincronizados Acts As Replica
Perguntas? code.google.com/p/actsasreplica
Obrigado!