Archive for the 'programación' Category

July 30th 2008

Python: Introducción

Muchos de los programadores de java simplemente se han quedado ahí, argumentando que tienen todo, estructuras bien definidas, miles de paquetes útiles, control sobre sockets, hilos, excepciones, y aplicaciones para todo ámbito, desde una simple aplicación de escritorio, pasando por aplicaciones para mobiles y hasta aplicaciones complejas multi-tareas, multi-usuarios, multi-sistemas.

Sin embargo, hoy en día, python nos proporciona estas mismas herramientas de una manera realmente sorprendente. ¿Por que digo sorprendente? La cosa es simple, una vez que empiezas a conocer python las cosas se ven de una manera clara y mas objetiva.

Python fue desarrollado por Guido van Rossum allá por los 90’s, un lenguaje de programación que ha evolucionado a lo largo de su trayecto, y es considerado multiparadigma, ya que este no forza al programador a una filosofía especifica y le dal la libertad completa en cuanto a un estilo de programación, llámese a este programación orientada a objectos, programación estructurada, o programación funcional.

Cabe mencionar que entre la filosofía de python se pretende obtener un código limpio, simple y legible.

Instalación

Windows

Solo basta con bajar la versión mas actual de python, instalarla y listo.

Descargar Python 2.5.2 para windows

Linux

Las distribuciones de Linux ya incluyen una versión de python instalada por default. Pero de cualquier manera, puedes bajar cualquier versión desde la pagina oficial.

Lista de Descargas Python 2.5.2

Aprendiendo Python

Modo Interactivo

Para empezar, abrimos una consola y escribimos python.

~$ python
Python 2.5.2 (r252:60911, Apr 21 2008, 11:12:42)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Cuando se esta leyendo desde una terminal (tty) que recibe ordenes se dice que estamos en modo interactivo, en este caso, ya estamos dentro del interprete de comandos de python representado por los símbolos “>>>”. Cuando existen lineas adicionales nos muestra “…”.

Vamos a ver el clásico ejemplo de “hola mundo” de manera interactiva.

>>> h="hola mundo"
>>> print h
hola mundo
>>>

También es una calculadora muy poderosa.

>>> 5 + (10*12.7)/2
68.5
>>>

Y podemos usar variables dentro de nuestras operaciones.

>>> x = 10
>>> 180 / 2 + x
100
>>>

Y por supuesto nuestro gestor de errores, por ejemplo, al darle un valor a una variable que comienza con un numero (debemos saber que ninguna variable puede comenzar con un numero).

>>> 1a = "error"
  File "<stdin>", line 1
    1a = "error"
     ^
SyntaxError: invalid syntax
>>>

Algo mas complejo? que tal esto.

>>> print ",".join([str(x) for x in range(10)])
0,1,2,3,4,5,6,7,8,9
>>>

¿Que función realizo la instrucción ‘print “,”.join([str(x) for x in range(10)])‘? bien, eso sería equivalente a el siguiente codigo en java.

for(int x;x<10;x++)
    System.out.print(x+",");

¿Sorprendente? bien pues en los próximos post’s intentare enseñarle al lector un poco mas de programación pythonesca.

Enlaces

3 Comments »

July 25th 2008

Aptana un IDE para el desarrollo de web.

Apatana es un nuevo entorno de desarrollo especializado, donde podrás programar diferentes lenguajes como php, ruby, JavaScript, etc. También podrás utilizarlo como editor de sintaxis SQL, lo mas útil de esta herramienta es que se especializa en programación de aplicaciones dinámicas web, utilizando Ajax he inclusive puedes utilizar el framework de Ruby on Rails, es una excelente opción sin duda alguna.

Este IDE supera por mucho a otros como NetBeans, esta opción la podemos trabajar en los sistemas operativos Windows y Linux, es muy sencilla de instalar, en Windows solo hay que ejecutar el .exe y darle el clásico siguiente … siguiente… siguiente.

Para Linux puedes descargarte el .tar.gz y descomprimirlo, después solo hay que darle doble click al ejecutable llamado Apatana, y listo ya estarás en el ambiente de trabajo de Apatana, podrás bajarte después plugins para trabajar con diferentes lenguajes y framework.

Espero les guste este magnifico IDE, hasta la próxima.

Para siempre me parece mucho tiempo.

1 Comment »

July 11th 2008

Una observación a Ruby y Ruby on Rails (RoR)

Que tal comunidad, en verdad bastante tiempo sin postear, pero bueno he aquí algo que me es interesante y he decidido compartir…

En algunos post de mis compañeros de ihtoa ya se ha hablado de este gran lenguaje de programación, un poco de su historia y sus excelentes características como lenguaje de programación, resumiendo rápidamente, ruby tiene una sintaxis muy fácil de entender y aprender, así como muy parecida a la de python. Este lenguaje ha venido ganando popularidad gracias al uso que a tenido sobre todo en la web, por medio del framework RoR y nadamas (creo yo).

Para los que nos lean y no sepan la diferencia de Ruby y RoR, ahí va rápido:

Ruby: Lenguaje de programación tal como Java o PHP, el cual es interpretado.

Ruby on Rails: Framework para desarrollar aplicaciones web siguiendo el patrón MVC(Modelo Vista Control) construido tomando como base a Ruby, tal como Struts(de java) o Symfony(de PHP).

Mucho se ha comentado acerca de Ruby y Ruby on Rails para el desarrollo de aplicaciones web orientadas a la web 2.0, en donde se habla de todas las bondades de que ruby tiene como lenguaje… haciendo a un lado a lenguajes potentes como PHP o aun mas J2EE :O . Un par de veces he oído “RoR supera fácilmente a PHP o Java”,...para comenzar la comparación es totalmente errónea, no podemos comparar un framework como RoR contra el lenguaje PHP… en todo caso sería

Ruby Vs PHP

Ruby Vs Java

…ó

Ruby on Rails Vs PHP On Zend Framework

Ruby on Rails Vs PHP On Symfony

Ruby on Rails Vs Struts On Java

Así si se puede ;)

Bien, durante una investigación que realice para cierta materia en mi escuela, me di a la tarea de profundizar en el lenguaje Ruby para averiguar que tanta verdad había. Ustedes y yo sabemos que en estos caminos de la informática no hay algo 100% bueno o como dicen 100% seguro, así que me di a la tarea de encontrarle algunos detalles al tal ruby… lo primero que hice fue aprenderlo hasta cierto punto para poder hacer pruebas y empezar a jugar cada vez mas serio con este…me di cuenta que es un lenguaje en verdad bastante poderoso, fácil de aprender y que implementa la POO de una forma excelente. Después de ello, empece a manejar un poco de RoR para probar que tal iban las cosas sobre web. Y me di cuenta que en verdad el desarrollar una aplicación web con el framework es bastante rápido y sencillo, y de verdad simplificaría las cosas en un proyecto a gran escala. Por otra parte no tuve la necesidad de estudiar mucho de PHP ya que amplia mente lo he usado en algunos trabajos incluyendo los frameworks para MVC de PHP.

Después investigue artículos indexados, noticias, etc. Sobre RoR y otros lenguajes y he aquí mis puntos de vista personales comenzando desde lo que yo creo que es pura publicidad hasta lo que yo creo que es verdad…

La publicidad :D

37signals (de RoR) hace una campaña en donde si bien no ataca agresivamente a PHP si lo hace con J2EE, tal ves no vea a PHP tan fuerte o quizás no quiere darle importancia.

Por otra parte PHP con Andi Gutmans tampoco ve a RoR peligrosamente o al menos tampoco lo demuestra pero dice algo así de: “Sentimos que PHP con Zend Framework es superior a RoR, y mientras otras personas lo vean de otra forma en cuanto a sus funcionalidades, definitivamente significa que Ruby estuvo siendo mejor publicitado.

El diseño ingenioso del sitio de RoR y el marketing viral usado por 37signals le dio a RoR un mejor boca a boca que a PHP. Afortunadamente, esto ayuda a elevar la imagen de Zend y a incitar aun mas el uso de su Framework.”

Si Ruby on Rails es lo mejor para web 2.0 debería ya haber muchas demostraciones y sitios web con este framework, pero no es así los ejemplos son contados y no digo ya el famoso “construya un blog en 15 minutos”, si no algo mas en serio, algo mas profesional. RoR ya tiene algo de tiempo y sus sitios son pocos sin mencionar que muchos de ellos son de la misma 37signals :S. (Se que el proyecto tal ves esta en sus fases iniciales y requiera cierto tiempo para crecer, pero mi objetivo es enfatizar lo que es hoy en día lo mas directo posible).

Potencia ;)

Muchos “developers” como ya dije, erróneamente dicen RoR es más organizado y rígido a la vez que PHP es mas flexible a la vez de desordenado.

Pero Ruby y PHP son lenguajes Scripting con propósitos parecidos, con algo de diferencia en los enfoques, estando ruby mas enfocado a POO y php con un sentido un poco mas estructurado. Pero la organización que Rails le brinda a ruby bien y fácilmente se la puede otorgar otro framework a php ;) .

Por otro lado una debilidad de ruby aveces poco conocida o no muy publicitada xD es su bajo rendimiento en cuanto a la velocidad de ejecución :O, pruebas se han hecho demostrando esto, y aveces es notable en una aplicación grande, ciertas pruebas que ralizé no reflejan mucho esta debilidad a menos que sugiera parámetros considerables.

Benchmarks en diversos equipos y varias rutinas señalan a Ruby como un lenguaje lento, en comparación con PHP4, y más lento aun en comparación a PHP5. Pero, posee una excelente gestión de memoria, superior a las 2 versiones de PHP en el mercado actual.

En mi opinión personal seria genial hacer uso de ambos lenguajes, por un lado tener a Ruby on Rails para cierta parte de la aplicación, aprovechando su gran simplicidad de desarrollo, pero contar con php para partes mas delicadas las cuales requieran respuestas mas veloces y optimas. Como siempre pienso, hay que usar y saber de todo…

Saludos,

Adrián Pastor López Monroy

2 Comments »

July 8th 2008

Gambas: Introducción

Introducción

Muchos de los programadores han usado Microsoft Visual Basic (en ellos me incluyo) para desarrollos rápidos y no tan entretenidos, sin embargo, este carece de algunos aspectos (creo que al menos hasta la versión 6.0) como una completa programación orientada a objetos, el correcto uso de manejo de errores (aquellos goto's eran peligrosos), estructuras de datos integradas y avanzadas, etc.

Como muchos de los desarrollos de software de Microsoft, Visual Basic también su competidor del lado del software libre llamado Gambas (ahora en su version 2.0.0).

Gambas es un lenguaje de programación libre derivado de BASIC que esta bajo licencia GNU GPL similar al Visual Basic de Microsoft, con una Interfaz Gráfica que al igual que VB nos permite arrastrar controles hasta el formulario, cambiarles el tamaño, posicion, las mismas propiedades, y programar en los eventos con esa peculiar y sencilla forma de BASIC.

Instalación

Para instalarlo desde Ubuntu solo basta teclear desde consola:

$ sudo apt-get install gambas2

y listo.

También lo puedes bajar de http://gambas.sourceforge.net/

Mi Primer Programa en Gambas

Al abrir Gambas nos preguntará si deseamos crear un nuevo proyecto o abrir uno existente, en este caso, como no hemos realizado nada, abriremos uno nuevo.

Después nos preguntará que tipo de proyecto, elegimos Aplicación gráfica QT sin seleccionar alguna opción por ahora.

Insertamos información del proyecto, como el nombre del proyecto y el titulo que este tendrá en nuestro formulario.

Una vez echo esto, ya podemos empezar a trabajar.

Agregamos los siguientes controles:

  • Un Label: con la propiedad texto “Desarrollando Software Libre”
  • Un PictureBox: con el nombre de “visor”
  • Tres objectos del tipo Slider, con nombre “rojo”, “verde”, “azul” respectivamente así como tres Label's que describen a los Slider's.
  • Un Textbox: con nombre “micolor”, y con texto “#000000”

Nuestro formulario se verá como en la siguiente figura (da click para ampliarla).

Ahora solo falta la parte de programación. La idea es que nuestro visor cambie de color con forme movemos los Slider's, mostrándonos en Hexadecimal el valor que le pertenece.

Lo primero que vamos hacer será programar una función que le cambie el color a nuestro visor, para ello vamos a la ventana de código dando doble click en cualquier parte de nuestro formulario.

Una vez ahí, creamos una función que se llamará change_color()

  1. PRIVATE FUNCTION change_color()
  2.   visor.BackColor = Color.RGB(rojo.Value, verde.Value, azul.Value)
  3.   micolor.Text = "#" & Format$(rojo.Value, "00") & Format$(verde.Value, "00") & Format$(azul.Value, "00")
  4. END

Esta función será llamada cada vez que alguno de nuestros Slider's cambie. Para ello, vamos a la ventana de nuestro formulario, damos click derecho sobre el Slider rojo y seleccionamos Evento -> Change.

Ahí llamaremos a la función change_color()

Nuestro código final estará así.

  1. ' Gambas class file
  2.  
  3. PUBLIC SUB _new()
  4. END
  5.  
  6. PUBLIC SUB Form_Open()
  7. END
  8.  
  9.  
  10. PRIVATE FUNCTION change_color()
  11.   visor.BackColor = Color.RGB(rojo.Value, verde.Value, azul.Value)
  12.   micolor.Text = "#" & Format$(rojo.Value, "00") & Format$(verde.Value, "00") & Format$(azul.Value, "00")
  13. END
  14.  
  15.  
  16. PUBLIC SUB rojo_Change()
  17.   change_color()
  18. END
  19.  
  20. PUBLIC SUB verde_Change()
  21.   change_color()
  22. END
  23.  
  24. PUBLIC SUB azul_Change()
  25.   change_color()
  26. END

Por último, solo nos falta probarlo, para ello, presionamos F5.

Y así es como se ve.

Enlaces:

http://es.wikipedia.org/wiki/Gambas

http://wiki.gnulinex.org/gambas

http://doc.ubuntu-es.org/Gambas

http://gambasdoc.org/help/comp?es

3 Comments »

May 19th 2008

Abrir aplicaciones con Java

El día de hoy vamos a ver como abrir una aplicación en Java, para eso tenemos que crear un objeto de la clase Process, esta clase representan el proceso del sistema que se crea cuando se utiliza el sistema en tiempo de ejecución para ejecutar comandos del sistema. El paquete java.lang implementa la clase Process y llamamos al método estático getRuntime () que devuelve el objeto de tiempo de ejecución asociado con el uso concurrente con Java que es método de la clase Runtime. El exec(comando) ejecuta el comando dado en el parámetro.

Código de ejemplo.

  1. public class AbrirAplicacionEnJava {
  2.  
  3. public static void main(String[] args) {
  4. try
  5. {
  6.  
  7. Process pro = Runtime.getRuntime().exec ("rundll32 SHELL32.DLL,ShellExec_RunDLL"+"c:\\Dev-Cpp\\devcpp.exe");
  8.  
  9. }
  10. catch (Exception e)
  11. {
  12. System.out.print("Error");
  13.  
  14. }
  15. }
  16.  
  17. }

Este ejemplo funciona para Windows si lo queremos hacer en Linux solo se cambiaría en el comando dado.

Espero les guste, sugerencias o dudas favor de comentarlas.

Para siempre…me parece mucho tiempo.

No Comments yet »

May 19th 2008

String o StringBuffer?

Muchas veces al programar considero muchas cuestiones, como lo es la rapidez, la eficacia del código, y la estabilidad.

En una de esas veces, al intentar programar la lectura de un archivo de texto con java, utilice la clase String para almacenar los caracteres al estilo cadena+=nuevacadena. El archivo era muy pequeño, por lo que la lectura del mismo se hacia a una velocidad considerable, así que incremente la cantidad de información para ver que tan rápido podía concatenar las cadenas.

Mi sorpresa fue grande, pues a considerar que la primer prueba con el archivo pequeño fue tan rápida que no imagine que al incrementar la información la operación pudiera complicarse y hacerse mas tardía.

Intente hacer otra cosa, sin embargo, opte por otra opción que es utilizar StringBuffer, así que hice pruebas para comparar velocidades entre String y StringBuffer.

Para ello, primero diseñe un programa que midiera el tiempo de ejecución, así que debía medir el tiempo antes de iniciar la operación y una vez terminada medirlo de nuevo en una nueva variable para después restarle el primer tiempo medido.

El código de medición quedará así.

main.java

  1. public class main {
  2.  
  3.     public static void main(String args[]){
  4.         double tini = System.currentTimeMillis();
  5.  
  6.             //operaciones o procesos
  7.  
  8.         double ttotal = System.currentTimeMillis() - tini;
  9.         System.out.println("Tiempo de ejecución: " + ttotal/1000 + " seg");
  10.     }
  11. }

En la linea donde esta el comentario "//operaciones o procesos" vamos a poner el proceso que queremos medir, así que me propuse a hacer otra clase que contuviera dos métodos, uno llamado MString(int n) para la clase String y otro llamado MStringBuffer(int n) para la clase StringBuffer. Ambos reciben un valor para n del tipo entero que contendrá el numero e concatenaciones que queremos hacer.

concatenacion.java

  1. public class concatenacion {
  2.  
  3.     public concatenacion(){
  4.  
  5.     }
  6.  
  7.     public void MString(int n){
  8.         String temp = new String("");
  9.         for(int k=0;k<n;k++)
  10.             temp+="1";
  11.     }
  12.     public void MStringBuffer(int n){
  13.         StringBuffer temp = new StringBuffer();
  14.         for(int k=0;k<n;k++)
  15.             temp.append("1");
  16.     }
  17. }

Ambos métodos MString y MStringBuffer son parecidos, ambos con un for de 0 a n, pero podemos darnos cuenta que la concatenación de String la realizamos de la forma temp+="1" y la de StringBuffer de la forma temp.append("1");

La clase main la modifique de esta manera para que me diera el tiempo para ambos procesos.

main.java

  1. public class main {
  2.  
  3.     public static void main(String args[]){
  4.         double tini;
  5.         double ttotal;
  6.         concatenacion temp;
  7.         int n=100;
  8.  
  9.         tini = System.currentTimeMillis();
  10.  
  11.             temp = new concatenacion();
  12.             temp.MString(n);
  13.  
  14.         ttotal = System.currentTimeMillis() - tini;
  15.         System.out.println("Tiempo de ejecución para String: " + ttotal/1000 + " seg");
  16.  
  17.         tini = System.currentTimeMillis();
  18.  
  19.             temp = new concatenacion();
  20.             temp.MStringBuffer(n);
  21.  
  22.         ttotal = System.currentTimeMillis() - tini;
  23.         System.out.println("Tiempo de ejecución para StringBuffer: " + ttotal/1000 + " seg");
  24.     }
  25. }

Donde n tendrá el numero de concatenaciones que haremos de "1", y en primera instancia le puse el valor de 100 para ver al diferencia.

Pruebas

Al correr main.java con n=100
Tiempo de ejecución para String: 0.0010 seg
Tiempo de ejecución para MString: 0.0 seg

Aquí la diferencia es mínima, nada notable, ahora hagamos una prueba mas.

Al correr main.java con n=10000
Tiempo de ejecución para String: 0.299 seg
Tiempo de ejecución para MString: 0.0020 seg

Aquí ya podemos ver una diferencia mas notable, pero que tal con la siguiente prueba.

Al correr main.java con n=100000
Tiempo de ejecución para String: 42.117 seg
Tiempo de ejecución para StringBuffer: 0.01 seg

Claramente vemos la diferencia de los tiempos.

Conclusión: para este tipo de cuestiones de concatenación de información (cadenas) muy grande, es preferible usar StringBuffer.

by: lesthack

3 Comments »

May 17th 2008

Hacer un PDF en Java

Vamos el día de hoy a explicar como crear un archivo PDF en Java, editar y darle formato al PDF para darle una presentación magnifica para nuestros trabajos.

Para realizar el archivo tenemos que ver primero la librería que nos ayudara a crear el PDF, en este caso usaremos iText, esta biblioteca nos permite crear y manipular archivos PDF, RTF y HTML en Java, y es una librería Open Source. La descargaremos desde aquí.

Ahora nos apoyaremos desde NetBeans 6.0, ahí añadiremos la librería solo vamos al proyecto, librerías y añadir jar.

Explicare brevemente el código necesario para crear y editar el PDF.

  1. /**importar los paquetes necesario*/
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import com.lowagie.text.Document;
  5. import com.lowagie.text.DocumentException;
  6. import com.lowagie.text.Paragraph;
  7. import com.lowagie.text.pdf.PdfWriter;</span>
  8.  
  9. public class ArchivoPDF {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. // 1. Se crea un objeto documento de la clase Document.
  14. Document documento= new Document();
  15.  
  16. try {
  17.  
  18. //2.Creamos el archivo PDF.
  19. PdfWriter.getInstance(documento, new FileOutputStream("archivo.pdf"));
  20.  
  21. //3. Abrimos el archivo PDF para poder editarlo.
  22. documento.open();
  23.  
  24. //4. Añadimos al objeto documento un párrafo.
  25. documento.add(new Paragraph("Hola mundo este es mi primer PDF"));
  26.  
  27. //5. Le añadimos el tamaño de la pagina.
  28. documento.setPageSize(PageSize.A3);
  29.  
  30. //6.Le damos una nueva pagina.
  31. documento.newPage();
  32. documento.add(new Paragraph("Este es una nueva pagina"));
  33. documento.setPageSize(PageSize.LETTER);
  34.  
  35. }
  36. catch(DocumentException de) {
  37. System.err.println(de.getMessage());
  38. }
  39. catch(IOException ioe) {
  40. System.err.println(ioe.getMessage());
  41. }
  42. // 6.Cerramos el documento.
  43. documento.close();
  44. }
  45. }

Espero que les guste el post, alguna duda comentala por favor.

Para siempre... me parece mucho tiempo.

2 Comments »

Next »