viernes, 23 de marzo de 2012

Maeda, Lean, Git, Juan Gris

De la conferencia de Masa Maeda en la UPC (2012/03/22):
  • Más o menos, Kanban es a Lean como Scrum es a Agile.
  • Para hacer algo, con el tiempo se ha ido considerando más cosas:
    • $
    • $, tiempo
    • $, tiempo, calidad
    • $, tiempo, calidad, valor
  • Lo que para alguien es molestia, para otro puede tener valor, al significar, por ejemplo, una oportunidad de trabajo (resolviendo la molestia), diversión (viendo con otros ojos la molestia), etc.
    El valor de algo no es algo propio de ese algo, depende del punto de vista del usuario.
  • "Valor es la ganancia de un beneficio tangible o intangible"
  • "Calidad es la entrega exitosa del valor esperado"
    Exitoso: Si tiene un impacto económico positivo.
    Un producto corriente, que dura más y funciona mejor que lo que esperábamos, ¿tendría, entonces, una especie de calidad?
  • Innovación es la creación de algo nuevo que tiene éxito comercial.
  • En Lean, una de las premisas principales es eliminar desperdicio.
    Pero, ¿qué es el desperdicio? Revisando el concepto de valor, algo que es desperdicio desde un punto de vista, podría no serlo desde otro.
  • Ubiquitous Innovation: La innovación puede ocurrir en cualquier lugar (no sólo en el departamento de innovación).
  • Niveles de innovación:
    • Mejoras
    • Soluciones
    • Metasoluciones
      Algo que puede eliminar la necesidad de la solución inicial.
  • Hay que cultivar un ambiente favorable a la innovación.
    • Simplicidad
      El logro del efecto máximo con los medios mínimos.
    • Liderazgo
      • Un líder no es un comandante, sino un facilitador.
      • El líder conoce algo de psicología:
        • La gente es importante
        • Inteligencia emocional
        • Honestidad
        • Humildad
        • Responsabilidad
      • "No gestiones el proyecto, gestiona a la gente"
    • Propósito
    • Incluir arte, que sea simple, que sea hermosa.
    • Usar herramientas innovadoras que faciliten la innovación. Usar juegos.
    • No tomarse demasiado en serio sino atender lo que es realmente importante.
      La gente debería poder trabajar en camiseta y jeans.
    • No sólo tolerancia, sino aplaudir los errores.
      • "Si no fallo es que no lo estoy intentando lo suficiente"
      • "No hay error humano, sino sistemas que hacen que errar sea fácil"
        Mostrar un error, aceptarlo y procesarlo es la manera de aprender (la única).
      • "Lo importante es fallar exitosamente"
      • "Atrévete a ser tú mismo, aunque sea diferente"
  • Quizás las metodologías agiles fallan cuando se intentan usar literalmente, como recetas.
    No lo son, son conceptos. Sirven de guía.
    Hay una diferencia ente saber algo y entender algo. Se puede saber en qué consiste cada técnica, pero es importante entender el por qué. Entender algo permite adaptarse mejor a los cambios.
    • "Antes de aprender a usar las técnicas es mejor entender la filosofía"
    • "Que el cliente no sólo sepa lo que hacemos sino por qué lo hacemos"
  • No hay definiciones de lo que es Lean o lo que es Agile, sino un conjunto de valores y principios, una forma de pensar y actuar.
    No tener una definición permite la libre evolución, que es lo que precisamente buscan.
    Quizas no sea muy conveniente que una empresa tenga establecidas su "Visión" y "Misión", sino un conjunto de valores y principios, una cultura, y dejar que sea la gente y sus ideas la que determine el rumbo de la organización. Por ejemplo, Semco, de Brasil.
  • Scrum suele ser más prescriptivo. Intenta establecer una nueva forma de organizarse.
  • Kanban suele ser más adaptable. Intenta entender cómo se está organizado, aclara el panorama y ayuda a ir por mejores caminos.
  • Masa K. Maeda :
Con Git:
  • Para revertir un commit:
    git revert commit_hash
    donde commit_hash puede ser los primeros 7 dígitos del hash del commit
    ejemplo: git revert 6541737
    luego hay que dejar un mensaje, como cuando se hace commit
    el revert también aparece en el log
  • Para volver un subdirectorio x a la versión del commit:
    rm -rf x/*git checkout x/sospecho que debe haber una manera más práctica de lograr esto
  • Para volver todo al último commit (a diferencia del checkout no hay marcha atrás):
    git reset --hard
    Sin embargo, esto no elimina los archivos que se hayan creado y que no se desean conservar. Para que se eliminen, lo que hago es eliminar todo y hacer luego el reset, como en la nota anterior.
  • Para retroceder un commit:
    git-reset --hard HEAD^
  • Para ver el log con caracteres de ayuda gráfica:
    git log --graph
  • Para agregar un tag con una descripción:
    git tag -a mytag -m "My description"
  • Para listar tags con sus descripciones:
    git tag -l -n1
  • Para ver las branches (ramas), con las descripciones de sus commits:
    git branch -v
  • Para crear un nuevo branch:
    git branch branch_name
  • Para pasarse a un branch:
    git checkout branch_name
  • En el clonado, se copian no sólo la ultima versión sino todas las versiones de la historia.
    Eso puede parecer caro, pero no lo es. Permite funcionar de manera descentralizada y los recursos de red que se liberan son más caros que los recursos locales usados para el almacenamiento extra. 
  • En el merge, se hace fusión automática de las líneas en las que no se observa conflicto de edición. Sin embargo, eso no garantiza que no haya conflicto de intención. ¿Qué tal si mi cambio tiene la intención de un comportamiento diferente al que propone otro programador? Puede ser que no lo implementemos en las mismas líneas y no haya conflictos de edición, pero el resultado puede ser un comportamiento que ninguno de los dos esperaba.
  • Para ir a cierto commit (se recomienda antes hacer commit o reset):
    git checkout commit_hash
  • Para volver a donde se estaba:
    git checkout master
  • Referencias:
Con Drush:
  • Si está instalado backup_migrate, estará disponible un conjunto de comandos adicionales:
    • drush bam-destinations
      lista los destinations
    • drush bam-backups destination
      lista los backups en el destino especificado 
    • drush bam-profiles
      lista los profiles
    • drush bam-backup
      equivalente a drush bb, hace el backup
En Miscelánea:
  • Hoy es el 125 aniversario del nacimiento del pintor español Juan Gris (José Victoriano Gonzales), maestro del cubismo. Google le rinde un homenaje con un doodle.
  • Un Speedrun es un jugador que se especializa en cierta parte de un juego de computadora. De modo que varios speedruns se pueden asociar para crear una partida sorprendente. (@Git Magic: Control Distribuído)