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) + " ");
}
}
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.
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!
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:
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:
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:
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).
if($_POST && !$_POST['botonexcepcion']) {
header("location: ".basename($_SERVER['PHP_SELF'])."?".EstandarizarQueryString());
exit();
}
// Aqui se manejan todos los parametros por $_GET ...
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)
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:
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)
Suscribirse a:
Entradas (Atom)