Weblogs Código

Navegapolis

Agilidad: perspectiva y principios del desarrollo ágil

septiembre 26, 2020 04:39

agilidad portada

He juntado en este libro los tres módulos que componen la asignatura que imparto en CESTE mostrando la agilidad para equipos y empresas desde la perspectiva del origen y debilidades del desarrollo basado en procesos y planificación.

Es una perspectiva que ayuda a comprender el valor de las personas comprometidas sobre la rigidez de la ingeniería de procesos; el valor de la capacidad para responder al cambio frente al cumplimiento de agendas planificadas, junto con las nuevas perspectivas que abre la agilidad al dirigir el foco de valor hacia el cliente, antes que hacia los propios resultados.

Aquí lo comparto para los os pueda resultar útil. 

 

» Leer más, comentarios, etc...

Blog Bitix

Centralizar y consultar las trazas de las aplicaciones con Elasticsearch, Logstash y Kibana

septiembre 25, 2020 02:00

Las aplicaciones monolíticas solo generan un archivo de trazas, es fácil de monitorizar, basta con conectarse por SSH a la máquina de su entorno de ejecución y utilizar los comandos grep o tail o descargarlo para examinarlo con otra herramienta de forma local. Pero aún siendo una aplicación monolítica es raro que una organización tenga solo una aplicación sino varias diferentes y las aplicaciones complejas se dividen en varias aún siendo parte de la misma aplicación. Esto hace que haya múltiples aplicaciones en cuyo caso acceder por SSH a una máquina diferente en cada caso no es cómodo. En el caso de múltiples aplicaciones o aplicaciones basadas en microservicios microservicios se opta por centralizar las trazas provenientes de múltiples fuentes en una única herramienta, una de las herramientas es la combinación de Elasticsearch, Logstash y Kibana que forma la pila ELK.

Elastic Stack

Las trazas de una aplicación permiten conocer en tiempo real el estado de la aplicación, las trazas contienen cualquier información que haya considerado el desarrollador de interés para la monitorización cuando el código se ejecuta, la información pueden ser los valores de ciertos datos, cualquier mensaje que indique por qué líneas de código se están ejecutando en el caso de sentencias condicionales, de bucle o que varían el flujo del programa, si es una traza de error, de información, de advertencia o su marca de tiempo.

Las trazas se suelen almacenar en un registro como un archivo que además permita consultarlas en un futuro en caso necesario. A veces un problema se descubre pasadas varias horas o días, en este caso acceder al registro de trazas permite obtener información para averiguar que ha sucedido y si es el caso descubrir la causa del error en el código fuente.

En una aplicación monolíticas guardar las trazas en un archivo puede ser suficiente, en las aplicaciones distribuidas y compuestas por varios microservicios cada uno emitiendo su propio registro de trazas se hace necesario recopilarlos y centralizarlos en una herramienta para su almacenamiento y consulta sencilla.

La monitorización y las trazas son dos de las necesidades de funcionalidad de las aplicaciones basadas en microservicios aunque es también aplicable a las aplicaciones monolíticas. El complemento a las trazas son las métricas y monitorización con Prometheus y Grafana.

Para cubrir la necesidad de monitorización y trazas de las aplicaciones hay múltiples herramientas, entre las que tienen una licencia de software libre o de código abierto están la combinación de Elasticsearch, Logstash y Kibana también conocidas por las siglas ELK.

ElasticSearch, Logstash, Filebeat y Kibana

ElasticSearch proporciona la indexación y el almacenamiento, Logstash que permite la recolección, tratamiento y envío a Elasticsearch y Kibana permite su consulta y visualización con una interfaz web.

Cada aplicación que emite trazas necesita tener un recolector de trazas asociado que permite enviarlas a Elasticsearch para su indexación y almacenamiento. Logstash es una herramienta pesada como para incluirla en cada máquina donde se instancian los servicios, por ello la propia empresa Elasticsearch ha desarrollado herramientas más ligeras, Beats, compuestas de varias herramientas como por ejemplo para archivos de log, métricas, de red o de actividad entre algunos otros.

En vez de usar Logstash se puede usar la herramienta más ligera Filebeat para indexar la salida estándar de las aplicaciones directamente en Elasticsearch o para enviar a una instancia de Logstash que realice el procesado y el indexado en Elasticsearch.

Arquitectura de la plataforma ELK

Arquitectura de la plataforma ELK

ELK también cubre algunas funcionalidades de monitorización y visualización de datos de métricas, que se solapa en algunos aspectos con la funcionalidad proporcionada por Prometheus y Grafana.

ELK solo son las herramientas que se encargan de almacenar y permitir el acceso a las trazas, son las aplicaciones las que se encargan de emitirlas con el formato, información y nivel de detalle que desean. En Java una de las librerías que se suele emplear de soporte para emitir trazas es Log4j 2.

Por otro lado, al centralizar las trazas en una herramienta hace que todas estén mezcladas de modo que encontrar las correlacionadas que se ha emitido por una aplicación en una petición o todas las trazas que ha desencadenado en diferentes servicios es necesario utilizar identificadores globales y Sleuth. Teniendo el identificador global único basta con hacer una búsqueda para encontrar todas las relacionadas que permiten analizar en detalle el comportamiento de la aplicación para una petición.

Otra parte importante en las trazas es no incluir u ofuscar los datos sensibles como datos personales o contraseñas.

Ejemplo monitorización de trazas con ELK y Docker

ELK son en realidad tres herramientas individuales diferentes que en conjunto proporcionan la funcionalidad que permite monitorizar las trazas de los servicios de forma centralizada y almacenarlas para su consulta en un futuro. Pueden ser cuatro herramientas si se usa Logstash como intermediario entre Filebeat y Elasticsearch.

Utilizando Docker y Docker Compose en un archivo se puede definir la colección de contenedores para arrancarlos como una unidad. En este caso se inicia un contenedor para Elasticsearch, para Kibana y otro para Filebeats que monitoriza el servicio de Docker con todos los contenedores que se inicien.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.1
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - cluster.name=elasticsearch-cluster
      - discovery.seed_hosts=
      - cluster.initial_master_nodes=elasticsearch
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elk

  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.1
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
    networks:
      - elk

  filebeat:
    image: docker.elastic.co/beats/filebeat:7.9.1
    container_name: filebeat
    user: root
    command:
      - "-e"
      - "--strict.perms=false"
      - "-E"
      - output.elasticsearch.hosts=["elasticsearch:9200"]
    volumes: 
      - "./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"
      - "/var/lib/docker/containers:/var/lib/docker/containers:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - elasticsearch
    networks:
      - elk

networks:
  elk:
    name: elk
    driver: bridge

docker-compose-elk.yml
1
2
3
4
5
$ # Para evitar este error que impide iniciar Elasticsearch  hay que cambiar esta configuración en el sistema (solo afecta a la ejecución actual, en el siguiente inicio no se conserva)
$ # [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
$ sudo sysctl -w vm.max_map_count=262144

$ docker-compose -f docker-compose-elk.yml up
docker-compose-elk.sh

Filebeat permite indexar las trazas de un archivo de log que genera la aplicación o en el caso de un contenedor de Docker las que emite en la salida estándar o en la salida de error. Filebeat monitoriza los contenedores de Docker y según las etiquetas que se le asignan al contenedor personaliza la indexación de las trazas. Filebeat ofrece módulos para indexar las trazas de algunas herramientas como el servidor web Nginx o Apache, entiende su formato, procesa la traza emitida, la enriquece con sus propios datos y las envía a Elascticsearch o si fuese el caso a Logstash.

Para configurar Elascticsearch y Filebeat es necesario realizar una configuración con un contenedor y comando de Filebeat que crea el índice en Elasticsearch y configura algunos paneles de visualización.

1
$ docker run --rm --network elk docker.elastic.co/beats/filebeat:7.9.1 setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]
filebeat-setup.sh

El siguiente comando arranca un contenedor con una instancia de Nginx. El archivo de Docker Compose para iniciar el contenedor de Nginx incluye varias etiquetas para activar la monitorización de trazas de Filebeat. Filebeat monitoriza los contenedores que se inician y las trazas que emiten los contenedores que tiene asociadas las etiquetas que activan Filebeat.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
version: '3'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    labels:
      - "co.elastic.logs/enabled=true"
      - "co.elastic.logs/module=nginx"
      - "co.elastic.logs/fileset.stdout=access"
      - "co.elastic.logs/fileset.stderr=error"
    ports:
      - "8080:80"
docker-compose-nginx.yml
1
$ docker-compose -f docker-compose-nginx.yml up
docker-compose-nginx.sh

Al acceder a alguna página del servidor web emite una traza como salida. En este caso se solicita la página por defecto y el navegador intenta encontrar el favicon de la web, la página se devuelve con un código de estado 200 y el favicon como no está configurado se devuelve un código de estado 404 de recurso no encontrado.

1
2
nginx    | 172.23.0.1 - - [25/Sep/2020:15:24:32 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0" "-"
nginx    | 172.23.0.1 - - [25/Sep/2020:15:24:32 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0" "-"
nginx.out

Kibana es la herramienta como cliente web que permite consultar las trazas almacenadas en Elasticsearch, permite crear filtros para precisar las trazas a buscar y limitar las consultas a ciertos periodos de tiempo, muestra las ocurrencias encontradas y el número de ellas en un cierto periodo de tiempo. Filebeat además de las trazas que generan los contenedores indexa algunas propiedades adicionales como el nombre del contenedor, la imagen del contenedor, datos del agente que realiza la solicitud, marca de tiempo de generación junto a más datos que permite filtrar para encontrar las trazas deseadas entre todas las indexadas de todos los contenedores. También permite seleccionar las trazas en un rango de tiempo y los campos de datos a mostrar como resultado. Kibana tiene su propia sintaxis para realizar las consultas y permite guardarlas para futuros usos y compartirlas, además de poder construir avanzados paneles de información.

En el ejemplo Kibana se accede a través de la dirección http://localhost:5601 con un navegador web.

Búsqueda en Kibana de trazas del contenedor Docker de Nginx Página de inicio por defecto de Nginx

Búsqueda en Kibana de trazas del contenedor Docker de Nginx al solicitar la página por defecto
Terminal

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub.

» Leer más, comentarios, etc...

Picando Código

ElasticON Observabilidad: Evento virtual en Español para América Latina

septiembre 22, 2020 03:50

ElasticON Latam Observability

El 12 de Noviembre a partir de las 9:00 CDT se va a realizar un evento virtual de ElasticON en vivo para América Latina:

ElasticON Observability: Obtén información de los expertos de Elastic en un evento gratuito diseñado para especialistas en observabilidad. Este evento está repleto de análisis técnicos a fondo e información de usuarios del mundo real que te ayudarán a unificar logs, métricas y rastreos de APM para una visibilidad integral de tu ecosistema.

Visión general – Llevar el MTTR hacia cero

Desde la ingesta simplificada hasta Machine Learning integrado, conoce cómo aprovechar el poder de Elastic Observability para sorprender y deleitar a tus clientes, tanto internos como externos. Saldrás con las mejores prácticas y detalles de roadmap que necesitas para aprovechar al máximo todos tus proyectos de Elastic Observability.

Roadmap y visión
Obtén el roadmap de Elastic Observability directamente de los creadores.

Historias de usuarios
Obtén información de un usuario del mundo real que proporciona valor comercial con Elastic Observability.

Análisis a fondo
Ve cómo optimizar el monitoreo de la infraestructura en cualquier entorno y proporciona observabilidad como servicio.

Avances en APM
Conoce cómo obtener una visión completa de tus aplicaciones puede ayudarte a detectar más rápido los cuellos de botella de rendimiento.

Más información, programa y registro en:
https://www.elastic.co/elasticon/observability/latin-america-es

The post ElasticON Observabilidad: Evento virtual en Español para América Latina first appeared on Picando Código.

» Leer más, comentarios, etc...

Variable not found

Componentes genéricos (templated components) en Blazor

septiembre 22, 2020 06:05

BlazorHoy vamos a hablar de templated components, una interesante capacidad que ofrece Blazor para crear componentes genéricos, capaces de operar con tipos de datos arbitrarios definidos durante la instanciación del componente.

Pero para entender su utilidad, creo que lo mejor es comenzar por un ejemplo de componente simple como el siguiente, que se encarga de mostrar una colección de objetos Friend formateados de una manera determinada:
@* File: ItemList.razor *@
@{
var count = 1;
foreach (var item in Items)
{
<div class="counter">Item #@(count++)</div>
<div class="item">
@ChildContent(item)
</div>
}
}

@code
{
[Parameter]
public IEnumerable<Friend> Items { get; set; }
[Parameter]
public RenderFragment<Friend> ChildContent { get; set; }
}
Fijaos que estamos utilizando un RenderFragment tipado. Si no sabes muy bien lo que es esto, puedes echarle un vistazo al post Componentes con cuerpo en Blazor.
Como hemos podido comprobar, lo único que hace el componente <ItemList> es recorrer la colección de amigos disponible en la propiedad Items y, por cada elemento, mostrar un contador que va incrementándose en cada iteración, renderizando el RenderFragment<Friend> con el ítem actual.

<ItemList> podría ser utilizado desde cualquier otro componente, por ejemplo, de la siguiente manera:
<h1>My friends</h1>

<ItemList Items="@Friends">
<p>@context.Name is @context.Age years old</p>
</ItemList>

@code {
public Friend[] Friends { get; set; }

protected override void OnInitialized()
{
Friends = new[] {
new Friend() {Name = "John", Age = 32},
new Friend() {Name = "Peter", Age = 23},
new Friend() {Name = "Ally", Age = 31}
};
}
}
Si ejecutamos un código como el anterior, podremos que ver todo es correcto: la lista de amigos se muestra correctamente. Bueno, todo es correcto, excepto cuando nos preguntamos si este mismo componente podría servir para otros tipos de objeto distintos a Friend.

Esto lo hemos vivido ya antes, muchos años atrás, cuando aún no existían los tipos genéricos en C# y .NET. Porque lo que realmente nos interesaría para lograr una mayor reutilización de código es que el componente <ItemList> fuera genérico y pudiera aplicarse a cualquier tipo de datos.

Templated componentes

Un componente genérico, o templated component, permite la introducción de uno o varios parámetros genéricos que pueden ser luego utilizados en su cuerpo para definir propiedades, miembros u operar con ellos en el código. Estos parámetros genéricos se definen en el componente mediante la directiva @typeparam, asignándole un identificador que luego utilizaremos para referirnos a él.
@typeparam TItem
...
@ code {
[Parameter]
public IEnumerable<TItem> Items { get; set; }
}
Observad que el concepto es muy parecido a cuando creamos clases genéricas tradicionales (de hecho, recordad que los componentes Blazor son compilados y se convierten en clases C#):
public class MyClass<TItem>
{
public IEnumerable<TItem> Items { get; set; }
}
De momento no se permite indicar restricciones o constraints sobre los tipos genéricos de los componentes, aunque está prevista su inclusión en una versión posterior de Blazor.
En el siguiente bloque de código reescribimos el componente <ItemList> de forma genérica. Observad que todas las referencias a Friend podemos reemplazarlas por TItem, el parámetro genérico definido en el componente, y que hemos utilizando la directiva @typeparam para especificar su tipo:
@typeparam TItem
@{
var count = 1;
foreach (var item in Items)
{
<div class="counter">Item #@(count++)</div>
<div class="item">
@ChildContent(item)
</div>
}
}

@code
{
[Parameter]
public IEnumerable<TItem> Items { get; set; }
[Parameter]
public RenderFragment<TItem> ChildContent { get; set; }
}
La forma de utilizar el componente es exactamente la misma, puesto que no hemos cambiado nada hacia fuera. Pero la gran diferencia está en que ahora podríamos utilizar cualquier tipo de colección; el tipo concreto del parámetro TItem es resuelto mediante inferencia en cada caso:
<h1>My friends</h1>
<ItemList Items="@Friends">
<p>@context.Name is @context.Age years old</p>
</ItemList>

<h1>My colors</h1>
<ItemList Items="@FavoriteColors">
<p>I like color @context.Name</p>
</ItemList>

@code {
public Friend[] Friends { get; set; }
public Color[] FavoriteColors { get; set; }

protected override void OnInitialized()
{
Friends = new Friend[] { ... }; // Omitido
FavoriteColors = new Color[] { Color.Blue, Color.Green, Color.Red };
base.OnInitialized();
}
}
Útil, ¿verdad?
Si te interesa Blazor, ¡no dudes en echar un vistazo a mi curso en CampusMVP!

Publicado en Variable not found.

» Leer más, comentarios, etc...

Variable not found

Enlaces interesantes 413

septiembre 21, 2020 06:05

Enlaces interesantes

El código de estado HTTP 413, "Payload too large", es retornado por los servidores cuando el tamaño de los datos que está recibiendo es demasiado grande y, por tanto, deben ser rechazados. El servidor puede cerrar en esos momentos la conexión para evitar que el cliente continúe enviando datos y, sólo si el problema es transitorio, enviar un encabezado Retry-After para indicar en cuánto tiempo puede volver a intentarse la operación.

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)

Por si te lo perdiste...

.NET Core / .NET

ASP.NET Core / ASP.NET / Blazor

Azure / Cloud

Conceptos / Patrones / Buenas prácticas

Data

    Web / HTML / CSS / Javascript

    Visual Studio / Complementos / Herramientas

    Xamarin

    Otros

    Publicado en Variable not found.

    » Leer más, comentarios, etc...

    Blog Bitix

    Funcionalidades que necesitan las aplicaciones basadas en microservicios y herramientas que las proporcionan

    septiembre 20, 2020 08:30

    Los microservicios aún algunas ventajas necesitan una infraestructura mucho más compleja y necesitan de varias funcionalidades que en una aplicación monolítica no son necesarias. Para desarrollar y mantener con éxito una aplicación nativa para la nube basada en microservicios hay varias herramientas individuales específicas que resuelven cada una un problema específico de los microservicios. En este artículo se identifica cuales son las áreas funcionales que necesitan los microservicios, algunas herramientas hay para cada una de esas herramientas y algunos criterios para elegir una u otra herramienta.

    En el caso de una aplicación compleja y grande llegará un punto en el que una aplicación monolítica presenta problemas como tamaño de la aplicación, un error afecta a toda la aplicación, es más difícil de escalar las partes que lo requieran o dificulta el trabajar a un número grande de desarrolladores sobre el mismo código. Ante estos problemas una posibilidad es dividir la aplicación monolítica en múltiples microservicios independientes y distribuidos, cada microservicio proporciona una funcionalidad y entre todos colaborar para proporcionar la funcionalidad completa. Los microservicios resuelven algunos problemas de las aplicaciones monolíticas pero presentan otros problemas.

    Para cada una de las áreas funcionales que necesitan los microservicios hay múltiples herramientas que ayudan a resolver cada área funcional. Por ejemplo, en una aplicación basada en microservicios donde hay múltiples aplicaciones en varias instancias que varían en número y se comunica una parte importante para que los microservicios no sean un problema es la monitorización para permitir conocer el estado del sistema que permita identificar que está fallando rápidamente o incluso detectarlo antes de que ocurra. En una aplicación monolítica no son tan necesarias algunas de estas funcionalidades pero otras son igualmente necesarias o deseables como una base de datos, integración continua, entorno de ejecución también con contenedores, automatización y configuración, claves y secretos o monitorización, trazas y trazabilidad.

    Las aplicaciones nativas para la nube necesitan varias herramientas, en la página CNCF Cloud Native Interactive Landscape se agrupan las herramientas disponibles por categoría. Para cada categoría hay más de diez herramientas disponibles entre las que elegir para cubrir la necesidad. La colección de herramientas además de estar categorizadas por funcionalidad es posible filtrar aquellas que tienen una licencia de software libre o código abierto.

    Para tomar una decisión al elegir una herramienta u otra hay varios criterios:

    • Documentación: una buena documentación permite aprender a como utilizarla y sacarle el máximo provecho directamente desde la fuente original.
    • Popularidad, madurez, comunidad: utilizar una herramienta popular permite que si hay algún problema posiblemente ya le haya ocurrido a otra persona antes de modo que es muy posible encontrar una respuesta rápidamente y correcta. Una herramienta madura tendrá mejor documentación y es más fácil encontrar más información de ella.
    • Herramienta específica o generalista: dado que las necesidades de los microservicios son varias es necesario utilizar múltiples herramientas para resolver esa necesidad. Cada una de estas herramientas añade un poco más de complejidad a la infraestructura que hay que mantener para que los microservicios funcionen o para poder entregar funcionalidad desde el entorno de desarrollo al entorno de producción. Algunas herramientas realizan varias funcionalidades, si una única herramienta es adecuada para varias necesidades permite reducir la complejidad de la infraestructura que si fuesen varias. Las herramientas específicas proporcionan funcionalidades más avanzadas pero las generalistas aún quizá no teniendo esas funciones avanzadas las que tienen son suficientes.
    • Dependencias o posibilidad de cambiar: cada herramienta que se utiliza añade una dependencia al sistema, es algo a tener en cuenta ya que para alguna de entre todas las que se elijan será sustituida en el futuro por una nueva alternativa mejor. Tener la posibilidad de cambiar a una herramienta en el futuro es algo deseable sin que suponga un gran impacto en el sistema.
    • Licencia y coste: las herramientas tienen un coste, los productos con licencia de software libre o código abierto no incurren en costes pero tienen un coste de mantenimiento tanto económico como en tiempo que ha de hacer uno mismo, por el contrario los servicios gestionados basados en la nube no tienen coste de infraestructura ni de mantenimiento del que se encarga el propio servicio pero tienen un coste mensual.

    En el caso de optar por administrar y mantener uno mismo el servicio otro punto importante a considerar son las actualizaciones a nuevas versiones. Conviene considerar cual es el procedimiento para actualizar a una nueva versión y tener un plan para realizarlas de forma periódica, no solo para tener acceso a las nuevas características que ofrezcan sino también para evitar quedar expuesto a un problema de seguridad de una versión antigua y ya no mantenida.

    Colección de herramientas nativas para la nube

    Colección de herramientas nativas para la nube
    Contenido del artículo

    Base de datos

    Los datos son una de las partes más importantes para el correcto funcionamiento de un negocio. Una parte importante de las aplicaciones consiste tanto en persistir datos como recuperarlos cuando se necesitan. Una de las ventajas de los microservicios es que cada uno de ellos puede utilizar el tipo de base de datos que más adecuado considere para almacenar los datos. Puede ser una base de datos relacional como PostgreSQL, clave-valor como Redis, de documentos con MongoDB o incluso una combinación de varios.

    Mensajería

    Una forma de comunicar los microservicios sin crear acoplamiento entre los servicios o de forma asíncrona es utilizar una comunicación basada en mensajes. Un sistema de mensajería es RabbitMQ, otra popular es Kafka con algunas diferencias.

    Construcción de imágenes

    La forma nativa de ejecutar las aplicaciones basadas en microservicios es utilizando contenedores. Los contenedores son una forma de independizarse de las dependencias de ejecución que necesita cada microservicio ya sea por el lenguaje de programación que utilizan o librerías que necesitan, los contenedores permite ejecutarlos y tratarlos de la misma forma. Docker permite ejecutar aplicaciones en contenedores así como construir imágenes de contenedores, Packer es otra herramienta que permite construir diferentes artefactos ya sea para una máquina virtual VirtualBox o la computación en la nube de Amazon Web Services, Google Cloud Computing o Microsoft Azure.

    Integración continua y despliegue continuo

    Desarrollando pruebas automatizadas al mismo tiempo que desarrollar la funcionalidad de una aplicación permite conocer que el software desarrollado con los casos creados funciona como se espera. Más tarde al introducir más cambios permiten conocer si un cambio afecta de forma inesperada a alguna funcionalidad cubierta por las pruebas automatizadas. Utilizando integración continua las pruebas automatizadas proporcionan el estado por cada cambio realizado en el repositorio de código fuente. Automatizar el despliegue de los cambios es la entrega continua y permite reducir el tiempo entre que una funcionalidad se ha terminado de desarrollar y el tiempo en que está disponible en el entorno de producción. Gitlab es una herramienta que cubre varias necesidades, entre ellas la de repositorio de código fuente con Git y también las funcionalidades de integración y entrega continua. Jenkins es una herramienta más específica y cubre las funcionalidades de integración y entrega continua.

    Planificación y orquestación

    Con un número importante de microservicios, incluso múltiples instancias de cada uno de ellos que varían en número a lo largo del tiempo para soportar tolerancia a fallos y alta disponibilidad se hace imprescindible tratar a las instancias como ganado y una herramienta que se encargue de su administración, tanto para planificar en que nodos se crean las instancias según sus restricciones como de aumentar o reducir su número, realizar despliegues utilizando estrategias blue/green o canary y revertir a versiones anteriores. Kubernetes es una popular específica para contenedores Docker, Nomad es una herramienta más sencilla e independiente pero integrable con otras herramientas de HashiCorp que en conjunto proporcionan similares funcionalidades que Kubernetes.

    Descubrimiento de servicios y conexión

    Si los microservicios son numerosos, se crean múltiples instancias de cada uno de ellos y son efímeros pudiendo desaparecer es necesario un servicio que guarde un registro de cual es su ubicación que permita conocer al resto de servicios donde se encuentran para comunicarse con ellos. Consul es un servicio que proporciona la funcionalidad de de registro y descubrimiento además de otras funcionalidades como conectividad segura entre microservicios basado en intenciones en vez de direcciones IP, puertos y reglas de firewall.

    Llamada a procedimientos remotos y API

    Unos microservicios tienen como dependencia y ofrecen su funcionalidad a otros a través de una interfaz de programación o API. La interfaz puede ser REST, GraphQL o si es un servicio interno con llamada a procedimiento remoto con gRPC. La comunicación entre servicios mediante API y mensajes no es incompatible, es más, es común que un microservicio utilice ambas formas para comunicarse o otros microservicios.

    Proxy de servicios

    Un proxy permite hacer de intermediario entre el origen servicio origen y el servicio destino para ofrecer una visión más sencilla de los microservicios al consumidor o hacer algunas operaciones en las comunicaciones. Traefik es una proxy adaptado a los microservicios, es integrable con Consul y con Docker.

    Automatización y configuración

    Para hacer manejable la infraestructura y configuración de la misma es necesario automatizarla tratando a la infraestructura como código. Esto permite evitar cambios manuales, mantener un registro de los cambios y replicar la misma infraestructura rápidamente en caso de ser necesario. La infraestructura puede ser mutable o inmutable, tener una infraestructura inmutable es más deseable ya que en todo momento se tiene conocimiento del estado de la infraestructura evitando cambios temporales aplicados que no estén bajo control e impidan replicar la infraestructura. Ansible permite automatizar ciertas tareas para una infraestructura mutable en algunos casos es herramienta conveniente, Terraform es una herramienta declarativa con la que se especifica la infraestructura deseada y aplica los cambios necesarios para tenerla, sigue la filosofía inmutable con la que si una instancia de una máquina cambia en vez de cambiar la instancia crea una nueva y elimina la antigua.

    Registro de contenedores y artefactos

    A partir del código fuente se construyen los artefactos que posteriormente se incluyen en contenedores que son desplegados. Un repositorio de artefactos permite almacenar los binarios y paquetes de cada versión a partir del código fuente, esto permite volver a una versión anterior y guardar un historial de los mismos para el futuro. Docker Registry es un registro para imágenes Docker, Artifactory o Nexus son registros más generalista que permite guardar artefactos de JavaScript, Python o Java entre otros, Archiva es específico de artefactos para Java.

    Autenticación, claves y secretos

    Para autenticar y autorizar las llamadas a los servicios a través de de la API que ofrecen se suele utilizar OAuth, como proveedor de autenticación OAuth una opción es Keycloak.

    Por otro lado, cierta información que tratan las aplicaciones es de carácter sensible e importante para la seguridad, estas son las claves y contraseñas que permiten conectarse a las bases de datos o autenticarse en otros microservicios, datos personales o bancarios. Vault permite generar credenciales bajo demanda con un tiempo de expiración pequeño y se ofrece como un servicio centralizado para cifrar y descifrar datos, esto aumenta la seguridad, reduce las posibilidades de ataque y en caso de éxito mitiga la información comprometida si la más sensible está cifrada.

    Monitorización, trazas y trazabilidad

    Un sistema complejo como son los microservicios es indispensable que esté monitorizado para dar visibilidad a su estado y observar su funcionamiento en tiempo real. Las métricas son obtener las trazas que emiten cada uno de los microservicios, monitorizar los tiempos de respuesta de cada microservicio, consumo de memoria, CPU o almacenamiento.

    Prometheus permite recoger las métricas de funcionamiento de cada uno de los microservicios y almacenar los datos. Grafana permite acceder a los datos recogidos por Prometheus y crear diferentes tipos de gráficas que permitan visualizar gran cantidad de información con una fácil compresión.

    Fluentd y Logstash permiten recopilar los registro de trazas que emiten las aplicaciones y enviarlos a un consumidor para que sean agregados e indexados en Elasticsearch, Kibana es una servicio que permite buscar y obtener los mensajes de trazas deseados.

    Una solicitud genera varias llamadas entre servicios en cadena, para tener una visión global de cada petición y cuales son las llamadas que ha desencadenado entre los diferentes servicios que se usan como dependencias están Sleuth y Zipkin. Un identificador único global permite obtener toda la cadena de llamadas realizada con los tiempos empleados en cada microservicio para atender la petición lo que permite identificar problemas de rendimiento.

    » Leer más, comentarios, etc...

    Blog Bitix

    Novedades de Java 15

    septiembre 18, 2020 12:00

    Algunas novedades de anteriores versiones que en la versión de Java 15 pasan a calificarse con el grado de producción y otras características como una segunda versión preliminar. Sin grandes cambios en el lenguaje tan destacables de versiones anteriores como las lambdas de Java 8 o los módulos de Java 9, en Java 15 se añaden las sealed classes.

    Java

    En septiembre del 2020 se ha publicado la versión 15 de Java siguiendo el calendario propuesto desde la versión de Java 9 de una nueva versión cada seis meses y de una versión de soporte a largo plazo cada tres años, la primera LTS ha sido Java 11 a la que sucederá Java 17 cómo LTS en septiembre de 2021.

    Con este calendario de publicaciones tan frecuente las novedades son varias en cada nueva versión aunque algunas son simplemente versiones preliminares que pueden cambiar ligeramente en siguientes versiones destinadas a evaluar y probar las funcionalidades que se incorporarán de forma definitiva con posterioridad. Aunque sean versiones preliminares se pueden usar con normalidad, simplemente hay que tener en cuenta que en versiones posteriores requieran modificaciones en el código fuente o lo que es lo mismo no se garantiza la compatibilidad hacia atrás hasta que sean declaradas como una versión definitiva.

    Dado que ahora las versiones de Java son mucho más numerosas y frecuentes se hace más necesario utilizar la herramienta SDKMAN para instalar al mismo tiempo varias versiones del JDK de Java y poder cambiar de una a otra con facilidad.

    Esta es la lista de novedades de Java 15, algunas son cambios que no tiene gran impacto en el lenguaje ni la plataforma al ser más cambios internos que reimplementan y modernizan código existente, otras son versiones preliminares y segundas versiones preliminares no definitivas, algunas características en versiones anteriores se marcan como públicas dejando de ser preliminares, otras que se marcan como obsoletas desaconsejándose su uso y otras ya marcadas como obsoletas anteriormente son eliminadas.

    Contenido del artículo

    Algoritmo de firma digital Edwards-Curve (EdDSA)

    El algoritmo de firma digital EdDSA o Edwards-Curve Digital Signature Algorithm (EdDSA) es demandado por mejorar la seguridad y el rendimiento comparado con otros algoritmos de firma, ya está implementado en otras librerías de criptografía como OpenSSL. Este esquema de firma es opcional en TLS 1.3 pero es uno de los tres permitidos. Añadir este algoritmo permite usar EdDSA en Java sin recurrir a librerías de terceras partes.

    Sealed Classes (vista previa)

    En Java las clases permiten la reutilización de código mediante la herencia, los métodos de una clase son heredados por las subclases que la extiendan. Sin embargo, en ocasiones la jerarquía de clases sirve para modelar el dominio sin querer permitir que sea extendido por cuales quiera otras clases.

    En Java toda clase puede ser extendida por defecto la única forma de no permitir extender una clase es utilizando la palabra reservada final. Sin embargo, esto impide la extensión de la clase completamente.

    Las clases sealed especifican de forma explícita que clases tiene permitido la extensión y herencia. Las clases sealed son más restrictivas que el comportamiento por defecto de permitir a cualquier clase la extensión pero más permisivo que si se utiliza la palabra clave final que impide a cualquier clase la extensión.

    Se introduce una nueva palabra reservada sealed. La declaración de la clase sealed se realiza con el siguiente sintaxis, en este ejemplo la clase Shape solo puede ser extendida por las clases Circle, Rectangle y Square.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    public abstract sealed class Shape permits Circle, Rectangle, Square {
        ...
    }
    
    public Circle extends Shape {
        ...
    }
    
    public Rectangle extends Shape {
        ...
    }
    
    public Square extends Shape {
        ...
    }
    SealedClasses.java

    Pattern Matching para instanceof (segunda vista previa)

    Se mantiene en la categoría de funcionalidad preliminar esta funcionalidad ya publicada en Java 14 que permite eliminar algunos cast de tipos explícitos.

    1
    2
    3
    4
    
    if (obj instanceof String) {
        String s = (String) obj;
        // use s
    }
    IfPatternMatching-1.java

    El operador instanceof permite renombrar la variable y dentro de la rama usarla sin necesidad de realizar el cast, esto simplifica el código y evita posibles errores.

    1
    2
    3
    
    if (obj instanceof String s) {
        // use s
    }
    IfPatternMatching-2.java

    Records (segunda vista previa)

    Los records son clases inmutables con unas convenciones implícitas que no requieren escribir mucho del código considerado ceremonial en las clases de datos Java que hacen al lenguaje verboso para estas clases simples.

    Escribir clases portadoras de datos en Java requieren una buena cantidad de código de bajo valor, repetitivo, propenso a errores para especificar constructores, métodos de acceso a propiedades e implementar correctamente los métodos equals, hashCode y toString.

    La siguiente clase record es equivalente al POJO tradicional de muchas más líneas de código.

    1
    2
    
    public record PhoneNumber(Integer lineNumber, Integer prefix, Integer areaCode) {
    }
    Records.java

    Bloques de texto

    En Java embeber en el código un trozo de código HTML, XML, SQL o JSON en un literal como un String requiere editarlo de forma significativa con caracteres de escape y concatenación para que el código compile. La cadena transformada resultante es poco legible y difícil de mantener.

    Un bloque de texto HTML en código Java requeire de mútiples caracteres de escape y concatenaciones de cadenas.

    1
    2
    3
    4
    5
    
    String html = "<html>\n" +
                  "    <body>\n" +
                  "        <p>Hello, world</p>\n" +
                  "    </body>\n" +
                  "</html>\n";
    TextBlocks-1.java

    Usando bloques de texto se eliminan los caracteres de escape y las concatenaciones. El código resultante es mucho más legible y fácil de mantener.

    1
    2
    3
    4
    5
    6
    7
    
    String html = """
                  <html>
                      <body>
                          <p>Hello, world</p>
                      </body>
                  </html>
                  """;
    TextBlocks-2.java

    Clases ocultas

    Se añaden clases oultas o hidden classes que son clases que no pueden usarse directamente por otras clases. Su intención es que sean usadas por frameworks que generan clases en tiempo de ejecución y las usan de forma indirecta con reflection.

    Reimplementación de la antigua API DatagramSocket

    Se reemplazan las implementaciones de bajo nivel para la comunicación por red java.net.DatagramSocket y java.net.MulticastSocket con una implementación mas simple y moderna que es más fácil de mantener, depurar y fácil de adaptar a los threads virtuales del proyecto Loom.

    Recolectores de basura ZGC y Shenandoah

    Se califican como versión de producción los recolectores de basura ZGC y Shenandoah que ofrecen tiempos de pausa bajos aunque se mantiene como recolector de basura por defecto G1. Se soportan todas las plataformas comunes, Linux/x86_64, Linux/aarch64, Windows y macOS. El recolector de basura ZGC se activa con la opción de la máquina virtual -XX:+UseZGC y Shenandoah con -XX:+UseShenandoahGC.

    Otras características incorporadas y cambios

    Otras especificaciones que no tienen tanto impacto desde el punto de vista del programador y en el lenguaje son las siguientes. Algunas eliminan y marcan como desaconsejado su uso.

    Entre las más destacables está Foreign-Memory Access que permite a los programas Java acceder de forma segura y eficiente a memoria externa fuera de la memoria heap de Java. También a destacar el soporte de Unicode 13.0 que añade unos 5K nuevos caracteres o el soporte para el algoritmo de hash SHA-3 en el apartado de seguridad.

    » Leer más, comentarios, etc...

    Variable not found

    ¡Nuevo curso de desarrollo web con Blazor en CampusMVP!

    septiembre 15, 2020 12:18

    Blazor

    ¡Os traigo buenas noticias! Me complace anunciaros que por fin está disponible en el catálogo de CampusMVP el curso en el que he estado trabajando intensamente durante varios meses, y que me consta que muchos estabais esperando: Desarrollo de aplicaciones Web con Blazor.

    Su creación ha sido bastante laboriosa porque queríamos ofreceros el mejor y más completo curso sobre Blazor que podéis encontrar en este momento, y no es fácil conseguirlo cuando se trata de una tecnología tan reciente, de la que aún no existe tanta documentación, bibliografía y ejemplos como las hay de otras tecnologías con más años de recorrido. Ha sido duro, pero tanto un servidor como el equipo de producción de CampusMVP que ha participado en su creación, estamos orgullosos del resultado y firmemente convencidos de que lo que hemos logrado: un recorrido práctico, minucioso y profundo del que es, sin duda es el framework que cambiará vuestra forma de desarrollar aplicaciones para la web.

    En este post vamos a intentar resolver las siguientes cuestiones:

    ¿Qué es Blazor?

    Para los que todavía estéis algo despistados, Blazor es un novedoso framework para la web que parte de un ambicioso objetivo: permitir a los desarrolladores .NET construir aplicaciones web SPA, al estilo de Angular, React o Vue, pero utilizando únicamente C# en lugar de Javascript. Es decir, a diferencia de las soluciones tradicionales para crear aplicaciones web SPA:

    • Utilizaremos los entornos de desarrollo con los que nos sentimos cómodos los desarrolladores .NET, como Visual Studio, para crear, programar, depurar, testear y distribuir nuestras aplicaciones.
    • O, como ocurre en toda la nueva generación de tecnologías del ecosistema .NET, podremos desarrollar y ejecutar sobre cualquier sistema operativo y usar herramientas más ligeras como Visual Studio Code o la línea de comandos de .NET.
    • Utilizaremos C# en lugar de JavaScript para implementar la capa de presentación, algo que hasta ahora no era posible conseguir, con las ventajas que ello conlleva.
    • Aprovecharemos los conocimientos que ya tenemos de .NET para crear aplicaciones web SPA. Es decir, podremos usar los tipos y clases de .NET con las que llevamos años trabajando, pero para crear aplicaciones que corren en el navegador.
    • Será posible reutilizar código existente en todas las capas de las aplicaciones, así como compartir código entre cliente y servidor, pues ambos utilizarán las mismas tecnologías.

    Seguro que alguno pensará que todo esto lo ha escuchado antes, pero el protagonista era Silverlight. Nada más lejos de eso; no estamos hablando de "incrustar" código .NET en un browser usando tecnologías propietarias como hacíamos años atrás, en la era RIA (Rich Internet Applications), sino en una tecnología respetuosa y alineada con estándares abiertos de la web.

    Puedes leer algo más sobre Blazor en los siguientes artículos:

    ¿Me interesa aprender a desarrollar con Blazor?

    Si trabajas en la creación de aplicaciones web con tecnologías Microsoft, la respuesta es categórica: sin duda, deberías aprender Blazor. Deja que te explique por qué.

    La imparable popularización de las aplicaciones web SPA ha traído de la mano algunos problemas para los desarrolladores .NET. Incluso los frameworks más modernos y potentes, como ASP.NET Core MVC o Web API, no ofrecen herramientas para la creación de aplicaciones SPA, por lo que nos vemos obligados a:

    • Quedar relegados al desarrollo del backend del que normalmente hacen uso de este tipo de sistemas.
    • Movernos al frontend, aprendiendo a trabajar con frameworks como Angular, React, Vue o cualquiera de los muchos otros disponibles en el ecosistema Javascript.

    Si, como es bastante habitual, eres de los que tienen que tocar un poco de todo (aka full-stack developer) probablemente habrás sufrido al elegir esta última opción. Para los desarrolladores .NET, los frameworks de frontend suelen ser un territorio hostil e incómodo porque:

    • No es sencillo elegir en cuál de las cestas poner los huevos. Aunque últimamente parece haberse relajado algo la cosa, durante años, el mundillo de los frameworks SPA ha vivido constantes terremotos y no era sencillo decantarse por una u otra opción.
    • Debemos utilizar herramientas distintas a las habituales, y veces no se llevan demasiado bien entre ellas, por lo que nos vemos obligados a usar distintos "cinturones de herramientas" en función de lo que vayamos a hacer en cada momento.
    • Todo esto obliga a aprender un modelo de programación completamente nuevo: sintaxis, workflows de trabajo distintos, bibliotecas de clases y componentes totalmente diferentes, herramientas diversas (y a veces poco amigables), etc.
    • Por no hablar del lenguaje... aunque tiene sus cosas buenas, la experiencia de programación con Javascript queda muy lejos de lo que supone utilizar C#, un lenguaje moderno, potente y con un sistema de tipos estricto que nos defienda de nosotros mismos y nuestros constantes errores. (Es cierto que TypeScript ha suavizado algo este asunto, pero, aún así, la experiencia no está a la altura.)

    Con Blazor podremos desarrollar aplicaciones web SPA profesionales, solventando todos los problemas anteriores de un plumazo:

    • La experiencia desde Visual Studio es exactamente como la conoces: compilación, ejecución, depuración, testing, etc. Todo lo harás usando las mismas herramientas de siempre, con las que ya eres productivo.
    • ... aunque, si lo prefieres, podrás programar utilizando Visual Studio Code o cualquier otro editor ligero al que estés acostumbrado y usar la línea de comandos para compilar, ejecutar, testear o distribuir.
    • En lugar de JavaScript, programarás la lógica de la interfaz de usuario en C#, y utilizarás la biblioteca de clases de .NET que ya conoces de sobra.
    • Lo anterior ya hace que la curva de aprendizaje sea suave, pero, aún hay más:
      • Si conoces Razor de ASP.NET MVC, ASP.NET Core o Razor Pages, ya conoces la sintaxis usada principalmente en Blazor.
      • También encontrarás que una de las modalidades de Blazor, Blazor Server, es conceptualmente similar a ASP.NET Web Forms (aunque por supuesto sin sus conocidos problemas), por lo que no te costará mucho trabajo entenderlo si partes desde ese punto.

    Obviamente tendrás que aprender a trabajar con Blazor, pero al menos no deberás dedicar tiempo a conocer a fondo el entorno, las herramientas, las bibliotecas base o el lenguaje para sacarle partido: esa lección ya la traes aprendida de casa ;)

    Pero no sólo eso. Una vez conoces Blazor te das cuenta de que está construido sobre elementos muy sencillos, pensados disparar nuestra productividad desde el minuto uno. Una vez conoces algunos fundamentos básicos, verás que puedes crear componentes, o elementos visuales reutilizables, con una facilidad y velocidad pasmosas.

    Con Blazor, los desarrolladores .NET pueden crear espectaculares aplicaciones web SPA sin abandonar las herramientas ni el lenguaje que ya utilizan a diario.

    Hace poco aprendí ASP.NET Core, ¿significa la llegada de Blazor que ya no me valen estos conocimientos?

    En absoluto. De hecho, si conoces ASP.NET Core estarás mejor posicionado para exprimir Blazor al máximo, porque hay conocimientos que podrás aprovechar directamente.

    Por ejemplo, Blazor Server, que es uno de los modelos de hosting utilizados por este marco de trabajo, es una aplicación ASP.NET Core, por lo que hereda de la plataforma muchas funcionalidades de forma directa: startup, inyección de dependencias, logging, settings, middlewares, routing, etc.

    En caso de optar por el modelo de ejecución en el lado cliente, denominado Blazor WebAssembly, los conocimientos de ASP.NET Core nos vendrán de perlas para la implementación del backend, imprescindible en cualquier aplicación SPA. Además, en este caso, podrás disfrutar de las ventajas de utilizar .NET en ambos extremos: ¡podrás compartir código C# entre frontend y backend de forma directa!

    Blazor no sustituye a MVC ni Razor Pages, simplemente cubre un hueco que anteriormente no estaba resuelto en el stack de tecnologías .NET. Por tanto, no es un reemplazo sino una opción adicional que nos simplificará el acceso al mundo de las aplicaciones SPA.

    ¿En qué consiste el curso de desarrollo con Blazor?

    Este curso se imparte completamente online utilizando la potentísima plataforma de eLearning SELF (de los mismos que están detrás de CampusMVP), y siguiendo su contrastada metodología para asegurar tu éxito a lo largo el proceso de formación.

    Curso de Blazor en CampusMVP

    Sin horarios y a tu propio ritmo, pero no en solitario: contarás con todo el soporte del equipo de CampusMVP y, dado que soy el tutor, me tendrás a tu disposición para la resolución de dudas y ayudarte durante aprendizaje.

    La dedicación estimada ronda las 5 o 6 horas semanales, durante un total de 12 semanas. A lo largo de ellas realizaremos un profundo recorrido en Blazor, partiendo desde cero, a través de las más de 200 lecciones que componen el temario. Éste, además, lo podrás descargar en formato PDF (más de 400 páginas) al finalizar el curso, para que lo tengas como referencia.

    Para afianzar los conocimientos, incluimos también varias horas de grabaciones en vídeo, llevadas a cabo de forma magistral por el gran José Manuel Alarcón, donde podrás ver en vivo el funcionamiento de muchas de las características que vamos estudiando.

    Pero el curso no sólo consiste en contenido teórico: a lo largo del mismo encontrarás numerosas prácticas que te ayudarán a conseguir una mejor asimilación de los conceptos, así como proyectos descargables, consejos, trucos e ideas que seguro te resultarán de utilidad cuando vayas a aplicar tus nuevos conocimientos.

    ¿Y cómo saber tu nivel de aprovechamiento? Sencillo. Conforme vayas avanzando te propondremos autoevaluaciones que te permitirán conocer tu grado de conocimiento sobre los contenidos. Al finalizar el curso podrás acreditar su realización mediante un diploma, así como incluirlo en tu perfil certificado de CampusMVP, un perfil online verificable por terceros donde puedes demostrar qué has aprendido con nosotros.

    ¿Cuáles son los contenidos del curso?

    En este curso hacemos un completo recorrido de Blazor, comenzando desde cero.

    Tras una breve introducción para ponernos en contexto, inmediatamente comenzamos describiendo los dos modelos de hosting disponibles para el desarrollo web: Blazor Server y Blazor WebAssembly. Veremos cómo funcionan, sus elementos arquitecturales y las ventajas e inconvenientes de cada uno, para que puedas elegir cuál es el que más te conviene en cada caso.

    A lo largo del curso estudiaremos Blazor Server y Blazor WebAssembly en paralelo, por lo que al finalizar estarás en disposición de crear aplicaciones utilizando cualquiera de ellos.

    Seguidamente, entraremos en faena creando nuestros primeros proyectos Blazor, echando un vistazo a la forma de organizarlos y los tipos de componentes con los que estructuraremos nuestras aplicaciones.

    Estudiaremos también en la sintaxis Razor, fundamental a la hora de escribir componentes, detallando sus particularidades y diferencias respecto al Razor que usamos en MVC o Razor Pages, directivas, construcciones y técnicas para organizar y simplificar el código.

    Aprenderemos las distintas fórmulas para comunicar componentes, y a sacar provecho de los eventos del ciclo de vida de los mismos, así como a controlar aspectos como la liberación o renderización.

    Empezaremos creando componentes simples, pero iremos profundizando sucesivamente hasta llegar a componentes complejos que usan toda la potencia de Blazor para crear elementos altamente reutilizables gracias a la parametrización, uso de fragmentos o tipado genérico. Veremos cómo consumir y producir eventos del sistema o personalizados para facilitar la comunicación bidireccional entre componentes.

    Haremos también una parada en la inyección de dependencias y aprenderemos a utilizarla para crear componentes más sencillos, limpios y reutilizables.

    Dedicaremos un módulo al sistema de navegación y routing de Blazor, aprendiendo a construir sitios navegables y controlar la navegación del usuario.

    También pondremos el foco en el potente sistema de binding, ese mecanismo que enlaza la UI con nuestras clases .NET de forma casi mágica. Seguidamente, nos centraremos en estudiar las herramientas que ofrece Blazor para ayudarnos a crear formularios de datos y validar la información suministrada.

    La interoperación con Javascript también toma su protagonismo en el curso. Las fórmulas para comunicar nuestro código Blazor con este lenguaje abre la puerta al aprovechamiento del enorme ecosistema del mismo, consiguiendo que en muchas ocasiones no tengamos que partir de cero a la hora de crear interfaces espectaculares.

    Ya casi finalizando, nos detendremos en estudiar los mecanismos de autenticación y autorización que nos permitirán construir aplicaciones seguras y adaptadas a distintos perfiles de usuario. Veremos también cómo crear aplicaciones internacionalizadas, crear y distribuir componentes reutilizables o algunas técnicas para testear nuestros componentes.

    De forma trasversal, al final de cada módulo te demostraremos sobre una aplicación real cómo "encajan" los conceptos que hemos ido viendo en él. Esa aplicación es BlazorStore, la plataforma de comercio electrónico que desarrollarás al finalizar el curso, y para la que hemos reservado sus últimas lecciones:

    ¿Qué conocimientos previos necesito para seguir el curso?

    Si estás leyendo esto, probablemente los tengas ;)

    En primer lugar, dado que se trata de un curso de programación de aplicaciones web, es necesario que conozcas los fundamentos de este tipo de sistemas, al menos a un nivel básico. Debes saber identificar cliente y servidor, entender las responsabilidades de cada uno de estos extremos y conocer mínimamente los mecanismos de comunicación entre ellos.

    También es importante que conozcas algo de HTML y CSS, y muy recomendable que tengas algunas nociones de Javascript, aunque no es indispensable.

    Por último, dado que una de las premisas de Blazor es conseguir que desarrolles usando C# y .NET, ¡qué menos que conocerlos! En el curso asumiremos que tienes un nivel razonable de C# y que has trabajado con la biblioteca de clases base de .NET. Es decir, en el curso no explicaremos qué es una expresión lambda o qué es un objeto de tipo List<string>, se supone que debes saberlo antes de comenzar.

    Tampoco es necesario conocer nada sobre tecnologías de acceso a datos, pues el curso no entraremos en ello. En algunos ejemplos usaremos Entity Framework Core, pero no es necesario que lo conozcas para poder seguirlos sin problema.

    Me convence, ¿cuándo empezamos?

    Pues cuando tú quieras :) Sólo tienes que visitar la web de CampusMVP, inscribirte, y casi sobre la marcha te facilitarán las credenciales de acceso a la plataforma.

    Recuerda que si trabajas para una empresa española este curso podrías hacerlo prácticamente sin coste, gracias a la Formación Bonificada.

    ¡Eso es todo! Ahora es vuestro turno...

    Bueno, pues creo que con esto quedarán despejadas todas vuestras dudas sobre el curso, o al menos muchas de ellas. Si no es así, no dudéis en contactar con CampusMVP, donde os van a atender de maravilla, o conmigo a través de un comentario, correo electrónico o usando el formulario de contacto del blog.

    ¡Espero veros a muchos por allí!

    Publicado en: www.variablenotfound.com

    » Leer más, comentarios, etc...

    Picando Código

    Nuevos validadores de Cédula de Identidad Uruguaya: Prolog y Rust

    septiembre 15, 2020 11:45

    Se siguen agregando versiones en más lenguajes del validador de cédulas de identidad. Gracias a Bruno Cattáneo, tenemos una versión nueva en Prolog. Pueden ver el código fuente y ejemplos de cómo usarlo en el enlace.

    Validador de Cédulas de Identidad Uruguaya

    Inspirado por la versión de Bruno, finalmente me puse a escribir una versión que hacía tiempo quería escribir: Rust. El código para validar la cédula es lo suficientemente simple como para probar un lenguaje de programación nuevo. Hace tiempo que quería entrarle a Rust, así que fue una buena excusa. Me costó un poco, aprendí algo de Rust en el camino, pero tendría que leer mucho más para poder escribir código Rust como la gente. Logré que funcione y llegué a poder ejecutarlo con cargo run y un número de cédula como parámetro y agregué algunos tests unitarios. Pero hay partes que uso variables mutables que seguro se podrían reescribir y en general seguro hay muchas cosas a mejorar. Pero por lo menos logré escribir mi primer código Rust más allá del “Hola Mundo!”. Ya seguiré aprendiendo más Rust, por ejemplo cómo diseñar el código para que pueda ser usado como librería. El código fuente en GitHub.

    Hace unos años creé mi primera gema en Ruby: Un validador de cédulas de identidad uruguaya. Poco más de un año después, escribí una versión en JavaScript. Desde entonces han surgido un montón de versiones más del validador de cédulas de identidad en distintos lenguajes y ya tenemos: Ruby, Python, JavaScript (plugin jQuery y versión en Node), PHP, Go, Crystal, Prolog y Rust.

     

    The post Nuevos validadores de Cédula de Identidad Uruguaya: Prolog y Rust first appeared on Picando Código.

    » Leer más, comentarios, etc...

    Variable not found

    ¡Seguimos! Enlaces interesantes 412

    septiembre 14, 2020 08:01

    Enlaces interesantes

    Estimadas, estimados, ¡ya estamos de vuelta!

    Tras dos meses de parón blogosférico, durante los cuales he andado bastante atareado con otros menesteres, volvemos a la carga. Y no había mejor forma de hacerlo que publicando la entrega número 412 de la serie de enlaces interesantes, que seguro echabais de menos cada lunes ;)

    Y por cierto, ya que ha salido el tema, el código de error HTTP 412 (Precondition failed) se produce cuando el acceso a un recurso es denegado debido a que no se cumplió algunas de las precondiciones especificadas a través de encabezados como If-Match, If-Modified-Since, If-None-Match o similares. El objetivo es evitar la ejecución de la acción (GET, POST, etc.) sobre un recurso que se encuentra en un estado incorrecto.

    Por si te lo perdiste...

    .NET Core / .NET

    ASP.NET Core / ASP.NET / Blazor

    Azure / Cloud

    Conceptos / Patrones / Buenas prácticas

    Data

    Machine learning / IA / Bots

    Web / HTML / CSS / Javascript

    Visual Studio / Complementos / Herramientas

    Xamarin

    Publicado en Variable not found.

    » Leer más, comentarios, etc...

    Blog Bitix

    Cómo comprar una licencia y activar Windows 10 y Office 2019

    septiembre 13, 2020 05:30

    Windows 10 y Microsoft Office 2019 son productos de software con una licencia privativa, para usarlos de forma legal es necesario comprar una licencia que permita activarlos. Recurrir a activadores de estos productos para evitar pagar la licencia no es recomendable ya que son una fuente de entrada de virus informáticos con un peligro importante para la seguridad del equipo y la importancia de las tareas que realizamos actualmente en él, como compras o consultas bancarias. Una sentencia del tribunal europeo del 2012 permite a vendedores de terceros ofrecer licencias de Windows 10 y Microsoft Office 2019 a precios significativamente más baratos para activar estos productos de forma completamente legal.

    Microsoft

    El sistema operativo más utilizado en ordenadores personales para uso doméstico y en los equipos informáticos de las empresas es Windows 10 de Microsoft. Muchos de los fabricantes de ordenadores de escritorio de marcas como HP o Dell pero también muchos de los ensambladores de ordenadores montados por piezas y prácticamente todos los fabricantes de portátiles incluyen preinstalado Windows 10 como sistema operativo junto con otro software, en estos casos no es necesario comprar una licencia de Windows pues ya que está está incluida en el importe del producto.

    A través de vendedores distintos a Microsoft es posible comprar una licencia barata y completamente legal con la que activar estos productos y eliminar los mensajes que solicitan la activación para tener acceso a todas sus funciones sin que pasado un tiempo después de su instalación se deshabiliten.

    Contenido del artículo

    Versiones y tipos de licencia de Windows 10

    Windows 10 tiene diferentes versiones, las diferencias entre ellas está en las características que soportan.

    • Home: es la versión usada mayoritariamente y suficiente para la mayoría de usuarios que se instala en los equipos domésticos.
    • Pro: esta versión incluye todas las funcionalidades de la edición Home con algunas adicionales normalmente necesarias en entornos empresariales. Algunas de sus funcionalidades adicionales son Directorio Activo, Escritorio remoto, BitLocker, virtualización con Hyper-V y Windows Defender Device Guard.
    • Pro for Workstations: es la versión que permite usar Windows en equipos de altas prestaciones con procesadores Intel Xeon o AMD Epyc, grandes cantidades de memoria y algunas opciones avanzadas más.

    Microsoft comercializa las licencias y distribuye su software de diferentes formas.

    • OEM: el software es preinstalado en el equipo por el fabricante o vendedor y la licencia queda asociada al mismo.
    • Retail: el software es comercializado de forma independiente junto al equipo o para un equipo existente, al contrario que las OEM esta sirve para varios equipos.
    • Microsoft Volume Licensing: permite usar licencias a organizaciones que tienen grandes volúmenes de equipos informáticos como empresas, gobiernos o instituciones educativas.

    Versiones de Microsoft Office

    Office también tiene diferentes versiones de los programa del paquete ofimático que comprende principalmente el editor de documentos Word, la hoja de cálculo Excel y PowerPoint para crear presentaciones junto algunos otros programas como Outlook como aplicación de correo electrónico o Access para crear bases de datos sencillas.

    • Office Online: es la versión que compite con Google Docs, es una versión implementada como una aplicación web. Se accede con un navegador web, no requiere instalar programas en el ordenador, es gratuita y permite colaborar a varias personas en el mismo documento.
    • Office 365: es un servicio bajo suscripción de pago mensual que da acceso los programas del paquete ofimático y la versión web de los mismos. Cuando en el futuro se publique la siguiente versión no hace falta realizar de nuevo un pago para tener acceso a la nueva versión. Inluye algunos servicios adicionales como Skype para comunicaciones por videoconferencia y OneDrive para almacenamiento en la nube.
    • Office 2019: es la modalidad de siempre de pago único para tener acceso a los programas del paquete ofimático. Los programas se instalan como aplicaciones de escritorio en el ordenador. Cuando en el futuro se publique una nueva versión hay que pagar de nuevo por la licencia para usar la nueva versión.

    De las aplicaciones de escritorio de Microsoft Office 2019 hay varias versiones que se diferencian en las aplicaciones que incluyen, para la mayoría de usuarios la versión Hogar y Estudiantes que incluye las aplicaciones básicas de un paquete ofimático es suficiente.

    • Hogar y Estudiantes: incluye las tres aplicaciones básicas del paquete ofimático. Word como procesador de texto para escribir documentos, Excel como hoja de cálculo que permite realizar operaciones y obtener resultados calculados aplicando fórmulas y PowerPoint para crear presentaciones.
    • Hogar y Empresas: además de las aplicaciones del paquete ofimático básicas incluye la aplicación de escritorio de correo electrónico Outlook.
    • Professional: además de Word, Excel, PowerPoint y Outlook incluye la aplicación Publisher para crear documentos impresos como folletos, catálogos, trípticos o sobres entre otros. También incluye la aplicación Access para crear bases de datos.
    • Professional Plus: incluye todas las aplicaciones de la versión Professional e incluye la aplicación de comunicación por videoconferencia Skype.

    Cuanto cuestan las licencias de Windows 10 y Microsoft Office 2019

    En algunos casos el precio de la licencia de Windows 10 ha de adquirirse a parte del ordenador aunque se ofrezca de hacerlo al mismo tiempo, en la factura el coste del ordenador y la licencia de Windows 10 estará desglosada. El coste de la licencia de Windows 10 vendida por Microsoft cuesta entre 145 € para la versión Home, 259 € para la Pro y 439 € para la Pro for Workstations, no es nada barata. La licencia de Microsoft Office 2019 vendida por Microsoft cuesta 149 €, también tiene modalidades de pago bajo suscripción con un coste mensual.

    Un coste adicional en licencias de uso que encarecen de forma muy significativa un ordenador nuevo teniendo en cuenta algunos parten de los 300 € e incluso para uno de 1000 € representa un porcentaje importante sino mayor que el hardware. Microsoft vende licencias Retail de Windows 10 y licencias Microsoft Office 2019 en su página web.

    Hay varios vendedores distintos a Microsoft que permiten obtener una licencia de Windows 10 y Microsoft Office de forma completamente legal, válida y para siempre con unos precios muy baratos que permiten activar estos productos. En el año 2012 el tribunal de la Unión Europea dictó una sentencia por la que las licencias de software vendido a través de internet que dejan de usarse por sus compradores originales pueden ser compradas y vendidas de forma legal, esto es lo que hacer algunos vendedores compren esas licencias que dejan de usarse y las revenden a otros usuarios a unos precios bajos.

    Si el precio de Windows 10 vendido por Microsoft en su versión Retail es de 145 € para la versión Home o 259 € para la Pro estos otros vendedores ofrecen licencias válidas a precios mucho más baratos, de entre unos 10 € y 15 €, lo que supone un ahorro importante en este software. Si la versión de Office Hogar y Estudiantes 2019 cuesta 149 € compradola a Microsoft, otros vendedores ofrecen licencias con códigos de activación también por entre 10 € y 15 €.

    Descargar Windows 10 y Microsoft Office 2019

    Tanto Windows 10 como el paquete ofimático Microsoft Office 2019 se pueden descargar gratis con el paquete de idioma español original desde la página oficial de Microsoft con el navegador web mediante descarga directa. La imagen de Windows 10 incluye las diferentes versiones. Aunque la descarga es gratuita es necesario comprar una licencia que otorga el derecho de uso.

    Qué ocurre si no tengo licencia de Windows 10 u Microsoft Office 2019

    Windows 10 se puede descargar e instalar desde cero aún sin tener una licencia para su uso. Sin embargo, al cabo de unos 30 días Windows 10 desactiva algunas opciones de personalización estéticas que no afectan a su funcionalidad, permite continuar usándolo de forma indefinida incluyendo seguir obteniendo las últimas actualizaciones de seguridad. Algunas de las opciones de personalización que se desactivan son aplicar temas personalizados, modificar los colores y fuentes del sistema, configurar el menú inicio o el fondo de pantalla y de la pantalla de bloqueo.

    Si no se quiere comprar una licencia de Windows 10 se puede instalar una distribución gratuita de GNU/Linux como Ubuntu, Descargar e instalar la distribución Ubuntu de GNU/Linux paso a paso desde cero. Los sistemas operativos GNU/Linux como Ubuntu actualmente son iguales de fáciles de utilizar y tan intuitivos como Windows en los que además la mayoría programas adicionales son libres y gratuitos para cualesquiera funcionalidades que se necesite como un programa de retoque fotográfico, reproductor de vídeo, visor de fotos, navegador web, etc. Incluso es posible jugar a la mayoría de juegos de Windows con Steam en GNU/Linux y Wine con el mismo rendimiento, el hardware común se reconoce sin necesidad de instalar controladores específicos incluidas tarjetas gráficas, memorias y discos duros externos USB.

    Microsoft Office también puede instalarse pero al cabo de un mes impide la edición de documentos si no se activa lo que limita enormemente su funcionalidad. En todo momento es posible abrir documentos en modo lectura pero para recuperar las opciones de edición es necesario adquirir su licencia y activar el producto. Si no se quiere comprar una licencia o si se prefiere utilizar un paquete ofimático con una licencia libre estas son 4 de las mejores alternativas para Microsoft Office.

    Dónde comprar una licencia de Windows 10 y Microsoft Office 2019

    Dado el económico precio de los vendedores distintos a Microsoft que ofrecen de las licencias de Windows 10 y Microsoft Office es recomendable adquirir una licencia que permite activar estos productos. Sin necesidad de piratear o recurrir a activadores que muchos de ellos son una fuente de virus y son ilegales, solo ya buscarlos es un riesgo para la seguridad del ordenador y una de las mayores fuentes de entrada de virus en sistemas Windows ya que las búsquedas pueden llevar a páginas maliciosas. Hoy en día hacemos tareas importantes en el ordenador desde almacenar numerosa información personal al pago por internet o acceso a la cuenta del banco o recibos con lo que conviene evitar el riesgo de los virus informáticos.

    Algunos de los vendedores venden licencias a través de Amazon o eBay como vendedores externos, dada la popularidad de estos gigantes del comercio electrónico es posiblemente una de las opciones más cómodas si ya se tiene una cuenta. Otra alternativa es Goodoffer24 que ofrece el pago con PayPal, otras son Digital License, G2Play, GVGmall, Gamefun365.

    Yo no uso ni el sistema operativo Windows ni el paquete ofimático Microsoft Office con lo que no tengo la experiencia de como es el resultado de comprar en una de estas páginas. Sin embargo, cualquiera de estas páginas y enlaces ofrecen comentarios y valoraciones tanto del producto como del vendedor, en el caso de Amazon suelen ser vendedores externos lo que ofrece menos garantías, por ello recomiendo leer tanto la descripción del producto como los comentarios de otras personas y valoraciones que tiene el vendedor. Si compras una licencia tras leer este artículo puedes dejar un comentario.

    Una vez realizada la compra el código de activación del producto se envía en unas horas por correo electrónico o a la cuenta de la página. El código de activación de la licencia es una cadena de caracteres formada por varios números y letras separados por guiones con el siguiente aspecto, XXXXX-XXXXX-XXXXX-XXXXX-XXXXX que hay que introducir en las secciones de configuración de Windows 10 y Microsoft Office 2019.

    Cómo activar Windows 10 y Microsoft Office 2019

    Windows 10 se puede activar durante la instalación o una vez instalado seleccionando el botón Inicio, luego siguiendo las opciones Configuración > Actualización y seguridad > Activación > Actualizar clave de producto > Cambiar clave de producto. En esta sección se introduce el código de activación comprado. Una vez activado correctamente en esta misma sección se muestra un mensaje que informa del estado de activación de Windows, si está activado debe aparecer el mensaje Windows está activado.

    Activación de Windows durante la instalación Activación de Windows Activación de Windows

    Activación de Windows durante la instalación y una vez instalado

    El siguiente comando ejecutado desde utilidad Símbolo del sistema permite obtener el código de activación de Windows 10.

    1
    
    wmic path softwarelicensingservice get OA3xOriginalProductKey
    wmic.cmd

    Una vez instaldo Microsoft Office al abrir una las aplicaciones de la suite ofimática se solicita la activación del producto. Para activar Microsoft Office con el código de licencia comprado se realiza desde el menú Archivo > Cuenta > Información del producto > Activar producto.

    Activación de Microsoft Office 2019 Activación de Microsoft Office 2019

    Activación de Microsoft Office 2019

    » Leer más, comentarios, etc...

    Fixed Buffer

    ¡¡FixedBuffer ha cumplido su segundo año!!

    septiembre 11, 2020 08:00

    Tiempo de lectura: 3 minutos
    Imagen ornamental. Pastel de cumpleaños con una vela en forma de número 2

    Fin del verano y vuelta a la rutina. Parece mentira que hoy hace 2 años empezase la andadura de este blog. Han sido dos años de descubrimiento personal y la verdad no pensaría que llegaría hasta aquí 🙂

    Con esta entrada ya se convierte en tradición (2 de 2 veces) el día del aniversario echar la vista hacia atrás y hacer un resumen (breve, que no quiero aburrir) de los principales hitos del año anterior.

    En primer lugar, el hecho más evidente, FixedBuffer sigue dando guerra y para celebrarlo, el blog ha tenido un lavado de cara para darle un aire más moderno y minimalista, pero sobre todo mejor optimizado para ordenador y móvil. El número de lectores desde móvil y tablet, aunque es mucho menor que el de ordenador, va creciendo poco a poco y todos os merecéis la mejor experiencia posible el tiempo que pasáis aquí.

    Imagen animada de una persona haciendo un corazón con las manos

    Estaré encantado de leer en los comentarios opiniones sobre el nuevo estilo 🙂

    En segundo lugar, he sido renovado de nuevo como MVP en la categoría de ‘Tecnologías de desarrollo’ y ya llevo 2 anillos. Este año he recibido el premio en la mejor compañía como os contaba en su momento.

    Tercero y no por eso menos importante, me he convertido en tutor de mi propio curso en CampusMVP: Testing de aplicaciones .NET y .NET Core con xUnit y Moq. Han sido muchos meses haciendo un gran esfuerzo para sacar el curso adelante, pero todo ha ido genial y la gente está muy contenta con él (cosa que me hace tremendamente feliz).

    Por cierto, con motivo del aniversario la gente de CampusMVP hace un descuento del 10% utilizando el código FIXED2Y antes del 20 de septiembre de 2020. Si estabas pensando en hacer el curso, es la oportunidad perfecta.

    Además, he podido coincidir con algunos de vosotros en las charlas que me han dejado dar por diferentes comunidades (esas cosas que hacíamos antes del COVID-19 como excusa para juntarnos y beber cerveza). Eso es algo que siempre gusta y es de agradecer porque echamos muy buenos ratos 🙂

    Otra cosa que me gustaría decir es que por fin he puesto al día la sección de colaboraciones, donde si os habéis quedado con ganas de leer más cosillas de las que he escrito, podéis ir y consultar ya que hay cerca de 20 artículos más publicados en otros blogs.

    Se avecina un año muy interesante por delante. De antemano os quiero dar las gracias a todos ya que, si no fuese por vosotros, FixedBuffer no estaría cumpliendo su segundo año online, y es que como he dicho ya muchas veces, un blog sin lectores no es un blog. Dicho esto, vamos a ver el top 5 de entradas del último año:

    1. Haciendo fácil el acceso a datos con Entity Framework Core (Parte 2)
    2. Worker Service: Cómo crear un servicio .Net Core 3 multiplataforma
    3. Generación de ficheros «Excel» (xlsx) con ClosedXML
    4. ClosedXML, una manera fácil de dar formato a nuestros .xlsx
    5. Haciendo fácil el acceso a datos con Entity Framework Core

    Y seguido muy de cerca se ha quedado Escribiendo código de alto rendimiento en .Net Core. Una entrada muy especial por conseguir la friolera de 473 visitas en un solo día, un record nada despreciable para un pequeño blog como este 🙂

    ¡¡Muchas gracias a todos los seguidores de FixedBuffer, que sois los que hacéis que esto valga la pena!!

    **La entrada ¡¡FixedBuffer ha cumplido su segundo año!! se publicó primero en Fixed Buffer.**

    » Leer más, comentarios, etc...

    Blog Bitix

    Cómo comprar una licencia y activar Windows 10 y Microsoft Office 2019

    septiembre 10, 2020 08:00

    Windows 10 y Microsoft Office 2019 son productos de software con una licencia privativa, para usarlos de forma legal es necesario comprar una licencia que permita activarlos. Recurrir a activadores de estos productos para evitar pagar la licencia no es recomendable ya que son una fuente de entrada de virus informáticos con un peligro importante para la seguridad del equipo y la importancia de las tareas que realizamos actualmente en él, como compras o consultas bancarias. Una sentencia del tribunal europeo del 2012 permite a vendedores de terceros ofrecer licencias de Windows 10 y Microsoft Office 2019 a precios significativamente más baratos para activar estos productos de forma completamente legal.

    Microsoft

    Windows 10

    Microsoft Office

    El sistema operativo más utilizado en ordenadores personales para uso doméstico y en los equipos informáticos de las empresas es Windows 10 de Microsoft. Muchos de los fabricantes de ordenadores de escritorio de marcas como HP o Dell pero también muchos de los ensambladores de ordenadores montados por piezas y prácticamente todos los fabricantes de portátiles incluyen preinstalado Windows 10 como sistema operativo junto con otro software, en estos casos no es necesario comprar una licencia de Windows pues ya que está está incluida en el importe del producto.

    En algunos casos el precio de la licencia de Windows 10 ha de adquirirse a parte del ordenador aunque se ofrezca de hacerlo al mismo tiempo, en la factura el coste del ordenador y la licencia de Windows 10 estará desglosada. El coste de la licencia de Windows 10 no es nada barata, cuesta entre 145 € para la versión Home, 259 € para la Pro y 439 € para la Pro for Workstations, un coste adicional que encarece de forma muy significativa el ordenador teniendo en cuenta algunos parten de los 300 € e incluso para uno de 1000 € representa un porcentaje importante. Microsoft vende licencias Retail en su página web.

    A través de vendedores distintos a Microsoft y los fabricantes de los ordenadores es posible comprar una licencia mucho más barata y completamente legal con la que activar estos productos y eliminar los mensajes que solicitan la activación para tener acceso a todas sus funciones sin que pasado un tiempo después de su instalación se deshabiliten.

    Contenido del artículo

    Tipos de licencias de Windows 10

    Windows 10 tiene diferentes versiones, las diferencias entre ellas está en las características que soportan.

    • Home: es la versión usada mayoritariamente y suficiente para la mayoría de usuarios que se instala en los equipos domésticos.
    • Pro: esta versión incluye todas las funcionalidades de la edición Home con algunas adicionales normalmente necesarias en entornos empresariales. Algunas de sus funcionalidades adicionales son Directorio Activo, Escritorio remoto, BitLocker, virtualización con Hyper-V y Windows Defender Device Guard.
    • Pro for Workstations: es la versión que permite usar Windows en equipos de altas prestaciones con procesadores Intel Xeon o AMD Epyc, grandes cantidades de memoria y algunas opciones avanzadas más.

    Microsoft comercializa las licencias y distribuye su software de diferentes formas.

    • OEM: el software es preinstalado en el equipo por el fabricante o vendedor y la licencia queda asociada al mismo.
    • Retail: el software es comercializado de forma independiente junto al equipo o para un equipo existente, al contrario que las OEM esta sirve para varios equipos.
    • Microsoft Volume Licensing: permite usar licencias a organizaciones que tienen grandes volúmenes de equipos informáticos como empresas, gobiernos o instituciones educativas.

    Descargar Windows 10 y Microsoft Office 2019

    Tanto Windows 10 como el paquete ofimático Microsoft Office 2019 se pueden descargar gratis y el software original desde la página oficial de Microsoft con el navegador web mediante descarga directa. La imagen de Windows 10 incluye las diferentes versiones.

    Qué ocurre si no tengo licencia de Windows 10 u Microsoft Office 2019

    Windows 10 se puede descargar e instalar desde cero aún sin tener una licencia para su uso. Sin embargo, al cabo de unos días Windows 10 desactiva algunas opciones de personalización estéticas que no afectan a su funcionalidad, permite continuar usándolo de forma indefinida incluyendo seguir obteniendo las últimas actualizaciones de seguridad. Algunas de las opciones de personalización que se desactivan son aplicar temas personalizados, modificar los colores y fuentes del sistema, configurar el menú inicio o el fondo de pantalla y de la pantalla de bloqueo.

    Si no se quiere comprar una licencia de Windows 10 se puede instalar una distribución gratuita de GNU/Linux como Ubuntu, Descargar e instalar la distribución Ubuntu de GNU/Linux paso a paso desde cero. Los sistemas operativos GNU/Linux como Ubuntu actualmente son iguales de fáciles de utilizar y tan intuitivos como Windows en los que además la mayoría programas adicionales son libres y gratuitos para cualesquiera funcionalidades que se necesite como un programa de retoque fotográfico, reproductor de vídeo, visor de fotos, navegador web, etc. Incluso es posible jugar a la mayoría de juegos de Windows con Steam en GNU/Linux y Wine con el mismo rendimiento, el hardware común se reconoce sin necesidad de instalar controladores específicos incluidas tarjetas gráficas, memorias y discos duros externos USB.

    Microsoft Office también puede instalarse pero al cabo de unas semanas impide la edición de documentos si no se activa lo que limita enormemente su funcionalidad. En todo momento es posible abrir documentos en modo lectura pero para recuperar las opciones de edición es necesario adquirir su licencia y activar el producto. Si no se quiere comprar una licencia o si se prefiere utilizar un paquete ofimático con una licencia libre estas son 4 de las mejores alternativas para Microsoft Office.

    Dónde comprar una licencia de Windows 10 y Microsoft Office 2019

    Hay varios vendedores que permiten obtener una licencia de Windows 10 y Microsoft Office de forma completamente legal y válida con unos precios muy baratos que permiten activar estos productos. En el año 2012 el tribunal de la Unión Europea dictó una sentencia por la que las licencias de software vendido a través de internet que dejan de usarse por sus compradores originales pueden ser compradas y vendidas de forma legal, esto es lo que hacer algunos vendedores compren esas licencias que dejan de usarse y las revenden a otros usuarios a unos precios bajos.

    Si el precio de Windows 10 vendido por Microsoft en su versión Retail es de 145 € para la versión Home o 259 € para la Pro estos otros vendedores ofrecen licencias válidas a precios mucho más baratos, de entre unos 10 € y 15 €, lo que supone un ahorro importante en este software. Si la versión de Office Hogar y Estudiantes 2019 cuesta 149 € comprado a Microsoft, otros vendedores ofrecen licencias con códigos de activación también por entre 10 € y 15 €.

    Dado el económico precio de estos vendedores que ofrecen de las licencias de Windows 10 y Microsoft Office es recomendable adquirir una licencia que permite activar estos productos. Sin necesidad de piratear o recurrir a activadores que muchos de ellos son una fuente de virus y son ilegales, solo ya buscarlos es un riesgo para la seguridad del ordenador y una de las mayores fuentes de entrada de virus en sistemas Windows ya que las búsquedas pueden llevar a páginas maliciosas. Hoy en día hacemos tareas importantes en el ordenador desde almacenar numerosa información personal al pago por internet o acceso a la cuenta del banco o recibos con lo que conviene evitar el riesgo de los virus informáticos.

    Algunos de los vendedores lo hacen a través de Amazon o eBay como vendedores externos, dada la popularidad de estos gigantes del comercio electrónico es posiblemente una de las opciones más cómodas si ya se tiene una cuenta. Otra alternativa es Goodoffer24 que ofrece el pago con PayPal, otras son Digital License, G2Play, GVGmall, Gamefun365. En cualquiera de estas páginas y enlaces es recomendable leer la descripción del producto y los comentarios.

    Una vez realizada la compra el código de activación del producto se envía en unas horas por correo electrónico o a la cuenta de la página. El código de activación de la licencia es una cadena de caracteres formada por varios números y letras separados por guiones con el siguiente aspecto, XXXXX-XXXXX-XXXXX-XXXXX-XXXXX que hay que introducir en las secciones de configuración de Windows 10 y Microsoft Office 2019.

    Cómo activar Windows 10 y Microsoft Office 2019

    Windows 10 se puede activar durante la instalación o una vez instalado seleccionando el botón Inicio, luego siguiendo las opciones Configuración > Actualización y seguridad > Activación > Actualizar clave de producto > Cambiar clave de producto. En esta sección se introduce el código de activación comprado. Una vez activado correctamente en esta misma sección se muestra un mensaje que informa del estado de activación de Windows, si está activado debe aparecer el mensaje Windows está activado.

    Activación de Windows durante la instalación Activación de Windows Activación de Windows

    Activación de Windows durante la instalación y una vez instalado

    El siguiente comando permite obtener el código de activación de Windows 10.

    1
    
    wmic path softwarelicensingservice get OA3xOriginalProductKey
    wmic.cmd

    Una vez instaldo Microsoft Office al abrir una las aplicaciones de la suite ofimática se solicita la activación del producto. Para activar Microsoft Office con el código de licencia comprado se realiza desde el menú Archivo > Cuenta > Información del producto > Activar producto.

    Activación de Microsoft Office 2019 Activación de Microsoft Office 2019

    Activación de Microsoft Office 2019

    » Leer más, comentarios, etc...

    Picando Código

    ElasticON Global 2020

    septiembre 10, 2020 02:00

    ElasticON

    ElasticON es una conferencia global para usuarios de tecnologías Elastic. Son 3 días de sesiones, conversaciones de preguntas en vivo, oradores expertos de la industria y más. Este año la conferencia va a ser virtual, gratuita y abierta a todo público, y va a ser los días 13, 14 y 15 de octubre.

    Ya sea que te estés arremangando para empeza a usar Elastic o escalando deployments existentes a nuevas alturas, hay algo para ti en ElasticON Global. Es la reunión de usuarios y expertos de Elastic y Elasticsearch, uniendo miembros de la comunidad de cada industria y región.

    El público objetivo cubre desarrolladores, arquitectos, DevOps, SecOps, data analysts, expertos en búsqueda así como también managers y jefes. Ya está disponible la agenda para los 3 días y la lista de oradores. Hay charlas para todos los gustos y perfiles. Los temas incluyen seguridad, sector público, desarrollo open source (hay una charla sobre cómo empezar a contribuir a Elastic), observabilidad, monitoreo, Elastic Enterprise Search (esto es particularmente interesante), búsqueda (por supuesto) y más.

    Voy a estar dando una charla junto a mis compañeros del equipo de Clientes donde vamos a comentar algunas de las cosas en las que hemos venido trabajando. Esto me ha tenido bastante nervioso recientemente, pero estoy en buena compañía. Veremos qué tal sale.

    Como mencioné al principio, la conferencia es gratis y el registro está en este enlace. ¡Nos vemos ahí!

    The post ElasticON Global 2020 first appeared on Picando Código.

    » Leer más, comentarios, etc...

    Picando Código

    Cory Doctorow contra el monopolio de Audiolibros de Amazon con ATTACK SURFACE

    septiembre 09, 2020 01:30

    Cory Doctorow -autor de libros que definitivamente deberías leer como Little Brother, Homeland, Radicalized y más- anunció en abril su nuevo libro ATTACK SURFACE.

    Es una novela en el universo de Little Brother, pero se puede leer independientemente. Está escrita para adultos, y cuenta la historia de Masha, la operativa de vigilancia de la DHS que aparece al principio y final de Little Brother y Homeland respectivamente. Después de pasar una vida cazando a la resistencia en San Francisco, milicias yihadistas en Irak, y el under pro-democracia en URSS, Masha tiene que confrontar la dimensión moral del trabajo de su vida. Su mejor amiga de la infancia terminó siendo activista de Black Lives Matter en Oakland, y ahora las ciberarmas desarrolladas por Masha para “contratistas de seguridad” del sector privado están siendo usadas en contra de los manifestantes en su ciudad natal.

    Al igual que Little Brother y Homeland, Attack Surface es una guía a los riesgos digitales de nuestro mundo en red, un llamado a las armas para construir un mundo mejor, y un manual de defensa personal para la lucha que se vendrá. Todo lo que he leído de Doctorow hasta ahora me ha gustado, y esto suena a más de lo que me interesa leer. Tengo el libro pre-ordenado desde que se anunció allá por abril, pero este post viene a otro tema: el audiolibro.

    Cory Doctorow abrió una campaña en Kickstarter: para financiar el lanzamiento del formato audiolibro para ATTACK SURFACE. Y si van a leer una sóla cosa de este post, espero que sea el siguiente texto sacado directamente de dicha campaña:

    Por qué produzco mis propios audiolibros (también conocido como “Fuck Audible”)

    Los audiolibros son geniales. ¡Los amo! Desafortunadamente, los audiolibros también son un monopolio: Audible, la división de audiolibros de Amazon, controla un 90% del mercado. Lo que es más, Audible no te permite vender tus audiolibros a través de su tienda a menos que les permitas envolver tus libros en su DRM, el cual no puede ser quitado sin cometer un delito bajo la sección 1201 de la Ley de Derechos de Autor de la Era Digital (Digital Millennium Copyright Act o DMCA). Cada audiolibro que compras en Audible está bloqueado a la plataforma de Amazon… para siempre. Pueden revocar el acceso al libro (lo han hecho con ebooks Kindle, empezando con — no te estoy jodiendo — Mil Novecientos Ochenta y Cuatro de George Orwell… ¡Esto no se puede inventar!).

    Realmente odio el DRM. Mucho. Es mi tipo de cosa. Incluso estoy involucrado en una demanda para invalidar la Sección 1201 de la DMCA, la ley que prohibe quitar DRM. La idea que una empresa pueda decidir cómo usas tu propiedad, ¿después de comprársela a ellos? A la mierda eso. Eso no es propiedad. Eso es feudalismo. Al menos con el sistema feudal original, los aristócratas eran (despreciables, eminentemente guillotinables) seres humanos. Con DRM, la únca “gente” que realmente es dueña de propiedad son las colonia-organismos transhumanas inmortales que llamamos “corporaciones de  responsabilidad limitada” para quienes somos poco más que un inconveniente en forma de flora intestinal.

    Por lo cual ninguno de mis audiolibros está disponible en Audible. Recuerda que Audible controla el 90% del mercado, lo que significa que las editoras tendrían que estar locas para comprarme mis derechos de audio, ya que no hay ningún lugar donde vender los (increíblemente caros de producir) audiolibros cuando están prontos.

    ¡La buena noticia es que puedo conservar los derechos de mis audiolibros! Eso es bastante raro en los círculos editoriales. Y cuando la vida te da SARS, bueno, ¡haces sarsaparilla! (Nota de picandocodigo: 🤨)

    Así que participando de la campaña en Kickstarter no sólo estamos ayudando al autor económicamente en esta época que no es fácil para nadie, sino que participamos de un experimento donde un autor, agente, lectores y editorial tratan directamente el uno con el otro en una transacción que esquiva a los monopolistas que tanto se han beneficiado de la crisis actual. Ayudando a vender ebooks y audiolibros a través de la campaña, mostramos a editoriales que lectores están dispuestos a comprar sus ebooks y audiolibros sin enriquecer a monopolistas, incluso si (oh, ¡qué esfuerzo!) implica un clic o dos extra.

    La campaña incluye versiones en ebook y audiolibro de Little Brother, Homeland y Attack Surface, individualmente y en paquetes a precios promocionales. También por USD 1.000 se ofrecía el final original de Little Brother. Esta recompensa estaba disponible exclusivamente para 2 backers y ya se fue, e involucra que Cory Doctorow escriba a mano el final del boceto original de Little Brother y lo enviara por correo. Todavía quedan dos recompensas de USD 10.000 para encargar una historia en el universo de Little Brother escrita por el autor…

    Ya leí Little Brother y Homeland, preordené Attack Surface en papel y nunca escuché un audiolibro. Pero igual aporté a esta campaña (y en una de esas, Attack Surface termina siendo el primer audiolibro que escuche) porque Cory Doctorow (y es el tipo de iniciativas que merece nuestro apoyo ✊).

    Más información en este enlace y repito la campaña en Kickstarter.

    The post Cory Doctorow contra el monopolio de Audiolibros de Amazon con ATTACK SURFACE first appeared on Picando Código.

    » Leer más, comentarios, etc...

    Picando Código

    Hyrule Warriors: Age of Calamity – Nintendo Switch

    septiembre 08, 2020 10:48

    Nintendo anunció de la nada un título nuevo en el universo de La Leyenda de Zelda. A primera vista parecía contenido descargable para Hyrule Warriors, pero no, se trata de un juego completamente nuevo en esa misma serie – Hyrule Warriors: Age of Calamity. Lo más interesante es que va a ser una precuela de The Legend Of Zelda: Breath Of The Wild. Va a contar la historia de Zelda, los 4 campeones y el Rey de Hyrule 100 años antes de los eventos de Breath Of the Wild.

    Hyrule Warriors: Age of Calamity

    Me resultó interesante cómo Koei-Tecmo “se ganó” este título. El primer juego de Hyrule Warriors salió para Nintendo Wii U en 2014 como un spin-off de la serie. El equipo de desarrollo eligió Zelda para un crossover entre Dynasty Warriors y Nintendo. Le presentaron el concepto a Eiji Aonuma -productor de los juegos de Zelda en Nintendo- quien venía intentando romper un poco con las tradiciones de la saga (algo que quedó demostrado con Breath Of The Wild). Nintendo y Aonuma confiaron en Koei Tecmo y el título tuvo muy buenas ventas (relativamente, el Wii U no fue una consola muy exitosa). Fue acompañado de contenido descargable, una versión para Nintendo 3DS y más adelante una versión “definitiva” para Nintendo Switch con todo el contenido descargable de ambas versiones, contenido nuevo y algunos cambios menores.

    Aparentemente en esta ocasión, Aonuma se acercó a Koei con la propuesta de hacer un juego de la saga Warriors contando la historia de La Gran Calamidad. A diferencia de los juegos anteriores, éste se desarrolló en conjunto con el equipo Zelda en cada paso del proceso: incluyendo detalles del gameplay, gráficos, el mundo y diálogos. Si bien mantiene el estilo identificable de la serie, es más “único” y permite “experimentar el mundo” de Breath Of The Wild 100 años atrás.

    Dynasty Warrior es una franquicia con un estilo particular de juego basado en combate denominado “hack and slash”. Elegimos un personaje principal y tenemos distintos escenarios de combate donde luchamos contra hordas de enemigos y jefes. Mi experiencia está limitada a Hyrule Warriors así que sólo sé de ese juego. Nuestro personaje va aumentando niveles y podemos obtener distintas armas y poderes a medida que vamos derrotando más enemigos y completando distintos objetivos en cada nivel.

    Esta nueva entrega de Hyrule Warriors fue presentada online a través de un video bastante eficiente. De primera despeja cualquier duda respecto al tema que tenemos en mente quienes seguimos la saga: La secuela de Breath Of The Wild anunciada el año pasado. Aonuma nos dice “para hacer todavía más impresionante el vasto mundo que disfrutan explorar en el juego original, el equipo está trabajando mucho en el desarrollo. Así que van a tener que esperar antes que podamos darle más actualizaciones”. Deja claro que esto no es esa secuela, y que todavía está en desarrollo, pero mientras tanto tenemos otra forma de disfrutar el mismo Hyrule:

    YouTube Video

    Los gráficos mantienen el estilo cel-shaded (sombreado plano) de Breath Of The Wild, y con suerte el control se parezca más a ese juego que al Hyrule Warrios original. En su momento jugué Hyrule Warriors en Nintendo Wii U y me resultó muy entretenido. Terminé toda la historia y se nota cómo el equipo de desarrollo estaba integrado por verdaderos seguidores de la serie. Se puede apreciar cuando hay cariño al material original durante la producción. El control es bastante diferente al de cualquier juego de Zelda, pero con suerte el trabajo en conjunto con el equipo Zelda haya generado un control que se asemeja más al de BotW.

    Que sea una secuela de Hyrule Warrios ya me genera bastante anticipación. Es momento de confesar que volví a comprar el juego cuando salió la versión “definitiva” para Nintendo Switch con todo el contenido descargable disponible… 🙈
    Si a eso le agregamos que amplía la historia de BotW, incluye sus personajes, agrega nuevas mecánicas de lucha como el uso de “stasis” y “Flurry Rush”, las expectativas están por las nubes. En el video mismo anunciaron que el 26 de setiembre vamos a obtener más información, habrá que ver qué más nos cuentan sobre el título. Pero el simple hecho de volver a ese Hyrule que tantas horas le hemos dedicado en BotW en una época donde todavía no estaba destrozado, los Campeones y Zelda están en su auge, y las Divine Beasts son armas en contra de “la calamidad” me resulta razón suficiente para querer jugarlo. Y no habrá que esperar mucho, ¡el juego sale el 20 de noviembre!

    A pesar de que 2020 ha sido un año de mierda, han salido cosas bastante buenas para Nintendo Switch. Hace poco se anunciaban Super Mario 3D World, Super Mario Bros 35 y Super Mario 3D All-Stars. A pesar del tiempo de aislamiento y encierro, no he jugado tanto al Switch como esperaba. Pero sí tuve períodos en que me entretuve jugando títulos como los que he ido reseñando en el blog y terminando juegos pendientes como The Legend Of Zelda: Link’s Awakening en Switch (hermoso juego) y otros. Recientemente estoy jugando varias cosas, entre ellas sigo buscando más Korok Seeds en BotW.

    Lo único malo de Hyrule Warriors: Age of Calamity es que si jugamos Breath Of The Wild, ya sabemos cómo termina…

    The post Hyrule Warriors: Age of Calamity - Nintendo Switch first appeared on Picando Código.

    » Leer más, comentarios, etc...

    Blog Bitix

    1 década en la misma empresa, 20 años trabajando

    septiembre 06, 2020 07:00

    Llevo casi 20 años de vida laboral, 10 de los cuales en la misma empresa, en ese periodo hay a quien le da tiempo a venir, marchar, volver a venir y volver a marchar. En estos años he pasado diría que por pocas empresas comparado con lo rápido que otras personas se cambian de trabajo, aún así han sido empresas bastante diferentes entre ellas. Los últimos 10 años se me han pasado mucho más rápido que los 10 anteriores. Si pasase 10 años más en la misma empresa muy posiblemente sería bueno pero con la situación pandémica actual y el desenlace de acontecimientos que crea incertidumbre es mucho decir.

    Prácticas en empresa

    Mi primera experiencia laboral ha sido durante los últimos años de carrera a través de unas prácticas en empresa. Las prácticas duraron unos 6 meses y aunque no mucho fueron remuneradas.

    Fue mi primera experiencia laboral aunque realmente más allá de eso no me sirvieron para lo que deberían haber sido su propósito que es el hacer uso de los conocimientos adquiridos durante la carrera, adquirir más conocimientos y ver por qué ramas laborales optar una vez en el mercado laboral.

    A pesar de todo y dado que era una empresa dedicada a la industria pesada un día pude ver una máquina de colada continua produciendo barras metalúrgicas literalmente como churros y el horno junto con la sala de control bunkerizada donde se funde la chatarra en la cubeta que luego pasa a la máquina de colada continua, ver esto estuvo muy bien.

    Las consultoras

    En los 10 primeros años de vida laboral he estado trabajando en dos consultoras principalmente con proyectos para la administración pública. Cada proyecto de apenas una duración de más de 9 meses o menos, entre las cosas buenas de estos proyectos es que algunos se empezaban desde cero lo que es una buena oportunidad para aplicar lo aprendido en anteriores proyectos, en los muy pocos incluso con cierta libertad de elegir frameworks y librerías.

    Las administraciones públicas tienen sus propias normativas y sistemas para el desarrollo de aplicaciones hasta donde he conocido con importantes limitaciones en librerías que se pueden elegir y obligan a usar sus propios frameworks de desarrollo propietarios a la vez que antiguos, con poca documentación y los cuales fuera de esa administración no tienen ningún valor. Para mi que hasta ahora he orientado mi carrera profesional en el aspecto técnico esto era una importante insatisfacción y por eso aunque no fue algo muy buscado ya que no estaba buscando activamente cualquier oportunidad cuando ví una oferta de trabajo interesante decidí cambiar a una startup dedicada al comercio electrónico, lugar de los siguientes 10 años con los que titulo el artículo.

    Con el paso del tiempo las cosas se ven algo distintas, en la primera consultora estuve algo menos de 3 años, con la vista de ahora no debería haber estado más de 3 trimestres. Por el salario casi de becario ya que en esos primeros años lo único que fue posible para mejorarlo fue un cambio de empresa, aún no teniendo experiencia en el primer año estamos hablando de alguien con titulación que ha tenido que pasar 5 años de su vida estudiando en una universidad y hacer una cantidad importante de exámenes de los que aún algunos días con somnolencia me desvelo con «pesadillas» sobre que al día siguiente tengo examen y aún no he estudiado nada. Y por la falta de adquirir conocimientos, ahora me doy cuenta de lo poco que sabía pero también de lo poco que tenían para enseñarme. Nada de lo que hice aquí me siento orgulloso salvo por ser un junior en la empresa y aún así en algunos proyectos realizar tareas de analista-programador que debería haberlo hecho alguien con más experiencia que justifique su salario.

    Aún con sus defectos en la segunda consultora hice varios proyectos mas satisfecho con el resultado. Y por otro lado guardo buen recuerdo de prácticamente todas las personas con las que tuve relación y algunas con esto de twitter sigo sabiendo de ellas. En la parte buena de los proyectos están una migración de bases de datos Microsoft Access a una base de datos Oracle. La dificultad de esto estaba en que la migración tenía que ser incremental dividiendo el proceso en tres pasos uno por provincia, para evitar colisiones de identificativos con los datos de la migración y los que se creen usando la aplicación la solución fue reservar una rango de identificativos para los datos de la migración. La otra dificultad estaba en que las bases de datos Access tenían numerosas inconsistencias en los datos y falta de integridad referencial que había que resolver para tratar de migrar la mayor cantidad de datos posible. La parte del proyecto que me encargué fue básicamente un programa Java, casi un script para realizar la migración incremental, buscar inconsistencias, emitir un informe con ellas para resolver las que se pudieran y generar una serie de archivos con las sentencias SQL que ejecutados migraban los datos a las bases de datos Oracle. Alguna época desplazado en el cliente con largos viajes en coche de ida y vuelta diarios, de los de Vitoria recuerdo la canción Anybody Seen My Baby de los Rolling Stones que sonaba todas las mañanas en la radio.

    A pesar de que prefiero Apache Tapestry como framework web basado en componentes, otros de los proyectos de lo que que guardo buen recuerdo era precisamente uno hecho en JSF, que si no recuerdo mal servía para evaluar el grado de cumplimiento de una organización en cuanto a seguridad según diferentes parámetros. Tenía su parte de introducción de datos y formularios mediante una aplicación web y también una parte importante eran los informes PDF generados con JasperReports de varias páginas que incluían algunas gráficas de araña generadas con JFreeChart, me permitió descubrir lo muy interesante que era esa herramienta de JasperRports que a día de hoy todavía no se si hay algo mejor en su propósito. En esa época no hacía teses unitarios pero tengo el recuerdo de que tanto el código como la aplicación web tenían un aspecto muy decente y cuidado.

    La startup

    El motivo del cambio de una consultora a startup en mi caso no fue el salario fue más el aspecto técnico de poder usar algo más moderno que Java 1.4, frameworks propietarios de administraciones públicas y el potencial de poder usar cualesquiera otras cosas más modernas que se necesitasen. Aún siendo Grails y Groovy junto con la base de datos MySQL no mis favoritos al menos era más moderno que lo que podía usar hasta ese momento. El segundo motivo era la experiencia de conocer otro tipo de empresa distinta de una consultora y diferente proyecto.

    En esta startup entré casi desde sus inicios y en estos 10 años he visto todo su proceso de crecimiento, desde el inicio en un polígono en una oficina que tendría unos 30m2 en el que al principio con las personas que estábamos sobraba incluso espacio, las mesas del Ikea cojeaban y sillas que habían pasado por mejor vida hace tiempo. Hasta su venta a una multinacional.

    A medida que se incorporan personas a una velocidad notable aumentando la plantilla iba faltando espacio. Las segundas oficinas tampoco eran ningún lujo pedían una reforma integral a gritos pero al menos eran más grandes y céntricas en la ciudad. Con el mayor número de personas el baño y a la hora de comer había que hacer cola a medida que también se llenaban con más personas, mesas y sillas, al final también se quedaron pequeñas. Todas las personas muy jóvenes, de entre 20 y 40 años bajos… también debería haber de 50 y 60.

    Las terceras oficinas al menos el continente era algo mejor por su reforma reciente y aún más grandes con varias salas de reunión. Eso sí, las mesas seguían siendo de las baratas de 100x50cm de Ikea que no deberían tener en su nombre la categoría de oficina, las sillas seguían siendo del Ikea y la luz de las mesas encadenadas en varias regletas sin necesidad de grandes reformas pero que en ciertas circunstancias hace que se salte la luz. Con el paso de tiempo y continuando el ritmo de contrataciones el espacio ya no daba mucho para más personas y las salas de reunión no era fácil reservar una cuando se quería, solo cuando se podía en los huecos libres.

    ¿Una consultora es peor o mejor que una startup? Con esta experiencia no diría que las startups sean mejores o peores, son diferentes, cada uno tiene sus puntos buenos y malos. Cada persona valora y prioriza diferentes apartados de diferentes forma. Casi seguro que uno de los aspectos que estará en las primeras posiciones será el salario, al final es la principal razón de ser del trabajo, y los tipos de proyectos de las startups en principio a más largo plazo por lo que el interés por que estén bien hechos es mayor, por otro lado esto hace que el proyecto casi siempre sea una evolución de lo existente en vez de algo completamente nuevo como los proyectos de una consultora.

    En cuanto al salario dependiendo de la startup puede ser mayor, cuando empecé no mucho mayor que el que tenía en la consultora. Eso sí en esta startup cada año siempre ha estado muy por encima del IPC con bonus anuales aparte.

    En cuanto al aspecto técnico Grails, Groovy y MySQL eran más moderno que lo que trabajaba en la consultora pero con el paso del tiempo lo que en su momento es tecnología moderna con hype, con el paso del tiempo deja de serlo, pierde el interés o no se adapta a las nuevas circunstancias. Lo que al principio cuando se tiene una base de código pequeña de código puede ser adecuado para añadir features nuevas rápidamente y cuando se son pocas personas en el equipo no es lo más adecuado cuando el equipo está formado por unas cuantas decenas de personas para seguir aportando features y corrigiendo errores con garantía no ya de que funcionen sino de que no lleguen errores de compilación a producción aún teniendo con teses unitarios, hacer code reviews para cada cambio y un equipo de varias personas dedicadas a QA. Más aún cuando ya ninguna persona tiene conocimiento de todo e incluso en el área en el que se está se maneja la mayor parte código está escrito por otras personas que ya no están en la empresa o por ti mismo pero que han pasado varios meses o algún año desde su última modificación o que ya ni siquiera desde el punto de vista de negocio se entiende la lógica de negocio implementada sin una investigación. Verdaderos hacks si con ese término se le quiere dar un aspecto positivo para convertir lo que antes era una aplicación Grails en dos pero compartiendo ciertas clases. Quedar anclado en una versión 2.5 obsoleta del 2015 con posibles fallos de seguridad en una aplicación de comercio electrónico que maneja dinero, tarjetas bancarias y datos personales cuando ya están por la 4.x por falta de tiempo, por miedo a actualizar, no estar seguro de romper cosas, suponer un esfuerzo ingente para arreglar incompatibilidades en la nueva versión y para actualizar la aplicación a las nuevas formas de hacer las cosas soportadas.

    En el aspecto negativo de las startups están en que si el negocio no crece a un ritmo importante anual del año anterior puede dejar de recibir financiación para quemar dinero para seguir creciendo y con ello el tiempo de vida de la empresa terminar rápido. Otros aspectos son que muchas startups tiene un plan de negocio incierto sin garantía de éxito, ni plan a muy largos plazos y en algunos casos un modelo de negocio cuestionable que se aprovechan sin muchos escrúpulos de la falta de regulación legal o del desconocimiento del usuario con esta disrupción de las tecnologías que cambian y posibilitan nuevos modelos.

    Por suerte en la que he estado aunque nunca ha llegado ha ser rentable, su objetivo principal era crecer aún a costa de quemar dinero, pero ha ido creciendo con números importantes que al final la ha hecho apetecible para ser vendida a una multinacional.

    La multinacional

    Donde antes era prácticamente austeridad como lo de las mesas, sillas y oficinas a una multinacional que no escatima en gastos, «money is not problem». En cuanto se dan las circunstancias nuevas oficinas completamente remodeladas con mesas grandes y de oficina, sillas ergonómicas nuevas no de Ikea, espacio para muchas más personas y salas de reuniones, lo mejor que he visto con mucha diferencia hasta el momento.

    Las condiciones salariales no eran ya malas respecto a lo que yo conocía de una consultora pero mejoran notablemente aún más no ya solo en salario con subidas de salario porcentuales de dos dígitos además de bonus anuales, appreciation bonus o retention bonus sino en otros beneficios como gastos para transporte, gastos para comida, aún siendo pequeña una aportación de la empresa a un plan de pensiones individuales, seguro de salud privado que aquí no es tan importante pero entiendo que para los estadounidenses es vital, plan de acciones con concesiones de acciones cada dos o tres meses como incentivo para permanecer en la empresa, café, leche, cacao, frutos secos y fruta en los descansos de las mañanas o para despues de comer. Quizá todo esto se estile en las tecnológicas estadounidenses pero en España es poco habitual. Todos estos beneficios a parte del salario, no se si en la más de la mitad de vida profesional que me queda tendré mejores condiciones. Las revisiones anuales en categoría y salario aún siendo normalmente buenas son individuales para cada persona según una evaluación que pretende ser objetiva y justa, según esa evaluación individual se crean diferencias que generan unas importantes malas sensaciones contraproducentes.

    El inglés se convierte en un conocimiento que hace más fácil entender de primera mano la información que se quiere transmitir sobre la empresa en los diferentes all-hands y reuniones recurrentes.

    Al principio es un éxito que una multinacional norteamericana de renombre mundial te adquiera, como un objetivo cumplido, luego con el paso del tiempo lo que se publica en Twitter queda para la posteridad. Sin cambiar realmente de empresa, aunque en la práctica lo sea, la experiencia dentro de una multinacional grande es muy diferente al de una startup. Mucha más gente en diferentes regiones y culturas, que no conoces salvo por que la ves en el slack o en correos electrónicos pero aún sabiendo su categoría profesional y departamento desconociendo qué misión tiene en la empresa, un sistema tecnológico mucho más grande con más partes legacy, con más dependencias, procesos ya establecidos difíciles de cambiar y cuando antes podías decidir o cambiar cualquier cosa ahora ya no la decides tú, donde antes eras el más importante en tu área ahora eres uno más si no es que eres menos porque conoces poco y se imponen jerarquías en la nueva estructura organizativa. Cambiar cualquier cosa que tenga gran impacto se convierte en muy difícil.

    Las circunstancias diferentes que no encajan con lo que esperan algunas personas profesionalmente unido a la oportunidad hace que cuando hasta el momento las bajas eran la excepción empiecen a ser un goteo constante cuando no un torrente. Y con el paso del tiempo unas arrastran otras, el conozco a que es incentivado en las propias empresas con compensaciones por referidos, por mucho esfuerzo o dedicación algunas cosas dan igual si tienes un buen contacto. ¿Las condiciones económicas hacen que por sí solas sean suficientes para retener a las personas? No a largo plazo, hay muchas más cosas que se valoran y no todas las personas valoran las mismas cosas en el mismo grado. Puedes tener un grupo de personas dedicado a crear actividades que hagan la estancia en la empresa atractiva para mantener a personas o atraer nuevas pero a pesar de todo si en lo importante que es la actividad laboral deja que desear es cuestión de tiempo que las personas decidan buscar oportunidades en otros sitios.

    Puede que incluso llegue otra multinacional interesada en comprar la sección del negocio que en la que estabas, por varios miles de millones de euros y cuando digo varios miles de millones no es por decir una cantidad grande sino que es de ese volumen la transacción, pero luego la fusión tener que esperar a la revisión de un regulador de competencia que impone condiciones en la adquisición alargando la transacción, para agravar la situación llegar una pandemia que afecta especialmente al sector. En esa estamos ahora.

    El salario, la experiencia u oportunidades que ofrece una multinacional son aspectos positivos, en los aspectos negativos están en que llegada la necesidad puede darse el caso de un ERE si la evolución de la empresa no cumple los objetivos previstos, puedes verlo venir pero existe la posibilidad es que de un día para otro puedas estar en un proceso de despido colectivo. Mucha más rotación que en la startup, ya sea por bajas voluntarias o despidos en algunos casos fulminantes también en algunos mandos importantes, en la startup aunque pocos tampoco estuvo exenta de alguno.

    Quizá no en las mismas condiciones pero en esta época oportunidades no faltan que permitan encontrar otro empleo en no mucho tiempo, también decir que hay mucho trabajo de baja calidad, por lo que siempre conviene tener cierta garantía económica más en el caso de tener deudas de cuantías como una hipoteca, responsabilidades familiares o gastos recurrentes importantes como un alquiler.

    Conclusión, ¿y el futuro?

    El trabajo técnico en la informática puede parecer que sea tratar con ordenadores y sistemas informáticos, la realidad es que la mayor parte es tratar con personas. Durante estos 20 años he coincidido con muchas personas, aunque las ha habido por fortuna las malas experiencias han sido la excepción de todos modos al menos en estos casos por mi parte han sido lo suficientes para mantener una relación profesional, también ha habido algunas personas admirables.

    20 años laborales y 10 años en una misma empresa dan para mucho, cosas buenas, malas, algunas para olvidar, otras para esperar que no se repitan pero sobre todo para tener más claro lo que busco profesionalmente. No se que va a ser de los 30 restantes porque no se que va a ser ni del siguiente en el que además hay una pandemia mundial. Lo que sí sé es que si me voy de una empresa no voy a considerar los maravillosos compañeros que he tenido, el montón de cosas que he aprendido o lo a gusto que he estado entre las típicas cosas de tópicos que se comentan en los mensajes de despedida… si no porque lo que busco profesionalmente no lo tengo unido a que 10 años son muchos años, nada nuevo. Y ahora tengo más claro algunas cosas que me gustaría tener, lo difícil es encontrar al mismo tiempo juntas las más importantes.

    Si algo de lo que estoy contento de estos 10 años es a estar en lo bueno y en lo malo, no abandonar fácil aunque no se le dé valor en muchos casos. Algunos motivos encuentro para ello… por las condiciones económicas seguro que alguno de mis hermanos me dirían que sería estúpido si lo hiciese… Después del salario en mi caso de lo que más valoro es el aspecto técnico y lo que tengo la mayor parte del tiempo dista bastante de lo que deseo. Lo que no estoy contento es a no defender más mi opinión con argumentos por no confrontar o por no saber defendela, en algunos casos mi opinión o sesgos no será mejor pero en otros puede que sí y el tiempo también muestra de flaquezas de la opinión y sesgos de otros. También de no haber aportado todo lo que podría, aun así no he dejado de seguir aprendiendo cosas nuevas o profundizando según mis intereses, quizá algún día surja la oportunidad.

    10 años en la misma empresa, no se ven tantos de estos por el sector de las tecnologías. ¿Cambiaría estos 10 últimos años?, no. ¿Me gustaría que hubiesen sido mejores?, sí. ¿El siguiente será mejor?, ya veremos.

    » Leer más, comentarios, etc...

    Arragonán

    Los principios DevOps: The Three Ways

    septiembre 01, 2020 12:00

    Llevamos ya unos años en los que se habla de DevOps, un término que originalmente se acuñó para referirse a transformar el modo en el que se entrega software en las organizaciones basándose en ideas de Lean Manufacturing.

    Pero en los últimos tiempos, al explotar su popularidad, parece haberse asumido por gran parte del sector como la forma de llamar a los equipos o ingenieros de plataforma, o en otros sitios simplemente como la forma moderna de llamar a los administradores de sistemas; ya que se asocia principal, y a veces únicamente, con despliegues automatizados o con montar infraestructura como código.

    Personalmente, es algo que de vez en cuando he hablado con algunos compañeros de profesión, y aunque no es algo que me quite el sueño, sí me apena un poco el hecho de que con ello se pierda la parte más importante del mensaje: romper silos organizativos para centrarse en entregar valor.


    Los Three Ways, que son mencionados en libros como The Phoenix Project o en The DevOps Handbook, vienen a ser los principios de los que derivan los comportamientos y patrones que nos ayudarán a romper esos silos y a poner foco en la entrega de valor:

    • The First Way: aumentar el flujo de entrega al cliente previniendo defectos.

    • The Second Way: amplificar los ciclos de feedback para prevenir problemas y mejorar la calidad en origen.

    • The Third Way: crear y fomentar una cultura de experimentación y aprendizaje continuos.

    Representación de Los Three Ways de Devops

    The First Way: aumentar el flujo de entrega

    Hasta que algo no se está usando en producción por los usuarios y/o clientes no se está creando valor, así que deberíamos buscar desplegar de forma temprana y frecuente en producción incrementando la fiabilidad y calidad de lo entregado.

    Sus principios son:

    • Hacer el trabajo visible. Típicamente con algún tipo de tablero (tipo kanban, sprint backlog…) donde tener el inventario de trabajo a realizar y su flujo entre “work centers”, permitiendo así detectar cuellos de botella entre ellos.
    • Limitar el WIP. Básicamente tener más foco para acabar antes y pasar el trabajo al siguiente “work center”.
    • Reducir el tamaño de de los paquetes de trabajo: Entregar menos funcionalidades pero con mayor frecuencia.
    • Reducir el número de traspasos: Reducir pasos donde se encole el trabajo y que alargue el tiempo de entrega.
    • Identificar y resolver continuamente los “constraints”: Para reducir tiempos de entrega necesitamos estar continuamente identificando el “constraint” del sistema y mejorar su capacidad de trabajo.

      In any value stream, there is always a direction of flow, and there is always one and only one constraint; any improvement not made at that constraint is an illusion. (Eliyahu M. Goldratt)

    • Eliminar las dificultades y desperdicios del flujo de valor: Cualquier cosa que cause retrasos de cara a la entrega al cliente o actividades que puedan evitarse sin afectar al resultado. En Implementing Lean Software Development categorizan los desperdicios en: Trabajo parcialmente hecho, procesos extra, funcionalidades extra, cambios de tareas, esperas, motion o esfuerzo de transporte/comunicación entre “work centers”, defectos, trabajo manual o no estándar y heroicidades.

    The Second Way: amplificar los ciclos de feedback

    Una vez entregado, necesitamos feedback rápido y constante, la meta es conseguir un sistema de trabajo cada vez más seguro y resiliente, detectando y resolviendo los problemas cuando son más pequeños y más fáciles de resolver. Pero los fallos son inevitables en sistemas complejos, cuando ocurren se deben asumir como oportunidades de aprendizaje frente a buscar o castigar culpables.

    Sus principios son:

    • Ver los problemas en cuanto ocurren: Tener telemetría que muestre cómo se comportan los componentes del sistema en producción para detectar cuando no lo hacen como se espera.
    • Resolver los problemas para construir nuevo conocimiento: Una vez que un problema ocurre debemos resolverlo como un enjambre, movilizando a quienes haga falta para arreglarlo. Llegando a parar todo lo necesario del mismo modo que en el mundo de manufactura se utiliza una cuerda andon.
    • Empujar la calidad cerca del origen: Debemos encontrar y arreglar los problemas en cada área de control, las responsabilidades y toma de decisiones deben ocurrir donde se hace el trabajo.
    • Facilitar la optimización de los “work centers” posteriores: Diseñando para facilidad operacional, donde los atributos de calidad (rendimiento, configurabilidad, testabilidad…) tienen la misma importancia que las funcionalidades.

    The Third Way: experimentación y aprendizaje continuos

    El objetivo es crear un entorno de alta confianza, reforzando la idea de que estamos aprendiendo de por vida. Aplicando una aproximación científica, tanto para el desarrollo de producto como mejora de proceso, aprendiendo de aciertos y fallos. Además, transformando los aprendizajes locales en mejoras globales para toda la organización.

    Sus principios son:

    • Facilitar el aprendizaje organizacional y una cultura de seguridad psicológica: Frente a buscar el error humano, buscar modos en la que se pueda rediseñar el sistema para que no vuelva a ocurrir este accidente.

      By removing blame, you remove fear; by removing fear, you enable honesty; honesty enables prevention. (Bethany Macri)

    • Institucionalizar la mejora del trabajo diario: Reservar tiempo explícito para pagar deuda técnica, arreglar defectos y áreas problemáticas.
    • Transformar descubrimientos locales en mejoras globales: Tratar de convertir la experiencia que obtienen equipos o individuos en conocimiento explícito para la organización para que sea fácil de utilizar (librerías, configuraciones, código…).
    • Inyectar patrones de resiliencia en el trabajo diario: Mejorando las operaciones diarias introduciendo tensión de forma intencionada buscando mejorar (chaos engineering, organizar game days).
    • Los líderes refuerzan la cultura de aprendizaje: Establecer objetivos que enmarquen los experimentos haciendo explícito el problema a resolver, la hipótesis, el método de testearla, la interpretación de los resultados y usar los aprendizajes en las siguientes iteraciones.

    Junto la aplicación de las prácticas técnicas (pipelines de despliegue, testing automático, añadir telemetría y alertado, chaos engineering…) y mejorar en ellas; estos principios DevOps nos ayudarán a tener organizaciones donde al entregar valor de negocio antes, se hagan más predictibles y se reduzcan riesgos.

    Lo que, en consecuencia, ayudará a reducir estrés en los equipos de tecnología y a que esas organizaciones sean lugares más habitables.

    » Leer más, comentarios, etc...

    Coding Potions

    Un vistazo a los mixins de Vue

    agosto 31, 2020 12:00

    Introducción

    Uno de los problemas que te puedes plantear al desarrollar aplicaciones web con Vue es cuando tienes dos componentes que son prácticamente iguales (funcionalidad parecida) pero no puedes fusionarlos en uno solo con props porque resultaría demasiado complejo.

    Es decir, muchas veces tienes un determinado método, propiedad computada o lo que sea que tienes que repetir en muchos componentes porque no puedes crear un solo componente genérico que te sirva para todoas los casos.

    Los mixins sirven para solventar esta situación. Se trata de una funcionalidad de Vue que permite reutilizar cualquier cosa de los componentes para que no tengas que duplicar funcionalidad o no acabes con demasiados componente con demasiados props.

    Pero no todo es bonito. Una pega de los mixins es que tienes que tener mucho cuidado con ellos, puedes perder fácilmente el control de lo que se inserta en el componente al usar el mixin.

    Imagina que estás trabajando en una web muy compleja hecha con Vue y estás con varios compañeros, si no tienes cuidado puede que te importes un mixin y se inserte dentro del componente cierta lógica que no quieres. Siempre mira lo que contiene el mixin para evitar efectos inexperados.

    Cómo se crea un mixin

    Para los mixins, lo que suelo hacer es crear una carpeta llamada mixins dentro de la carpeta src del proyecto.

    Un mixin simple sería algo tal que así:

    // src/mixins/clickMixin.js
    
    export default {
      methods: {
        clickHandler(value) {
          console.logvalue);
        }
      }
    };
    

    Para crear el mixin lo único que tienes que hacer es un export default de un objeto. Dentro de este objeto puedes escribir el mismo código que pondrías dentro de la lógica del componente.

    Otro ejemplo de mixin:

    // src/mixins/anotherMixin.js
    
    export default {
      data: () => ({
        myVariable: 10
      }),
      created() {
        console.log(myVariable++);
      }
    };
    

    Como ves puedes incluso user los hooks de Vue que ya conoces, puedes declarar variables, crear computadas, watchers, en definitiva, todo lo que iría dentro de los componentes (dentro del export default).

    Cómo se usan los mixins

    Una vez creados los mixins, usarlos es muy sencillo. Dentro del componente en el que quieras esa lógica del mixin lo primero que tienes que hacer es importar el mixin y declararlo dentro de la sección mixins del componente

    <script>
    import clickMixin from "@/mixins/clickMixin";
    
    export default {
     name: 'Test',
     mixins: [clickMixin]
    }
    </script>
    

    Y listo, no tiene más. El contenido del mixin se “copiará” dentro de este componente. Eso quiere decir que en este componente no tienes que declarar el método clickHandler porque ya viene desde el mixin.

    Esa es la pega de los mixins, sobre todo si los usas desde una librería o creados por otra persona, tienes que saber muy bien el contenido del mixin para que no haya conflicto con las cosas que tienes declaradas en el componente.

    Lo bueno es que Vue lo que primero aplica es el mixin y a continuación aplica el propio componente, esto quiere decir que un método con el mismo nombre en el mixin y en el componente que usa ese mixin el que se usará finalmente es el del componente.

    Mixins globales

    Otra cosa que puedes hacer con los mixins es crearlos para que se autoimporten en todos los componentes. Esto rara vez lo vas a necesitar (yo todavía no lo he necesitado nunca) pero por si lo necesitas aquí te explico como crearlos de forma global.

    Para hacerlo lo único que tienes que hacer es declararlos dentro del archivo main.js, eso es todo.

    // /src/main.js
    
    Vue.mixin({
      created() {
        console.log("hello world!");
      }
    });
    

    Si crear mixins de forma local (los que hemos visto antes) ya era un poco peligroso porque podías insertar en el componente código de forma descontrolada, en los componetes globales es aún más peligroso porque se va a aplicar en todos los componentes.

    Si en un mixin global tienes algo que falla, van a fallar todos los componentes de tu aplicación web, ten mucho cuidado.

    Conclusiones

    Yo personalmente los mixins no los uso demasiado. Intento crear componentes reutilizables y solo los uso cuando se complica demasiado el código.

    Si vas a usarlos te recomiendo que intentes crearlos de forma local a los componentes (teniendolos que importar) y que solo uses los mixins globales en casos extremos en los que no tengas más remedio que usarlos.

    » Leer más, comentarios, etc...

    Picando Código

    The Eternal Castle [REMASTERED] – Nintendo Switch

    agosto 20, 2020 10:30

    The Eternal Castle [REMASTERED]

    The Eternal Castle [REMASTERED] es un juego con un estilo visual bastante particular. Los gráficos se limitan a 2-bit emulando las viejas tarjetas CGA de IBM con hasta 4 colores a la vez en pantalla. Esta limitación técnica hace que los gráficos sean espectaculares, logrando resultados súper detallados que generan un ambiente único. El juego y sus escenarios transmiten mucho, algunas partes asustan más que otras y nuestro personaje va a pasar por desesperanza, opresión y miedo, y todo esto con muy pocos píxeles. Hay varias animaciones rotoscópicas que se ven increíbles. Empecé a jugarlo en modo portátil y se ve excelente. Pero ver esos gráficos retro pixelados en la pantalla grande de la TV está genial.

    La música acompaña muy bien, con temas retro synthwave que capturan la época de los 80’s. La banda sonora merece una escuchada. En momentos que tiene que ser tenebrosa lo es, y cuando tiene que ser más dinámica también. De a ratos nos acompaña únicamente el sonido ambiente que también ayuda a mantenernos inmersos en el mundo surreal al que nos transporta esta aventura.

    Es un juego de plataformas y acción, donde tenemos que defendernos a puños y patadas o con armas que vamos adquiriendo. En cada escenario nos vamos a encontrar con puzzles, trampas y secretos que premian la exploración. Los niveles se desarrollan de manera semi-procedural, por lo que podemos encontrarnos con cosas distintas al volver a jugarlos, hay más de 20 niveles en 5 mundos distintos. Hay varios enemigos distintos en el camino, pero cada mundo tiene su “jefe final”. Al principio los jefes me agarraron de sorpresa y perdí varias veces intentando vencerlos, pero con la práctica le encontramos la vuelta. Creo que perder seguido es parte de la experiencia, hay trampas que que no vamos a descubrir hasta haberlas sufrido.

    El control me hizo acordar al Prince of Persia original, y en general tiene un aire también a Flashback. La combinación retro con las capacidades de hardware moderno lo hacen dinámico y con una forma bastante particular de jugarlo. Si jugaron al Prince Of Persia original seguramente puedan imaginarse a qué me refiero con el control, emula esa pequeña demora que tenían estos juegos que hacían tanto hincapié en la animación fluida. Así que a la hora de calcular un salto, tenemos que tener en cuenta ese tiempo que pasa entre que presionamos el botón y el personaje realiza la acción. Durante los combates también lo vamos a notar. Cuesta un poco acostumbrarse, pero es parte de la gracia. Y una vez que tenemos dominada la acción, se siente bastante satisfactorio poder saltar entre plataformas o esquivar trampas con este control tan particular.

    La trama se desarrolla en una realidad cientos de años en el futuro, durante una era post-inteligencia artificial. Vamos a encontrar elementos del estilo Mad Max, así como mucha ciencia ficción. Se cuenta más a través de imágenes que de letras, pero tiene esa facilidad de meternos en la historia.

    Se puede jugar en modo cooperativo, pero todavía no he tenido la oportunidad de jugarlo con alguien más. Hay cosas por desbloquear que todavía no alcancé, pero es de esos juegos que da para jugarlos tranquilo e ir absorbiendo los niveles, la música y la ambientación general. Consigue una unión fantástica de lo viejo con lo nuevo, un título que podría haber salido en 1987 pero en el hardware moderno de hoy.

    The Eternal Castle [REMASTERED] está disponible en Nintendo Swtich en Europa y podrá ser jugado a partir de mañana. Ya está disponible en América y también para PC en Steam.

    Les recomiendo mirar el tráiler para descubrir más:

    YouTube Video

    The post The Eternal Castle [REMASTERED] - Nintendo Switch first appeared on Picando Código.

    » Leer más, comentarios, etc...

    Bitácora de Javier Gutiérrez Chamorro (Guti)

    Estadísticas de comentarios

    julio 25, 2020 05:51



    En 17.000 comentarios, Fernando sugería hacer una análisis de los comentarios, una especie de ranking mostrando los más antiguos, los que más participan, etcétera. Me pareció un ejercicio curioso, y una buena excusa para lanzar unas cuantas consultas a la base de datos de WordPress. Aquí tenéis los resultados. Comentaristas más antiguos Autor Fecha del …

    Estadísticas de comentarios Leer más »



    Artículo publicado originalmente en Bitácora de Javier Gutiérrez Chamorro (Guti)

    » Leer más, comentarios, etc...

    Arragonán

    Disponible para ayudar a equipos

    julio 19, 2020 12:00

    Ya sea desde el rol de mentor o de asesor, me encanta ayudar a equipos en todo el espectro que involucra el desarrollo de producto digital.

    Esta inquietud tardó en despertar en mí, pero ha aumentado con el paso de los años. Arrancó primero con la iniciativa de Senpai Devs mentorizando a varias personas. Después haciendo algunas formaciones e intervenciones para ayudar a startups y corporaciones junto a mis compañeros de Coding Stones. Más tarde en Inditex donde, además de ejercer como tech-lead en mis equipos, pude aconsejar a algún otro equipo más. Incluso desde unos meses dedico algo de mi tiempo libre a hacer asesorías puntuales.

    Ahora, tras mi paso por Devengo, quiero dedicar más tiempo a ayudar a equipos a crear mejor software y producto digital. De hecho, ya estoy cerrando fechas para arrancar un par de colaboraciones.

    Haciendo una sesión de mob programming con código proyectado en la pared

    ¿Ayudar a equipos? ¿Cómo?

    Lo de ayudar a equipos quizás queda algo abstracto. Principalmente las actividades que quiero hacer son mentorizar y aconsejar a equipos. Además de esto, una vez identificadas sus necesidades, preparar formaciones y talleres para que adquireran las bases de ciertas prácticas.

    Mi intención es ayudar a mejorar extremo a extremo en la creación de producto digital: en el trabajo en equipo, en las prácticas técnicas y en la gestión de producto.

    ¿En qué puedo ayudar a tu organización o equipo?

    Algunos dolores con los que puedo aportar valor son:

    • Habéis empezado a trabajar con procesos ágiles como scrum o kanban y los equipos siguen sin tener los resultados que esperabais. O tal vez estéis pensando en empezar con ello pero necesitáis ayuda para establecer las bases.
    • Tenéis problemas con la capacidad y calidad de entrega, porque en las revisiones, o incluso en producción, se encuentran excesivos bugs. Motivo por el cual queréis incorporar o mejorar en algunas prácticas técnicas. O necesitáis ayuda para identificar qué mejorar.
    • A los equipos les cuesta entregar. Se eternizan las historias de usuario en doing, o incluso quedan semanas bloqueadas.
    • Hay cierto desalineamiento, o incluso tensiones, a la hora de integrar a los diferentes roles del equipo. Típicamente cualquier permuta entre desarrolladores vs diseñadores vs product owners/managers vs administradores de sistemas vs…
    • Se ha acumulado demasiada deuda técnica, así que el legacy no os deja avanzar al ritmo esperado por el negocio.
    • No tenéis muy claro cómo cambiar la mentalidad de trabajar con enfoque a proyecto hacia enfoque a producto, tanto del propio equipo como por parte de stakeholders. Hay más preocupación y presión por cumplir con estimaciones que por lograr objetivos.
    • El negocio va como un tiro y estáis creciendo, eso implica cambiar parte de la arquitectura existente y analizar si hay que reorganizar los diferentes equipos que han ido surgiendo, incluso la forma de esos equipos.
    • En la organización se ve a los equipos de producto o tecnología como un impedimento para nuevas iniciativas y oportunidades de negocio, no como un colaborador y facilitador.

    Si identificas alguno de esos problemas en tu equipo u organización, por mi parte estaría encantado de que hablemos para ver si encontramos una forma de colaborar.

    » Leer más, comentarios, etc...

    Fixed Buffer

    ¡A descansar!

    julio 14, 2020 06:04

    Tiempo de lectura: < 1 minuto
    En la imagen se ve una caseta hecha de madera y paja

    EDITADO: Por fin he actualizado la imagen y así es como se ve la caseta 🙂

    Un año más llega el veranito y con él las vacaciones. Es momento de coger aire, descansar y recuperar fuerzas para seguir adelante. Este año debido a los problemas de movilidad por esta pandemia mundial me ha pillado el toro y repito foto :(.

    He de decir que la casa está terminada (recordemos que a eso me dediqué el verano pasado) y a la vuelta de vacaciones prometo actualizar la foto por la de la casita terminada 🙂

    Dicho esto, es hora de decir adiós hasta septiembre, momento en el que volveremos a la carga con unas ideas a las que estoy dando forma y que espero poner en marcha antes del segundo aniversario de FixedBuffer. Además de eso, ya me conocéis, no puedo parar, así que estoy preparando contenido para algunos otros blogs con los que colaboro así que estad atentos a la sección de colaboraciones 🙂

    Muchas gracias a todos los que hacéis que este proyecto siga adelante y nos vemos en septiembre

    **La entrada ¡A descansar! se publicó primero en Fixed Buffer.**

    » Leer más, comentarios, etc...

    Israel Perales

    Liberar espacio en Nexus Repository

    julio 11, 2020 01:44

    Liberar espacio en Nexus Repository

    Actualmente me encuentro trabajando(Ya no paso mucho tiempo desde que escribí el borrador) en un ambiente de integración continua que involucra Gitlab, Jenkins, SonarQube y Nexus (3), todo esto esta en un solo servidor y digamos que cada uno consume su porción de los recursos.

    Los que mas disco duro consumen, son Jenkins y Nexus, en esta ocasión voy a explicar como libere casi 40GB en una instancia que pesaba 92GB.

    Primero que nada decir que Nexus tiene una interfaz basada en Extjs, que en esta época la hace horrible a los ojos, mas aun la funcionalidad, en la cual no es posible eliminar imágenes de docker usando la multi selección, al menos por la interfaz de usuario es una tarea casi imposible.

    Después de tratar de eliminar todas esas imagenes viejas por la interfaz durante 5 minutos, recordé que Nexus tiene una API REST y me decidí a leerla y jugar con los endpoints que tiene.

    También pensé que alguien mas paso por lo mismo y googleando un poco encontré un post y un repositorio de Github en el que se tiene un utilidad de linea de comandos que me podría ayudar.

    Descargamos lo necesario siguiendo las instrucciones del repositorio de github

    wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli
    
    ./nexus-cli configure
    
    ./nexus-cli image ls
    
    ./nexus-cli image delete -keep 1 -name imagen
    

    Después de esto NO se debería ver espacio liberado, ya que Nexus solo marca los archivos como candidatos a removerse, se debe entrar a la sección de administrador y crear una tarea de compactación del blob y ejecutarla.

    Fuentes:

    » Leer más, comentarios, etc...

    Israel Perales

    Comprar una alberca.

    julio 11, 2020 01:17

    Comprar una alberca.

    Este es un post que no tiene nada que ver con tecnología, pero he visto muchas personas en grupos de Facebook que son estafadas en estas temporadas al comprar una alberca, espero esta lista pueda servirles para hacer sus compras mas seguras y darse una idea del precio en pesos mexicanos:

    Alberca

    Comprar una alberca.

    Alberca Avenli 4383 Litros
    Precio: $2,299.00

    https://www.coppel.com/alberca-avenli-4383-litros-im-5706313-0


    Bomba filtro de agua

    Comprar una alberca.

    Bomba de Filtración 530Gph 110-120V -Intex
    Precio: $955.00

    https://www.juliocepeda.com/bomba-de-filtracion-530gph-110-120v-intex.html


    Cubierta para alberca

    Comprar una alberca.

    Cubierta Para Alberca -Intex
    Precio: $399.00

    https://www.juliocepeda.com/cubierta-para-alberca-intex.html


    Kit analizador de PH

    Comprar una alberca.

    Juego Analiza Cloro Y Ph De Alberca Por Goteros Kit
    Precio: $328

    https://articulo.mercadolibre.com.mx/MLM-631159268-juego-analiza-cloro-y-ph-de-alberca-por-goteros-kit-_JM

    También se encuentra en Home Depot aun precio mas bajo, solo que no tenían disponibles.

    https://www.homedepot.com.mx/mantenimiento-de-albercas/juego-para-analizar-cloro-y-ph-850362


    Inflable salvavidas

    Comprar una alberca.

    Inflable Salvavidas Flotador Para Bebé Con Techo Andadera
    Precio: $249

    https://articulo.mercadolibre.com.mx/MLM-668198000-inflable-salvavidas-andadera-con-techo-para-bebe-intex-_JM


    Dosificador de cloro

    Comprar una alberca.

    Dosificador Flotante Para Tabletas De Cloro Humboldt- Blanco con Azul
    Precio: $95.00
    Precio con envió: $134.00

    Aun y con el envió fue mucho mas barato comprarlo en Linio que en otras tiendas, también revise directamente en el proveedor principal pero el costo del envió era mucho mayor.

    https://www.linio.com.mx/p/dosificador-flotante-para-tabletas-de-cloro-humboldt-blanco-con-azul-ykdslq


    Tabletas de cloro

    Comprar una alberca.

    TABLETAS DE CLORO 1 KG AQUA POOL
    Precio: $219

    Este articulo no lo compre en linea ya que Home Depot tiene costos muy elevados en sus envíos y me queda a 15 min de mi casa y decidí ir por el.

    https://www.homedepot.com.mx/jardin/albercas/mantenimiento-de-albercas/tableta-de-tricloro-estabilizado-3-1-kg-244192


    Acido muriatico

    Comprar una alberca.

    Alamo · Ácido muriático
    Precio: $24.00

    De este producto compre 2 litros, es necesario para bajar el PH del agua que de forma natural va subiendo.

    https://web.cornershopapp.com/store/25/search/acido muriatico/product/336915


    Conclusión

    En total fue un gasto de $4631 pesos repartidos en 6 tiendas:

    Estos son algunos de los principales articulos para una alberca desmontable pequeña, sin contar los filtros de la bomba que no he comprado por que pienso hacer uno casero.

    » Leer más, comentarios, etc...

    Meta-Info

    ¿Que es?

    Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

    rss subscripción

    Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
    planetacodigo

    planetacodigo

    Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

    Idea: Juanjo Navarro

    Diseño: Albin