Zequez Cosas mías y cosas útiles, con Wordpress y un tema prefabricado. FUCK YEA.

1Aug/112

Indecisiones de la vida

question-mark4a[1]

A veces creo que soy una persona muy indecisa, bueno, en realidad creo que siempre soy indeciso, osea, nunca logro decidirme, y si me decido, cambio de opinión al poco tiempo. Es como si mi cerebro se aburriera de lo mismo, lo que un día me parece la mejor idea que se me ocurrió en mi vida, al día siguiente me parece pésimo. ¿Por qué estos cambios de ánimo tan repentinos? ¿Por qué no puedo ser constante con algo?

Hace poco terminé una página, Comicsen, es un sitio web para la traducción de webcomics, tiene robots que se encargan de cargar los nuevos webcomics a la base de datos automáticamente, y puedo traducirlos desde el panel de control con una herramienta que hice yo mismo. El diseño, pese a que en su momento me encantaba, ahora lo veo ¡y no puedo creer qué es lo que le vi! En serio, me parece terrible para una página de webcomics.

Luego de esta página se me ocurrió otra idea, como de costumbre, y la dejé, aunque todavía entro a traducir algunos comics por día, para no dejarla abandonada, pero detuve el desarrollo. La gente se sorprendería de la cantidad impresionante de proyectos que dejé a medio hacer por las razones que cité en el primer párrafo. En este aspecto Comicsen es todo un logro, no quizás en el aspecto técnico o útil de la página, sino en que TERMINÉ, aunque todavía siento que le quedan cosas por hacer, generándome un vacío que no puedo saciar por falta de ganas.

Un día leí un artículo que preguntaba a los lectores por qué creían que la mayoría de las páginas web fracasan, muy interesantes las respuestas, la mayoría se centraba en el hecho de que el creador la dejaba porque el sitio web no cumplía con las expectativas que este tenía, y no me sorprende. Día a día somos bombardeados con historias de sitios web que de la noche a la mañana juntan miles o millones de usuarios y los creadores se hacen millonarios. El problema es que estos sitios son sólo una pequeña fracción de todos los sitios web que son lanzados día a día, ¿y las historias de los fracasos?, ¿y las historias de los sitios web qué no lo lograron?, nadie las cuenta, no son interesantes, y probablemente tampoco nadie se entere.

Tras leer dicho artículo me sentí menos solo (si es que de algún modo uno se puede sentir acompañado en Internet). Mal de muchos consuelo de tontos, dice el dicho, yo seré un tonto, pero al menos se me bajó la depresión (¿o se subió?). Además me motivó a seguir intentando, y no tirar la toalla, ahora las estadísticas están de mi lado, yo creo que un día de estos le voy a pegar en el clavo y voy a poder vivir la vida que anhelo.

Por otro lado, hace tiempo que tenía ganas de aprender Ruby, así que tomé la decisión y me puse a leer un libro, "Beginning with Ruby, from novice to professional" por Peter Cooper. Muy entretenido Ruby, la verdad que me sorprendió la simplicidad. Y ahora estoy trabajando, como de costumbre, en un proyecto nuevo, con Rails. Peter: prometo comprar tu libro si algún día tengo plata.

Me despido, mañana hago un post con la lista de bienes virtuales que uso actualmente pirateados pero que voy a comprar cuando tenga algo de dinero demás.

19Jul/110

Separar amigos conectados de desconectados en el nuevo chat de Facebook

Es probable que hace poco se les haya activado en Facebook el nuevo chat, que te muestra todos los amigos con los que más te comunicas, conectados y desconectados, el problema es que están todos mezclados y puede resultar molesto para ver de una manera rápida quiénes están conectados.

Por eso hice esta extensión que pone a todos tus contactos conectados juntos, en la parte inferior de la lista de amigos.

Sin la extensión:


Con la extensión:

Para descargar la extensión (que en realidad es un userscript para GreaseMonkey así que lo pueden usar en casi cualquier navegador web) hacen click aquí.

Espero que les sea útil ^^

PD: Al ser un script de Greasemonkey les va a pedir autorización para acceder a los datos de todos los sitios web, pero en realidad solamente corre en Facebook, pueden corroborarlo abriendo el archivo en un editor de texto.

Descargar extensión

2Jul/110

¿Cómo eliminar la página de “Ayuda en la búsquda” de Telefónica?

Nota: esto sirve para cualquier proveedor de Internet que haga lo mismo que Telefónica.

Si tenés internet con Telefónica/Speedy entonces habrás notado que cuando intentás entrar a una página que no existe, como por ejemplo http://tarniag.com/ porque tipean con anagramas, Telefónica "gentilmente" los va a redireccionar a una página que supuestamente los ayuda a encontrarla, obviamente con publicidad, y cambiándote complétamente la dirección en la barra de direcciones, así que si te habías equivocado en una puta letra tenés que escribir todo denuevo.

Bueno, esto sucede porque estamos usando el servidor DNS de Telefónica, pero como el Internet es genial, podemos usar el DNS que se nos cante, yo uso los de Google, porque me cae bien, que son 8.8.8.8 y 8.8.4.4

Ahora, para hacer esto:
En Windows 7 lo siguiente:
1. Click en inicio
2. Escribimos Conexiones de Red y apretamos enter

En Windows XP lo siguiente:
1. Click en inicio
2. Panel de control -> Conexiones de Red

3. Hacemos click derecho y vamos a propiedades, en el dispositivo de red que uses para conectarte.
4. Hacemos doble click en el item de la lista que dice Protocolo Internet (TCP/IP), o (TCP/IPv4) en Windows 7
5. En la nueva ventana hacemos click en donde dice "Usar las siguientes direcciones de servidores DNS"
6. "Servidor DNS preferido" pegá 8.8.8.8, en "Servidor DNS alternativo", 8.8.4.4

Listo, ahora si vamos a http://tarniag.net/ nos va a aparecer el error que nuestro navegador web tiene preparado para la situación, y no le dejamos un solo centavo más a nuestra codiciosa ISP:

Y podemos hacer click felizmente en la sugerencia de Google Chrome o nuestro navegador web.

30Jun/111

Cómo importar todos tus contactos de Facebook a Google+

Como muchos habrán notado Google+ no permite importar contactos de Facebook (váyase a saber por qué Google no permitió esto). Lo bueno es que eso no nos impide que los importemos, ya que nosotros somos demasiado piratas para que no nos permitan hacer algo.

El truco está en importar los contactos de Facebook a una cuenta de Yahoo, y luego importarlos desde Yahoo a Google+.

Aquí saqué algunas capturas de pantalla de cómo hacerlo...

Primero vamos a http://mail.yahoo.com y hacemos click abajo a la derecha en Sign in with Facebook

Se abrirá un popup para venderle tu alma a Yahoo, le damos ok. Luego completas tus datos, siguiente, siguiente y ya estás en tu casilla de correo.


Vamos a la pestaña de contactos y luego hacemos click en Import Contacts, que está el iconito de Facebook


Le damos ok a todo y listo, ya terminaste con Yahoo, podés cerrar la pestaña porque no vas a usar esa cuenta nunca más en tu vida.

Ahora vamos a nuestra cuenta de Google+, si no tienen una, entonces no sé que carajo hacen acá, pero si quieren una invitación van a Twitter y buscan por "Google+ invite" que está lleno de gente ofreciendo, porque a mí ya no me dejan invitar más jaja.

Ok, una vez en nuestra cuenta de Google+ vamos a la sección de círculos y hacen click en "Find and Invite", les recomiendo que si tienen ahí a contactos que no van a invitar, como por ejemplo, todos los contactos de Gmail, vayan a "More actions", luego a "Select all", y luego "Remove", así una vez que importan los contactos pueden seleccionar a todos y agregar, sino van a tener que seleccionarlos uno por uno para agregarlos.

Hacen click en Yahoo, se les abre una ventana de confirmación en Yahoo, le dan OK y listo, ya se importaron todos sus contactos, ahora solo tienen que seleccionarlos y agregarlos a algún círculo (yo hice uno que se llama Facebook porque me daba paja ordenarlos en el momento)

Y listo, así es como importan contactos de Facebook a Google+, si les sirvió me dejan un comentario y un abrazo, sobre todo el abrazo, que no falte eh?

EDIT: Google cerró las invitaciones denuevo, estuvieron abiertas por unas horas y miren el bolonqui que se armó en Twitter. Hice un formulario con Google Docs para las invitaciones, agreguen su email si quieren y en cuanto vuelvan a abrir las invitaciones, si todavía no lo hacen complétamente público, los invito ^^

Filed under: Sin categoría 1 Comment
17Jun/110

Sneak Peek de mi último proyecto

Bueno, hace un par de semanas que vengo trabajando en un proyecto nuevo, no voy a decir qué es para no arruinar la sorpresa (?), igual se pueden hacer una idea de la screen que pongo a continuación, y además a algunas personas ya les he comentado..

Como pueden ver el panel de administración ya está casi terminado, la parte visible también está casi terminada, tengo que retocar algunas cosas nomás.

Este es el primer proyecto que estoy usando un framework ajeno, en este caso CodeIgniter con DataMapper, la verdad que está muy buenos :P

Para dentro de poco voy a terminarlo y después me tengo que poner a hacer mi propio gestor de contenidos para el blog :B

Ah, también comento que es muy probable que deje la facu, pero voy a explicar eso en otro post. Lo digo como si alguien leyera esto, además de los bots (?)

Bueno, me voy a volver a programar ^^

15May/110

Ha pasado mucho tiempo

El tiempo se te va volando cuando estás trabajando en algo, y este es el caso, actualmente estoy trabajando en dos proyectos y tengo un tercero que debo comenzar una vez termine los anteriores. Lamentablemente voy a tener que aflojar un poco al tiempo dedicado a los proyectos porque se acercan los parciales de la facultad.

Tengo un parcial de Análisis Matemático este viernes, otro de Programación el 4 de Junio y de Álgebra el 15, por estas razones no esperen demasiados post porque voy a estar estudiando a full para promocionar y sacárme las asignaturas de encima. De cualquier modo nunca posteo demasiado jajaja.

Por tirar una fecha, no creo que pueda volver a concentrarme 99% en mis proyectos hasta después del examen de Álgebra, así que espero poder postear algo un par de semanas después de ello, que tengo pensado terminar el P1 (Proyecto 1).

Quiero más tiempo.

4Apr/114

Abrir todas las notificaciones de Facebook al mismo tiempo

¿Cansado de tener que hacer clicks interminables en Facebook para abrir todas las notificaciones?
- ¡¡Si!!
¿¡Sos una persona muy solicitada que le llegan toneladas de notificaciones minuto a minuto!?
- ¡¡¡SI!!!
Entonces esta extensión para navegadores web que hice, es para vos ^^

¿Qué hace?
- Agrega un par de botones a la derecha de la ventana de notificaciones en Facebook.
- Haciendo click en "Open all" abre todas las notificaciones no leídas en nuevas pestañas.
- Si marcas la casilla "Don't open likes" entonces cuando abre las notificaciones se saltea las que sean "Me gusta".
- Además al ser un userscript, en vez de una extensión para un navegador web en especial, ¡funciona en todos los navegadores web! ^^
- Tiene el texto en inglés para hacerlo más estándar =P, pero si quieren lo editan y lo cambian (?)

¿Qué NO hace?
-  Un café con leche
- Medialunas
- Destruir el mundo
- Encontrar a Wally
- Comprarte una computadora nueva
- Salir a caminar por la calle en búsqueda del tesoro perdido del capitán Ricky Lamentos

 

Para instalarla en Firefox primero tienen que instalar GreaseMonkey.
En Chrome detecta automáticamente.
En Opera creo que también.
En Internet Explorer no tengo las más puta idea, pero sé que se puede. De todos modos, usá un navegador web decente.

¡DESCARGAR LA EXTENSIÓN!

Actualizado 30/7/2011

Versión 1.1.1

Ooop! Me olvidé de sacar una cosa de cuando estaba haciendo la extensión y se abrían todas las notificaciones, incluso las leídas ._. Ya está ahora, ya lo arreglé, sorry -.-

Versión 1.1.0

Solucioné el tema de que se abrían ventanas duplicadas, Facebook había comenzado a incluir parámetros GET en las notificaciones y las comparaciones de las URL no daban bien.

Agregué un checkbox que te permite seleccionar si querés o no querés abrir los likes, si está seleccionada, abre todas las notificaciones que no sean likes/me_gusta. A petición de un amigo (?)

Además, ahora convertí la extensión en Userscript, por lo que: ¡¡¡Puede ser usada en todos los navegadores web!!! ^^

ATENCIÓN: Si ya habías instalado esta extensión antes, desinstalala en chrome://extensions antes de instalar esta versión, porque al convertirla a Userscript pasa como una extensión complétamente nueva y no actualiza.

 

Actualizado 3/6/2011

Versión 1.0.1

Facebook cambió algunos IDs en la página y la extensión se rompió, pero ya lo arreglé y la descargan de nuevo y listo ^^

Bueno, cansado de tener que hacer click en cada una de las notificaciones para abrirlas en pestañas separadas finalmente hice una extensión de Google Chrome que lo hace por mí.

Facebook open all

Hermoso, simplemente hermoso (?)

Simplemente descargan la extensión, la instalan, recargan la pestañas de Facebook y listo, ya tienen el botón.

Lo que hace:

  • Abre las notificaciones no leidas (las que están en azul) en pestañas separadas.
  • Si hay 2 notificaciones que llevan al mismo lugar, solo abre la URL una vez.

Lo que no hace:

  • Abrir las notificaciones una vez que se marcaron como leidas (unos pocos segundos después de que hiciste click en el ícono de las notificaciones).
  • Un café.

Y eso es todo, espero que a alguien le resulte de utilidad ^^

PD: No está en la lista de extensiones oficial porque tengo que pagar US$5 y no tengo tarjeta de crédito u.u (aunque de todos modos a menos que fuese una extensión grosa no lo pagaría xD)

¡DESCARGAR LA EXTENSIÓN!

Filed under: Sin categoría 4 Comments
3Mar/110

Pequeño snippet para debuggear velocidad de código en PHP

Si sos como yo, que -todavía- no usa xDebug en PHP pero querés saber por qué tu script anda lento, y escribir microtime() cada 5 líneas te tiene harto, entonces usá esta pequeñísima función que lo único que tenés que hacer es llamarla con un nombre y listo.

function lap($name = false) {
	static $last = 0;
	$now = microtime(true);
	if ($name) {
		echo "Lap $name " . ($now-$last) . " seconds!<br/>\n";
	}
	$last = $now;
}

El uso sería así:

lap();
funcionQueTardaPoco();
lap('primer función');
funcionQueTardaMucho();
lap('segunda funcion');

Y el resultado sería algo así:

Lap primer función 0.0090179443359375 seconds!
Lap segunda función 1.4245828127234901 seconds!

Me pareció útil así que la postié xD

16Feb/112

Desautorizar todas las aplicaciones de Facebook automáticamente

Facebook apps

Hoy vi que el muro de mi hermano estaba siendo spammeado por aplicaciones spammers de Facebook, entonces le dije que las desautorizara para que se detuvieran...

Cuando fuimos a sus opciones de privacidad nos dimos cuenta que tenía 120 aplicaciones, y Facebook no permitía eliminarlas a todas de una sola vez! Una por una, esperando a que aparezca el cartelito de confirmación!

Por ello es que escribí un script que te permite desautorizar muchas apps de Facebook de manera automarizada, lo dejás corriendo en la página para eliminar aplicaciones y te vas a hacer otra cosa en otra pestaña...

javascript: function eventFire(el,etype){if(el.fireEvent){el.fireEvent('on'+etype);}else{var evObj=document.createEvent('Events');evObj.initEvent(etype,true,false);el.dispatchEvent(evObj);}}
var remove=[];var i=0;removeNext();function removeNext(){if(typeof(remove[i])=="object"){eval(remove[i].href);++i;setTimeout(function(){confirmRemove();},300);}
else{remove=document.getElementsByClassName('fbSettingsListItemDelete');i=0;setTimeout(removeNext,100);}}
function confirmRemove(){var remove=document.getElementsByName('remove');if(typeof(remove[0])=="object"){eventFire(remove[0],"click");acceptRemove();}
else{setTimeout(confirmRemove,100);}}
function acceptRemove(){var ok=document.getElementsByName('ok');if(typeof(ok[0])=="object"){eventFire(ok[0],"click");removeNext();}
else{setTimeout(acceptRemove,100);}}

Simplemente entran a http://www.facebook.com/settings/?tab=applications y pegan el script en la barra de direcciones de navegador. Van a empezar a aparecer cartelitos y a aceptarse automáticamente, debido a que Facebook no te permite eliminar otra aplicación hasta que no terminaste de eliminar la otra, tarda aproximadamente ~800ms por app, así que hacé los cálculos para la cantidad de apps que tengas xD.

AVISO: Solo lo probé en Chrome, si lo usan en otro navegador y funciona dejen un comentario indicando que así lo hace ^^. Ya no tengo más apps para probar en otro navegador jaja.

11Feb/110

Función de tiempo faltante para una fecha en PHP

Sorry, I didn't have the time to translate it, through there are a lot of examples, possibly you'll be able to deduce how it works

Mientras trabajaba en un proyecto di con el usual caso de necesitar una función que me permita mostrar el tiempo faltante para una fecha dada en años, meses, semanas, días, horas, minutos, segundos o una combinación entre estos...

Me quedó tan linda que no pude evitar hacer un post en el blog con esta por si a alguien le sirve ^^

function dateTo($str, $t1, $t2 = false) {
	// Si nos dan un segundo parámetros calculamos el tiempo entre dos fechas
	$t = $t1-($t2?$t2:time());

	// Un array con todos los reemplazos que vamos a usar
	$p = array(
		'{s}'=>1,
		'{i}'=>60,
		'{h}'=>60*60,
		'{d}'=>60*60*24,
		'{w}'=>60*60*24*7,
		'{m}'=>60*60*24*30,
		'{y}'=>60*60*24*365
	);

	// Obtenemos todos los tiempos que fueron proveídos en la string
	preg_match_all("/\{[sihdwmy]\}/", $str, $ma);

	// Creamos un array ordenado del mayor al menor tiempo requerido
	$found = Array();
	foreach ($ma[0] as &$m) {
		$found[$m] = $p[$m];
	}
	arsort($found);

	// Reemplazamos la string con los tiempos
	foreach ($found as $i => &$fo) {
		$str = str_replace($i, (int) ($t/$fo), $str);
		$t = $t % $fo;
	}

	return $str;
}

Para usarla lo único que tienen que hacer es:

dateTo("Faltan {y} años, {m} meses, {w} semanas, {d} días, {h} horas, {i} minutos y {s} segundos para llegue Marty McFly", strtotime("2015-10-21"));

Lo cual devolvería algo como:

Faltan 4 años, 8 meses, 3 semanas, 4 días, 3 horas, 18 minutos, 57 segundos para que llegue Marty McFly

También te permite escribir algo como:

dateTo("Faltan {m} meses y {s} segundos para el 2012!", strtotime("2012-1-1"));

Lo cual devolvería algo como:

Faltan 10 meses y 1998806 segundos para el 2012!

Ya que detecta la el interval de tiempo más grande y saltea los demás para mostrar los intervalos del mayor al menor...

Y también podés escribir la fecha negativa para calcular el tiempo que pasó desde un momento dado:

dateTo("Hace {d} días, {h} horas, {i} minutos y {s} segundos que fue mi cumpleaños!", strtotime("2010/12/14"));

Lo cual devuelve:

Hace -59 días, -20 horas, -54 minutos y -14 segundos que fue mi cumpleaños!

Ahh pero está negativo, no me sirve ¬¬
Bueno, para eso está el tercer parámetro! ^^

dateTo("Hace {d} días, {h} horas, {i} minutos y {s} segundos que fue mi cumpleaños!", time(), strtotime("2010/12/14"));

Lo que te da este hermoso resultado

Hace 59 días, 20 horas, 57 minutos y 17 segundos que fue mi cumpleaños!

Creo que con esos ejemplos ya queda bastante claro como va la función :P
En un futuro tengo ganas de implementarle condicionales, para poder escribir algo como esto:

This is not part of the function, it's a plan of future implementation
dateTo("[Faltan [{m} meses, ][{d} días, ][{h} horas, ][{i} minutos y ][{s} segundos para año nuevo!]]Feliz año nuevo!", strtotime("2012/1/1"));

Y que elimine las partes entre corchetes si el tiempo dentro de estos es 0 o negativo, para así poder reciclar más fácil la misma string...

Bueno, eso es todo, espero que a alguien le sirva, yo sigo con mi "proyectito" que ya lo interrumpí demasiado con esto jaja.

EDITO:

Acá hice una variación de la función para obtener el tiempo faltante en un array. El array es opcional, si no lo ponés devuelve el tiempo faltante de todos los tiempos (por así decirlo jaja).

function dateToArray($arr, $t1 = false, $t2 = false) {
	$p = array(
		's'=>1,
		'i'=>60,
		'h'=>60*60,
		'd'=>60*60*24,
		'w'=>60*60*24*7,
		'm'=>60*60*24*30,
		'y'=>60*60*24*365
	);

	if (!is_array($arr)) {
		$t2 = $t1;
		$t1 = $arr;
		$r = &$p;
	}
	else {
		foreach ($arr as $ar) {
			$r[$ar] = $p[$ar];
		}
	}

	arsort($r);

	$t = $t1-($t2?$t2:time());
	foreach ($r as $i => $q) {
		$r[$i] = (int) ($t/$q);
		$t = $t % $q;
	}

	return $r;
}

El funcionamiento es básicamente el mismo, solo que en el primer parámetro ponés un array en vez de una string, con las keys de los nombres de los tiempos, y, m, w, d, h, i, s.

Si alguien tiene ganas puede combinar las 2 funciones en una sola :P .
Yo no tengo. Y tampoco necesito hacerlo jaja.

Filed under: PHP, Scripts, Snippets No Comments