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

Integración de Rails en el Escritorio con Slingshot

Embed Size (px)

DESCRIPTION

 

Citation preview

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