Soplan vientos electorales, y temas importantes en el pasado, como la quema del presupuesto de la cámara y los desvíos de recursos en la pavimentación de la ciudad de Guadalajara para los panamericanos, se dejan a un lado para dar rienda suelta a temas menos relevantes pero más útiles como los errores de dicción de algún candidato y la falta de lectura de otro.

Estamos a punto de vivir una elecciones presidenciales sin precedentes, gracias al crecimiento y desarrollo que han tenido las tecnologías en el ultimo sexenio, y no me refiero a las polémicas urnas electrónica cuya compra no servirá mas que para justificar mas salidas de dinero del erario; sino al crecimiento en el acceso a Internet desde casa acompañado de un crecimiento también exponencial en el uso de las redes sociales como twitter y facebook. Sin duda en un país poblado en su mayoría por jóvenes y siendo el tercer lugar a nivel mundial con mas cuentas en twitter será un tema muy interesante para platicar por los medios tradicionales de comunicación, con voces y opiniones ya conocidas (hasta diría choteadas) como Carlos Loret de Mola, Javier Alatorre o hasta Jacobo Zabludovsky; eso sin contar que empezaran a salir columnas, desplegados y hasta libros de gente que nadie conocía y que de la noche a la mañana resultaron ser expertos en el tema (aunque sus cuentas de twitter daten de apenas unos meses atrás) con títulos como: “la importancia de twitter en las elecciones del 2012″ o algo así. Lo cierto es que ya las grandes televisoras como Televisa y TV Azteca han demostrado su miedo ante la información que corre en un medio que son incapaces de controlar.

Por primera vez la población compartirá opiniones y puntos de vista directamente entre ella, enviando mensajes claros a favor y en contra de los respectivos candidatos sin pasar por las maleaciones que las televisoras y radiodifusoras imprimen en sus contenidos, por si quedara alguna duda de este fenómeno, basta con ver los respectivos sitios de Los “Enriques” (Peña Nieto y Alfaro) quienes sus gobiernos y campañas se han visto afectada y beneficiada respectivamente por el flujo de la red, Esta “tierra de nadie” es un verdadero sueño en el que todos somos iguales y cada opinión cuenta tanto como la de los grandes lastres mediáticos sin tener que decir al final “Twitter noticias” o “Fuerza informativa Facebook”.

También es cierto que esta corriente de información le dará un nuevo tinte a la guerra sucia, pues esta llamada “tierra de nadie” no solo es el sueño de Tomas Moro, sino que también, es por otro lado manejada por intereses económicos, siendo estos últimos referentes al sentido administrativo de los sitios y no al de los contenidos. En el caso de Twister ya se ha sabido de algunos casos de parcialidad para callar comentarios. También estos sitios venden de cierta forma publicidad que puede ser usada para ensuciar “el buen nombre” de algún candidato, por ejemplo, poniendo hasta el tope de una búsqueda alguna infamia, cierta, falsa o incierta de el candidato consultado; hechos de este tipo ya fueron denunciados por primera vez por el comunicólogo Loret de Mola en contra de Peña Nieto en Youtube.com, asegurando que con poner el nombre de “Enrique Peña Nieto” en las búsquedas aparecen videos patrocinados de escándalos no solo de él sino también de su partido en general. Este tipo de hechos provocará sin duda, tarde que temprano la intervención del tribunal electoral en las redes sociales buscando controlarlas de alguna manera.

Si me permiten predecir, esto no ocurrirá para las próximas elecciones, pues ya sabemos cuanto trabajo les cuesta ponerse de acuerdo a las cámaras para legislar en tiempo electoral, pero aunque en el 2012 las redes sociales serán mas que simplemente divertidas, después de este año es muy probable que sean controladas y para el 2018 este fenómeno no se vuelva a repetir, por lo menos no con las tecnologías concebidas ahora; mi esperanza es que en estos momentos, en la cabeza de alguien ya se este engendrando la evolución que sustituya a estas redes a corto plazo, que nos garanticen la “libre compartición de ideas” con las que la humanidad siempre soñó y que jamás debería perder.

Leave A Comment, Written on December 18th, 2011 , General, Politica, Tecnologia, Uncategorized Tags:

Configurar squid hoy en dia para bloquear sitios en una red esta bastante documentado, pero es algo latoso configurarlo para los más novatos, asi que pongo aquí un archivo “squid.conf” y su respectivo “proh.txt” (lista negra de sitios bloqueados) de una configuración estandar muy útil.

Files:

Esta instalación es para centos 5, solo hay que reemplazar los existentes en /etc/squid/ por estos nuevos. En el squid.conf buscar la linea  que diga visible_hostname cel y reemplazar el “cel” por el nombre host dado de alta en tu máquina (si no lo has cambiado la linea es 926; si lo deseas en la 925 puedes cambiar el puerto por el que atenderá squid el servicio http, por default es 3128).

Después solo hay que agregar la lista de sitios a bloquear en el archivo proh.txt e iniciamos o reiniciamos squid. y listo

Leave A Comment, Written on May 3rd, 2011 , Uncategorized

Declaración del objeto XMLHttp para su uso de forma asincrónica (Ajax).


//Funcion que implementa el objeto XMLHttpRequest
function usoDeAjax(parametro, parametro2){
   var ajax = XMLHttp();
   var parametros = "?valor1=" + parametro + "&valor2=" + parametro2;
   ajax.open("GET", "motores/scriptAsincronico.php" + parametros, true);
   ajax.onreadystatechange = function(){
      if(ajax.readyState == 4){
         var respuesta = ajax.responseText;
         document.getElementById('salida').innerHTML = respuesta;
      }
   }
   ajax.send(null);
}

//Funcion que crea el objeto XMLHttpRequest (constructor)
function XMLHttp(){
   var Object;
   if (typeof XMLHttpRequest == "undefined"){
      if (navigator.userAgent.indexOf("MSIE 5") >= 0){
         Object = new ActiveXObject("Microsoft.XMLHTTP");
      }else{
         Object = new ActiveXObject("Msxml2.XMLHTTP");
      }
   }else{
      Object = new XMLHttpRequest();
   }
   return Object;
}
Leave A Comment, Written on October 15th, 2010 , Uncategorized

Así es, me he estado divirtiendo un poco creando estructuras de datos en php5, solo para conocer algo más de sus flexibilidades. Hasta ahora no he tenido problemas con pilas y colas, pero me ha parecido divertido el concepto de los árboles binarios de búsquedas. Dejo el código de lo que llevo, si alguien lo acaba antes que yo, por favor compártanoslo a todos. Saludos. ;)


<?php
	class arbol{
		public $id_nodo;
		public $data;
		public $hijo_izq;
		public $hijo_der;

		public function __construct(){
			$this->id_nodo = 0;
			$this->data = null;
			$this->hijo_izq = null;
			$this->hijo_der = null;
		}

		public function inserta($data){
			if (is_null($this->data)){
				$this->data = $data;
			} else {
				if ($data > $this->data){
					if (is_null($this->hijo_der))
						$this->hijo_der = new arbol();
					$this->hijo_der->inserta($data);
				} else if($data < $this->data){
					if (is_null($this->hijo_izq))
						$this->hijo_izq = new arbol();
					$this->hijo_izq->inserta($data);
				}
			}
		}

		protected function profundidad(){
			$profundidadIzq = -1;
			$profundidadDer = -1;

			if (!is_null($this->hijo_der)){
				$profundidadDer = $this->hijo_der->profundidad();
			}
			if (!is_null($this->hijo_izq)){
				$profundidadIzq = $this->hijo_izq->profundidad();
			} 

			return 1 + (($profundidadIzq > $profundidadDer)?$profundidadIzq:$profundidadDer);
		}

		protected function valance(){
			$profundidadIzq = -1;
			$profundidadDer = -1;

			if (!is_null($this->hijo_der)){
				$profundidadDer = $this->hijo_der->profundidad();
			}
			if (!is_null($this->hijo_izq)){
				$profundidadIzq = $this->hijo_izq->profundidad();
			} 

			return ($profundidadIzq - $profundidadDer);
		}

		public function imprimirComoArbol($nivel){

			if (!is_null($this->hijo_der)){
				$this->hijo_der->imprimirComoArbol($nivel+1);
			}

			for($i=0;$i<$nivel;$i++)
				echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
			echo $this->valance()."|".$this->data."<br />";

			if (!is_null($this->hijo_izq)){
				$this->hijo_izq->imprimirComoArbol($nivel+1);
			}		

		}

		public function imprimir(){
			if (!is_null($this->hijo_izq)){
				$this->hijo_izq->imprimir();
			}

			echo "\nID: ".$this->id_nodo."<br />";
			echo "DATA: ".$this->data."<br />";

			if (!is_null($this->hijo_der)){
				$this->hijo_der->imprimir();
			}
		}

		public function guardarBD($cnx){
			$ejecutada = false;
			$qry = "INSERT INTO arbol VALUES (null, '{$this->data}', null, null);";

			try{
				$cnx->query($qry);

				if ($cnx->affected_rows > 0){
					$this->id_nodo = $cnx->insert_id;
					$ejecutada = true;
				}
			} catch(Exception $ex){
				echo "Error al insertar nodo";
			}

			return $ejecutada;
		}

		public function cargarBD($cnx){
			$ejecutada = false;
			$qry = "SELECT * FROM arbol WHERE id_nodo = {$this->id_nodo};";

			try{
				$resultadoBD = $cnx->query($qry);

				if ($resultado = $resultadoBD->fetch_object()){
					$this->id_nodo = $resultado->id_nodo;
					$this->data = $resultado->data;
					//Hijo izquierdo
					if (!is_null($resultado->hijo_izq)){
						$this->hijo_izq = new arbol();
						$this->hijo_izq->id_nodo = $resultado->hijo_izq;
						$this->hijo_izq->cargarBD($cnx);
					}
					//Hijo derecho
					if (!is_null($resultado->hijo_der)){
						$this->hijo_der = new arbol();
						$this->hijo_der->id_nodo = $resultado->hijo_der;
						$this->hijo_der->cargarBD($cnx);
					}

					$ejecutada = true;
				}
			} catch(Exception $ex){
				echo "Error al cargar arbol";
			}

			return $ejecutada;
		}
	}

?>

Los nodos del árbol se guardan y cargan de una base de datos en mysql, cuya estructura en sql es la siguiente:


CREATE TABLE arbol(
	id_nodo integer unsigned primary key auto_increment,
	data integer not null, -- deberia ser del tipo a almacenar en el arbol
	hijo_izq integer unsigned default null,
	hijo_der integer unsigned default null
);
Leave A Comment, Written on October 6th, 2010 , Uncategorized

Hola a todos, estoy actualmente trabajando en un cifrador escrito en  lenguaje C basado en una llave pública; por ahora es precisamente lo que llevo, la generación de la llave.

Para este tipo de cifrados, no importa tanto el ocultamiento del algoritmo que lo creo, pues su fortaleza esta en realidad en el desconocimiento de la llave que fue generada y que, se supone, solo poseerá aquella persona que este autorizada para desencriptar el código. Saludos ;)


#include <stdio.h>
#include <string.h>

char cadCifrada[] = "Carlos Dario Diaz Prieto. Para presidente.";
char cadDescifrada[100];
char llavePublica[100];

void partirCadena();
void generarLlavePublica();
char diccionario(int cod);

int main(void){
partirCadena();
generarLlavePublica();
}

void partirCadena(){
//indices y contador de grupos de 4
int i, iCifrada, contador4;
//Inicializacion de cadena descifrada
cadDescifrada[0] = '\0';

//Inicio de agrupamiento
iCifrada = 0;
contador4 = 0;
for (i = 0; i < strlen(cadCifrada); i ++){
//borro los espacios del texto
if (cadCifrada[i] != ' '){
contador4 ++;

cadDescifrada[iCifrada] = cadCifrada[i];
iCifrada ++;

//cada 4 caracteres dejo un espacio para agrupar
if(contador4 == 4){
cadDescifrada[iCifrada++] = ' ';
contador4 = 0;
}
}
}

//Rellenar los espacios del ultimo grupo con X
if (contador4 > 0){
for (i = contador4; i < 4; i++){
cadDescifrada[iCifrada++] = 'X';
}
}

cadDescifrada[iCifrada] = '\0';

printf("\n%s\n", cadDescifrada);
}

void generarLlavePublica(){
int i;

for (i = 0; i < strlen(cadDescifrada); i ++){
if (cadDescifrada[i] == ' '){
llavePublica[i] = ' ';
} else {
llavePublica[i] = diccionario(rand()%27);
}
}

printf("\n%s\n", llavePublica);
}

char diccionario(int cod){
if (cod == 1) return 'A';
if (cod == 2) return 'B';
if (cod == 3) return 'C';
if (cod == 4) return 'D';
if (cod == 5) return 'E';
if (cod == 6) return 'F';
if (cod == 7) return 'G';
if (cod == 8) return 'H';
if (cod == 9) return 'I';
if (cod == 10) return 'J';
if (cod == 11) return 'K';
if (cod == 12) return 'L';
if (cod == 13) return 'M';
if (cod == 14) return 'N';
if (cod == 15) return 'O';
if (cod == 16) return 'P';
if (cod == 17) return 'Q';
if (cod == 18) return 'R';
if (cod == 19) return 'S';
if (cod == 20) return 'T';
if (cod == 21) return 'U';
if (cod == 22) return 'V';
if (cod == 23) return 'W';
if (cod == 24) return 'X';
if (cod == 25) return 'Y';
return 'Z';
}
Leave A Comment, Written on September 27th, 2010 , Uncategorized

CDar Blog (c) is proudly powered by WordPress and the Theme Adventure by Eric Schwarz
Entries (RSS) and Comments (RSS).

CDar Blog (c)

Blog de C.Darío :: Programador ::