Mostrando entradas con la etiqueta Formación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Formación. Mostrar todas las entradas

domingo, 25 de agosto de 2019

Experto vs. No iniciado

Hoy os quiero mostrar un vídeo con el que suelo comenzar todas mis presentaciones y cursos de formación.


Es un pequeño sketch de programa Splunge (RTVE) que tiene ya unos añitos.

Me gusta porque refleja muy bien la situación de falta de comunicación con un experto en un tema determinado (bricolaje en este caso).

Siempre comento a los asistentes que mi objetivo es conseguir no reproducir esta situación.

Ayer di una charla a un grupo de mayores (no tecnólogos) sobre teléfonos móviles (copias de seguridad, mantenimiento del terminal,...), gracias al vídeo se soltaron bastante y conseguimos entre todos liberar varios gigas de sus teléfonos, más de un@ se ahorró cambiar de terminal.

lunes, 19 de agosto de 2019

La máquina autoreplicable de Von Neumann

A Von Neumann todos los informátic@s le conocemos por "la arquitectura de Von Neumann", para que os hagáis una idea, todos los ordenadores, teléfonos móviles, tablets, consolas,... funcionan siguiendo esta arquitectura (virtualmente hablando).

Pero de entre todas las cosas que hizo (https://es.wikipedia.org/wiki/John_von_Neumann), siempre ha habido una de sus teorías que me ha llamado la atención: "La máquina de Von Neumann".

Este concepto se basa en la autoreplicación, que es lo que hacen los virus cuando se infiltran en nuestro organismo. Si pensamos en los virus informáticos, son máquinas de Von Neumann al 100%.

La teoría de estas máquinas surge de la idea de realizar tareas muy pesadas en entornos hostiles, a los que el hombre no puede acceder, por ejemplo: extracción de mineral en otros planetas.

Voy a demostraros la potencia de estas máquinas a través de este problema:

Supongamos que en el planeta X se ha encontrado una veta de mineral, con el que se obtiene hierro después de procesarlo. Estimamos que en la veta hay 20.000 toneladas de ese mineral. Tenemos una máquina que extrae una tonelada del mineral en una semana, y después tarda tres días en procesarlo y obtener hierro. ¿Cómo hacemos para extraer todo ese mineral? Hay que tener en cuenta que ningún ser humano puede pisar en ese planeta.

a) Primera idea: mandamos un cohete con un robot, el robot extrae el material, lo procesa, lo mete en el cohete y éste hace viajes de ida y vuelta con el material.


Éste es nuestro amigo, que sólo conoce 2 órdenes: Extrae y Procesa

Tiempo de extracción y procesado: 10 x 20.000 = 200.000 días ->  548 años (redondeando)

Se nos va un pelín de tiempo.

b) Con la máquina de Von Neumann: mandamos un cohete con un robot igual que el anterior, pero además puede autoreplicarse en 30 días consumiendo una tonelada de material en el proceso.

Nuestro amigo, que ahora conoce 3 órdenes: Extrae, Procesa
 y Replica

Supongamos cinco iteraciones en el proceso de replicación:

1) Robot original:
     - Extrae material y lo procesa: 10 días
     - Se replica: 30 días
     - Resultado: un robot adicional (primera generación)
2) Tenemos dos robots
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: dos robots adicionales (segunda generación)
3) Tenemos cuatro robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: cuatro robots adicionales (tercera generación)
4) Tenemos ocho robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: ocho robots adicionales (cuarta generación)
5) Tenemos 16 robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: 16 robots adicionales (quinta generación)

Se acaba la fase de autoreplicación, si todo ha ido bien en total tenemos a 32 robots funcionales, y hemos perdido:

 - 31 toneladas de material (en las replicaciones), nos quedan 19.969 toneladas por extraer
 - 200 días (5 iteraciones de 40 días)

Veremos si han merecido la pena estas pérdidas, teniendo en cuenta que nos quedan 19.969 toneladas por extraer.

Empezamos la fase de extracción:

19.969 x 10 = 199.690 días 

199.690 días / 32 robots = 6.240 días -> 17 años (redondeando de nuevo)

Hemos perdido algo de material, pero el tiempo se ha reducido considerablemente: 531 años.

Si aumentáramos el número de iteraciones de la replicación, podríamos seguir bajando el tiempo.

Un genio este Von Neumann.

Imagen de Johnny 5 por cortesía de Wikimedia: https://es.wikipedia.org/wiki/Johnny_5

martes, 30 de enero de 2018

Un par de cursos interesantes en MiríadaX y EDX



Ya os hemos hablado alguna vez de los cursos en MiríadaX, para el que no lo sepa es una plataforma online donde se imparten cursos de formación de manera gratuita.

Mañana empieza "Gestión de proyectos Software con Git y GitHub", el cual es una pequeña introducción para una serie de cursos cuyo núcleo es Node.js

Yo me he apuntado sin dudarlo, aunque trabajo a diario con Git, seguro que aprendo algo nuevo.

También he estado buscando un curso de Android que hice hace unos años. Lo he encontrado EDX, otra plataforma de formación online. Lo quiero volver a hacer para refrescar conceptos y tantear Android Studio, en la edición que yo hice aún se usaba "Eclipse".

El curso es "Android: introducción a la programación", no os dejéis engañar por el título, es bastante completo.

A ver cómo me las apaño para intercalar tanta formación con el juego.

domingo, 14 de junio de 2015

Gestión de dependencias en .Net con nuget



Como mi compañero Juan Carlos Ballesteros ha hecho una introducción sobre la gestión de dependencias con Maven, hoy quiero contribuir con una introducción sobre la gestión de dependencias en .Net con NuGet.

Nuget apareció en el mundo de .Net en 2010, y desde Visual Studio 2012 viene instalado como una extensión:


Gracias a Nuget la gestión de paquetes y las dependencias entre los mismos es mucho más sencilla que antes. Ya no es necesario buscar el paquete manualmente, bajarlo y después referenciarlo, ahora Nuget realiza todo este trabajo con un solo click.

Además no sólo se pueden gestionar los paquetes de forma visual, sino que también se dispone de una consola llamada Package Manager Console en la que se pueden introducir comandos:


NuGet permite no sólo la instalación y gestión de dependencias en nuestros proyectos .Net, sino que además puede ejecutar scripts Powershell que ayuden a completar la inclusión de las dependencias: por ejemplo, para modificar un fichero de configuración que incluya una sección en la que se declara el componente recién introducido.

Cuando se instala NuGet como complemento de Visual Studio, aparece una nueva opción en el menú "Tools/Herramientas" que da acceso a la configuración de NuGet:

Si se accede a la opción "Package Manager Settings" se puede ver que en "Package Sources" se configuran los repositorios a los que se quiere acceder para encontrar los paquetes. Por defecto viene configurado el repositorio oficial de paquetes de Microsoft https://www.nuget.org/, que también puede visitarse por web, pero pueden configurarse repositorios alternativos, como por ejemplo, un repositorio en nuestra empresa que distribuya los componentes internos desarrollados para sus aplicaciones corporativas:


Y como lo mejor es verlo con un ejemplo, vamos a ello.

Supongamos que creamos una aplicación utilizando Visual Studio 2013 en ASP.Net MVC 5:


Hay que destacar que en las propias plantillas de proyectos de Microsoft, como ésta de MVC 5, ya se incluyen varios paquetes de NuGet que se instalan durante la creación del proyecto. 

Para ver las referencias de NuGet utilizadas por un proyecto, se utiliza el menú contextual "Manage NuGet Packages" sobre las referencias de dicho proyecto, o bien en la consola de comandos con "Get-Package -ListAvailable -Filter PackageName", que se comenta más adelante:



Aquí se puede ver que un paquete no son sólo referencias de tipo librería (dll) como por ejemplo "Json.NET", sino que también se pueden incluir como paquetes NuGet otro tipo de componentes, por ejemplo componentes propios de Microsoft (Microsoft ASP.NET MVC), librerías javascript como "jQuery" o frameworks CSS como "bootstrap".

Vamos a añadir a este proyecto el uso de Entity Framework de Microsoft para manejar las conexiones y entidades de Base de Datos:

1) Dentro de "Tools"/"NuGet Package Manager"/"Manage NuGet Packages for Solution", o bien con el menú contextual sobre las Referencias del proyecto, "Manage Nuget Packages..." se elige "Online" y el repositorio donde se encuentra el paquete de Entity Framework, en este caso, nuget.org Si hiciera falta, se puede utilizar el cuadro de búsqueda para buscar el paquete concreto a instalar:


2) Se pulsa "Install/Instalar" y NuGet procederá a la resolución de dependencias actuales dentro del proyecto e instalación del paquete seleccionado. A veces hay que aceptar el uso de licencias durante el proceso. En este caso, el paquete aparte de incluir las referencias necesarias modificará el fichero Web.config para añadir una nueva sección para Entity Framework:



Una vez terminado el proceso podremos ver las nuevas referencias "EntityFramework" y "EntityFramework.SqlServer" añadidas al proyecto, además de las secciones necesarias añadidas al "Web.config".

También se puede ver, añadido al proyecto, un fichero "packages.config" donde se puede ver todos los paquetes NuGet utilizados por el proyecto con sus versiones y versión de framework. Este fichero es utilizado por NuGet para saber tanto los paquetes ya instalados como para comprobar si hay actualizaciones para dichos paquetes:


Como se ha comentado anteriormente, en Visual Studio se dispone de la "Package Manager Console" que también permite la gestión de estas dependencias. Para el caso del ejemplo anterior, si en vez de utilizar el menú visual para instalar Entity Framework en nuestra aplicación MVC quisiéramos hacerlo por comando, sería tan sencillo como elegir la fuente y proyecto y después introducir el comando "Install-Package PackageName":


Esta consola de comandos es muy útil en determinadas situaciones, como por ejemplo, cuando se quiere instalar una versión específica de un paquete que no sea la última. Esto no es posible por el menú visual, pero sí por línea de comandos con el modificador "-Version" al comando "Install-Package".

Para instalar una actualización de un paquete, si está disponible, se verá en el apartado "Updates/Actualizaciones" dentro del "Nuget Package Manager"/"Manage Nuget Packages". Se pueden actualizar paquetes individuales o bien todos a la vez con el botón "Update All/Actualizar Todos". También se puede realizar la acción por la consola de comandos con "Update-Package PackageName":


Para desinstalar un paquete concreto, se selecciona dentro de la sección "Installed packages/Paquetes instalados" y se elige "Uninstall/Desinstalar", o bien con el comando "Uninstall-Package PackageName":


Y para finalizar, comentar que en nuget.org se encuentra no sólo el repositorio de todos estos paquetes, sino que se pueden buscar versiones anteriores de los mismos, consultar la documentación asociada y autores, y ver también el blog propio de nuget.org y documentación completa:




domingo, 5 de abril de 2015

Documentación y recursos de Microsoft


En este post la intención es comentar y enumerar los recursos y documentación disponibles en Internet sobre las tecnologías Microsoft.

En las primeras versiones de Visual Studio se incluían varios CD's de documentación para ser instalada en el ordenador. Esta documentación, llamada MSDN (Microsoft Developer Network) junto con Internet eran la forma de encontrar las soluciones a los problemas que encontrábamos en el trabajo diario con las primeras versiones del framework .Net.

Sin embargo poco a poco fueron apareciendo, impulsados por la propia Microsoft, más recursos disponibles on-line, y en la actualidad hay todo un ecosistema de documentación, cursos, tutoriales, blogs, etc., que sumados a los recursos "habituales" que todo profesional del software suele utilizar (como StackOverflow, por ejemplo), facilitan enormemente el trabajo diario con las herramientas software de Microsoft.

A continuación veremos unos cuantos de estos recursos disponibles:

1) MSDN. Microsoft Developer Network. Probablemente la fuente de documentación más conocida. Es una web muy completa donde se puede encontrar información de todo tipo sobre las tecnologías Microsoft:


Como ejemplo, en el apartado "Documentación" se puede encontrar la referencia al API de Microsoft, lo que nos permitirá ver toda la información de todas las tecnologías, consultar namespaces, funciones, propiedades...


2) Microsoft TechNet. En esta página web Microsoft pone a disposición de la Comunidad TI numerosos recursos y herramientas. 

Aquí se pueden encontrar encuentran noticias, enlaces a descargas, solución de problemas, y una amplia comunidad de profesionales entre los que se encuentran MVP's de Microsoft, que intervienen en foros y escriben en blogs para ayudar a difundir las tecnologías Microsoft.

3) Páginas de recursos específicos. Debido a que Microsoft ofrece recursos y soluciones en múltiples campos, para sus productos más conocidos y utilizados es posible encontrar una página web específica que concentra toda la información relativa a dicho producto. Por ejemplo:

IIS.Net. Página web sobre Internet Information Server, el servidor web de Microsoft.
ASP.Net. Página web sobre ASP.Net, el framework web de Microsoft para la construcción de websites y aplicaciones web.
Visual Studio. Toda la información relativa al compilador de .Net Visual Studio, tanto en su versión off-line como en su versión on-line.
Microsoft .Net. Toda la información sobre el framework de programación .Net.
Azure. La nube de Microsoft. El acceso e información sobre la misma se puede encontrar aquí.

4) Blogs. Muchos profesionales, evangelistas, MVP's de Microsoft y principales responsables de los productos más utilizados escriben en blogs acerca de estos productos y tecnologías, como por ejemplo Scott Hanselman, Scott Guthrie o S. Somasegar. En español tenemos por ejemplo Geeks.ms, donde numerosos profesionales de Microsoft escriben numerosos artículos en castellano.

5) Microsoft Virtual Academy. Academia Virtual de Microsoft. Aquí se concentran múltiples cursos y eventos en directo. La inscripción con la cuenta de Outlook es gratuita, y una vez dentro se pueden buscar cursos por tecnología y crearse un plan de aprendizaje personalizado. Esta academia utiliza gamificación, de forma que por cada curso terminado se nos otorgan unos puntos que nos clasifican en el conjunto de usuarios registrados, y además es posible obtener puntos de bonificación. La mayoría de los vídeos de los cursos se encuentran en inglés, pero muchos de ellos tienen subtítulos disponibles. Estos cursos están impartidos por profesionales de Microsoft.

Finalmente, es muy importante destacar, que aunque estos recursos se encuentran focalizados en tecnologías Microsoft, hay que tener en cuenta que Microsoft se está abriendo cada vez más a la integración y uso de otras tecnologías, especialmente al software libre (Open Source). Por eso no debe extrañar ver un curso sobre MongoDB o Git en la Microsoft Virtual Academy, o que al utilizar Azure se pueda configurar y utilizar una máquina virtual Linux, o que incluso el código fuente del framework .Net esté disponible en GitHub. Así que no es de extrañar el poder encontrar información sobre otras tecnologías en estas páginas, y no sólo de las tecnologías Microsoft.

Espero que esta información os sea útil y os facilite un poco más el trabajo del día a día con tecnologías y productos Microsoft como me lo facilita a mí.

miércoles, 14 de enero de 2015

Nuevos modelos de desarrollo: Scrum

El año pasado Rebeca nos hablaba sobre los MOOC que últimamente están tan de moda, en concreto nos hacía referencia a MiriadaX y a un curso sobre Agilidad y Lean (lee el artículo completo aquí) y yo quería hablaros sobre Scrum, que es un modelo de desarrollo ágil del software que me llama mucho la atención y se adapta mejor a los tiempos que corren.

Los modelos tradicionales de desarrollo, en los que hay una planificación casi invariable del alcance, el tiempo y el coste del proyecto tras un análisis exhaustivo de los requerimientos, son buenos para otras ingenierías o arquitecturas, como por ejemplo las construcciones de viviendas o edificios donde es muy fácil distinguir las diferentes fases del proyecto que han de llevar un orden concreto, pero esto no siempre pasa en las aplicaciones software puesto que nos aparecen clientes que no pueden esperar a que se finalice el edificio para utilizar un aseo, o no tienen presupuesto para abarcar un proyecto completo, o no tienen claros todos sus requerimientos sino una pequeña parte de los mismos o simplemente no quieren casarse contigo hasta la finalización del proyecto.

Scrum da respuesta a este tipo de problemas ya que adopta una estrategia de desarrollo incremental e iterativa, en lugar de la planificación y ejecución completa del producto solapando las fases del desarrollo, consiguiendo de este modo que los cambios de alcance (ya sea por nuevos requerimientos o por mala interpretación de los mismos por parte de los analistas o el equipo de desarrollo) no interfieran en absoluto.

Como ya he comentado anteriormente, en los desarrollos tradicionales los requisitos han de estar desde el comienzo y el equipo de desarrollo ha de adaptar el trabajo a los plazos y criterios definidos en el análisis al principio, y no se comienza el desarrollo hasta que dicho análisis quede finalizado. Mencionar que las estadísticas hablan de que la incertidumbre de un análisis aumenta un 4% con cada mes que analizamos por adelantado, un proyecto analizado a 1 año tendría un 50% de incertidumbre. En cambio Scrum define la sucesión de una serie de ciclos al final de los cuales el cliente recibe un trozo del producto que puede ser considerado terminado y completo pese a contener únicamente la implementación de unos pocos requisitos del cliente. La clave está en que después del ciclo obtenemos feedback del cliente y podemos adaptar el siguiente ciclo a posibles cambios de los requisitos y lo que en ese momento es prioritario, aprendiendo con cada iteración lo que es importante para el cliente y reduciendo la incertidumbre a la mínima expresión.

¿Cómo es esto? Al principio de cada reunión el equipo de desarrollo elige de entre el listado ordenado por importancia para el cliente, qué requisitos va a implementar en ese ciclo. Y no solo los elige sino que se compromete a tenerlos terminados y probados para la fecha concretada y se pone a trabajar en ellos. Durante el tiempo de trabajo nadie puede interrumpirles ni influir en su ritmo de trabajo.
Marco de trabajo Scrum

Tras esta breve introducción al Scrum (puedes aprender más en los cursos de Scrummanager o visitar el blog de mi amigo Alex quisiera comentar desde mi experiencia, por qué me parece interesante y que dificultades le veo en la implantación de este modelo de desarrollo.

Por un lado Scrum da importancia al equipo y al conocimiento tácito de las personas. Desde que comencé a trabajar y tras mi paso por varias empresas lo importante siempre han sido los compañeros. Cuando hemos tenido buen ambiente entre nosotros y hemos cogido un compromiso con un plazo de entrega, hemos puesto toda la carne en el asador para llegar a ello intentando hacer las cosas bien, aprendiendo de los demás del equipo y compartiendo con ellos mis propios conocimientos. En cambio no pasa lo mismo cuando las decisiones no las tomas tú sino que te las imponen o el equipo no está cohesionado o aparecen interrupciones en el trabajo diario o cuando antes de terminar lo que estás realizando te cambian de repente el alcance del proyecto y tu trabajo no ha servido para nada.

Por otro lado cuando el cliente recibe entregas funcionales que puede utilizar cada breve espacio de tiempo se involucra más en el desarrollo de algo que será suyo. Le es más fácil percibir que sus impresiones, ideas y opiniones son tomadas en cuenta y se reflejan al poco tiempo en el producto que recibe, dándose cuenta de la dificultad que tiene implementar sus peticiones, de modo que está también más receptivo ante retrasos y/o errores.

De todos modos cabe destacar que no es fácil llegar a implantar esta metodología de trabajo ya que hay que conseguir cambiar el modo de pensar de toda la organización, desde la directiva y la gerencia hasta el propio: hace poco a comienzos de un proyecto personal a pequeña escala intenté implantar Scrum para su desarrollo, pero al final con los plazos de entrega tan ajustados acabamos desarrollando un Extreme Programming de libro.

Referencias:

miércoles, 19 de febrero de 2014

Recomendación - Agilidad y Lean. Gestionando los proyectos y negocios del s. XXI (2ª edición)

En este mundo de la Informática, como en tantos otros, mantenerse al día y actualizado es realmente imprescindible, y muchas veces cumplirlo es muy complicado.

Gracias a Internet, últimamente la formación se acerca a nosotros, en vez de salir nosotros a buscarla, e iniciativas como los MOOC (Massive Open Online Course) resultan muy útiles para alcanzar nuestros objetivos.

El primer MOOC que hice fue el pasado mes de Noviembre de 2013 a través de la plataforma Miriada X, y el resultado para mí fue más que satisfactorio.

En concreto el curso que realicé fue: Agilidad y Lean. Gestionando los proyectos y negocios del s. XXI, del que se acaba de convocar la Segunda Edición.

A lo largo de 5 lecciones se explican y aclaran gran cantidad de conceptos relacionados con las Metodologías Ágiles, tan de moda hoy en día. Es un curso muy ameno; y además la plataforma Miriada X da la posibilidad de obtener un Certificado de Superación del curso, que siempre viene bien para actualizar nuestro Curriculum Vitae.

La inscripción en esta plataforma es gratuita, únicamente hay que registrarse, buscar el curso de la categoría que más interese e inscribirse en él.




Iniciativas como ésta son muy recomendables, nos permiten aprender múltiples disciplinas de forma cómoda y en el horario que mejor nos convenga, y son un complemento perfecto a la formación convencional.

Por supuesto Miriada X no es la única plataforma MOOC disponible, haciendo una búsqueda rápida se puede ver la gran cantidad de webs, incluso de las propias Universidades, que ofrecen este tipo de formación, así que únicamente es cuestión de encontrar el curso que necesitamos y ¡animarse!