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.



 

miércoles, 28 de enero de 2015

[Java] Compartir archivos por socket



Continuando con el post anterior, ya antes ya habia escrito algo con sockets pero creo que este esta mas elaborado se trata de una aplicación que permite mediante un servidor de socket generar una carpeta compartida, mediante un cliente se pueden descargar y subir archivos a dicha carpeta, aunque todavía falta seguridad es un buen ejercicio para quien lo pueda utilizar, les dejo un video de su uso y el enlace en gitHub para que descarguen el codigo. 

www.youtube.com/watch?v=YUDWD8MyCcQ

[Java] JTree como explorador de archivos


En Java existe un componente llamado JTree que permite enlistar una serie de elementos en una estructura esquematica o por jerarquia, por lo el poder explorar archivos no es una tarea tan sencilla como se quisiera pero les dejo una libreria. 

En mi caso vamos a crear un proyecto Java y le agregaremos un componente JTree para las pantallas para esto yo tengo el ejemplo en Netbeans por lo que tendría algo así. 



En este caso vamos a entrar al codigo en el constructor pondremos lo siguiente suponiendo que mi componente lo llamaremos jTree1. 

        public ContructorClass{
        initComponents();
        JTreeFile jTreeFiles = new JTreeFile(); 
        jTreeFiles.setJTree(jTree1);
        jTreeFiles.init(); 
        }

Ya lo unico que tendremos que hacer es crear una clase con sl siguiente codigo que permita actualizar el listado de los archivos.


package ui.jTreeLib;

import java.io.File;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

/**
 *
 * @author coby
 */
public class JTreeFile implements TreeExpansionListener{

    
    private JTree jTree1;
    private DefaultTreeModel modelo;

    public DefaultTreeModel getModelo() {
        return modelo;
    }

    public JTreeFile() {
    }

    public JTreeFile(JTree jTree1) {
        this.jTree1 = jTree1;
    }

    public void setJTree(JTree jTree1) {
        this.jTree1 = jTree1;
    }

    /**
     * Metodo que permite enlazar los escuchas de eventos 
     * y permite actualizar 
     */
    public void init() {
        //creamos el nodo principal
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("Directorio");
        //creamos un modelo con el nodo que creamos principal
        modelo = new DefaultTreeModel(top);
        // seteamos el modelo y el escucha al componente 
        jTree1.setModel(modelo);
        jTree1.addTreeExpansionListener(this);
        //extraemos todas las unidades disponibles en caso que tengamos C, D o otra
        for (File f : File.listRoots()) {
            DefaultMutableTreeNode raiz = new DefaultMutableTreeNode(f);
            //añadimos el nodo a la raiz
            top.add(raiz);
            //hacemos un recorrido de dos niveles a partir de cada una unidad
            actualizaNodo(raiz, f);     
        }
    }

    private boolean actualizaNodo(DefaultMutableTreeNode nodo, File f) {
        //quitamos lo que tenga el nodo 
        nodo.removeAllChildren();
        //recursivamente mandamos actualizar
        return actualizaNodo(nodo,f,2); 
    }
    
    /**
     * A partir de un nodo enlista los archivos y los agrega como nodo 
     * @param nodo Es el nodo que tenemos parcialmente como raiz
     * @param f es el archivo que se enlaza con la raiz 
     * @param profundidad el numero de subdirectorios que se quiere que escarbe
     * @return 
     */

    private boolean actualizaNodo(DefaultMutableTreeNode nodo, File f, int profundidad) {
       File[] files = f.listFiles(); // de el nodo que llega listamos todos sus archivos
       if(files!=null && profundidad>0) //permite detener la recursividad si ya llego al limite 
       {   
           for(File file: files)  // recorre todos los archivos 
           {
               DefaultMutableTreeNode nuevo = new DefaultMutableTreeNode(file);
               //vuelve a mandar en caso que sea directorio 
               actualizaNodo(nuevo, file,profundidad-1); 
               nodo.add(nuevo); //crea el nodo
           }
       }
       return true; 
    }
    /**
     * Metodo que se ejecuta al expandir alguno de los nodos
     * @param event 
     */
    @Override
    public void treeExpanded(TreeExpansionEvent event) {
        TreePath path = event.getPath(); // Se obtiene el path del nodo
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
        // verifica que sea nodo valido
        if(node==null || !(node.getUserObject() instanceof File) ) return; 
        File f = (File) node.getUserObject();
        actualizaNodo(node, f);  //actualiza la estructura
        JTree tree = ( JTree) event.getSource(); 
        DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); 
        model.nodeStructureChanged(node);
    }

    @Override
    public void treeCollapsed(TreeExpansionEvent event) { }

}



La clase la pueden encontrar en un pequeño ejemplo que dejo a continuación

 
 

viernes, 23 de enero de 2015

[LeapMotion] Hola Mundo, linux SDK + Java


Para los que nos gusta un poco la programación estos dispositivos son muy interesantes, por lo que vamos a hacer un pequeño programa que nos permita leer datos de un leapMotion, vamos a empezar con un pequeño Hola Mundo.

Imagen de leapmotion.com
LeadMotion es un gadget muy interesante para trabajar con realidad aumentada, prácticamente consiste en detectar los movimientos de las manos, bueno un video vale mas que mil palabras por lo que lo dejo.


Interesante la verdad con lo que se puede hacer, pero vamos a entrar en materia, lo primero que haremos es configurar el entorno de desarrollo en mi caso utilizaremos una distribución de ubuntu, java 1.8 y el SDK de leapmotion en su versión 2.2.2 que la puedes descargar en  la pagina de desarrolladores oficial. 

Descomprimiremos la carpeta en una ubicación cualquiera, y posteriormente instalaremos el software que viene en ella, que como es una extensión de deb con el mismo centro de software lo puedes instalar. 

En mi caso instalamos el x64 por la arquitectura y la distribución que se tiene instalado, una vez veras que los sensores del leapmotion se encienden.

Abriremos nuestro proyecto de netbeans en este caso usaremos un tipo de movimiento o gesto que detecta el leadmotion que sera movimientos circulares, y la intensión es hacer un contador que al dar movimientos circulares un contador aumente si es que va en sentido a las manecillas del reloj, de lo contrario disminuiría.

Imagen de la pagina de desarrolladores de leapmotion


Lo primero vamos a hacer es crear un proyecto nuevo de Netbeans, y agregar a las librerias el sdk, a ir a la carpeta del LeapSDK -> Lib, buscaremos el archivo LeapJava.Jar y lo agregamos al proyecto. 


Crearemos un listener que nos ayudara a estar escuchando los eventos 


package example;

import com.leapmotion.leap.*;
/**
 * Clase de escucha para los movimientos
 * @author luis
 */

public class ListenerLeapMotion extends Listener {

    /**
     * Metodo que detecta cuando el leapmotion esta conectado
     * @param controller 
     */
    @Override
    public void onConnect(Controller controller) {
        System.out.println("Connected");
    }

    /**
     * Metodo que detecta los eventos en el leapmotion 
     * @param controller 
     */
    @Override
    public void onFrame(Controller controller) {
        ///Obtenemos el fram que captura
        Frame frame = controller.frame();
        //habilitamos el gesto de los movimientos circulares
        controller.enableGesture(Gesture.Type.TYPE_CIRCLE);
        //configuracion para mejor deteccion 
        controller.config().setFloat("Gesture.Circle.MinRadius", 10.0f);
        controller.config().setFloat("Gesture.Circle.MinArc", .5f);
        controller.config().save();
        
        //sacamos una lista de los eventos que se presenten 
        GestureList lista = frame.gestures();
        //verificamos que haya pasado algo
        if (!lista.isEmpty()) {
            //recorremos entre los eventos que ocurrieron 
            for (Gesture gesture : lista) {                
                switch (gesture.type()) {
                    //Si el evento fue movimientos circulares
                    case TYPE_CIRCLE:                       
                        //instancia de un objeto para el movimiento
                        CircleGesture circle = new CircleGesture(gesture);
                        //a partir de un posicionamiento verificamos a que sentido esta el movimiento
                        if(circle.pointable().direction().angleTo(circle.normal())<= Math.PI/2)                            
                        {  //si se da en sentido del reloj (limite 255)
                            if(LeapMotion.intensidad<255)
                                    LeapMotion.intensidad++; //aumenta el contador
                        }
                        else {
                                if(LeapMotion.intensidad>0)
                                    LeapMotion.intensidad--; //disminuye el contador
                                }
                        System.out.println(LeapMotion.intensidad); //imprimo el contador
                        break;

                }
            }
        }
    }

}


Despues vamos a crear un archivo Main agregando el listener 

package example;

import com.leapmotion.leap.*;
import java.io.IOException;

/**
 *
 * @author luis
 */
public class LeapMotion {

    //variable estatica que almacena el valor segun los movimientos
    public static int intensidad = 0;

    public static void main(String... a) {
        //instanciamos de nuestra clase de escucha 
        ListenerLeapMotion listener = new ListenerLeapMotion();
        //instanciamos la clase para control de los datos 
        Controller controller = new Controller();
        //añadimos el escucha para que tome los eventos 
        controller.addListener(listener);        
        System.out.println("Presiona algo para salir");
        try {
            //detemos el programa hasta que presionemos algo
            System.in.read();
        } catch (IOException e) {
            System.out.println("Ocurrio un error");
        }

        //Se remueve el listener
        controller.removeListener(listener);

    }

}


Para que pueda ser ejecutado hay que ir a la carpeta de LeapMotionSDK/lib/x64(en mi caso) y copiar la ruta para agregarla como argumento en la ejecución como se ve en la pantalla siguiente: 



Despues veras en la consola los valores que van aumentando según tu movimiento de la mano. 


https://github.com/cobymotion/LeapMotion/