Aldonio

 

In reply to this blog post:

Definitely is not possible with my salary, I prefer to stick with emulators and leave the final testing (when I’m pretty confident that everything will work) with friends & colleagues.

Obviously it’s not the same as having a test lab at your disposal, but you are leaving apart freelancers and low budget developers, plus, it’s as insane as asking a developer to test something with every browser, every possible OS, and many different PCs from an old Pentium MMX w/ 800×600 CRT monitor to a brand new Core i7 Extreme w/ 2560×1600 monitor.

We are in an era of cross-browser compatibility, where standards are here to make our lives easier and browser vendors are releasing updates more often than ever in both, desktop and mobile, and specially, trying to be as close as possible to recommended & stable standards.

It’s a fact that standards are an utopia, there will always be a browser which will render something (or everything) wrong, there will always be a browser which will become unstable by no apparent reason, but that doesn’t mean you have to address all those issues, specially if they don’t belong to yourself, you can do it if you want, but it’s not really needed, especially if it’s an update-able platform which is likely to get an update for that specific browser, otherwise the IE6 Nightmare will never end.

I believe it’s better to combine bleeding edge with old techniques, such as having a content negotiator with a modern HTML5/CSS3 version + responsive design for whitelisted browsers, and a 90′s-like version with basic HTML, no JS and the most elementary CSS such as font-family & font-size for the rest of browsers. Obviously with a way for users to switch between them, and a way to track all your pages in a single place which browsers register more version switches to help you whitelist newer compatible browsers. Sounds overkill? Testing in current + outdated phones & the typical IE7-10 + FF 3.6 + FF + Chrome + Opera + Safari stack is even worse!

I know that user agent sniffing is blasphemy, but it’s also blasphemy to believe that standards will work by 100% in every known platform, that will never happen, so no matter if it sounds drastic, its way better to display a 90′s-like webpage to incompatible devices/browsers than a broken webpage or even worse, no webpage at all. On the other side, with a basic HTML version you make people’s life easier, because even the least expected to work browser will work.

 

In the PHP documentation you can find http_parse_headers, which requires the PECL HTTP module.

If you can’t install the PECL module you can find some alternatives to replace it in the comments within PHP documentation. I took one left by an Anonymous coder, fixed some bugs it had and extend it to also return parsed Request and Status Lines using the field names defined under RFC2616.

Hope you find it useful, since I’m really creative with names I called this baby http_parse_headers2, pretty original huh?

/**
 * Parses HTTP headers and request/status lines into an associative array.
 *
 * @author  Anonymous
 * @author  Aldo Fregoso C.

 * @license Public Domain
 *
 * @param string $header string containing HTTP headers.
 *
 * @return array Parsed headers with request/status lines using RFC2616's field names.
 */
function http_parse_headers2( $header )
{
    $retVal = array ();
    $fields = explode( "\r\n", preg_replace( '/\x0D\x0A[\x09\x20]+/', ' ', $header ) );
    foreach ( $fields as $field )
    {
        if ( preg_match( '/([^:]+):(.+)/m', $field, $match ) )
        {
            $match[1] = preg_replace( '/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower( trim( $match[1] ) ) );
            $match[2] = trim( $match[2] );

            if ( isset($retVal[$match[1]]) )
            {
                if ( is_array( $retVal[$match[1]] ) )
                {
                    $retVal[$match[1]][] = $match[2];
                }
                else
                {
                    $retVal[$match[1]] = array ( $retVal[$match[1]], $match[2] );
                }
            }
            else
            {
                $retVal[$match[1]] = $match[2];
            }
        }
        else if ( preg_match( '/([A-Za-z]+) (.*) HTTP\/([\d.]+)/', $field, $match ) )
        {
            $retVal["Request-Line"] = array (
                "Method"       => $match[1],
                "Request-URI"  => $match[2],
                "HTTP-Version" => $match[3]
            );
        }
        else if ( preg_match( '/HTTP\/([\d.]+) (\d+) (.*)/', $field, $match ) )
        {
            $retVal["Status-Line"] = array (
                "HTTP-Version"  => $match[1],
                "Status-Code"   => $match[2],
                "Reason-Phrase" => $match[3]
            );
        }
    }
    return $retVal;
}
 

Aunque StepMania es un simulador de juegos musicales, la manera más correcta de describirlo es como un reproductor, ya que StepMania es solamente el programa para leer, jugar y hacer pasos para canciones.

Esto es una gran diferencia frente a juegos como Dance Dance Revolution (DDR) o Pump It Up (PIU), ya que estos juegos incluyen una colección de canciones, mientras que StepMania no incluye una sola canción, tu debes hacer las canciones o descargarlas de Internet.

StepMania es un simulador de DDR que se hizo con el objetivo de mejorar a Dance With Intensity (DWI), el proyecto fue creciendo hasta que descubrieron que podían utilizar el mismo motor para recrear diferentes juegos musicales, y paulatinamente se fueron agregando juegos como PIU, BeatMania, Pop n Music, TechnoMotion, etc.

Otra característica importante de StepMania es que tienes la posibilidad de cambiar la apariencia del juego a tal grado de poder recrear los juegos reales o incluso hacer juegos completamente nuevos. Gracias a esta característica StepMania se ha utilizado como base para realizar otros juegos, como In The Groove (ITG), Mungyodance, Pump It Up Pro (PIU PRO), etc., y este es el principal motivo por el que después de StepMania 3.9, donde la simulación de DDR es casi perfecta, el juego comenzó a enfocarse más en dar mayor poder a la parte gráfica, para asi beneficiar a desarrolladores de juegos nuevos. Características que desde 2003 hasta el día de hoy, finales de 2011, todavía no se finalizan con StepMania SSC, versión basada en StepMania 4.0 SVN que se convirtió posteriormente en la versión oficial, ahora StepMania 5.0. Debido a que StepMania 5.0 llevaba una ventaja abismal en cuanto a características y mejoras, StepMania 4.0 SVN se abandonó.

StepMania AMX (SMA) es el intento por hacer todo lo contrario a lo que se estaba haciendo con StepMania 4.0 SVN, en lugar de enfocarse en hacer un motor de gráficos poderoso, el objetivo principal de SMA es mejorar la jugabilidad.

Uno de los problemas principales de cualquier versión de StepMania es que es un simulador de DDR, y la compatibilidad con otros juegos, hasta la versión oficial 3.9, solo se limitaba a cambiar gráficos y, en el mejor de los casos, agregar unas pocas características propias de dichos juegos, por lo que aunque pudieras jugar PIU, en realidad estarías jugando DDR con 5 flechas. Sin embargo, esto no fue obstáculo para que StepMania comenzara a ganar adopción de comunidades de juegos diferentes de DDR.

SMA comenzó adaptando las reglas de versiones modernas de PIU al ecosistema de StepMania, motivo por el cual se califica erróneamente a SMA de ser una versión de StepMania enfocada únicamente a PIU. Muchas de las características nacidas en SMA han sido la base de inspiración para que StepMania 5.0 dejase de ser una versión enfocada a mejorar el motor gráfico, sin embargo, hasta el día de hoy, StepMania 5.0 solo ha conseguido recrear un porcentaje de todo lo que se puede hacer con SMA, razón por la que todavía SMA no queda obsoleto.

Sin embargo, debido a que el equipo de desarrollo de StepMania 5.0 se ha negado rotundamente a ofrecer retrocompatibilidad a todo el material creado para StepMania 3.9 (versión que desde 2003 hasta el día de hoy sigue siendo la más usada), SMA también presenta una alternativa para la gente que no quiere actualizarse y/o no se siente agusto con StepMania 5.0.

 

Buscaba copypasta, encontré conocimiento. La entrada trata sobre mi experiencia personal, por lo que comparto link al documento de Stanford, para los que llegaron aquí buscando como hacerlo: http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel

// Peso de Hamming adaptado para StepMania AMX
unsigned char GetNumSetCols()
{
	unsigned short uTapNotes = uCols;
	uTapNotes = uTapNotes - ((uTapNotes >> 1) & 0x5555);
	uTapNotes = (uTapNotes & 0x3333) + ((uTapNotes >> 2) & 0x3333);
	return (((uTapNotes + (uTapNotes >> 4)) & 0x0F0F) * 0x0101) >> 8;
}

En el proceso de reescribir el motor del StepMania AMX para utilizar la menor cantidad de recursos me topé ante una situación incómoda, no se me ocurría alguna forma que no utilizara muchos recursos para contar el número de bits establecidos en un byte, por ej. 5 en binario es 0101 y tiene 2 bits establecidos (o sea con 1), y en el caso específico del SMA, el byte que guarda la información de qué columnas se están utilizando. En mi búsqueda por una solución rápida, me encontré con los Teoremas de Hamming, mas específicamente hablando el peso de Hamming.

Cuando vi el código en StackOverflow me quedé con cara de WTF, especialmente porque en los comentarios decía “It’s write-only code. Just put a comment that you are not meant to understand or maintain this code, just worship the gods that revealed it to mankind.” y yo dije “como chingaos no debo entenderlo? ¬¬” y me puse a leer un poco sobre el tema.

En pocas palabras este algoritmo va moviendo los bits en segmentos de 1, 2, 4, 8, etc. bits hasta que quedan en un segmento que podemos interpretar como variable, en mi caso un unsigned char :) .

 

Buscaba memes, encontré cultura. Comparto link al artículo original: http://www.adbusters.org/magazine/94/barefoot-economics-spanish.html

Vivo en el sur de Chile, en el sur profundo. Y esa área es conocida por su producción de leche. Puntera tecnológicamente y, se mire como se mire, la mejor que hay. Hace unos pocos meses me encontraba desayunando en un hotel, y había unos botecitos de esos de mantequilla. Me quedé mirando uno de ellos. Era mantequilla de Nueva Zelanda. Y pensé, ¿no es una locura? ¿Cómo es posible? La respuesta es porque los economistas no saben calcular los costes reales. Para traer mantequilla desde 10.000 kilómetros a un lugar donde ya haces la mejor mantequilla bajo el argumento de que es más barata, es una estupidez colosal. Ellos no toman en consideración el impacto ambiental de 10.000 kilómetros de transporte. Y en parte la razón de que sea barata es que está subsidiada. Así que se trata claramente de un caso en el que los precios no dicen la verdad.

No se necesita ser economista para abrir los ojos y ver todo lo que hay detrás de un precio bajo, impacto ambiental, denigración de la calidad de vida de las personas (como en el caso de artículos Made in China), desestabilización de la economía, etc. Mucha razón tiene el refrán “Lo barato sale caro”.

 

Abrí wordpress porque muchas veces 140 caracteres de tuiter no alcanzan.

Estaré escribiendo cosas de Desarrollo Web (HTML5 Principalmente), StepMania AMX, PIUHQ, MPM y PIUSM.

© 2011 Aldo.MX Suffusion theme by Sayontan Sinha