Cuando llegaron los 20 pensé que lo más loco que podía pasar es que volviera el charlestón, los cafés que servían wiski en tazas de porcelana y las metralletas de tambor. Pero no, aparte de nevadas guerras y pandemias, lo más loco está siendo la aparición en nuestras vidas de la inteligencia artificial personalizada en ChapGPT como malvado al estilo James Bond.
No voy a darle más vueltas a la ya manida diatriba sobre si es bueno o malo su uso o si ha venido para gobernarnos a todos o como fiel mayordomo facilitavidas.
Lo que quiero contaros en este artículo es cómo está cambiando la forma de hacer las cosas a mi alrededor, y esto lo estoy viendo cada día en los programadores que tengo en mi equipo. ChapGPT se ha convertido en su ayuda de cámara, su Alfred particular al que solo tienen que pedirle para que provea. Y el jodido provee bastante bien.
Se acabó eso de rebuscar en Google entre la basura de preguntas y respuestas hasta encontrar la solución a un problema puntual, ahora con un;
«Hazme una rutina en Angular para validar que una fecha introducida no sea mayor en cinco días a la fecha de hoy»
y nuestro nuevo mejor amigo nos da esto;
Aquí te presento una posible solución en Angular para validar que una fecha introducida no sea mayor en cinco días a la fecha de hoy. En este ejemplo, vamos a usar Reactive Forms de Angular para construir la forma y utilizar una función personalizada para realizar la validación.
Primero, necesitamos importar algunos módulos de Angular en el archivo del componente. Abre el archivo del componente donde deseas realizar la validación y agrega lo siguiente al principio:
javascript
import { Component } from '@angular/core';
import { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';
import { DateValidator } from './date.validator';
A continuación, necesitamos crear el formulario y agregar el campo de fecha. Agrega lo siguiente al componente:
kotlin
@Component({
selector: 'app-my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.css']
})
export class MyComponent {
myForm: FormGroup;
constructor(private fb: FormBuilder) {
this.myForm = this.fb.group({
fecha: ['', [Validators.required, DateValidator.maxDateValidator]]
});
}
get fecha(): AbstractControl {
return this.myForm.get('fecha');
}
}
En este ejemplo, hemos creado una instancia del FormGroup utilizando el FormBuilder y hemos agregado el campo ‘fecha’. También hemos agregado las validaciones de campo requerido y de fecha máxima utilizando la función personalizada «DateValidator.maxDateValidator» que crearemos a continuación.
Ahora, necesitamos crear la función personalizada para realizar la validación de fecha. Crea un nuevo archivo llamado ‘date.validator.ts’ y agrega lo siguiente:
typescript
import { AbstractControl } from '@angular/forms';
export class DateValidator {
static maxDateValidator(control: AbstractControl): {[key: string]: any} | null {
const maxDate = new Date();
maxDate.setDate(maxDate.getDate() + 5);
const inputDate = new Date(control.value);
if (inputDate > maxDate) {
return { 'maxDate': true };
}
return null;
}
}
En esta función, hemos creado una fecha máxima que es la fecha de hoy más cinco días. Luego, comparamos la fecha de entrada con la fecha máxima y devolvemos un objeto con la clave ‘maxDate’ si la fecha de entrada es mayor que la fecha máxima.
Finalmente, agregamos el código HTML para mostrar los errores de validación. Abre el archivo del componente y agrega lo siguiente:
HTML
<form [formGroup]="myForm">
<label>
Fecha:
<input type="date" formControlName="fecha">
</label>
<div *ngIf="fecha.errors && fecha.errors.maxDate">
La fecha no puede ser mayor a cinco días a partir de hoy.
</div>
</form>
En este código, hemos agregado el campo de fecha y el mensaje de error si la fecha es mayor que la fecha máxima.
Con estos pasos, hemos creado una validación de fecha en Angular que asegura que la fecha introducida no sea mayor en cinco días a la fecha de hoy.
¿Es o no un encanto? 🙂
Vamos a ponerle a prueba con Qlik Sense a ver qué pasa;
Le hago la pregunta;
Buenas, tengo una duda sobre QlikSense:
Tengo una tabla tal que;
Descripción , Valor mínimo, Valor máximo
Mal ,0 ,2
Bien ,2 ,4
Excelente ,4 ,5
y en un informe estoy obteniendo, en función de determinados filtros una media del campo Nota de otra tabla, AVG(Nota).
El cliente quiere que junto al valor de la media aparezca la descripción correspondiente, es decir
1.2 – Mal o 4.2 – Excelente.
Esto en script lo haría con IntervalMatch(), pero en el gráfico no encuentro con qué hacerlo.
Y me contesta esto;
Para agregar la descripción correspondiente a la media de Nota en función de los valores mínimo y máximo de la tabla, puedes utilizar una expresión condicional en la etiqueta del eje de la gráfica.
Para hacer esto, abre el editor de la gráfica y en la pestaña «Etiquetas de Eje» agrega la siguiente expresión en la etiqueta del eje Y (donde se muestra la media de Nota):
=aggr(if(avg(Nota) >= 0 and avg(Nota) < 2, ‘Mal’, if(avg(Nota) >= 2 and avg(Nota) < 4, ‘Bien’, ‘Excelente’)), Nota)
En esta expresión, utilizamos la función condicional if para asignar la descripción correspondiente a la media de Nota en función de los valores mínimo y máximo de la tabla. Utilizamos la función aggr para agregar la expresión al nivel de la dimensión Nota.
De esta manera, al visualizar la gráfica, la etiqueta del eje Y mostrará la media de Nota junto con la descripción correspondiente. Por ejemplo, si la media de Nota es 1.2, la etiqueta mostrará «1.2 – Mal».
En fin, que más puedo decir. Algunos considerareis que los programadores estamos extintos 😊 yo más bien diría que tenemos un gran amigo que nos puede ayudar, ya veremos como cambia esto nuestro trabajo, tal vez pronto dejemos de tirar líneas frente a un monitor y pasemos a conversar con el futuro ChapGPT sobre los aspectos funcionales de lo que queremos que haga nuestro sistema y le dejemos a él el trabajo sucio.