Obtener dinero con AdFly

martes, 25 de enero de 2011

Repositorio local Debian

Algunas veces que actualizamos los paquetes en Debian nos tardamos un poco menos que una eternidad, por el ancho de banda, porque en otra PC de la red están bajando videos y se congestiona la red, o inclusive algunas veces no podemos descargar nada porque no tenemos Internet. Entonces necesitamos un repositorio de paquetes local, para no tener que depender de estos factores. Con el comando debmirror se puede descargar un repositorio de paquetes Debian completo:

(Actualizado, el anterior enlace ya no funciona):
https://www.mankier.com/1/debmirror

Para descargar este paquete usamos:

SHELL
# aptitude install debmirror

Las opciones que usa debmirror, se las explico aquí:

--host: Indica el host desde donde se descargarán los paquetes.
--method: Indica el método de descarga
--root: El nombre de carpeta raíz.
-d: Distribuciones a descargar.
--arch: Indica las arquitecturas de los paquetes a descargar.
--section: Las secciones a descargar.
--source: Descarga los archivos fuente. Si no quieren descargar los archivos fuentes, cambian esta opción por --nosource.
-v: Imprime el progreso de las descargas de los paquetes.
-p: Imprime las barra de progreso de descarga de los paquetes.
--cleanup: Limpia cualquier archivo o directorio en el repositorio local, desconocido para el repositorio remoto.
--passive: Descargar de forma pasiva cuando descarga con FTP.
--method: Método de descarga, podría ser RSync.
--rsync-options: Opciones si se descarga con RSync.

A continuación les muestro un script usando debmirror, en el cual se descargan 2 repositorios, el principal y el repositorio de seguridad. Lo llamaremos repositorio.sh:

#!/bin/bash
# Réplica del repositorio Debian.
echo -e "Inicio de la actualización:\n`date`\n"
# # # # # # # # # # # # # # # # # # # #
# Definición de variables para el espejo LENNY
# # # # # # # # # # # # # # # # # # # #
#
#
# espejo es el directorio local donde se descargarán los paquetes
espejo="/repositorio_local/debian"
# host es el repositorio remoto
host='--host=ftp.br.debian.org'
# method es el método de descarga
method='--method=ftp'
# root es el directorio root en el repositorio remoto
root='--root=/debian'
# dist es la distribución a descargar: lenny, squeeze, wheezy,
# etc.
dist='-d wheezy,stable'
# arch es la arquitectura de los paquetes: i386, amd64, etc.
arch="--arch=i386,all"
# section son las secciones a descargar
section="--section=main,contrib,non-free"
# source indica si se descargan las fuentes, con la opcion --source 
# para descargar y --nosource para no descargarlos.
source="--nosource"
# modif son opciones extras para la descarga
# Para no verificar las claves de los repositorios remotos
# utiliza modif así:
# modif='-v -p --cleanup --ignore-release-gpg --passive'
# modif son opciones extras para la descarga
# Para descargar con RSync, hacerlo de la siguiente forma:
# modif='-v -p --cleanup --getcontents \
#--rsync-options="-aIL --partial --no-motd \
#--chmod=u=rw,go=r,D+x" --method=rsync'
modif='-v -p --cleanup --passive'

# reflejos es la función general para descargar cualquier repositorio con 
# las variables que le pasemos
function reflejos
{
eval "debmirror $espejo $host $method $root $dist $arch $section $source $modif"
}

# # # # # # # # # # # # # # # # # # #
# Genera espejo para LENNY
# # # # # # # # # # # # # # # # # # #
#
#
reflejos

# # # # # # # # # # # # # # # # # # #
# Definición de variables para el espejo SECURITY
# # # # # # # # # # # # # # # # # # #
#
#
espejo='/repositorio_local/debian-security'
host='--host=security.debian.org'
root='--root=/debian-security'
dist='-d lenny/updates'

# # # # # # # # # # # # # # # # # # #
# Genera espejo para SECURITY
# # # # # # # # # # # # # # # # # # #
#
#
reflejos

# Decomenta estas dos líneas si sabes en qué disco o partición está tu 
# repositorio local, cambiando /dev/hda6 por el disco o partición 
# donde está.
# observa=`df -h /dev/hda6`
# echo -e "Estado del disco:\n$observa\n\n"

echo -e "Fin de la actualización:`date`\n\n"
#
#
# FIN

Ejecutamos el script en una cónsola:

SHELL
$ bash repositorio.sh

Y esperamos a que se descargue el repositorio. Se tardará varias horas, dependiendo de la conexión a Internet.

Agregamos a /etc/apt/source.lst los repositorios locales:

deb http://localhost/debian wheezy main contrib non-free
deb http://localhost/debian-security wheezy/updates main contrib non-free


Cambiando los valores de las variables del script repositorio.sh podemos hacer un repositorio Ubuntu también, de la misma forma, pero cambiando los parámetros. Se los dejo de tarea. Aquí tienen un ejemplo para 12.04:

debmirror \
--host=us.archive.ubuntu.com \
--root=/ubuntu \
--cleanup --nosource \
--progress \
--md5sums --passive \
--arch=i386,amd64,all \
--dist=precise,precise-updates,precise-security,precise-backports \
--section=main,restricted,universe,multiverse \
--method=rsync \
--rsync-options "-rplthi --delete-after --stats --partial" \
/home/repositorios/ubuntu12.04
exit

Ahora, llega la hora de firmar el repositorio, lo cual explico en el siguiente Post:

Cómo firmar un repositorio

Simplemente ejecutamos el siguiente comando:

SHELL
# gpg --gen-key

Nos hará una serie de preguntas, entre ellas nos pedira un passphrase, que será la clave privada.

Más adelante necesitaremos importar la clave pública para usar el repositorio, la exportamos con el siguiente comando:

SHELL
# gpg -a --export > clave_publica.gpg

Firma de los Release

Ahora que ya poseemos una clave para firmar el repositorio tenemos que firmar los Release de cada uno de los directorios:

SHELL
# cd dists/lenny
# gpg -bao Release.gpg Release

# cd main/binary-i386
# gpg -bao Release.gpg Release

# cd main/source
# gpg -bao Release.gpg Release

Esto nos pide el passphrase que introdujimos al generar la clave, y nos genera un fichero Release.gpg. Pues bien una vez hemos firmado todos los ficheros Release ya tenemos firmado el repositorio.

Importando la clave pública

Ahora lo único que nos falta es importar la clave pública exportada anteriormente en cada una de las máquinas que utilizan el repositorio:

SHELL
# apt-key add clave_publica.gpg

Si no hacemos este último paso el apt de cada máquina no reconocerá como firmados los Release

viernes, 21 de enero de 2011

Exámen Java

Este Post lo hago a raíz de que me han preguntado varias veces cómo hacer el exámen de Java J2EE, para certificarse, luego de haber culminado el curso de Desarrolladores de Software en la Academia de FUNDACITE Zulia y obtenido el vaucher que le da derecho a presentar el exámen. Empecemos:

Primero vé en tu vaucher qué prefijo tiene los exámenes a los que puedes optar. El prefijo puede ser 310-*** ó 311-***. Busca esos números en tu vaucher. Eso significa que cualquier exámen, cuyo código empiece por ese número, lo puedes presentar.

Hay varios tipos de exámenes de Java J2EE. Para el que nos formaron en la Academia de Software Libre en el 2007 fue para el exámen 310-056 (versión 5.0 de Java J2EE). Pero ya para la promoción del 2010, supongo que ya los actualizaron para el 310-066 (que es la versión 6.0 de Java J2EE).

Aquí te lo explica detallado:
http://javierrguez.wordpress.com/2009/05/26/certificaciones-java-examenes/

Te recomiendo que presentes el exámen en inglés, porque primero, te hacen menos preguntas (es el lenguaje nativo del exámen); si lo presentas en español te harán como 10 preguntas más. Segundo, no te afectarán las malas traducciones que te puedan poner a pensar una cosa que no es durante el exámen.

En la página WWW.PROMETRIC.COM, puedes programar el exámen, darle fecha y lugar, pero pasa por el sitio dónde se presenta en tu ciudad primero para ver la disponibilidad y te expliquen bien los pasos (en la página de prometric aparecen las localidades habilitadas).

Lo más importante es que hagas muchos (muuuchos) exámenes modelo.



Estos son los pasos para entrar a las prácticas que utilicé cuando presenté el exámen:


Suscribirse a Open Source University Meetup
http://osum.sun.com/

Suscribirse a las prácticas de Sun:

*Auto regístrate online entrando ahttps://sailearningconnection.skillport.com/ -> selecciona register (registrarse)-Necesitarás: Program Name: SAI-Venezuela y Program ID: zdnfev3y--> y crea tu propia cuenta!!

Links de otras prácticas:

http://www.javaranch.com/game/game2.jsp

http://certificadojava.blogspot.com/2005/10/mock-exams-exmenes-para-practicar.html

http://www.jchq.net/mockexams/exam2.htm

http://www.wickedlysmart.com/SCJPStudyGuide/Java_5_SCJPquestions.html

http://www.javablackbelt.com/

Instaladores de Emuladores:

http://www.whizlabs.com/jwhiz.html?gclid=CKKPvquqk5gCFQZlswodi24Eng

Material Excelente:

martes, 18 de enero de 2011

OpenSSH

SSH es un protocolo de seguridad que se utiliza para enviar información de forma segura, protegidas por contraseña. La versión libre se llama OpenSSH.

Para utilizarla en Debian, primero:

DESDE EL SERVIDOR

  • DESCARGAMOS E INSTALAMOS EL PAQUETE .DEB
SHELL
# aptitude install openssh-server
  • CONFIGURAMOS
        La configuración inicial de OpenSSH, es estándar, y si queremos real seguridad, deberíamos cambiar la configuración por defecto. Modificamos el archivo de configuración:

SHELL
# nano /etc/ssh/sshd_config

        Dentro de este archivo modificamos las siguientes variables.

        Cambiamos el puerto, que por defecto es 22, por otro como por ejemplo 4321:

port 1234

        Deshabilitamos que podamos conectarnos como root:

PermitRootLogin no

        Está establecido por defecto para conectarnos desde cualquier red. Si queremos que se conecte desde una red específica, debemos asignarla.

ListenAddress 0.0.0.0 ##Default

        Si queremos que sólo algunos usuarios puedan tener acceso al servicio SSH, lo especificamos así:

AllowUsers tusuario, miotrousuario
  
        Ahora a reiniciar el servicio desde la cónsola:

SHELL
# /etc/init.d/ssh restart



DESDE EL CLIENTE
  • CONECTARSE AL SERVIDOR
       Para conectarnos y navegar en el servidor SSH, escribimos desde la cónsola:

SHELL
$ ssh usuario@direccion-ip
       Siendo direccion-ip la dirección del servidor.

  • COPIAR ARCHIVOS 
       La sitaxis es la siguiente:

scp [[usuario@]host:]ruta ... [[usuario@]host:]ruta 
      
       En este caso usamos el comando SCP, para copiar de Servidor a Cliente o de Cliente a Servidor.

      De Servidor a Cliente:

       Suponiendo que tenemos el archivo cosas.tar.gz en el directorio del usuario desarrollo en el servidor y queremos copiarlo al directorio actual en que estamos en el cliente. Lo hacemos de la siguiente forma:

SHELL
$ scp desarrollo@servidor.org:cosas.tar.gz  .

     De Cliente a Servidor:

      Si queremos subir un archivo al servidor desde el cliente, usando el mismo archivo del ejemplo anterior:

SHELL
$ scp cosas.tar.gz  usuario@servidor.org:directorio_destino

viernes, 7 de enero de 2011

Enviar HREF vía POST con JavaScript

Quién no ha querido enviar el contenido de formulario vía POST con HREF??. Sabemos que sólo se puede con GET, pero hay una forma de hacerlo en JavaScript, cuando tenemos un formulario en método GET y lo queremos enviar por POST:

/* Código en JavaScript*/
/* PRIMERA FUNCIÓN: 
 * Recorre el formulario, crea un arreglo con los campos y lo pasa a la función post 
 */
function enviarPost(URL, form)
{
  var campos = new Array();
  var obj;
  for(var i=0; i< document.getElementById(form).elements.length;i++){
    obj = document.getElementById(form).elements[i];
    alert(obj.value);
    campos[obj.name] = obj.value;
  }
  post(URL, campos);
}
/* SEGUNDA FUNCIÓN:
 * Crea un formulario ficticio y lo envía por POST 
 */
function post(URL, PARAMS) {
  var temp=document.createElement("form");
  temp.action=URL;
// Le agrega los atributos y el método de envío
  temp.method="POST";
  temp.style.display="none";
// Le agrega los campos
  for(var x in PARAMS) {
    var opt=document.createElement("textarea");
    opt.name=x;
    opt.value=PARAMS[x];
    temp.appendChild(opt);
  }
  document.body.appendChild(temp);
// Envía el submit
  temp.submit();
  return temp;
}

<!--Código en HTML-->
<FORM name="miform" id="miform" method="GET" action="http://www.google.com">
<INPUT type="text" id="campo1" name="campo1" value="valor1"> </input>
<INPUT type="text" id="campo2" name="campo2" value="valor2"> </input>
</FORM>


<a HREF="javascript:;" onclick="enviarPost( 
'pagina.php', 'miform' )">IR</a>


Por otra parte, como me acotó mi amigo Gerardo Curiel, también se puede de esta forma, utilizando JQuery. En este caso el formulario debe comenzar teniendo el método POST.

Descargándolo desde aquí: http://code.jquery.com/jquery-1.4.4.js


/*Código en JavaScript*/
/*
 * 1. Captas el evento Click en el anchor(el a)
 * 2. Invocas .submit en el form 
 */

$(document).ready(function(){
$('#mianchor').click(function(evento){
$('#miform').submit();
    });
});

<!--Código en HTML-->
<!--Agregamos JQuery al documento-->
<head>
<script language="JavaScript" src ="jquery-1.4.4.js"> </script>
</head>
...
<!--Declaramos el formulario, con el método y la acción-->
<form method="POST" action="pagina.php" id="miform">
<input type="texto" name="texto" value="valor"/>
</form>
<!--El anchor ya tiene el evento onclick declarado con JQuery-->
<a HREF="javascript:;" id="mianchor">IR</a>

Permitir sólo números en un campo de texto con JavaScript

Muchas veces queremos formatear un campo de texto en HTML con JavaScript, pero el navegador que usamos nos deja en mal, porque siempre hay un hueco que no nos permite escribir con el formato que deseamos.

Aquí hay un ejemplo de cómo formatear un input en html, de tal forma que sólo permita escribir números y que sirve para muchos navegadores:

/*Código en JavaScript*/
function numero(e) {
var codigo; 
codigo = (document.all) ? e.keyCode : e.which; 
if (codigo > 31 && (codigo < 48 || codigo > 57)) {
return false;
}
return true;
}


<!--Código en HTML-->

<INPUT type="text" name="texto" onkeypress="return numero(event)">

jueves, 6 de enero de 2011

Lytebox

Muchas veces queremos hacer efectos que sorprendan en nuestras páginas Web, como por ejemplo, que aparezca un pop up que muestre alguna imagen u otra página sin perder el contenido de la página que mostramos y con un agradable efecto visual.

Uno de los plugins que sirve y bastante para este propósito es Lytebox. Es configurable y con muy buenos efectos.

Esta es la página del proyecto: http://dolem.com/lytebox/

Primero descargamos el paquete con el script en JavaScript lytebox.js y la hoja de estilo CSS lytebox.css.


Colocamos en el <head> los siguientes llamados, de esta forma:

<head>
<script type="text/javascript" language="javascript" src="lytebox.js"></script>
<link rel="stylesheet" href="lytebox.css" type="text/css" media="screen"/>
</head>

Si no queremos descargar el paquete y usarlo remoto, en el llamado sólo cambian la dirección:

<head>
<script type="text/javascript" language="javascript" src="http://dolem.com/lytebox/lytebox.js"></script>
<link rel="stylesheet" href="http://dolem.com/lytebox/lytebox.css" type="text/css" media="screen"/>
</head>

El segundo paso es colocar el link donde queramos. Hay varios casos, que se engloban en: mostrar imagenes y mostrar páginas.

1- Mostrar imágenes

Para una sóla imagen, el link va de la siguiente forma:

<!-- Comentario: El atributo rel debe indicar lytebox para que el plugin lo tome en cuenta -->
<a href="ruta/imagen.jpeg" rel="lytebox" title="Descripción de la imagen"> Contenido o imagen </a>

Para un grupo de imágenes, el link es así:

<!-- Comentario: El atributo rel debe indicar lytebox y el índice a lo que se refiere el grupo de imágenes. Es decir, si tenemos un grupo de imágenes que se refieren a ciudades, el rel debería decir: lytebox[ciudades] -->
<a href="ruta/imagen-1.jpeg" rel="lytebox[ciudades]" title="Maracaibo"> Contenido o imagen </a>
<a href="ruta/imagen-2.jpeg" rel="lytebox[ciudades]" title="Ciudad Ojeda"> Contenido o imagen </a>

Para un grupo de de imágenes en secuencia de reproducción, como una presentación de Impress o PowerPoint.

<!-- Comentario: Es casi lo mismo que el anterior, pero ahora se usa lyteshow en rel y la reproducción es automática. E igual que el anterior, el índice debe indicar a qué se refiere el grupo de imágenes. Es decir, si tenemos un grupo de imágenes que se refieren a ciudades, el rel debería decir: lyteshow[ciudades] -->
<a href="ruta/imagen-1.jpeg" rel="lyteshow[ciudades]" title="Caracas"> Contenido o imagen </a>
<a href="ruta/imagen-2.jpeg" rel="lyteshow[ciudades]" title="El Tigre"> Contenido o imagen </a>

2- Mostrar páginas

Para una sóla página:

<!-- Comentario: En este caso, rel se refiere a un marco, lyteframe, el título (title) igualmente a la descripción de la página, y rev indica los atributos de ancho, alto y si va a poseer barra de desplazamiento -->
<a href="http://www.debian.org" rel="lyteframe" title="Página de Debian" rev="width: 400px; height: 300px; scrolling: no;">Proyecto Debian</a>

Para varias páginas, como un paginador:

<!-- Comentario: Igual que en el caso anterior, rel se refiere a un marco, lyteframe, el índice se refiere a las páginas a mostrar, por ejemplo: "libre", porque son acerca de Software Libre. El título (title) igualmente a la descripción de la página, y rev indica los atributos de ancho, alto y si va a poseer barra de desplazamiento. -->
<a href="http://www.debian.org" rel="lyteframe[libre]" title="Páginas de Debian" rev="width: 900px; height: 650px; scrolling: yes;">Proyecto Debian</a>
<a href="http://www.gnu.org/" rel="lyteframe[libre]" title="Página de GNU" rev="width: 900px; height: 650px; scrolling: yes;">Proyecto GNU</a>

Espero que les haya ayudado en algo y nos vemos en otra publicación.