Posts filed under 'Programación'
Escribiendo software de calidad.
Bueno, aquí me teneis de nuevo escribiendo mis entradillas chapuzeras, en este pequeña entrada intentare explicar las bases necesarias para escribir software de calidad.
Lo primero qué tenemos qué pensar es: por qué cerrar el conocimiento qué otras personas pueden aprovechar y hacer qué ese conocimiento se extienda y evolucione?, no tiene sentido qué las demas personas no tengan acceso a lo qué tu estas creando, por qué s niegas al ser humano qué conozca como funciona determinada tecnologia, nunca podremos mejorar lo existente o crear algo nuevo a partir de algo qué ya tenemos echo, por eso es necesario qué nosotos los programadores liberemos el codigo fuente de nuestros programas, para qué la humanidad evolucione y se puedan implementar nuevas tecnologias basadas en tecnologias viejas, solo qué nosotros reinventamos la rueda, y añadimos nuevas funcionalidades a lo qué ya teniamos.
El software qué estas desarollando tiene qué estar bien comentado, si el software esta bien comentado eso permitira a otros programadores entender el codigo con mayor facilidad y saber qué es lo qué hace cada instruccion de un determinado algoritmo que hemos implementado en nuestro modulo.
Plantear la interfaz grafica correctamente, la interfaz grafica de la aplicacion qué estemos desarollando tiene qué ser accesible a los componentes y menus por las cuales navegemos.
Generar documentacion necesaria sobre el proyecto, y el codigo fuente, ( anqué el codigo fuente este comentado en los ficheros fuente ) explicar qué es lo qué realiza cada accion o procedimiento definidos en una determinada Clase, los metodos qué hereda, y en general las propiedades publicas a las qué tenemos acceso.
Saludos, y espero qué haya sido de utilidad mi aporte.
Add comment Marzo 14, 2009
Creando un reproductor de medios en JAVA.
Hola bloggeros!.
En esta pequeña entrada, intentare explicar como crear un reproductor de medios en JAVA, para ello utilizaremos el java media framework API, y un pequeño ejemplito qué me e currado con el eclipse ( ya estaba un poquítin asta las narices del netbeans ) .
Bien para ello intentare hacer un pequeño esquema de lo qué tenemos entre manos, y explicaremos el codigo linea a linea para entender mas a fondo como funciona este API.
Player
Player es una interface, qué almacena una serie de metodos que nos permitiran reproducir archivos de musica, archivos de video, y en general tambien nos permitira acceso a streams multimedia ( STREAMING ) lo qué nos facilitira demasiado el desarollo de aplicaciones qué necesitan acceder a un determinado recurso usando implementaciones de protocolos RTP o http.
Para inicializar un objeto instanciado de la clase Player lo unico qué tenemos qué hacer, es lo siguiente:
Player instanciado = Manager.createPlayer(“file:C:/archivo.mp3″);
Como vemos en la linea1, creamos un puntero hacia Player, y lo inicializamos con Manager.createPlayer() pasandole como sobrecarga el archivo qué queremos reproducir, y en teoria para llamar al reproductor tendriamos qué hacer lo siguiente:
instanciado.start();
Esto permitira incializar el objeto y permitira reproducir el stream.
Pero qué sucedera si hacemos esto?, qué simplemente nos dira qué el player no esta configurado y qué nos podemos comer el codigo con patatas, a sí qué alternativa tenemos?.
Player p = Manager.createRealizedPlayer(url);
Linea 1,creamos un puntero desde Player, y seguidamente lo inicializamos con Manager.createPlayer(), una vez inicializado lo sobrecargamos pasando como parametro el archivo qué deseemos reproducir, esta vez sí se reproducira debido a qué creamos un player configurado y listo para reproducir archivos multimedia.
Bueno aquí el ejemplito qué tanto nos toca la moral.
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.*;
import javax.media.control.*;
import javax.swing.*;
import java.net.*;
import java.awt.*;
public class mediaPlayer{
public static Player p = null;
public static void openFile(URL url){
try{
p = Manager.createRealizedPlayer(url);
p.start();
}catch (Exception o){
o.printStackTrace();
}
}
public static JFrame addContainer(){
JFrame frame = new JFrame();
Component comp = p.getVisualComponent();
Component compRep = p.getControlPanelComponent();
if ( comp != null && compRep != null ){
frame.add(comp,BorderLayout.CENTER);
frame.add(comp,BorderLayout.SOUTH);
}else{
System.exit ( -1 );
}
return ( frame );
}
public static void main(String args[]){
JFileChooser choss = new JFileChooser();
choss.showOpenDialog(null);
try{
URL urlSet = choss.getSelectedFile().toURL();
openFile(urlSet);
JFrame resultSet = addContainer();
if ( resultSet != null ){
resultSet.setSize(300,200);
resultSet.setVisible ( true );
}
}catch (Exception o){
o.printStackTrace();
}
}
}
Metodo 1: openFile( URL url ) hereda : java.net.URL;
public static void openFile(URL url){
try{
p = Manager.createRealizedPlayer(url);
p.start();
}catch (Exception o){
o.printStackTrace();
}
}
p = Manager.createRealizedPlayer(url);
Creamos una instancia a la clase Player, y seguidamente la inicializamos con Manager.createPlayer() pasandole como parametro una variable de tipo URL qué contendra la direccion de nuestro archivo a reproducir.
p.start();
Inicializamos el player, para qué nos permita reproducir el archivo de musica o de video qué le hemos pasado como sobrecarga al metodo openFile.
Metodo 2: addContainer() devuelve JFrame ( javax.swing ).
public static JFrame addContainer(){
JFrame frame = new JFrame();
Component comp = p.getVisualComponent();
Component compRep = p.getControlPanelComponent();
if ( comp != null && compRep != null ){
frame.add(comp,BorderLayout.CENTER);
frame.add(comp,BorderLayout.SOUTH);
}else{
System.exit ( -1 );
}
return ( frame );
}
Component comp = p.getVisualComponent();
Obtenemos los datos de video almacenados en el player, si existen datos de video en el player entonces se asignaran correctamente, sí no se creara una excepcion de tipo NullPointerException.
Component compRep = p.getControlPanelComponent();
Obtenemos los datos de visualizacion del panel de control, esto nos permitira visualizar el panel de control dentro de un contenedor JFrame.
if ( comp != null && compRep != null ){
frame.add(comp,BorderLayout.CENTER);
frame.add(comp,BorderLayout.SOUTH);
}
Si los datos qué se han obtenido no estan vacios, entonces se agregan al contenedor JFrame, y seguidamente se devuelve el contenedor JFrame para qué en el punto de entrada se cree un nuevo JFrame y pueda ser visualizado el video.
Metodo 3: public static void main(String args[]) punto de inicializacion del programa.
public static void main(String args[]){
JFileChooser choss = new JFileChooser();
choss.showOpenDialog(null);
try{
URL urlSet = choss.getSelectedFile().toURL();
openFile(urlSet);
JFrame resultSet = addContainer();
if ( resultSet != null ){
resultSet.setSize(300,200);
resultSet.setVisible ( true );
}
}catch (Exception o){
o.printStackTrace();
}
}
}
Creamos una instancia a la clase JFileChooser, y seguidamente mostramos un cuadro de dialogo para qué nos muestre el archivo qué deseamos reproducir, seguidamente llamamos a openFile y sobrecargamos dicho metodo con el nombre del archivo a reproducir, lo qué producira qué el player este incializado y seguidamente podamos llamar a addContainer() qué nos permitira crear un contenedor JFrame y obtener los datos qué nosotros hemos obtenido a partir del recurso qué hemos seleccionado dentro del JFileChooser.
Espero que os haya sido de utilidad.
Saludos.
1 comment Marzo 7, 2009
Descargando videos de youtube desde JAVA
Este es el codigo de la libreria java, para poder descargar videos de youtube en java.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package moises.java.YoutubeDownloader;
import java.io.*;
import java.net.*;
/*
* ======
* YoutubeDownloader Library 0.1
* ======
*
* */
public class YoutubeDownloader {
/*
* Metodo getURL:
* Permite obtener el enlace final del video que deseamos descargar.
* */
public String GetUrl(String url)throws java.net.MalformedURLException,IOException{
URL urlConnection = new URL(url);
String returnedUrl = “”;
URLConnection conn = urlConnection.openConnection();
InputStream input = conn.getInputStream();
DataInputStream inputStream = new DataInputStream(input);
String readAll = inputStream.readUTF();
try{
if ( readAll.indexOf(“video_id=” ) > -1 ){
String splitedUrl[] = new String[1];
splitedUrl = readAll.split(“video_id=”);
splitedUrl = splitedUrl[1].split(“&title=”);
returnedUrl = “http://www.youtube.com/get_video?video_id=” + splitedUrl[0];
}
}catch (Exception o){
o.printStackTrace();
}
return ( returnedUrl );
}
/*
* downlodFlv: nos permite descargar un video a partir de una url raiz.
* */
public void downloadFlv(String url,String destFileName)throws java.net.MalformedURLException,IOException{
URL urlConnection = new URL(url);
URLConnection connection = urlConnection.openConnection();
InputStream inputStream = connection.getInputStream();
int bytes = 0;
byte buffer[] = new byte[ ( int ) connection.getContentLength() ];
FileOutputStream outWriter = new FileOutputStream(destFileName);
while ( ( bytes = inputStream.read(buffer) ) != -1){
outWriter.write(buffer,0,bytes);
}if ( inputStream != null || outWriter != null ){
inputStream.close();
outWriter.close();
}
}
/*
* ExecuteWithThread():
* Nos permite descargar un video usando una implementacion de clase Thread ( hilos
* */
public void ExecuteWithThread(String url,String destFileName){
Thread pThread = new Thread();
pThread.start();
synchronized ( pThread ){
try{
String gettedUrl = GetUrl(url);
downloadFlv(gettedUrl,destFileName);
}catch (Exception o){
o.printStackTrace();
}
}
}
}
Implementando funcionalidad para descargar videos de youtube en java.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication6;
import moises.java.YoutubeDownloader.*;
/**
*
* @author moi
*/
import java.io.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception{
System.out.println(“Introduce la url del video:”);
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
String url = read.readLine();
YoutubeDownloader down = new YoutubeDownloader();
String url2 = down.GetUrl(url);
down.downloadFlv(url2, “/home/moi/res.flv”);
}
}
Saludos.
Add comment Febrero 21, 2009
Programacion en GNU/Linux.
Bueno, aquí estoy de nuevo.
En esta entrada voy a intentar a explicar la diversidad de lenguajes que tenemos a nuestra disposicion para programar comodamente en nuestro sistema GNU/Linux, para ello disponemos de los siguientes elementos:
- Java.
- C# ( Mono ).
- C y C++
- Gambas
Java.
Si lo que buscamos es una alternativa a .NET y c# ( mas concretamente ) java es una buena alternativa ( no voy a entrar en discusiones si c# es una copia de java ) los entornos de desarollo integrados multiplaforma cada vez se van extendiendo mas, y logicamente tenemos un producto bastante “exquisito” ( por así decirlo de alguna manera ) qué es en este caso NetBeans, mi maravilloso netbeans…ejej, netbeans nos permite diseñar interfazes graficas a golpe de raton, y nos permite hacer casi todo lo que hace VisualStudio solo que este utiliza tecnologia multiplataforma.
Netbeans trae una gran cantidad de caracteristicas…un editor UML, autocontemplado de codigo,coloreado de sintaxis, y ademas nos permite desarollar en multiples lenguajes y en dispositivos moviles, lo que hace a netbeans mucho mas atractivo.
Si de verdad tienen pensado programar en java, y necesitan algo como visual studio, sin duda acudan a Netbeans.
Si lo que necesitamos es un entorno de desarollo para aprender a programar en java, es aconsejable utilizar JGrasp(es lo que utilizabamos hace poco en clase) y realmente es un IDE bastante completo, lo unico que no trae todas las caracteristicas de un entorno de desarollo profesional, y logicamente los que mas trasteamos con el entorno de desarollo echaremos de menos el autocontemplado de codigo.
Mono (C#)
A pesar de que soy partidiaro de que las tecnologias libres avancen ( como todo linuxero ) debo de decir que mono esta avanzando a pasos agintados, y es qué en su ultima version de su IDE ya podemos crear aplicaciones Windows Forms en nuestro GNU/Linux! ( Si ya sé que esto puede resultar algo “traumatico” para algunos linuxeros., pero todas las tecnologias sean libres o no qué sean portadas a GNU/Linux son bienvenidas ( o por lo menos desde mi punto de vista ( todo esfuerzo vale la pena ) ) ) aunque no lo podemos hacer con total comodidad como si lo hicieramos en windows, pero si queremos crear interfazes graficas a golpe de raton de una manera mas simple creo que tendremos qué esperar un poquitin mas, de todas maneras chapo por mono.
Cabe destacar tambien, que se pueden instalar una serie de modulos en apache para poder “ejecutar” aplicaciones ASP.NET en nuestro servidor web local, esto ya es un avance grandioso.
En definitiva, Mono ha echo un gran avance, y espero que su implementacion de una maquina virtual para .NET siga avanzando.
C y C++
Bueno, ya conoceis el dicho, c y c++ son tambien muy buenas alternativas para el desarollo de aplicaciones en nuestro sistema GNU/Linux, debido a que existen RADS que nos permiten la creacion de widgets facilmente y entornos de desarollo como Kdevelop ( tambien multilenguaje ) que nos permiten importar esas interfaces y directamente trabajar con el codigo generado por el rad… digamos qué es lo mismo que VisualStudio o NetBeans mientras vas arrastrando componentes vas generando una serie de instrucciones que “crean” un interface y empacan los componentes en un solo widget.
Si queremos algo mas “pro” podemos utilizar el set de librerias que nos proporciona ubuntu ( gtk ), para el desarollo de aplicaciones con interfaz grafica en c o c++ y picar codigo directamente para crear la interfaz, aunque lo veo absurdo, pero tambien puede ser un metodo de aprendizaje para cualquiera que se inicie en la programacion de aplicaciones graficas.
Y bueno hablando sobre los dos lenguajes en general, ya sabeis no hay mucho que contar, es un lenguaje bastante funcional y bastante extenso que no necesita maquinas virtuales para traducir el codigo legible a lenguaje maquina y que puede ser ejecutado en la mayoria de plataformas existentes, nos permite hacer cantidad de cosas, como por ejemplo crear aplicaciones que requieran una conexion a internet, programar modulos para el kernel, o sencillamente crear aplicaciones con user GUI
Gambas.
Gambas nos permite crear sencillas aplicaciones con USER GUI facilmente (a lo visual basic), arrastrando y soltando componentes, podemos crear aplicaciones con acceso a datos persistentes ( bases de datos ), y su sintaxis es bastante entendible, las caracteristicas del entorno de desarollo de Gambas son bastante extensas, trae autocontemplado de codigo, coloreado de sintaxis, y ademas podemos “editar” las preferencias del IDE para que nos coloree el codigo de un color diferente, la ideologia de programacion como digo es la misma que la de visual basic POE (programacion orientada a eventos) y los que esteis familiarizados con VisualBasic no echareis nada de menos a visual basic con gambas ( bueno sí, los mas “curiosos” que embebeiais librerias del api de win32 con aplicaciones generadas con visual basic,no lo podeis hacer con gambas como es natural ).
A sí que bueno, a dsifrutar hay un monton de variantes por elegir.
Saludos, y a divertise se a dicho! ( : P ).
Add comment Febrero 20, 2009
