Integración de Rails en el Escritorio con Slingshot

31
Integración de Rails en el escritorio con Slingshot Juan Lupión II Conferencia Rails Hispana

description

 

Transcript of Integración de Rails en el Escritorio con Slingshot

Page 1: Integración de Rails en el Escritorio con Slingshot

Integración de Rails en el escritorio con Slingshot

Juan Lupión

II Conferencia Rails Hispana

Page 2: Integración de Rails en el Escritorio con Slingshot

Introducción• Introducción

• La máquina virtual Slingshot

• Sincronización

• Demo

• Conclusiones

Page 3: Integración de Rails en el Escritorio con Slingshot

Aplicaciones híbridas

queremos una aplicación independiente del navegador

pero que tenga interfaz web

y que funcione cuando no hay conexión

Page 4: Integración de Rails en el Escritorio con Slingshot

Los Goliat...

Page 5: Integración de Rails en el Escritorio con Slingshot

... y David

Joyent Slingshot

§ Ruby + Rails

§ semiportable: OS X y Windows

§ open source

§ nada que ver con Connector o Accelerator

Page 6: Integración de Rails en el Escritorio con Slingshot

idea básica

desdoblamiento de personalidad

Page 7: Integración de Rails en el Escritorio con Slingshot

La máquina virtual Slingshot• Introducción

• La máquina virtual Slingshot

• Sincronización

• Demo

• Conclusiones

Page 8: Integración de Rails en el Escritorio con Slingshot

En un vistazo

entorno controlado para la ejecución de aplicaciones Rails en el cliente

§ “la maquina virtual Slingshot”

mongrel, SQLite

versiones Mac Intel, Windows

Page 9: Integración de Rails en el Escritorio con Slingshot

Más de cerca

Page 10: Integración de Rails en el Escritorio con Slingshot

Distribución del cliente

Mac OS:

§ mover la aplicación dentro de Slingshot.app

Windows:

§ Instalador NSIS

Page 11: Integración de Rails en el Escritorio con Slingshot

Sincronización

• Introducción

• La máquina virtual Slingshot

• Sincronización

• Demo

• Conclusiones

Page 12: Integración de Rails en el Escritorio con Slingshot

Mecanismo de sincronización

§ el usuario tiene un cuadro de diálogo para configurar la URL del servidor

§ ejecuta un script predeterminado

§ sync_up.sh, sync_down.sh

§ created_at, updated_at , SyncLog

Page 13: Integración de Rails en el Escritorio con Slingshot

sync_down.sh

ruby../bin/rakejoyent_slingshot:sync_downSYNC_CONTROLLER=http://$1:$2@$3/sync

Page 14: Integración de Rails en el Escritorio con Slingshot

Sincronización de bajada en el cliente

Invoca SYNC_CONTROLLER/down en el servidor

recibe fichero XML con

§ registros a borrar, crear, modificar

al terminar, actualiza SyncLog

Page 15: Integración de Rails en el Escritorio con Slingshot

Sincronización de bajada en el servidor

classSlingshotController<ActionController::Baselayoutnil

defdowndata_packet=aggregate_data

iffull_sync=='yes'append_xml(data_packet,filterDate,:full_sync)append_csv(data_packet)elseappend_xml(data_packet,filterDate,:differential_sync)append_csv(data_packet)end

@sync_time=Time.now.utcrespond_todo|format|format.html{render:xml=>wrap_packet}format.xml{render:xml=>wrap_packet}endend

end

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

classSlingshotSyncController<SlingshotControllerbefore_filter:require_http_authenticationdefaggregate_datamodel=[Recipe.find(:all)]end

Page 16: Integración de Rails en el Escritorio con Slingshot

Sincronización de subida

ruby../bin/rakejoyent_slingshot:sync_upSYNC_CONTROLLER=http://$1:$2@$3/sync

Page 17: Integración de Rails en el Escritorio con Slingshot

rake sync_up

evalua timestamp ultimo sync_down

envia objetos creados, actualizados y eliminados desde entonces: SYNC_CONTROLLER/up

ejecuta sync_down otra vez para descargar posibles nuevos contenidos en el servidor

Page 18: Integración de Rails en el Escritorio con Slingshot

rake sync_up

evalua timestamp ultimo sync_down

envia objetos creados, actualizados y eliminados desde entonces: SYNC_CONTROLLER/up

ejecuta sync_down otra vez para descargar posibles nuevos contenidos en el servidor

WTF!!

Page 19: Integración de Rails en el Escritorio con Slingshot

Trasiego de XML

<SlingshotUp><CreatedRecords><recipes><recipe><created‐attype=\"datetime\">2007‐11‐23T02:27:14Z</created‐at><idtype=\"integer\">12</id><name>firstname</name><updated‐attype=\"datetime\">2007‐11‐23T02:27:14Z</updated‐at></recipe><recipe><created‐attype=\"datetime\">2007‐11‐23T02:27:17Z</created‐at><idtype=\"integer\">13</id><name>secondname</name><updated‐attype=\"datetime\">2007‐11‐23T02:27:17Z</updated‐at></recipe></recipes></CreatedRecords><UpdatedRecords></UpdatedRecords><DeletedRecords></DeletedRecords></SlingshotUp>

Page 20: Integración de Rails en el Escritorio con Slingshot

SyncController::up

Recorre árbol XML

Garantiza IDs secuenciales y claves foráneas consistentes

§ modifica documento XML en memoria

§ hack MySQL

beginsingleObject.transactiondonewObject=singleObject.from_xml(elem)newObject.id=nilnewObject.savenewID=newObject.idraiseendrescueend

“Unfortunately ghetto”

Page 21: Integración de Rails en el Escritorio con Slingshot

Drag & Drop

drag

<SlingshotConfig><AppName>Connector</AppName><DropInConfig><FileDrop><Extension>.*</Extension><PostURI>/files_create</PostURI><PostParamName>upload_1</PostParamName><ReturnURI>/files</ReturnURI><Description>file</Description></FileDrop></DropInConfig></SlingshotConfig>

drop??

Page 22: Integración de Rails en el Escritorio con Slingshot

Demo

• Introducción

• La máquina virtual Slingshot

• Sincronización

• Demo

• Conclusiones

Page 23: Integración de Rails en el Escritorio con Slingshot

Conclusiones

• Introducción

• La máquina virtual Slingshot

• Sincronización

• Demo

• Conclusiones

Page 24: Integración de Rails en el Escritorio con Slingshot

Mejoras previstas

componente Proxy

§ detecta estado de conectividad

§ sincroniza automáticamente

§ finaliza la aplicación local cuando hay conexión

XUL Runner

Page 25: Integración de Rails en el Escritorio con Slingshot

Ventajas

ligero para el desarrollador

§ no hay que reescribir

§ entorno conocido: ¡mira, mamá, sin Flash!

§ estable

Page 26: Integración de Rails en el Escritorio con Slingshot

Inconvenientes

§ distribución pesada: +100MB

§ uso memoria VM

§ hágalo usted mismo

§ multiples usuarios

§ actualizaciones, migraciones?

§ timezones?

§ estado general sin pulir

§ error de plantilla en sincronizacion subida

§ no info en errores

§ poca actividad en la comunidad

Page 27: Integración de Rails en el Escritorio con Slingshot

Inconvenientes (y II)

vector de ataques

Page 28: Integración de Rails en el Escritorio con Slingshot

¿Entonces, uso Slingshot para mi proyecto?

Page 29: Integración de Rails en el Escritorio con Slingshot
Page 30: Integración de Rails en el Escritorio con Slingshot

“No hay balas de plata”

Page 31: Integración de Rails en el Escritorio con Slingshot

Preguntas y observaciones