Antitetris: Tetris contra leyes fisicas

7 comentarios · Escrito el 22-Jul-2008 · 654 lecturas · juegos

Hace algunos meses, hablaba con unos compañeros de Facultad acerca de como sería el juego del tetris si le afectara de una forma diferente las leyes de la física y la ductilidad (que, aunque sería interesante, esta última no está implementada).

Antitetris es un homebrew para PSP (de la mano de BeyondDS) que ha tenido la misma idea, aplicandola sobre el juego original de Nintendo de la Game Boy.

Video (Objeto multimedia)

El juego ha sido realizado testeando un pequeño motor físico 2D llamado Chipmunk bajo licencia MIT, mediante el cuál se puede observar que las piezas del juego están dotadas de ciertas características ausentes del original: las rotaciones tienen inercia, la gravedad es diferente, las piezas pueden interactuar unas con otras, etc.

Evidentemente, hacer líneas no es tan «fácil» como en el tetris cabrón, es imposible. Pero como reto, puedes comprobar cuántos puntos eres capaz de conseguir antes de una derrota segura.

Tags:

Servicios 2.0 en el Mundo Real

3 comentarios · Escrito el 22-Jul-2008 · 232 lecturas · internet

Los servicios 2.0 comienzan a llegar a donde nadie había alcanzado antes. Esas páginas webs revolucionarias que van desde categorías de foros de discusión hasta redes sociales ya han llegado a su punto culminante. Nadie puede evitarlo. Así que es hora de pasar a otro plano superior... El Mundo Real...

Youtube


Youtube Real, de la mano de SweetBriar, un video de 6 minutos y 66 segundos de duración de una impresionante fiesta... Tiene 31.337 visualizaciones, 5 comentarios y ha sido añadido 69 veces a favoritos...

youtube real

Google Images


¿Que ocurre si hacemos una búsqueda real de imagenes de Estocolmo? Que obtenemos (curiosamente, todas de 1024x768 y de 25kb de tamaño) eso, fragmentos de imagenes de Estocolmo...

google images real

¿Conoces más servicios 2.0 reales para añadir a la lista? ¿Te atreves a crear alguno?

Tags:

Flash de zapata inalambrico Besel

2 comentarios · Escrito el 21-Jul-2008 · 122 lecturas · fotografia

Uno de los mayores inconvenientes a la hora de realizar una buena fotografía, es la necesidad de una correcta iluminación. Para solventarlo, solemos utilizar los flash integrados de las cámaras digitales, que aunque muchas veces no son suficiente, en la mayoría de los casos nos sacan de más de un apuro.

flash zapata 828DFE

Cuando queremos dedicarnos más profesionalmente a ello, surge el concepto de flash de zapata, un complemento para nuestras cámaras fotográficas, que dotan a sus fotografías de una mejor iluminación en los momentos adecuados.

Por cortesía de Digital Toy Shop, el siguiente análisis es del Flash inalámbrico de zapata 828DFE de BeselOptics.

Contenido


El paquete Flash 828DFE de Besel contiene los siguientes elementos:

  • Instrucciones: Un pequeño folleto con varias instrucciones acerca del uso de nuestro flash inalámbrico.
  • Flash inalámbrico: Por supuesto, el susodicho flash de zapata. Incorpora dos botones de regulación de potencia, 3 luces (ready, ON y Detect) y una leyenda. En el lateral izquierdo una tapa para 4 pilas AA (eso si, a mi criterio, demasiado endeble).

    El flash puede regularse manualmente en un ángulo de hasta 90 grados y girarlo hacia los lados. También incorpora un pequeño botón para forzar a disparar el flash si se desea.

  • Minitripode: El paquete incluye a modo de obsequio un pequeño tripode para utilizar el flash de esclavo (ver más adelante) junto a la cámara.
flash zapata 828DFE

Una de las características más llamativas es que sirve para cualquier tipo de cámara fotográfica, ya que se puede utilizar de dos formas diferentes.

1. Modo zapata


El método «tradicional» es aquel en el que el flash se incorpora encima de la cámara mediante la zapata. Especificando en el menú de la cámara fotográfica (o en algunas automáticamente mediante un sensor) se puede reemplazar el flash incorporado por el flash externo que acabamos de conectar.

2. Modo inalámbrico


Mediante este método, utilizaremos el flash externo como esclavo y el incorporado como maestro. Así, cuando saquemos una fotografía, el flash externo detectará el flash de la cámara, sincronizándose automáticamente y sin necesidad de cables. Las siguientes instrucciones servirán para configurar el flash en el modo inalámbrico:

  1. Posiciona el primer botón en Detect y el segundo en 1.
  2. Espera unos segundos mientras carga el flash.
  3. Posiciona ahora el botón de la izquierda en 1.
  4. Espera a que estén encendidas las luces naranja y roja.
flash zapata 828DFE

Especificaciones


Las características técnicas del aparato son las siguientes:

  • Número de guía: 50mm a ISO 100 (28/92ft)
  • Relación de potencia: 1 (máximo), 1/4, 1/8, 1/16.
  • Alcance de zoom: 28mm-105mm (equivale a 3x óptico).
  • Ángulo de giro: Entre 0 y 330 grados.
  • Tiempo de ahorro de energía: 3 minutos.
  • Duración del flash: 1/1000 segundos.
  • Alimentación: 4 pilas AA.
  • Temperatura de color: 5600k.
  • Dimensiones: 70x175x45cm. (ver foto posterior)

En resumen, un flash externo bastante cómodo y sencillo de utilizar, ideal para principiantes. Su precio es de 89,99€, cosa bastante interesante, puesto que un flash de características similares apenas se puede encontrar por debajo de 175€.

Tags:

10 consejos para recodificar una web

8 comentarios · Escrito el 18-Jul-2008 · 571 lecturas · programacion

Cuando nos dedicamos a la programación de un sitio web, llegará un momento en el que tenemos que renovar la estructura (aquí hablamos de HTML), la presentación (hablamos de CSS) y la codificación y programación interna (hablamos de PHP).

redesign

A continuación una serie de consejos para depurar y realizar una recodificación y rediseño efectivo:

1. Realinear, no rediseñar

Aunque en muchas ocasiones hay necesidad de un rediseño profundo, como resultado de un cambio de estrategia debido a algún factor especial, por norma general es mucho mejor mantener el objetivo de realineación que el de rediseño.

Esto proporciona un efecto más positivo de presentación, en el que estamos manteniendo la mayoría de los elementos en su lugar original (no despista a los usuarios), renovandolo visualmente.

En A List Apart se puede encontrar un claro ejemplo de este punto: Buenos diseñadores rediseñan, Grandes diseñados realinean.

2. Calcula el tiempo que tarda en cargar tu web

A pesar de tener otros sistemas externos como Pingdom, en este caso me refiero al tiempo de generación de código, internamente.

La forma tradicional es aquella en la que, mediante un timestamp UNIX capturado al final de todo, le restamos otro capturado al inicio. Generalmente se utiliza la función microtime.

NOTA: A partir de PHP5, a esta función se le puede pasar un booleano como parámetro para indicar que devuelva un número flotante que indique los microsegundos. En caso contrario devuelve una lista de parámetros (microsegundos y segundos). Ojo a los que aún usen PHP4.

3. Calcula la memoria utilizada en tu web

Análogamente al punto anterior, sería ideal establecer un echo temporal que nos vaya avisando de la memoria consumida en el procesamiento de nuestro script PHP. También podemos establecer unos puntos de control para saber que partes consumen demasiado. Ver punto 6 posterior (Profiling o Debugger).

Para calcular la memoria nos ayudaremos de la función memory_get_usage de PHP. En otros artículos como ¿Cuánta memoria RAM consume mi servidor? o Reducir uso de CPU y memoria del servidor hablo más sobre el tema.

4. La función isset()

Una buena técnica de programación es comprobar siempre la existencia de las variables con la función isset(), una función que nos devuelve un booleano (verdadero si existe la variable o falso en caso contrario), pudiendonos saltar fragmentos de código (y sus correspondientes recursos de proceso) en el caso de que ciertas variables no existan.

Pueden utilizarse para evaluar la existencia de varias variables en cortocircuito, esto es, con una lista de variables, desde que encuentre una que no exista, devuelve FALSE.

5. La directiva error_reporting()

Unos buenos amigos en PHP, son los niveles de error. Con ellos podremos establecer la forma de detección de errores en nuestro código de una manera sencilla y fácil.

En el fichero php.ini se puede establecer de forma general, aunque quizás es más práctico utilizar la funcion error_reporting() para hacerlo en tiempo de ejecución. Con el parámetro E_ALL mostrará todos los errores y warnings en el fichero error_log. Ver punto 8 posterior (error_log).

En Niveles de error PHP puedes encontrar una lista de todos los niveles posibles.

6. Profiling o Debugger

Utiliza un sistema de profiling o depuración de código. Un Profiler es un sistema que se ubica entre el programador y la máquina y le va informando al primero con las estructuras apropiadas y ciertas estadísticas del funcionamiento del código.

Generalmente, los buenos programadores ya hacen buen código. Pero los programadores que usan profilers son aún mejores. Extensiones como APD (Advanced PHP Debugger) pueden ayudarnos mucho, ya que permiten crear hasta una estructura árbol con las funciones utilizadas y el tiempo o memoria consumida.

En LinuxJournal podemos ver algunos ejemplos del APD y la técnica de Profiling en general.

7. Complejidad

Los bucles. Uno de los aspectos más básicos de la programación, y no por ello de los más sencillos, es reducir la complejidad de los procedimientos que llevamos a cabo.

Para ello, lo mejor es partir de la idea más simple y genérica: Localiza todos los bucles (for, while, foreach...) e intenta realizar cuantas operaciones puedas (funciones) fuera del bucle.

Un ejemplo típico es el siguiente bucle:

while (strlen($a) < ($b+$c)) {
echo "valor b: $b c: $c";
$b++;
$c++;
}

Como podemos ver, la variable $a no se modifica dentro del bucle, por lo tanto la función strlen($a) (que da la longitud de la cadena $a) siempre devolverá la misma cantidad en todas las iteraciones del bucle.

La complejidad se reduciría en el siguiente ejemplo:

$d = strlen($a);
while ($d < ($b+$c)) {
echo "valor b: $b c: $c";
$b++;
$c++;
}

Evidentemente, este ejemplo es algo inapreciable. Pero con funciones más complejas y extensas, el resultado puede notarse bastante.

8. El fichero error_log

A parte del fichero access_log de Apache, donde quedan registradas todas las peticiones HTTP de los diferentes usuarios, existe otro fichero muy interesante e importante para estrategias de depuración, error_log.

Dependiendo del nivel de error establecido (Ver punto 5) serán volcados distintos tipos de error, entre los que destaco los siguientes:

  • PHP Notice: Avisos poco importantes como petición de ficheros inexistentes, variables no definidas...
  • PHP Warning: Errores importantes como permisos, funciones no definidas, ejecuciones terminadas...
  • PHP Fatal error: Errores graves como finalización por memoria insuficiente, etc...
  • ModSecurity: Errores de seguridad. Ver artículo ModSecurity.

9. Inclusiones y exclusiones

Otro de los puntos importantes en la programación web es saber excluir o incluir partes de código que son o no necesarias.

Un ejemplo: En el apartado que muestra los artículos por categoría un blog, no es necesario funciones o código para mostrar comentarios, o en un artículo que tiene menos de 25 comentarios (suponiendo que 25 es el máximo por página) no es necesario las funciones para paginación. En muchos casos, esto puede disminuir el proceso de tiempo y memoria consumida en gran proporción.

Además, organizando un poco la codificación se puede evitar el uso de funciones include_once o require_once (incluir si no han sido ya incluidas) en favor de sus respectivas include y require puede ahorrar bastantes recursos.

10. Consultas SQL sin buffer

Generalmente, para la recuperación de consultas SQL en PHP (hablamos de la gestión de una base de datos MySQL) se utiliza mysql_query(). Sin embargo, en ciertos casos se puede hacer uso de la función mysql_unbuffered_query().

Las diferencias es que, al contrario que la primera, la segunda función no utiliza buffer para almacenar todas las filas resultantes de la consulta. Esto produce un ahorro de memoria significativo y también mayor rapidez, ya que permite comenzar a trabajar nada más devuelva la primera fila (no es necesario esperar a que termine por completo).

Es importante recalcar que con este tipo de recuperación no se pueden anidar varias consultas dentro de otras y que tampoco se pueden utilizar funciones como mysql_num_rows() ni mysql_data_seek().

Más o menos estos son los pasos que me han parecido más importantes para recalcar en la recodificación de una aplicación web. Como habrán visto, Emezeta blog ha «sufrido» una en los últimos días, y aunque el cambio de diseño no es demasiado grande, el de rendimiento si debería serlo.

Tags:

Páginas: 1 2 3 4 ... 254