Rails Standalone Rails como aplicação desktop por Fabio Akita - 2007 Surgeworks Brazil Rails...
Transcript of Rails Standalone Rails como aplicação desktop por Fabio Akita - 2007 Surgeworks Brazil Rails...
Rails StandaloneRails StandaloneRails como aplicação desktop
por Fabio Akita - 2007Surgeworks Brazil Rails Practice Manager
Rails como aplicação desktop por Fabio Akita - 2007
Surgeworks Brazil Rails Practice Manager
Obs.Obs.
Software inacabado
Discussão de idéias e conceitos
Por quê?Por quê?
Força de Vendas
Suporte e manutenção
Coleta de Dados
Regiões sem cobertura
Quiosques
RequerimentosRequerimentos
O usuário precisa trabalhar offline
A aplicação precisa ser atualizada
Os dados precisam ser sincronizados
Problema 1Offline
Problema 1Offline
Ruby2ExeRuby2Exe
Ruby em Tar
Tar com bootstrap
Ruby2ExeRuby2Exe
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
JoyentJoyent
SlingshotSlingshot
Interface de Usuário (Mac e Win)
Encapsulamento de Apps. Ruby
Suporte a Rails (Mongrel)
Agora Open Source
EstruturaEstrutura
AplicaçãoAplicação
MongrelMongrel
Embedded BrowserEmbedded Browser
GUIGUI
SlingshotSlingshot
Problema 2AtualizaçãoProblema 2Atualização
Open SourceOpen Source
Open SourceOpen Source
SubversionSubversion
Problema 3SincronizaçãoProblema 3
Sincronização
ID Name Age
Usuário 1
ID Name Age
Usuário 2
ID Name Age
Servidor
ID Name Age
1 David 25
Usuário 1
ID Name Age
Usuário 2
ID Name Age
Servidor
ID Name Age
1 David 25
Usuário 1
ID Name Age
1 Steve 55
Usuário 2
ID Name Age
Servidor
ID Name Age
1 David 25
Usuário 1
ID Name Age
1 Steve 55
Usuário 2
ID Name Age
1 David 25
1 Steve 55
Servidor
ID Name Age
1 David 25
Usuário 1
ID Name Age
1 Steve 55
Usuário 2
ID Name Age
1 David 25
1 Steve 55
Servidor
Google GearsGoogle Gears
Sincronização servidor-cliente
Não é replicação bi-direcional
Melhor para apps. tipo “Readers”
Melhor como “cache” offline
ProblemasProblemas
Primary Keys sequenciais
Rastreamento
Identificação
Comunicação
Transferência de dados
Alex MacCawAlex MacCaw
Acts As SyncableActs As Syncable
Primary Keys sequenciais
Rastreamento
Identificação
Comunicação
Transferência de dados
Primary KeysPrimary Keys
gem install uuidtools
>> UUID.timestamp_create().to_s
=> "7030ef1c-4c60-11dc-861f-0016cbcc6803"
UUIDUUID
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
ID Name Age7030ef1c-4c60-11dc-861f-
0016cbcc6803 David 25
Usuário 1
ID Name Age0886defc-4c61-11dc-861f-
0016cbcc6803 Steve 55
Usuário 2
ID Name Age7030ef1c-4c60-11dc-861f-
0016cbcc6803 David 250886defc-4c61-11dc-861f-
0016cbcc6803 Steve 55
Servidor
RastreamentoRastreamento
Slingshot
RastreamentoRastreamento
Polymorphic AssociationPolymorphic Association
Polymorphic AssociationPolymorphic Association
id Title
Post
id post_id Comment
Comments
crud id type deleted_id
Syncs
id Title
1000 New Post
Post
id post_id Comment
Comments
crud id type deleted_id
create 1000 Post
Syncs
id Title
1000 New Post
Post
id post_id Comment
2000 1000 Hello World!
Comments
crud id type deleted_id
create 1000 Post
create 2000 Comment
Syncs
id Title
1000 New Post
Post
id post_id Comment
2000 1000 Hello World!
2010 1000 Hello Again!
Comments
crud id type deleted_id
create 1000 Post
create 2000 Comment
create 2010 Comment
Syncs
id Title
1000 Editing Title
Post
id post_id Comment
2000 1000 Hello World!
2010 1000 Hello Again!
Comments
crud id type deleted_id
create 1000 Post
create 2000 Comment
create 2010 Comment
update 1000 Post
Syncs
id Title
1000 Editing Title
Post
id post_id Comment
2010 1000 Hello Again!
Comments
crud id type deleted_id
create 1000 Post
create 2000 Comment
create 2010 Comment
update 1000 Post
destroy 2000 Comment 2000
Syncs
id Title
1000 Editing Title
Post
id post_id Comment
2010 1000 Hello!
Comments
crud id type deleted_id
create 1000 Post
create 2000 Comment
create 2010 Comment
update 1000 Post
destroy 2000 Comment 2000
update 2010 Comment
Syncs
IdentificaçãoIdentificação
UserStampUserStamp
ComunicaçãoComunicação
ComunicaçãoComunicação
Transferência de Dados
Transferência de Dados
ProcessoProcesso
HandshakeHandshake
GET /syncs/handshake.yaml
HandshakeHandshake
GET /syncs/handshake.yaml
session_idchallenge_key
HandshakeHandshake
GET /syncs/handshake.yaml
session_idchallenge_key
POST /syncs/handshake.yaml?client_id=&challenge_response=
HandshakeHandshake
GET /syncs/handshake.yaml
session_idchallenge_key
POST /syncs/handshake.yaml?client_id=&challenge_response=
99/99/9999T99:99:99
DownloadDownload
GET /syncs/handshake.yaml
session_idchallenge_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
DownloadDownload
GET /syncs/handshake.yaml
session_idchallenge_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>
UploadUpload
GET /syncs/handshake.yaml
session_idchallenge_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>POST /syncs/up.yaml?
syncs=<YAML::Object>
RequerimentosRequerimentos
O usuário precisa trabalhar offline
A aplicação precisa ser atualizada
Os dados precisam ser sincronizados
SoluçãoSolução
O usuário precisa trabalhar offline
Joyent Slingshot
A aplicação precisa ser atualizada
Os dados precisam ser sincronizados
SoluçãoSolução
O usuário precisa trabalhar offline
Joyent Slingshot
A aplicação precisa ser atualizada
Subversion Client
Os dados precisam ser sincronizados
SoluçãoSoluçã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?Perguntas?www.akitaonrails.comwww.akitaonrails.com
code.google.com/p/actsasreplicacode.google.com/p/actsasreplica
Obrigado!Obrigado!