Obtener dinero con AdFly

viernes, 28 de octubre de 2011

Corrector ortográfico en PHP y JavaScript

Hola. Hace poco estaba desarrollando un proyecto donde necesité de un corrector ortográfico que encontrará errores en párrafos en tiempo real, o no importaba con consultas al servidor, siempre está JQuery o MooTools.

Encontré una opción, Pspell, corrector ortográfico para PHP, con el que puedes utilizar el diccionario GNU Aspell, si estás en un sistema GNU/Linux: http://php.net/manual/es/book.pspell.php, pero que al parecer no tiene más soporte. Utilizando sus funciones para indagar en el diccionario se puede lograr desarrollar un corrector ortográfico con PHP.

Pero necesitaba algo que ya estuviese desarrollado, para no perder mucho tiempo. Buscando en la Web encontré otra opción: http://www.phpspellcheck.com, que se integra excelentemente a cualquier desarrollo en PHP y JavaScript. Según dice en la página, tiene una Versión trial de desarrollo que no expira, pero les recomiendo que lo bajen antes de que se vuelva completamente privado, porque con todas los módulos y funciones que tiene, no falta mucho :S.

Primero, lo descargan desde aquí: http://www.phpspellcheck.com/downloads/phpspellcheck.zip. Descomprimen en la carpeta del proyecto que estén desarrollando.

Para utilizarlo, como ejemplo, el siguiente código en PHP, incluye el diccionario y crea las instancias para chequear los campos Textarea.

#PHP Código Fuente
require "phpspellcheck/include.php";

$mySpell = new SpellCheckButton();
$mySpell->InstallationPath = "/phpspellcheck/";
$mySpell->Fields = "TEXTAREAS";
$mySpell->Language = "Espanol";
$mySpell->UserInterfaceLanguage = "es";
echo $mySpell->SpellImageButton();


$mySpell = new SpellAsYouType();
$mySpell->InstallationPath = "/phpspellcheck/";
$mySpell->Fields = "TEXTAREAS";
$mySpell->Language = "Espanol";
$mySpell->UserInterfaceLanguage = "es";
echo $mySpell->Activate();

Cambiando las opciones se puede obtener otros resultados, como chequear todos los campos. En la página del proyecto pueden cambiar las opciones y copiar el código resultante, pruébenlo :D.

El mismo código pero en JavaScript:

Código en HTML:
<script language="JavaScript" src ="/phpspellcheck/include.js">
</script>
 
Código en JavaScript:
var mySpell = new LiveSpellInstance();
mySpell.Fields = "TEXTAREAS"
mySpell.Language = "Espanol";
mySpell.UserInterfaceLanguage = "es";
mySpell.DrawSpellImageButton()
mySpell.ActivateAsYouType()

Saludos.

jueves, 14 de abril de 2011

Sincronización con Rsync y SSH

     Si queremos hacer una sincronización con rsync usando ssh para proteger nuestros datos, usamos el comando:

     Desde un directorio remoto a un directorio local:
     rsync -avz -e ssh usuario@ip-remota:/directorio/remoto /directorio/local

     Desde un directorio local a un directorio remoto:
     rsync -avz -e ssh /directorio/local usuario@ip-remota:/directorio/remoto

     Desde un directorio local a otro directorio local:
     rsync -avz -e ssh /directorio/local1 /directorio/local2

     Las opciones:

     -a: Usar recursividad manteniendo los permisos.
     -v: Mostrar los archivos o directorios que va pasando.
     -z: Comprimir los datos para que la transferencia sea más rápida.
     -e ssh: Utilzar ssh.
     --delete: Borra los datos en el directorio o archivo destino antes de pasar los nuevos.


     Cada vez que ejecutemos rsync con ssh, nos va a pedir la clave del host remoto. Esto no nos va a servir si queremos colocar un proceso en Cron para que se ejecute automátimente. Así que automatizamos el logeo.

     Generamos la claves RSA pública y privada:

         ssh-keygen

     Cuando nos pida el Passphrase (password, clave), sólo le damos a enter. Con esto se crean dos archivos:

         /home/usuario/.ssh/id_rsa (clave privada)
         /home/usuario/.ssh/id_rsa.pub (clave pública)

     Ahora copiamos la clave pública generada (/home/usuario/.ssh/id_rsa.pub) al usuario host remoto con el que nos vamos a conectar. Si el usuario en el host remoto es debian, entonces copiamos el archivo a /home/debian/.ssh/id_rsa.pub. Suponiendo que el host remote es 192.168.0.2, probamos la conexión:

          ssh debian@192.168.0.2

    Si no nos pide passphrase, entonces ya podemos automatizar la replicación con Cron. Ejecutamos crontab -e y agregamos una de estas líneas según nuestra conveniencia:

   #Hace una sincronización los lunes a la 1:00 am
   0 1 * * 1 rsync -avz -e ssh debian@192.168.0.2:/directorio/remoto /directorio/local

   #Hace una sincronización los domingos, martes, miercoles, jueves, viernes y bados
   0 1 * * 0,2-6 rsync -avz -e ssh debian@192.168.0.2:/directorio/remoto /directorio/local

   #Hace una sincronización todos los días
   0 0 * * * rsync -avz -e ssh debian@192.168.0.2:/directorio/remoto /directorio/local

Instalar OSS4 y no morir en el intento

Hace unos días instalé OSS4 en mi Debian Squeeze para mejorar la calidad del sonido. Luego tuve problemas para reproducir música, o cualquier sonido en algunas aplicaciones como SMPlayer porque algunos módulos de ALSA todavía estaban corriendo al reiniciar el sistema. ALSA tiene compatibilidad con OSS pero no con OSS4.

Después de buscar en foros y google, encontré una guía de cómo instalar OSS4 y devolverse sin quedarse en el camino. Como está en inglés y está hecha para instalarlo en Ubuntu 10.04, lo adapto a Debian Squeeze (que no es casi nada) y de una vez lo traduzco:

http://yopensource.com/it/news/ubuntu-latest-news/9297-howto-install-oss4-in-ubuntu-1004-lucido-per-meglio-sound-di-qualita

  • En una terminal, corre sudo dpkg-reconfigure linux-sound-base. Escoge OSS, esto, entre otras cosas, previenes que los módulos de ALSA sean cargados. Ahora reinicia.
  • Hay (al menos) 3 formas de instalar OSS4:
    • Instalar desde los repositorios de Debian:
      • sudo apt-get install oss4-base oss4-dkms oss4-gtk
                         Esto reconstruye los módulos OSS si tu kernel está actualizado (yo usé la versión 2.6.32), y es la vía recomendada para instalar módulos de kernels que vienen de terceros.
    • Descarga los binarios de OSS4 en .deb desde http://www.opensound.com/download.cgi y lo instalas. Esta es la vía fácil, pero vas a tener que reinstalar el paquete manualmente cada vez que tu kernel se actualice. Además, ese paquete no es GPL, porque tiene una licencia comercial de un año.
  •  Si tienes errores con el módulo snd_pcm, intenta reiniciar y correr sudo soundon. Si el problema persiste, usa lsmod para chequear si algún módulo de ALSA sigue cargado. Si es así, agregalo a la lista negra (blacklist) manualmente, creando un archivo de configuración en /etc/modprobe.d/blacklist-nombre_modulo_alsa.conf con la línea blacklist nombre_modulo_alsa.
  • Configura Pulseaudio para que use OSS4 o eliminalo:
    • Para configurar Pulseaudio con OSS4:
                   Edita el archivo de configuración por defecto: gksu gedit /etc/pulse/default.pa
                   Comenta los módulos de detección automática de hardware, estas 3 líneas:
                      #.ifexists module-udev-detect.so
                      #     load-module module-udev-detect
                      #.else

               
                    Agrega la siguiente línea:

                      load-module module-oss device="/dev/dsp" sink_name=output source_name=input mmap=0

    •  Para eliminar Pulseaudio:
                  sudo apt-get remove pulseaudio

                     Después recuperas el ícono del control de volumen en el panel.

  • Configura Gstreamer para salida con OSS4:
            Instala Gstreamer0.10-plugins-bad.
            Corre gstreamer-properties y establece OSS como entrada y salida.

  • Configura ALSA (o si prefieres libasound) para salir por OSS4 en lugar de los controladores nativos de ALSA. Crea un archivo de configuración:
            gedit ~/.asoundrc

            Agrega lo siguiente:

            pcm.!default
            {
                type oss
                device /dev/dsp
            }
            mixer.!default
            {
                type oss
                device /dev/dsp
            }

  • Botón derecho en tu panel, selecciona "Añadir al panel..." y añade el applet de control de volumen.
  • Configura las aplicaciones que soporta OSS4 nativamente (ej. Audacious, Audacity, SMPlayer, etc.) para usar OSS. Algunas aplicaciones no tienen soporte para OSS. No es problema, porque pueden seguir funcionando con GStreamer o con la emulación de ALSA a través de OSS4 (o Pulseaudio si decidiste dejarlo).
  • Después de eliminar Pulseaudio, puede ser que Rhythmbox o Movie Player, al iniciar, no encuentren los plugins audiosink. En ese caso debes cambiar manualmente algunas Gconf-keys. Inicia gconf-editor. Abre system/gstreamer/0.10/audio/default. Chequea si algunas claves (por ejemplo: musicaudiosink y chataudiosink) todavía están establecidas con "pulsesink". Si es así, cambialo a "osssink".



REVIERTE TODOS LOS CAMBIOS (EN CASO DE QUE QUIERAS):

  • En una terminal, corre sudo dpkg-reconfigure linux-sound-base Escoge ALSA. Y ahora reinicia.
  • Borra el archivo de configuración de libasound: rm ~/.asoundrc
  • Reinstala Pulseaudio y los paquetes asociados: sudo apt-get install pulseaudio libcanberra-pulse pulseaudio pulseaudio-esound-compat pulseaudio-module-bluetooth pulseaudio-module-gconf pulseaudio-module-x11
  • Configura GStreamer para salida de Pulseaudio corriendo gstreamer-properties y estableciendo como entrada y salida a Pulseaudio.
  • Si configuraste algunas aplicaciones (ej. Audacious, Audacity, SMPlayer, etc.) para usar OSS4, vuelvelas a configurar a Pulseaudio o ALSA.
  • Inicia gconf-editor. Abre system/gstreamer/0.10/audio/default. Chequea si algunas claves (ej. musicaudiosink y chataudiosink) están establecidas a "osssink". Si es así, cambialos a "pulsesink".
  • Elimina OSS4 usando: sudo apt-get remove oss4-base oss4-dkms oss4-gtk. También puedes borrar opcionalmente gstreamer0.10-plugins-bad.

martes, 5 de abril de 2011

Quanta 4

Para los que hemos desarrollado en Quanta y nos parece uno de los mejores editores Web, una guía de cómo instalarlo en Ubuntu (ya no hay soporte desde KDE 3.5):

      http://www.ubuntu-es.org/node/141444

Pero hay un proyecto en curso para llevarlo a la versión 4:

      http://nikosams.blogspot.com/2010/01/kdevelopquanta4-css-language-support.html
     
Plan de desarrollo:

      http://techbase.kde.org/Projects/Quanta/Feature_Plan_4

domingo, 3 de abril de 2011

Recuperé Grub2 desde la cónsola de rescate, sin CD-Live

Esto lo escribo porque acabo de perder casi toda la información de mi partición donde tenía /home, porque estaba redimensionando el disco, moviendo particiones, cambiando de lugar /boot... y se apagó la computadora :SSSS (no chinges jeje). Como no me dió tiempo de actualizar el gestor de arranque Grub2, al reiniciar la PC, obtuve este mensaje:

No such partition
grub rescue>

Con el cursor en esta última línea de comandos para recuperar el Grub2. Me salió este mensaje porque al cambiar de partición a /boot y sin actualizar el grub2, este sigue buscando el kernel y el inird donde antes estaba /boot.

Estaba en la peor de las situaciones (casi), porque no tenía una computadora de respaldo para buscar documentación sobre los comandos de la cóndola de Grub2; tenía imágenes ISO de Debian, Ubuntu y de como 8 distribuciones más, pero todas en el disco y sin poder acceder para quemarlas :(. Sabemos que no es fácil encontrar una distro en la farmacia de la esquina y no quería buscar un Windows ni nada de eso :). Así que fui a un Cyber y busqué información de los comandos y encontré esto:

https://help.ubuntu.com/community/Grub2

En la sección Command Line and Recue Mode, encontré lo que necesitaba, con lo que hice una medio guía:


Primero vemos qué particiones tenemos con:

>ls

Debería aparecer algo en este formato: (hdX) (hdX,A) (hdX,B)... tantas como particiones tengamos. Siendo hdX el disco (hd0,hd1,etc...) y el segundo parámetro es la partición (0,1,etc... ó msdos1,msdos2,etc..., según el tipo de partición).

Si ejecutamos ls (hdX,Y)/ aparecerá lo que hay dentro de esa partición en su carpeta raíz.

Luego asignamos el prefijo donde está el /boot/grub:

>set prefix=(hdX,Y)/boot/grub

Si la partición (hdX,Y) sólo es para /boot, tendríamos que colocar algo así:

>set prefix=(hdX,Y)/grub

Después asignamos la partición raíz:

>set root=(hdX,Y)

Con ls / o con ls /boot, ya podemos ver lo que hay dentro de estos directorios en la partición que escogimos.

Cargamos los módulos adicionales para asignar el kernel y el initrd desde el cual vamos a iniciar el sistema:

>insmod /boot/grub/linux.mod

Asignamos el kernel:

>linux /vmlinuz root=/dev/sdXY ro

Siendo /dev/sdXY (ej.: /dev/sda1) la partición donde está el grub.

Asignamos el initrd:

>initrd /initrd.img

Si queremos un kernel e initrd específicos, ejecutamos:


>linux /boot/vmlinuz-<versión> root=/dev/sdXY ro

>initrd /boot/initrd-<versión> root=/dev/sdXY ro

Y finalmente cargamos hacemos boot:

>boot

Al iniciar el sistema instalamos el Grub2 antes de reiniciar, porque sino vamos a tener que hacer todos los pasos otra vez. Desde una cónsola de root ejecutamos:

#grub-install --recheck /dev/sdXY

Siendo /dev/sdXY la partición donde está el directorio /boot.

Y actualizamos el grub2, ejecutando desde una cónsola root:

#update-grub
#update-grub2

Por ahora no me ha funcionado update-grub2 sólo, por eso ejecuto los dos.

Perdí la información pero recuperé el Grub2 xDD...

miércoles, 2 de febrero de 2011

Compilando un kernel en Debian

Hace tiempo tuve que compilar un kernel 2.6 para poder instalar una tarjeta de red Marvell Yukon que trabajaba con Gigabits, para luego darme cuenta que sólo debía cambiar la versión del GCC para ajustarla a la versión del GCC con que fue compilado mi kernel... pero me quedó la experiencia al menos. En ese momento encontré una guía excelente de cómo compilar un Kernel a la Debian o derivados, aquí se la dejo:

http://mogaal.com/articulos/kernel-a-la-debian.html

substr en Postgres 8.3

Hace un tiempo me tope con un problema: Hacer un substring en PostgreSQL 8.3. Ya que en las versiones anteriores de Postgres, 8.2 y 8.1, usan la función con el formato:

select substr(campo, 1, 4)

En la versión posterior, 8.3, esto ha cambiado y el formato es el siguiente:

select substr(campo::text, 1, 4)

Como lo pueden ver en esta pregunta hecha en la página de postgres, donde encontre la respuesta:

http://archives.postgresql.org/pgsql-es-ayuda/2008-03/msg00510.php

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.