Recopilación ejercicios de fechas

Crear una función cuantoFalta(fecha) a la que le pasamos una fecha y nos devuelve cuantos días faltan hasta esa fecha

Crear una función primerosDeMes(anyo) que nos devuelva una lista con las fechas de los primeros de mes de ese año (1 de enero, 1 de febrero, 1 de marzo…)

Crear una función sanFermin(anyo) que nos devuelva una lista con las fechas de la canción de San Fermín (1 de enero, 2 de febrero, 3 de marzo…7 de julio)

Crear una función a la que le pasamos una fecha y nos devuelve true si es fin de semana y false en caso contrario
esFinDeSemana(cadena)

Crear una función a la que le pasamos un año, un mes y un día y nos devuelve una lista con todas las horas exactas de ese día
crearAgendaDia(2024,5,1)->[2024-5-1 00:00,2024-5-1 01:00,2024-5-1 02:00,2024-5-1 03:00,…2024-5-1 23:00]

Crear una función esViernes que nos devuelva true si hoy es viernes y false en caso contrario.

Crear una función vencimiento que pasándole un número de días nos devuelva la fecha de vencimiento, que es el día de hoy más ese número de días

Crear una función festivos que pasándole un mes y un año nos devuelva el número de sábados y domingos que tiene.

Crear una función laborables que pasandole un día, un mes y un año nos devuelva una cadena con los 15 días laborables siguientes (días entre lunes y viernes)

Lo mismo pero paasando una fecha y un entero con los números de días

Crear una función nextLeap que nos diga cual es el próximo año bisiesto. Si es el actual, el actual.

Crear una función malditoLunes que nos devuelva un array con todas las fechas de este año que caen en lunes

Soluciones cadenas


static String arbolito(int n)
{
// Dibuja por consola un arbolito de asteriscos
// arbolito(3)
// *1
// **2
// ***3
// Divide y vencerás
String res = "";
String cad = "";
for(int i = 1; i <= n; i++)
{
cad += "*";
res += cad + "\n";
}
return res;

}

static int contarLetra(String cadena, String letra)
{
cadena=cadena.ToLower();
letra=letra.ToLower();
// no devuelve el número de veces que letra aparece en cadena
// contarLetra("Hola amigo","o")->2
int cont = 0;
for(int i=0;i< cadena.Length; i++)
{
if (cadena.Substring(i, 1)== letra){
cont++;
}
}
return cont;
}
static int contarLetraIndex(String cadena, String letra)
{
cadena = cadena.ToLower();
letra = letra.ToLower();
// no devuelve el número de veces que letra aparece en cadena
// contarLetra("Hola amigo","o")->2
int cont = 0;
int pos=cadena.IndexOf(letra);
while (pos != -1)
{
cont++;
pos = cadena.IndexOf(letra, pos + 1);
}
return cont;
}

Recopilación ejercicios de cadenas

 

Una función que nos ponga una cadena en minúsculas y la primera y última letra en mayúsculas. Ejemplo: flupper(“HOLA”)->”HolA” flupper(“cacahauete”)->”CacahuetE”

 

Crear una función ToTitleCase que nos ponga la primera letra de cada palabra en mayúsculas
ToTitleCase(“hoLA que TAL”)=>”Hola Que Tal”

Una función que ponga las vocales en minúsculas y las consonantes en mayúsculas

Una función que devuelva true si la cadena que le pasamos empieza y acaba con la misma letra, independientemente de mayúsculas y minúsculas. Ejemplo iniciofin(“hola”)->false iniciofin(“alubia”)->true iniciofin(“Alava”)->true;

Una función que nos quite los n primeros caracteres de una cadena. recortar(“En un lugar de la mancha”,2)->” un lugar de la mancha”

Una función que nos devuelva el centro de una cadena. El centro es, si la longitud de la cadena es impar, la letra que está en el medio. Si la longitud de la cadena es par, las dos letras del medio. centro(“mar”)->”a” centro(“casa”)->”as”;

Crear una función InternalTrim que elimine espacios de más DENTRO de una cadena.
InternalTrim(“Hola      que    tal”)=>”Hola que tal”

Crear una función contarCaracter que nos cuente cuantas veces aparece un caracter en una cadena sin tener en cuenta mayúsculas o minúsculas
contarCaracter(“Hola que tal. A mi plim”,”a”)->3

Crear una función quitarAcentos que nos cambie las vocales acentuadas por vocales sin acentuar:
quitarAcentos(“Camión molón”)->”Camion molon”

Crear una función VocalsCount que nos diga las vocales que hay en una cadena

VocalsCount(“Hola que tal”)=>5

Lo mismo pero teniendo en cuenta acentos

Vamos a crear una función cuantasPalabras a la que le pasamos una cadena y un caracter y nos dice cuantas palabras en esa cadena contienen ese caracter
cuantasPalabras(“hola que tal”,”a”)->2

Vamos a crear una funcion que nos devuelva True si hay dos letras iguales repetidas
repetidas(“hola que tal”)->False
repetidas(“viva sevilla”)->True (hay dos l)
repetidas(“mi carro me lo robaron”)->True (hay dos r)

Escribir una función que invierta el orden de los caracteres de una cadena dada. invertir(“hola”)–>”aloh”

Crear una función esPalindromo que nos diga si una cadena es palíndroma:

boolean esPalindromo(String cadena)

esPalindromo(“Viva la paella”)->false
esPalindromo(“Sara Baras”)->true

Función Leet: Nos convierte una cadena a https://es.wikipedia.org/wiki/Escritura_leet
Usad la tabla más simple:
a 4  e 3    g 6    i |    l 1     o 0     s 5      t 7      z 2

Crear una función repetirPad que le pasemos una cadena, una longitud y nos devuelva una cadena repetida tantas veces como haga falta para alcanzar longitud (pero sin pasarse) y después, si todavía falta para llegar a longitud, lo rellene con ‘#’. Veamos ejemplos:
repetirPad(“hola”,10)->”holahola##”
repetirPad(“adios”,18)->”adiosadiosadios###”

 

Vamos a crear una función mezclar a la que le pasamos una cadena y nos crea otra con  la primera parte las letras pares y la segunda las impares, con unos ejemplos lo vemos mejor:
mezclar(“abcdefg”)->”acegbdf” mezclar(“12345678″)->”13572468” mezclar(“ababcdcd”)->”aaccbbdd”

Ejercicios cadenas


static void arbolito(int n)
{
// Dibuja por consola un arbolito de asteriscos
// arbolito(3)
// *
// **
// ***

}

static int contarLetra(String cadena, String letra)
{
// no devuelve el número de veces que letra aparece en cadena
// contarLetra("Hola amigo","o")->2
}

Proyecto: Curriculum

Como resumen de lo visto en el curso vamos a crear:

1.- Un github con nuestros códigos
2.- Uno o varios deploys en render de nuestros proyectos
3.- Una web de ‘curriculum’ en html que desglose nuestras habilidades y enlace a las páginas anteriores.
(ejemplos: https://devsnap.me/html-resume-templates)
Esta web la podemos subir en alwaysdata, por ejemplo, pero si alguien quiere que se la suba en una carpeta de trifulcas lo hago.

Pasos para realizar el despliegue

Alwaysdata nos proporciona un servidor web con bases de datos gratuito
Render nos permite publicar imágenes docker

Paso 1:
Publicar mi base datos en alwaysdata
– Tener una cuenta de alwaysdata OK
– Tener el SQL de mi base de datos OK
– Crear una bd en alwaysdata OK
– Crear un usuario y contraseña OK
– Importar la base de datos OK
– Probar la conexión OK

Paso 2.

– Cambiar la conexión de mi backend a la BD remota OK
– Voy a probar que funcione OK (dándole al play en eclipse)
– Voy a crear el .jar OK (p. ej. run as -> Maven install
– Voy a probar que funcione OK (java -jar nombredelarchivo.jar)
– Voy a dockerizarlo OK (copio el .jar a la carpeta de docker, compruebo el dockerfile, ejecuto docker build -t nombre-imagen . nombre-imagen es el nombre que le queramos poner a nuestra imagen)
– Voy a probar OK (dentro de docker desktop busco la imagen, RUN, mapeo el puerto 8080 y accedo vía postman)

Paso 3

– Subir nuestro proyecto a docker hub
– Tener una cuenta docker hub
– login a docker hub
– Etiquetar nuestra imagen con el usuario docker hub
– Push de nuestra imagen

Paso 4

– Publicar en render
– Nos hacemos una cuenta en render
– Web service
– existing image
– Nuestra imagen
– Escogemos FREE
– PORT 8080 en enviroment variables

Paso 5

– Subir archivos front
– Necesitamos una cuenta en un servidor, ya tenemos el alwaysdata
– Creamos una cuenta ftp (usuario y contraseña)
– Tenemos la url (p. ej. ftp-thecorner.alwaysdata.net)
– Usamos cualquier programa de ftp para subir los archivos (ej. filezilla, winscp)
– Comprobamos que los archivos de front acceden a la url de render (y que funcionan)
– Subimos los archivos al servidor

Dockerizar jar

Creamos un dockerfile

# Utiliza una imagen base de Java
FROM eclipse-temurin:21-jdk-alpine

# Crea un directorio dentro del contenedor para la aplicación
WORKDIR /app

# Copia el archivo JAR de tu aplicación al contenedor
COPY SpringBoot01.jar /app/SpringBoot01.jar

# Expone el puerto en el que se ejecutará la aplicación (puedes ajustarlo si es diferente)
EXPOSE 8080

# Comando para ejecutar el JAR
ENTRYPOINT ["java", "-jar", "/app/SpringBoot01.jar"]

Copiamos el arhivo .jar de nuestra aplicación (lo tenemos en target) a la raiz de nuestro proyecto. Aprovechad para cambiarle el nombre por otro un poco más amigable.

Tened cuidado con:
– La versión del Java
– El nombre de vuestro archivo

Construimos la imagen docker:

docker build -t SpringBoot01 .

La tendremos en nuestro docker desktop

La ejecutamos mapeando el puerto 8080 al puerto que queramos (el mismo 8080, por ejemplo). Si vamos a nuestro navegador deberíamos poder acceder como antes. Tened cuidado de no tener otro SpringBoot activo que nos pise los puertos.

Crear ejecutable jar

Por consola:

mvnw clean package

Dentro de la carpeta del proyecto

En Eclipse:

Botón derecho -> run as -> Maven install

o

Botón derecho -> run as -> Maven build

Y poner package en ‘goal’

El archivo lo crea dentro de la carpeta /target

Para ejecutarlo vamos a la consola y ponemos

java -jar nombre-del-archivo.jar

 

 

Ejemplo imagen docker


# Utilizar una imagen base de Ubuntu
FROM ubuntu:20.04

# Establecer el directorio de trabajo
WORKDIR /usr/share/nginx/html

# Instalar Nginx
RUN apt-get update && apt-get install -y nginx

# Copiar un archivo HTML personalizado al contenedor
COPY index.html /var/www/html/index.html

# Exponer el puerto 80
EXPOSE 80

# Iniciar Nginx
CMD ["nginx", "-g", "daemon off;"]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hola que tal</h1>
</body>
</html>