domingo, 11 de noviembre de 2012

Aceleración Gráfica con Intel en Debian Squeeze


En general, el controlador de gráficos Intel está bien integrado en las distribuciones de Linux por tanto los usuarios no tienen que preocuparse acerca de la instalación manual del controlador.

¿Por qué este artículo?

Algunas personas me han comentado que tienen problema con la aceleración 3D con estas tarjetas. No deberían tenerlo. La intención del presente artículo es mostrar como restablecer la configuración estándar de un equipo con una controladora de video Intel, como medio para habilitar la aceleración 3D.

Antes de continuar debes estar seguro de que tu equipo tiene una controladora Intel. Ejecuta el siguiente comando y analiza el resultado.
$ lspci | grep VGA

Si tu tarjeta es Intel obtendrás una salida semejante a esta:
00:02.0 VGA compatible controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)

Eliminando cosas que pueden estar afectando

Si existe el archivo "xorg.conf" hay que eliminarlo (por el momento lo vamos a renombrar, por si luego lo ocupas).
$ sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf_backup

Luego hay que eliminar una serie de paquetes que si estuvieran instalados nos impedirán conseguir la aceleración 3D con Intel.
$ sudo apt-get remove xserver-xorg-video-nouveau libdrm-nouveau1 nvidia-kernel-common nvidia-vdpau-driver libgl1-nvidia-glx xserver-xorg-video-nv libgl1-nvidia-alternatives libglx-nvidia-alternatives libvdpau1

Aunque para lograr la aceleración gráfica vamos a necesitar “mesa-utils”, de momento vamos a desinstalar este paquete.
$ sudo apt-get remove mesa-utils

Instalamos driver Intel para el servidor gráfico
$ sudo apt-get install xserver-xorg-video-intel

Ahora si vamos a instalar "mesa-utils" para conseguir la aceleración gráfica (con la nueva instalación los enlaces simbólicos se recrearan apuntando hacia el driver Intel)
$ sudo apt-get install mesa-utils

Por ultimo reciamos el servidor gráfico (si lo prefiere puede reiniciar el equipo)
$ sudo /etc/init.d/gdm3 restart

Puede comprobar que ahora tiene aceleración gráfica con el siguiente comando
$ glxinfo | grep direct

Si conseguiste la aceleración gráfica, deberías obtener la siguiente salida
direct rendering: Yes

Thunderbird 16 en Debian Squeeze 6.0.5


En la presente entrada les explico como instalar correctamente Thunderbird 16.0.2 en nuestro querido Debian Squeeze 6.0.5. Esta es una instalación manual, sin intermediación del gestor de paquetes de Debian.

Lo primero es descargar Thunderbird desde Mozilla, al momento de escribir esta entrada la ultima versión era la 16.0.2
$ wget -c http://download-origin.cdn.mozilla.net/pub/mozilla.org/thunderbird/releases/16.0.2/linux-i686/es-ES/thunderbird-16.0.2.tar.bz2

Vamos a crear un directorio para descomprimir la aplicaciones de Mozilla que utilicemos e instalemos con este método
$ sudo mkdir /opt/mozilla -p

Movemos el archivo descargado a la ubicación creada anteriormente
$ sudo mv thunderbird-16.0.2.tar.bz2 /opt/mozilla/

Nos desplazamos al directorio recién creado
$ cd /opt/mozilla/

Y ahí descomprimimos el archivo
$ bzip2 -dc thunderbird-16.0.2.tar.bz2 | sudo tar -xv

Eliminamos el archivo descargado
$ sudo rm thunderbird-*

Salimos del directorio opt y vamos a nuestro home
$ cd ~

Ahora vamos a crear un enlace a Firefox en bin
$ sudo ln -sf /opt/mozilla/thunderbird/thunderbird /usr/bin/thunderbird

Lo siguiente es crear un lanzador para nuestro nuevo Thunderbird (vamos a valernos de uno que ya he preparado para ustedes). Con el siguiente comando se descarga y coloca donde debe ir para que les aparezca en el menú de Gnome.
$ wget http://tecnologiasmym.com/blog/downloads/thunderbird.desktop && sudo mv thunderbird.desktop /usr/share/applications/

jueves, 26 de julio de 2012

Sudoers en Debian, Ubuntu y Slackware


En el presente artículo explicaré como dar permiso a un usuario de hacer tareas administrativas con el comando sudo en las distribuciones de GNU/Linux Debian, Ubuntu y Slackware.

Con esto resolvemos: "user is not in the sudoers file. This incident will be reported" (Que nos dice que el usuario no está en el archivo sudoers.)

GNU/Linux Debian

En Debian el grupo "sudo" ya está en el archivo sudoers, por lo tanto todos los usuarios que pertenezcan a este grupo tendrán permiso de hacer sudo. Lo que hace falta es agregar a los usuarios a este grupo.

Así luce la entrada en archivo sudoers de Debian
# Members of the sudo group may gain root privileges %sudo ALL=(ALL) ALL

Para agregar el usuario al grupo sudo, primero nos hacemos root, con el comando su, hay que introducir la contraseña de root.
$ su

Luego agregamos el usuario al grupo "sudo" de la siguiente manera
# gpasswd -a misuario sudo
Lo que hace falta después es cerrar la sesión del usuario que acabamos de agregar al grupo "sudo" y al volver a iniciar la sesión ya tendrá el derecho de ejecutar comandos con privilegios elevados por medio de sudo.

Para revocar el permiso de hacer sudo, se elimina a el usuario del grupo "sudo", ejecutando el siguiente comando como root
# gpasswd -d misuario sudo


Ubuntu

En Ubuntu el grupo "admin" ya está en el archivo sudoers, por lo tanto todos los usuarios que pertenezcan a este grupo tendrán permiso de hacer sudo. Lo que hace falta es agregar a los usuarios a este grupo.

Así luce la entrada en archivo sudoers de Ubuntu
# Members of the admin group may gain root privileges %admin ALL=(ALL) ALL

Para agregar el usuario al grupo admin (desde un usuario ya sudoer (En Ubuntu el usuario que creamos durante la instalación siempre es sudoer))
$ sudo gpasswd -a misuario admin
Lo que hace falta después es cerrar la sesión del usuario que acabamos de agregar al grupo "admin" y al volver a iniciar la sesión ya tendrá el derecho de ejecutar comandos con privilegios elevados por medio de sudo.

Para revocar el permiso de hacer sudo, se elimina a el usuario del grupo "admin", ejecutando el siguiente comando como root
# gpasswd -d misuario admin


Slackware

Al igual que en Debian y Ubuntu, Slackware también tiene un grupo de administradores del sistema (por decirlo de alguna forma), en Slackware este grupo se llama "wheel" y tambien tiene una entrada en el archivo sudoers, pero está comentada (lo que quiere decir que el sistema la ignora).

Así luce la entrada en archivo sudoers de Slackware
# Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL
Para habilitarla hay que descomentarla (quitarle el # que antecede la segunda linea).

Para editar el archivo y descomentar la linea debes ejecutar como root el siguiente comando
# nano /etc/sudoers
Buscamos la linea indicada arriba y la descomentamos. Para guardar los cambios presionar Ctrl+O y para salir Ctrl+X.

El paso siguiente es proceder a agregar el usuario al grupo wheel
# gpasswd -a misuario wheel
Lo que hace falta después es cerrar la sesión del usuario que acabamos de agregar al grupo "wheel" y al volver a iniciar la sesión ya tendrá el derecho de ejecutar comandos con privilegios elevados por medio de sudo.

Para revocar el permiso de hacer sudo, se elimina a el usuario del grupo "wheel", ejecutando el siguiente comando como root
# gpasswd -d misuario wheel


Un poquito de humor para terminar este artículo


miércoles, 25 de julio de 2012

Firefox 14 en Debian Squeeze 6.0.5


En la presente entrada les explico como instalar correctamente Firefox 14.0.1 en nuestro querido Debian Squeeze 6.0.5. Esta es una instalación manual, sin intermediación del gestor de paquetes de Debian.

Lo primero es descargar Firefox desde Mozilla, al momento de escribir esta entrada la ultima versión era la 14.0.1
$ wget -c http://mirror.us.leaseweb.net/mozilla/firefox/releases/14.0.1/linux-i686/es-ES/firefox-14.0.1.tar.bz2

Vamos a crear un directorio para descomprimir la aplicaciones de Mozilla que utilicemos e instalemos con este método
$ sudo mkdir /opt/mozilla -p

Movemos el archivo descargado a la ubicación creada anteriormente
$ sudo mv firefox-14.0.1.tar.bz2 /opt/mozilla/

Nos desplazamos al directorio recién creado
$ cd /opt/mozilla/

Y ahí descomprimimos el archivo
$ sudo bzip2 -dc firefox-14.0.1.tar.bz2 | sudo tar -xv

Eliminamos el archivo descargado
$ sudo rm firefox-*

Salimos del directorio opt y vamos a nuestro home
$ cd ~

Ahora vamos a crear un enlace a Firefox en bin
$ sudo ln -sf /opt/mozilla/firefox/firefox /usr/bin/firefox

Lo siguiente es crear un lanzador para nuestro nuevo Firefox (vamos a valernos de uno que ya he preparado para ustedes). Con el siguiente comando se descarga y coloca donde debe ir para que les aparezca en el menú de Gnome.
$ wget http://tecnologiasmym.com/blog/downloads/firefox.desktop && sudo mv firefox.desktop /usr/share/applications/

Listo ya tenemos nuestro flamante Firefox 14 instalado.

miércoles, 18 de julio de 2012

Instalar tarjeta de video nVidia en Debian Squeeze


El driver libre para este tipo de controladoras es el Nouveau, el cuál va bastante bien si no se requiere aceleración 3D (La aceleración 3D de Nouveau todavía es muy básica). Este post va orientado a quienes desean utilizar el driver privativo en lugar del driver libre.

Instalando el controlador privativo


Lo primero que vamos a hacer el desactivar el driver Nouveau
# nano /etc/modprobe.d/blacklist.conf

Al final del archivo agregamos la siguiente linea, con la cuál evitaremos que Nouveau se cargue automáticamente al reiniciar el equipo
blacklist nouveau

Para descargarlo en este momento, sin reiniciar el equipo, introduce el siguiente comando
# modprobe -r nouveau

Ahora vamos a remover el driver Nouveau completamente
# apt-get remove xserver-xorg-video-nouveau

Para instalar el driver privativo de nVidia debemos agregar una nueva dirección al sources list
# nano /etc/apt/sources.list

Y al final del archivo agregamos la siguiente linea
deb http://ftp.debian.org/debian/ squeeze main contrib non-free

Actualizamos la lista de paquetes disponibles ejecutando
# apt-get update

Para instalar el driver y unas utilerías de nVidia introduce el siguiente comando
# aptitude install -y nvidia-kernel-$(uname -r) nvidia-glx nvidia-xconfig nvidia-settings
En el comando de arriba "uname -r" es para recuperar la versión de Kernel y lo estamos concatenando al nombre del paquete para instalar el módulo adecuado.

Luego debemos generar el archivo /etc/xorg.conf, para hacerlo automáticamente con la utilería que antes instalamos, introduce el siguiente comando
# nvidia-xconfig

Y listo ahora solo queda reiniciar para que se cargue el nuevo driver, o bien si no tenias la X iniciadas puedes cargar el modulo manualmente, y luego cargar las X
# modprobe nvidia $ startx

Si tienes las X iniciadas primero debes bajarlas, cargar el módulo y levantar nuevamente las X o simplemente reiniciar el equipo.

domingo, 8 de julio de 2012

Aptana Studio 3 en Debian Squeeze

¿Que es Aptana Studio?

Aptana Studio es un (IDE) entorno de desarrollo integrado, es opensource, y está basado en eclipse y desarrollado por Aptana, Inc., puede funcionar bajo Linux, Mac, y Windows. Provee soporte para lenguajes como: Php, Python, Ruby, CSS, Ajax, HTML y Adobe AIR. Además tiene la posibilidad de incluir complementos para nuevos lenguajes y funcionalidades.

Prerequisitos para Instalar Aptana Studio 3:


La versión Standalone requiere el JDK de Sun (Oracle)
Este paquete esta disponible a travez de los repositorios non-free de Squeeze. Por lo que vamos a editar nuestro archivo de lista de fuentes (sources-list).
$ sudo nano /etc/apt/sources.list

A final del archivo debes agregar la siguiente linea y guardar (Ctrl-O, Ctrl-X)
deb http://ftp.us.debian.org/debian/ squeeze main non-free

Actualizamos la lista de paquetes
$ sudo apt-get update

Y finalmente instalamos el Java Developer Kit.
sudo apt-get install sun-java6-jdk

Si quieres instalar todos los componentes de Java puedes usar el siguiente comando (no es necesario).
$ sudo apt-get install sun-java6-jdk sun-java6-plugin sun-java6-fonts
(los paquetes sun-java6-bin , sun-java6-jre están implícitos en el sun-java6-jdk).

Ahora debes verificar cuál es la versión de Java en tu sistema
$ java -version

A continuación la salida esperada. Si no te sale Java(TM), hay que hacer un cambio más.
java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03)

Con el siguiente comando te sale una lista donde puedes digitar el numero de la opción de Java que deseas utilizar. Debes elegir la que está en la ruta “/usr/lib/jvm/java-6-sun/jre/bin/java”.
$ sudo update-alternatives --config java

La versión Eclipse Plug-in requiere lo anterior y Eclipse 3.5
Eclipse 3.5 viene incluido en los repositorios de Debian Squeeze, para instalarlo
$ sudo apt-get install eclipse

¿Como instalar Aptana en Debian Squeeze?

Lo primero es descargar aptana, lo puedes hacer con el siguiente comando.
wget -c http://download.aptana.com/studio3/standalone/3.2.0/linux/Aptana_Studio_3_Setup_Linux_x86_3.2.0.zip

En caso de que el link anterior no funcione, abre la siguiente url en tu browser y descarga la versión Aptana Studio 3.2.0 Linux, x86 (o la arquitectura que corresponda a tu caso)
http://www.aptana.com/products/studio3/download

Para descomprimir el paquete vamos a necesitar unzip, así lo instalamos
$ sudo apt-get install unzip

Ahora descomprimimos el archivo descargado en la carpeta /opt
$ sudo unzip Aptana_Studio_3_Setup_Linux_x86_3.2.0.zip -d /opt/

Luego instalamos la siguiente dependencia
$ sudo apt-get install libwebkitgtk-1.0-0

Descarga del siguiente link el lanzador que he preparado para incluir Aptana en menú
$ wget -c http://mizaqblog.com/downloads/desktop/Aptana%20Studio%203.desktop

Luego debes copiar el lanzador al menú de Gnome, de la siguiente manera
$ sudo cp Aptana\ Studio\ 3.desktop /usr/share/applications/ $ sudo chmod +x /usr/share/applications/Aptana\ Studio\ 3.desktop

Asi luce el lanzador en el menú de Gnome


Node.js en Debian Squeeze

En la presente entrada les dejo los pasos necesarios para descargar, compilar e instalar Node.js en nuestro Debian Squeeze. Node.js está oficialmente en desarrollo, por eso no es normal que las distros ofrezcan un paquete precompilado. Node.js no es un IDE, es un tipo de Maquina Virtual de V8 (entorno de ejecución para JavaScript de Google Chrome), Node.js nos brinda una consola al estilo de Python.

Normalmente JavaScript se ejecuta en el browser. Pero esto es sólo el contexto, JavaScript es un lenguaje "completo", lo que Node.js pretende es brindarnos este otro contexto: nos permite correr código JavaScript en el servidor, fuera del browser.

Para ejecutar el código JavaScript en el servidor, este necesita ser interpretado, esto es lo que hace Node.js.

Además, Node.js viene con muchos módulos útiles, de manera que no tienes que escribir todo de cero, entonces, Node.js es en realidad dos cosas: un entorno de ejecución y un framework.



Node.js es una plataforma basada en V8 el runtime de JavaScript de Google Chrome, orientada al desarrollo rápido y fácil de aplicaciones de red altamente escalables. Node.js utiliza un modelo por eventos sin bloqueo de E/S que hace que sea ligero y eficiente, ideal para aplicaciones de uso intensivo de datos en tiempo real que se ejecutan a través de dispositivos distribuidos.

Instalando Node.js


Para obtener los fuentes de node.js debemos descargarlo directamente desde los repositorios oficiales que hospedados en githut, para hacerlo debemos instalar el sistema de control de versiones git y sus dependencias, aprovechamos e instalamos lo que ocupamos para compilar estas fuentes.
$ sudo apt-get install git-core curl build-essential python openssl libssl-dev

Creamos una carpeta para ahí descargar las fuentes de Node.js
$ mkdir -p ~/node && cd ~/node

Clonamos el repo de Node.js a nuestro equipo (así bajamos las fuentes)
$ git clone https://github.com/joyent/node.git .

Hacemos el checkout de la ultima versión estable
$ git checkout v0.8.1

Creamos el make-file
$ ./configure –openssl-libpath=/usr/lib/ssl

Compilamos
$ make

Nos volvemos root, probamos e instalamos
$ sudo su # make test # make install

Usando Node.js


A continuación les dejo dos de los ejemplos utilizados por el mismo Ryan Dahl (creador de node.js) cuando hace presentaciones, para probarlo guarda el siguiente bloque de código en un archivo llamado miprimer.js
setTimeout(function() { console.log("World!"); }, 2000) console.log("Hello");

Ahora ejecuta el comando
$ node miprimer.js

Otro ejemplo, guarda el siguiente código en un archivo llamado server.js
var http = require("http");
http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/html"}); response.write("Hola Mundo\n"); response.end(); }).listen(8888); console.log("Inicio el servidor web...")

Para probarlo ejecuta este script con node.js
$ node server.js

En otra terminal ejecuta
$ curl localhost:8888

También puede abrir su browser y visitar la url http://localhost:8888

Nota: Si estás utilizando Ruby On Rails y estás obteniendo un error que dice "Could not find a JavaScript runtime", debes saber que instalando node.js se soluciona este error porque instala el entorno de ejecución de JavaScript que necesita Rails.

viernes, 6 de julio de 2012

PostgreSQL 9.1 en Debian Squeeze

En la presente entrada explicaré brevemente como instalar PostgreSQL 9.1 en Debian Squeeze 6.0 desde los Backports.

¿Que son los Backports?

Los Backports son paquetes recompilados de la rama testing (la mayoría) e unstable (en algunos casos solamente, por ejemplo, actualizaciones de seguridad) en un entorno estable para que puedan funcionar sin las nuevas librerías (siempre que sea posible) en una distribución estable de Debian. Los Backports no se puede probar tan extensamente como los paquetes estables de Debian, por lo que se proporcionan tal cuál, con el riesgo de incompatibilidades con otros componentes en Debian estable. Si desea más información haga clic aquí .


Instalando PostgreSQL 9.1

Editar el archivo de los repositorios para agregar la url de los Backports
$ sudo nano /etc/apt/sources.list

Agregar la siguiente linea al archivo anterior y guardamos
deb http://backports.debian.org/debian-backports squeeze-backports main

Actualizar la lista de paquetes
$ sudo apt-get update

Instalar PostgreSQL y pgAdmin
$ sudo apt-get -t squeeze-backports install postgresql-9.1 pgadmin3

Si va a utilizar PostgreSQL con Ruby on Rails deberá instalar los siguientes paquetes
$ sudo apt-get -t squeeze-backports install libpq5 libpq-dev

Cambiar la constraseña al usuario Postgres (a nivel de Sistema Operativo)
$ sudo passwd postgres

Cambiar de usuario (Hacer un switch-user)
$ su postgres

Iniciar linea de comandos de Postgres
$ psql

Desde psql, cambiar la contraseña al usuario postgres (a nivel de motor de Base de Datos)
postgres=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

Salir de psql
postgres=# \q

Habilitar el servidor de PostgreSQL para aceptar conexiones en la red local:

De manera predeterminada el servidor de PostgreSQL solamente escuchara las peticiones del localhost, para habilitar la escucha de otras redes debemos incluirlas en el archivo de configuración que existe para este propósito.
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

Debemos buscar el siguiente bloque de configuraciones y agregar lo que esta en negrita:
# IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 192.168.1.0/24 trust

jueves, 5 de julio de 2012

Ruby 1.9.3 en Debian Squeeze

La presente entrada es un How-to para instalar Ruby 1.9.3 en Debian Squeeze


Instalando Ruby


Crear una carpeta para los fuentes
$ mkdir -p ~/src/ruby

Nos movemos al directorio
$ cd ~/src/ruby

Descargarmos ruby
$ wget -c http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.bz2

Descomprimimos el archivo descargado
$ tar xvfj ruby-1.9.3-p194.tar.bz2 -C ~/src/ruby

Nos movemos al directorio descomprimido
$ cd ~/src/ruby/ruby-1.9.3-p194

Preparamos el make-file
$ ./configure --enable-shared --prefix=/opt/ruby/1.9.3-p194 2>&1 | tee log1_configure.txt

Compilamos
$ make all 2>&1 | tee log2_build.txt

Instalamos
$ sudo make test 2>&1 | tee log3_test.txt
$ sudo make install 2>&1 | tee log4_install.txt

Creamos un enlace simbólico
$ cd /opt/ruby
$ sudo rm -f active && ln -sf 1.9.3-p194 active

Agregamos el nuevo Ruby al path
$ cp ~/.bashrc ~/.bashrc-backup
$ echo '#Ruta del nuevo Ruby' >> ~/.bashrc
$ echo 'export PATH="/opt/ruby/active/bin:$PATH"' >> ~/.bashrc
$ echo 'export MANPATH="/opt/ruby/active/share/man:$MANPATH"' >> ~/.bashrc

Ahora vamos a sobre-escribir el link de Ruby1.8 para que las aplicaciones que siguen preguntando por Ruby1.8 sean redirigidas a Ruby1.9.3

Pero antes le hacemos un backup
$ sudo mv /usr/bin/ruby1.8 /usr/bin/ruby1.8-backup

Si existe el enlace "ruby" igual lo respaldamos
$ sudo mv /usr/bin/ruby /usr/bin/ruby-backup

Ahora creamos el nuevo enlace simbolico
$ sudo ln -sf /opt/ruby/1.9.3-p194/bin/ruby /usr/bin/ruby1.8

Si existía el enlace "ruby" lo re-creamos apuntando a ruby 1.9.3
$ sudo ln -sf /opt/ruby/1.9.3-p194/bin/ruby /usr/bin/ruby

sábado, 23 de junio de 2012

Cursores Implícitos vs Cursores Explicitos en PL/SQL

Cursores Implícitos

Cuando se ejecuta una sentencia DML (son aquellas utilizadas para insertar, borrar, modificar y consultar los datos en una base de datos) un cursor implícito es lanzado.  La principal característica es que no se declara con la palabra reservada CURSOR y que se suele utilizar para trabajar con un registro especifico.

Supongamos que tenemos la siguiente tabla:


Los siguientes son ejemplos de cursores implícitos
--Ejemplo 1:
INSERT INTO empleados (cedula, nombre, apellidos,
                       direccion, username, estado)
     VALUES (701110222,'Perico','De los palotes',
             'En algún lugar Costa Rica','perico','A');

--Ejemplo 2:
UPDATE empleados
   SET estado := 'I'
 WHERE cedula = 701110222;

--Ejemplo 3:
DELETE empleados
 WHERE cedula = 701110222;

--Ejemplo 4:
SELECT cedula, nombre, apellidos, direccion
  INTO l_cedula, l_nombre, l_apellidos, l_direccion
  FROM empleados
 WHERE cedula = 701110222;

Excepciones asociadas a los cursores implícitos.

Excepción Descripción
NO_DATA_FOUND Se produce cuando en una sentencia SELECT la consulta no devuelve nada, porque ninguna fila satisface las condiciones. En español "no hay datos".
TOO_MANY_ROWS Se produce cuando en una sentencia SELECT la consulta devuelve más de un resultado (o sea más de un registro). En español “muchas filas”

Cursores Explícitos

Este tipo de cursores son declarados de manera explicita utilizando la palabra reservada CURSOR.  Se utilizan cuando es necesario trabajar con "n" cantidad de registros.

A continuación un ejemplo:
DECLARE
  --Se declara el cursor explicito
  CURSOR c_empleados(p_estado VARCHAR2) IS
    SELECT * FROM empleados
     WHERE estado = p_estado;

  --Se declara un record del tipo tabla a recuperar
  l_Record empleados%ROWTYPE;
    
BEGIN
 
  -- Se abre el cursor
  OPEN c_empleados('A');
  LOOP
    -- Se recupera una tupla del cursor y se carga en el record
    FETCH c_empleados INTO l_Record;
       
    -- La siguiente sentencia es TRUE si 0 filas fueron
    -- retornadas en la presente iteración
    EXIT WHEN l_Cursor%NOTFOUND;
 
    IF length(l_Record.direccion) = 0 THEN
      UPDATE empleados
         SET estado = 'I'
       WHERE cedula = l_Record.cedula;
    END IF;
    
  END LOOP;
  CLOSE c_empleados;
 
END;

El mismo ejemplo pero abreviado:
DECLARE
  --Se declara el cursor explicito
  CURSOR c_empleados(p_estado VARCHAR2) IS
    SELECT * FROM empleados
     WHERE estado = p_estado;

BEGIN
  --Con la siguiente forma de iteración el cursor
  --se abre y cierra automáticamente.
  FOR registro IN c_empleados('A') LOOP
    IF length(registro.direccion) = 0 THEN
      UPDATE empleados
         SET estado = 'I'
        WHERE cedula = registro.cedula;
    END IF;       
  END LOOP;
END;

Atributos de los cursores explícitos

Atributo Cerrado Abierto Durante las iteraciones Al finalizar
%NOFOUND Ora-1001 Null False True
%FOUND Ora-1001 Null True False
%ISOPEN False True True True
%ROWCOUNT Ora-1001 0 * **

* Número de registros recuperados hasta el momento
** Número de total de registro

viernes, 22 de junio de 2012

Cursores de Referencia en PL/SQL Oracle

En mi trabajo actual estoy dedicado 100% al desarrollo de sistemas, por este motivo he decidido que ahora voy a estar posteando Tips & Tricks sobre programación y base de datos, este no era el objetivo inicial de este blog, pero igualmente creo estos temas les serán de gran utilidad.

Un poco de teoría

Un REF CURSOR es básicamente un tipo de datos y una variable creada sobre esa base de tipo de datos generalmente se llama una variable de cursor. Una variable cursor puede estar asociada con diferentes consultas en tiempo de ejecución. La principal ventaja de utilizar variables de cursor es su capacidad para pasar de conjuntos de resultados entre los subprogramas (como procedimientos almacenados, funciones, paquetes, etc.)
 
A continuación les propongo un ejercicio meramente académico, para exponer brevemente una de las tantas formas del manejo de los cursores de referencia en PL/SQL.

Base de Datos

Para que el código que les dejo tenga algo de sentido, definamos previamente que tenemos las siguientes tablas de base de datos.

Ahora el código

A continuación encontrarán el código fuente del ejemplo propuesto.  En el mismo he incluido comentarios para explicar las secciones que consideré necesario.

DECLARE

  -- El tipo para el cursor de referencia
  TYPE r_Cursor IS REF CURSOR;
  
  -- El cursor tipo cursor de refencia
  l_Cursor r_Cursor;
  
  --Con la siguiente declaración se crea un record del tipo datos,
  --o sea un record con todas las columnas presentes en la tabla datos.
  l_Record datos%ROWTYPE;
  
  -- Las siguientes variables son para capturar errores
  l_ecode NUMBER;
  l_emesg VARCHAR2(200);
  
  -- La siguiente función es meramente académica, la idea es ilustrar
  -- que la sentencia SQL se puede construir dinámicamente.   
  FUNCTION fn_Generar_Sql(p_Estado IN VARCHAR2) RETURN VARCHAR2
  IS
    l_Query VARCHAR2(1000);
  BEGIN
    
    l_Query := 'SELECT u.rol, e.nombre, e.apellidos ' ||
               '  FROM users u, empleados e ' ||
               ' WHERE u.username = e.username ' ||
               '   AND e.estado = ' p_Estado;
    
    return (l_Query);
  END fn_Generar_Sql;

BEGIN

  -- Se abre el cursor con la sentencia devuelta por la función
  OPEN l_Cursor FOR fn_Generar_Sql('A');
  LOOP
      -- Se recupera una tupla del cursor y se carga el en record
      FETCH l_Cursor INTO l_Record;
      
      -- La siguiente sentencia es TRUE si 0 filas fueron 
      -- retornadas en la presente iteración
      EXIT WHEN l_Cursor%NOTFOUND;

      BEGIN
        -- Se hace un insert en la tabla datos
        INSERT INTO datos (rol, nombre, apellidos)
          VALUES (l_Record.rol, l_Record.nombre, l_Record.apellidos);
      EXCEPTION
        -- Si ocurrió cualquier error se captura está excepción
        WHEN OTHERS THEN
          l_ecode := SQLCODE;
          l_emesg := SQLERRM;
          -- En este ejemplo si ocurre un error, se escribira el
          -- código y descripción en el buffer
          dbms_output.put_line(TO_CHAR(l_ecode) || '-' || l_emesg);
      END;
      
  END LOOP;
  CLOSE l_Cursor;

END;

miércoles, 6 de junio de 2012

Fedora adopta UEFI

El día de hoy un compañero me pasó el siguiente link Fedora adopta UEFI donde critican la posición de Fedora de "adoptar" UEFI y titulan el articulo "Fedora es la primera distribución en rendirse ante Microsoft".



Ante la preocupación de mi amigo LesterZone, no pude dejar de aclarar aunque sea superficialmente lo que está haciendo Fedora (que es lo mismo que otras distros enfocadas a Desktop terminarán haciendo).

Conceptos básicos: 


UEFI (Unified Extensible Firmware Interface) es una especificación (inicialmente impulsada por Intel) que viene a reemplazar el ochentero estandar IBM PC BIOS.  EFI aporta a igual que BIOS una interfaz para la gestión de la configuración, manejo de la energía y la configuración de los dispositivos de entrada y salida.

Lo que ha sido fuertemente criticado de UEFI es el nuevo mecanismo de arranque que proporciona (que por cierto no tiene las limitaciones que presenta el clásico arranque basado en MBR), porque permite hacer una validación del Boot Loader verificando si el mismo está firmado o no.


Aclaración:


La característica de que UEFI verifique si el Boot Loader es auténtico (o sea que está firmado con un certificado válido) es una medida de seguridad y cualquier sistema operativo puede adoptarla recurriendo a la autoridad certificadora para que le genere el certificado y la llave (Conceptos básicos de SSL) necesarios.


Lo que Fedora hizo no fue rendirse ante nadie (yo no lo veo así), lo que ha hecho es recurrir a la autoridad certificadora para incluir un certificado y llave en el Boot Loader de su próxima versión. De esta forma un equipo con UEFI no dará ninguna alerta a la hora de que se intente instalar FEDORA. Si no lo hubieran hecho así el usuario tendría que saber que debe acceder al SETUP (antes BIOS, ahora EFI) y desactivar el arranque modo UEFI, activando en su lugar el arranque modo BIOS para poder instalar y arrancar su sistema operativo con Boot Loader no firmado.

Esto FEDORA lo hizo para preveer que usuarios con pocas destrezas técnicas abandonaran la distro al verse frustrados porque no pueden instalarla.

Por ultimo siempre relacionan a Microsoft con UEFI porque su próximo sistema operativo Windows 8 tiene la "novedad" de tener soporte para el "Secuire Boot" de UEFI, con lo que Microsoft planea disminuir la piratería controlando los cracks que se basan en un Boot Loader alterado.  Si es cierto que Microsoft ha hecho presión a los fabricantes de hardware para que incorporen UEFI en lugar de PC BIOS, pero realmente esto no impedirá que nosotros los Linuxeros instalemos nuestro sabor de GNU/Linux favorito en el nuevo hardware.  Recuerden, si nuestra distro adquiere el certificado y la llave bueno (Grub y Lilo ya están preparados, ambos tiene soporte para UEFI) y si no también, solo debemos activar el modo de arranque tipo BIOS (en algunas EFI es solo desactivar el Secure Boot) y listo.

viernes, 23 de marzo de 2012

Montar Samba desde el Shell

Para utilizar SAMBA desde consola es necesario tener instalado el paquete:
smbclient - command-line SMB/CIFS clients for Unix

En Debian o en Ubuntu se puede instalarlo con APT.
$ sudo apt-get install smbclient

Luego se ocupa ver el listado de los recursos compartidos del servidor al que se desea conectar. Con el siguiente comando donde username corresponde al nombre de usuario con priveligios de acceder el recurso.
smbclient -L //IP_Server -U username

Finalmente el comando para montar el recurso //machinename/sharename en el directorio /media/directory sería el siguiente:
$ sudo mount -t cifs -o username=usuario,password=contraseña
//machinename/sharename /media/directory

Posibles errores
mount: wrong fs type, bad option, bad superblock on //machinename/sharename,
         missing codepage or helper program, or other error
         (for several filesystems (e.g. nfs, cifs) you might
         need a /sbin/mount. helper program)
   En algunos casos se encuentra información en syslog, pruebe
   dmesg | tail o algo parecido

El error anterior puede ocurrir si no está instalado el paquete:
smbfs - Herramientas para el sistema de archivos comun de internet (CIFS) - paquete de compatibilidad

En Debian o en Ubuntu se puede instalarlo con APT.
$ sudo apt-get install smbfs

domingo, 15 de enero de 2012

La Ley SOPA - (Stop Online Piracy Act)

Para los que no están enterados de los alcances de esta ley o no saben cómo nos podría afectar les dejo este vídeo que me encontré en Youtube. (Abajo transcribí lo más importante, por si lo quieres copiar y difundir por cualquier otro medio).



¿Que es la ley SOPA?

Es un proyecto de ley introducido en la Cámara de Representantes de los Estados Unidos el 26 de octubre de 2011.

Aunque esta ley solo regirá en territorio Estadounidense recordemos que una gran parte de la infraestructura de la gran red (Internet) se encuentra en Estados Unidos y casi todos los sitios que utilizamos diariamente se verían afectados, por poner algunos ejemplos: Youtube, Google, Twitter, Facebook.  También hay que recordar que muchos sitios alrededor del mundo se hospedan en servidores ubicados en Estados Unidos y están bajo su jurisdicción (por ejemplo este blog que estás leyendo).

Estados Unidos también aloja servicios básicos de la red como el control de dominios (.com, .net, .org) que aunque pertenezcan a sitios que estén fuera de su territorio podrán ser inhabilitados sus dominios desde Estados Unidos sin importar lo que diga la justicia del país al que corresponde por jurisdicción.

También se implementara un mecanismo para que los Proveedores de Conexión a Internet (Ej. AT&T), los servicios de publicidad (Ej. Google Ad Sense) y los servicios de pago On-Line (Ej. Paypal) se vean obligados a bloquear sus servicios a sitios "Sospechosos" en cualquier lugar del mundo solo con la denuncia del supuesto delito sin orden judicial.

Mas allá de la piratería esto afectara directamente nuestra "Libertad de expresión en Internet" y los sitios se verán obligados a aplicar mecanismos de auto-censura para evitar se bloqueados y sancionados.

Según esta Ley cuando un sitio es denunciado:
  • El ISP: Deberá bloquear su DNS (Inhabilitar la resolución del nombre de dominio del sitio)
  • El proveedor de Hosting: Deberá bloquear el acceso al sitio.
  • El motor de publicidad: Deberá bloquear la publicidad (Ej. Google deberá bloquear la cuenta Ad Sense del sitio)
  • Los servicios de pago: Deberán congelar los fondos (Ej. Paypal congelará los fondos de la cuenta relacionada)
  • Enlaces: Deberán removerse los enlaces al sitio (Ej. Google los eliminará de sus resultados)
El próximo miércoles 18 de Enero del 2012, en el mundo entero se planea ejecutar la operación Blackout y en Costa Rica hay varias organizaciones, y grupos de activistas que apoyaran este movimiento, en este sentido se tiene reporte de unos 56 sitios web que participaran del gran apagón de la red.
Mizaq's Blog

Entradas populares