Blog

Dorni-Recetas

Hoy te presentamos una nueva aplicación escrita en Java con la que podrás gestionar tus recetas de cocina. La aplicación tiene tres partes:

1-Añadir: En esta sección podrás añadir recetas de cocina con sus ingredientes, métodos de preparación, comentarios, autor de la receta, podrás seleccionar si es privada o pública y podras elegir si la receta necesita de la elaboración de otra receta.
Tambien podrás añadir tus comensales habituales.

2-Actualizar receta: En esta sección podrás actualizar la receta, pudiendo modificar todos los campos de la receta, podras añadir los comentarios de los comensales y añadir mas elaboraciones necesarias para la receta.

3-Buscador: En esta sección podras buscar una receta por ingredientes separados por comas o buscar por nombre de receta o mostrar todas las recetas, una vez seleccionada una receta podras ver su contenido e imprimir la receta a un archivo txt que se ubica en el mismo lugar que el ejecutable.

Lo puedes descargar desde:

Dorni-Recetas

Y tambien está el manual de usuario para descargar, aunque es muy fácil de usar:

Manual usuario Dorni-Recetas

Esperamos que te guste 😉

Introducción a webservices con aplicación Java 8 y servidor PHP

Hola, en el artículo de hoy trataré el tema de webservices.
Los webservices son muy útiles cuando queremos distribuir nuestra aplicación y, en vez de dar acceso a la base de datos desde la aplicación directamente con un driver JDBC, lo que hacemos es que sea el webservice el que nos procese las peticiones a la base de datos. De esta manera, no tenemos que incluir la contraseña y usuario de la base de datos en la aplicación a distribuir y corremos menos riesgos de seguridad, ya que un usuario un poco espabilado podría descompilar nuestra aplicación y hacerse con las credenciales de la base de datos.

Usaremos el servidor XAMPP y ubicaremos los archivos php en la carpeta htdocs/service

Para empezar, crearemos la base de datos(webservice) con una única tabla(adjetivos) con 3 campos: Id, adjetivo,fecha.
Id (int, auto increment, primary key)
adjetivo(varchar)
fecha(timestamp)

Ahora crearemos el webservice que será un archivo php que procese las peticiones que se le envíen desde la aplicación Java, vamos a hacer que el web service procese dos peticiones, una de insertar datos y otra de hacer una consulta.

El archivo insert.php tendría este aspecto

<?php
$adjetivo=$_POST['adjetivo'];
$db=mysqli_connect("localhost","root","","webservice");
mysqli_query($db,"insert into adjetivos (adjetivo)values('$adjetivo')");
?>

El archivo select.php tendría este aspecto:

<?php
$db=mysqli_connect("localhost","root","","webservice");
mysqli_query($db,"set names 'utf8'");
$res=mysqli_query($db,"select * from adjetivos");
$fila=mysqli_fetch_array($res);
do{
	echo $fila["adjetivo"].",".$fila["fecha"]."\n";
	
}while($fila=mysqli_fetch_array($res));
?>

Una vez hecho ésto haremos nuestra aplicación en Java que le pasará un parámetro POST al webservice, éste la procesará y nos devolverá los resultados en el caso del select o insertará el adjetivo en el caso del insert, para lo que he creado una clase base adjetivos.java para convertir a objetos los resultados de la petición select.
La clase adjetivo.java tiene este aspecto:

import java.util.Objects;

/**
 *
 * @author Javi
 */
public class adjetivos {
    private int id;
    private String adjetivo;
    private String fecha;

    public adjetivos(String adjetivo) {
        this.adjetivo = adjetivo;
    }

    public adjetivos(String adjetivo, String fecha) {
        this.adjetivo = adjetivo;
        this.fecha = fecha;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAdjetivo() {
        return adjetivo;
    }

    public void setAdjetivo(String adjetivo) {
        this.adjetivo = adjetivo;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    @Override
    public String toString() {
        return "adjetivo{ adjetivo=" + adjetivo + ", fecha=" + fecha + "}\n";
    }

Usaré 2 clases con main, una para el ejemplo con insert y otra para el ejemplo con select.
En la clase main correspondiente al insert, le pasaremos un parámetro POST a PHP para que lo procese y lo inserte en la base de datos, esta clase sería una como la siguiente:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;





/**
 *
 * @author Javi
 */
public class Servicio {

    /**
     * @param args the command line arguments
     */
    
    private static final String USER_AGENT = "Mozilla/5.0";

    private static final String POST_URL = "http://localhost/service/insert.php";

    private static final String POST_PARAMS = "adjetivo=encomiable";
    
    
    public static void main(String[] args) throws IOException {
       

          sendPOST();
    }
    
    private static void sendPOST() throws IOException {
        URL obj = new URL(POST_URL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) obj.openConnection();
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("User-Agent", USER_AGENT);

        // Aqui le pasamos los parametros
        httpURLConnection.setDoOutput(true);
        OutputStream os = httpURLConnection.getOutputStream();
        os.write(POST_PARAMS.getBytes());
        os.flush();
        os.close();
        // Una vez pasados los parametros recibimos el codigo de respuesta

        int responseCode = httpURLConnection.getResponseCode();
        System.out.println("POST Response Code :: " + responseCode);

       
    }
    
}

El código anterior pasará un parámetro al archivo php con el adjetivo encomiable y será php el encargado de insertarlo en la base de datos

Ahora seguiremos haciendo un select de la tabla adjetivos y transformando los resultados en un arrayList de objetos adjetivos, en este caso no le vamos a pasar parámetros al select por lo que el parámetro será una cadena vacía, el siguiente código muestra como se debe proseguir

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;


/**
 *
 * @author Javi
 */
public class leerphp2 {

    /**
     * @param args the command line arguments
     */
     private static final String USER_AGENT = "Mozilla/5.0";

    private static final String POST_URL = "http://localhost/service/select.php";

    private static final String POST_PARAMS = "";
    
    
    
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        sendPOST();
    }
    private static void sendPOST() throws IOException {
        ArrayList <adjetivos> mati = new ArrayList<>();
        
        URL obj = new URL(POST_URL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) obj.openConnection();
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("User-Agent", USER_AGENT);

        // For POST only - START
        httpURLConnection.setDoOutput(true);
        OutputStream os = httpURLConnection.getOutputStream();
        os.write(POST_PARAMS.getBytes());
        os.flush();
        os.close();
        // For POST only - END

        int responseCode = httpURLConnection.getResponseCode();
        System.out.println("POST Response Code :: " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_OK) { // success
            BufferedReader in = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in .readLine()) != null) {
                response.append(inputLine);
                
                String [] fields = inputLine. split(",");
                mati.add(new adjetivos (fields[0],fields[1]));
                
            } in .close();

            // print result
            System.out.println(response.toString());
        } else {
            System.out.println("POST request not worked");
        }
        System.out.println("Escribiendo array");
        for (int i = 0; i < mati.size(); i++) {
            System.out.println(mati.get(i).toString()+"\n");
            
        }
    }
}

Enlace de interésJAVA POST

Espero que te haya gustado 😉

Cuenta Atras Java Script

Hoy te explicamos como crear una cuenta atras en Java Script utilizando PHP para que el usuario introduzca los segundos que va a durar la cuenta atras, primero realizamos el formulario HTML con los segundos que durara la cuenta atras

<div id="reloj">
    
		<form action ="index.php" method="POST">
			Segundos:<input type="number" name="tiempo"/><br><br/>
			<input type="submit" value="Enviar"><br><br/>
		</form> 
	</div>	
	<?php
		if($_POST){
			$segundos=$_POST["tiempo"];
        ?>

Luego creamos el script de manera que creamos una variable con la fecha actual y le sumamos los segundos que nos pasó el usuario para la cuenta atrás para calcular el final de la cuenta atras y luego restamos el final(end) del ahora(now) y nos da los milisegundos que quedan para la cuenta atras los descomponemos en dias, horas, minutos y segundos y obtenemos los datasw para mostrar

<?php
echo"<div id=\"countdown\"></div>";
echo "<script>
var end1 = new Date();
var seg =end1.getSeconds();
var end = end1.setSeconds(seg+".$segundos.");
    var _second = 1000;
    var _minute = _second * 60;
    var _hour = _minute * 60;
    var _day = _hour * 24;
    var timer;

    function showRemaining() {
        var now = new Date();
        var distance = end - now;
        console.log(distance);
        if (distance &lt; 0) {

            clearInterval(timer);
            document.getElementById('countdown').innerHTML = 'EXPIRED!';

            return;
        }
        var days = Math.floor(distance / _day);
        var hours = Math.floor((distance % _day) / _hour);
        var minutes = Math.floor((distance % _hour) / _minute);
        var seconds = Math.floor((distance % _minute) / _second);

		document.getElementById('countdown').innerHTML =  'Tiempo para que finalice la cuenta atras:   ';
        document.getElementById('countdown').innerHTML += days + ' dias, ';
        document.getElementById('countdown').innerHTML += hours + ' horas, ';
        document.getElementById('countdown').innerHTML += minutes + ' minutos y ';
        document.getElementById('countdown').innerHTML += seconds + ' segundos';
    }

    timer = setInterval(showRemaining, 1000);
</script>";
?>

Se puede probar en el siguiente enlace temporizador donde aparte del JavaScript hay algun otro cambio pero de poca importancia.
Espero que te haya gustado 😉

Ya esta disponible la tabla de mareas para la Coruña 2020

Para mas información sobre mareas, tiempo y oleaje visita nuestra web de información meteorologica

Relaciones UML

DEPENDENCIA: El elemento de origen depende del elemento destino y se puede ver afectado por cambios en este, es una relación mas débil que la asociación.

ASOCIACIÓN: Vinculos entre objetos. Aunque las asociaciones suelen ser bidireccionales (se pueden recorrer en ambos sentidos), en ocasiones es deseable hacerlas unidireccionales (restringir su navegación en un único sentido). Gráficamente, cuando la asociación es unidireccional, la línea termina en una punta de flecha que indica el sentido de la asociación

AGREGACIÓN: El elemento destino es una parte del elemento origen. La parte existe si se va el todo.

COMPOSICIÓN: Una forma de agregación mas fuerte, si desaparece el todo desaparecen las partes.

GENERALIZACIÓN: El elemento origen es una especialización del elemento destino, se utiliza en la herencia de clases.

REALIZACIÓN: El elemento origen garantiza llevar a cabo el contrato especificado, se utiliza para la implementación de las interfaces.

Ejemplo de Diagrama de clases:

Espero que te haya gustado

Juego de 3 en raya en consola en Java

Hoy te traemos una aplicación de consola en Java para jugar al tres en raya.
Consta de varias funciones:
-filas()
-columnas()
-diagonal()
-diagonalInversa()
Estas funciones estan destinadas a comprobar si hay 3 en raya.
Luego esta la función pintar() que comprueba si se puede escribir en la posicion que indica el usuario(comprueba si esta ya escrita, entonces sería movimiento incorrecto o si se sale de la pista) en estos dos casos el usuario tendría que volver a introducir fila y columna donde quiere escribir su jugada.
Tambien está la función mostrar() que escribe por pantalla la matriz de tres en raya como estaría despues de cada jugada.

package aplicacion1;

import java.util.Scanner;

/**
 *
 * @author Javi
 */
public class TresEnRaya {

    /**
     * @param args the command line arguments
     */
    public static boolean diagonalInversa(char mat[][],char jugador){
        boolean diagonalInvers=false;
         int k=0;
        for(int i=2, j=0;j<mat.length;i--,j++){
           
            if(mat[i][j]==jugador){
                k++;
            }
            if(k==3){
                diagonalInvers=true;
            }
        }
        return diagonalInvers;
    }
    
    
    public static boolean diagonal(char mat[][],char jugador){
        boolean diagonal=false;
        int k=0;
        for(int i=0, j=0;i<mat.length;i++,j++){
            
            if(mat[i][j]==jugador){
                k++;
            }
            if(k==3){
                diagonal=true;
            }
        }
        return diagonal;
    }
    
    
    public static boolean columnas(char mat[][],char jugador){
        boolean columna=false;
        for (int j=0;j<mat[0].length;j++){
            int k=0;
            
            for(int i=0;i<mat.length;i++){
                if(mat[i][j]==jugador){
                    k++;
                }
                if(k==3){
                    columna= true;
                }
                
            }
            
        }
        return columna;
    }
    
    public static boolean pintar(int fila,int columna,char mat[][],char jugador){
        
        try{
        if(mat[fila][columna]=='-'){
           
                mat[fila][columna]=jugador;
                return true;
            
            
        }else{
            System.out.println("Movimiento incorrecto");
            return false;
        }
        }catch(Exception e){
            System.out.println("Te has salido de la pista");
            return false;
        }
    }
    
    public static void mostrar(char mat[][]){
        for (int i=0;i<mat.length;i++){
            for(int j=0;j<mat[i].length;j++){
                System.out.print(mat[i][j]+" ");
            }
            System.out.println(" ");
        }
    }
    
    public static boolean filas(char mat[][],char jugador){
        boolean linea=false;
        for (int i=0;i<mat.length;i++){
            int k=0;
            
            for(int j=0;j<mat[i].length;j++){
                if(mat[i][j]==jugador){
                    k++;
                }
                if(k==3){
                    linea= true;
                }
                
            }
            
        }
        return linea;
    }
    
    
    public static void main(String[] args) {
        // TODO code application logic here
        
        char mat[][]= new char[3][3];
        Scanner miteclado = new Scanner(System.in);
        for (int i=0;i<mat.length;i++){
            for(int j=0;j<mat[i].length;j++){
               mat[i][j]='-';
            }
        }
        char player='x';
        char ultimo='x';
        
        while(!filas(mat,ultimo)&&!columnas(mat, ultimo)&&!diagonal(mat, ultimo)&&!diagonalInversa(mat, ultimo)){
        
            int fila,columna;
        
            do{
                System.out.println("Jugador "+player+"\n Donde quieres poner la "+player+"?\n Indica la fila");
                fila=miteclado.nextInt();
                System.out.println(" Indica la columna");
                columna=miteclado.nextInt();
            }while(!pintar(fila, columna, mat, player));
            
            mostrar(mat);
            filas(mat,player);
            columnas(mat,player);
            diagonal(mat,player);
            diagonalInversa(mat,player);

            if (filas(mat,player)||columnas(mat, player)||diagonal(mat, player)||diagonalInversa(mat, player))
                    System.out.println("Ha ganado "+player);

            ultimo=player;
            switch(player){
                case 'x':{
                    player='o';
                    break;
                }
                case 'o':{
                    player='x';
                    break;
                }
            }
        }
    }
    
}

Espero que te guste ♥

DorniSoft Inc.