Eclipse GanyMade esta aquí

Hace un par de días, salio una nueva versión de la que es considerada una de las mejores IDE’s para desarrollar aplicaciones Java (si bien cuenta con soporte a muchos otros lenguajes por parte propia o de terceros.
Como hace un rato termine de rendir y queria probarlo, me dí el gusto y esto es lo que paso…

Luego de descomprimir el paquete universal para Linux que descargué de su página oficial, crear un enlace simbolico (o acceso directo para los que vienen de Windows) en mí escritorio al ejecutable, inice Ganymade por primera vez. Como es costumbre, me pregunto cual sería la carpeta para mi “workspace” para la cual elegí la misma carpeta que vengo usando para las versiones anteriores.

Todo resulto estar tal y como lo había dejado la última vez que cerre Europe (Algo que era de suponer) mismos archivos abiertos y mís proyectos estaban ahí tal cual los deje.
El primer cambio, a simple vista, es un boton en la barra de menús que realmente siempre me pregunte porque no existia, se trata del “Breadcumb”… cuya traducción literal sinceramente desconozco, pero nos permite tener una visión de la jerarquia que tiene la clase que estamos editando, (como si se tratara del Package explorer) pero en la propia ventana de edición. Comenzando desde la carpeta donde se encuentra nuestro proyecto, pasando por los paquetes y clases hasta llegar al metodo que estamos editando, si hacemos click en las flechas de alado, rapidamente vemos el resto de los elementos de esa categoria, algo muy útil que se suma al resto de las caracteristicas de Eclipse.

Lo otro nuevo que veo, es la posibilidad de movernos por un “historial” en cuanto a las clases que hemos estado editando, es decir, podemos ir atras, adelante e incluso lo mismo pero para errores, bookmarks, breakpoints, etc.
Creo que esto seria todo “para mí”, si bien vengo usando Eclipse para casi todo lo que sea Java ultimamente, todavía hay muchas caracteristicas que estoy descubriendo.
Si todavía no lo probaste, realmente lo recomiendo. Sobre todo si leemos el “Overview” que viene junto al programa (al cual accedemos mediante la pantalla de bienvenida) ya que la cantidad de herramientas y “facilidades” que nos brinda, son realmente increibles.

Por último, decir que si quieren descargarlo deben darse una vuelta por http://www.eclipse.org/downloads/packages/ y ademas recomiendo el resto del sitio que no tiene desperdicio.

La popularidad de los lenguajes de programación segun Tiobe – Junio 2008

Siempre es bueno, si estamos en el tema, tener conocimiento de los lenguajes de programación más usados, aunque sea a nivel estadístico. Esto puede ser crucial a la hora de elegir un determinado lenguaje para encarar cierto tipo de proyecto y que este no muera o quede estancado en el camino. Leyendo el blog de Fernando Bordignon por medio del feed de Codear, encontre una tabla elaborada por la empresa TIOBE, la cual esta elaborada en base a entrevistas con profesionales del medio y analisis de las busquedas de los buscadores web más usados. Como ellos mismos aclaran, estos datos no quieren decir que tan bueno sea un lenguaje o cuantas líneas de código hay escritas con cada uno, simplemente mostrar que tan “populares” son.

Algunas cosas que me llamaron la atención, primero, el aumento de la popularidad de Pascal respecto del año anterior, segundo que tanto Visual Basic como C# esten cayendo y tercero, la baja posición que tiene ActionScript. El resto de la tabla no revela nada que no me hubiera podido esperar en realidad, tanto Java, C y C++ se mantienen a la cabeza y Python esta en aumento…

Position
Jun 2008
Position
Jun 2007
Delta in Position Programming Language Ratings
Jun 2008
Delta
Jun 2007
Status
1 1 Java 20.890% +0.86% A
2 2 C 15.513% -0.45% A
3 3 C++ 10.806% -0.31% A
4 5 PHP 10.206% +1.33% A
5 4 (Visual) Basic 9.787% +0.46% A
6 6 Perl 5.548% -0.63% A
7 8 Python 4.899% +1.74% A
8 7 C# 4.058% +0.57% A
9 9 JavaScript 2.927% +0.31% A
10 10 Ruby 2.640% +0.51% A
11 13 Delphi 2.022% +0.45% A
12 14 D 1.445% +0.19% A
13 12 SAS 0.923% -0.84% A
14 11 PL/SQL 0.759% -1.26% A-
15 23 Pascal 0.596% +0.11% B
16 15 Lisp/Scheme 0.436% -0.23% B
17 17 Ada 0.421% -0.21% B
18 19 COBOL 0.379% -0.21% B
19 21 Lua 0.366% -0.21% B
20 24 ActionScript 0.341% -0.05% B

Fuentes: http://ferbor.blogspot.com
http://www.tiobe.com

Recomendado: FCKeditor

Al momento de armar un sistema que permita publicar contenido en una página web, ¿quien no desea un editor de texto que permita ser usado de la misma forma que usamos un editor de escritorio sin tener que escribir esas molestas etiquetas de HTML?
Eso es precisamente lo que nos ofrece FCKeditor. Un editor de texto WYIWYG, cuya apariencia hace recordar a Word, que podemos integrar en cualquier desarrollo web que estemos realizando. Con soporte para PHP, Python, ASP.Net, Perl y varios lenguajes más, resulta bastante sencillo tenerlo funcionando. Cabe aclarar que tiene soporte para la mayoria de los navegadores web e incluso aquellos que no lo soporten veran un simple cuadro de texto (aunque sin las opciones visuales) que nos permitira escribir usando HTML común y corriente.
Ademas de dar formato al texto que escribamos, nos permite subir imagenes a nuestro servidor e incorporarlas de forma sencilla a lo que estemos escribiendo e incluso guardar los archivos para continuar su edición posterior.

El metodo para incorporarlo a nuestro desarrollo, varía de acuerdo al lenguaje utilizado, pero básicamente, se trata de incorporar un archivo a nuestro código fuente e instanciar un objeto del editor dentro de un formulario y luego tomar las variables por medio de GET o POST (de acuerdo a como configuremos.

En cuanto a su licencia… es bastante amplio, si queremos usarlo en desarrollos abiertos, tenemos una licencia GPL, si queremos hacer un desarrollo cerrado, podemos usarlo con licencia LGPL pero tambien cuenta con una licencia paga, por si nuestra empresa lo solicita, en fin, no hay excusas para no usarlo.

Web Oficial: www.fckeditor.net/

Una "ojeada" a Jambi, primera parte

Aprovechando la salida de Qt Jambi 4.4 (de ahora en más, simplemente Jambi), me puse a echar una mirada a este conjunto de APIs tan interesante.
Mi idea con este post es contar un poco de que se trata Jambi e introducir un poco a la programación con las librerías QT en Java, para lo cual trabajare con un pequeño ejemplo en el cual armaremos un sencillo navegador web haciendo uso de la recientemente incorporada integración con el motor WebKit que incluye Jambi.

¿Que vamos a hacer?

La idea de este articulo/tutorial es ver dos cosas, por un lado, dar una introducción a la programación con Qt y luego armar un pequeño programa que haga uso de Jambi y de una de las nuevas características incluidas en la versión 4.4 que es la integración con WebKit.

Si bien cuando comencé a escribir esto, pensé en hacer todo un solo articulo, considere que seria mejor separarlo en 2 partes para no hacerlo excesivamente largo y molesto para quienes lo leen por medio de los feeds.

En esta primera parte, are una breve introducción a las librerías Qt/Jambi y el proceso para integrar Jambi con Eclipse (la forma más sencilla de utilizarlo)
En la segunda veremos ya como aplicar esto en una sencilla aplicación que utilice, como ya dije, un poco de los conceptos que veremos y la reciente integración con WebKit.

Por ultimo, me gustaría aclarar que ni por asomo soy un experto en Qt o Jambi, simplemente lo estoy usando para un pequeño proyecto que tenemos con unos compañeros de facultad y me parecio una buena forma de compartir lo que fuí aprendiendo sobre este tema y de paso asentar algunas cosas… así que sepan que esto esta propenso a errores ;)

¿Jambi, Qt… que es eso?

Para no divagar ni decir cosas que no son, simplemente copiare y pegare la definición de QT que existe en Wikipedia, quizá seria más adecuado usar la definición “oficial” pero mejor saltarnos todo la parte “marquetinera” (igualmente recomiendo su lectura, por razones obvias)

“Qt es una biblioteca multiplataforma para desarrollar interfaces gráficas de usuario.”

Qt, de manera nativa, usa el lenguaje de programación C++ y es acá donde entra en juego Jambi que es, precisamente, una implementación de dicha librería para el lenguaje Java. Otra característica importante de Jambi es la posibilidad de integrar código C++ en nuestras aplicaciones Java e incluso cuenta con una herramienta para “traducir” código C++ en Java. Para más información sobre esto último, recomiendo la lectura del whitepaper que se encuentra en la página de Qt.
Si bien se puede dar una definición un poco más compleja (y exacta) esto nos bastara por ahora. Para más información les recomiendo la comple ta (aunque desordenada) documentación oficial de Jambi: http://doc.trolltech.com/qtjambi

Entendiendo Qt

Como dije anteriormente, Jambi es una implementación en Java de Qt y por tanto, hereda toda la “filosofía” (por llamarlo de alguna manera) de este. Es por esto que debemos conocer algunas cosas respecto a la forma de “ver las cosas” que tiene Qt antes de ponernos a programar.

Sin entrar en tecnicismos, lo primero y principal es saber que para Qt, todo es un widget, desde un botón, hasta una ventana, e incluso podemos agrupar widgets y crear uno propio. Sin más, podemos decir que una aplicación Qt es un widget que a su vez contiene un conjunto de widgets en su interior que pueden estar formados por otro conjunto de widgets.

Estos widgets, se comunican unos a otros mediante lo que Qt llama “Signals and slots“, esto es, los widgets emiten señales (signal) que son tomados por un slot especifico de otro widget lo que provoca alguna acción.

Por ejemplo, tenemos un botón dentro de una ventana, que al hacer click en el provoca que la ventana se cierre. Esto podríamos explicarlo, diciendo que tenemos un widget del tipo “QPushButton” dentro de otro widget del tipo “QApplication” que emite una señal “clicked()” que es recibida por el slot “quit()” del widget QApplication.

Hablando, ahora sí, en forma un poco más técnica, podemos decir que QWidget es una clase abstracta que es heredada por todos los widgets que componen Qt (y aquellos que definamos nosotros). Es decir, que tanto nuestra aplicación, como el botón del que hablábamos, son objetos de las clases QApplication y QPushButton que heredan los métodos y propiedades de la clase QWidget.
O sea, que para incorporar widgets en nuestra aplicación, basta con que instanciemos un objeto de la clase de dicho widget (botones, cuadros de texto, ventanas, etc) y luego los mostremos.

Preparando todo

Bien, ahora que “sabemos” que es Qt y tenemos una mínima idea de con que nos vamos a encontrar, estamos con ganas de probar eso escribiendo algo, pero para eso, primero debemos preparar nuestro entorno antes de poder escribir (o mejor dicho ejecutar) algo.

Para simplificar un poco el proceso de descarga e instalación de estas librerías, recomiendo el uso del paquete de integración con Eclipse que podemos descargar desde su página oficial.
El proceso consiste, básicamente, en la descarga de dicho paquete para nuestra plataforma (linux32/64,Windows, etc), descomprimirlo en la carpeta donde tenemos instalado Eclipse, y luego ejecutar este último con la directiva “-clea n”. Una vez hecho esto, bastara con que configuremos las preferencias de Jambi dentro de Eclipse para que sepa en donde se encuentran instalados, para ello, dentro de Eclipse, nos dirijimos a Window >> Preferences y de ahí a “Qt Jambi preferences” e indicamos la ruta hacia el lugar donde instalamos las librerias, como se ve en la imagen,

Creo que hasta acá bastara con la introducción. En la continuación ya comenzaremos a escribir un poco de código para entender mejor todo esto. Desde ya, si te intereso lo que escribí, te insito a que no te quedes con estos “apuntes de estudiante” y recurras a la documentación oficial de Trolltech y que revises su página web completa, como dije, la documentación es completa, pero desordenada.

En los próximos días, la continuación…

Qt Jambi 4.4 liberado

Trolltech anunció el lanzamiento de Qt Jambi 4.4 ; la última versión de su framework para desarrollo de aplicaciones Java.
Esta nueva versión toma los beneficios de Qt 4.4 y permite a los desarrolladores Java programar aplicaciones web y multimedia utilizando la potencia de las librerias Qt.

Entre las nuevas caracteristicas de Qt Jambi 4.4 tenemos:

  • Integración con Webkit (potente motor de navegación)
  • Integración con Phonon, que nos permite reproducir y manipular videos y sonidos en nuestras aplicaciones.
  • Soporte para drivers JDBC como backend para las clases de Qt Jambi SQL

Algo muy interesante sin duda, que ya mismo saldré a probar.

Fuente: Kde.News

[HOWTO] Login y sesiones en PHP

Más de una vez nos encontramos con la necesidad de crear paneles de administración u otros sectores para nuestros sitios web que no deberían ser accesibles para cualquier usuario. La forma más cómoda de hacer esto es mediante sesiones que “rastreen” a un usuario que previamente haya introducido un usuario y una clave.
La razón por la que escribo esto, es que la primera vez que me enfrente a un problema similar a este, los howto’s que encontré sobre esto estaban bastante des actualizados o con algunas cositas que no me gustaron, pero bueno, de todo hice un rejunte y arme esto… si quieren aportar algo, sera muy bienvenido :)

Comenzaremos este mini HOWTO creando una base de datos en MYSQL que contendrá algunos datos de los usuarios, en nuestro caso únicamente su nombre y password, pero tranquilamente se pueden agregar otros datos como e-mail, fecha de nacimiento, etc.

  1. mysql> USE nombredb;
  2. DATABASE changed
  3. mysql> CREATE TABLE usuarios(
  4. -> id int(6) NOT NULL AUTO_INCREMENT,
  5. -> nombre varchar(20) NOT NULL,
  6. -> pass varchar(20) NOT NULL,
  7. -> PRIMARY KEY(id)
  8. -> );
  9. Query OK, 0 rows affected (0.10 sec)

Creo que no hay mucho que explicar de esta tabla, los campos son bastante explícitos, tenemos un campo “id” el cual sera usado para indexar a los usuarios, luego “nombre” donde ira, valga la redundancia, el nombre del usuario y “pass” donde guardaremos la clave del mismo.

Ahora comenzamos con los scripts en PHP.
Lo primero que necesitamos es algún modo de agregar usuarios a esa tabla que creamos. Pero antes que nada, como necesitaremos conectarnos varias veces a nuestra base de datos para recuperar sus valores, lo primero que haremos sera un script para conectarnos a la misma y así no tener que repetirlo.


  1. /*conexion.php, script usado para conectarnos a la base de datos
  2. que creamos anteriormente*/
  3. //Definimos las variables que contendrán los datos de la conexión
  4. $hostdb = "hostdeladb";
  5. $userdb = "usuariodelabd";
  6. $passbd = "passworddelabd";
  7. $bd = "nombredb";
  8. $cnt = mysql_connect($hostdb,$userdb,$passdb); //nos conectamos
  9. mysql_select_db($bd",$cnt); //seleccionamos la bd que usaremos
  10. ?>

De ahora en más, cuando necesitemos conectarnos a la bd, simplemente haremos “include(‘conexion.php’);”

Ahora crearemos el formulario de registro, para esto utilizaremos un form en html cuya acción estará en otro script al cual llamaremos agregar.php. Cabe aclarar que podemos meter el form y el control en un mismo archivo, yo los separo simplemente para que quede más claro que hace cada parte.


<form action="registro.php">

<fieldset>

<label for="user">Usuario:</label>

<input type="text" id="user" name="user"/>

<label for="pass">Clave:</label>

<input type="password" id="pass" name="pass" />

<input type="submit" name="button" id="button" value="Enviar" />

</fieldset>

</form>

Y ahora el script que agregará al nuevo usuario en nuestra base de datos. Para esto usaremos la función “mysql_query()” de PHP usando como parámetro la directiva “INSERT” de mySQL para insertar dentro de la tabla que creamos al principio el usuario y clave que acabamos de elegir controlando que no exista un usuario con el mismo nombre y controlando también que los campos no estén vacíos. El método que usare acá es fácilmente “violable”, dejo la seguridad a su cargo ya que no es el objetivo de esta guía.

    1. // agregar.php
    2. /*Controlamos que se haya elegido un valor para el usuario y la
    3. clave. Sabiendo que los mismos fueron completados, los
    4. procesaremos. Si no, redirijimos la página hacia el form de
    5. registro*/
    6. if(isset($_POST['user']) && ($_POST['user']
    7. != " " || $_POST['pass'] != " ") ) {
    8. //Nos conectamos a la base de datos
    9. include(conexion.php);
    10. //Declaro variables locales con el valor de las globales
    11. //obtenidas por el form
    12. $user = $_POST['user'];
    13. $pass = $_POST['pass'];
    14. //Haremos una consulta a la base de datos para saber si ya
    15. //existe un usuario con ese nombre
    16. $qry = mysql_query("select * from usuarios where nombre='$user'");
    17. if(mysql_num_rows($qry) != 0) /*Si el valor de mysql_num_rows
    18. no es 0, quiere decir que el usuario ya
    19. existe y por tanto no haremos nada*/
    20. echo "El usuario ya existe";
    21. else { //Si el usuario no existe lo incorporamos a nuestra base de
    22. //datos
    23. mysql_query("insert into usuarios(nombre,pass) values('$user',
    24. '$pass'));
    25. echo "Usuario agregado";
    26. }
    27. } else
    28. header("location: registro.html

Ahora que tenemos usuarios en la base de datos, necesitamos un form que nos permita
autentificarlos.
Para esto usaremos un form html exactamente igual al anterior aunque, si en el
anterior pediste otros datos ademas del usuario y el password, acá simplemente
pediremos estos dos ultimos.


<form action="login.php">

<fieldset>

<label for="user">Usuario:</label>

<input type="text" id="user" name="user"/>

<label for="pass">Clave:</label>

<input type="password" id="pass" name="pass" />

<input type="submit" name="button" id="button" value="Enviar" />

</fieldset>

</form>

El siguiente paso sera entonces, buscar al usuario en la base de datos y comprobar
que coincida con la clave que proporciono. Esto lo hacemos de forma similar al
control para registrarlo, efectuamos una consulta buscando el usuario y la clave y
vemos cuantas entradas nos devuelve mediante “mysql_num_row()” si nos devuelve 0,
quiere decir que el usuario y/o la clave proporcionadas no fueron correctos, caso
contrario, guardaremos el nombre del usuario en una variable de sesión, la cual
usaremos para control más adelante.

  1. //login.php
  2. //Nos conectamos a la base de datos
  3. include("conexion.php");
  4. //Iniciamos la sesión donde guardaremos las variables
  5. //Creamos variables locales con el contenido de las devueltas por el form
  6. $user = $_POST['user'];
  7. $pass = $_POST['pass'];
  8. //Realizamos la consulta a la base de datos y controlamos que nos devuelva
  9. //algun resultado
  10. $qry = mysql_query("select * from usuarios where nombre='$user' and
  11. pass='$pass'");
  12. if(mysql_num_rows($qry) !=0) {
  13. $_SESSION['user'] = $user; /*Declaramos una variable de sesión donde
  14. guardaremos el nombre del usuario
  15. para control*/
  16. header("location: private.php"); /* Nos vamos a la sección "privada"
  17. de nuestra página*/
  18. } else
  19. echo "El usuario y/o clave no son correctas";
  20. ?>

Por ultimo, crearemos la sección de nuestra página a la que queremos que
solo ingresen nuestros usuarios registrados.
Dentro de la misma, controlaremos que el usuario se haya logeado mediante la
variable de sesión $_SESSION[‘user’].

  1. //private.php
  2. session_start(); //Iniciamos la session
  3. if(isset($_SESSION[‘user’])) { //controlamos que la variable este declarada
  4. echo “Bienvenido $_SESSION[‘user’]!”; //Si el usuario esta logeado,
  5. //vera un mensaje de bienvenida
  6. else
  7. header(“location: ingresar.html”); //Si el usuario no esta logeado, regresara al
  8. //formulario de login
  9. ?>

Y con esto terminamos esta mini guía.
Si necesitamos otras páginas “privadas”, simplemente controlamos la misma variable.
Para deslogearnos, todo lo que tendremos que hacer es llamar en alguna página a la
función “session_destroy()”.
Hay que recordar también, que si nuestros usuarios cierran el navegador, la sesión
también se cerraran. Para resguardar las variables entonces, debemos hacer uso de
cookies, pero eso lo dejaremos para otra ocasión.
Por ultimo, hay que destacar que nuestro “sistema de registro y login” no tiene
ningún tipo de seguridad, las claves se almacenan y viajan libremente sin ningún
tipo de encriptación, así que es otro asunto pendiente ;)