Archive for the 'Programación' Category

Obtener una fila aleatoria en una consulta de MySQL con RAND()

Viernes, Febrero 1st, 2008

Para obtener un resultado aleatorio de una tabla en MySQL podemos utilizar la función RAND(),

SELECT *
FROM nombre_tabla
WHERE condicion
ORDER BY RAND()
LIMIT 1;

La función RAND() genera una serie de números aleatorios que irá comprobando contra los registros de nuestra tabla hasta que encuentra uno y lo devuelve (el número de registros devueltos se fija mediante la cláusula LIMIT)

La versión para Drupal:

$sql = "SELECT *
FROM {nombre_tabla}
WHERE condicion
ORDER BY RAND()";
$result = db_query_range($sql,1);
$data = db_fetch_object($result);

Nota: También se puede utilizar RAND(NOW()) o RAND(UNIX_TIMESTAMP())

Esta es una solución ideal para tablas pequeñas, si tenemos problemas de rendimiento, deberemos ser un poco más creativos
(more…)

Redirección de dominio (301) usando htaccess

Miércoles, Enero 2nd, 2008

Hemos tenido que migrar de servidor Portal Nissan (www.portalnissan.com) y, mientras nuestro proveedor de dominios realizaba las modificaciones de DNS para reapuntar el hosting, hemos optado por redirigir todas las llamadas a un dominio auxiliar.

Para ello utilizamos esta sentencia en el .htaccess del servidor a migrar:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*) http://www.bellatriubonsai.com/$1 [R=301,L]
</IfModule>

Donde http://www.bellatriubonsai.com/ es el dominio auxiliar que queráis utilizar.

Más información sobre el .htaccess, mod rewrite y la redirección 301, aquí: http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html aquí: http://www.isitebuild.com/301-redirect.htm y aquí: http://corz.org/serv/tricks/htaccess2.php

How to: Instalar y configurar un Sandbox para Drupal con Eclipse y CVS

Viernes, Noviembre 23rd, 2007

En estas entradas, voy a intentar resumir cómo hemos instalado nuestro sandbox para tener las versiones de los proyectos, principalmente de Drupal, controladas mediante CVS. Nuestro entorno de desarrollo consiste en un servidor con Debian 4 y los clientes con Ubuntu 7.10.

Pasos a realizar en el servidor:

Pasos a realizar en los clientes:

El Servidor DNS y la configuración de Apache los necesitaremos para poder acceder a nuestras webs en LAN mediante http://nombredelaweb.nombredeldominio.extension y así nos evitaremos problemas con las rutas que sí tendríamos con http://localhost/nombredelaweb

Partimos de una instalación de Mysql, Apache2 y PHP. Podéis encontrar tutoriales de como instalar estos componentes (LAMP) aquí: https://help.ubuntu.com/community/ApacheMySQLPHP

Configuración de CVS en Eclipse.

Jueves, Noviembre 22nd, 2007

Eclipse viene con el plugin CVS incorporado, por lo que no deberemos instalar nada para comenzar a trabajar con CVS. Este post pretende ser una guía introductoria de cómo trabajar con Eclipse y CVS, cómo hacer checkout, subir ficheros al repositorio y actualizarlos.

Antes de esto, dos parámetros muy necesarios de configuración:

Para que se muestre la consola siempre que se ejecute un comando CVS, para poder comprobar si ha habido errores o no en la última operación:

cvs_console.png

Para que, cuando se realice un checkout, los ficheros se bajen en Read-Only, deberemos seleccionar la opción Configure projects to use Watch / Edit on Checkout como muestra la imagen.

cvs_edit.png

Muy importante para trabajo en grupo, configurando esta opción, Eclipse se encarga de realizar el edit los ficheros cuando los modificas. Además, el resto de los desarrolladores sabrán si el fichero está siendo o no modificado mediante la opción Team » Show Editors. Si el notify está activado, también se recibirán notificaciones vía mail.

(more…)

Configuración de Apache para utilizar Drupal en multisite.

Jueves, Noviembre 22nd, 2007

Para utilizar Drupal en modo multisite, es decir, utilizar una sola instalación del motor de Drupal para varias webs, a partir de la versión 5, se puede configurar a través del directorio sites/ y la configuración de Virtual Host de Apache

Si la web ya está funcionando en Drupal, se pueden saltar los siguientes pasos referentes a la descarga e instalación de Drupal y realizar la configuración de Apache, si no, podemos conseguir Drupal bien descargándonoslo a través de la página o directamente a través de CVS, mediante la sentencia:

# cvs -z6 -d:pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal checkout -r DRUPAL-5-3 drupal

Tres pinceladas sobre esta sentencia, la cláusula -z6 es para que realice la descarga en modo comprimido y de esta forma consuma menos ancho de banda, -r DRUPAL-5-3 indica la rama que queremos descargar, debemos ser cuidadosos, ya que si no podemos nada, o usamos la rama principal HEAD, descargará la última versión, a día de hoy, la beta de Drupal 6. Se puede echar un vistazo al repositorio CVS de Drupal a través de http://cvs.drupal.org/viewvc.py/drupal , también es posible descargar modulos accediendo al repositorio de los mismos (cvs.drupal.org:/cvs/drupal-contrib). Por último, esta sentencia nos descargará la versión indicada de CVS en un subdirectorio drupal del directorio actual, si queremos que se descargue en otro directorio, deberemos incluir la cláusula -d ruta utilizando siempre rutas relativas.

Para instalar Drupal, necesitamos crear una base de datos y un usuario con privilegios para ejecutar las sentencias, ejemplos en MySql de la creación de la base de datos y del usuario:
CREATE DATABASE nombre_bbdd;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,INDEX,
ALTER,CREATE TEMPORARY TABLES, LOCK TABLES ON nombre_bbdd.*
TO ‘usuario_bbdd‘@’localhost’
IDENTIFIED BY ‘password’
;

(more…)

Instalación de un servidor CVS.

Miércoles, Noviembre 21st, 2007

Una vez configurado el Apache, vamos con la instalación de CVS.

Antes de instalar el motor de CVS (incluye servidor y cliente), deberemos comprobar si ya está presente en nuestro sistema, si tenemos Ubuntu, es muy probable que ya lo tengamos instalados, simplemente debemos escribir en la linea de comandos:

cvs

Si nos devuelve algo como esto, es que ya lo tenemos instalado:

Usage: cvs [cvs-options] command [command-options-and-arguments]
where cvs-options are -q, -n, etc.
(specify –help-options for a list of options)
where command is add, admin, etc.
(specify –help-commands for a list of commands
or –help-synonyms for a list of command synonyms)
where command-options-and-arguments depend on the specific command
(specify -H followed by a command name for command-specific help)
Specify –help to receive this message

The Concurrent Versions System (CVS) is a tool for version control.
For CVS updates and additional information, see
the CVS home page at http://www.nongnu.org/cvs/ or
the CVSNT home page at http://www.cvsnt.org/

Si no, deberemos instalarlo, mediante esta sentencia:

apt-get install cvs

El siguiente paso será elegir la ruta donde vamos a situar nuestro repositorio de cvs y crearlo, se hace con un simple comando:

cvs -d /ruta_del_repositorio init

(more…)

Configuración del Servidor Apache para trabajar con Virtual Hosts.

Miércoles, Noviembre 21st, 2007

Una vez configurado el servidor DNS para la LAN, ya podemos configurar el servidor Apache (estamos usando apache versión 2 en este caso) para que acceda a subdominios del tipo nombresite.local.neurotic (nuestro nombre de dominio en local).

Si no tienes Apache 2 instalado, en Debian o Ubuntu, puedes instalarlo mediante esta sentencia:

apt-get install apache2

La ruta de instalación por defecto es /etc/apache2

En el fichero httpd.conf se debe incluir la siguiente línea:
include /ruta_del_fichero/Vhosts.conf
Nota: la ruta del fichero Vhosts.conf puede estar en el mismo /etc/apache2/conf.d/ o en cualquier directorio accesible.

Y el fichero Vhosts.conf deberá tener el siguiente formato:

namevirtualhost *:80
<VirtualHost *:80>
ServerName web1.local.neurotic
DocumentRoot /ruta_de_la_web_1
</VirtualHost>
<VirtualHost *:80>
ServerName web2.local.neurotic
DocumentRoot /ruta_de_la_web_2
</VirtualHost>

(more…)

Instalación de un servidor DNS (Bind9) en Debian.

Miércoles, Noviembre 21st, 2007

Este documento es parte de los pasos para instalar y configurar un Sandbox para Drupal con Eclipse y CVS.

Si has llegado aquí, pero no sabes lo que es un servidor DNS, echale un vistazo a la wikipedia.

Para instalar el BIND (Berkeley Internet Name Domain):

apt-get install bind9

Ojo: Si el sistema lleva tiempo sin actualizarse será necesario realizar un apt-get update y luego instalar el bind.

Una vez finalizada la instalación, deberemos editar el fichero /etc/bind/named.conf.options para indicarle las direcciones de los DNS proporcionados por el ISP (en este caso Telefónica), en forwarders, también se debe descomentar la línea query-source address * port 53; y se debe añadir la sentencia dnssec-enable yes;

options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you might need to uncomment the query-source
// directive below. Previous versions of BIND always asked
// questions using port 53, but BIND 8.1 and later use an
//
unprivileged port by default.
query-source address * port 53;
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses
//
replacing the all-0's placeholder.
forwarders {
80.58.61.250;
80.58.61.254;
};
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
dnssec-enable yes;
};

(more…)

Buscamos programador php en barcelona

Jueves, Mayo 31st, 2007

Neurotic busca a alguien que le apasione programar, que esté enamorado de internet y que no quiera hacer horas extras ni pasarse el día en el trabajo para cubrir una plaza presencial en Barcelona de programador de aplicaciones web basadas en Drupal.

Ofrecemos:

- una jornada laboral de 32 horas semanales (7 horas de lunes a jueves y 4 el viernes) dentro de nuestro horario (de 9 a 18 de lunes a jueves y de 9 a 14 los viernes)
- contrato laboral con un sueldo según valía entre 1.000 y 1.500 euros netos mensuales (14 pagas)
- participar en una empresa con una gran diversidad de proyectos, desde trabajos serios (normalmente de clientes) a tonterías propias como el bushcador.com
- trabajar con software libre
- estar en una empresa con grandes posibilidades de crecimiento (somos tan pequeños que sólo podemos crecer)
- la garantía de no tener que hacer horas extras
- un buen ambiente de trabajo, mejor que en los sitios que dicen que hay buen ambiente de trabajo (mmm, ¿entonces ambiente -> oo?)
- trabajar en el centro de barcelona, en una oficina acogedora (es decir, pequeña)

Si sabes:

- programar en php
- sql y bases de datos (especialmente MySql)

Además se valorará:

- conocimientos de Drupal
- conocimientos de otros lenguajes de programación (Ruby, Python, Perl, Ook!…)
- capacidad para el trabajo en equipo
- soltura con la documentación de código
- facilidad en el aprendizaje

Si estás interesado envíanos un mail con el asunto “Programador Neurotic” a global@neuroticweb.com con:

- datos personales típicos (nombre, edad…)
- experiencia y trabajos realizados (relacionados con la programación)
- perfiles en flickr, del.ici.ous, foros, etc.
- que modulo de Drupal usarías para mostrar imágenes y porqué
- proyectos de software libre que te gusten y porqué

N:FVCBARFRARYPHRECBQRYRZNVY”IVAV,IVQV,IVAPV”GVRARFHACBFVGVIB.CBESNIBEABGRPUVIRF

cssCheckbox mejorado ligeramente

Miércoles, Marzo 14th, 2007

Para una web hemos decidido usar un script llamado cssCheckbox para jquery que reemplaza los checkboxes por imágenes más bonitas. Es bastante simple y funciona si javascript está desactivado pero tiene un par de cosillas que hemos mejorado:

  1. Usa dos imágenes para el checkbox, una para el activado y otra para el no activado. Es mejor usar la técnica de la ventana donde es la misma imagen la que tiene los dos estados y así conseguirmos una precarga de la segunda imagen (tal como estaba la primera vez que hacías click había que esperar a que la imagen se cargara)
  2. Si desactivas javascript se ve el input y la imagen. Esto ocurre por que se le aplica el estilo al label directamente. Es mejor que sea el css el que aplique a los label la clase “unchecked” y así cuando no se tiene javascript no se ve nada raro

Los cambios:

Para el plugin de jquery:
jQuery.fn.cssCheckbox = function () {
jQuery("input[@type='checkbox'] + label", this)
.each( function(){
if ( jQuery(this).prev()[0].checked )
jQuery(this).addClass("checked");
else
jQuery(this).addClass("unchecked");

})
.hover(
function() { jQuery(this).addClass("over"); },
function() { jQuery(this).removeClass("over"); }
)
.click( function() {
jQuery(this)
.toggleClass("checked")
.prev()[0].checked = !jQuery(this).prev()[0].checked;
jQuery(this)
.toggleClass(”unchecked”)
.prev()[0].checked == jQuery(this).prev()[0].checked;
})
.prev().hide();
}

Para el archivo de css:
label {
padding-left: 25px;
cursor: pointer;
}
label.unchecked {
background: url(/imagenes/checkbox_on_off.gif) no-repeat;
background-position: 0 -34px;
}
label.checked {
background: url(/imagenes/checkbox_on_off.gif) no-repeat;
background-position: 0 0;
font-weight: bold;
}
label.over {
color: black;
}

Todo lo otro es lo mismo que en http://kawika.org/jquery/cssCheckbox/. Para finalizar os dejo una demo

David de maskotas.es (creo) ha dejado en los comentarios la versión para cssRadio

jQuery.fn.cssRadio = function () {

var context = this;

jQuery("input[@type='radio'] + label", this)
.each( function(){
if ( jQuery(this).prev()[0].checked )
jQuery(this).addClass("checked");
else
jQuery(this).addClass(”unchecked”);

})
.hover(
function() { $(this).addClass(”over”); },
function() { $(this).removeClass(”over”); }
)
.click( function() {
jQuery(”input[@type=’radio’] + label”, context)
.each( function() {
jQuery(this)
.removeClass()
.addClass(”unchecked”)
.prev()[0].checked = false;
});
jQuery(this)
.addClass(”checked”)
.prev()[0].checked = true;
})
.prev().hide();
}