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/

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

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/

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

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);

Libro Scrum Manager – Gestión de Proyectos

Publicado: noviembre 26, 2009 en Miscelánea
Etiquetas: , ,

Esta disponible el libro de texto para el área de gestión de proyecto en la plataforma de conocimento abierto de Scrum Manager. Ofrece en la segunda parte un conocimiento general y completo de las prácticas ágiles de Scrum para la gestión de proyectos, después de haberles dado un marco de situación la primera parte del libro para ayuda a comprender la razón, fortalezas, debilidades e idoneidad de la gestión clásica y la gestión ágil,  y establecer el contrapunto de ésta última con las prácticas, modelos y gestión de proyectos tradicional.

Se puede descargar  gratuitamente, o colaborar con su compra en el desarrollo de la plataforma Open Knowledge Scrum Manager.

Descargar:
http://www.scrummanager.net/files/sm_proyecto.pdf

Original:
http://www.navegapolis.net/content/view/937/61/

Via:
http://www.bizzit.es/blog/?p=2828

Aparte de las cláusulas especificas de cada base de datos, la clave esta en utilizar ORDER BY ASC (ordenación de menor a mayor) para los primeros resultados y ORDER BY DESC (ordenación de mayor a menor) para los últimos resultados de la consulta.

Sea la consulta:

select primera_columna,
       segunda_columna
  from mitabla

En los ejemplos estamos recuperando los últimos 10 resultados de la consulta.

Para MS SQL Server ó MS Access, utiliza la cláusula TOP:

select TOP 10
       primera_columna,
       segunda_columna
  from mitabla
 order
    by primera_columna desc

Para MySQL ó PostgreSQL, utiliza la cláusula LIMIT:

select primera_columna,
       segunda_columna
  from mitabla
 order
    by primera_columna desc
 limit 10

Para Oracle, utiliza la cláusula ROWNUM:

select *
  from ( select primera_columna,
                segunda_columna
           from mitabla
          order
             by primera_columna desc )
 where rownum <= 10

Para DB2, utiliza la cláusula FETCH FIRST:

select primera_columna,
       segunda_columna
  from mitabla
 order
    by primera_columna descending
fetch first 10 rows only