"Hay mucha gente dedicándose al arte que no consigue reconocimiento. Es un poco injusto" - La Opinión de La Coruña\nJune Crespo | Artista ganadora del VII Premio Internacional de Arte Fundación María José Jove\n"Hay mucha gente dedicándose al arte que no consigue reconocimiento. Es un poco injusto"\nMiguel Miramontes/Roller Agencia\nSe ha alzado con la victoria entre más de 800 artistas\nEstoy que no me lo creo, muy agradecida. La verdad es que vengo de un año en el que estoy recibiendo varios reconocimientos, y me está sobrepasando un poco. Esto me está dando mucho ánimo para continuar poniendo energía en esta vía que he elegido.\nSu obra pone el cuerpo en el centro. ¿Es una reivindicación?\nLo que me interesa es proponer una nueva idea del cuerpo a través de cómo se organiza la materia en la obra. Parte de la matriz de la figura estereotipada de un maniquí, pero voy deformándolo de manera que pierde ese género. Propone un cuerpo sin interior ni exterior, como un canal activo, con una puerta siempre abierta al azar.\n¿Todo puede ocurrir en el proceso creativo?\nUno tiene entre manos una intuición, y pone los ingredientes para que vaya hacia delante, pero siempre es una negociación entre el objeto y yo. Me gusta dejarme sorprender por lo que puedo recoger.\nEste año, usted y las tres finalistas que pasan a la colección de la Jove son mujeres. ¿se está imponiendo el arte femenino?\nNo creo que sea una cuestión de imponer. Siempre ha habido muchas creadores, y es lógico que se reconozca el trabajo que hacemos. Pero supongo que ha sido una decisión del jurado reconocer la labor de artistas femeninas.\nY de los jóvenes. ¿Las oportunidades que hay son suficientes?\nHasta los 35 años, hay bastantes convocatorias, pero es un apoyo puntual y hay mucha gente dedicándose al arte que no consigue ese reconocimiento. Es un poco injusto lo selectivo que es este ámbito. A mí me da pena que haya gente que no pueda sortear un primer apoyo para desarrollarse más.\nUsted ha hecho residencias en el extranjero. ¿La situación es diferente en el resto de Europa?\nYo estuve en Ámsterdam, y notaba que la gente tiene más herramientas. Creo que en otros sitios de Europa están mucho más preparados para el mundo del arte.\nTodas las Categorías (271)\nSantiago de Compostela (115)


Eurocámara pide ampliar sanciones contra Maduro\nPOLÍTICA · 16 ENERO, 2020 11:01\nEurocámara condena “golpe de Estado” contra la AN y pide ampliar sanciones contra Maduro\nAmpliar sanciones. Con 471 votos a favor, 101 en contra y 103 abstenciones, el Parlamento Europeo aprobó una nueva resolución que “condena con dureza” el “intento de golpe de Estado de (Nicolás) Maduro y sus aliados” contra la Asamblea Nacional, el pasado domingo 5 de enero.\nLa Eurocámara reclama “sanciones ampliadas a los responsables de la violación de derechos humanos y de la represión”, una petición que ya había extendido este martes, cuando se debatió el asunto en el pleno, el eurodiputado del Partido Popular Leopoldo López Gil, padre del dirigente opositor Leopoldo López.\nLa enviada especial de Guaidó en Francia, Isadora Zubillaga, informó, en su cuenta de Twitter, que los parlamentarios pidieron sanciones individuales y familiares contra funcionarios de Maduro.\nParlamento Europeo aprueba con 471 votos Resolución:\n-Reconocen a @jguaido como Presidente de #Venezuela y Pdte de @AsambleaVe\n-Piden sanciones individuales y para familiares\n-Piden a miembros UE que aún no reconocen al Pdte legítimo que lo hagan\n-Reconocimiento a Embajadores pic.twitter.com/H3pWRBj2zX\n— Isadora Zubillaga (@isadorazubi) January 16, 2020\nLa resolución pide enviar una misión de investigación al país para evaluar la situación y que se mantenga el Grupo Internacional de Contacto desde el que trabaja la Unión Europea.\nY ratifica el apoyo de la mayoría de los integrantes del Parlamento Europeo a Guaidó como presidente encargado de Venezuela y presidente de la Asamblea Nacional.\nEl texto “lamenta las graves violaciones que son incompatibles con el proceso legítimo de la elección del presidente de la Asamblea Nacional” y son “un paso más en la crisis en Venezuela que sigue empeorando”.\nEl Grupo Internacional de Contacto, creado por la Unión Europea para presionar una salida pacífica a la crisis política en Venezuela, manifestó gran preocupación por las acciones realizadas contra el funcionamiento democrático y constitucional de la Asamblea Nacional con motivo a la elección de la nueva junta directiva el domingo 5 de enero.\nEn la declaración, la coalición de países advirtió que la elección de Luis Parra “no puede ser considerada legítima ni democrática” y ratifica su apoyo a Juan Guaidó a quien reconoce el legítimo presidente de la Asamblea Nacional.\nElección de Parra no es legítima ni democrática, advierte Grupo de Contacto\n#Juan Guaidó #Parlamento Europeo #Union Europea #Venezuela


Tratando de entenderlo: 2011\nEl pasado día 27 de diciembre estuve en la charla organizada por el grupo MadridJS sobre Node.js y Heroku. Acudí porque había leído algo sobre el tema y tenía curiosidad por saber de qué trataba realmente este proyecto. En la charla se dió una explicación inicial de lo que es y para qué sirve e incluso se vió algún ejemplo real, pero además se habló de algunos otros proyectos y tecnologías relacionadas con Node.js, como es el manejo de WebSockets con la librería Socket.IO.\n¿Y cuál es la principal ventaja de Node.js? Pues su rapidez y el menor número de recursos que consume. Un servidor de Node.js se ejecuta en un único hilo y no crea un nuevo proceso o un nuevo hilo por cada petición entrante, con el consumo de recursos que esto supone. Sin embargo, las operaciones en Node.js se ejecutan de forma no bloqueante en base a eventos, por lo que se pueden aprovechar los tiempos muertos de las operaciones de entrada/salida para servir otras peticiones y aumentar la rapidez.\n¿Que significa que las operaciones se ejecutan de forma no bloqueante y en base a eventos? Pues que todas las operaciones de entrada/salida se realizan de forma asíncrona. Cuando se llama a una operación de entrada/salida se le pasa una función callback que será el manejador del evento de ejecución y pasa a ejecutarse en segundo plano, continuando con la ejecución del programa. Cuando la operación de entrada/salida haya finalizado saltará el evento correspondiente y se llamará a la función callback que lo maneja, que dispondrá de la información recuperada y podrá trabajar con ella.\nAdemás de los módulos que Node.js incorpora en su instalación, existen multitud de módulos adicionales que puedes ser usados, los cuales se pueden instalar a través de la herramienta de gestión de paquetes de Node.js: NPM (Node Package Manager). Dichos módulos permiten el acceso al sistema de archivos, bases de datos, ofrecen una implementación del patrón MVC... Dichos módulos están organizados según el estándar CommonJS.\nEn vez de incluir aquí un ejemplo de cosecha propia, voy a remitir a quien quiera profundizar más a “The Node Beginner Book”, un tutorial estupendo para iniciarse en Node.js y empezar a entender su forma de trabajar.\nOtras referencias sobre Node.js:\nPágina oficial de Node.js\nNode.js en español\nIntroducción a Node.js de Rafa Muñoz\nIntroducción a Node.js en debugmodeon\nColección de enlaces sobre Node.js\nPublicado por Jorge en 12/30/2011 1 comentarios Enlaces a esta entrada\nLo cierto es que, debido al boom que está sufriendo este lenguaje, lo que más me está costando es saber cuál es el estado en que se encuentra y hacia donde se encamina. Por ello, sirva este post para recopilar las ideas que sobre ello he ido encontrando y para, a partir de él, seguir profundizando en el lenguaje y sus capacidades, tanto nuevas como antiguas.\nNuevas sentencias de control.\nManejo de excepciones (bloque try-catch).\nDefinición de errores más precisa.\nFormateo de salidas numéricas de datos.\nManejo de strings más avanzado.\nFinalmente se llegó a la decisión de enfocarse en la propuesta ECMAScript 3.1, que se ha cambiado de nombre, pasando a ser ECMAScript 5. ECMASCript 4 ha quedado relegada al proyecto Harmony. Harmony, que a su vez parece que pasará a ser ECMAScript 6, pretende incorporar a posteriori en ECMAScript 5 algunas de las mejoras propuestas inicialmente por ECMAScript 4.\nLas características que se incluyen en ECMAScript5 son las siguientes:\nArray extras y reductions.\nCambios en Object:\nRediseño de los atributos internos de las propiedades.\nIntroducción de métodos estáticos de Object, que permiten:\nAcceder a la información del prototipo.\nManipular las propiedades de un objeto.\nCrear objetos de forma dinámica.\nObtener los nombres de las propiedades.\nImpedir que un objeto sea modificado.\nCambios a las funciones:\nSoporte nativo del function currying a través del método bind.\nCambios en el objeto Date.\nSoporte nativo de JSON.\nModo de ejecución strict, que define reglas de codificación más estrictas que el modo de ejecución estándar.\nLos cambios que podrían ser introducidos en ECMAScript 6 se mencionan en esta charla de Dave Herman, ingeniero de Mozilla Labs y representante del TC39:\nÁmbito a nivel de bloque (sentencia let).\nRest y default arguments.\nHash tables y weak maps.\nTambién parece que se podría incluir:\nClases y herencia.\nTipos Map, Set y StructType.\nAlgunos navegadores ya han ido incluyendo estas y otras mejoras del lenguaje, como se indica en estos datos obtenidos de Wikipedia:\nArray y String Generics.\nÁmbito a nivel de bloque.\n- ECMAScript en Wikipedia.\n- Presentación sobre ECMAScript 5.\n- ECMAScript 5: The Definitive Slides.\n- Otra presentación sobre ECMAScript 5.\nPublicado por Jorge en 12/23/2011 0 comentarios Enlaces a esta entrada\nTodo ello, a través de la siguiente configuración del pom.xml:\nTanto la verificación como la compresión de los archivos se ejecutarán cada vez que se construya el proyecto mediante:\nO se despliegue con:\nMinimizando el tiempo de carga: Maven YUI Compressor\nPublicado por Jorge en 10/08/2011 1 comentarios Enlaces a esta entrada\nApuntes de XP\nRecientemente he estado leyendo el libro de Kent Beck "Extreme Programming Explained" y, lo que presento es este post, es el resumen que he hecho sobre el mismo.\nXP es una metodología ligera para el desarrollo proyectos de software con requisitos variables o poco definidos. Pone énfasis en el código e introduce prácticas que permiten entregar el software a tiempo, reducir el riesgo, mejorar la respuesta al cambio, aumentar la productividad y hacer más divertido el trabajo en grupo.\nEl problema del desarrollo de software\nEl principal problema del desarrollo de software es el riesgo. XP propone soluciones para luchar contra los distintos tipos de riesgo que pueden existir en un proyecto:\nLas iteraciones cortas permiten planificar mejor y reaccionar a los cambios.\nDesarrollar primero las tareas de mayor valor acelera el retorno de la inversión.\nAsegurar la calidad introduciendo pruebas automáticas permite hacer modificaciones de forma segura.\nProbar constantemente el sistema permite encontrar defectos más rápido.\nInvolucrar al cliente mejora la especificación del sistema y las expectativas sobre él.\nOtorgar mayor responsabilidad y respeto al programador reduce su frustración. Promueve el espíritu de equipo y crea un mejor ambiente de trabajo.\nSe debe obtener el mayor valor haciendo la mínima inversión para obtener beneficios de la forma más rápida e incrementar la vida del proyecto.\nPara ello, se estudian las distintas opciones de cada funcionalidad del proyecto (implementarla ya, descartarla o posponerla) y se calcula su valor según el beneficio original, el precio de la opción, el beneficio si se ejecuta la opción, el periodo de tiempo durante el que se puede ejecutar la opción y la certeza en el valor final.\nLas cuatro variables que permiten gestionar un proyecto son: coste, tiempo, calidad y alcance. El alcance es la variable más potente. XP reduce el riesgo de retrasar el desarrollo de una funcionalidad y juega con el alcance centrándose en realizar aquello que está definido. Se puede modificar el alcance a medida que el proyecto avanza y el conocimiento sobre el producto deseado aumenta.\nSe asume que el coste que implica un cambio en el proyecto aumenta exponencialmente según avanza el proyecto. Sin embargo, combinando tecnología y buenas prácticas, se puede conseguir un aumento prácticamente lineal del coste del cambio. Esta es la premisa principal de XP, según la cual las decisiones se deben retrasar hasta obtener la mayor certeza.\nPara reducir el coste del cambio se debe usar un diseño simple, pruebas automáticas que puedan ejecutarse en cualquier momento y refactorización para modificar el diseño cuando sea necesario. Se pueden así realizar ajustes durante el desarrollo, de la misma manera que se realizan correcciones al volante cuando se conduce.\nValores, principios, actividades y prácticas de XP\nLos 4 valores que dirigen el proceso de XP son:\nComunicación: la información debe fluir entre el equipo.\nSencillez: hay que hacer las cosas de la forma más sencilla posible.\nRealimentación: hay que conocer el estado del proyecto en todo momento.\nCoraje: ser capaz de tomar decisiones difíciles cuando sea necesario.\nLos valores anteriores inspiran los principios que guían a XP:\nRealimentación rápida: acelerando es el aprendizaje.\nSencillez: resolver los problemas de forma sencilla.\nCambio incremental: los cambios son más sencillos si se realizan poco a poco.\nAbrazar el cambio: abierto a lo que depare el futuro.\nTrabajo de calidad: si el trabajo no se hace bien, se pierde la motivación.\nEnseñar a aprender: demostrar todo aquello sobre lo que no haya certeza.\nPequeña inversión inicial: manejando el alcance, no hacen falte grandes presupuestos.\nJugar para ganar: la confianza en la propia capacidad ayuda al éxito del proyecto.\nExperimentos concretos: probar cada decisión para asegurar que es correcta.\nComunicación abierta y honesta: hablar del proyecto de forma directa y sincera.\nTrabajar con los instintos de las personas, no contra ellos: a la gente le gusta hacer un buen trabajo. Hay que ayudar a que esto ocurra.\nAceptar la responsabilidad: A nadie le gusta que le digan lo que tiene que hacer. Es preferible que cada persona lo elija, pero como miembro del equipo, también debe asumir la responsabilidad de hacer lo que el equipo estime necesario.\nAdaptarse de forma local: decidir qué cosas funcionan mejor en cierto entorno.\nViajar ligero: mantener pocas cosas, que sean simples y de valor.\nMedida honesta: usar medidas significativas que reflejen el estado del proyecto.\nLas actividades principales del proceso de desarrollo en XP son codificar, probar, escuchar y diseñar:\nEl código sirve para plasmar ideas y aprender sobre ellas a través de la comunicación.\nEl código puede ser probado para ver si cumple con lo esperado. Las pruebas automáticas permiten realizar estas pruebas una y otra vez asegurando el funcionamiento del sistema.\nPara implementar las pruebas, el desarrollador escucha al usuario, que dice cómo debe funcionar el sistema, y al propio sistema, que da realimentación sobre el sistema y sus problemas.\nA medida que el conocimiento evoluciona y se amplían las funcionalidades se revisa el diseño del sistema para poder satisfacer las nuevas necesidades sin afectar a las anteriores. El diseño consiste en organizar el sistema de forma que los cambios lo afecten lo menos posible.\nLas actividades anteriores se realizan mediante las siguientes prácticas:\nEl Juego de la Planificación: en cada iteración los desarrolladores estiman las tareas y el cliente decide las prioridades, para seleccionar el conjunto de tareas a realizar.\nEntregas cortas: entregar el mayor valor en producción lo más rápidamente posible.\nMetáfora: se utiliza una historia sobre el funcionamiento del sistema, que comparte todo el equipo, para describir el funcionamiento del sistema y guiar el desarrollo.\nDiseño simple: el sistema debe ser lo más simple posible en cada momento.\nPruebas: se crean pruebas unitarias y funcionales.\nRefactorización: el sistema se reestructura constantemente, sin cambiar su comportamiento, para mejorar el diseño o la comunicación.\nProgramación en pareja: el código se escribe en pareja, aumentando la comunicación entre los miembros del equipo y otorgando realimentación inmediata.\nPropiedad colectiva: cualquier miembro del equipo puede modificar el código.\nIntegración continua: el código se integra cada vez que se completa una tarea para mantenerlo estable.\nJornada de trabajo estable: XP supone un esfuerzo y se debe permitir el descanso necesario.\nContacto directo con el cliente: el cliente debe estar disponible en todo momento para responder preguntas sobre el sistema.\nEstándares de codificación: se programa en base a reglas de codificación que mejoran la comunicación.\nNo son prácticas novedosas, sin embargo, al llevarlas a cabo de manera conjunta, unas se refuerzan a otras aumentando su potencia.\nGestión de proyectos en XP\nLa gestión del proyecto no puede ser cosa de una sola persona, nadie tiene conocimiento total del sistema. XP permite una estrategia de gestión descentralizada en la que el gestor sólo debe intervenir en situaciones que no se puedan resolver de forma distribuida.\nA la hora de gestionar un proyecto debe existir tanto un perfil administrativo como uno técnico. El perfil administrativo se encarga de que se realice el Juego de la Planificación, de recoger métricas sobre el seguimiento del proyecto y mostrárselas a los interesados. El perfil técnico hace de consejero (coach). No toma decisiones técnicas, sino que ayuda a los de demás a tomarlas y colabora con ellos en el desarrollo. También es el encargado de velar por la buena marcha del proceso de desarrollo.\nA la hora de realizar la planificación hay que separar las responsabilidades. Negocio decide el ámbito del proyecto y de las iteraciones, y las prioridades de las tareas. Desarrollo informa sobre las estimaciones de las funcionalidades y las alternativas técnicas. Desarrollo decide el proceso que va a seguir para el desarrollo y las prácticas que llevará a cabo.\nLa planificación se basa en las estimaciones que los desarrolladores hacen sobre las tareas que el cliente ha priorizado. Sólo se debe planificar en detalle la iteración actual, pero se puede planificar a largo plazo con menor detalle el resto de las tareas.\nEl objetivo de la planificación es el de maximizar el valor entregado al cliente en cada iteración. Para ello, el equipo de desarrollo deberá invertir lo mínimo posible poniendo el mayor valor en producción lo más rápidamente posible.\nLa planificación se realiza en las siguientes fases:\nExploración: trata de descubrir lo que debe hacer el sistema. Se escriben historias que describen lo que debe realizar el sistema, se estiman y, si fuesen demasiado grandes, se dividen en historias más pequeñas.\nCompromiso: las historias se priorizan. A partir de la velocidad de desarrollo del equipo se elije el alcance del proyecto según el tiempo que se disponga.\nDirección: se realizan iteraciones de alcance restringido durante las que se pueden detectar nuevas historias que pueden ser incorporadas a la planificación. Se vuelve a estimar teniendo en cuenta la velocidad obtenida durante las iteraciones anteriores.\nDesarrollo en XP\nDurante el desarrollo, las prácticas principales son la integración continua, la propiedad colectiva del código y la programación en parejas.\nLa integración continua consiste en que los desarrolladores integren sus cambios cada pocas horas, manteniendo la corriente principal del desarrollo en sincronía. Gracias a las pruebas automáticas se verifica en todo momento que el sistema sigue funcionando, y gracias a la refactorización se transforma el sistema en elementos cada vez más pequeños e independientes, de forma que los cambios a realizar están mucho más localizados.\nLa propiedad colectiva del código hace que cualquiera pueda modificar cualquier parte del código cuando lo necesite. Para ello es preciso atenerse a unas reglas de codificación comunes que faciliten la comprensión del código a todo el equipo.\nLa programación en pareja obliga a programar, analizar, diseñar y probar de forma conjunta. Esto favorece la comunicación y el aprendizaje. Uno de los miembros se centra en programar, mientras que el otro piensa de una manera más estratégica. Hace que la gente se mantenga fiel a las prácticas de XP, puesto que hay cierta supervisión.\nLa disposición del entorno de trabajo debe favorecer el trabajo en equipo. Es importante tener espacios comunes donde el equipo pueda reunirse a debatir o donde programar en pareja.\nDiseño en XP\nEn XP se procura tener en todo momento un diseño lo más simple posible. Se realiza una inversión inicial pequeña para proporcionar valor rápidamente, haciendo cosas simples que permitan evolucionar el diseño fácilmente.\nEl diseño comienza por el desarrollo de pruebas que verifiquen lo que tiene que hacer el sistema. Se irán desarrollando nuevas pruebas que verifiquen más requisitos. Si en el proceso se ve la posibilidad de simplificar lo ya hecho, hay que hacerlo. Así, la primera vez que nos encontremos con un problema, lo solucionaremos de la manera más rápida posible. Las siguientes veces, se trata de flexibilizar la solución para acomodarla a nuevas necesidades.\nLo más simple posible es aquello que comunique su función, no contenga código duplicado y tenga el menor número de clases y métodos.\nEn el diseño se pueden usar gráficos, pero hay que ser conscientes de que entrañan el riesgo de que la funcionalidad del sistema que definen pueden ser comprobada a través de ellos. Se pueden usar gráficos en los primeros pasos de un diseño y luego convertir el diseño a código para eliminar este riesgo lo antes posible.\nLa arquitectura del sistema se expresa a través de una metáfora que permite hablar sobre el sistema. Para obtener esta arquitectura se recoge un conjunto básico de historias y se cambiará a medida que el conocimiento sobre el sistema aumente.\nPruebas en XP\nXP propone realizar las pruebas a la vez que el desarrollo. Antes de codificar una funcionalidad se debe crear una prueba que valide su funcionamiento. Como las pruebas son automáticas se pueden ejecutar en cualquier momento y verificar que el sistema sigue funcionando.\nLas pruebas permiten aprender sobre el sistema. Son realizadas por los desarrolladores, pero también por los clientes, que escriben pruebas que verifican si el sistema cumple con el funcionamiento descrito en sus historias de usuario.\nComenzar con XP\nA introducir XP en un nuevo entorno se debe hacer paso a paso, comenzando por aquello que suponga el mayor problema. Normalmente se empieza por las pruebas y la planificación. Es importante reorganizar el espacio de trabajo para favorecer la comunicación desde el primer instante.\nHay que cambiar la estrategia en las siguientes áreas:\nPruebas: las pruebas otorgan confianza en el código. Hay que ir introduciendo pruebas en el código existente a medida que sea necesario modificarlo por cualquier razón.\nDiseño: XP provocará un aumento en la refactorización. No se debe realizar al mismo tiempo que se añade una nueva funcionalidad. Los objetivos de la refactorización deben ser identificados cuanto antes y ser abordados antes de avanzar en funcionalidades nuevas.\nPlanificación: se debe educar al cliente en las nuevas reglas que guían la planificación y convencerle para que escriba historias de usuario.\nGestión: una de las partes más difíciles es el cambio de mentalidad sobre la gestión del equipo. El gestor debe de dejar de tomar las decisiones que son responsabilidad de los programadores. Los programadores deben asumir la responsabilidad de su trabajo.\nDesarrollo: se debe aprender a desarrollar en pareja y el entorno debe facilitarlo.\nCiclo de vida del proyecto en XP\nEl ciclo de vida de XP trata de adelantar cuanto lo máximo posible la puesta en producción de valor para el cliente, aunque sólo sea una parte de la funcionalidad. A partir de ahí, se irá incrementando el valor en las siguientes iteraciones.\nEn una primera fase de exploración se debe analizar la viabilidad del proyecto y estudiar su utilidad y si tenemos las capacidades necesarias para llevarlo adelante. Esta fase termina en el momento en que existen suficientes historias de usuaria para una puesta en producción.\nEn esta fase se explora la arquitectura del sistema a través de varias alternativas. Se exploran las tecnologías a usar para conocer sus límites y rendimiento. El cliente también debe aprender en esta etapa a escribir historias de usuario. Para ello debe recibir realimentación por parte de los desarrolladores hasta llegar al nivel adecuado.\nEn la fase de planificación se recogen las historias más valiosas que puedan servir para una primera puesta en producción y se trata de estimar la fecha. A partir de este punto se realizan varias iteraciones. En la primera iteración se tratará de asentar la arquitectura del proyecto y en las subsecuentes iteraciones se irán incluyendo las historias de usuario seleccionadas.\nPosteriormente se pasará producción, para lo cual puede ser necesario hacer pruebas de rendimiento del sistema y refinarlo en base a los resultados.\nA partir de este momento el proyecto está en la fase de mantenimiento, que es el estado natural de un proyecto en XP. En esta fase se incorpora nueva funcionalidad manteniendo la existente, manejando las altas y bajas en el equipo.\nCada nueva versión necesitará de una fase de exploración que puede implicar la refactorización de parte del sistema. También hay que responder a los problemas que puedan surgir en el funcionamiento normal del sistema, lo que puede disminuir la velocidad del equipo para aportar nueva funcionalidad.\nEl día en que el cliente ni tiene nuevas historias es el momento en que se debe redactar el funcionamiento del sistema para la posteridad. Este es el fin del proyecto. También se puede llegar al fin del proyecto porque éste no reporte la rentabilidad esperada.\nEn un equipo XP existen los siguientes roles:\nProgramador: programa y comunica sobre lo que hace. Debe buscar la sencillez del sistema. Es miembro de un equipo que le ayuda a mejorar.\nCliente: decide lo que debe hacer el sistema en función de la información de que dispone y la que le da el avance del proyecto. También se encarga de escribir las historias que debe cumplir el sistema y crea pruebas para comprobarlo.\nProbador (tester): ayuda al cliente a escribir y ejecutar las pruebas funcionales. Puede ser un programador.\nRastreador (tracker): recoge las estimaciones, verifica su cumplimiento e informa al equipo.\nConsejero (coach): vela por el cumplimiento del proceso. Su trabajo disminuye a medida que el equipo madura y se hace responsable del proceso.\nConsultor: aporta conocimiento técnico al equipo en un determinado momento, pero no resuelve el problema por ellos.\nJefe: responde a las necesidades del equipo para la realización el proyecto. Debe pedir explicaciones al equipo sobre su forma de trabajar y, si algo no tiene sentido, hacerlo saber para que el equipo lo corrija.\nEn XP es necesario realizar moderadamente bien el conjunto de todas las prácticas para empezar a obtener resultados notables. Esto es porque las prácticas se apoyan unas en otras y es esta conjunción lo que asegura el buen funcionamiento de XP.\nLas prácticas de XP son simples, pero es difícil realizarlas de forma conjunta. Cuando hay problemas, se tiende a relajar la aplicación de las prácticas más exigentes y el proceso se desequilibra si no se corrige rápidamente. También se requiere humildad y coraje para reconocer lo que uno no sabe y preguntar por ello. Hay que estar dispuesto a colaborar.\nEn ciertas condiciones hay que descartar XP, como cuando tratamos con equipos grandes, clientes desconfiados o tecnología que no soporta el cambio. Estos casos dificultan o imposibilitan la aplicación de algunas de las prácticas de XP, desestabilizando el proceso de desarrollo.\nEsto último es muy importante, puesto que por más que nos gusten las ideas que XP propone, puede ser contraproducente adoptar XP a ciegas en determinados entornos en los que pueden llevar al caos. Sin embargo, aunque introducir el conjunto de prácticas de XP no sea una buena opción, algunas de ellas son recomendables en sí mismas en el desarrollo de software, como la integración continua (hasta cierto grado), el uso de estándares de codificación y las pruebas auto\nPublicado por Jorge en 6/13/2011 2 comentarios Enlaces a esta entrada\nEtiquetas: Libros, Metodologías ágiles, XP\nEste libro, un clásico de referencia sobre la ingeniería del software, es una colección de ensayos en los que el autor, Frederick P. Brooks, expone sus experiencias como gestor en un gran proyecto de desarrollo.\nAunque se trata de un libro de hace más de 30 años, que refleja experiencias de un proyecto realizado 20 años atrás, este libro sigue resultando valioso. En lugar de centrarse en los ya obsoletos problemas técnicos del proyecto, se centra en los problemas organizacionales de los mismos, y en cómo gestionar a las personas involucradas en ellos.\nA continuación, haré un resumen de cada uno de los capítulos que forman parte de este libro:\n1. El pozo de alquitrán\nLos proyectos de software con como un pozo de alquitrán, en el cual uno se adentra sin darse cuenta y, cuando comienzan los problemas, luchar contra ellos sólo hace que uno se hunda más.\nNo hay razón aparente para la dificultad de los proyectos, sino un cúmulo factores. Para conocer la naturaleza de este problema es necesario identificar la finalidad de la programación y las satisfacciones y dificultades que entraña.\nExisten distintos productos de software en función su usuario final que requiere más o menos diseño, integración o pruebas, e implican diferentes grados de esfuerzo. Un producto que vaya ser usado por otros supone el triple de esfuerzo que un programa de uso privado. Un programa que va a ser usado dentro un sistema supone el triple de esfuerzo que uno que va a ser usado de forma independiente. Estas implicaciones son independientes entre sí, por lo que un producto de software que va a ser usado por sistema cuesta nueve veces más esfuerzo que un programa independiente de uso privado.\nLa programación proporciona la satisfacción de crear cosas complicadas que sean de utilidad para los demás. Es algo tan maleable que permite hacer casi cualquier cosa. Sin embargo, se sufre la necesidad de perfección y el estar trabajando con objetivos impuestos por otros.\n2. El mito del mes-persona\nLa principal causa de fracaso de los proyectos de software es la desviación respecto a la planificación estimada. Esto se debe al optimismo a la hora de estimar por parte de los programadores, que no tienen en cuenta que las ideas iniciales pueden ser incompletas e incluso erróneas. Además se carece de datos fiables sobre las estimaciones, lo que hace difícil justificar estimaciones que vayan en contra de los intereses del gestor o del propio cliente.\nA la hora de estimar, se suele caer en el error de creer que personas y meses son intercambiables. Se olvida que al añadir más personas a una tarea se incrementa el esfuerzo total necesario debido a la necesidad de reorganizar las tareas, de formar a los nuevos miembros y al aumento de la intercomunicación.\nLa ley de Brooks dice que: “Añadir gente a un proyecto retrasado lo retrasa más”.\nComo regla general, Brooks propone repartir el tiempo de un proyecto de la siguiente forma: 1/3 para diseño, 1/6 para la codificación, 1/4 para las pruebas de componentes y 1/4 para las pruebas de sistema.\n3. El equipo de cirujía\nLos buenos programadores son mucho más productivos que los malos. Además, los equipos, cuanto más pequeños sean menos los problemas de intercomunicación tendrán.\nHay que favorecer el trabajo de los buenos programadores simplificando la comunicación dentro del equipo.\nLos equipos pequeños son demasiado lentos para realizar grandes sistemas y, por otra parte, un equipo de mucha gente es costoso, lento e ineficiente, y produce sistemas que no están conceptualmente integrados.\nUna solución es tener un equipo organizado en torno a un programador jefe a quien da apoyo, de la misma manera que un equipo de cirugía. De esta forma se logra mantener la integridad de un producto de un número reducido de mentes con la ayuda de unos cuantos colaboradores, reduciendo la comunicación de forma radical.\n4. Aristocracia, democracia, y diseño de sistemas\nLa consideración más importante en el diseño de un sistema es preservar la integridad conceptual. La integridad conceptual otorga mayor facilidad de uso, y permite construir y probar el sistema más rápidamente.\nPara lograrla, el diseño debe ser fruto de una sola mente o de un grupo reducido de mentes que están de acuerdo. La separación entre arquitectura e implementación es la forma de conseguir esta integridad conceptual en sistemas grandes.\nAlguien debe controlar los conceptos fijando la arquitectura, pero ello mejora la creatividad en la implementación, puesto que permite enfocar el esfuerzo.\nDe cualquier manera, arquitectura (requisitos), implementación (diseño) y realización (programación) pueden discurrir en paralelo.\n5. El efecto del segundo sistema\nUna buena comunicación puede dar al arquitecto una lectura adecuada de los costes y al constructor confianza en el diseño, sin difuminar la clara división de responsabilidades entre ellos.\nPara que el arquitecto pueda influir con éxito en la implementación debe tener en cuenta que:\nEs el constructor quien tiene la responsabilidad de la implementación. El arquitecto solo sugiere.\nEl arquitecto debe ser capaz de sugerir una forma de implementar lo que especifica, pero debe estar preparado para aceptar cualquier otra forma igualmente válida.\nDebe escuchar las sugerencias del constructor para mejorar la propia arquitectura.\nEl segundo sistema es el más peligroso, porque se tiende a sobrediseñarlo. Asignar a priori valores de memoria y tiempo para cada función ayuda a detectar el sobrediseño durante la implementación.\n6. Pasar la Palabra\nA la hora de redactar el diseño de un sistema, por grande que sea, es mejor que lo hagan pocas personas (preferiblemente una) para que el resultado sea consistente.\nSe necesita tanto una descripción formal que aporte precisión como una descripción en prosa que aporte claridad. Una de ellas debe ser la de referencia y la otra servir como apoyo. Utilizar una implementación como definición es una fuente de problemas.\nEs importante registrar y publicar todas las consultas de los desarrolladores a los arquitectos.\n7. ¿Por qué cayó la Torre de Babel?\nSi no hay comunicación cada uno hace sus propias suposiciones, provocando retrasos, desajuste funcional y errores en el sistema. Los equipos de deben comunicar de todas las formas posibles, tanto informal como formalmente.\nSe debe especificar cuanto antes el conjunto de documentos a través de los cuales se producirá la comunicación formal en el proyecto. Esta documentación debe estar al alcance de cualquier miembro del equipo. Se debe actualizar constantemente y resaltar los cambios realizados respecto a la última versión.\nSin embargo, Parnas propone que nadie debe ver las interioridades de ninguna otra parte que no sea aquella en la que se está trabajando. Sólo se deben publicar las interfaces.\nLa organización debe encargarse de reducir la cantidad de comunicación y coordinación necesaria, mediante la división de tareas y la especialización en las funciones.\nEn cada proyecto se deben establecer dos roles, el productor y el arquitecto o director técnico, que requieren de distintas habilidades.\n8. Apuntando para disparar\nNo se puede estimar el esfuerzo total de un proyecto estimando el tiempo de codificación y extrapolándolo a las demás tareas.\nTampoco sirve extrapolar la construcción de pequeños sistemas a proyectos de sistemas. El incremento en el esfuerzo es una potencia del tamaño del proyecto.\nHay estudios que dicen que los programadores sólo dedican el 50% de su tiempo a la programación y el resto a otras tareas.\nOtros estudios sobre la productividad indican que ésta se mantiene constante en términos de secuencias elementales. La productividad se incrementa por 5 cuando se pasa a usar un lenguaje de alto nivel.\n9. 10 libras en una bolsa de 5\nAdemás del tiempo de ejecución, el espacio de memoria que ocupa un programa es su coste principal. Se deben establecer límites de tamaño en cada función para que los costes no se disparen.\nDurante la implementación, los arquitectos deben velar por la continuidad de la integridad del sistema.\nPara poder hacer un buen balance entre tiempo y espacio, el equipo debe estar entrenado en las peculiaridades del lenguaje de programación y de la máquina que se están usando.\nTodo proyecto de programación necesita una librería de componentes estándar.\nLos programas sencillos y rápidos son resultado de la innovación estrategia más que de una buena táctica. Esto se puede lograr a través del uso de un nuevo algoritmo o de rehacer la representación de los datos.\n10. La hipótesis documental\nSólo unos pocos de todos los documentos del proyecto son el eje sobre el que gira toda la gestión del proyecto: objetivos, manual, calendario, presupuesto, diagrama de organización y situación física de los miembros del equipo.\nEl gestor debe formalizar este conjunto de documentos. Mantener estos documentos proporciona un mecanismo de vigilancia y alarma.\nEl gestor debe encargarse de que todo el mundo vaya en la misma dirección a través de la comunicación, y no tomando todas las decisiones. Solo una pequeña parte de las tareas del gestor están relacionadas con información que está fuera de su mente.\n11. Planea deshacerte de uno\nCuando se pasa de un entorno protegido a uno de producción es necesario un paso intermedio de prueba. Al probar el primer sistema construido se suele comprobar que éste es demasiado lento, grande o difícil de usar, y que debe ser rediseñado.\nEste rediseño se puede hacer de golpe o pieza a pieza, pero habrá que hacerlo de todas formas. Si se entrega el primer sistema, esto será en detrimento del usuario y del desarrollador que lo debe mantener. Por tanto, debe incluirse en la planificación el rediseño de la primera solución.\nLas necesidades del cliente y la percepción de las mismas cambiarán a medida que avanza el proyecto. La maleabilidad del software hace que los requerimientos no dejen de cambiar porque los cambios se presuponen fáciles. Algunos de estos cambios son válidos y hay que estar preparados para poder afrontarlos. Las técnicas que nos permiten hacer esto son conocidas pero no son usadas.\nLos esfuerzos de los desarrolladores son tentativas de satisfacer los requisitos, sujetos a modificaciones y, por tanto, hace que sean reacios a documentarlos.\nPara acomodar una organización al cambio los miembros de los equipos de ben ser intercambiables y reubicables, tanto en la parte de gestión como en la técnica. Una posible solución es la propuesta organizar el equipo en torno a un programador jefe.\nEl mantenimiento del software consiste principalmente en reparar defectos de diseño, añadir nuevas funcionalidades y adaptarse a los cambios en el entorno o la configuración. El coste de mantenimiento de un programa es aproximadamente el 40% del coste de su desarrollo.\nEl número de errores encontrados aumenta con el número de usuarios. El número de errores a lo largo de la vida de un proyecto primero aumenta y luego se estabiliza.\nAl corregir un error existe una alta probabilidad de introducir otros, por los que se debe disponer de casos de prueba que aseguren que esto no se produce.\nDurante la vida de un proyecto el número de módulos se incrementa de forma lineal, pero el número de módulos afectados por las modificaciones se incrementa de forma exponencial. Toda corrección tiende a romper la estructura e incrementa la entropía y el desorden del sistema. Inevitablemente, se llegará a un punto donde la mejor solución es el rediseño.\n12. Herramientas precisas\nTodo proyecto necesita herramientas personalizadas, por lo que el gestor debe establecer la filosofía para establecer los recursos necesarios para su construcción.\nEs necesario instrumentalizar las máquinas sobre las que se va probar para poder extraer resultados de ellas. A la hora de probar en la máquina es mejor repartir periodos separados de tiempo para los distintos miembros.\nLa documentación voluminosa introduce mayor complejidad al proyecto.\nSe debe construir de forma temprana un simulador de rendimiento que analice el programa desde fuera, y hay que prestar atención a lo que dice.\nLas mejores herramientas que existen actualmente (1975) son los lenguajes de alto nivel (aumentan el rendimiento y facilitan la depuración) y la programación interactiva (reduce el tiempo de respuesta en la depuración).\n13. El todo y las partes\nUna buena arquitectura hace que un sistema sea más fácil de usar, más fácil de construir y que tenga menos errores. Antes de empezar la construcción se debe entregar las especificaciones al grupo de test, que debe comprobar si está completa y es clara.\nDiseñar de lo general a lo específico refinando la especificación paso a paso reduce los errores y permite volver atrás cuando sea necesario. Hay que usar una notación de tan alto nivel como sea posible en cada paso.\nLa programación estructurada es el diseño de programas formados por un conjunto reducido de estructuras de control.\nSe demuestra que en la primera interacción de depuración se un progreso hace tres veces mayor que en las subsecuentes. La depuración de un sistema siempre lleva más tiempo de lo planeado.\nSe debe empezar la depuración sólo cuando las piezas parezcan funcionar, en vez de adelantarlo a cuando se hayan detectado errores pero sigan sin ser corregidos.\nMerece la pena construir código de apoyo para la depuración, que puede llegar a ser el 50% del código a depurar.\nDurante la depuración se deben añadir los componentes de uno en uno. Es mejor introducir grandes cambio de forma poco frecuente porque esto introduce menos inestabilidad.\n14. Vislumbrando una catástrofe\nLos proyectos se retrasan día a día. Esto es difícil de reconocer, de prevenir y de arreglar. Para poder controlar un proyecto es necesario tener un calendario con hitos concretos y bien definidos y fechas identificables.\nDiversos estudios han demostrado que las estimaciones no suelen variar hasta el arranque del proyecto, posteriormente se van reduciendo las sobreestimaciones y, tres semanas antes del fin estimado del proyecto, lo que cambian son las infraestimaciones.\nLa planificación de ruta crítica permite identificar que desviaciones son las que realmente importan. Se debe identificar esta ruta crítica lo antes posible.\nTodo jefe necesita ser alertado de las excepcionen que precisen de acciones correctoras y que se muestre el estado del proyecto para su conocimiento. Esto es difícil puesto que los subordinados temen la intromisión del jefe en sus responsabilidades. Se debe disponer de técnicas de revisión que ofrezcan el estado del proyecto a todo el mundo.\n15. La otra cara\nLa documentación para el usuario es tan importante como el propio producto. Es importante también para el autor como memoria de lo que se ha hecho.\nPor regla general no se entrega una buena documentación porque no se ha instruido a los desarrolladores en cómo hacerlo de forma efectiva y económica.\nLa documentación crítica para el usuario se debe establecer antes de la construcción ya que contiene decisiones de planificación básica.\nA nivel de documentación interna, para mantener la documentación actualizada es necesario incorporarla junto con el código fuente. Se debe explicar por qué las cosas son como son, no solamente cómo están hechas. Los lenguajes de alto nivel permiten técnicas de auto-documentación dentro del propio código.\n16. No hay balas de plata – Esencia y accidente\nEl autor compara el desarrollo de software con los hombres-lobo, gente normal que se convierte de repente en algo fuera de control que solo pueden ser eliminados con una bala de plata. Sin embargo, no existen balas de plata para el software que den una mejora de un orden de magnitud en su desarrollo, aunque existen innovaciones que de forma conjunta sí pueden ofrecer esta mejora.\nLa construcción de software implica tareas complejas, acomodar sus estructuras conceptuales, y tareas accidentales, representarlas en lenguajes de programación.\nLas dificultades esenciales del desarrollo de software son la complejidad, conformidad, variabilidad e invisibilidad a la hora de acomodar las complejas estructuras conceptuales que implica.\nEl desarrollo de software también implica tareas accidentales, que son la representación en lenguajes de programación.\nLas mejoras de los últimos tiempos han estado enfocadas en solucionar las dificultades accidentales a través de:\nTiempo de ejecución compartido.\nEntornos de programación unificados.\nSin embargo, la mayor parte del tiempo se dedica a acomodar estructuras conceptuales abstractas de gran complejidad y, por tanto, es esta tarea esencial la que se debe atacar. Se han propuesto las siguientes formas:\nAvances en lenguajes de alto nivel.\nVerificación de programas.\nEntornos y herramientas de trabajo.\nEstas alternativas, aunque introducen mejoras, no han alcanzado los niveles esperados. Es necesario atacar la esencia del software elevando el nivel de abstracción que implica su desarrollo. Los avances más prometedores en este sentido son:\nComprar en lugar de desarrollar.\nRefinado de requisitos y prototipado rápido.\nEncontrar y educar a los mejores diseñadores.\n17. “No hay balas de plata” revisado\nEn este capítulo el autor rebate las críticas recibidas al artículo presentado en el capítulo anterior “No hay balas de plata”. Sobre todo aquellas que van contra el principal argumento del mismo (que no hay ningún avance en el mundo del software que pueda dar por sí solo una mejora de n orden de magnitud), para presentar la propia bala de plata de cada investigador de turno.\nEl autor se reafirma en la idea de que la complejidad es la mayor dificultad inherente al software, aunque la mayor parte de esta complejidad se suele deber a problemas de organización de la propia realidad que se intenta modelar. Esta complejidad se puede atacar aumentando el nivel de abstracción de los elementos utilizados y manteniendo en todo momento sistemas que funcionen y que incorporen nuevas funcionalidades de forma incremental.\nSe introduce el enfoque a la calidad, que aumentaría de la productividad reduciendo el tiempo dedicado a la corrección de errores.\nLa productividad también aumenta con mejores equipos y herramientas de trabajo y el uso de la programación orientada a objetos (que promueve la modularidad, la encapsulación, la herencia y el tipado de datos). Aunque se lamenta de la poca introducción de la orientación a objetos y la reutilización.\n18. Proposiciones de “El mito del mes-persona”\nEste capítulo muestra una recopilación de las afirmaciones expuestas en el libro a modo de resumen.\n19. “El mito del mes-persona” 20 años después\nEste capítulo es una revisión del libro hecha tras 20 años por el propio autor. En ella expone los argumentos que mantiene tras este tiempo y aquellos en los que ha cambiado de opinión.\nEl autor mantiene que la integridad conceptual es el factor más importante para la facilidad de uso de un sistema. Esta integridad conceptual suele lograrse cuando el producto ha sido diseñado por una única persona, pero este enfoque no es productivo para grandes sistemas que sufren presiones competitivas.\nEn estos entornos es necesario tener un arquitecto (o un grupo de ellos organizados de forma jerárquica) que se encargue de la integridad conceptual de todos los aspectos del producto percibibles por el usuario. Además sus tareas estarán separadas de la implementación.\nOtro peligro que se recalca en el desarrollo de sistemas es el de cargarlos de funcionalidades de mínimo valor que compliquen el diseño y el uso de los mismos. Se debe ser consciente de quienes son los usuarios y ponderar las nuevas capacidades que se introducen en función del mayor valor ofrecido al mayor número de usuarios.\nEn lo que sí cambia de opinión es en el consejo de que el primer sistema implementado deba ser desechado. Esto era una consecuencia de la aplicación del desarrollo en cascada, que asume que los pasos del proyecto avanzan uno a continuación de otro, y supone que todos se realizan de forma correcta. El sistema se construye de una sola vez y se asume que todos los errores se introducen en la implementación.\nUn modelo de desarrollo incremental permitiría el refinamiento progresivo del sistema. Se puede construir un sistema inicial de funcionalidad limitada y, a partir del cual hacer crecer el sistema introduciendo nuevas funcionalidades. De esta forma se pueden adelantar las pruebas del sistema y se puede entregar un sistema que funciona cuando sea necesario, aunque de funcionalidad reducida.\nEn cuanto al ocultamiento de información que Parnas proponía y del que el autor desconfiaba, éste se retracta y asume que los programadores son más efectivos si no están expuestos a las interioridades de módulos que no son de su propiedad.\nEl avance en el desarrollo del software se producirá al aumentar el nivel de abstracción de los elementos que se utilizan. En este sentido se han dado los siguientes pasos:\nLa definición del ocultamiento de información de los módulos hecha por Parnas.\nLa aparición de los tipos de dato abstractos de los que pueden derivar otros objetos.\nEl hecho de disponer de clases diseñadas y probadas para ser reutilizadas es lo que permitiría elevar dicho nivel de abstracción.\nLa Ley de Brooks (añadir más gente a un proyecto retrasado lo retrasa más) ha sido refinada gracias a varios estudios, aunque se mantiene como una buena aproximación a la realidad. En realidad, añadir más gente a un proyecto retrasado aumenta su coste, pero no siempre lo retrasa.\nOtra idea que se ha reforzado durante este tiempo es la importancia de las personas que forman parte de los proyectos, y cómo los factores humanos deben ser tomados en consideración. Es importante dar responsabilidades a la gente y no centralizar todo en una única entidad, puesto que esto fomenta la creatividad.\nSe hace eco del avance en el campo de la informática y de la explosión del número de ordenadores. Esto ha cambiado la forma de desarrollar el software y creado una nueva industria, los programas empaquetados.\nRespecto al futuro de la ingeniería del software, presume que, a través del conocimiento, será capaz de lidiar en el futuro podrá con la complejidad del comportamiento humano y los aspectos no lineales que introduce.\nPublicado por Jorge en 3/18/2011 1 comentarios Enlaces a esta entrada\nEtiquetas: Ingeniería del software, Libros\nDurante los últimos meses he estado leyendo y releyendo el libro “Clean Code: A Handbook of Agile Software Craftmanship” de Robert Martin. En este libro, el autor trata por qué hemos de escribir código limpio y cómo hacerlo.\nCódigo Limpio. Este tema es algo que me interesa particularmente en estos momentos. Cuando eres un desarrollador con responsabilidades puntuales dentro de un proyecto y sin relevancia ninguna en cuanto a las decisiones que toma el arquitecto de turno, lo único importante es quitarte el muerto de encima cuanto antes para evitar las típicas preguntas de: ¿Cómo vamos (¿Vamos? Pero si lo estoy haciendo sólo yo…)? ¿En qué estado está esta tarea? ¿Qué pongo en el Project, 80%, 90%...? ¿Podemos hacer la entrega ya?\nSin embargo, cuando tienes cierto grado de responsabilidad sobre un proyecto y te interesa que su evolución no se complique es importante hacer entender a los miembros del equipo que la responsabilidad de cada uno va más allá de quitarse el muerto de encima, sino que cada uno debe hacer lo mejor que pueda por tener un código lo más comprensible posible. Al código comprensible es a lo que Robert Martin llama código limpio.\nEn una primera parte, se explica qué es el código limpio y cómo llegar a él.\nLa segunda parte son ejemplos más complejos de refactorización de código en busca de código más limpio.\nLa tercera parte es una recopilación de pistas que ayudan a encontrar código que no está todo lo bien que debería estar y que debería ser refactorizado.\nEn este resumen del libro me voy a centrar en la primera parte de él, puesto que la segunda y la tercera parte son bastante directas.\nCapítulo 1 - NOMBRES\nLa lectura del código es la actividad a la que se dedica más tiempo, incluso para escribir nuevo código hay que leer lo que ya hay escrito. Un mal código puede llegar a arruinar un proyecto, dificultando las modificaciones y alargando los plazos de entrega. El único responsable de ello es el programador que no se toma en serio su trabajo y no es profesional.\nPara evitar estas situaciones se debe hacer un código limpio, pero, ¿qué es código limpio?. Según varios autores conocidos, las características del código limpio son:\nFácil de leer, expresivo y sencillo.\nProbado mediante tests automáticos.\nHace una única cosa.\nNo existe duplicidad en él.\nUtiliza el menor número de elementos posibles.\nRealiza abstracciones de elementos similares.\nPara conseguir un código limpio se debe prestar atención a cada uno de los elementos que componen un sistema a nivel de código: variables, funciones, clases, comentarios, tests y el propio sistema. Además existen una serie de aspectos, como son la diferenciación entre objetos y estructuras de datos, el comportamiento en los límites del sistema, el manejo de errores y la concurrencia que afectan directamente al código y a su comprensión. Capítulo a capítulo se va analizando cómo mejorar en cada uno de estos elementos\nTembién habla de la regla del Boy Scout “Hay que dejar el código mejor de cómo lo encontraste”. Esto va en la línea de la mejora continua del código y de la imposibilidad de hacerlo perfecto a la primera.\nCapítulo 2 - NOMBRES\nUn buen nombre da mucha más información que cualquier otra cosa. Para conseguir buenos nombres hay que usar nombres descriptivos y claros. Deben ser legibles y evitar codificaciones complejas.\nCapítulo 3 - FUNCIONES\nUna buena función es aquella de la que se puede inferir su comportamiento de un solo vistazo. Para ello deben ser cortas, hacer una única cosa y mantenerse dentro del mismo nivel de abstracción.\nEs importante usar buenos nombres y reducir al mínimo el número de argumentos. Pero lo principal es eliminar toda la duplicidad.\nCapítulo 4 - COMENTARIOS\nLos comentarios no pueden maquillar el mal código. La necesidad de comentarios para aclarar algo es síntoma de que hay código mal escrito que debería ser rediseñado. Es preferible expresarse mediante el propio código.\nHay situaciones en las que los comentarios son apropiados, como cuando tratan de:\nAspectos legales del código.\nAdvertir de consecuencias.\nRemarcar la importancia de algo.\nJavadocs en APIs públicas.\nSin embargo, en el resto de los casos pueden llevar a confusión y deberían ser evitados.\nCapítulo 5 - FORMATEO\nEl formateo afecta directamente a la legibilidad del código. El código se lee de arriba abajo y de izquierda a derecha. Los espacios verticales y horizontales permiten separar ideas y conceptos distintos.\nSe debe mantener un estilo uniforme, y para ello se debe consensuar con todo el equipo las reglas de formateo. Las reglas elegidas no son tan importantes como el hecho de que todo el mundo se atenga a ellas.\nCapítulo 6 - OBJETOS Y ESTRUCTURAS DE DATOS.\nNo todo se puede solucionar usando sólo objetos o sólo estructuras de datos. Hay que aprender a diferenciar en qué situaciones son más convenientes unos u otros. Los objetos esconden sus datos y exponen funciones que permiten manipularlos, mientras que las estructuras de datos exponen datos pero no tiene funciones que operen sobre ellos.\nCapítulo 7 - MANEJO DE ERRORES\nEl código de manejo de errores oculta la verdadera funcionalidad del código. Hay que mantenerlo lo más separado posible de la lógica de negocio para no dificultar la comprensión de ésta última.\nPara no complicar el manejo de errores hay que escribir los bloques try-catch-finally en primer lugar permite identificar los puntos del programa en los cuáles se puede producir una excepción. Se deben usar excepciones en lugar de códigos de retorno. Las excepciones deben proporcionar suficiente información sobre el error y el momento en que se ha producido. Además, las excepciones no comprobadas son menos invasivas a nivel de código.\nTambién se debe evitar pasar null como parámetro de una llamada a un método o devolverlo como valor de retorno. Esto introduce complejidad adicional debido a las comprobaciones necesarias.\nCapítulo 8 - FRONTERAS\nLos sistemas dependen de paquetes de terceros o de componentes desarrollados por otros equipos. Hay que definir de forma clara la frontera entre el código y el exterior para poder acomodar de forma sencilla los futuros cambios, minimizando las partes de nuestro código que dependan de elementos externos.\nLos tests ayudan a experimentar con el código externo viendo cómo puede cubrir nuestras necesidades. También permiten comprobar que las nuevas versiones de la librería siguen cumpliendo con nuestras necesidades.\nEncapsular el conocimiento adquerido a través de los tests en un interfaz entre nuestro sistema y el código de terceros permite localizar en ún único punto las modificaciones debidas a posibles cambios en código que está fuera de nuestro control.\nCapítulo 9 - TESTS UNITARIOS\nEn TDD los tests de seben escribir en primer lugar. Las 3 reglas de TDD son:\nNo se debe escribir código de producción hast que no se tenga un test unitario que falle.\nNo se debe escribir más de un test unitario que lo necesario para que éste falle.\nNo se debe escribir más código de producción uqe el necesario para que pase un tests unitario que fallaba.\nSe debe dar la misma importancia al código de test que al de producción. Los tests permiten que el código de producción se pueda modificar sin temor a introducir nuevos errores, asegurando su mantenibilidad.\nEl número de assert por cada test debe ser lo más bajo posible. Se debe testear un único concepto en cada test, lo que permite ir aclarando los distintos conceptos progresivamente, mejorando el conocimiento sobre el código.\nLas reglas FIRST sobre el código de test son:\nFast: Se deben ejecutar rápido y muy a menudo.\nIndependent: Las condiciones de un test no deben depender de un test anterior.\nRepeteable: Se deben poder ejecutar en cualquier entorno.\nSelf-Validating: El propio test debe decir si se cumple o no, no debe hacer falta realizar comprobaciones posteriores al test.\nTimely: Los tests se deben escribir en el momento adecuado, que es justo ante de escribir el código de producción, lo que permite escribir código fácilmente testeable.\nCapítulo 10 – CLASES\nLas clases se deben organizar situando en primer lugar las constantes públicas, después las variables estáticas privadas, variables de instancia privadas y, a continuación, los métodos. Los métodos privados se encuentran junto a los métodos públicos que los usan.\nSe debe mantener la encapsulación de las clases. Las clases deben ser pequeñas y con un número reducido de responsabilidades. Se consigue una alta cohesión si todos los métodos de una clase hacen uso de todas sus variables privadas.\nLas nuevas funcionalidades se deben de introducir extendiendo el sistema, no modificando el código existente. Las clases concretas contienen detalles de implementación y las clases abstractas expresan conceptos. La dependencia en clases concretas es un riesgo en caso de cambio. Según el principio de inversión de dependencia las clases deben depender de abstracciones.\nCapítulo 11 – SISTEMAS\nEs importante reconocer y separar las distintas responsabilidades de un sistema.\nEn primer lugar, se deben separar el proceso de construcción de un sistema de su uso. El proceso de construcción se encarga de crear y conectar entre sí los objetos necesarios para la ejecución de la aplicación. Se debe modularizar y separar de la lógica de ejecución, permitiendo una estrategia independiente para resolver las dependencias de la aplicación.\nLa inyección de dependencias permite que los objetos sólo se encarguen únicamente de la lógica de negocio. Un elemento contenedor se encarga de inyectar las dependencias de cada objeto de forma externa.\nNo se puede construir sistemas de forma correcta a la primera hay que ir implementando las historias de que se dispone, y después refactorizar y expandir el sistema para seguir implementando nuevas historias. TDD, refactorización y código limpio permiten esto a nivel de código.\nA nivel de sistema, es difícil crecer de sistemas simples a sistemas complejos debido a las dependencias en la arquitectura que se usa. Para evitar estos problemas, se deben separar las distintos responsabilidades de un sistema. Para lograr esta separación se pueden usar proxys, frameworks AOP Java puros o aspectos AspectJ.\nSe debe construir la lógica de la aplicación en base a POJOs a través de tests, e ir evolucionando de lo simple a lo complicado, interconectando los distintos aspectos necesarios.\nCapítulo 12 – EMERGENCIA\nLas siguientes 4 reglas dadas por Kent Beck permiten crear buenos diseños según se trabaja en ellos, conocer nuestro sistema y aplicar buenos principios de diseño:\nEjecutar todos los tests: Los tests verifican que el sistema se comporta según lo esperado. Al construir un sistema testeable se intenta que las clases sean simples y tengan un único propósito, y se trata de reducir el acoplamiento.\nEliminar la duplicación: La duplicación implica trabajo adicional, más riesgo y mayor complejidad.\nExpresar la intención del programador: Usar un código lo más expresivo posible facilita el mantenimiento. Se deben escoger buenos nombres, funciones y clases pequeñas y tests bien escritos.\nMinimizar el número de clases y métodos: Siguiendo las recomendaciones anteriores uno se puede exceder creando demasiadas clases pequeñas. Hay que tener cuidado y mantener un número reducido de clases.\nDurante la refactorización de puede aplicar todo nuestro conocimiento para mejorar el diseño: aumentar la cohesión, reducir el acoplamiento, separar responsabilidades, reducir funciones y clase, escoger nombres mejores, etc.\nSe dedicar tiempo a estas tareas después hacer que el software funcione. No se debe pasar a la siguiente tarea sin repasar lo hecho. Es imposible conseguir un código limpio a la primera, hay que repasarlo una y otra vez para conseguir mejorarlo progresivamente.\nCapítulo 13 – CONCURRENCIA\nLa concurrencia es otro de los aspectos que pueden estar presentes en el código. Permite desacoplar lo que que ocurre de cuándo ocurre, y mejorar tanto el rendimiento como la estructura de una aplicación.\nDesde el punta de vista estructural se puede percibir la aplicación como un grupo de computadoras colaborando entre sí, haciendo el sistema más fácil de entender y permitiendo separar las responsabilidades. La concurrencia permite mejorar los tiempos de respuesta y la eficiencia de una aplicación.\nSe deben tener en cuenta las siguientes ideas sobre la concurrencia:\nIntroduce cierta sobrecarga.\nEs compleja de manejar.\nLos errores causados por ella son difícilmente reproducibles\nNormalmente requiere cambios en el diseño.\nEl problema de la concurrencia es que los distintos hilos de una aplicación pueden entrelazarse siguiendo múltiples flujos de ejecución, lo que puede provocar problemas inesperados en situaciones normales.\nPara defendernos de los problemas de concurrencia es importante que cada clase tenga una única responsabilidad,seperando la gestión de hilos se del resto del código. Hay que conocer las librerías que manejas y entender los distintos modelos de ejecución. Las secciones sincronizadas lo más pequeñas posibles.\nEjecutar pruebas de forma frecuente es la mejor manera de encontrar los posibles errores en el código. Sin embargo, es difícil hacer tests cuando hay concurrencia. Se deben tratar los fallos espúreos como posibles problemas de concurrencia e instrumentar el código para forzar la aparición de errores.\nTodas estas buenas prácticas sobre cómo escribir código limpio se deben ejecitar de forma constante para adquirir buenos hábitos y ser capaces de hacerlo de forma natural. Siguiendo estas prácticas el autor nos promete conseguir un código con el que será mas fácil trabajar y hará mucho menos frustrante nuestro día a día.\nUna idea que se repite en varios puntos del libro es que debemos de ser capaces de exprimir las capacidades de nuestro entorno de trabajo. Conocer nuestro entorno de trabajo nos puede simplificar enormemente nuestro trabajo, puesto que puede realizar por nosotros un montón de actividades de forma automática y nos ofrece una serie de ayudas que nos pueden ayudar en el día a día haciendo innecesarias algunas convenciones que sólo sirven para complicar el código.\nOtra cosa que me ha gustado de este libro es la bibliografía en que se basa. No es excesivamente grande, pero me ha servido para sacar unas buenas recomendaciones sobre otros libros a leer:\nAgile Software Development: Principles, Patterns and Practices, Robert Martin.\nImplementation Patterns, Kent Beck.\nTest Driven Development, Kent Beck.\nExtreme Programming Explained: Embrace Change, Kent Beck.\nRefactoring: Improving the Design of Existing Code, Martin Fowler et al..\nDesign Patterns: Elements or Reusable Object Oriented Software, Gamma et al..\nThe Pragmatic Programmer, Andrew Hunt, Dave Thomas.\nPublicado por Jorge en 1/05/2011 30 comentarios Enlaces a esta entrada\nEtiquetas: Calidad, Libros


Programas gratis en Blog MX - Página 3\nCuando necesitamos editar una fotografía podemos recurrir a herramientas web que son completamente gratuitas, pero que requieren de una conexión a internet. Es por ello que en esta ocasión les recomendaré Toolwiz Pretty Photo un excelente editor de imágenes gratuito que nos ofrece excelentes herramientas. De entrada nos ofrece una interfaz muy amigable, así que no ... Sigue leyendo "Toolwiz Pretty Photo, editor de imágenes gratuito"\nPor: Mauro 20/11/2014\nEtiquetas: Descargas, Editores, Programas gratis\nVer películas en línea gratis con Moviepanda\nPopcorn Time y Cuevana Storm son dos programas muy populares hoy en día con los que podemos ver series y películas en línea gratis, pero no son la única alternativa. En esta ocasión les hablaré de un programa más que seguramente algunos conocen ya. Moviepanda es un programa gratuito para Windows y Mac que te permite ... Sigue leyendo "Ver películas en línea gratis con Moviepanda"\nPor: Mauro 03/11/2014\nEs muy común ver hoy en día como las personas se hacen de un drone con la final de realizar tomas espectaculares. Debido a la gran popularidad que están teniendo estos dispositivos han decidido crear una red social donde encontrarás todo el contenido en un solo lugar. Dronestagram es una red social exclusiva para drones, en ella ... Sigue leyendo "Dronestagram, una red social para drones"\nPor: Mauro 27/10/2014\nEtiquetas: Drones, Dronestagram, Redes Sociales\nPopcorn Time para iOS disponible con jailbreak\nA estas alturas ya debes conocer la aplicación Popcorn Time, la cual es considerada por muchos como el "Netflix pirata". Pues dicha aplicación ya lanzó su versión para iOS, pero para poder instalarla es necesario tener jailbreak, esto debido a las políticas de Apple. Para instalar Popcorn Time para iOS debes tener jailbreak, posteriormente deberás ir a ... Sigue leyendo "Popcorn Time para iOS disponible con jailbreak"\nPor: Mauro 09/10/2014\nEtiquetas: Descargas, iOS, Popcorn Time\nPáginas (52): « 1 2 3 4 5 6 » ... Último »


ARCOIRIS: julio 2007\nDANSILO Y MULTICOLOR\nDANSILO Y MULTICOLOR En aquella pequeña empresa familiar pasaban todo el año haciendo averiguaciones sobre nuevas técnicas y tendencias para llegado el momento de actuar estar a la última y dar salida a todos sus productos. Tintas, papeles especiales, patrones y catálogos se esparcían por entre las mesas de trabajo; algunos tan viejos que amarilleaban y tenían ese olor característico a antiguo, ese olor húmedo que remueve tantos recuerdos familiares de seguridad y calor Ya se acercaba la época de emplearse a fondo; las navidades estaban próximas y no había más tiempo para andar informándose. Era necesario ponerse manos a la obra y hacer esos adornos que tanto gustaban a la gente para colgar en sus puertas en señal de paz y bienvenida, en sus abetos y hasta en sus portales de Belén. Estrellas guías de reyes magos, renos preparados con pequeños paquetes envueltos en papeles brillantes y rayados, guirnaldas de colores, rosas, azules, rojas, doradas, plateadas, figuritas de peces, porrones, guitarras, cáscaras de nuez que servían de cuna a un Jesusito recién nacido, muñecos de nieve abrigados con sombrero y bufanda y por supuesto las bolas de colores. Las eternas bolas, tan frágiles, tan brillantes, tan llamativas y que en el fondo eran las que daban luminosidad al abeto y a la estancia donde éste se encontraba. Daba igual si había o no luces que se encendían y apagaban, ellas, por sí solas eran capaz de llamar la atención de grandes y pequeños. Tocarlas era tan agradable: tan redonditas,tan lisas, tan coloreadas… era como tener un pequeño tesoro entre las manos. Precisamente por su fragilidad no se podía disfrutar plenamente del placer de tocarlas, siempre había un adulto que te decía ten cuidado que va a caerse y a partirse y zas, ocurría ¡Es un fastidio que los adultos siempre ejerzan de adivinos! Efectivamente la navidad se acercaba y todos se pusieron manos a la obra, trabajaban muchas horas porque utilizaban máquinas rudimentarias, por lo que su trabajo personal era muy importante, en estas fechas acababan agotados pero merecía la pena porque sus clientes estaban satisfechos. Una vez que los adornos estaban hechos, Mariano se encargaba de ver si todo estaba bien, sin defectos y los iba embalando en cajas para repartir los pedidos, pero era ya muy tarde y estaba muy cansado por lo que decidió dejarlo para el día siguiente , por la mañana , cuando se levantaran todos las cajas ya estarían listas para enviar. Lo que ocurrió aquella noche en ese almacén fue insólito y fantástico: Se escuchaba un llanto entrecortado e imparable que venia de una caja de bolas sin seleccionar Dansilo el gato de Luisa, la dueña de la empresa, se acercó sigilosamente y se quedó asombrado cuando vio que una de ellas muy grande en comparación con las demás se tambaleaba , impulsada por su propio llanto su color era extraño como si todas las tintas hubieran jugado a mezclarse, y ese aspecto multicolor la hacia distinta de las demás. El susto de ella no fue menor al ver a aquellos ojos enormes que la miraban y al escuchar claramente una voz que le preguntaba por el motivo de su llanto. No soy igual que las otras, confesó, cuando se den cuenta van a desecharme y acabaré en la basura y luego en un vertedero y no podré cumplir mi misión. Ella deseaba hacer las delicias de los pequeños colgada en el abeto navideño de un salón confortable y ser guardada luego con cariño, para los próximos años. Ahora el hipo dominaba sobre el llanto y era tan estridente que Joaquín el vigilante, se extrañó y se paseaba impaciente intentando adivinar de donde venían aquellos ruidos, pero al ver a Dansilo se tranquilizo y pensó que estaría cazando ratones. ¡ Calla no llores más, no eres fea ni deforme sólo un poco grande y multicolor pero nada más! La bola se dio la vuelta y vio Dansilo que no era redondita sino que era aplastada y rugosa por uno de sus lados. - ¿Comprendes ahora mi disgusto?, sollozó la bola No te preocupes no dejaré que acabes en el vertedero a mi me gustas, eres muy brillante y ese color indefinido que tienes te sienta muy bien lo demás ya lo arreglaremos Se hizo el silencio en la noche y cuando los primeros rayos del día empezaron a despuntar, ahí estaba Mariano dispuesto a cumplir su misión, todo iba perfecto cuando de pronto: ¡Oh, ésto que es!, que bola tan grande, vaya mezcla de colores y que deformada está, la cogió y no le pareció fea, pero no cumplía los requisitos así que atravesando el aire a gran velocidad, Multicolor fue a caer en el cajón de las cosas inservibles. Multicolor, casi se desmaya al caer sólo de pensar que podía haberse roto, pero cayó sobre unas guirnaldas que amortiguaron su golpe. Se quedó allí adormecida y callada pensando en su final cuando sintió que algo húmedo y rasposo la tocaba y la elevaba de nuevo, era la lengua de Dansilo… El gato había estado pendiente de lo que ocurría y como le prometió la salvo de ser tirada, la llevó con cuidado entre sus dientes hacia su escondite, allí no la encontrarían. Este lugar no podría ser para siempre porque no era su misión estar oculta Dansilo salió a merodear por la ciudad para intentar dar con una solución al problema de Multicolor En sus andanzas gatunas veía como el tiempo se iba agotando, la gente iba y venía apresurada cargada de paquetes de bolsas, de abetos. Tenía que encontrar un sitio para ella o ambos estarían perdidos, pensaba en ambos porque el se había erigido como su salvador y era un gato noble y cumplidor de su palabra si no conseguía ayudarla sentiría que había fracasado. Mientras tanto Multicolor esperaba allí impaciente sin saber la fecha en la que estaban ya pero podía imaginar que sus compañeras ya estaban ubicadas y se ponía triste al pensar que ella seguía allí. Había cogido cariño a ese gato pero dudaba de que él diera con la solución a su problema. En una de sus salidas nocturnas, iba Dansilo distraído cuando vio como un ratón entraba por un agujero que había en la, pared de lo que a simple vista parecía ser un almacén. El instinto hizo que lo siguiera pero no pudo entrar por ahí porque el agujero era pequeño; de un gran salto se encaramó a un árbol y vio a unos hombres que embalaban adornos navideños a cientos, el ratón dejó de interesarle, se fue corriendo a casa y al llegar al escondite casi sin aliento le contó a Multicolor lo que acababa de ver, ella excitada no sabía si estaba contenta por ella o porque Dansilo le había contagiado el entusiasmo en realidad no sabia de qué podía servirle a ella esa noticia. En el caso de que la transportara allí esos hombres se darían cuenta de sus defectos y ya no habría tiempo para colocarla en ningún lugar. Dansilo cabizbajo se tumbó a su lado y la acarició con su lengua rasposa, sin embargo no pudo descansar esa noche y pensó en volver al almacén para ver donde irían los adornos. Mientras tanto el trabajo en la empresa estaba casi terminado había que recogerlo todo y en fin había que dejarlo listo todo para el próximo año para desgracia de Multicolor no hubo rincón que no fuera objeto de las miradas de Luisa, había que dejarlo todo reluciente… ¡Como estaba el escondite de Dansilo!, hasta una bola defectuosa guardaba en él ¡vaya gato raro! en vez de jugar con ovillos de lana jugaba con bolas de navidad. Cuando Dansilo se dirigió a su rincón ,casi se vuelve loco a ver todo limpio y ordenado: ¡Multicolor, Multicolor!, gritaba impaciente. Salió al patio y nada, fue al garaje y nada… menos mal que se le ocurrió rebuscar en un viejo trastero, allí había unas bolsas que no parecían muy antiguas, sin polvo y recién atadas. Con uñas y dientes, se empeñó en abrirlas y estaba ya un poco desanimado cuando escuchó un gemido conocido. Allí estaba ella rodeada de patrones y guirnaldas, se puso tan contento de haberla encontrado que casi la hace añicos de tanto tirarla por el aire, Multicolor no opuso resistencia, ella también estaba encantada Planearon que esa misma noche irían al almacén y la camuflaría entre todos los adornos, el se quedaría vigilando por si la desechaban recogerla de nuevo, siempre podían pasar las navidades juntos, y eso no era tan malo ¿no?. Esperaron a que todos se hubieran ido y con mucho sigilo salieron del escondite. Multicolor estaba totalmente entusiasmada desde la boca de Dansilo podía contemplar la ciudad y su movimiento, habia mucha gente por las calles y A través de las ventanas podían ver los árboles de navidad, quería pertenecer a uno de ellos. Por fin llegaron al almacén pero para su estupor, Dansilo vio al encaramarse al árbol que no había nada ni nadie, bueno si había un chaval joven que salía del inmueble en una camioneta pequeña, había que seguirlo a toda costa, sabía que era la última oportunidad para Multicolor. El gato en un salto impresionante se colocó en la parte trasera de la camioneta con las cajas y se quedo agazapado y con el corazón latiéndole fuertemente por el susto y por el esfuerzo realizado. Cuando la camioneta paró, Dansilo bajó antes de que nadie pudiera verlo. Ahora lo veía claro estaban en la Plaza del Ombú, la plaza mas grande de la ciudad que se llamaba así ,claro, por tener un ombú de gran porte en el centro. Allí se encontraba el resto de los hombres adornándolo, para que al día siguiente todos los ciudadanos se encontraran con ese maravilloso espectáculo de luces coloridas y brillantes. Dansilo tuvo una idea genial, o eso le pareció a él. ¿Te gusta este lugar multicolor? Si es precioso pero en cuanto esos hombres me vean se reirán de mi y me tirarán lejos. No te preocupes se me ha ocurrido un plan. Después de varias horas los obreros acabaron con su cometido, todos desaparecieron rápidamente, era tarde y estaban cansados, todo estaba silencioso la ciudad pareció haberse dormido y nada brillaba más que aquel árbol Con mucho cuidado Dansilo trepó por el tronco y en un lugar bien visible colocó a Multicolor, su parte rugosa y aplanada cubierta por las ramas Ella estaba tan feliz que no sabía que decir, sólo un gesto de cariño y un gemido de emoción se escapó de ese cuerpecito deforme e increíblemente brillante. Era el lugar perfecto, nunca había imaginado tal felicidad serían unas Navidades estupendas. Los años pasaron y siguió esperando con impaciencia el día de su salida del almacén siendo colocada en el Ombú en un lugar privilegiado bien visible a los ojos de todos. Cuanto le gustaba el ir y venir de la gente que no se no se cansaba de mirar de cerca la majestuosidad del árbol, embellecido en esta época por miles de adornos; belleza a la que ella contribuía. Lo que más le gustaba a Multicolor era ver aparecer a Dansilo, que como todos los años llegaba puntual a su cita con ella, se quedaba agazapado delante del ombú horas y horas contemplándola y haciéndole guiños cariñosos . Ella le respondía con lo que a él más le gustaba Un luminoso destello multicolor CORA BURGOS\nPublicado por Cora Burgos en 12:41 No hay comentarios: Enlaces a esta entrada\nEl Innombrable hablaba en broma de lo serio; y en serio de sus bromas, hacía juegos de las palabras y eso me apasionaba, tocaba la envoltura de mi santificación y disipaba el granito de la muralla donde había sepultado las amapolas. Me enamoré de su risa. No había placer más grande que arder unidos como bosque y enramada, diciendo todo... sin decir nada.Su sonido era la noche tibia, la oscuridad total, el descanso de la luna. Mis murmullos, los grillos que llamaban a sus fantasías. Al igual que los quetzales enseñan sus plumas con gallardía, mostrando sus mejores colores para conquistar; me deslumbraba con su voz y con su ingenio. Se erizaban los anhelos y me deshacía como arena con el viento.El deseo llovió sobre mí al contacto de la caricia esbozada. Me llenó como un pan anula el hambre Era un hombre seductor, entregado al placer del amor, por el placer mismo. Hacía alborotos por todo y con la sensación de cálida serenidad, me enloquecía.Hasta que llegó la noche de no dejar pendiente nada de lo que se había prometido en mil juegos.Los cedros que rodeaban su casa contrastaban con el impecable césped. En la laguna los patos blancos, negros, se mezclaban. Me duché con mil estrellas, me cubrí de: rosas, hierbabuena, claveles, nardos. Era parte de los colores de las flores, el aroma de los árboles; la permanencia solar. Jardinera habilidosa, continuación de la Señora Naturaleza. Sentí que era una ceremonia que nunca finalizaba. Como todas las mujeres me preparé para ser su vino y el mi pan.Sin desperdiciar una palabra, surgió en mi enigmática, la Señora del Amor, llena de fuego.Palidecí de emoción al entrar, por vez primera, en los tormentos del amor. Nos imaginé corriendo hacia la playa solitaria, desprovistos de tela ¡era tan bello!. Ágil, esbelto, con cicatrices, que para mí estaban en el sitio justo, donde con un beso, tocaríamos el cielo. Recorrió todos mis caminos, con inocencia lujuriosa; sabia a noche en el mar. Quería que ese poder me penetrara, en una Ceremonia Ritual del Fuego Nuevo. Al unirnos perdí los limites del entorno; se esparcía y era el universo en una pequeña caja de huesos. Los espasmos, como relámpagos llegaron en oleadas. Las aguas claras mojaron mi interior y su sal se introdujo para tejer de nueva cuenta, nuestra historia. Mi Señor del Cielo se entreabría enseñando la hilera de dientes un poco disparejos, tan blancos y afilados; era un mosaico, un vitral, una oda de pasión.Sabía perfectamente, como si fuera navegante, del mapa femenino y en él andaba de un lado a otro. Conocía del tiempo que éste necesita y me conducía por esos laberintos a todos los caminos del placer para que gozara una y otra vez. Se solazaba al percibir mi voz llena de sonrisas. Sabía de mi rendición sin condiciones. Al final, cuando me encontraba extenuada me acompañó en ese viaje húmedo; eternamente humano y vulnerable. Navegamos y llegamos a destiempo "intemporal" al mismo Puerto.Se reunieron en mi todas las mujeres y esa legión femenina arrollaba la razón. Hallé formas en la espesura de su danza. Con la boca seca, nos privamos de comer, de la fatiga. Fuimos un gemido, un solo cuerpoVino y sangreTierra y CieloGrito y almaVoz y misterio Mis palabras eran eco de las suyas, confundiéndose sin saber cuál era la boca que decía. Era la música, yo su letra... fuimos una copla erótica, una rapsodia de vida y muerte.A medianoche bañados en abandono letal, emitíamos susurros que escoltaban las caricias, la sed de beber el agua que penetraba en la tierra. Su nombre era la nota más bella... por eso ahora no lo repito.A la garganta acudían enrolladas palabras plateadas en lustros detenidos, en la hoja del libro de la espada, que antes en blanco, y ahora pintada de mil demandas amorosas escribimos que la totalidad del destino duerme\nPublicado por Cora Burgos en 12:21 No hay comentarios: Enlaces a esta entrada\nHOLA AMIGOS: aqui empiezo una nueva andadura, en la que de alguna forma intento acercarme a todos a traves de relatos, vivencias, pensamientos, y musica. estoy aqui como niña pequeña con zapatos nuevos, porque esta experiencia lo es para mi, absolutamente nueva, y por estrenar. no se a cuantas personas podre llegar a traves de este medio pero solo tengo ahora mismo un deseo, que en el cielo de todos, un arcoiris brillante, este presente, sea cual sea su estado animico, que todos se asomen a la ventana y vean que otro dia precioso ha nacido, listo para regalarnos, la brisa, el sol y hasta los nublados, nubes blandas. algodonosas, con formas amables que invitan al paseo. en esta mañana de jueves, 19 de julio, solo puedo decir que el ARCOIRIS esta presente en mis acciones.\nPublicado por Cora Burgos en 11:53 No hay comentarios: Enlaces a esta entrada


Las neuroprótesis visuales están más cerca de ser una realidad. Investigadores españoles han participado en el desarrollo de un implante cerebral con electrodos que permitiría ver formas, letras y movimiento a personas ciegas.\nActualizado a 18 de diciembre de 2020, 16:24\nMás de mil electrodos\n¿El embrión de las prótesis visuales?\nObjetivo futuro: revertir la ceguera\nLa tecnología al servicio de la medicina está dando resultados hasta no hace mucho inimaginables. Ya ocurrió con los implantes cocleares que permiten oír a las personas sordas como si de un milagro se tratase.\nY puede que pronto veamos algo similar con la ceguera: se ha desarrollado un nuevo implante cerebral con electrodos que podría ayudar a personas ciegas a ver formas, movimientos y letras.\nSe trata de una investigación internacional publicada en la revista Science en la que ha participado el equipo de Eduardo Fernández, investigador del CIBER de Bioingeniería, Biomateriales y Nanomedicina (CIBER-BBN), junto con expertos del Instituto de Neurociencias de Holanda.\nEl invento que podría suponer en un futuro un antes y un después para las personas ciegas consta de más de mil electrodos:\nLos microdispositivos, implantados en la parte del cerebro que procesa la visión, han demostrado en dos primates que la microestimulación eléctrica del cerebro es capaz de inducir con precisión la percepción de formas, movimiento y letras.\nGracias al elevado número de electrodos implantados (1.024) se ha conseguido que las percepciones visuales se produzcan en una porción significativa del campo visual y con una resolución mucho más alta de lo que se había conseguido hasta ahora.\n"También hemos conseguido implantar electrodos de manera simultánea en varias áreas cerebrales y hemos detectado que la estimulación de las neuronas de una de las áreas visuales, conocida como V4, es capaz de predecir la cantidad de corriente que se necesita para inducir la percepción de fosfenos (pequeños puntos de luz) en la corteza visual", explica Eduardo Fernández. Detalles técnicos que aportan mucho en el desarrollo de esta tecnología en un futuro.\nEsta es la primera vez que se realiza un implante cerebral con un número tan alto de microelectrodos y los resultados, augura Eduardo Fernández, son muy prometedores para el desarrollo de una neuroprótesis visual basada en microelectrodos similares a los implantados en los primates.\nPodría ayudar a personas ciegas o con baja visión a mejorar su movilidad e incluso a percibir el entorno que les rodea y orientarse en él.\nLa carrera de la ciencia para acabar con la ceguera hace tiempo que está en marcha.\nEn los últimos años se han descubierto tratamientos innovadores para algunas patologías visuales basados en:\nFactoresneurotróficos. Familia de proteínas que ayuda a la supervivencia de las neuronas.\nSin embargo, la mayoría de estos tratamientos están todavía en fase clínico-experimental muy preliminar.\nLos implantes cerebrales con electrodos son un gran paso más en este sentido, aunque todavía queda un largo camino por recorrer.\n"Es muy probable que estos tratamientos no sean de utilidad para todas las personas ciegas, pero las neuroprótesis visuales corticales son una necesidad para el futuro y podrían ayudar a mejorar la calidad de vida de muchas de personas", remarca Eduardo Fernández, también director del Grupo de Neuroingeniería Biomédica del Instituto de Bioingeniería de la Universidad Miguel Hernández (UMH) de Elche.\nDe todas maneras, el investigador apela a la prudencia y asegura que todavía no pueden lanzarse campanas al vuelo:\n"Aunque los resultados de este trabajo son muy útiles para avanzar en el desarrollo de esta tecnología, es muy importante avanzar poco a poco y no crear falsas expectativas, ya que de momento solo se trata de una investigación en curso", concluye.\nHipertensión ocular: síntomas y tratamiento\n¿Sabrías detectar el desprendimiento de retina?


Read Online Bible - Spanish Bible Online -Español (Modern Spanish) on Jesus Work Ministry 1 Chronicles Chapter 7:1-40.\n1CHRON 7:1 Los hijos de Isacar fueron cuatro: Tola, Fúa, Jasub y Simrón.\n1CHRON 7:2 Los hijos de Tola fueron: Uzi, Refaías, Jeriel, Jajmai, Jibsam y Samuel, jefes de sus casas paternas. De los clanes de Tola fueron contados, según sus generaciones, en el tiempo de David, 22.600 hombres valientes.\n1CHRON 7:3 Los hijos de Uzi fueron: Israjías y los hijos de Israjías que fueron Micael, Abdías, Joel e Isías, cinco jefes en total.\n1CHRON 7:4 Con ellos había 36.000 hombres de guerra según sus clanes y sus casas paternas, porque tuvieron muchas mujeres e hijos.\n1CHRON 7:5 Y sus hermanos, según todos los clanes de Isacar contados en sus registros genealógicos, eran 87.000 hombres valientes.\n1CHRON 7:6 Los hijos de Benjamín fueron tres: Bela, Bequer y Yediael.\n1CHRON 7:7 Los hijos de Bela fueron: Ezbón, Uzi, Uziel, Jerimot e Iri; cinco jefes de casas paternas, hombres valientes; y en sus registros genealógicos fueron contados 22.034.\n1CHRON 7:8 Los hijos de Bequer fueron: Zemira, Joás, Eliezer, Elioenai, Omri, Jerimot, Abías, Anatot y Alémet. Todos éstos fueron hijos de Bequer.\n1CHRON 7:9 Contados en sus registros genealógicos, según sus generaciones, los que eran jefes de sus casas paternas fueron 20.200 hombres valientes.\n1CHRON 7:10 Bilhán fue hijo de Yediael. Y los hijos de Bilhán fueron: Jeús, Benjamín, Ehud, Quenaana, Zetán, Tarsis y Ajisajar.\n1CHRON 7:11 Todos éstos fueron hijos de Yediael, jefes de casas paternas: 17.200 hombres valientes que salían para combatir en la guerra.\n1CHRON 7:12 Supim y Hupim fueron hijos de Ir. Husim fue hijo de Ajer.\n1CHRON 7:13 Los hijos de Neftalí fueron: Yajzeel, Guni, Jezer y Salum, hijos de Bilha.\n1CHRON 7:14 Los hijos de Manasés fueron: Asriel, al cual dio a luz su concubina siria. Ella también dio a luz a Maquir, padre de Galaad.\n1CHRON 7:15 Maquir tomó mujer para Hupim y Supim. Su hermana se llamaba Maaca. El nombre del segundo era Zelofejad, quien sólo tuvo hijas.\n1CHRON 7:16 Maaca, mujer de Maquir, dio a luz otro hijo y lo llamó Peres. El nombre de su hermano fue Seres, cuyos hijos fueron Ulam y Requem.\n1CHRON 7:17 Hijo de Ulam fue Bedán. Éstos fueron hijos de Galaad hijo de Maquir, hijo de Manasés.\n1CHRON 7:18 Su hermana Hamolequet dio a luz a Isjod, a Abiezer y a Majla.\n1CHRON 7:19 Los hijos de Semida fueron: Ajián, Siquem, Licji y Aniam.\n1CHRON 7:20 Los hijos de Efraín fueron: Sutélaj, Bequer su hijo, Tajat su hijo, Elada su hijo, Tajat su hijo,\n1CHRON 7:21 Zabad su hijo, Sutélaj su hijo, Ezer y Elad. Pero los hombres de Gat, naturales de aquella tierra, los mataron, porque bajaron para quitarles sus ganados.\n1CHRON 7:22 Entonces su padre Efraín hizo duelo durante muchos días, y sus hermanos fueron a consolarlo.\n1CHRON 7:23 Después se unió a su mujer, y ella concibió y dio a luz un hijo, al cual le puso por nombre Bería, porque había estado en aflicción en su casa.\n1CHRON 7:24 Su hija fue Seera, la cual edificó Bet-jorón Baja y Alta, y Uzen-seera.\n1CHRON 7:25 Réfaj fue su hijo, Resef su hijo, Télaj su hijo, Taján su hijo,\n1CHRON 7:26 Ladán su hijo, Amihud su hijo, Elisama su hijo,\n1CHRON 7:27 Nun su hijo y Josué su hijo.\n1CHRON 7:28 Su posesión y sus lugares de residencia fueron Betel con sus aldeas, Naarán hacia el este, y Gezer con sus aldeas hacia el oeste. Asimismo, Siquem con sus aldeas, hasta Gaza con sus aldeas.\n1CHRON 7:29 Y junto al territorio de los hijos de Manasés, Bet-seán con sus aldeas, Taanac con sus aldeas, Meguido con sus aldeas y Dor con sus aldeas. En estos lugares habitaron los hijos de José hijo de Israel.\n1CHRON 7:30 Los hijos de Aser fueron: Imna, Isva, Isvi, Bería y su hermana Séraj.\n1CHRON 7:31 Los hijos de Bería fueron Heber y Malquiel, el cual fue padre de Birzavit.\n1CHRON 7:32 Heber engendró a Jaflet, a Semer, a Hotam y a Súa, la hermana de ellos.\n1CHRON 7:33 Los hijos de Jaflet fueron: Pasac, Bimhal y Asvat; éstos fueron hijos de Jaflet.\n1CHRON 7:34 Los hijos de Semer fueron: Aji, Rohga, Juba y Aram.\n1CHRON 7:35 Los hijos de su hermano Helem fueron: Zófaj, Imna, Seles y Amal.\n1CHRON 7:36 Los hijos de Zófaj fueron: Súa, Harnefer, Sual, Beri, Imra,\n1CHRON 7:37 Beser, Hod, Sama, Silsa, Jeter y Beera.\n1CHRON 7:38 Los hijos de Jeter fueron: Jefone, Pispa y Ara.\n1CHRON 7:39 Los hijos de Ula fueron: Araj, Haniel y Rizia.\n1CHRON 7:40 Todos éstos fueron hijos de Aser, jefes de casas paternas, escogidos y valerosos soldados, jefes de príncipes. Y contados en sus registros genealógicos, para el servicio en la batalla, fueron 26.000 hombres.


RÍO PILCOMAYO: REVELAMIENTO ANTE POSIBLES CRECIDAS - Ciudad FM 88.1\nRÍO PILCOMAYO: REVELAMIENTO ANTE POSIBLES CRECIDAS\nAnoche se reunió el Comité de Emergencias en la localidad de Santa Victoria Este, se evaluó el nivel del rio proyectado hacia el fin de semana. Policías recorrieron distintos parajes de la zona a fin de recabar información y llevar tranquilidad a los vecinos.\nAyer en horas de la tarde el 2do Director de Unidad Regional 4 Comisario Mayor Marcelo Armella, recorrió los parajes, la Puntana, El Quebrachal, El Algarrobal, el Buen Destino, la Puntana Grande, Hito I, Monte Carmelo, La Curvita y Santa María. Y formo parte de la reunión realizada en la localidad de Santa Victoria Este con el Comité de Emergencias integrado por autoridades municipales, profesionales de la salud, Gendarmería Nacional y Vialidad.\nEl objetivo fue llevar tranquilidad a los vecinos de la zona, sobre los niveles de posibles crecida y pronostico estimativo esperado para el fin de semana. Destacando que no se esperan grandes crecidas en los próximos días.