Ir al contenido principal

SPA: React + Typescript + Parcel

Estaba a punto de empezar otro proyecto personal para crear una aplicación web de página única (SPA - Single Page App) en la que gestionar mi blog de viaje.

Tenía claras las tecnologías a utilizar, porque últimamente he trabajado bastante con React y Typescript y me encuentro muy cómodo con esta pareja de tecnologías. Normalmente uso Webpack como empaquetador, pero hace algún tiempo había probado Parcel y me encantó lo simple y rápido que era crear un proyecto desde cero utilizando Typescript y React.

He decidido crear un proyecto base, para poder reutilizarlo la próxima vez que quiera crear una SPA con mis tecnologías frontend favoritas, al menos hasta ahora. De esta forma, la próxima vez que quiera empezar un proyecto nuevo solamente tengo que:

git clone https://github.com/carlosvin/react-typescript-parcel-template.git

O simplemente descargar el archivo ZIP con el proyecto.

Leer antes: Parcel no está tan maduro como Webpack

Si quieres crear una aplicación React lista para producción, utiliza Webpack o mejor aún utiliza create-react-app que viene con todo lo que necesitas para crear una PWA con React y Typescript, aquí puedes encontrar un ejemplo de una applicación que estoy desarrollando: https://github.com/carlosvin/budget-tracker.

Parcel esta en desarrollo y para mí todavía hay problemas por los que no lo considero para proyectos serios. Una de las razones es que el soporte para Typescript deja bastante que desear, por ejemplo mira este problema en github #1378.

Creo que sigue siendo un proyecto prometedor, por la simplicidad y rapided que trae al mundo de los empaquetadores para Javascript, pero de momento no está listo para producción, al menos para aplicaciones desarrolladas con React y Typescript.

Volveré a probarlo cuando Parcel 2 esté listo: Estado actual de Parcel 2.

Inicio Rápido

Servidor de Desarrollo

git clone https://github.com/carlosvin/react-typescript-parcel-template.git
cd react-typescript-parcel-template
yarn install
yarn start

Leer más…

Custom Maven Plugin: Override default build lifecycle

I explained in previous article Example how to create custom Maven Plugin which overrides site lifecycle.

I have created another example to demonstrate how to override default Maven build lifecycle. Default build lifecycle is used to construct your software project, for example, it is executed when you run mvn install in jar type project.

You can find source code example at https://github.com/carlosvin/lifecycle-maven-plugin.

Hint

I've also created an archetype so you can easily create and play with the example.

Create example project just by running following command:

mvn archetype:generate -DarchetypeGroupId=com.github.carlosvin.archetype -DartifactId=lifecycle-maven-plugin-archetype -DarchetypeVersion=0.6

Example how to create custom Maven Plugin

Maven has lots of plugins to assist you in project construction, testing, packaging and deployment. For example if you want to compile C++ code instead of Java, you can use native-maven-plugin . But what if you need something more specific? Then you can create a custom Maven plugin.

I will explain how to create a simple custom maven plugin to generate static blog site from Markdown files. I know we can already do that with maven-site-plugin since version 3.3, I will just use it for learning purposes.

You can find whole source code example at https://github.com/carlosvin/blog-maven-plugin.

Leer más…

Sistema de Ficheros en C++17

Contenedores Docker multi-dominio

Caso de Uso

Tenemos varias aplicaciones servidoras a la vez en un mismo entorno de desarrollo, cada una encapsulada en un contenedor, llamémosles de ahora en adelante "Contenedor A" y "Contenedor B".

Utilizando docker estas aplicaciones tienen la misma dirección IP en nuestra máquina, una forma de distinguirlas es cambiando el puerto que exponen.

/docker-multidomain/ip.thumbnail.png

Aplicaciones exponiendo la misma dirección IP utilizando diferentes puertos para diferenciar las aplicaciones

Pero esto es un poco confuso, ¿8080 sigfica que accedemos a las "aplicación A" y 8081 significa "aplicación B"?

Sería mucho más sencillo de recordar algo así:

/docker-multidomain/domain.thumbnail.png

Diferenciando aplicaciones por nombre de dominio

Obtener este valor semántico extra es más sencillo de lo que parece.

Leer más…

Comparación frameworks REST para RUST

Estoy empezando a hacer mis primeros pinitos con Rust, es un lenguage de programación que promete ser tan rápido como C/C++, pero más seguro en cuanto a la gestión de memoria ser refiere. Básicamente, no permite al programador hacer "cosas malas" con la memoria como: olvidarse de liberar la memoria que no se va a utilizar o liberar memoria que no es tuya. En estos casos, Rust simplemente no compilará.

Para aprender he pensado en hacer algún pequeño proyecto, tengo algunas ideas, pero todas pasan por ofrecer una API REST, así que me he puesto a buscar frameworks que me faciliten esta tarea y me he llevado una grata sorpresa al encontrar una muy buena comparativa con el estado de los frameworks REST para Rust, a continuación os dejo el enlace:

https://github.com/flosse/rust-web-framework-comparison

Convertir archivos en formato Windows a formato Unix

Si alguna vez has programado desde un entorno Windows para entornos Unix, seguramente habrás tenido este problema: Los archivos que instalas en tu entorno Unix tienen formato Windows.

Hay un forma bastante sencilla de convertir todos los archivos que tienes en un directorio de formato Windows a Unix.

find . -type f -print0 | xargs -0 dos2unix

Lo he sacado, como no, de https://stackoverflow.com/questions/11929461/how-can-i-run-dos2unix-on-an-entire-directory

Creando REST URLs

Las primeras veces que me puse a diseñar una API REST cometí unos cuantos errores, por supuesto. A continuación os voy a contar algunos de los errores que cometí y lo que he entendido hasta hoy sobre la construcción de URLs REST con ejemplos.

Leer más…

Mantenimiento de Software

Hace unos días en el trabajo tuve que rellenar un documento en el que debía indicar el tipo de mantenimiento que debía hacer y sólo tenía dos opciones: correctivo y adaptativo. Esto me extrañó, porque el cambio que yo quería hacer no terminaba de encajar en ninguno de los dos tipos.

Haciendo memoria sobre lo que había dado en mi primera asignatura de Ingeniería del Software, conseguí recordar tres tipos, pero me parecía que me faltaba un tipo.

Hoy por casualidad he encontrado mis apuntes de Ingeniería del Software y estos son los tipos de mantenimiento ordenados de más a menos porcentaje de tiempo dedicado.

Leer más…