Una corta introducción para el principio de diseño conocodo como: HAcer los estados invalidos imposibles de representar.
Charla para el #PyBirrasTenerife2022
Introduction to BDD (Behavior-Driven Development)Juan Rodríguez
The document provides an introduction and overview of Behavior Driven Development (BDD). It defines BDD as an extension of Test Driven Development (TDD) that uses a simple domain-specific scripting language structured like natural language to ensure projects deliver business needs while meeting requirements. The document outlines some key BDD concepts like features, scenarios, steps defined by keywords like Given, When, Then. It also discusses differences between BDD and TDD, focusing more on functionality than code and using specifications in natural language. An example feature file is provided and steps are taken to set up a basic BDD test with Behave and write the first failing test.
Vue.js: El framework javascript para mugglesJuan Rodríguez
Este documento presenta una introducción a Vue.js, un framework JavaScript reactivo. Explica conceptos como el patrón MVVM, data binding, componentes, directivas como v-if y v-for, y cómo Vue.js puede usarse para crear interfaces reactivas de forma simple y flexible. También compara Vue.js con otros frameworks como Angular y React, y argumenta que Vue.js es una buena opción para desarrolladores frontend debido a su tamaño ligero y facilidad de uso.
Python/C, CTypes, SWIG y Cython son opciones para acceder a código C desde Python. Python/C permite escribir código C directamente, mientras que CTypes, SWIG y Cython generan código intermediario. CTypes no requiere compilación pero tiene menos soporte para C++. SWIG y Cython generan código pero requieren compilación. Cython ofrece la mejor optimización al compilar código Python en C.
Viaje al centro de la locura con JavascriptJuan Rodríguez
Presentación para la charla "Viaje al centro de la locura con Javascript", dada en la Tenerife Lan Party 2016, en la sección "El Club del Desarrollador".
El documento presenta diferentes técnicas para manipular fotografías, como recorte, corta y pega, mejora de calidad, y generación de imágenes. También explica métodos para detectar manipulaciones, como buscar halos, inconsistencias en sombras e iluminación, y analizar metadatos EXIF. El objetivo es crear conciencia sobre cómo las fotografías a menudo no muestran la realidad de forma objetiva.
Introduction to BDD (Behavior-Driven Development)Juan Rodríguez
The document provides an introduction and overview of Behavior Driven Development (BDD). It defines BDD as an extension of Test Driven Development (TDD) that uses a simple domain-specific scripting language structured like natural language to ensure projects deliver business needs while meeting requirements. The document outlines some key BDD concepts like features, scenarios, steps defined by keywords like Given, When, Then. It also discusses differences between BDD and TDD, focusing more on functionality than code and using specifications in natural language. An example feature file is provided and steps are taken to set up a basic BDD test with Behave and write the first failing test.
Vue.js: El framework javascript para mugglesJuan Rodríguez
Este documento presenta una introducción a Vue.js, un framework JavaScript reactivo. Explica conceptos como el patrón MVVM, data binding, componentes, directivas como v-if y v-for, y cómo Vue.js puede usarse para crear interfaces reactivas de forma simple y flexible. También compara Vue.js con otros frameworks como Angular y React, y argumenta que Vue.js es una buena opción para desarrolladores frontend debido a su tamaño ligero y facilidad de uso.
Python/C, CTypes, SWIG y Cython son opciones para acceder a código C desde Python. Python/C permite escribir código C directamente, mientras que CTypes, SWIG y Cython generan código intermediario. CTypes no requiere compilación pero tiene menos soporte para C++. SWIG y Cython generan código pero requieren compilación. Cython ofrece la mejor optimización al compilar código Python en C.
Viaje al centro de la locura con JavascriptJuan Rodríguez
Presentación para la charla "Viaje al centro de la locura con Javascript", dada en la Tenerife Lan Party 2016, en la sección "El Club del Desarrollador".
El documento presenta diferentes técnicas para manipular fotografías, como recorte, corta y pega, mejora de calidad, y generación de imágenes. También explica métodos para detectar manipulaciones, como buscar halos, inconsistencias en sombras e iluminación, y analizar metadatos EXIF. El objetivo es crear conciencia sobre cómo las fotografías a menudo no muestran la realidad de forma objetiva.
Este documento describe un ordenador Raspberry Pi, que es pequeño, barato y de bajo consumo energético. Aunque carece de componentes como teclado, ratón y monitor para ser un ordenador completo, puede usarse para muchos propósitos como centro multimedia, máquina recreativa, robot o servidor web. La Fundación Raspberry Pi creó este ordenador para fomentar la enseñanza de la programación y la electrónica.
Este documento discute dos opciones para migrar código de Python 2 a Python 3: 1) migrar todo el código a Python 3 o 2) mantener el código de Python 2 y generar código para Python 3. También sugiere escribir código que funcione en ambas versiones aprovechando las similitudes entre Python 2.6 y versiones posteriores de Python 2 y 3.
Kanban es una técnica de gestión de proyectos que se aplica al desarrollo de software. Se basa en tres principios: 1) visualizar el trabajo mediante un tablero, 2) limitar el trabajo en curso para mejorar el flujo, y 3) gestionar el flujo del trabajo. El objetivo es reducir los tiempos de entrega mediante la limitación del trabajo en curso y la mejora continua del proceso.
02 python Programación orientada a objetos y funcionalJuan Rodríguez
Este documento describe los conceptos básicos de programación orientada a objetos en Python. Explica cómo crear clases, objetos, herencia y polimorfismo. También cubre temas como sobrecarga de operadores, métodos especiales y tratamiento de excepciones.
El documento habla sobre los conceptos básicos del lenguaje de programación Python. Explica que las variables deben empezar con letras no numéricas y pueden contener letras, números y guiones bajos. También menciona los tipos de datos como números, cadenas, listas y diccionarios, y cómo se pueden manipular y operar con ellos. Finalmente, introduce conceptos como condicionales if/else y bucles para controlar el flujo del programa.
Este documento introduce Python. Brevemente describe su historia y cómo fue creado por Guido van Rossum a fines de los 80. Explica las diferencias entre Python 2.7 y 3.x y por qué se usará Python 2.7 en el taller. También resume las ventajas de Python como su desarrollo rápido, simplicidad, legibilidad, ser de código abierto y fácil de extender.
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
Taller de introducción al desarrollo web con Django, impartido en la Tenerife Lan Party 2012.
"Te Interesa desarrollar proyectos para la web? ¿Posees un espíritu perfeccionista, pero siempre te falta tiempo? Entonces lo que necesitas en un framework de desarrollo para web que te quite de encima los problemas y te permita concentrarte en lo realmente importante: tu idea.
Quizá Django pueda ayudarte. Django es código abierto, modular, escrito en Python, y muy potente. En este taller daremos una introducción a Django, e implementaremos desde cero una aplicación web para gestionar los informes secretos de SHIELD. Con registro de usuarios, acceso a base de datos, páginas dinámicas y servicios web. En cuatro horas."
Generación automática de documentos usando Appy/POD
(Codigo fuente disponible con licencia CC-BY en https://bitbucket.org/euribates/presentacion-appy/)
Presentacion Google Mini Adeje 16 Oct 2008Juan Rodríguez
El documento proporciona una introducción al Google Search Appliance/Mini, que permite realizar búsquedas internas dentro de una empresa de forma similar a como funciona Google. Explica que es un hardware con software y licencia de Google que permite indexar documentos internos y ofrecer búsquedas relevantes. Detalla el proceso de instalación, configuración y uso del dispositivo, incluyendo la definición de puntos de inicio, patrones a seguir/excluir y la creación de páginas de búsqueda para los usuarios.
Este documento proporciona recursos útiles para el diseño web organizados en las siguientes categorías: usabilidad, diseño y composición, fotografía, tipografía, logotipos e iconos, colores, JavaScript y utilidades. Incluye enlaces a sitios web populares que ofrecen información, herramientas y contenido gratuito sobre cada una de estas áreas importantes del diseño web.
Hojas de estilo CSS (Cascade Style Sheets)Juan Rodríguez
El documento introduce las hojas de estilo en cascada (CSS), explicando que permiten modificar la apariencia de páginas web de forma sencilla. CSS ofrece ventajas como consistencia en el estilo, mayor control sobre la apariencia y optimización. Una hoja de estilos contiene reglas formadas por selectores y declaraciones que definen el estilo. Existen diferentes formas de aplicar CSS a una página, como en línea, de forma interna o externa mediante un archivo vinculado.
La Extranet es una colección de recursos y aplicaciones disponibles para usuarios externos del parlamento, utilizando el mismo sistema de seguridad que la Intranet pero manteniendo los usuarios en conjuntos separados, de modo que los usuarios de Intranet pueden acceder a la Extranet pero no a la inversa. El esquema básico de seguridad permite a los usuarios internos acceder a la Intranet, Extranet e Internet, mientras que los usuarios externos solo pueden acceder a la Extranet e Internet.
El Observatorio ciudadano Irapuato ¿Cómo vamos?, presenta el
Reporte hemerográfico al mes de mayo de 2024
Este reporte contiene información registrada por Irapuato ¿cómo vamos? analizando los medios de comunicación tanto impresos como digitales y algunas fuentes de información como la Secretaría de Seguridad ciudadana.
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIOAaronPleitez
linea de tiempo del antiguo testamento donde se detalla la cronología de todos los eventos, personas, sucesos, etc. Además se incluye una parte del periodo intertestamentario en orden cronológico donde se detalla todo lo que sucede en los 400 años del periodo del silencio. Basicamente es un resumen de todos los sucesos desde Abraham hasta Cristo
Este documento ha sido elaborado por el Observatorio Ciudadano de Seguridad Justicia y Legalidad de Irapuato siendo nuestro propósito conocer datos sociodemográficos en conjunto con información de incidencia delictiva de las 10 colonias y/o comunidades que del año 2020 a la fecha han tenido mayor incidencia.
Existen muchas más colonias que presentan cifras y datos en materia de seguridad, sin embargo, en este primer acercamiento lo que se prevées darle al lector una idea de como se encuentran las colonias analizadas, tomando como referencia los datos del INEGI 2020, datos del Secretariado Ejecutivo del Sistema Nacional de Seguridad Pública del 2020 al 2023 y las bases de datos propias que desde el 2017 el Observatorio Ciudadano ha recopilado de manera puntual con datos de las vıć timas de homicidio doloso, accidentes de tránsito, personas lesionadas por arma de fuego, entre otros indicadores.
Este documento describe un ordenador Raspberry Pi, que es pequeño, barato y de bajo consumo energético. Aunque carece de componentes como teclado, ratón y monitor para ser un ordenador completo, puede usarse para muchos propósitos como centro multimedia, máquina recreativa, robot o servidor web. La Fundación Raspberry Pi creó este ordenador para fomentar la enseñanza de la programación y la electrónica.
Este documento discute dos opciones para migrar código de Python 2 a Python 3: 1) migrar todo el código a Python 3 o 2) mantener el código de Python 2 y generar código para Python 3. También sugiere escribir código que funcione en ambas versiones aprovechando las similitudes entre Python 2.6 y versiones posteriores de Python 2 y 3.
Kanban es una técnica de gestión de proyectos que se aplica al desarrollo de software. Se basa en tres principios: 1) visualizar el trabajo mediante un tablero, 2) limitar el trabajo en curso para mejorar el flujo, y 3) gestionar el flujo del trabajo. El objetivo es reducir los tiempos de entrega mediante la limitación del trabajo en curso y la mejora continua del proceso.
02 python Programación orientada a objetos y funcionalJuan Rodríguez
Este documento describe los conceptos básicos de programación orientada a objetos en Python. Explica cómo crear clases, objetos, herencia y polimorfismo. También cubre temas como sobrecarga de operadores, métodos especiales y tratamiento de excepciones.
El documento habla sobre los conceptos básicos del lenguaje de programación Python. Explica que las variables deben empezar con letras no numéricas y pueden contener letras, números y guiones bajos. También menciona los tipos de datos como números, cadenas, listas y diccionarios, y cómo se pueden manipular y operar con ellos. Finalmente, introduce conceptos como condicionales if/else y bucles para controlar el flujo del programa.
Este documento introduce Python. Brevemente describe su historia y cómo fue creado por Guido van Rossum a fines de los 80. Explica las diferencias entre Python 2.7 y 3.x y por qué se usará Python 2.7 en el taller. También resume las ventajas de Python como su desarrollo rápido, simplicidad, legibilidad, ser de código abierto y fácil de extender.
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
Taller de introducción al desarrollo web con Django, impartido en la Tenerife Lan Party 2012.
"Te Interesa desarrollar proyectos para la web? ¿Posees un espíritu perfeccionista, pero siempre te falta tiempo? Entonces lo que necesitas en un framework de desarrollo para web que te quite de encima los problemas y te permita concentrarte en lo realmente importante: tu idea.
Quizá Django pueda ayudarte. Django es código abierto, modular, escrito en Python, y muy potente. En este taller daremos una introducción a Django, e implementaremos desde cero una aplicación web para gestionar los informes secretos de SHIELD. Con registro de usuarios, acceso a base de datos, páginas dinámicas y servicios web. En cuatro horas."
Generación automática de documentos usando Appy/POD
(Codigo fuente disponible con licencia CC-BY en https://bitbucket.org/euribates/presentacion-appy/)
Presentacion Google Mini Adeje 16 Oct 2008Juan Rodríguez
El documento proporciona una introducción al Google Search Appliance/Mini, que permite realizar búsquedas internas dentro de una empresa de forma similar a como funciona Google. Explica que es un hardware con software y licencia de Google que permite indexar documentos internos y ofrecer búsquedas relevantes. Detalla el proceso de instalación, configuración y uso del dispositivo, incluyendo la definición de puntos de inicio, patrones a seguir/excluir y la creación de páginas de búsqueda para los usuarios.
Este documento proporciona recursos útiles para el diseño web organizados en las siguientes categorías: usabilidad, diseño y composición, fotografía, tipografía, logotipos e iconos, colores, JavaScript y utilidades. Incluye enlaces a sitios web populares que ofrecen información, herramientas y contenido gratuito sobre cada una de estas áreas importantes del diseño web.
Hojas de estilo CSS (Cascade Style Sheets)Juan Rodríguez
El documento introduce las hojas de estilo en cascada (CSS), explicando que permiten modificar la apariencia de páginas web de forma sencilla. CSS ofrece ventajas como consistencia en el estilo, mayor control sobre la apariencia y optimización. Una hoja de estilos contiene reglas formadas por selectores y declaraciones que definen el estilo. Existen diferentes formas de aplicar CSS a una página, como en línea, de forma interna o externa mediante un archivo vinculado.
La Extranet es una colección de recursos y aplicaciones disponibles para usuarios externos del parlamento, utilizando el mismo sistema de seguridad que la Intranet pero manteniendo los usuarios en conjuntos separados, de modo que los usuarios de Intranet pueden acceder a la Extranet pero no a la inversa. El esquema básico de seguridad permite a los usuarios internos acceder a la Intranet, Extranet e Internet, mientras que los usuarios externos solo pueden acceder a la Extranet e Internet.
El Observatorio ciudadano Irapuato ¿Cómo vamos?, presenta el
Reporte hemerográfico al mes de mayo de 2024
Este reporte contiene información registrada por Irapuato ¿cómo vamos? analizando los medios de comunicación tanto impresos como digitales y algunas fuentes de información como la Secretaría de Seguridad ciudadana.
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIOAaronPleitez
linea de tiempo del antiguo testamento donde se detalla la cronología de todos los eventos, personas, sucesos, etc. Además se incluye una parte del periodo intertestamentario en orden cronológico donde se detalla todo lo que sucede en los 400 años del periodo del silencio. Basicamente es un resumen de todos los sucesos desde Abraham hasta Cristo
Este documento ha sido elaborado por el Observatorio Ciudadano de Seguridad Justicia y Legalidad de Irapuato siendo nuestro propósito conocer datos sociodemográficos en conjunto con información de incidencia delictiva de las 10 colonias y/o comunidades que del año 2020 a la fecha han tenido mayor incidencia.
Existen muchas más colonias que presentan cifras y datos en materia de seguridad, sin embargo, en este primer acercamiento lo que se prevées darle al lector una idea de como se encuentran las colonias analizadas, tomando como referencia los datos del INEGI 2020, datos del Secretariado Ejecutivo del Sistema Nacional de Seguridad Pública del 2020 al 2023 y las bases de datos propias que desde el 2017 el Observatorio Ciudadano ha recopilado de manera puntual con datos de las vıć timas de homicidio doloso, accidentes de tránsito, personas lesionadas por arma de fuego, entre otros indicadores.
5. De que va
Qué son los estados imposibles y
por qué deberíamos evitarlos
Ejemplos de estados imposibles y
como evitarlos
Enlaces y resumen
6. Make Invalid States
Unrepresentable
Art by Maomi - https://www.pinterest.com/pin/565905509422569311/
7. Principio de diseño
Suele usarse para los tipos de datos, pero
se aplica a Estructuras, bases de datos, etc.
La idea es reducir o eliminar los estados en
los que pueden estar los datos, idealmente
haciendo imposible representar estados
inválidos
8. Para campos estado
Obviamente es aplicable cuando tenemos codificado un
estado directamente.
Por ejemplo, supongamos un sistema de publicaciones
con tres estados posibles:
🔘 En preparación
🔘 En borrador
🔘 Publicado
14. No, es broma
El estado no se refiere solo a estos
estados especificos, cualquier
configuración de datos tiene un
estado
Vamos a ver otro ejemplo en que
no hay un estado explicito, pero
nuestra elección de la estructura de
datos implica un estado
15. Periodos contiguos de tiempo
Vamos a representar una serie de
periodos contiguos en el tiempo
Por ejemplo, en una aplicación que
me permita monitorizar en todo
momento lo que estoy haciendo (o
dejndo de hacer)
20. Eliminar redundacia
Podemos hacer que sea imposible
representar periodos con huecos
y/o que se superpongan
Similar a normalizar una base de
datos: Eliminar la redundacia
21. Eliminar fecha final
La marca de final de un periodo es
redundante con la de inicio del
siguiente
Así que solo necesitamos una única
fecha, la de inicio. El final está
definido por el inicio del siguiente
periodo
23. Ventajas
Podemos ver algunas ventajas de
esta representación analizando
algunas de las operaciones que
podríamos hacer
24. Dividir un periodo
Primer caso:
Hacer ajustes en el periodo anterior
Insertar un nuevo periodo (posiblemente consultando
el periodo siguiente)
Verificar las restricciones impuestas
Segundo caso:
añadir una fecha el conjunto
25. Vale, pero ...
Yo sigo necesitando trabajar con periodos, con su inicio y final
(Por ejemplo, porque tengo código ya funcionando que usa ese
convenio)
Resulta trivial proyectar la secuencia de fechas a esta forma
Mientras la representación subyacente siga siendo una lista de
fechas, las restricciones de los periodos siempre se cumplirán
35. Resumen
Conviene echar una pensada sobre los estados y ver si podemos
representar estados imposibles, y en ese caso, intentar eliminar
esa posibilidad
Cualquier conjunto de datos interrelacionados son un estado
La representación de un objeto “real” no tiene por que seguir su
estructura “fisica”
36. Enlaces
Charla en YouTube Making Impossible States
Impossible por Richard Feldman
https://www.youtube.com/watch?v=IcgmSRJHu_8
Artículo de Kevin Mahoney Applying "Make
Invalid States Unrepresentable"
https://kevinmahoney.co.uk/articles/applying-misu
Notas del editor
Suponiemos que los estados son excluyentes
Si, claro, esto no deberia pasar nunca, bla, bla, bla...
No váłido para estados superpuestos ni estados cuanticos no colapsados. Consulte con su médico para posibles contraindicaciones y tratamiento. Solo con receta médica,