jueves, 19 de mayo de 2011

Desktop Recorder Herramienta para grabar tu escritorio en Ubuntu

Que tal a todos, pues viendo que muchos de ustedes batallaron en la grabación de sus videos, les comparto esta herramienta que a mi me ha dado muy buenos resultados.

Primero en Ubuntu Software Center tecleamos "Desktop recorder" y lo instalamos.




Ya instalado nos vamos a Applications - Sound&Video - Desktop recorder
y nos aparecerá esto:


Ya desde ese panel de control podemos empezar a grabar dando clic en "Record" pero si quieren manipular un poco la configuración dan clic en Advance:






Abre por defecto la dirección en que se guardarán los videos podemos manipularla para que se guarden en el escritorio, damos clic en Save As y seleccionamos el Desktop por ejemplo.


Los demás parametros de configuración los dejamos por defecto y ya está listo para empezar a grabar! =D

Si al terminar de grabar no aparece el video en el Desktop, busquenlo en su carpeta de home en mi caso "jetsky0" ahi debe de estar :]

Los videos se guardan en extensión ".ogv"  extensión soportada por youtube asi que no es necesario convertirlo a otro formato para subirlo a youtube.

Si por el contrario lo quieren reproducir desde el disco duro, les puedo recomendar también el reproductor VLC para mi es el mejor reproductor ya que reproduce infinidad de formatos de audio y video incluyendo los más raros :P y vale la pena tenerlo en sus filas =D 
VLC es compatible tanto con Windows como con Ubuntu así que vale la pena tenerlo en ambos si quieres ahorrarte la necesidad de convertir formatos de videos para poder reproducirlos, VLC te ahorrará todo eso.

Ojalá esto les sirva éxito en sus materias!! =D

Saludos

martes, 10 de mayo de 2011

Presentación Final (TALLER)

Entrada correspondiente a la presentación final de mi proyecto, describiendo qué herramientas utilicé, que documentación obtuve y por su puesto como implemente toda la funcionalidad del programa.
Adjunto la presentación final y un video demostrativo.


Presentación Final (CLASE)

Buenos días en esta última entrada del curso les presentaré la funcionalidad final de mi software, el resultado final de lo que logre implementar.
Adjunto la presentación descrita de mi software y un video demostrativo probando su funcionalidad final.


Interfaces Gráficas (Taller)

En esta entrada les presentaré los códigos para representar los bocetos de la interfaz que diseñé anteriormente para el proyecto.

(Presentare las líneas encargadas de la construcción únicamente de la interfaz para no extenderme mucho.)

Primero la interfaz del Menú de Inicio o Panel de Control Principal.

Esta interfaz es el menu de bienvenida al usuario, por el que este accedera a las opciones del sistema.

Iniciamos declarando el método que contendrá los objetos que se encargaran de crear la interfaz con sus componentes.

private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

Ahora, declaramos cada componente de la interfaz con sus atributos.
jLabel1.setBackground(new java.awt.Color(0, 0, 0));
        jLabel1.setFont(new java.awt.Font("Arial", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("MENU PRINCIPAL");
        jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("1 -> Agregar Producto");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("2 -> Ver Lista de Productos");

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("3 -> Salir del Sistema");

        jLabel5.setFont(new java.awt.Font("Arial", 1, 14));
        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel5.setText("Ingrese numero de opcion:");

        jTextField1.setHorizontalAlignment(javax.swing.JTextField.TRAILING);

        jButton1.setFont(new java.awt.Font("Tahoma", 1, 10));
        jButton1.setText("ACCEDER");

Y por último, crear el Panel y la Ventana de la interfaz, seguido del acomodo que tendrán todos los componentes antes declarados, para darle estética a la interfaz, se declaran tamaños, posiciones y coordenadas de cada uno de estos, uno por uno.
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(75, 75, 75)
                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE)
                .addGap(163, 163, 163))
            .addGroup(layout.createSequentialGroup()
                .addGap(90, 90, 90)
                .addComponent(jLabel5)
                .addGap(38, 38, 38)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(224, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(161, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4)))
                .addGap(220, 220, 220))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(12, 12, 12)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(41, 41, 41)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(144, 144, 144))
        );

        pack();
    }

Proceso de Compilación/Ejecución:


Resultado Final:

Ahora vamos con la interfaz del panel de Altas de Productos.

Para el panel de Altas de Productos practicamente es lo mismo que en el del panel de control solo que ahora se ven mas JLabels y JTextFields.

Este Panel o Interfaz tiene el objetivo de llenar un formulario para poder dar de alta un producto en el sistema y guardarlo.

Primero el método que contendrá objetos y atributos de los componentes de la interfaz gráfica.
private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Ingreso de Datos del Producto");
        jLabel1.setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel2.setText("NOMBRE");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel3.setText("ID");

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel4.setText("CANTIDAD DISPONIBLE");

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel5.setText("PRECIO UNITARIO");

        jButton1.setFont(new java.awt.Font("Tahoma", 1, 14));
        jButton1.setText("AGREGAR");

Y enseguida, todo el procedimiento de acomodo y ordenación de los componentes de la interfaz.

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(179, 179, 179)
                        .addComponent(jButton1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(70, 70, 70)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel4)
                                    .addComponent(jLabel5))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(32, 32, 32)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jTextField4, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE)
                                            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE)))
                                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(35, 35, 35)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(29, 29, 29)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(30, 30, 30)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    } 

Proceso de Compilación/Ejecución:



Resultado Final:

Y por último la interfaz correspondiente a la opción de Consulta o Vista de inventario. Al agregar satisfactoriamente un producto el programa lo va guardando en una tabla a la que posteriormente podemos acceder desde el Panel de Control Principal.

Método donde iniciamos los componentes de esta interfaz:

private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

En este caso la demostración solo es de manera "estática" (aun estoy en proceso de conectar todas las interfaces del sistema)

Declaramos el encabezado que tendra la interfaz.

jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel1.setText("LISTA DE INVENTARIO DE PRODUCTOS");

Asignamos los parametros estaticos que por el momento queremos para probar y demostrar la interfaz. Como elemento extra agregue un KeyListener para que al momento que recorramos la tabla nos resalte el elemento que tenemos seleccionado (ya sea con las flechas del teclado o haciendo clic sobre una celda determinada con el apuntador del mouse).

jTable1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"001", "Escoba", "40", "19.90"},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "ID", "NOMBRE", "CANTIDAD", "PRECIO UNITARIO"
            }
        ));
        jTable1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTable1KeyTyped(evt);
            }
        });
        jScrollPane1.setViewportView(jTable1);

Y ya por ultimo mero ordenamiento de lo que fue el encabezado y el Panel que contiene esta interfaz.

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 563, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(21, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(152, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(150, 150, 150))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(12, 12, 12)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(56, Short.MAX_VALUE))
        );

        pack();
    }                      

Proceso de Compilación/Ejecución:


Resultado Final:

Bueno pues es todo por esta entrada, cualquier duda comentario o sugerencia comenten, seguiré agregandole carne a esto y se los expondré en las exposiciones finales (:

Saludos!!

Interfaces Gráficas (Clase)

Buenos Días, en esta entrada les mostraré el diseño gráfico que tengo pensado implementar en mi proyecto.

Primero adjuntaré un poco de información de lo que son y en lo que consisten las interfaces gráficas.

"La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador."

Ya que conocemos bien la definición de lo qué es una interfaz gráfica (GUI), procederé a mostrarles las siguientes capturas de pantalla con el boceto a mano de como quiero que se vea la interfaz de mi programa, (tanto del menu principal como de los submenus, y las listas de productos).



Enseguida les muestro el prototipo de la interfaz que diseñe con la ayuda de Netbeans.

Menu Principal:
Menu de Altas de Productos:
Menu de Lista de Inventario:


miércoles, 4 de mayo de 2011

Sistemas Distribuidos (TALLER)

Sistemas Distribuidos (CLASE)


Sistema Distribuido es un concepto poco claro de definir. Colección de elementos de cómputo autónomo que se encuentran físicamente separados y no comparten una memoria común, se comunican entre sí a través del intercambio de mensajes utilizando un medio de comunicación. Los sistemas autónomos pueden tener características no homogéneas. 



Características de los Sistemas Distribuidos.
1.-Cada elemento de computo tiene su propia memoria y su propio Sistema Operativo.
2.-Control de recursos locales y remotos.
3.- Sistemas Abiertos (Facilidades de cambio y crecimiento).
4.-Plataforma no standard ( Unix, NT, Intel, RISC, Etc.).
5.-Medios de comunicación ( Redes, Protocolos, Dispositivos, Etc.).
6.- Capacidad de Procesamiento en paralelo.
7.-Dispersión y parcialidad.

Modelo de Construcción.
*Arquitectura Cliente/Servidor:
Una arquitectura es un conjunto de reglas, definiciones, términos y modelos que se emplean para producir un producto. La arquitectura Cliente/Servidor agrupa conjuntos de elementos que efectúan procesos distribuidos y computo cooperativo.


Cliente
Conjunto de Software y Hardware que invoca los servicios de uno o varios servidores.
Servidor
Conjunto de Hardware y Software que responde a los requerimientos de un cliente.

*Red de Comunicación
Es todo aquel conjunto de elementos basados en hardware y software que permite establecer un enlace entre los clientes y los servidores, se clasifican por su tamaño LAN, MAN y WAN. 

En java existen algunas herramientas y conceptos para poder programar los sistemas distribuidos, tenemos lo que es el RMI.

"El sistema de Invocación Remota de Métodos (RMI) de Java permite a un objeto que se está ejecutando en una Máquina Virtual Java (VM) llamar a métodos de otro objeto que está en otra VM diferente."
Los stubs y skeletons se encargan de establecer una conexión entre los clientes y un objeto remoto. Los stubs corren en la parte cliente y los skel en el servidor.

Objetos Serializables: 
"Un objeto serializable es un objeto que se puede convertir en una secuencia de bytes. Para que un objeto sea serializable, debe implementar la interfaz java.io.Serializable. Esta interfaz no define ningún método. Simplemente se usa para marcar aquellas clases cuyas instancias pueden ser convertidas a secuencias de bytes (y posteriormente reconstruídas). Objetos tan comunes como String, Vector o ArrayList implementan Serializable, de modo que pueden ser serializados y reconstruídos más tarde.
Para poder serializar un objeto no hay más que declarar el objeto como serializable:
public class MiClase implements java.io.Serializable
El sistema de ejecución de Java se encarga de hacer la serialización de forma automática."

Sockets.
"Un socket (enchufe), es un método para la comunicación entre un programa del cliente y un programa del servidor en una red. Un socket se define como el punto final en una conexión. Los sockets se crean y se utilizan con un sistema de peticiones o de llamadas de función a veces llamados interfaz de programación de aplicación de sockets (API, application programming interface)"


Fuentes:
http://www.dcc.uchile.cl/~lmateu/CC60H/CompServ/index.html
http://www.programacion.com/articulo/invocacion_remota_de_metodos_rmi_107
http://www.javahispano.org/contenidos/es/serializacrion_en_java/