Blog

DORNI-TRON

El equipo de DorniSoft tiene el gusto de presentar el juego TRON con graficos en 2D donde dos jugadores avanzan por una cuadricula dejando sus estelas y pierde el que sale de la cuadricula o choca con alguna estela.

Lo podéis descargar desde la sección de descargas o comprar en DorniShop.
Disponible para sistemas windows en formato exe
Tambien te puedes bajar el codigo fuente desde la seccion descargas…
Estamos trabajando en la version online del Tron que pronto estará disponible.
Esperamos que te guste 😉

Bot de Telegram en PHP

En este articulo vamos a explicar como enviar mensajes a un canal de telegram con un bot. Primero hay que crear un bot e inclurlo en el canal. En este ejemplo vamos a enviar mensajes cuando las olas sean superiores a 4 metros por lo que tenemos una tabla (prediccion) mySQL con varias columnas una de ellas es la fecha y la otra es la altura de las olas

fechaalturaolas
2020-12-085
2020-12-092
La tabla preddiccion tendrá este aspecto

Programaremos un script en PHP para que compruebe si en el día actual hay olas de mas de 4 metros y si es así que envie un mensaje al canal.
Para esto necesitamos el id del canal que lo conseguimos mandando un mensaje al canal y ejecutando la consulta:

https://api.telegram.org:443/bot<TOKEN>/getUpdates

También necesitamos el TOKEN que nos proporciona Telegram al crear el bot.

Para ello crearemos dos funciones en PHP hayOlas() que comprobará si hay olas y en caso que superen los 4 metros se ejecutará la función sendMessage() que recibirá como parametros (id canal,textoMensaje) y enviará el mensaje.
Veamos el codigo

<?php
function hayOlas(){
	
	$db=mysqli_connect($server,$user,$password,$database);
	$fecha=date('Y-m-d');
	$result=mysqli_query($db,"SELECT alturaolas from prediccion where alturaolas> 4 and fecha='$fecha'");
	$numeroFilas=mysqli_num_rows($result);
	if($numeroFilas==1){
		$texto="Hay olas de mas de 4 metros. ";
		sendMessage(<ID_CANAL>,$texto);
	}
}


function sendMessage($chatId, $text) 
{
  $TOKEN = "<NUESTRO_TOKEN>";
  $TELEGRAM = "https://api.telegram.org:443/bot$TOKEN"; 

  $query = http_build_query(array(
    'chat_id'=> $chatId,
    'text'=> $text,
    'parse_mode'=> "Markdown", // Optional: Markdown | HTML
  ));

  $response = file_get_contents("$TELEGRAM/sendMessage?$query");
 
  return $response;
}

hayOlas();
?>

Una vez escrito el script en PHP, necesitamos automatizar la tarea, para que todos los dias se ejecute el script y haga la comprobación de si hay olas, por lo que es recomendable crear una tarea programada para ejecutarlo, por ejemplo con el CRON

Mas info

En el canal DorniSoft de Telegram ya está activo este bot
Espero que te guste… 😉

Temporizador en Java

Hoy presentamos el temporizador escrito en Java, con esta aplicación puedes poner una cuenta atrás en el PC, y una voz te avisará cuando acabe el tiempo programado para la tarea. También puedes parar y reanudar el tiempo, ya que funciona con hilos de ejecución. Para reproducir el mp3 que viene integrado he utilizado la libreria JLayer.

Puedes encontrar la aplicación para windows en descargas y el código en github

Esperamos que te guste…

Resolver sudokus con Java y recursividad

Hoy traemos el código necesario para resolver sudokus en Java utilizando recursividad.
Tendremos dos clases una Principal.java con el main y otra clase sudoku.java.
La clase sudoku.java contendrá la funcion resolverSudoku() que utilizará recursividad. Y las funciones necesarias para comprobar que el numero introducido en la celda es correcto(esValido()):

package sudoku;

/**
 *
 * @author Javi
 */
public class Sudoku {
    
    
    private int tablero[][];
    static final int  SIN_ASIGNAR=0;
    
    public Sudoku(int sudoku[][]){
        this.tablero=sudoku;
    }
    
    
    public boolean resolverSudoku(){
        
        for(int fila=0;fila <9;fila++){
            for (int columna=0;columna<9;columna++){
                if(tablero[fila][columna]==SIN_ASIGNAR){
                    for (int numero =1;numero<=9;numero++){
                        if(esValido(fila,columna,numero)){
                            tablero[fila][columna]=numero;
                            if(resolverSudoku()){
                                return true;
                            }else{
                                tablero[fila][columna]=SIN_ASIGNAR;
                            }
                        }
                    }
                    return false;
                }
            }
        }
        return true;
    }
    
    private boolean esValido (int fila, int columna, int numero){
        return !(contieneFila(fila,numero)||contieneColumna(columna,numero)||contieneCaja(fila,columna,numero));
    }
    
    private boolean contieneFila(int fila,int numero){
        for(int columna=0;columna<9;columna++){
            if(tablero[fila][columna]==numero){
                return true;
            }
        }
        return false;
    }
    
    private boolean contieneColumna(int columna,int numero){
        for(int fila=0;fila<9;fila++){
            if(tablero[fila][columna]==numero){
                return true;
            }
        }
        return false;
    }
    
    private boolean contieneCaja(int fila, int columna,int numero){
        int f = fila - fila % 3;
        int c = columna -columna % 3;
        for(int i =f;i<f+3;i++){
            for(int j = c; j<c+3;j++){
                if(tablero[i][j]==numero){
                    return true;
                }
            }
        }
        return false;
    }
    
public void ImprimirSudoku(){
    for(int i=0;i<9;i++){
        for (int j=0;j<9;j++){
            System.out.print(tablero[i][j]);
        }
        System.out.println("");
    }
}    

    
}

Con esta clase conseguimos que nos devuelva un sudoku solucionado.
Con la clase principal.java creamos el objeto miSudoku y le pasamos el tablero que queremos que resuelva.

package sudoku;

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

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        int tablero[][]={{6,9,5,3,7,1,8,4,2},
                         {0,0,0,0,0,0,0,0,0},
                         {8,4,1,2,9,6,3,7,5},
                         {0,0,0,0,0,0,0,0,6},
                         {0,0,0,0,0,0,0,0,8},
                         {5,6,2,0,1,7,4,3,9},
                         {0,0,0,0,0,0,1,8,7},
                         {0,0,0,0,0,0,0,0,0},
                         {7,5,4,0,0,0,0,0,0}};
        
        Sudoku miSudoku=new Sudoku(tablero);
        miSudoku.resolverSudoku();
        miSudoku.ImprimirSudoku();
                
        }
        
    }

En este video aprendí como era el algoritmo.

video youtube

He hecho una versión del código anterior en PHP pero el algoritmo es el mismo, lo podeis probar https://dornisoft.es/sudoku

Espero que te guste 😉

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 😉

DorniSoft Inc.