domingo, 22 de noviembre de 2015

[Mysql] Configurar acceso remoto a root





Mysql se ha convertido en uno de los servidores que regularmente tendemos a utilizar por primera vez en el ambito estudiantil y porque no en el ambito profesional tambien, por su flexibilidad, por su facilidad de implementación y por las diversas opciones que tenemos en el mercado para la parte web regularmente te ofrecen, en este caso muchas veces necesitamos acceder de forma remota o simplemente con un gestor que sea mas comodo en mi caso con Workbench que para mi uso es perfecto, muchas veces mi servidor no esta en la misma maquina que estoy utilizando por lo que requiero conectar remotamente, por configuración predeterminada Mysql no tiene un usuario para ingresar de modo remoto por lo que tenemos que nosotros darle el permiso.

  1. Primero accedemos a nuestro servidor en mi caso de esta manera (en este caso se ejecutaran los comandos directamente en donde esta instalado el servidor) 

  2. Nos pedira la contraseña y accederemos a la consola de Mysql


  3. Una vez estando ahí daremos los siguientes comandos para dar permisos tomando en cuenta que el "%", es un wildcard de los nodos que permitira la conexión remota por lo que si ponemos 192.168.1.% significa que todos los nodos que pertenecen a la red 192.168.1.0 podran acceder.  
    
    mysql> GRANT ALL ON *.* to root@'%' IDENTIFIED BY ‘contraseña_de_acceso_remoto‘;
    mysql> FLUSH PRIVILEGES;
    
    


Con esto ya se podra acceder desde cualquier otra maquina utilizando el usuario root, si quieres proveer de dicho servicios a otros usuarios tendrías que repetir procedimiento en el workbench en la opción de usuarios

domingo, 8 de noviembre de 2015

[MySQL] Recorrer el resultado de un select dentro de un procedmiento almacenado o función





Muchas veces hay tareas en las que necesitas hacer consultas cruzadas, que muchas veces complican demasiado el codigo y pueden generar problemas a la hora de la ejecución, ademas que la depuración es mas complicada dentro tus funciones o procedimientos, por lo que en lo particular me gusta que muchas de las tareas las haga el motor de base de datos, asi generando una sola transacción remota, les comento un ejemplo: 

1) Tengo un procedimiento almacenado que libera los productos de un proceso en tienda, y estoy generando, este procedimiento recibe un texto, el cual el procedimiento parte y realiza las actividades. Lo llamaremos: stp_devuelve_producto(idusuario, productos)

2) Ahora quiero devolver todos los productos en un dia particular, por lo que necesitaria hacer una consulta del día, luego posteriormente de los datos recibidos, ejecutar las sentencias para devolver el producto, por lo que lo hare en el mismo procedimiento almacenado que llamaremos stp_cancel_day(dia, idusuario), usaremos CURSOR de mysql 


CREATE DEFINER=`root`@`localhost` PROCEDURE `stp_cancel_day`(pday datetime, pidusuario int)
BEGIN  
   -- Declaramos las variables necesarias 
   -- La primera para saber cuando se detendra la consulta
   DECLARE done INT DEFAULT FALSE;
   -- Esta variable son las que recibiran los elementos necesarios 
   DECLARE piddetalle int DEFAULT 0;
   -- La variable que declararemos para concatenar los resultados
   DECLARE cad text; 
   
   -- Recorre se llma la variable CURSOR que recorre en base a la consulta
   DECLARE recorre CURSOR FOR 
      SELECT idproducto FROM detalle_pedido WHERE day=pday AND estado='ABIERTO';     
   -- Se declara un manejador para saber cuando se tiene que detener 
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
   -- Se abre el cursor
   OPEN recorre; 
   SET cad = "";
   loop_recorre: LOOP   
       FETCH recorre INTO piddetalle,pidproducto;        
       -- Fetch lo utilizamos para leer cada uno de los registros
       -- If que permite salir del ciclo
       IF done THEN 
   LEAVE loop_recorre;
    END IF;
       -- Concatemos los datos 
       SET cad = CONCAT(cad,CAST(pidproducto AS CHAR),',',CAST(piddetalle AS CHAR),',');       
   END LOOP;
   -- cerramos el cursor 
   CLOSE recorre;    
   -- Devuelve productos
   call stp_devuelve_producto(pidusuario,cad);
  
END



Con esto podremos recorrer cualquier tabla y utilizar sus datos  espero sirva


viernes, 6 de noviembre de 2015

[JAVA] Cuenta vocales utilizando Map


Un pequeño ejercicio para contar vocales a través de una cadena


import java.util.HashMap;
import java.util.Scanner;


public class Cadena {
    
    public static void main(String[] args) {
          Scanner sc = new Scanner(System.in); 
          String cad = sc.nextLine(); 
          char[] car = {'a','e','i','o','u'};
          cad = cad.toLowerCase(); 
          HashMap< Character, Integer> cuenta = new HashMap <>();
          for(char c: car)
             cuenta.put(c, 0);
          for(int i=0;i< cad.length();i++)         
              if(cuenta.containsKey(cad.charAt(i)))
              {
                  int ii = cuenta.get(cad.charAt(i));
                  ii++; 
                  cuenta.replace(cad.charAt(i), ii);
              }
          for(char c: car)
          {
              int cantdad = cuenta.get(c); 
              if(cantdad>0)
                  System.out.println(c+"->"+cantdad);
          }
          
    }  
}

domingo, 9 de agosto de 2015

[C#] Dando formato a las columnas de un DevExpress - > GridControl


DevExpress es una completa suite de componentes UI muy completa y que tiene componentes muy potentes para las herramientas .Net , aunque lo llevo poco utilizando permite generar proyectos mas rápido, por lo completo de sus componentes, y con aspecto visual muy interesantes y lo mejor para los que somos malos en el diseño en poco tiempo, aunque no todo es bueno en DevExpress he experimentando cierta latencia o retardo por lo que las aplicaciones no lo son de todo lo mejor. 
 

En este caso hablaremos de un componente llamado GridControl, que es una tabla de datos que sin problemas podemos relacionar con una fuente de datos para que pueda mostrar información, sin mayor complicación.

 gridControl1.DataSource = tabla; //DataTable


Una vez que se tiene una vista se forma un control interno llamada gridView el cual trabaja con la vista para que se pueda filtrar, ordenar o alguna operación sin afectar a los datos o la comunicación con el repositorio de la información.

Para poder trabajar con las columnas, gridview puede controlar las propiedades de las columnas a través de un arreglo, por lo que si una columna quieres ocultarla, en caso que necesites un índice pero no quieres que lo vea el usuario puedes usar lo siguiente: 

gridView1.Columns[0].Visible = false;


Si quieres cambiar el titulo de la cabecera utilizas 

gridView1.Columns[1].Caption = "CODIGO"; 


Si tu columna maneja una cantidad en dinero puedes usar 

gridView1.Columns[7].DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; 
gridView1.Columns[7].DisplayFormat.FormatString = "c2";


Si quieres cambiar su tamaño 

gridView1.Columns[0].Width = 30;


Si quieres traer un valor de alguna columna 

string cadenita = gridView1.GetRowCellValue(reng, gridView1.Columns[1]).ToString();


Espero les pueda servir. 

Referencias: 

https://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridColumnsGridColumnClassPropTopic 

viernes, 15 de mayo de 2015

[Debian] Instalar Java (JDK y JRE) desde repositorios

La instalación de Java es sencilla utilizando repositorios, su instalación esta a solo unos comandos, en este caso fue probado en un debian 8 de 32 bits, entonces pasamos a ejecutar los siguientes comandos:



1) Entrar en modo super usuario

$ su 
 password: "nuestro password"

2) Agregar las siguientes entradas a nuestro source list que podemos hacerlo manual pero en este caso los pondremos de manera automática, aunque los repositorio no son de Debian originalmente porque no soporta esa opción

# echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list
# echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list

3) Agregamos las claves necesarias para la instalación

# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886

4) Instalamos el paquete, ya con esto permitiremos

# apt-get update
# apt-get install oracle-java8-installer

Nota: en la parte de la instalación nos pregunta si aceptamos la licencia solo escribimos la palabra "yes"

5) Aceptamos las licencias de forma automatica para las actualizaciones

# echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

6) Configuramos las variables de entorno

# sudo apt-get install oracle-java8-set-default

7) Ya puedes hacer tus pruebas con los siguientes comandos para su utilización

# javac -version 
# java -version 

Fuente: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html




martes, 24 de febrero de 2015

[Ubuntu] Bajar videos de youtube



Muchas veces necesitamos un video y no tenemos una buena conexión de internet, y en linux o ubuntu es muy sencillo poder descargarlo, solo necesitamos instalar clive 

 $ sudo apt-get install clive

Ya una vez que se tiene instalado solo se tiene que poner en la consola el comando clive y la url del video y empezara a descargar. 

$ clive https://www.youtube.com/watch?v=LXqEfkUUlEU

Espero les ayude.

miércoles, 4 de febrero de 2015

[Android] Conectando Genymotion para probar nuestras aplicaciones


Genymotion es un software que sin problema puede sustituir al emulador que viene por default en los desarrollos de android como ya explicamos en el post anterior, en este caso genymotion es muy noble para la conexion ya que solo tenemos que irnos al menu Settings,  en la pestaña de ABD y poner la ruta del SDK que utiliza nuestro Android Studio





Una vez configurado solo lanzamos nuestros emulador y en este caso al abrir Android Studio detectaremos el dispositivo.