Buscando artículos sobre "Sin categoría"
23-abril-2022
admin

Uso de Profiles en Spring-boot

Distintas formas de manejar de los profiles con spring-boot para personalizar las ejecuciones:

1 – Establecer el profile en la property spring.profiles.active. Esto lo que hace es que si por ejemplo le establecemos el profile prof1 la aplicación irá a buscar la configuración al application-prof1.properties.

//file: application.properties
spring.profiles.active = prof1

2 – Podemos en ejecución decirle a una clase que utilice un profile distinto al marcado. Utilizando para ello la anotación @ActiveProfiles

@SpringBootTest
@ActiveProfiles("prof2")
class Example2ProfileTest {
...
}

3 – Puedes definir beans en función de un profile utilizando la anotacion @Profile en la clase que vas a definirlos.
A continuación, un ejemplo de como se genera un bean en función de si el profile es prof3 u otro con un test de prueba.

@Profile("prof3")
@Configuration
public class Prof3Configuration {
	@Bean
	public String helloWorld() {
		return "Hello World prof3";
	}
}

@SpringBootTest
@ActiveProfiles("prof3")
class Example3ProfileTest {
	@Resource(name = "helloWorld")
	private String helloWorld;
	@Test
	void dummyTest() {
		Assertions.assertEquals(helloWorld, "Hello World prof3");
	}
}
@Profile("!prof3")
@Configuration
public class NotProf3Configuration {
	@Bean
	public String helloWorld() {
		return "Hello World other not prof3";
	}
}

@SpringBootTest
@ActiveProfiles("other")
class ExampleNot3ProfileTest {
	@Autowired
	private String helloWorld;
	@Test
	void dummyTest() {
		Assertions.assertEquals(helloWorld, "Hello World other not prof3");
	}
}

4 – Se puede utilizar la property spring.profile.include para incluir profiles adicionales a la ejecución:

//application.properties
spring.profiles.include=prof4a,prof4b

//application-prof4a.properties
custom.hello.world.4a=Hello World prof4a
custom.hello.world.4b=x

//application-prof4b.properties
custom.hello.world.4b=Hello World prof4b
@SpringBootTest
class Example4ProfileTest {
	@Value("${custom.hello.world.4a}")
	private String customHelloWorld4a;
	@Value("${custom.hello.world.4b}")
	private String customHelloWorld4b;
	@Test
	void dummyTest() {
		Assertions.assertEquals(customHelloWorld4a, "Hello World prof4a");
		Assertions.assertEquals(customHelloWorld4b, "Hello World prof4b");
	}
}

5 – Uso de profiles de maven junto con los de Spring-Boot


	
		
			prof1
	        
	            true
	        
			
				prof1
			
		
		
			prof5
			
				prof5
			
		
	



	    
	        
	            src/main/resources
	            true
	        
	    
...

//application.properties
spring.profiles.active=@spring.profiles.active@
@SpringBootTest
class Example5ProfileTest {

	@Value("${custom.hello.world}")
	private String customHelloWorld;
	
	@Value("${spring.profiles.active}")
	private String profileActive;
	
	 @BeforeEach
	 public void beforeMethod() {
		 assumeTrue( profileActive.equals("prof5"));
	 }
	 
	@Test
	void dummyTest() {
		Assertions.assertEquals(customHelloWorld, "Hello World prof5");
	}

}

Al contruir con maven podemos indicar un profile definido en el pom.xml o bien no poner ninguno y que coje el indicado como default «prof1»

mvn clean test -Pprof5

Ejemplos

3-abril-2022
admin

Gestión de múltiples versiones de pyton en Ubuntu

– Paso previo, añadir software-properties-common y repositorio.

sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa

– Instalación de las versiones de python: 3.10 y 2.7.

sudo apt install python3.10
python3.10 --version

sudo apt install python2.7
python3.7 --version

– Configuración de ubuntu para facilitar el cambio de una version a otra.

//Creas enlaces simbolicos con update-alternatives
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2

//Menu para seleccionar la version elegida
sudo update-alternatives --config python

//comprobar la versión activa
python --version

https://www.python.org/downloads/

20-marzo-2022
admin

Url dinámicas con react

Podemos parametrizar las urls en React. Esto nos va a permitir tener url dinámicas en función a unos parametros. Para ver su funcionamiento se muestra un ejemplo:

1 – Definición de parámetros en la url
Dado un route, podemos indicar los parámetros como en el ejemplo :category y :type





Fuente

2 – Utilización de esos parámetros en el componente invocado
La forma de recoger luego esos párametros seria con useParams.

import { useParams } from "react-router-dom"
...
const { category } = useParams()
...

Fuente

12-marzo-2022
admin

Hooks de React: useState y useEffect

Para poder utilizar estos hooks lo primero es importarlos.

import React, { useState, useEffect } from 'react';

– useState: se trata de una función que crea una variable donde se puede almacenar el estado del componente. Acepta un valor inicial para esa variable y devuelve un array con dos elementos, el valor de la variable y la función para modificarla.

const [isLoading, setIsLoading] = useState(false);

– useEffect: se usa para la inicialización o modificación de variables, llamadas a APIs, etc. La llamada a useEffect acepta una función como argumento que se ejecuta por defecto cuando el componente se renderiza por primera vez, y después cada vez que el componente se actualice o cuando se modifique alguno de los argumentos pasados como parámetros (en el ejemplo category y type).

  useEffect(() => {
    const fetchDataTxt = async () => {
      setIsLoading(true);
      try {
        const result = await axios("http://" + window.location.host + "/" + category + "/" + type + "/description.txt");
        setData(result.data);
      }catch(err){
        console.log("error http://" + window.location.host + "/" + category + "/" + type + "/description.txt");
      }
      setIsLoading(false);
    };
    fetchDataTxt();
  }, [category, type]);

Ejemplos

6-marzo-2022
admin

React tips and tricks

– React Developer Tools: Herramienta para depurar el código. Es un plugin que se instala en el navegador: Chrome, Firefox.


– Simple React Snippets: Plugin para el VSCode que te facilita mucho el desarrollo.


– Fragmentos: Es muy común que un componente devuelva múltiples elementos. La forma más cómoda de hacerlo es con los tag <> </>

class Columns extends React.Component {
  render() {
    return (
      <>        
        <td>Hello</td>
        <td>World</td>
      </>
          );
  }
}

– React Bootstrap: Framework de bootstrap adaptado a React. https://react-bootstrap.github.io/

npm install react-bootstrap bootstrap@5.1.3

– Axios: Axios es un cliente HTTP ligero basado en el servicio $http que se puede utilizar con react. Documentación 1 Documentación 2

npm install axios
19-febrero-2022
admin

Uso de dangerouslySetInnerHTML en React

Esta función te permite incrustar html directamente con React. Se utiliza en lugar de innerHTML.

const App = () => {
  const data = 'lorem ipsum';
  return (
dangerouslysetinnerhtml={{__html: data}}
  );
}
export default App;

Fuente

29-enero-2022
admin

Git Actions de GitHub (Parte 4)

Continuamos con algún ejemplo de GitHub Action

workflow.yml: se compila un proyecto que tiene como dependencia otro proyecto perteneciente a otro repositorio (además, se le indica que utilice una rama concreta).

name: Compile with other repo dependency
//Evento que desencadenará el workflow
on: [push]
//Se definen unas variables de entorno para acceder
//al repositorio donde esta la dependencia que necesitamos.
env:
  //nombre del repositorio
  DEPENDENCY_REPOSITORY: "roberto-pf/Example-Git-Actions"
  //directorio en el que vamos a trabajar
  DEPENDENCY_PATH: "Example-Git-Actions"
  //rama del repositorio
  DEPENDENCY_REF: "example-2"
jobs:
  compile-mvn:
      runs-on: ubuntu-latest
      steps:
        //Tarea que hace un checkout del repositorio
        - uses: actions/checkout@v2          
        //Tarea que instalar java 11
        - name: Set up JDK 1.11
          uses: actions/setup-java@v1
          with:
            java-version: 1.11
        //Tarea que hace un checkout del repositorio con la dependencia necesaria
        - name: Checkout cross repo
          uses: actions/checkout@v2
          with:
            repository:  ${{env.DEPENDENCY_REPOSITORY}}
            path:  ${{env.DEPENDENCY_PATH}}
            ref:  ${{env.DEPENDENCY_REF}}             
        //Instalamos en el directorio .m2 esa dependencia
        - name: Build with Maven repo roberto-pf/Example-Git-Actions project example2-gitactions-model
          working-directory: ./Example-Git-Actions/example2-gitactions-model
          run: |
            mvn -B install --file pom.xml
        //Ya podemos construir el proyecto
        - name: Build with Maven repo roberto-pf/Example-Git-Actions-II project example2-gitactions
          run: mvn -B package --file example2-gitactions/pom.xml

Ejemplo Git action compile with other repo dependency

Nota: Repositorio Github

25-diciembre-2021
admin

Git Actions de GitHub (Parte 1)

Las GitHub Actions te permiten automatizar tareas en tu proyecto: despliegues, ejecución de test,… Se dispone de múltiples acciones en el Marketplace de GitHub que se pueden utilizar. Si bien, también se puede desarrollar acciones propias.

Para crearlas es tan sencillo como crear el directorio .github/workflows/ en tu repositorio y dentro de dicho directorio se colocarían los ficheros yml que contienen las actions.

Para probar su funcionamiento me he creado un proyecto sencillo en GitHub y le he añadido las siguientes actions:

1 – echo example workflow.yml: Ejecuta el comando echo

//Nombre del workflow
name: Execute echo command
//Evento que desencadenará el workflow
on: [push]
//lista de trabajos a realizar
jobs:
 //Job a ejecutar
 echo:
   //Máquina en la que se va a ejecutar el job 
   runs-on: ubuntu-latest
   //Lista de steps/tareas a realizar dentro del job
   steps:
     //Tarea a ejecutar. Tiene un name con la descripción y un run con el comando a ejecutar.
     - name: test echo
       run: echo "Testing echo"

Ejemplo Git Action 1

Ejemplo Git Action 1

2 – mvn example workflow.yml: Ejecuta un mvn package

//Nombre del workflow
name: Build and test of Java Project
//Evento que desencadenará el workflow
on: [push]
//Configuración por defecto.
defaults:
 run:
  //Se indica el directorio desde donde se ejecutarán los jobs.
  working-directory: example1-gitactions
//lista de trabajos a realizar
jobs:
 //Job a ejecutar
 build:
   //Máquina en la que se va a ejecutar el job 
   runs-on: ubuntu-latest
   //Lista de steps/tareas a realizar dentro del job
   steps:
     //Tarea que hace un checkout del repositorio
     - uses: actions/checkout@v2
     //Tarea que instala en la máquina java 11
     - name: Set up JDK 1.11
       uses: actions/setup-java@v1
       with:
         java-version: 1.11
     //tarea que ejecuta un mvn package
     - name: Build with Maven
       run: mvn -B package --file pom.xml

Ejemplo Git Action 2

Nota: Repositorio Github

6-diciembre-2021
admin

VmWare: tips and tricks

He migrado unas maquinas virtuales VmWare que tenía con Windows XP a Windows 7. Para ello, he creado las nuevas máquinas con windows 7 y luego les he añadido los discos duros de las de XP para de forma amigable luego ir pasando lo que me interesa nada mas antes de borrer dichos discos. También, me he encontrado una serie de errores.

Añadir disco duro existente

1 – Se puede hacer desde la opción de Editar configuración. Desde ahí en la pestaña Hardware virtual, se hace click en el botón Agregar nuevo dispositivo.

2 – Seleccionar Disco duro existente en el menú desplegable. Y se abre un cuadro de diálogo para seleccionar un archivo *.wmdk.

3 – Si estaba creado con otra versión VmWare te pedirá que le conviertas el formato.

4 – Al iniciar la máquina virtual te saldrá el nuevo disco con todo su contenido.

Error: Taking ownership of this virtual machine failed

Cuando al iniciar una máquina virtual da este error y no arranca. Se soluciona eliminando el diretorio *.lck que encontraras dentro del directorio donde está esa máquina.

Esto puede pasar si al apagar la máquina ha pasado algo y se ha quedado ahí.

Error: VMware Workstation Unrecoverable Error (vcpu-0)

En este enlace hay una recopilación de todas las posibles soluciones a este error en función de lo que esté dando problemas. Listado:
– Method 1: Updating the VMware Workstation application
– Method 2: Disabling / Uninstalling another organization’s virtualization software
– Method 3: Enabling Secure Virtual Machine (SVM) or Intel Virtualization Technology from BIOS/UEFI
– Method 4: Disabling simultaneous multithreading (SMT) in the BIOS/UEFI
– Method 5: Reverting to the default clocking frequencies
– Method 6: Modifying the VMX file

25-enero-2020
admin

Anet 8 – Problema medir temperatura.

Un error muy común en la placa de la Anet 8 es que al medir la temperatura con los thermistores desconectados nos de una temperatura alta en lugar de 0º. Con ellos quitados siempre debe darnos medida de 0º.

Este problema es porque o la resistencia o el condensador (casi seguro éste) que conforman el circuito de medida se ha estropeado. Esto es muy fácil que pase en la cama, si el cable de tensión toca en algún momento alguno de los cables del thermistor.

Para solucionarlos necesitamos conocer el esquema de como está formada la placa, que podemos descargar de aquí.

Y podemos ver que los circuitos para tomar la temperatura son los siguientes:

El circuito de la temperatura del extrusor esta formado por una resistencia (R41) de 4,7kOhms y un condesador (C47) de 15uF

El circuito de la temperatura de la cama esta formado por una resistencia de 4,7kOhms (R37) y un condesador (C43) de 4,7uF.

Los podemos localizar en la placa aquí.

Para saber que componente es el estropeado hay que medirlos quitados de la placa, de otro modo es prácticamente imposible saberlo. De todas formas, lo más normal es que la pieza a cambiar sea el condesandor (como se vió en el post anterior se corresponde con un capacitor cerámico SMD 0805).

Si nos fijamos en el circuito es fácil ver que el polo positivo del condensador va pegado a la resistencia. En el caso de la resistencia no influye su colocación.

Páginas:123»

Categorias

Linkedin