WordCamp Argentina: Participaré en el Genius Bar

Wordpress 1 Comment »



Foto por Scott Beale

El próximo 8 de mayo tendrá lugar la WordCamp Argentina en el edificio de Microsoft, en Argentina, y contará con un detalle especial: un Genius Bar.

La idea del Genius Bar es que haya un sector con personas con bastante conocimiento en WordPress para que los que tengan dudas o problemas con su sistema puedan consultarlas y resolverlas en un lapso de tiempo que rondará los 5 y 10 minutos. Así, los que asistan y quieran ver detalles técnicos de su blog, podrán charlarlos e irse a casa con una mejora.

Afortunadamente fui elegido y seré parte de ese Genius Bar, así que junto a Francisco Chaves, Martín Aberastegue, Martín Beas Núñez, Juan Rossi y Ezequiel Prieto vamos a estar ahí esperando que vengan a consultarnos sus dudas. ¡Nos vemos el ocho de mayo!

Plugin para WordPress: Solapa para Comentar

Wordpress 9 Comments »

Otro nuevo plugin que desarrollo para WordPress. Esta vez es para blogs con la mayoría de sus posts largos (aunque no es excluyente eso, claro). Muchas veces nos encontramos leyendo un post y queremos ir comentando varios puntos a medida que lo vamos leyendo. Se vuelve tedioso ir hasta abajo de todo (donde se ubica en la mayoría de los themes el formulario para comentar) para dejar un comentario parcial, subir, seguir leyendo, y volver a bajar para seguir el comentario.

Este plugin es una solución para eso. Muestra una solapa en el margin izquierdo de la página que nos sigue mientras scrolleamos y que, al hacerle click, desplega el formulario de contacto. Una demo instantánea es la de este mismo blog que pueden probar acá a la izquierda.

Instalación:

Para instalar el plugin, solo hay que subir el directorio solapa-comentarios que está adentro del archivo descargado en la carpeta wp-content/plugins de nuestro blog. Luego, activarlo desde nuestro panel en la sección de plugins.

Configuración:

El plugin no necesita ser configurado. Si se quiere, se puede borrar el link que hay como crédito borrando directamente la línea 66 de solapa-comentarios.php (La línea está comentada y se encuentra fácilmente).

Agradecimientos:

A Zim y a Daniela que me ayudaron con unos problemas de CSS que tuve mientras lo desarrollaba.

Descargar Plugin: Solapa Para Comentar

El Día Pi en el Logo de Google

Matemática 2 Comments »

Hoy, 14 de marzo, fecha en la que nació Albert Einstein, es también reconocido como el día del número pi, ya que en la forma americana de escribirlo, 3/14, es la forma en la que se escribe el número π con dos decimales.

La fecha debe ser importante pues Google cambió su logo en las páginas iniciales de todos sus buscadores regionales, inclusive, claro, Argentina. Para los que solo conocen al número por su nombre y su fama pero no tanto por su uso, en el logo de Google se lo puede ver en las siguientes utilidades.

Primero, en la G, se puede verlo en la función del área de la circunferencia: π r2. En las oo, podemos ver lo que es la función seno o coseno, donde el período de las mismas es naturalmente.

La segunda g se divide en dos partes. La parte superior nos da una aproximación de π definiéndolo como mayor a 223/71 y menor a 22/7, dejándose ver figuras regulares que era la forma en la que antiguamente se calculaban aproximaciones del número. La parte de abajo de la g define la función del volumen ocupado por una esfera: 4/3π r3. La l del logo hace lo mismo, muestra como se calcula el volumen de un cilindro: π r2 h (siendo h la altura del mismo). Por último, la e está envuelta en una circunferencia y vemos la fórmula para calcular el perímetro de la misma: 2π r.

Obviamente, Google ha puesto en su logo los usos más comunes del número para el reconocimiento de la mayoría de la gente en él.

Nicolas Bourbaki: un matemático brillante… que nunca existió

Matemática 10 Comments »

Nicolas Bourbaki nació en el Café Capoulade, en París, Francia, en 1934, aunque su fecha exacta sigue siendo un misterio. A lo largo de su extraña vida, publicó nueve libros que cambiaron las matemáticas aplicándole mucho más rigor.

Sus nueve libros publicados son Teoría de conjuntos, Álgebra, Topología general, Funciones de una variable real, Espacios vectoriales topológicos, Integración, Álgebra conmutativa, Variedades diferenciables y analíticas, Grupos y álgebras de Lie y Teorías espectrales. Estos libros reformulaban los conocimientos hasta el momento -hasta la decáda del 40, para poner una fecha media-, proponiendo un tratado de las matemáticas más riguroso y exigente. De esta forma, Nicolas generalizó conceptos y términos que siguen usándose hoy en día.

De hecho, estos nuevos conceptos no son para nada avanzados. Los conceptos de inyecta, subyectiva y biyectiva, fueron acarreados por él. Inclusive, el símbolo para un conjunto vacío, el cero tachado: .

O algo que vemos hasta en la escuela primaria: N, Z, Q, R y C. Las letras para designar a los naturales, enteros, racionales, reales y complejos fueron también inventadas por Bourbaki.

Sin embargo, a pesar de todos sus aportes a las matemáticas, a Nicolas Bourbaki nunca lo dejaron ser miembro de ninguna asociación de matemáticos.

Porque Nicolas Bourbaki nunca existió.
Read the rest of this entry »

Como un videojuego mejoró la forma de calcular raíces inversas

Creatividad, Matemática 2 Comments »

Mientras jugamos a algún videojuego, posiblemente no notemos todos los detalles realizados, salvo que alguno no encaje y esté mal hecho. Una reflexión de la luz bien hecha nos será algo natural, pero un detalle que refleje en un sentido irreal será rápidamente advertido.

Los desarrolladores del Quake III se encontraron con un problema al tratar de hacer uno de estos detalles: el de la iluminación y la reflexión de la misma. Al ser un juego en tres dimensiones, debían calcular la norma (longitud) del vector que incidía. Así como en dos dimensiones se calcula con el Teorema de Pitágoras, en tres dimensiones es igual pero con tres vectores:

La suma de los cuadrados de los tres vectores (uno que correspondía a cada eje) no era un problema de calcular. La lentitud venía cuando había que calcular la raíz cuadrada, ya que eran apróximadamente millones que calcular en apenas un segundo -menos tiempo, de hecho-. Una tarea lenta para los mediados de los 90′, cuando fue desarrollado.

La creación de una función para calcular la inversa de la raíz cuadrada de forma rápida fue, por un lado, vital para la creación del juego. Por otro lado, fue totalmente novedosa por el modo en el que se hacía el cálculo.

float InvSqrt (float x)
{
    float xhalf = 0.5f*x;
    int i = *(int*)&x;
    i = 0x5f3759df - (i>>1);
    x = *(float*)&i;
    return x*(1.5f - xhalf*x*x);
}

Esa es la función que se creó en 1990 para el Quake III que luego se dio a conocer en OpenArena (la versión opensource) y que resulta hasta 4 veces más rápida que 1/sqrt(x).

La función trabaja con la forma en la que se almacenan los números en las memorias de las computadoras, por lo que entenderla de manera rápida es imposible sin los conocimientos previos (así como explicarla). (Para los interesados, pueden leer el paper de Chris Lomont en donde explica matemáticamente lo que hace la función.)

Pero básicamente lo que hace la función es tomar el número deseado en notación científica, y pasar a negativo y dividir por la mitad al exponente (luego con el método de aproximación de Newton se consigue algo más cercano al valor real, pero no es lo que nos interesa).

Para conseguir eso, que el exponente se vuelva negativo y luego partirlo por la mitad, se necesitaba una multplicación (por -1) y luego una división (por 2). Lo cual era un trabajo pesado para la computadora en aquellos tiempos -debido a la cantidad de esas cuentas que se tenían que hacer-, por lo se necesitaba una forma más liviana. Y esto es lo que hace esta función, hace todo simplemente con sumas y restas.

Para pasarlo a negativo, usa un viejo truco: restarle a cero el número que queremos pasar a negativo. El problema era la pesada división por 2…

Y ahí es donde entra nuestro número mágico, 0×5f3759df. Una forma de dividir al exponente por dos es haciéndole un shift (aquí es donde habría que entender la forma en la se almacenan los números), que corre un lugar a todos los bits en la memoria de ese número. Esto provoca que el exponente se divida por dos… pero también el número de la base.

Por ejemplo, si tuviésemos 5.4^10, al shiftearlo, tendríamos 2.7^5, cuando en realidad quisiéramos 5.4^5.

0×5f3759df entra en juego y restando al número anterior corrige esa falla, dejando que solo la división afecte al exponente.

Con el tiempo, nuevos números mágicos fueron encontrados que actuaban mejor que 0×5f3759df, pero sin dudas el honor de haber sido el primero se lo lleva este último.

No importa si la explicación fue entendida o no. Lo importante es que programadores encontraron otras formas de hacer cálculos matemáticos, de hecho encontraron una forma para calcular la inversa de la raíz cuadrada con sumas y restas. Y eso es lo bello/importante/sorprendente de la matemática… día a día se siguen encontrando diferentes caminos para llegar a lo mismo, caminos que verifican que es una ciencia casi-perfecta… o perfecta.

Time to Radians: Midiendo el tiempo en ángulos (en radianes)

Labs, Matemática, Programación 2 Comments »

La gente normal -o la gente de otras ciencias, mejor dicho- puede que mida los ángulos en grados: 90º, 180º, 360º. Sin embargo, los matemáticamos creemos que la forma en la que se miden los grados es por radianes. La conversión entre radianes y grados es muy sencilla y es por regla de tres simple. π equivale a 180º, por lo que, por ejemplo, 90º sería π/2. Entonces, la vuelta entera, es 2π.

Y así como a veces uno usa el sistema de las agujas reloj para señalar cosas por la calle y pasar desapercibido, Fepe empezó a decirme la hora en radianes cada vez que salía el tema. La idea de hacer algo que calcule automáticamente eso no tardó en llegar y acá está: Time to Radians.

Toma la hora de la PC del usuario con Javascript, y luego con PHP hace los cálculos para pasarla a radianes y luego dibujarla para que el API de Charts de Google la entienda.

No fue más que una curiosidad y un ejercicio para mí, el cual fue bastante divertido hacer. Ahora está ahí, subido, para todo el que quiera verlo.

Foto original del post en Flickr

Athena Kurukshetra 2010, la competencia matemática

Matemática, Programación 4 Comments »

Kurukshetra 2010 es la conferencia internacional de tecnología de la Universidad Anna, de Chenai, en la India.

La organización preparó un proyecto llamado Athena, el cual será una competencia para resolver problemas de índole matemáticos-lógicos a través de la programación (como el Project Euler, pero plasmado en una competencia).

Para participar solo hace falta registrarse gratuitamente en el sitio de la conferencia y luego ingresar con ese usuario al sistema de Athena.

Mañana 6 de enero, apartir de la 5PM de India, estará disponible la primera fase que será de práctica, en la que los participantes se podrán familiarizar con el sistema.

La competencia per sé será desde el 8 de enero hasta el 15 de enero.

Saber si un número es primo o no… con expresiones regulares

Matemática, Programación No Comments »

Saber si un número es primo -aquellos solo divisibles por sí mismos y por el número 1- es una tarea que en programación significa funciones recursivas. Algunas más optimizadas que otras, pero siempre terminamos en fijarnos si el número que queremos chequear es múltiplo de los números menores.

Hoy, navegando y leyendo, me encontré con algo que me sorprendió y me pareció muy curioso: como saber si un número es primo o no verificándolo con expresiones regulares.

En el 2000, en la conferencia de Perl Yet Another Perl Conference, en una charla se presentó una forma de verificar esto. Lo que hay que hacer es, primero, pasar el número que queremos verificar a una cadena de 1, donde la cantidad de 1 que aparecerán es el número que queremos verificar.

Es decir, si queremos verificar el número 7, tendremos que pasarlo a 1111111. Si queremos verificar el 15, será 111111111111111. Y luego, a esa cadena de 1, tenemos que ver si coincide con esta expresión regular:

/^1?$|^(11+?)\1+$/

Si no coincide, entonces el número es primo. Es algo muy sencillo de hacer en programación. En PHP se verifica con algo tan simple como

preg_match('/^1?$|^(11+?)\1+$/', str_repeat(1, $n))

Esta expresión se puede dividir en dos para entenderla mejor, con el signo |. La primera parte es solo para verificar si se le pasan los números 0 o 1, pues ambos no son primos pero sin esa excepción darían que sí lo son. La segunda parte es donde se produce la magia…

Lo que hace la expresión regular es primero si el número que le pasamos es de la forma 11 o alguna cadena múltiplo de esa: es decir, 11, 1111, etc. Es decir, que esté formada por onces. Si no, volverá atrás y le agregará un 1 al anterior y volverá a probar lo mismo. O sea, luego probará con 111 y cadenas con ciento onces: 111111, etc.

El siete, por ejemplo, no encaja en ninguna de estas formas. No se puede formar con el 11 ni con el 111, ni mucho menos con el 1111 (ya que luego habrá 8 unos). Si pudiese formarse con alguna cadena de unos, es porque es un múltiplo de un número anterior.

Es una forma muy original y rápida de calcular si un número es primo, sin la necesidad de crear una función que verifique matemáticamente esto. Sin embargo, en lenguajes como PHP, falla con números grandes. La razón es la incapacidad de guardar variables con muchas caractéres, lo que sucede al tratar de guardar la variable que almacena los unos de un número como, por ejemplo, un 1.000.000.

Imagen del post del comic de XKCD

Plugin para WordPress: Miniposts destacados en el RSS

Wordpress 3 Comments »

Hacé unos días publiqué un tutorial para destacar con una etiqueta los miniposts de nuestro blog en el RSS generado, así nuestros lectores están advertidos que están ante un minipost y no se sorprenden debido a la poca longitud del mismo.

En ese tutorial, uno tenía que modificar el código base de Wordpress, por lo que ante un update se perdían los cambios; así que hice un plugin para esto que basta con instalarlo y configurarlo.

Instalación:

Para instalar el plugin, solo hay que subir el archivo MinipostsRss.php en la carpeta wp-content/plugins de nuestro blog. Luego, activarlo desde nuestro panel en la sección de plugins.

Configuración:

Para configurarlo, hay que ir a MiniPosts en el RSS en la sección de Opciones (Settings) en el Panel. Ahí se pone el ID de la Categoría que queremos destacar (que se obtiene en la página de Categorías) y la etiqueta que queremos que aparezca (por defecto la etiqueta es [MiniPost])

Descargar Plugin: Destacar Miniposts en el RSS

Widgetizar un Plugin: Cómo hacer que un plugin sea un Widget en la Sidebar

Wordpress 1 Comment »

Si alguna vez intentaste desarrollar un plugin para Wordpress, al terminar de hacerlo, te preguntaste cómo se hacía para que esté disponible como Widget y el usuario simplemente tenga que arrastrarlo, en vez de andar copiando y pegando código en los archivos del theme.

En este post voy a explicar cómo hacer para pasar un plugin de copiarypegarcódigo a widget, inclusive pasándole parámetros a través del panel de control.

Para eso, voy a tomar el plugin Facebook Posted Items realizado por Fepe, que permite mostrar un listado de los links compartidos en Facebook. Este plugin es una simple función PHP a la que le pasamos un parámetro de nuestro usuario en la red social y luego lista los links. Para usarlo, hay que llamar a la función fb_posted_items() desde alguna parte de nuestro código. Por lo tanto, veremos cómo hacer para que sea un widget y podamos automáticamente elegir la ubicación del mismo en la sidebar.

1. Creando el Widget

La creación del widget -sin parámetros ni opciones- es muy fácil. En primer lugar vamos a definir la función a la que llamará el widget, es decir, que aparecerá en el blog en la ubicación del widget. En este caso, llamaremos a la función widget_fb_posted_items() y es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
<?php function widget_fb_posted_items($args) {
	extract($args);
 
	echo $before_widget;
		echo $before_title;
		echo "Facebook Posted Items";
		echo $after_title;
		fb_posted_items(UrlDelRSSdelosPostedItems);
	echo $after_widget;
}
?>

Como verán, la función es bastante sencilla. Mostramos las variables propias de Wordpress para antes y después de un widget ($before_widget y $after_widget), y las del título (que suelen ser la apertura y cierre de h2) con el que aparecerá en la sidebar. Luego de tener esta función definida, la registramos como Widget y ya estará disponible desde el panel de control.

1
<?php register_sidebar_widget("Facebook Posted Items", "widget_fb_posted_items"); ?>

La función con la que lo hacemos es register_sidebar_widget y recibe dos parámetros: el nombre con el que queremos que aparezca en el panel y la función misma a la que llama.

Así ya tenemos definido el widget y puede utilizarse completamente. Sin embargo, para personalizarlo (en este caso podemos cambiar el título de la sidebar -si queremos- y es obligatorio que definamos la URL del RSS de los links de Facebook) habría que meterse a tocar el código y redefinir el archivo. Ya que lo tenemos definido como Widget, podríamos definirle las opciones en el mismo panel de control, pudiendo cambiar todo sin la necesidad de re-subir el archivo por FTP.

2. Definiendo opciones para el Widget

Para definir opciones para el Widget, utilizaremos las funciones get_option() y update_option() de WordPress, así como también register_widget_control() para definir los controles.

Así como antes creamos una función para el widget, ahora crearemos una para los controles. En mi caso se llamará widget_fb_posted_items_control() y estará compuesta así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php function widget_fb_posted_items_control() {
		$options = $newoptions = get_option('widget_fb_posted_items');
		if ($_POST["fbpi-submit"]){
			$newoptions['title'] = strip_tags(stripslashes($_POST["fbpi-title"]));
			if(empty($newoptions['title']))
				$newoptions['title'] = 'Facebook Posted Items';
			$newoptions['url'] = strip_tags(stripslashes($_POST["fbpi-url"]));
		}
		if ($options != $newoptions) {
			$options = $newoptions;
			update_option('widget_fb_posted_items', $newoptions);
		}
		$title = htmlspecialchars($options['title'], ENT_QUOTES);
		$url = htmlspecialchars($options['url'], ENT_QUOTES);
	?>
			<p><label for="fbpi-title"><?php _e('Title:'); ?> <input style="width: 180px;" id="fbpi-title" name="fbpi-title" type="text" value="<?php echo $title; ?>" /></label></p>
				<p><label for="fbpi-url"><?php _e('URL Facebook Posted Item:'); ?> <input style="width: 180px;" id="fbpi-url" name="fbpi-url" type="text" value="<?php echo $url; ?>" /></label></p>
				<input type="hidden" id="fbpi-submit" name="fbpi-submit" value="1" />
	<?php } ?>

Lo primero que hacemos en la función es obtener las funciones del widget con get_option(“widget_fb_posted_items”) y guardarlas en ambos arrays, $options y $newoptions. Luego verificamos si el formulario fue enviado y si fue así, actualizamos los valores de $newoptions["title"] y $newoptions["url"] con los de los campos de los controles.

Siguiendo, verificamos que $newoptions sea distinta de $options (si son iguales es porque no se ha hecho ningún cambio), y si son distintas, guardamos los nuevos valores de $newoptions mediante la función update_option() (a la que le pasamos el nombre del widget y el array con las opciones).

Como verán, quedaron definidas las opciones title y url, las cuales son para el sutítulo con el que aparecerá el widget en la sidebar y la url de los links de Facebook.

Por último, en la función, definimos los campos del formulario que mostraremos para que se le puedan pasar los datos. Y luego, definimos esta función como control del widget con

1
register_widget_control("Facebook Posted Items", "widget_fb_posted_items_control");

Pasándole el nombre del widget y la función. El nombre del Widget en esta función debe coincidir con el que le pasamos en register_sidebar_widget() para que Wordpress sepa asociarlos.

Ya están totalmente definidos los controles y las opciones que le pasemos serán guardadas. Sin embargo, debemos modificar la función del widget original para que aparezcan en el widget. Para eso, utilizaremos la función que ya usamos antes get_option().

1
2
3
4
5
6
7
8
9
10
<?php function widget_fb_posted_items($args) {
	extract($args);
	$options = get_option('widget_fb_posted_items');
	echo $before_widget;
		echo $before_title;
		echo $options["title"];
		echo $after_title;
		fb_posted_items($options["url"]);
	echo $after_widget;
} ?>

De esta manera, ahora dentro de la función traemos las opciones y las guardamos en el array $options. Luego mostraremos $options["title"] y le pasaremos a la función original el $options["url"], quedando totalmente definido el widget.

Espero que este ejemplo haya servido un poco para entender como se crean widgets y sus opciones a los que están empezando a hacer plugins en Wordpress o quieren pasar a Widget alguno de los que ya han hecho. Cualquier duda pueden dejarla en los comentarios.


Design by j david macor.com.Original WP Theme & Icons by N.Design Studio
RSS Comentarios RSS Iniciar sesión