Configurar elgg en Snow Leopard

| viernes 8 de abril de 2011
Buscando algún opensource para administración de redes sociales me tope con elgg. La verdad esta genial muy fácil de utilizar y configurar, cuando empece a instalarlo me tope con alguno detalles que no me permitían arrancar el sistema y después de algún par de horas buscando en la red les pongo unos sencillos pasos para configurarlo en menos de 5 minutos.

1.- Lo primero que requerimos en verificar si el modulo de php y rewrite esta activos en nuestro apache que esta preintalado en Snow Leopard, para esto abriremos la terminal y mediante el editor de texto vi modificaremos el archivo de configuracion de apache:

sudo vi /etc/apache2/httpd.conf

2.- Una vez abierto el archivo iremos a la linea

#LoadModule php5_module libexec/apache2/mod_php5.so

y le quitamos el signo de numero para quedar de esta forma:

LoadModule php5_module libexec/apache2/mod_php5.so

una vez realizado el cambio almacenamos el archivo.

3.- Ahora se debe de configurar el archivo de configuración para el modulo rewrite que es usado por elgg para eso editaremos el archivo de configuración ubicado en la carpeta del usuario en turno:

sudo vi /etc/apache2/user/{user}.conf

dentro de este archivo de debe modificar para quedar de esta forma:



    Options Indexes MultiViews FollowSymlinks
    AllowOverride all
    Order allow,deny
    Allow from all

Se debe de modificar {user} por el nombre de usuario de la maquina donde se esta realizando la configuración.

4.- Una vez modificado esto se debe reiniciar el servicio de apache:

sudo /usr/sbin/apachectl restart

5.- Ahora bien apache ya esta configurado lo que sigue es realizar la instalación de elgg para lo cual se debe descargar la ultima version del sitio oficial de elgg y colocarlo en tu carpeta de Sites con el nombre como le gustes llamar en mi caso elggtest. Una vez ahi debes de cambiarle los permisos a la capeta que apliquen de forma recursiva a sus elementos con los privilegios de lectura y escritura.

6.- Crear una carpeta donde se almacenen todos loas archivos de intercambio de elgg al mismo nivel que la aplicacion en mi caso cree otra carpeta llamda elggdata en Sites y tambien le damos todos los permisos.

7.- Lo que sigue es crear una base de datos en mysql nombrenla como gusten yo uso MySQLWorkBeanch para la creacion de mis base de datos en mi caso le puse elggtest.

8.- Una vez realizados estos pasos arranquen su portal y sigan el wizzard, en caso de que se les presente una complicacion de que no encuentra una URL abran nuevamente su terminal y editen el archivo .htaccess en la carpeta de elgg y revisen que la linea que dice:

#RewriteBase /user/elgg

se cambie por 

RewriteBase /Users/{user}/Sites/elggtest

donde {user} es su usuario y elggtest es su carpeta donde queda instalado.

9.- Listo!!!! enjoy

Aqui les dejo un video de como realizar estos pasos desde cero.

Probando el publicador de Word 2011

| miércoles 22 de septiembre de 2010

Hace tiempo que no publico nada y el día de hoy se me ocurrió probar el publicador de blog que trae incorporado el Word 2010, La verdad está lindo y simplifica mucho la edición del contendido dado que blogger es limitado en un cuanto a funciones visuales de texto.

Permite editar contenido existente cargándolos directamente a la interfaz de Word para la edición y claro que tienes todo el poder de este procesador de texto para alinear, colocar titulos, imágenes, graficas, wordart y por supuesto el corrector ortográfico que siempre es de gran ayuda.

Para utilizarlo basta con darle en la opción de File >> New >> Blog Post. Una vez hecho esto pedirá la información del proveedor de blog donde deseas realizar la publicación que en mi caso fue blogger y listo.

Me gusto lo recomiendo.

Saludos.

Primer vistas a QuickLink-Date

| miércoles 21 de julio de 2010
Bueno hace mucho que no escribia pero hoy quiero mostrarles el primer vistaso a QuickLink-Date un sistemita de administracion de calendarios que pronto estara en el mercado. Mas que nada es para enseñar algnos ejemplos de controles visuales muy al estilo mac corriendo en windows desde XP para adelante a ver que opinan. Todo esta echo en C# utilizando GDI+ y WinAPI32.

Retomando el blog

| sábado 22 de agosto de 2009

tiempo ha sido bastante raro para mi ya que escribir algo por acá realmente me liberaba la presión laboral así que retomare la buena practica de reflejar mis ideas para poderlas compartir con todo el mundo y por que no obtener retroalimentación de ellas.

Desde hace algún tiempo he tenido la curiosidad de escribir un libro relatando mi mejores experiencias y casos de éxito que he logrado simplemente por el deseo de que otras personas puedan partir de ahí para mejorar las practicas y expresarlas al mundo. La semana pasada en la oficina mi colega Rene Trejo me volvió a recordar que no seria una mala idea y fue ahí cuando se me vino a la mente y se me volvió a enterrar la espina de redactar un libro de tecnología aplicada a los negocios y me es grato poder decir que a partir de hoy empiezo a escribir mi libro.

No se si llegue a ser bueno o tenga grandes ventas ni nada simplemente me gustaría plasmar mi visión de la tecnología aplicada a los negocios, cuales son mis principales problemas y beneficios que se pueden conseguir y admirar como si de una obra de arte se tratase.

Cada semana tratare de plasmar la idea que estaré tratando en mi redacción así que espero realmente que puedan colaborar ya que la información es de todos únicamente hay que buscar canales comunes de comunicación.

CX-Rom

Transformers 2

| martes 17 de febrero de 2009
Pues ya lo habia visto pero no esta de mas, bastante buen trailer y siempre es un placer ver a mi novia actuando en esa pelicula. La uno fue buena digo siempre el trabajo de Spielberg nos deja temas de discusion y sus ideas y enfoce no fueron la exception en la uno a ver que nos deja la dos. (Ya se que me van a decir que fue Bay pero es indicutibel que Spliberg metio sus narices, si no vean los efectos quien mas hace ese tipo de cosas)

Aqui esta el trailer de la 2 que se ve nuevamente bastante dominguera.

Otro de adicto al twitter

| viernes 30 de enero de 2009
Este video esta genial




Posto original Como saber que eres un adicto al Twitter

En google no ven pokemon

| domingo 2 de noviembre de 2008
Para lo que pensaron que el emblema de Chrome era parecido a la pokebola estan equivocados ya que ellos lo que si hacen en jugar con ventanitas :P


Buenisimo

Ya casi ya casi Gears of War 2

| miércoles 29 de octubre de 2008
El dia de hoy me tope con el nuevo trailer de esta supermacro increible saga de juego que si bien el uno fue bastante facil incluso en modo locura la historia y el modo de juego compenso todo, aqui les dejo el traile de la segunda parte que sale el 7 del proximo mes que porsupuesto ya tengo reservado :) enjoy.


En baja calidad YouTube

En alta calidad GameTrailers.com


Gears of Wars 2 Nuevo Trailer

Gadget de CXRex

| martes 30 de septiembre de 2008
bueno despues de varios dias tratando de liberarlo por fin ya esta arriba el gadget de CXRex compatible con iGoogle :) como ven es super sencillo agregarlo en su blog.

Solo tienen que entrar a su blogspot y agregar nuevo gadget y dan click en añade tu propio gadget y ponen esta direccion:

http://www.cxrex.com/gadget/googleminicxrexgadget.xml

y a volar ya tienen su gadget :)

Criptografía en .Net Parte I (MD5)

| viernes 19 de septiembre de 2008
Bueno este post se lo dedico a todas aquellas personas que escriben en los foros que son capaces de desencriptar algoritmos como MD5 y SHA1 o todas esas tonterías que colocan. MMmm de echo yo también tengo el código para desencriptar MD5 pero no lo traigo ya que lo codifique en mi reloj calculadora casio que también cambia el canal de mi tele pero se lo robaron (Que casualidad que las personas que saben encriptar siempre colocan un ejemplo pero los que presumen que desencriptan siempre surge un problema por el cual no pueden colocar el ejemplo pero te dicen que luego te lo envían). Aquí les explicare los dos principales algoritmos que son fáciles de usar y sencillos de entender.

En este primer parte tocaremos el algoritmo MD5 (Message-Digest Algorithm 5) creado por Ronal Rivest del MIT (Massachusetts Institute of Technology) que fue creado en 1991 reemplazando al MD4 que en investigaciones previas se descubrieron su debilidad (No es que alguien normal lo pueda romper, este descubirmiento lo realizo un equipo de genios que dirigía Hans Dobbertin utilizando equipos similares a la IBM P690 que dudo muchas personas en el mundo tengan acceso a un equipo como este así que no me preocupo que mi vecino de 15 años que se la vive en la compu y dice que es super hacker pueda romper jejeje) y como era de esperarse con el avance de la tecnología ya se ha descubierto que el MD5 también es un algoritmo que puede llegar a descifrarse incluso con pruebas de colisión de hash (En palabras de humanos es cuando dos textos pueden generar el mismo resultado y se efectivamente para los que ya se imaginaron cualquier función matemática generara alguna vez una colisión pero se dice que un algoritmo es más seguro cuando su vertiente a colisiones en menor ya que si quisieran evitar una colisión la salida cifrada tendría que ser siempre mayor a la información de entrada garantizando una digestión perfecta pero poco dimensionable) y obiamente como cualquier otro algoritmo puede ser quebrantado por la famosísima fuerza bruta pero es poco eficiente, aquí les dejo los 5 pasos a groso modo del MD5.


Paso 1. Añadiendo bits
El mensaje será extendido hasta que su longitud en bits sea congruente con 448, módulo 512. Esto es, si se le resta 448 a la longitud del mensaje tras este paso, se obtiene un múltiplo de 512. Esta extensión se realiza siempre, incluso si la longitud del mensaje es ya congruente con 448, módulo 512.
La extensión se realiza como sigue: un sólo bit "1" se añade al mensaje, y después bits "0" se añaden hasta que la longitud en bits del mensaje extendido se haga congruente con 448, módulo 512. En todos los mensajes se añade al menos un bit y como máximo 512.

Paso 2. Longitud del mensaje
Un entero de 64 bits que represente la longitud 'b' del mensaje (longitud antes de añadir los bits) se concatena al resultado del paso anterior. En el supuesto no deseado de que 'b' sea mayor que 2^64, entonces sólo los 64 bits de menor peso de 'b' se usarán.
En este punto el mensaje resultante (después de rellenar con los bits y con 'b') se tiene una longitud que es un múltiplo exacto de 512 bits. A su vez, la longitud del mensaje es múltiplo de 16 palabras (32 bits por palabra). Con M[0 ... N-1] denotaremos las palabras del mensaje resultante, donde N es múltiplo de 16.

Paso 3. Inicializar el búfer MD
Un búfer de cuatro palabras (A, B, C, D) se usa para calcular el resumen del mensaje. Aquí cada una de las letras A, B, C, D representa un registro de 32 bits. Estos registros se inicializan con los siguientes valores hexadecimales, los bits de menor peso primero:
palabra A: 01 23 45 67
palabra B: 89 ab cd ef
palabra C: fe dc ba 98
palabra D: 76 54 32 10

Paso 4. Procesado del mensaje en bloques de 16 palabras
Primero definimos cuatro funciones auxiliares que toman como entrada tres palabras de 32 bits y su salida es una palabra de 32 bits.

Losoperadores son las funciones XOR, AND, OR y NOT respectivamente.
En cada posición de cada bit F actúa como un condicional: si X, entonces Y sino Z. La función F podría haber sido definida usando + en lugar de v ya que XY y not(x) Z nunca tendrán unos ('1') en la misma posición de bit. Es interesante resaltar que si los bits de X, Y y Z son independientes y no sesgados, cada uno de los bits de F(X,Y,Z) será independiente y no sesgado.
Las funciones G, H e I son similares a la función F, ya que actúan "bit a bit en paralelo" para producir sus salidas de los bits de X, Y y Z, en la medida que si cada bit correspondiente de X, Y y Z son independientes y no sesgados, entonces cada bit de G(X,Y,Z), H(X,Y,Z) e I(X,Y,Z) serán independientes y no sesgados. Nótese que la función H es la comparación bit a bit "xor" o función "paridad" de sus entradas.
Este paso usa una tabla de 64 elementos T[1 ... 64] construida con la función Seno. Denotaremos por T[i] el elemento i-ésimo de esta tabla, que será igual a la parte entera del valor absoluto del seno de 'i' 4294967296 veces, donde 'i' está en radianes.

Código del MD5:
/* Procesar cada bloque de 16 palabras. */
para i = 0 hasta N/16-1 hacer

/* Copiar el bloque 'i' en X. */
para j = 0 hasta 15 hacer
hacer X[j] de M[i*16+j].
fin para /* del bucle 'j' */

/* Guardar A como AA, B como BB, C como CC, y D como DD. */
AA = A
BB = B
CC = C
DD = D

/* Ronda 1. */
/* [abcd k s i] denotarán la operación
a = b + ((a + F(b, c, d) + X[k] + T[i]) <<<>
/* Hacer las siguientes 16 operaciones. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/* Ronda 2. */
/* [abcd k s i] denotarán la operación a = b + ((a + G(b, c, d) + X[k] + T[i]) <<<>
/* Hacer las siguientes 16 operaciones. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/* Ronda 3. */
/* [abcd k s t] denotarán la operación a = b + ((a + H(b, c, d) + X[k] + T[i]) <<<>
/* Hacer las siguientes 16 operaciones. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

/* Ronda 4. */
/* [abcd k s t] denotarán la operación a = b + ((a + I(b, c, d) + X[k] + T[i]) <<<>
/* Hacer las siguientes 16 operaciones. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51]
[BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54]
[CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57]
[DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

/* Ahora realizar las siguientes sumas.
(Este es el incremento de cada uno de los cuatro registros por el valor que tenían
antes de que este bloque fuera inicializado.) */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
fin para
/* del bucle en 'i' */



Paso 5. Salida El resumen del mensaje es la salida producida por A, B, C y D.
Esto es, se comienza el byte de menor peso de A y se acaba con el byte de mayor peso de D.

Tal vez muchos no todos le entienda a la descripción técnica del algoritmo pero les puedo asegurar que es un muy buen método para proteger su información sin temores a que rompan su seguridad a menos que se estén enfrentando al gobierno de los estados unidos o algo asi que no creo que sea el caso jajaja. El funcionamiento en palabras humanas es que el algoritmo toma la información que se requiere encriptar y por medio de su función matematica genera un digito que únicamente se puede calcular con la información que se entrega originalmente, imaginemos que es como si nosotros le pasaramos una operación matematica en este caso será representada por el texto a encriptar y ella nos regresaría un resultado, este mecanismo es bastante útil ya que si ustedes tienen el resultado es bastante pero bastante difícil saber con qué operación fue obtenido, están de acuerdo que aunque alguien tenga el hash obtenido por el MD5 es casi imposible que pueda descifrar la contraseña, el tema de la colision se genera siguiendo el mismo ejemplo si alguien coloca una operación que devuelva el mismo resultado :S es algo muy difícil ya que se tiene un resultado de 128 bit que normalmente lo representan con 32 digitos hexadecimales pero en fin no es imposible generar una colision pero si es muy pero muy poco probable que esto suceda.

Para poder utilizar este algoritmo en .Net es muy simple teniendo en mente que MD5 es solo de una via la única forma de comparar la contraseña es volver a encriptar el dato y compararlo con el que ya se tiene almacenado, si la contraseña que te brindan una vez procesada con MD5 genera la misma cadena que tienes almacenada esto nos da la confianza que la contraseña es correcta.

Para tomar una cadena y cifrarla con MD5 se requiere agregar la librería System.Security y utilizar el namespace System.Security.Cryptography ahora lo que requerimos en una clase que se encarge de gestionar las cadenas en texto simple y nos regrese un hash representado en base 16 (Hexadecimal) con la cual esta función no puede generar ese comportamiento:

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;

namespace CX.Security.Common {
public class CryptoMD5 {

public String getMD5Base64Encoding(String _password)
{
MD5 md5Provider = new MD5CryptoServiceProvider();
Byte[] originalBytes = ASCIIEncoding.Default.GetBytes(_password);
Byte[] encodedBytes = md5Provider.ComputeHash(originalBytes);
return Convert.ToBase64String(encodedBytes);
}
}
}


El código es bastante sencillo se recibe una cadena que es el password, después se crea un objeto MD5 y se inicializa con su proveedor de servicio que obviamente deberá ser MD5, todo el trabajo en criptografía es atreves de bytes y no cadenas por eso se transforma la cadena obtenida en un arreglo de bytes que después es analizada por el MD5 con la función ComputeHash y el resultado también en bytes debe ser transformado en cadena que en mi ejemplo lo convierto a base 64 y no 16 pero esto es de gustos a gustos :S y además porque es una función nativa de Convert y no encontré la de Base 16 y que flojera hacer el proceso manual jajajaja espero les sirva y para cuando vuelva a leer comentarios como “El MD5 si se puede desencriptar solo tienes que aplicar el mismo proceso pero a la inversa” ustedes le puedan contestar “El hecho de que puedas meter a un elefante a una caja de cerrillo no quiere decir que sea posible regresarlo a su estado original” ok suerte y felices códigos.