lunes, 21 de junio de 2010

Serie de Fibonacci Recursiva

Aqui también dejo la versión de la suceción en forma recursiva, que es mas efectiva pero consume mas memoria.


public class Main {
public static long Fibonacci(long n) {
return (n < 2 ) ? 1 : Fibonacci(n-1) + Fibonacci(n-2);
}
public static void main(String[] args) {
int n=7;
for(int i=0; i < n; i++) System.out.print(Fibonacci(i) + " ");
}
}

Serie de Fibonacci en Java

Aqui dejo un ejemplo que me han pedido en varias oportunidades. Un programa simple que imprime los N números de la sucesión de Fibonacci.


public class Main {
public static void Fibonacci(long n) {
long i,n0=1,n1=0,c;
for (i=1;i<=n;i++) {
c=n0+n1;
System.out.print(c + " ");
n0=n1;
n1=c;
}
}
public static void main(String[] args) {
Fibonacci(7);
}
}

lunes, 14 de junio de 2010

Firmar una aplicacion en Java

Cuando creamos una aplicación móvil (o aplet) para cualquier arquitectura, ésta posee permisologia restrictiva para evitar la propagación de códigos maliciosos (virus, aplicaciones no confiables).

En algunas ocasiones necesitamos que nuestra aplicación acceda a recursos que normalmente están restringidos debido al criterio antes mencionado, así que lo mas recomendable es que le hagamos una firma digital.

Existen dos ejecutables que se encuentran en el directorio bin de nuestra instalación de JAVA, llamados keytool, y jarsigner, los cuales podrán ser invocados desde sus respectivas rutas (en caso de windows c:\Program Files\JDK....\bin\).

Solo hacen falta dos pasos para firmar una aplicacion:

1. Generar el Certificado Digital; para eso ejecutamos:

>keytool -genkey -alias MIFIRMA -validity 365 -v

donde MIFIRMA puede ser el nombre de su grupo de claves, o incluso de su compañia. Durante la creación se le pedirá una contraseña para generar la firma, asi como sus datos personales y/o empresariales.

2. Aplicar el certificado digital a un ejecutable o clase:

>jarsigner MiPrograma.jar MIFIRMA -verbose

La aplicación de la firma solo pedirá la contraseña indicada en el paso 1.

Ya con esto tenemos a MiPrograma.jar listo para ser publicado en cualquier sitio o dispositivo!

domingo, 21 de marzo de 2010

Problemas al compartir carpetas con Windows 7

Si tenemos una red local con Windows 7, es probable que les haya pasado que comparten una carpeta y no pueden acceder a ella desde otros equipos de la red. La causa se debe al tipo de red que tienen configurada (Si es red publica, hogar o trabajo). El Windows medirá las restriciones deacuerdo a estas politicas a la hora de conectarse a una red cableada o WiFi disponible. La solución a esto es irnos al Panel de Control, buscar el Centro de redes y recursos compartidos, y cambiar la politica de la conexión a modo Hogar. Deberán hacer esto en todos los equipos que tengan el mismo problema.

martes, 16 de marzo de 2010

Encriptar y Desencriptar con PHP

Aqui les dejo dos funciones que pueden servirle para encriptar y desencriptar cadenas con una llave (parámetro opcional de las funciones).


function my_encrypt($string, $key = "48623468281AX4") {
for($i=0; $i < strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}

function my_decrypt($string, $key = "48623468281AX4" ) {
$string = base64_decode($string);
for($i=0; $i < strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
} return $result;
}

$message = "HELLO MY WORLD!";
echo "Mensaje: ".$message." ";
$enc = my_encrypt($message);
echo "Mensaje encriptado: ".$enc." ";
echo "Mensaje desencriptado: ".my_decrypt($enc)." ";


en donde el navegador mostrará el siguiente resultado:
Mensaje: HELLO MY WORLD!
Mensaje encriptado: fHmEgoFTgY9YiYeDjZxV
Mensaje desencriptado: HELLO MY WORLD!

Evitar advertencia "La página ha caducado" en el navegador (IE - PHP)

Esto suele ser un problema comun a la hora de hacer POST en html y redireccionar a una nueva página a través de un enlace o algún cambio en el header. Hice una solución que me parece práctica cuando se pulsa el boton del navegador "Atrás" no responda con esa molesta advertencia.

La técnica consiste en tomar todas las variables $_POST, procesar las que se consideren adecuadas y redireccionar las mismas variables a través de un $_GET. Esto funciona bien cuando hacemos formularios de búsqueda que generan un listado, al que luego de hacer click en algún item se redirecciona a un nuevo enlace.

El código puede ser escrito como en el siguiente ejemplo:


function EstandarizarQueryString
($excepciones = "") {
if(!is_array($excepciones))
$excepciones = array($excepciones);
$est = array();
$querystring = "";
foreach($_GET as $key => $value) $est[$key] = $value;
foreach($_POST as $key => $value) $est[$key]=$value;
foreach($est as $key => $value) {
if(!in_array($key,$excepciones)) {
if(!empty($value) && $value!="0" && $value!="null") $querystring.="&".$key."=".urlencode($value);
}
}
return substr($querystring,1);
}


Una vez implementada esta funcion, se pueden reescribir los URL y manejar todos (o algunos) de los parametros REQUEST de la página de la siguiente manera:


if($_POST && !$_POST['botonexcepcion']) {
header("location: ".basename($_SERVER['PHP_SELF'])."?".EstandarizarQueryString());
exit();
}
// Aqui se manejan todos los parametros por $_GET ...

Con esto se evita una reconfirmación del POST cuando se ejecuta un evento history.back o cuando se pulsa el botón "Atrás" del navegador (Generalmente pasa en IE).

jueves, 11 de marzo de 2010

Instalar SSH en Windows XP/Vista/7 (Open SSH)

1. bajar el gygwin en http://www.cygwin.com/setup.exe

2. Instalar cygwin con OPENSSH a traves del setup de cygwin (buscar openssh en el cuadro de texto y marcar para instalación)

3. Como ADMINISTRADOR:
Crear una nueva variable de entorno: CYGWIN con valor ntsec tty

Agregar ;c:\cygwin\bin al Path

Abrir el cygwin con el acceso directo (Windows 7 usar run as administrator)

chmod +r /etc/passwd
chmod u+w /etc/passwd
chmod +r /etc/group
chmod u+w /etc/group
chmod 755 /var
chmod 664 /var/log/sshd.log


ssh-host-config, responder todo "yes" excepto cuando dice si desea usar un nombre diferente.

cyglsa-config


Reiniciar el PC. y LISTO!! ya tenemos ssh instalado (para configurar es /etc/sshd-config)