miércoles, 19 de junio de 2013

UTF8 sí o sí

Función susceptible de mejora, pero extremadamente útil.

/**
* Sirve en UTF-8 sí o sí.
*/
function supericonv($txt) {
    $txt1 = iconv('ISO-8859-15', 'UTF-8', $txt);
    $retVal = strpos($txt1, 'Ã') === FALSE ? $txt1 : $txt;
    $retVal = str_replace(array("¿", "»", "«"), array("¿", "»", "«"), $retVal);
    return $retVal;
}

viernes, 13 de abril de 2012

(n+1)*n/2

La suma de los N primeros números naturales es
S = (N+1)*N/2

Utilidad aplicada:

Supongamos un modelo de datos (una tabla) en el que hay un atributo para ordenar, un entero correlativo que empieza en 0. Para garantizar la coherencia de los datos, tenemos que asegurarnos que cada operación de modificación deja la tabla bien:

Aquí tenemos un ejemplo de datos coherentes:
+--------+-------+
| _order | id    |
+--------+-------+
|      0 | 18685 |
|      1 | 21971 |
|      2 | 21979 |
|      3 | 21977 |
|      4 | 21975 |
|      5 | 21973 |
|      6 | 22047 |
+--------+-------+


Y aquí uno de datos no coherentes: se ha borrado un dato pero no se ha actualizado bien el _order en la tabla:

+--------+-------+
| _order | id    |
+--------+-------+
|      0 | 18685 |
|      1 | 21971 |
|      2 | 21979 |
|      3 | 21977 |
|      4 | 21975 |
|      6 | 21973 |
|      7 | 22047 |
+--------+-------+


¿Cómo comprobar en una tabla estas incoherencias? Aquí entra en juego nuestra fórmula.

Si todo está bien, la suma de los _order + 1 debe ser igual a la suma de los n enteros hasta los N registros que tengamos en la tabla.



SELECT COUNT(id), 
cliente,
SUM(_order+1) AS suma_order,
ROUND((COUNT(id)+1)*COUNT(id)/2, 0) AS suma_buena
FROM tabla
GROUP BY cliente
HAVING ROUND((COUNT(id)+1)*COUNT(id)/2, 0) != SUM(_order+1)
ORDER BY COUNT(id);

jueves, 14 de julio de 2011

Tira nº 76: usuaria avanzada


A ver cuánto tardan en sacar algo así. Sacar algo relativo a la teoría de conjuntos debe ser una tentación muy fuerte :-)


miércoles, 6 de julio de 2011

Tira nº 75: tormenta



Las tormentas veraniegas son frecuentes...


Recuperemos el denostado tag "blink"

Con lo bonito que era el parpadeo de las webs que había en Geocities...


<html>
<head>
<title>¡¡¡Blink!!!</title>
http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js

function blinkear() {
var blink = $('blink');
    if (blink) blink.toggle();
}
$(document).ready(function () {
    setInterval(blinkear, 700);
});

<style>
blink {color: lime; font-size: 22px;
       font-family: "Comic Sans MS";
       font-weight: bold;}
</style>
</head>
<body>
<blink>El parpadeo es divertido...</blink>
</body>
</html>