Albatra Dev

El printf de tus problemas

Instalar Flowbite en Tailwind v.4


			npm install flowbite
			
			


			@import 'flowbite/dist/flowbite.min.css'; /* Import Flowbite styles */
			
			


	<script src="../node_modules/flowbite/dist/flowbite.min.js"></script>		
		

Calcular la diferencia de días entre dos fechas en PHP

Pensemos un poco, tenemos dos fechas, por ejemplo la fecha de inicio de una Campaña y la fecha actual, y debemos calcular la cantidad de días transcurridos para sacar un reporte de rendimiento. Podemos convertir esas fechas en sus valores timestamp que es la cantidad de segundos transcurridos desde las cero horas del 1 de enero de 1970. Y si tenemos los valores expresados en segundos los podemos restar para obtener su diferencia en segundos y pasar este valor a días.

Como el cálculo es en días no nos interesan los valores de horas, minutos y segundos, entonces podemos simplificar las cuentas.


//calculo timestamp de las dos fechas
$timestampInicial = mktime(0,0,0,$mesInicio,$diaInicio,$yearInicio);
$timestampFinal = mktime(0,0,0,$mesFinal,$diaFinal,$yearFinal);

//obtenemos la distancia entre los dos valores temporales en unidad de segundos
$segundos_diferencia = $timestampFinal - $timestampInicial;

//convierto segundos en días
$dias_diferencia = $segundos_diferencia / (60 * 60 * 24);

print ("Días entre una fecha y otra: \t $dias_diferencia \n");		
		

Pasar una fecha en modo Universal a fecha Local en PHP

Supongamos que tenemos una fecha en formato UTC que leemos desde la base de datos o un servicio Web y queremos mostrarla como fecha local de Argentina


$t = new DateTime('2023-11-08T13:10:33.000Z');
$t->setTimezone(new DateTimeZone('America/Catamarca'));
print ($t->format('Y-m-d H:i:s T'));		
		

Contando el número de líneas de un archivo

Quiero saber el número de líneas de un archivo de texto en mi consola de Linux. Puedo utilizar el comando wc con la opción -l. El comando wc cuenta cosas de un archivo, si eres curioso usa man mc.


$ wc -l stronger.rb 
71 stronger.rb
$ wc -l < stronger.rb 
71 		
		

Ta-Te-Ti en Android

Prueba el "Ta-Te-Ti Rocket" en tu celular para jugar y dejar tus tres marcas seguidas en horizontal, vertical o diagonal. No permitas que te bloqueé el enemigo.

En este tablero de ceros y cruces minimalista puedes pasar tu tiempo definiendo estrategias donde cada desafío es único.

Ejercicio 1

Se ingresan 30 números, que representan las edades de alumnos de una escuela. Se pide:

1-) Mostrar por pantalla las edades entrene 5 y 12 años.

2-) calcular y mostrar por pantalla la suma total de las edades mayores que +18.

3-) encontrar y mostrar por pantalla la mayor de todas las edades.

Respuesta Ejercicio 1


#include <stdio.h>
#include <stdlib.h>

#define SIZE 30

int main() {
    int numero;
    int entrada[SIZE];

    printf("¡Hola! Vamos a ingresar %d numeros que representan edades\n", SIZE);
    for (int i = 0; i < SIZE; i++) {
        printf("Por favor, ingresa un número: ");
        if (scanf("%d", &numero) != 1) {
            printf("Error: Ingresa un número válido.\n");
            exit(1); // Terminar el programa con un código de error
        }
        entrada[i] = numero;
    }

    printf("Informando edades entre 5 y 12:\n");
    for (int i = 0; i < SIZE; i++) {
        if (entrada[i] >= 5 && entrada[i] <= 12) {
            printf("%d\n", entrada[i]);
        }
    }

    printf("La suma de las edades mayores a 18 es ");
    int sumador = 0;
    for (int i = 0; i < SIZE; i++) {
        if (entrada[i] > 18) {
            sumador += entrada[i];
        }
    }
    printf("%d\n", sumador);

    printf("Mayor valor de la secuencia: ");
    int mayor = entrada[0];
    for (int i = 1; i < SIZE; i++) {
        if (entrada[i] > mayor) {
            mayor = entrada[i];
        }
    }
    printf("%d\n", mayor);

    printf("¡Gracias por estar!\n");

    return 0;
}		
		

Ejercicio 2

Mostrar por pantalla los primeros 100 números comenzando desde el 0.

Respuesta Ejercicio 2


#include <stdio.h>

#define INICIA 0
#define FINALIZA 100

int main() {

    printf("Imprimiendo los numeros desde %d hasta %d\n",INICIA,FINALIZA);

    for (int i = INICIA; i < FINALIZA; i++) {
        printf("%d\t");
    }

    printf("Fin\n");

    return 0;

}		
		

Memes de programadores

Me divertí mucho con estos memes sobre lenguajes de programación y el trabajo cotidiano de un programador. Con la reacción de Héctor de León, un maestro de la Informática actual.

Blazor: diferencias usando Entity Framework

El problema de comparar Blazor Server con Razor cuando usamos DBContext de EF. Hay que echarle más código?

Web con Blazor

Robot explica cómo viajar a La Luna

En este video tenemos al divulgador de ciencia Aldo Bartra interesándose en el método del viaje a La Luna. Lo escuchamos y lo vemos con atención.

Ejercicio 3

Se ingresan 40 conjuntos de tres números que representan las longitudes de los lados de 40 triángulos. Se pide determinar y enviar por pantalla el mensaje correspondiente al tipo de triángulo, imprimir la cantidad de triángulos equiláteros.

Respuesta Ejercicio 3


#include <stdio.h>
#include <stdlib.h>

#define SIZE 40

int main() {
    int lado1;
    int lado2;
    int lado3;
    int numero;
    int contador_equilatero = 0;

    printf("¡Hola! Vamos a ingresar %d triángulos\n", SIZE);
    for (int i = 0; i < SIZE; i++) {
        printf("Por favor, ingresa el lado A: ");
        if (scanf("%d", &numero) != 1) {
            printf("Error: Ingresa un número válido.\n");
            exit(1); // Terminar el programa con un código de error
        }
        lado1 = numero;
        printf("Por favor, ingresa el lado B: ");
        if (scanf("%d", &numero) != 1) {
            printf("Error: Ingresa un número válido.\n");
            exit(1); // Terminar el programa con un código de error
        }
        lado2 = numero;
        printf("Por favor, ingresa el lado C: ");
        if (scanf("%d", &numero) != 1) {
            printf("Error: Ingresa un número válido.\n");
            exit(1); // Terminar el programa con un código de error
        }
        lado3 = numero;
        if (lado3 == lado2 && lado2 == lado1){
        	printf("Es un triángulo equilátero!\n");
        	contador_equilatero++;
        }else if (lado1 == lado2 || lado1 == lado3 || lado2 == lado3){
        	printf("Es un triángulo isósceles!\n");
        }else{
      		printf("Es un triángulo escaleno!\n");
        }
    }

    printf("Informando cantidad de triángulos equilatero: %d\n", contador_equilatero);

    printf("¡Gracias por estar!\n");

    return 0;
}		
		

Ejercicio 4

Calcule e imprima la superficie de un triángulo ingresando la base y la altura.

Respuesta Ejercicio 4


#include <stdio.h>
#include <stdlib.h>

int main() {
    int base = 0;
    int altura = 0;

    printf("¡Hola! Vamos a calcular la superficia de un triángulo\n");
    printf("Por favor, ingresa la base del triángulo: ");
    if (scanf("%d", &base) != 1) {
        printf("Error: Ingresa un número válido.\n");
        exit(1); // Terminar el programa con un código de error
    }
    printf("Por favor, ingresa la altura del triángulo: ");
    if (scanf("%d", &altura) != 1) {
        printf("Error: Ingresa un número válido.\n");
        exit(1); // Terminar el programa con un código de error
    }
    // imprimir el resultado float con un decimal
    printf("Su superficie es (base * altura) / 2: %.1f\n", (base * altura) / 2.0);

    printf("¡Gracias por estar!\n");

    return 0;
}		
		

Ejercicio 5

Se ingresa una serie de conjuntos de dos datos que representan el nombre del empleado y la remuneración respectivamente. Se pide Imprimir el nombre de los empleados cuya remuneración supera los 150.000,00, mostrar por pantalla el promedio de los sueldos ingresados.

Respuesta Ejercicio 5


#include <stdio.h>
#include <stdlib.h>

#define MAXSTRING 50
#define MAXREMUNERACION 150000

int main() {
    char nombre[MAXSTRING];
    float remuneracion = 0;
    int contador_empleados = 0;
    float suma = 0;

    printf("¡Hola! Vamos a ingresar nombres empleados con su remuneracion\n");
    printf("Una remuneracion negativa termina la entrada de datos\n");
    while(remuneracion >= 0){
        printf("Por favor, ingresa el nombre: ");
        scanf("%s", nombre); 
        printf("Por favor, ingresa la remuneración (valor negativo para salir): ");
        if (scanf("%f", &remuneracion) != 1) {
            printf("Error: Ingresa un número válido.\n");
            exit(1); // Terminar el programa con un código de error
        }
        if (remuneracion >= 0){
            suma += remuneracion;
            contador_empleados++;
        }
        if (remuneracion > MAXREMUNERACION){
            printf("%s\n",nombre);
        }
    }

    float promedio = 0;
    if (contador_empleados > 0){
        promedio = suma/contador_empleados;
    }

    printf("Informando promedio de sueldos: %.2f\n", promedio);

    printf("¡Gracias por estar!\n");

    return 0;
}		
		

Ejercicio 6

Determine la relación que existe entre dos números ingresados por teclado. Muestre por pantalla el mensaje correspondiente.

Respuesta Ejercicio 6


#include <stdio.h>
#include <stdlib.h>

int main() {
    int i = 0;
    int j = 0;

    printf("Por favor, ingresa un número: ");
    if (scanf("%d", &i) != 1) {
        printf("Error: Ingresa un número válido.\n");
        exit(1); // Terminar el programa con un código de error
    }
    printf("Por favor, ingresa otro número: ");
    if (scanf("%d", &j) != 1) {
        printf("Error: Ingresa un número válido.\n");
        exit(1); // Terminar el programa con un código de error
    }

    if (i == j)
        printf("Ambos números son iguales\n");
    else if (i > j)
        printf("%d es mayor que %d\n", i, j);
    else
        printf("%d es menor que %d\n", i, j);

    printf("¡Gracias por estar!\n");

    return 0;
}		
		

Exception en PHP

¿Cuál es la forma en que PHP maneja excepciones? Detro del bloque try se ejecutan las instrucciones que pueden arrojar una excepción y en el bloque catch podemos manejar la excepción para corregirla o por ejemplo imprimir el mensaje del error.


try {
    throw new Exception("Some error message");
} catch(Exception $e) {
    echo $e->getMessage();
}		
		

Substrings en PHP

¿Cómo obtener la primera parte de un string? Quiero extraer las primeras letras de una palabra con la función substr.

substr — Devuelve parte de una cadena


substr(string $string, int $start, int $length = ?): string		
		

$cadena = "Romantico";
$n = 4;
print substr($cadena, 0, $n); // Imprime Roma		
		

Linux: Monitoreo de directorio

¿Cómo monitorear cambios en una carpeta en linux usando bash?

Podemos escribir un script que se ejecute con el cron del sistema para detectar cambios en una carpeta, por ejemplo agregar archivos, borrarlos o modificarlos.

-Primero verificamos el estado actual de la carpeta con el comando stat -t


stat -t folder		
		

-Segundo: cuando hacemos stat -t sobre la carpeta lo podemos comparar con su estado anterior si estaba guardado:


#!/bin/bash
DIR_TO_CHECK='./IN'

OLD_STAT_FILE='./stat.info'

if [ -e $OLD_STAT_FILE ]
then
        OLD_STAT=`cat $OLD_STAT_FILE`
else
        OLD_STAT="nothing"
fi

NEW_STAT=`stat -t $DIR_TO_CHECK`

if [ "$OLD_STAT" != "$NEW_STAT" ]
then
        echo 'Directory has changed. Do something!'
        # do whatever you want to do with the directory.
        # use IFS to name files with spaces.
        IFS='
'
        for item in $(ls $DIR_TO_CHECK)
        do
	    echo $item
        done
        # update the OLD_STAT_FILE
        NEW_STAT=`stat -t $DIR_TO_CHECK`
        echo $NEW_STAT > $OLD_STAT_FILE
fi		
		

JS: Pasar una fecha en modo Universal a fecha Local

Supongamos que tenemos una fecha en formato UTC que leemos desde servicio Web y queremos mostrarla como fecha local del navegador del usuario


let date = new Date('2023-11-08T13:10:33.000Z'); 
console.log(date.toLocaleString())
console.log(date.getFullYear() + '-' + date.getMonth() + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds());		
		

Buscar datos duplicados en una columna de Excel o LibreOffice Calc

Podemos usar una fórmula para saber cuántas veces aparece cada valor en la columna, y los que tengan un valor mayor a 1 son los que tienen repetidos:


=CONTAR.SI(A:A, A2)		
		

También podemos destacar las celdas duplicadas con un estilo condicional:

Comenzamos por seleccionar el rango que contiene los datos y posteriormente vamos a Inicio > Estilos > Formato condicional > Resaltar reglas de celdas > Duplicar valores.

En LibreOffice seleccionamos el rango de la columna y vamos al menú Formato > Condicional > Condicion y elegimos el "valor de la celda está duplicado" con un estilo, por ejemplo Bueno o Malo

Hoja excel con ejemplo

Eliminar datos duplicados en una columna o tabla de LibreOffice Calc

Tenemos una columna que tiene valores con algunos duplicados. Pero queremos que queden los valores únicos.

Seleccionamos el intervalo y vamos al menú Datos > Más Filtros > Filtro Estándar.

En el cuadro de diálogo seleccionamos en el campo nombre la columna que tiene los datos, en Condición seleccionamos el signo = y en Valor elegimos No Vacio.

Opciones del Filtro para duplicados

En la parte de Opciones elegimos No Duplicados y si la tabla tiene encabezados también seteamos El intervalo contiene etiquetas de columnas.

Para copiar el resultado a otra parte de la hoja marcamos Copiar resultados y colocamos el nombre de la celda destino.

Si no copiamos los resultados, se modificará la tabla original.

Al aceptar podemos ver los resultados.

Siempre podemos volver al estado anterior con Deshacer o Ctrl-Z.

Opciones del Filtro para duplicados