Return to Video

Ruby Midwest 2011 - Keynote: Architecture the Lost Years by Robert Martin

  • 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
Title:
Ruby Midwest 2011 - Keynote: Architecture the Lost Years by Robert Martin
Description:

more » « less
Video Language:
English
Team:
Captions Requested
Duration:
01:06:39

Spanish subtitles

Incomplete

Revisions Compare revisions