Desafío – Construir una aplicación web en menos de 10 kilobytes

agosto 2, 2010

An Event Apart y MIX Online proponen el desafío de construir una aplicación web en menos de 10KB, último dia para la entrega el 25 de agosto.

Las Reglas:

Tamaño: el tamaño total del archivo, incluyendo imágenes y scripts, no puede ser mayor de 10 kilobytes.

Estandares Web: Fomentar HTML5, y las aplicaciones deben funcionar igual de bien en Internet Explorer 9 (beta), Firefox y un navegador con WebKit (por ejemplo: Safari, Chrome).

Librerias (APIs): Puedes utilizar una de estas librerias: “jQuery , Prototype, Typekit” y no contarán en el tamaño final de la aplicación.

Más información en:
http://10k.aneventapart.com/

Via:
http://aneventapart.com/news/2010/07/30/the-10k-apart-challenge/


Dell Kace Secure Browser – Firefox en un Sandbox

julio 21, 2010

Es un programa que ejecuta un firefox en un Sanbox (ambiente de aislamiento de procesos) es decir todos los procesos y archivos descargados por el navegador se quedan dentro de ese mini-entorno sin que provoque ningun daño al sistema operativo, protegiendo de esa manera al ordenador del usuario de malware (software malicioso), controla los procesos, URLs a la que accede para descargar archivos solicitados y no pedidos por el usuario, dicho de otra manera encapsula al firefox en una burbuja de hierro para que rechaze cualquier ataque al ordenador del navegante. La descarga ocupa 75 megas y es libre previo registro.

enlace original:
http://www.kace.com/products/freetools/secure-browser/

Via:
http://feedproxy.google.com/~r/firefoxfacts/~3/5fmgdIlEyS8/

Sandbox:
http://es.wikipedia.org/wiki/Aislamiento_de_procesos_%28inform%C3%A1tica%29
http://en.wikipedia.org/wiki/Sandbox_%28computer_security%29


JQuery Lazy Load: carga las imágenes solo cuando el usuario pueda verlas

mayo 12, 2010

Para mejorar el tiempo de respuesta cuando un usuario realiza la petición de una página larga o de gran tamaño, si esa página tiene imágenes que solo se verán si el usuario mueve la barra de desplazamiento “scroll”, he visto esta técnica en la página de Mashable.com, la han implementado con un plugin de jquery llamado Lazy Loader, hace todo lo opuesto a una precarga de imagenes, sino que realiza las peticiones al servidor de esas imagenes a medida que el usuario requiere verlas, segun se comenta el plugin esta inspirado en el YUI: Image Loader, que es un componente de YUI (como todos sabemos el Yahoo User Interface Library), si tienes un blog en wordpress te recomiendo estos sencillos tutoriales:

http://brandontreb.com/dynamically-load-wordpress-post-images-like-mashable-com/

http://www.hackingethics.com/blog/2010/04/12/how-to-add-lazy-loading-to-wordpress-page-fading-like-mashable/

Pero si lo quieres implementar sin tener wordpress aqui te dejo un tutorial (en ingles) muy bien explicado:

http://www.appelsiini.net/projects/lazyload

+info

Plugin JQuery Lazy Loader:
http://plugins.jquery.com/project/lazyload

YUI 2: Image Loader
http://developer.yahoo.com/yui/imageloader/


Tip – Trick – XSLT -XPATH – Replace String

diciembre 5, 2009

Si queremos reemplazar el carácter de salto de linea por un tag html “BR” de un texto podemos emplear el siguiente template, el parser xsl reconocerá el salto de linea como ‘
’

    <xsl:template name="break">
        <xsl:param name="text"/>
        <xsl:choose>
            <xsl:when test="contains($text, '&#xA;')">
                <xsl:value-of select="substring-before($text, '&#xA;')"/>
                <br/>
                <xsl:call-template name="break">
                    <xsl:with-param name="text" select="substring-after($text, '&#xA;')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Nota:

    '&#xA;'   nueva linea
    '&#x9;'   TAB
    '&#xD;'   retorno de carro

Si lo que necesitamos es un template buscar y reemplazar una cadena de texto por otra cadena de texto, podemos utilizar el siguiente:

    <xsl:template name="string-replace-all">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="by"/>
        <xsl:choose>
            <xsl:when test="contains($text, $replace)">
                <xsl:value-of select="substring-before($text,$replace)"/>
                <xsl:value-of select="$by"/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="substring-after($text,$replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="by" select="$by"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Por ejemplo, sea nuestro xml:

<?xml version="1.0"?>
<pagina>
    <texto>El primer parrafo.El segundo parrafo.El tercer parrafo.</texto>
</pagina>

Y para invocar el template podriamos citar el siguiente ejemplo para reemplazar la palabra “parrafo” por “guion”:

<xsl:call-template name="string-replace-all">
    <xsl:with-param name="text" select="pagina/texto"/>
    <xsl:with-param name="replace" select="'parrafo'"/>
    <xsl:with-param name="by" select="'guion'"/>
</xsl:call-template>

Si lo que necesitamos es un template buscar y reemplazar una cadena de texto por un elemento html (por ejemplo: BR, SPAN, etc.), podemos utilizar el siguiente:

    <xsl:template name="string-replace-all-by-element">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="by"/>
        <xsl:choose>
            <xsl:when test="contains($text, $replace)">
                <xsl:value-of select="substring-before($text,$replace)"/>
                <xsl:copy-of select="$by"/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="substring-after($text,$replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="by">
                        <xsl:copy-of select="$by"/>
                    </xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Por ejemplo, sea nuestro xml:

<?xml version="1.0"?>
<pagina>
    <texto>El primer parrafo.-El segundo parrafo.-El tercer parrafo.--Final.</texto>
</pagina>

Y para invocar el template podriamos citar el siguiente ejemplo para reemplazar los guiones por elementos html “BR”:

<xsl:call-template name="string-replace-all-by-element">
    <xsl:with-param name="text" select="pagina/texto"/>
    <xsl:with-param name="replace" select="'-'"/>
    <xsl:with-param name="by">
        <xsl:element name="br"></xsl:element>
    </xsl:with-param>
</xsl:call-template>

Estos ejemplos son para la XPATH 1.0, pero para la XPATH 2.0 ya tiene la funcion nativa replace con la cual no necesitas del template, la forma de invocarla seria tan sencilla como esto:

    <xsl:value-of select="replace(pagina/texto,'parrafo','guion')"/>

Mas info:

XQuery 1.0 y XPath 2.0 operadores y funciones
http://www.w3.org/TR/xpath-functions/

Sintaxis XML canonico
http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html


Oracle – PL/SQL – Paginación de registros de una consulta

noviembre 26, 2009

Sea la consulta:

SELECT primera_columna, segunda_columna
  FROM mi_tabla

Si queremos recuperar los registros que se encuentran entre las filas n_start_row y n_end_row, nuestra consulta seria:

        SELECT *
          FROM ( SELECT A.*, ROWNUM row_number
                   FROM (
                        SELECT primera_columna, segunda_columna
                        FROM mi_tabla
                    ) A
                  WHERE ROWNUM <= n_end_row
            )
        WHERE row_number >= n_start_row;

Ahora si queremos paginar, primero tendriamos que saber cuantos registros recupera nuestra consulta (n_row_count) y definir el número de registros por cada página (n_page_size). Por ejemplo:

DECLARE
    CURSOR c_row_count
    IS
        SELECT count(1)
        FROM (
            SELECT primera_columna, segunda_columna
            FROM mi_tabla
        );
    --
    n_page_size   NUMBER(2) := 10;
    n_row_count   c_row_count%ROWTYPE;
BEGIN
    OPEN c_row_count;
    FETCH c_row_count INTO n_row_count;
    CLOSE c_row_count;
    --
    -- Pintamos los números de las páginas
    --
    IF n_row_count > n_page_size
    THEN
        FOR x IN 1..CEIL(n_row_count/n_page_size)
        LOOP
            dbms_output.put_line('n_page_number: ' || x);
        END LOOP;
    END IF;
END;
/

Asumiendo que el número de la pagina sea n_page_number y el número de registros por página sea n_page_size.

        SELECT *
          FROM ( SELECT A.*, ROWNUM row_number
                   FROM (
                        SELECT primera_columna, segunda_columna
                        FROM mi_tabla
                    ) A
                  WHERE ROWNUM < ((n_page_number * n_page_size) + 1 )
            )
        WHERE row_number >= (((n_page_number-1) * n_page_size) + 1);


Seguir

Get every new post delivered to your Inbox.