Presentando a El Goblin

Desde hace un par de semanas, comence a aprender Perl y para esto inicie un pequeño proyecto sobre un buscador de páginas web, sin más intenciones que obtener sitios y buscarlos mediante tags y principalmente, aprender a trabajar con Perl y otras herramientas.
Así fue que nacio “The Goblin Search Engine”. Una serie de scripts que permitian añadir sitios a una base de datos  (MongoDB) y luego buscarlos mediante los tags  (los cuales son obtenidos del sitio).

Habiendo avanzado ya un poco, me dispuse a darle un objetivo más “práctico” a este buscador para que no muera solamente en un puñado de código mal armado y es así como nace Goblin como proyecto personal.

¿En que consiste?

Actualmente, esta dividido en dos partes. “The Goblin server” y “The Goblin client”, conectados el uno con el otro mediante SOAP.
El primero, como ya dije, esta hecho completamente en Perl y es el encargado de agregar los sitios a la base de datos, realizar las busquedas y brindarle los resultados al cliente.
El segundo (el cliente) no es más que una API para poder acceder a los servicios del servidor (valga la redundancia).
Tambien junto con el cliente se incluye un script como ejemplo para usarlo.

¿Y el objetivo?

El objetivo sigue siendo aprender. Las ideas que tengo para implementar en Goblin son muchas y seguramente apareceran más sobre la marcha.
De momento, es solamente un pseudo buscador de páginas web indexadas en una BD que no esta pensado bajo ningun punto de vista para usarlo en producción (aunque bien podría servir como base).
Sin dudas, el siguiente paso sera hacerlo más robusto, actualmente es bastante inestable y “facil de romper”  ademas, claro, que carece de muchas caracteristicas que podrian considerarse un “must” en este tipo de apps. Vamos, que hay que mejorarle TODO.

En conclusión. La idea de este post era solamente comentar sobre Goblin. No recomiendo su uso actualmente, pero el código esta ahí listo para que lo bajen y hagan lo que quieran con el (bueno, siempre que la GPLv3 lo permita ;) )

Por último, quiero agradecer a @guitarrear por impulsarme a aprender Perl y por consiguiente, a comenzar ese humilde proyecto :)

http://github.com/tehsis/Goblin

Simphple Gallery 0.1 – Galeria de imagenes simple con PHP

Bueno… bastante hace ya de mí último post… espero poder dedicarle más tiempo a esto en estos días, aunque no prometo nada.

Hace unos días para una web que estoy armando, necesitaba hacer una galería de imágenes de forma que el usuario pueda agregar y sacar imágenes a su antojo y como buscando por la web me encontré con varías galerías que usaban AJAX o Flash, decidí armar una donde predomine la simpleza.

El script esta hecho enteramente en PHP de forma que no dependa del navegador que estemos usando para poder visualizarlo correctamente.

Para usarlo, solamente deben crear un directorio llamado “img/” en el mismo lugar que donde tienen el archivo gallery.php (aunque pueden cambiarlo modificando dicho archivo) y meter allí las imágenes que quieren que formen parte de la galería. Luego incluyen el script mediante:

 
<?php include("gallery.php"); ?>

Dentro de su página o bien crean un link directo al mismo.

Al comienzo del código fuente, van a poder encontrar las variables que pueden modificar para poder “personalizar” el script, tal como el directorio desde el cual se tomaran las imágenes, el ancho y largo con el que seran mostradas y los textos que hacen de link a las imágenes anterior y siguiente (de forma que sea sencillo traducirlo).

Las imágenes son redimensionadas por medio de HTML. Sé que podría usar gd para que no pierdan tanta calidad, pero 1-Nunca use gd 2-Por el momento preferí que los requisitos para usar el script sean los menos posibles.

El script no genera ningún estilo CSS ni nada que se le parezca. Esto fue adrede para que podemos agregar uno de nuestra propia manufactura simplemente envolviendo nuestro include con las correspondientes etiquetas. Por ejemplo:

 
<div id='gallery'>

<?php include("gallery.php"); ?>

</div>

Tengan en cuenta que de momento, no hay ningún filtro para los archivos dentro del directorio que contiene las imágenes así que asegurense de meter allí solamente archivos de imágenes (.jpg,.png,etc) si no quieren resultados raros.

Posiblemente más adelante agregue esto junto con el redimensionamiento de imágenes via gd… ya veremos que sale. Por el momento, solamente quería compartir esto que arme para mí uso personal esperando que a alguien más le pueda servir.

Sin más, el link de descarga:

Descargar:  Simphple Gallery 0.1

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/

[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 ;)