-
Not Synced
ayudenme a recibir al tio bob al escenario
-
Not Synced
una de las ventajas de aparecer último
-
Not Synced
es que puedes corregir a los que estubieron antes
-
Not Synced
¡cucumber no es lento!
-
Not Synced
a quien haya dicho eso
-
Not Synced
probando a travez de la UI es lento
-
Not Synced
levantar rails cada ves que ejecutas un test es lento (y también estúpido)
-
Not Synced
eso es lo lento, cucumber es un pequeño paquete muy liviano
-
Not Synced
que hace una pasada con expresiones regulares, llama una función y entra y sale rápido
-
Not Synced
cucumber no es lento
-
Not Synced
alguien dijo que sería bueno que nuestra comunidad fuera diversa
-
Not Synced
miremos al rededor de nosotros, ¿Cuál parece ser la característica que se expresa de manera más frecuente que otras?
-
Not Synced
si, bello facial ...
-
Not Synced
bueno, déjenme explicarlo de esta manera
-
Not Synced
si quicieras atraer específicamente a una audiencia más diversa dentro de los desarrolladores
-
Not Synced
algo que quicieras evitar es decir grocerías durante una presentación
-
Not Synced
público: ¡totalmente en desacuerdo! (usando grocerías)
-
Not Synced
no voy a entrar en esa competencia
-
Not Synced
yo sé lo que se debe hacer con los desarrolladores de mala calidad
-
Not Synced
público: ¿lo mismo que con los jefes de proyecto?
-
Not Synced
Bob: no, no lo mismo que con los jefes de proyecto
-
Not Synced
¿y qué es todo eso sobre VIM?
-
Not Synced
quién usa VIM por aquí
-
Not Synced
¡¿Qué mierda les pasa a ustedes gente?!
-
Not Synced
Yo quería dejar de usar ese editor hace años atrás y ahora todo el mundo quiere empezar ausarlo...
-
Not Synced
o bueno...
-
Not Synced
un último comentario sobre eso. ¿Quién ve House?
-
Not Synced
¿A quién le gusta ese programa?
-
Not Synced
ok, ¿Quién de ustedes se identifica con el personaje de House?
-
Not Synced
House es un doctor que es la misma escencia de un imbécil.
-
Not Synced
solo imagínense que es la persona más iracible, negativa, horible y suertuda que puedan imagninar
-
Not Synced
explicó su comportamiento un par de años atrás en uno de los episodios
-
Not Synced
dijo: "soy tan bueno que no pueden desaserce de mi así que soy libre de actuar como me plazca"
-
Not Synced
de hecho es como él mide que tan valioso es
-
Not Synced
prueba su valía haciéndose tan repugnante y luego observando como no lo despiden.
-
Not Synced
porque es simplemente tan bueno.
-
Not Synced
House es un perdedor...
-
Not Synced
tengan esto en mente los que piensen "¡Ah, puedo romer todas las reglas que quiera!"
-
Not Synced
¡Puedo llegar a la hora que quiera e irme a casa a la hora que me plazca! ¡Puedo programar borracho!
-
Not Synced
pues lo siento, House es un perdedor.
-
Not Synced
a propósito, se me ocurrió una regla hace harto tiempo atrás sobre alcohol y programación: "lo mismo que a pilotos"
-
Not Synced
El nombre de esta presentación ... Oh a propósito darles una lección sobre ciencia primero..
-
Not Synced
¿Alguien sigue esto de E-Cat?
-
Not Synced
Bueno, es facinante, ¿si?
-
Not Synced
público: he leído al respecto.
Bob: Has leído al respecto! ok, bueno
-
Not Synced
esto es probablemente un Hoax. Probablemente.
-
Not Synced
Bueno si tubiera que darle una probabilidad, sería como 9/10 para Hoax y 1/10 para verdad,
-
Not Synced
pero el 1/10 me tiene inquieto, por cierto esa no es una de las 7 palabras de las que habla George Carling
-
Not Synced
la idea aqui es hay una persona en Italia cuyo nombre es Andrea Rossi
-
Not Synced
y por varios años ha estado diciendo que puede generar energía
-
Not Synced
mediante hacer pasar hidrógeno calentado sobre Niquel
-
Not Synced
y que los átomos de hidrógeno se fusionan con los de niquel para producir cobre y liberar energía.
-
Not Synced
esta energía se libera en forma de rayos gamma y calor y los rayos gamma pueden ser absorbidos y producir más calor
-
Not Synced
pero no hay otra forma de radiación que sea emitida, aparte de protones, neutrones o electrónes.
-
Not Synced
no es radioactiva, es solo esta reacción nuclear muy interesante.
-
Not Synced
Por supuesto que la mayoría de los científicos recuerda el horrible fiasco de la fusión en frío en 1989
-
Not Synced
todos muy escepticos, pero el dice "no, lo puedo hacer y puedo probarlo".
-
Not Synced
El 28 de octubre juntó a un grupo de profesores, a alguien que comparía su generador de 1Mw
-
Not Synced
juntó a un montón de reporteros e inició este generador y logró hacer hervir muchos litros de agua
-
Not Synced
400kw o 400kw hora de energía, no recuerdo, un montón de agua que hirvió
-
Not Synced
y luego apagó la máquina y el cliente inmediatamente pagó por el generador
-
Not Synced
y aun todo esto está rodeado de un montón de secreto ... hay un catalizador
-
Not Synced
del que el no habla al respecto, no nos cuenta que es...
-
Not Synced
Probablemente una mentira (Hoax), probablemente muy bueno para ser verdad.
-
Not Synced
Pero, alomejor no...
-
Not Synced
Investiguen sobre esto, es interesante. Quizás sea mentira ...
-
Not Synced
sea muy bueno para ser verdad... yo miro muchas cosas que parecen ser muy buenas para ser verdad
-
Not Synced
y digo "bueno, parecen muy buenas para ser vedad", pero luego veo a mi señora ...
-
Not Synced
¡Así es como obtienes diversidad en un grupo!
-
Not Synced
Lo que miran en pantalla es la estructura de alto nivel
-
Not Synced
de una aplicación Rails que hace algún tiempo atrás escribí
-
Not Synced
denle una mirada a los directorios ¿Qué es lo que ven?
-
Not Synced
bueno, ven controllers y esperan ver controllers en una aplicación Rails cierto?
-
Not Synced
y ven models y ven views y algunas otras cosas como helpers y util
-
Not Synced
bueno pueden ir al spec de por aquí porque por supuesto es dirigida por tests
-
Not Synced
¿Quién hace desarrollo guiado por pruebas?
-
Not Synced
hmmm vamos a tener que conversar...
-
Not Synced
pueden ver que también hay pruebas de controllers, models, bla bla bla, ok
-
Not Synced
¿Que es lo que ven?
-
Not Synced
si fuera a mostrarles esto y no les digiera que es una aplicación Rails
-
Not Synced
¿Podrían reconocer que de hecho es una aplicación Rails?
-
Not Synced
oh, si, se ve como una aplicación Rails. Bueno, quizás haya otros tipos
-
Not Synced
de aplicaciones que tengan esta estructura de directorios
-
Not Synced
pero es una aplicación Rails, así que ahora mi pregunta a Uds. es:
-
Not Synced
¿Porqué la estructura de alto nivel en la aplicación debiera comunicarte esto?
-
Not Synced
¿Qué es lo que la aplicación hace?
-
Not Synced
No hay ninguna pista aquí
-
Not Synced
"Substitute" es el nombre del proyecto
-
Not Synced
bueno, eso no es muy útil
-
Not Synced
aparentemente el nombre del cliente es "Angela", quizás...
-
Not Synced
pero nada en el alto nivel de la aplicación, el nivel más visible, al cual todos van primero
-
Not Synced
nada aquí habla sobre lo que la aplicación hace.
-
Not Synced
Es inmediatamente reconocible como una aplicación rails
-
Not Synced
así que quizás lo más importante sobre esta aplicación es el framework sobre el que está construido.
-
Not Synced
Y sobre el resto no nos preocupamos mucho.
-
Not Synced
Rails es un framework Web, ¿Qué es la web?
-
Not Synced
¡Gracias! ¡Si! es un mecanismo de entrega (es lo que dice en el slide)
-
Not Synced
La web es un detalle, la web no es particularmente importante para tu aplicación
-
Not Synced
la web es simplemente la forma en la que tu aplicación obtiene información del usuario
-
Not Synced
y devuelve información hacia el usuario. La web es una tubería.
-
Not Synced
No es nada más que una tubería. No es la estructura central de tu aplicación
-
Not Synced
No es la gran estructura que define tu aplicación y la convierte en lo que es.
-
Not Synced
La web es solo un tonto detalle.
-
Not Synced
y aún así, domina nuestro código.
-
Not Synced
Podemos observar una aplicación web y saber que es una aplicación web
-
Not Synced
a causa de ese directorio de controllers. No otro tipo de aplicación tendría
-
Not Synced
un directorio controllers en el nivel superior, especialmente si hay modelos y views al rededor
-
Not Synced
vamos a hablar sobre Model View Controller (MVC) y la horrible bastardización que ha ocurrido con él
-
Not Synced
vean este dibujo de alto nivel de una librería (de libros)
-
Not Synced
si no tubiera la palabra "librería" en el título podrías mirar esto y decir
-
Not Synced
" hay una gran entrada por acá, hay unas oficinas, eso parece un escritorio, donde la gente podría llegar y registrar cosas"
-
Not Synced
"parece que allí hay algunas estanterías, oh, parece que eso es una librería"
-
Not Synced
La estructura de alto nivel en una librería te mostraría que es una librería.
-
Not Synced
o ¿Qué tal una iglesia?
-
Not Synced
¿Hay siquiera una tenue duda de que eso es una iglesia?
-
Not Synced
tienes una gran entrada, puedes ver el altar, puedes ver los confesionarios.
-
Not Synced
¡Esta es una iglesia!
-
Not Synced
La estructura de alto nivel de este edificio grita su propósito a quien lo mira,
-
Not Synced
pero la estructura de alto nivel de mi aplicación Rails no grita su propósito.
-
Not Synced
grita cuál es el framework con el que fue contruído. grita Rails.
-
Not Synced
Esto es muy bueno para DHH no tan bueno para ti.
-
Not Synced
¿Por qué esto sucede?
-
Not Synced
¿Por qué creamos arquitecturas que reflejan el framework que a su vez reflejan el mecanismo de entrega
-
Not Synced
y no reflejan la aplicación?
-
Not Synced
¿Acaso no estamos construyendo una aplicación que tiene un propósito?
-
Not Synced
¿No es la arquitectura acerca del propósito?
-
Not Synced
Ciértamente lo es desde el punto de vista de la construcción. No es también cierto del ...
-
Not Synced
oh, es mi señora que me llama ... disculpen, aparé mi teléfono.
-
Not Synced
¿En qué estaba?
-
Not Synced
¡Graciás! ¿Acaso no es la arquitectura de la aplicación completamente sobre el propósito de ésta ?
-
Not Synced
¿Porqué no debiéramos ver ese propósito al nivel más alto del código?
-
Not Synced
El año era 1993
-
Not Synced
Esta persona, llamada Ivar Jacobson escribió un libro: "Ingeniería de software orientada al objeto"
-
Not Synced
"Una aproximación desde los casos de uso"
-
Not Synced
¿Qué estaba sucediendo en 1993?
-
Not Synced
¡No había web! la web aun no había nacido o quizás lo había hecho, quizás, no recuerdo
-
Not Synced
una persona escribió una página web y luego se expandió como fuego
-
Not Synced
pero no había web en el momento todos estábamos haciendo C++ o C o alguna cosa horrenda como esas
-
Not Synced
haciendo aplicaciones de clientes pesados
-
Not Synced
Y aquí llega este sujeto y escribe este libro y es un libro facinante
-
Not Synced
y resuelve el problema de la arquitectura
-
Not Synced
no es el primero en hacerlo, no será el último, pero en este libro
-
Not Synced
habla sobre como obtener el propósito de la aplicación en el nivel superior
-
Not Synced
que sea la abstracción principal sobre la que construímos.
-
Not Synced
El lo llamó "una aproximación dirigida por los casos de uso"
-
Not Synced
¿Qué es un caso de uso?
-
Not Synced
bueno eso es un caso de uso
-
Not Synced
nada muy espectacular sobre ellos
-
Not Synced
es decir, le das un nombre, hablas un poco sobre los datos que es pasada
-
Not Synced
hacia el caso de uso "crear orden", el id de cliente, alguna info de contacto del cliente
-
Not Synced
y algunas otras cosas
-
Not Synced
hablas un poco sobre como el sistema va a responder cuando obtenga esta solicitud
-
Not Synced
"el operador ejecuta un comando "Crear Orden" con los datos anteriores"
-
Not Synced
"el sistema valida todos los datos"
-
Not Synced
bla bla bla, es solo un conjunto de frases simples
-
Not Synced
que describen cómo el sistema responde cuando el usuario hace esta pequeña acción
-
Not Synced
y tiene unos comportamientos alternativos en casos excepcionales
-
Not Synced
solo formas de controlar errores y otras cosas
-
Not Synced
y Jacobson utiliza varias páginas de su libro solo para describir lo que esto es
-
Not Synced
¿Quién ha hecho casos de usos antes?
-
Not Synced
Alguien recuerda esto? wow varios de ustedes.
-
Not Synced
¿Cuál es la diferencia entre un caso de uso y una historia de usuario?
-
Not Synced
si, el nombre.
-
Not Synced
Son básicamente lo mismo solo que la historia de uso
-
Not Synced
comienza como algo muy pequeño y evoluciona en un caso de uso.
-
Not Synced
gradualmente tomamos la historia de usuario que comienza como una frase
-
Not Synced
y durante el curso del proyecto agregamos un par de frases a el y lo
-
Not Synced
convertimos en algo que se ve como esto típicamente a través pruebas de aceptación
-
Not Synced
y luego implementamos el caso de uso
-
Not Synced
Lo que Jacobson dijo fue "miren, esta es la abstracción central de su aplicación, así que eso podría ser un objeto"
-
Not Synced
El lo llamó un controller, yo lo llamaría un objeto interactor.
-
Not Synced
Lo llamaría así para que no se confundieran con MVC
-
Not Synced
así que sus objetos controller son mis interactors
-
Not Synced
son objetos que implementan un caso de uso.
-
Not Synced
los interactors tienen reglas específicas de negocio para la aplicación
-
Not Synced
¿Qué significa tener reglas específicas de negocio para la aplicación?
-
Not Synced
¡No pueden estar en un framework! ¡Claramente!
-
Not Synced
van a ser reglas de negocio que estás colocando por el propósito de la aplicación
-
Not Synced
¿Que sería una regla de negocio no específica de la aplicación?
-
Not Synced
Una regla que no fuera específica a la aplicación.
-
Not Synced
Bueno, puedes tenerlas, puedes tener...
-
Not Synced
Perdón!
-
Not Synced
Entidades
-
Not Synced
Entidades que representan objetos de negocio
-
Not Synced
que pueden pertenecer a más de una aplicación
-
Not Synced
y en cada aplicación en la que la entidad apareciera podría
-
Not Synced
encapsular las mismas reglas
-
Not Synced
así que colocas lógica de negocio agnóstica de la aplicación en tus entidades
-
Not Synced
y colocas reglas de negocio específicas de la aplicación en interactors
-
Not Synced
y noten que hay una dependencia entre ellos.
-
Not Synced
El interactor sabe sobre la entidad.
-
Not Synced
Bueno, que sería una entidad, algo como una orden, o un cliente.
-
Not Synced
o, programadores Rails, ¿Qué harían con algo como esto?
-
Not Synced
¿Cómo lo llamarían?
-
Not Synced
¿En qué directorio tendría que colocarse?
-
Not Synced
En el directorio de modelos... no no iría ah!
-
Not Synced
¡No iría en el directorio de modelos!
-
Not Synced
¿Qué es lo que va en el directorio de modelos?
-
Not Synced
cosas que derivan de ...
-
Not Synced
¿Que?
-
Not Synced
no importa...
-
Not Synced
¿Que cosas derivarían de ActiveRecord?
-
Not Synced
¿Los modelos?
-
Not Synced
¿Los modelos derivan desde ActiveRecord?
-
Not Synced
Bueno, ¡Estas entidades no las quiero derivando de ActiveRecord!
-
Not Synced
Estas entidades están desacopladas de la base de datos
-
Not Synced
también los interactors, no saben nada de la base de datos
-
Not Synced
no saben nada sobre mecanismos de entrega
-
Not Synced
son agnósticos a todas esas cosas, estas son reglas de negocio.
-
Not Synced
reglas de negocio específicas de la aplicación en interactors y agnósticas en entities.
-
Not Synced
bien aisladas del resto de la aplicación
-
Not Synced
¿Cómo obtenemos la data dentro y fuera de los interactors y las entities?
-
Not Synced
y Jacobson tenía una respuesta para esto también, decía:
-
Not Synced
"usaremos fronteras"
-
Not Synced
son esencialmente interfaces, son protocolos o interfaces.
-
Not Synced
en Java los haríamos interfaces, en .Net serían interfaces
-
Not Synced
en Ruby no serían nada
-
Not Synced
pero aún estarían allí, conceptualmente, escondiéndose tras bambalinas.
-
Not Synced
un conjunto de métodos invocados por interactors o por componentes
-
Not Synced
del otro lado de la frontera con el propósito de lograr algo
-
Not Synced
y con esto establecido tenemos los tres objetos en el modelo de Jacobson
-
Not Synced
y escribió un libro completo de esto un libro facinante.
-
Not Synced
pero esos son las tres partes centrales del modelo Jacobson
-
Not Synced
tenemos un montón de interactors
-
Not Synced
donde cada uno representa un caso de uso
-
Not Synced
tenemos un montón de entities
-
Not Synced
cada una representando un objeto de negocio
-
Not Synced
todas las reglas de negocios van aquí
-
Not Synced
¿Que pasa con validación?
-
Not Synced
cosas que tienen que ejecutarse en el navegador
-
Not Synced
cosas en javascript, ¿No son esas reglas de negocio?
-
Not Synced
¿Pueden ejecutarse en estos objetos?
-
Not Synced
no lo harán, van a ejecutarse en un computador distinto...
-
Not Synced
probablemente en el computador del usuario
-
Not Synced
van a ejecutarse en un lenguaje distinto: javascript
-
Not Synced
van a estar a un lado, ¿Significa que no son parte de este modelo?
-
Not Synced
Aun son parte de este modelo
-
Not Synced
solo que están ejecutandose en otra máquina y escritos en otro lenguaje
-
Not Synced
pero están tan desacopladas como el resto de las partes, ya que tratamos
-
Not Synced
de tener todas las reglas de negocios desacopladas.
-
Not Synced
aquí está el diagrama completo
-
Not Synced
tenemos algún mecanismo de entrega, que habla con el usuario.
-
Not Synced
por cierto, tengo lásers aquí.
-
Not Synced
tienes que tener lásers.
-
Not Synced
No dejen que llegue a sus ojos!
-
Not Synced
es uno bastante brillante
-
Not Synced
y tengo uno rojo
-
Not Synced
y tengo este otro
-
Not Synced
no lo puedes ver, oh ahi casi se puede ver
-
Not Synced
que tal ahí
-
Not Synced
nahh, no se ve bien
-
Not Synced
virtualmente desaparece
-
Not Synced
ehh, uno de estos va a servir
-
Not Synced
uh, este es brillante
-
Not Synced
que tal ese
-
Not Synced
ese es aun más brillante!
-
Not Synced
que tal este, algo brillante..
-
Not Synced
que tal este
-
Not Synced
miren son todos brillantes
-
Not Synced
¿Que color es este láser?
-
Not Synced
puedes verlo un poco en mi reloj
-
Not Synced
¿Pueden ver eso?
-
Not Synced
¿No es cool?
-
Not Synced
¿Qué color es este láser?
-
Not Synced
Es un láser ultra violeta
-
Not Synced
un poco de tinte aun está en el violeta pero la mayoría de la energía
-
Not Synced
que sale es ultra violeta
-
Not Synced
¿Que tan cool es eso?
-
Not Synced
tengo un láser UV
-
Not Synced
No se que hará por mí, todo lo que puedo hacer es
-
Not Synced
hacer que mis lentes queden negros
-
Not Synced
pero ...
-
Not Synced
que tal el rojo
-
Not Synced
tenemos un usuario aquí que va a interactuar con la aplicación
-
Not Synced
a travez del mecanismo de entrega
-
Not Synced
¿Cuál es el mecanismo de entrega?
-
Not Synced
¡No me importa!
-
Not Synced
¡No me importa cual es el mecanismo de entrega!
-
Not Synced
puede ser la web, puede ser clientes pesados, puede ser una aplicación de consola
-
Not Synced
puede ser un conjunto de servicios web
-
Not Synced
¡No me importa!
-
Not Synced
y quiero que se mantenga así
-
Not Synced
no me interesa cual sea el mecanismo de entrega, voy a tener el mecanismo de entrega
-
Not Synced
hablando conmigo a través de una interface desde la cual mis interactors van a derivar
-
Not Synced
mis interactors luego van a cachear la data que viene desde el usuario a través del
-
Not Synced
mecanismo de entrega. Mi interactor impondrá lógica de negocio específica
-
Not Synced
irá a mis entidades que encapsulan lógica no específica
-
Not Synced
y tendrémos harto trabajo interesante hecho, luego juntará harta data de vuelta
-
Not Synced
enviandola de vuelta por las fronteras hacia el mecanismo de entrega llegandole al final al usuario
-
Not Synced
noten la dirección de las dependencias justo aquí
-
Not Synced
el mecanismo de entrega depende de la frontera
-
Not Synced
nada hacia la derecha del mecanismo de entrega depende de él.
-
Not Synced
no hay ninguna dependencia terminando en el mecanismo de entrega
-
Not Synced
lo que significa que puedo tomar toda esta parte
-
Not Synced
y colcarla en una gema (gem)
-
Not Synced
o una dll si son programadores .Net
-
Not Synced
o un .jar si son programadores Java
-
Not Synced
puedo tomar eso y colocarlo en un lugar completamente desacoplado de todo lo demás
-
Not Synced
y puedo hacer que el mecanismo de entrega sea un plug-in para mi aplicación.
-
Not Synced
imagínense lo que eso significa para ustedes
-
Not Synced
si el mecanismo de entrega fuera un plug-in para sus aplicaciones.
-
Not Synced
eso implicaría que ustedes no tendrían que incorporarlo
-
Not Synced
cuándo no quicieras incorporar el mecanismo de entrega?
-
Not Synced
¿Cuando estás ejecutando test!
-
Not Synced
¡digamos que es cucumber!
-
Not Synced
Este mecanismo de entrega de ahí, ¡Digamos que es cucumber!
-
Not Synced
¿Que tan rápido dirías que eso se ejecuta?
-
Not Synced
bueno va tan rápido como puede, ya que no hay ningún sistema web
-
Not Synced
no hay web servers, no HTML, todo el javascript sucede en otra parte
-
Not Synced
no hay web server o parecido aquí
-
Not Synced
ahí está cucumber
-
Not Synced
puedes hacer que tus tests ejecuten muy muy rápido
-
Not Synced
así que sigamos el camino
-
Not Synced
un usuario decide que necesita interactuar con el sistema
-
Not Synced
así que el usuario tiene una buena idea, llega al sistema
-
Not Synced
escribe un montón de cosas en el teclado, este es un ambiente web, quizás
-
Not Synced
no importa
-
Not Synced
el mecanismo de entrega de alguna manera captura lo que el usuario quiere
-
Not Synced
quizás en un formulario, quizás en alguna ventana, a quien le importa
-
Not Synced
quizás en la linea de comando, no me importa
-
Not Synced
el mecanismo de entrega eventualmente obtiene todos los datos que requirere
-
Not Synced
y crea un modelo de solicitud. (Request Model)
-
Not Synced
que es esto, es una estructura de datos, no tiene métodos
-
Not Synced
es solo un conjunto de datos simples
-
Not Synced
nada dentro de esta estructura de datos parece que siquiera viene de la web
-
Not Synced
no puedes ver esta estructura y decir "oh esto debe venir de la web"
-
Not Synced
no hay ids de sesión, nada de todo lo otro
-
Not Synced
solo un conjunto de datos que representan la solicitud
-
Not Synced
eso va a través de la frontera
-
Not Synced
hacia el iteractor
-
Not Synced
ahora el interactor la tiene y es aun una tonta estructura de datos
-
Not Synced
pero el interactor sabe que hacer con ella
-
Not Synced
obtiene toda la información interesante del request model
-
Not Synced
y luego va a tener que ejecutar
-
Not Synced
¿Qué es lo que hace? habla con los objetos de entidad
-
Not Synced
hay una bonita interacción, a todo esto por eso lo llamamos un interactor
-
Not Synced
porque interactúa con las entidades
-
Not Synced
también interactúa con el usuario
-
Not Synced
es lo que como se diría, une todas las piezas
-
Not Synced
así que el interactor le indica a las entidades "haz esto, lo otro , aquello"
-
Not Synced
finalmente el interactor termina
-
Not Synced
y ha creado un modelo de resultado (Result Model)
-
Not Synced
¿Qué es un result model?
-
Not Synced
Una estructura de datos!
-
Not Synced
no tiene nada más dentro, no hay métodos, nada
-
Not Synced
solo un montón de tontos datos, nada dentro podría indicar
-
Not Synced
que es para la web, solo un montón de tontos datos
-
Not Synced
que luego envía a través de la frontera y le permite al mecanismo de entrega
-
Not Synced
como presentar este resultado el usuario
-
Not Synced
así que cuando ejecutas un test con cucumber aquí
-
Not Synced
el test de cucumber está creando la estructura de datos
-
Not Synced
está invocando en interactor correspondiente llendo a través de la frontera
-
Not Synced
toda la magia pasa en este lado, las reglas de negocio son invocadas
-
Not Synced
un modelo de respuesta es creado y se devuelve mediante el
-
Not Synced
mecanismo de entrega hacia cucumber y ahora puedes probar
-
Not Synced
todas las reglas de negocio y todos los casos de uso
-
Not Synced
de tu aplicación, y todo lo que tu aplicación hace
-
Not Synced
en el lado derecho del mecanismo de entrega,
-
Not Synced
sin tener el mecanismo de entrega presente
-
Not Synced
¿Por qué es esto importante?
-
Not Synced
¿Porqué querríamos hacer esto?
-
Not Synced
Bueno, primero que todo, si fueras a mirar esta parte del código
-
Not Synced
¿Qué crees que verías?
-
Not Synced
cuáles serían los nombres de estos directorios
-
Not Synced
interactors, boundaries (fronteras) y entidades
-
Not Synced
alguien tiene cerebro aquí .. bien
-
Not Synced
y si fueras dentro de los interactors
-
Not Synced
¿Que crees que verías dentro?
-
Not Synced
¿Como estarían nombrados?
-
Not Synced
"crear orden", eso es interesante no?
-
Not Synced
"crear orden", "agregar item a una orden"
-
Not Synced
"enviar orden", "eliminar orden"
-
Not Synced
"entregar orden", tendrían los nombres de los casos de uso
-
Not Synced
así que al nivel más alto de la aplicación verían una estructura
-
Not Synced
que se vería como el propósito de la aplicación
-
Not Synced
(diapositiva: ¿Que pasa con MVC?)
-
Not Synced
Que pasa con Model View Controller
-
Not Synced
¿No es esta la arquitectura de la web?
-
Not Synced
¿Desde donde sale esto?
-
Not Synced
oh, necesito cambiar la diapositiva
-
Not Synced
denme un segundo
-
Not Synced
Esta persona ¿Quién sabe como se llama?
-
Not Synced
oh, no era mi intensión poner el puntero entre sus ojos!
-
Not Synced
¿Quién es este tipo?
-
Not Synced
¡es Trygve! ¿Cuál es su apellido?
-
Not Synced
¡Reenskaug! tampoco lo puedo pronunciar, ¡Pero probablemente tu puedes!
-
Not Synced
Trygve Reenskaug
-
Not Synced
Que es el inventor de Model View Controller
-
Not Synced
lo inventó en 1979
-
Not Synced
si recuerdo correctamente
-
Not Synced
Probablemente sea el primer patrón de diseño al que se le puso nombre
-
Not Synced
Model View Controller
-
Not Synced
y fue una idea muy interesante y una idea muy simple
-
Not Synced
vamos a tener un modelo, que sería un modelo de alguna entidad de negocio
-
Not Synced
es donde colocamos las reglas de negocio
-
Not Synced
y el controller obtiene datos del usuario y la vista despliega información al usuario
-
Not Synced
esas son las bases de model view controller
-
Not Synced
Hay aquí una relación "observer" que es el motivo
-
Not Synced
por lo que lo dibujé con doble flecha
-
Not Synced
así que View observa el Model
-
Not Synced
y cuando el model cambia la vista
-
Not Synced
automáticamente representa este cambio
-
Not Synced
Esto fue escrito ... ¿En que lenguaje?
-
Not Synced
Smalltalk
-
Not Synced
Si hubiera una pantalla en smalltalk
-
Not Synced
que tubiera un montón de cosas en ella
-
Not Synced
¿Cuántas Views creen que habría?
-
Not Synced
cientos
-
Not Synced
Si tubieras cien cosas en pantalla, habrían cien Views
-
Not Synced
Porque este patrón de diseño fue pensado para ser usado en pequeño
-
Not Synced
cada pequeña widget en la pantalla tenía un controller, un model y una view
-
Not Synced
cada rectángulo, cada círculo, cada pequeña cosa en la pantalla
-
Not Synced
tenía sus propios model, controller y view
-
Not Synced
era un mecanismo pensado para ser usado en lo pequeño
-
Not Synced
y se replicacía una y otra vez
-
Not Synced
hemos cambiado eso de manera significativa
-
Not Synced
en el mundo Web hemos decidido que la pantalla entera es un View
-
Not Synced
bueno, esa no era la intención aquí
-
Not Synced
y ¿Cuántos modelos una vista conoce?
-
Not Synced
cientos!
-
Not Synced
Hemos mantenido la idea de los modelos
-
Not Synced
pero la View .. eh, tengo una imágen, la voy mostrar
-
Not Synced
¿Alguien reconoce esta imagen?
-
Not Synced
oh, nuestros objetos de negocio están por aquí
-
Not Synced
en los modelos, tenemos un conjunto de controllers
-
Not Synced
los controllers vailan tratando de controlar todos los modelos
-
Not Synced
"oh tengo toda esta data desde la web"
-
Not Synced
"voy a desempacar todo esto de la web"
-
Not Synced
"voy a decirle a esos objetos de negocio que hacer"
-
Not Synced
y los objetos de negocio hacen cosas
-
Not Synced
y luego en controller debe decir
-
Not Synced
"ok, que es lo que hicieron"
-
Not Synced
y debe recolectar toda la información
-
Not Synced
y pasarla a la View
-
Not Synced
y la View está esperando, escrita en un
-
Not Synced
horrible y bastardizado lenguaje
-
Not Synced
no puedes saber si es HTML o Ruby o quién sabe que cosa
-
Not Synced
y ¡Está accediendo a los objetos de negocio!
-
Not Synced
Tu View
-
Not Synced
Tus Views no debieran saber nada
-
Not Synced
sobre los objetos de negocio
-
Not Synced
tus Views debieran estar completamente divorciada de los objetos de negocio
-
Not Synced
No debieran siquiera saber que los objetos de negocio existen
-
Not Synced
tus controllers no debieran saber sobre los objetos de negocio
-
Not Synced
debieran estar completamente divorciados de eso
-
Not Synced
la comunicación entre los controllers y los views
-
Not Synced
son esas interesantes estructuras de datos
-
Not Synced
imaginen un controller
-
Not Synced
que obtiene un request HTTP
-
Not Synced
Aquí está nuestro request HTTP
-
Not Synced
cargado de datos
-
Not Synced
a todo esto, tengo que decir esto...
-
Not Synced
la web es probablemente la peor idea que ha sucedido
-
Not Synced
a nuestra industria en los últimos 40 años
-
Not Synced
(dificultades técnicas)
-
Not Synced
.... para entregar datos
-
Not Synced
Puede ser lo mejor que tengamos, pero está bastante podrida
-
Not Synced
debe haber un patrón en el que podamos hacer esto
-
Not Synced
la web...
-
Not Synced
¿Alguien ha hecho algo de programación para el 3270?
-
Not Synced
¿Reconoces esto?
-
Not Synced
Esto no es nada más que programación para 3270
-
Not Synced
y no voy a decir que en esteroides
-
Not Synced
es más como en estricnina (pesticida)
-
Not Synced
es programacíon para el 3270 envenenada con
-
Not Synced
cantidades de basura
-
Not Synced
¿Cuántos lenguajes debes saber para escribir una aplicación web?
-
Not Synced
tienes que saber, bueno, algún lenguaje de programación, pero es incidental
-
Not Synced
Ruby, Java, como séa
-
Not Synced
Luego debes saber HTML, CSS, Javascript, esto, lo otro
-
Not Synced
y esta persona de aquí dice "Creemos comunidades nivelando hacia arriba"
-
Not Synced
¿¡Nivelando hacia arriba!?
-
Not Synced
(ndt: no se entiende esta broma, está en un acento muy local)
-
Not Synced
No estamos ayudando a nuesta causa con este verdaderamente terrible
-
Not Synced
mecanismo que hemos adoptado
-
Not Synced
en todo caso, este es el request HTTP
-
Not Synced
llega al servidor web, pasa por un mecanismo enrutador que no importa,
-
Not Synced
es solo decodificar un monton de slashes y nombres
-
Not Synced
uh, podemos llamarlo REST supongo, como sea
-
Not Synced
aquí llega el controller y el controller es ejecutado por algo
-
Not Synced
en el servidor web que hace todo eso
-
Not Synced
y el controller maneja todos los datos del formulario o como sea
-
Not Synced
y lo coloca en el request model
-
Not Synced
no habla con ningún objeto de negocio
-
Not Synced
solo es una pequeña estructura de datos
-
Not Synced
y listo
-
Not Synced
no tiene nada más que hacer
-
Not Synced
cómo una última acción lo empuja por una interface
-
Not Synced
hacia un interactor
-
Not Synced
y el interactor hace lo que tenga que hacer
-
Not Synced
crea un response model
-
Not Synced
y el response model finalmente es pasado a través de un boundary
-
Not Synced
a un presentador
-
Not Synced
ahora, el trabajo de un presentador
-
Not Synced
ahora el trabajo del presentador, a todo esto
-
Not Synced
alguno de ustedes quizás conozca este patrón de diseño
-
Not Synced
Model View Presenter
-
Not Synced
El trabajo del presentador es tomar este modelo agnóstico
-
Not Synced
este modelo de todos los resultados del que no tiene idea como representar
-
Not Synced
y su objetivo es convertirlo en otra estructura de datos llamado ViewModel
-
Not Synced
que ha sido preparado para la web
-
Not Synced
¿Cómo preparas algo para la web?
-
Not Synced
lo llenas de basura
-
Not Synced
como por ejemplo si vas a desplegar la vista en una grilla
-
Not Synced
organizas los datos en una estructura tabular
-
Not Synced
no una que sepa sobre la web, solo una que sepa que es una grilla
-
Not Synced
en la pantalla quizás haya menúes algunos que estén deshabilitados
-
Not Synced
debieran haber booleanos aquí que digan si esos menús están deshabilitados o no
-
Not Synced
quizás hayan botones en la pantalla que tienen nombres
-
Not Synced
y estos puedan cambiar dependiendo del estado el sistema
-
Not Synced
esos nombres debieran estar en el ViewModel
-
Not Synced
así que en el final la View es este realmente estúpido pedazo de código
-
Not Synced
le pasas el ViewModel
-
Not Synced
y todo lo que la View hace es "coloca eso ahi, eso allá, eso otro acá, ok listo"
-
Not Synced
tan estúpido que no necesitas probarlo con pruebas unitarias
-
Not Synced
no necesitas escribir pruebas unitarias para esas cosillas tontas
-
Not Synced
que la View debe hacer
-
Not Synced
Así es como me gusta lidear con probar vistas
-
Not Synced
no lo hago
-
Not Synced
me aseguro de que no hay necesidad
-
Not Synced
simplemente no hay necesidad de probar esto de por aquí
-
Not Synced
o bueno, si hay algún test de aceptación que dependa de la interactividad de la View
-
Not Synced
realizo un par de test de aquellos y si, van a través de la interfaz de usuario
-
Not Synced
o quizas hago muchos de esos, pero en todo caso
-
Not Synced
no voy a probar todo esto otro, entrando de por aquí abajo (apuntando al View)
-
Not Synced
Si estoy probando reglas de negocio voy a escojer la interfaz más rápida que tenga
-
Not Synced
aquí está toda la enchilada
-
Not Synced
sin las entidades, me gusta dejarlas aparte
-
Not Synced
tenemos los interactors
-
Not Synced
estos hablan con las entidades
-
Not Synced
tenemos nuestras interfaces de frontera
-
Not Synced
los iteractors usan el request model y crean el response model
-
Not Synced
el presenter usa el response model y crea un ViewModel
-
Not Synced
el controller crea el request model
-
Not Synced
y toda esta cosa a la derecha de la línea
-
Not Synced
puede ser puesta en un .jar
-
Not Synced
y lo que está a la izquierda de la línea
-
Not Synced
puede ser puesto en otro .jar
-
Not Synced
y los puedes interconectar
-
Not Synced
si quieres
-
Not Synced
no tienes para qué
-
Not Synced
yo sé que estás pensando "ah pero tengo que hacer mi trabajo"
-
Not Synced
y si, tienes que hacer tu trabajo
-
Not Synced
así que dime cómo es tu día
-
Not Synced
primero, ¿Cuánto toma ejecutar tus test?
-
Not Synced
¡Demasiado! buena respuesta
-
Not Synced
¿Que tanto?
-
Not Synced
¡4 minutos y medio! ¿De inicio a término?
-
Not Synced
es bueno, ¿Cuantos test hay?
-
Not Synced
miles, wow, 4 minutos y miles de tests
-
Not Synced
es un buen tiempo
-
Not Synced
si es 4 minutos y medio estoy contento con eso
-
Not Synced
¿Quien tiene algo más largo?
-
Not Synced
¿Hora y media?
-
Not Synced
eso no está bien
-
Not Synced
¿atrás?
-
Not Synced
28 minutos
-
Not Synced
¿Cuántos tests?
-
Not Synced
¿Demasiados?
-
Not Synced
¿Demasiados? bueno, esa es una respuesta psicológica interesante
-
Not Synced
28 minutos, ¿Por qué?, porque hay muchos tests, hummm
-
Not Synced
y si hay muchos tests, ¿Que tendrías que hacer?
-
Not Synced
"necesitamos deshacernos de los test"
-
Not Synced
"toman mucho en ejecutar", este es el síntoma que ocurre, ¿Cierto?
-
Not Synced
"Saben, esta cosa de hacer pruebas no funciona"
-
Not Synced
"osa, con todo que toma ejecutar los tests, solo nos demora más"
-
Not Synced
"si solo pudiéramos programar y entregar"
-
Not Synced
¿Que pasa con la base de datos?
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced
-
Not Synced