ALEXSAM's BLOG

//…in Heaven

Snake Game

Recuerdan cuando Google nos dió la posibilidad de jugar Pac-Man en su logo, ahora le toca el turno a Youtube, podremos jugar el clásico Snake Game de Nokia mientras carga un video, claro si tienes una velocidad lenta podrás jugar, en caso contrario toca desplazarse sin soltar (la tecla) a la derecha o izquierda mientras reproduce un video…

Rpta: LA GALLINA.

Huevo o Gallina

Si toda la vida te rompiste el cerebro con el dilema de “¿Qué fue primero: el huevo o la gallina?”, ya puedes estar tranquilo porque la respuesta científicamente demostrada es la gallina. Un grupo de investigadores británicos determinaron  que la gallina fue pionera en la carrera de la existencia: mediante el uso de unos super ordenadores, llegaron a la conclusión de que para formar un huevo es necesario disponer de un tipo de proteína únicamente presente en las gallinas.

Y ahora: ¿De dónde vino la gallina?

Wikipedia: El huevo o la gallina.

Desde hoy Firefox 4 ya está disponible para ser descargado, no importa que sea en versión Beta 1, así que a probarlo..!!!

No seas demasiado curioso…

Situación: Insertas una memoria flash USB o un Disco (CD, DVD, etc) o cualquier otro dispositivo y no te aparece la clásica ventana emergente que te dice qué hacer. Me refiero a esta ventanita:

Autoplay Popup

Intentas de todo, usas el Autofix.exe de Microsoft y no lo arregla, intentas una y mil maneras y aun no tienes solución.

Lo que debes hacer es ir al registro (ejecutar Regedit) y editar la clave:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\

Alli dentro buscas NoDriveTypeAutoRun, le haces doble clic y le borras el valor que tenía, osea lo dejas en cero.

Reinicias el equipo y listo.

Autoplay Registro

Ahora si quieres saber que valores además de cero puede tomar NoDriveTypeAutoRun te dejo la siguiente tabla:

Valor Significado
0×1 o 0×80 Deshabilita la ejecución automática en unidades de tipo desconocido.
0×4 Deshabilita la ejecución automática en unidades extraíbles. (DRIVE_REMOVEABLE)
0×8 Deshabilita la ejecución automática en unidades fijas. (DRIVE_FIXED)
0×10 Deshabilita la ejecución automática en unidades de red. (DRIVE_REMOTE)
0×20 Deshabilita la ejecución automática en unidades de CD-ROM. (DRIVE_CDROM)
0×40 Deshabilita la ejecución automática en discos RAM. (DRIVE_RAMDISK)
0xFF Deshabilita la ejecución automática en todos los tipos de unidades.
0×91 DRIVE_RAMDISK, DRIVE_REMOTE, DRIVE_FIXED
0×95 DRIVE_RAMDISK, DRIVE_REMOTE, DRIVE_FIXED & DRIVE_REMOVABLE

~

Ahora si quieres buscar un culpable, probablemente sea el VMWARE que instalaste justo antes de que esto ocurriese y talvez no te diste cuenta, además tiene una opción de desactivar la reproducción automática en el host (Disable Autorun on the host), que te dejará con el valor de 0×91 ó 0×95 en caso desmarques la casilla, además tendrías que ejecutarlo con priviliegios de Administrador y luego reiniciar.

Ah me olvidaba en caso sea necesario tambien haz lo mismo con la clave HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\.

Editado (12/02/2010): Tambien soluciona el problema de algunas teclas multimedia que no funcionan, como por ejemplo en algunas Laptops: “Abrir Reproductor Windows Media”, “Apagar Sonido”, etc.

Este es el nuevo terminal móvil de Google, Procesador Snapdragon a 1GHz, 512MB RAM, pantalla 3.7″ con resolución 480×800, camara 5MPX, corriendo Android 2.1…

Nexus One

Si aun no lo conoces:

Fotos: link

Especificaciones Técnicas: link

Wikipedia: link

+Info (engadget.com): link

Happy New Year 2010

BUENO A TODO EL MUNDO LE DESEO UN FELIZ AÑO NUEVO 2010, QUE SEA DE LO MEJOR PARA TODOS UDS.

QUE LA PASEN SUPER

Yo por mi parte lo pasaré en el mejor lugar del mundo, en Cuzco – Perú…

Gracias a las personas que fueron parte de mi vida en el 2009, y espero que lo sigan siendo este nuevo año.

FELIZ AÑO NUEVO 2010 !!!!!!!!!

…y no olviden leer el post anterior…

La noche que nos traspasa al siguiente año está llena de cábalas y supersticiones que tienen que ver con buenos augurios para el año que comienza, he aqui algunas:

- En algunos lugares el comienzo del año se festeja con la tradición de las 12 uvas: en el sitio que ocupa cada comensal se coloca previamente un pequeño frutero con 12 uvas y, de acuerdo con el ritual, se debe comer una uva por cada una de las 12 campanadas del reloj. De esta forma, los anhelos y aspiraciones se hacen realidad… por lo menos eso dicen.

- Sentarse y volverse a parar con cada una de las doce campanadas, trae matrimonio.

- Recibir el año nuevo con dinero dentro de los zapatos, trae prosperidad económica.

- Para tener mucha ropa nueva, la noche del 31 debes usar la ropa interior al revés.

- Poner un anillo de oro en la copa de champaña con la que se hará el brindis, con lo que te asegurarás que no falte el dinero.

- Cocinar una corvina sin quitarle las escamas, también es para asegurarse un buen pasar económico (quien la coma tendrá tanta plata como escamas haya comido).

- Encender velas de colores: las azules traen la paz; las amarillas, abundancia; las rojas, pasión; las verdes, salud; las blancas, claridad, y las naranjas, inteligencia.

- Repetir en voz alta o mentalmente la frase “Voy a ser feliz este año” junto a los doce campanadas.

- Si se sale a la calle, tratar que la primera persona que se vea sea joven, ya que mientras menor sea, mayor será la felicidad.

- Sacar las maletas a la puerta de la casa para tener muchos viajes el año que comienza.

- Usar ropa interior amarilla la noche de fin de año, para asegurar felicidad y buenos momentos.

- Comer una cucharada de lentejas (cocidas) dentro de los primeros minutos del nuevo año para tener prosperidad.

- Muñeco: Prepare un muñeco (símbolo del año viejo) vestido y ojalá de tamaño normal. Después de las 12 de la noche, cada comensal coloque en los bolsillo del muñeco tres papeles con tres cosas escritas que no quiere que se repitan. Luego queme el muñeco para que desaparezca todo lo negativo. Se trata de una tradición ecuatoriana

-Vestido: Si tiene suerte de romper su vestido accidentalmente, será una señal de dicha extraordinaria

-Abrazar a un hombre: La tradición señala que si quiere casarse, el primer abrazo déselo a un hombre

- Ajos y sal: No deje su casa desprovista de sal o ajos. Los griegos creían que para tener buena suerte y prosperidad durante el año que se acercaba era indispensable poseer estos dos elementos. La trenza de ajos y hay que colgarlas detrás de la puerta de la cocina

- Ordenar la casa: Antes de la medianoche del 31 de diciembre hay que barrer la casa desde adentro hacia afuera; después y con una escoba sin uso, nuevamente se barre de afuera hacia adentro pidiendo que ingrese todo lo bueno.

Personalmente yo no creo en estas cosas, pero por si acaso (como todos los años), me voy a comprar uvas.

Google oculta una misteriosa cuenta atrás en su pagina de inicio (google.com), luego de hacer clic en “I’m feeling lucky”, sin tener nada en el textbox.

Hay algunos que creen despues de esto cambiara el look de Google, otros creen que coincidira con el lanzamiento oficial del terminal móvil NexusOne, entre otros mas disparatados rumores.

Si te sientes aburrido y quieres saber cuántos segundos faltan para el nuevo año visita www.google.com.

PHP nos brinda muchas herramientas para encriptar, tenemos las que son “One Way” (aquellas que sólo van de un sólo sentido, que en realidad solo generan un Hash) como son MD5 y SHA1, y las que son reversibles como el base64_encode.

La clase que implemento a continuación (paso a paso) es para una encriptación reversible (Inspirado en una estupidez que comete mi universidad en su web).

¿ Para qué me sirve esto ? Esta clase la pueden usar para encriptar cookies, direcciones, etc; en fin para cualquier cadena de texto que se tenga, por ejemplo: “http://mipagina.com/algoprivado.php?valor=cadenaencriptada“, en vez de usar el base64_encode (u otros) que es fácil de desencriptar con cualquier herramienta. Si alguien quisiera desencriptar una cadena necesariamente tendría que conocer la estructura interna del algoritmo y nuestras llaves.

1. Declaramos dos atributos privados de clase, que serán llamados “Llaves”, podemos llamarlos llaveA y llaveB, o llaveInterna y llaveExterna (Ambos serán arrays con la misma cantidad de elementos)

private $LlaveExterna;
private
$LlaveInterna;

2. En el metodo constructor asignaremos los valores a los arrays:

  • Primero definimos un alfabeto, puede ser el abecedario (a,b,c,d,e,..,z); el abecedario incluyendo mayusculas; el abecedario con números; o el más amplio que seria el abecedario con mayúsculas, minúsculas, números y algunos simbolos comunes (@,-,+,!,etc). El que yo uso para este ejemplo explicativo son las vocales (A,E,I,O,U). Recuerda que no pueden repetirse los símbolos.
  • Obtenemos la cantidad de elementos de nuestro alfabeto, llamémosle N (en nuestro caso N=5), ahora asignamos aleatoriamente valores de cero a N-1 a cada elemento del primer array (sin repetirse los números); hacemos lo mismo para el segundo array. Recuerda que los array deben ser distintos, y los valores numéricos no deben ser correlativos.

public function __construct()
{
$this->LlaveExterna['A'] = 3;
$this->LlaveExterna['E'] = 1;
$this->LlaveExterna['I'] = 0;
$this->LlaveExterna['O'] = 2;
$this->LlaveExterna['U'] = 4;

$this->LlaveInterna['A'] = 0;
$this->LlaveInterna['E'] = 3;
$this->LlaveInterna['I'] = 4;
$this->LlaveInterna['O'] = 1;
$this->LlaveInterna['U'] = 2;

}

3. Creamos nuestros métodos Get y Set (sólo si fuese necesario):

function get_LlaveExterna()
{
return
$this->LlaveExterna;
}
function
set_LlaveExterna($aLlaveExterna)
{
$this->LlaveExterna = $aLlaveExterna;
}
function
get_LlaveInterna()
{
return
$this->LlaveInterna;
}
function
set_LlaveInterna($aLlaveInterna)
{
$this->LlaveInterna = $aLlaveInterna;
}

4. Creamos nuestro método Encriptar Cadena que devolverá una cadena encriptada a partir de otra no encriptada, la cadena devuelta tendrá la misma longitud de la de entrada. El proceso de encriptación se realizará caracter por caracter, mediante el método EncriptarCaracter que tendrá como parámetros el i-ésimo caracter de la cadena original, la longitud de la cadena, y el valor de i (que irá incrementando desde cero hasta la longitud de la cadena original, osea recorrerá la cadena):

function EncriptarCadena($sCadena)
{
$NoEncriptado = $sCadena;
$SiEncriptado = "";
$iLength = strlen($sCadena);
for (
$i = 0; $i < $iLength; $i++)
{

$SiEncriptado .= $this->EncriptarCaracter($NoEncriptado[$i], $iLength, $i);
}
return
$SiEncriptado;
}

5. Nuestro método EncriptarCaracter, que será la base de nuestro algoritmo, devolverá un elemento de nuestro alfabeto (en nuestro caso A,E,I,O,U), de tal manera que no se pueda crear ninguna asociación como “la A es I encriptada”, sino dependerá de la ubicación del caracter en la cadena original y de la longitud de ésta. Para esto se hará lo siguiente:

  • Buscará el valor del arreglo LlaveExterna con el caracter de parámetro como indice, es decir, cuanto vale LlaveExterna[caracter], ejm: LlaveExterna['A'] = 3.
  • A el valor anterior se sumará la longitud de la cadena a encriptar, y ademas el índice (la posición) del caracter no encriptado en la cadena original, es decir: LlaveExterna[caracter] + LongitudCadena + Indice.
  • Al valor obtenido anteriormente se le divide entre N (N=5, cantidad de elementos de nuestro alfabeto), y el resto, lo guardamos.
  • Ahora como paso final, buscamos el Indice del otro array (LlaveInterna), donde se encuentra el valor obtenido en el paso anterior (resto de la división); como los indices son Caracteres (elementos de nuestro alfabeto), nos devolverá un Caracter, que será el encriptado en la cadena. Esto se irá concatenando en la cadena encriptada, segun se recorra la cadena original.

function EncriptarCaracter($sCaracter, $iTamanio, $iIndice)
{
$iIndiceAux = ($this->LlaveExterna[$sCaracter] + $iTamanio + $iIndice) % (5);
return
array_search($iIndiceAux, $this->LlaveInterna);
}

6. Los métodos DesencriptarCadena y DesencriptarCaracter, son de manera inversa:

function DesencriptarCadena($sCadena)
{
$SiEncriptado = $sCadena;
$NoEncriptado = "";
$iLength = strlen($sCadena);
for (
$i = 0; $i < $iLength; $i++)
{

$NoEncriptado .= $this->DesencriptarCaracter($SiEncriptado[$i], $iLength, $i);
}
return
$NoEncriptado;
}


function
DesencriptarCaracter($sCaracter, $iTamanio, $iIndice)
{
$iIndiceAux = ($this->LlaveInterna[$sCaracter] - $iTamanio - $iIndice) % (5);
if (
$iIndiceAux < 0)
{
$iIndiceAux += (5);
}
return
array_search($iIndiceAux, $this->LlaveExterna);
}

Como vemos el método DesencriptarCaracter, ademas cuenta con una sentencia “if” que evita que se obtenga valores negativos (entre cero y -N+1) en el valor del indice.

Usando el algoritmo y para nuestro ejemplo (alfabeto: A,E,I,O,U), podemos obtener valores como los siguientes (original = encriptado):

A = I

AA = AO

AAA = OUE

AEIOU = EUUAE

AAEEIEOIOUIEIUOIEUI = UEUEEAUOIUIOOOAIOAU

AAEEIEOIOUIEIUOIEUIA = EIEIIOEUAEAUUUOAUOEU

Los 3 primeros ejemplos no tienen ninguna relación, siendo éstos la misma vocal, sólo que repetida distintas veces; el últimos ejemplo sólo es una modificación del anterior agregandole la “A” al final, y el resultado es completamente distinto.

Imáginate lo que puedes encriptar si trabajas con alfabetos más grandes, o si aplicas el mismo algoritmo para archivos pero ya tambien con bytes (desde cero hasta 255), obtienes una encriptación más que segura, siempre y cuando tus llaves sean privadas.

Les dejo un TXT, que contiene esta clase Encriptadora, hecha para el abecedario completo con mayúsculas y minúsculas, además de dígitos.

DOWNLOAD FILE