12 opciones que debería tener tu hosting

A la hora de seleccionar un hosting, a parte del precio, de los comentarios de otros usuarios, y de las típicas características que ofrecen, nos deberíamos preocupar de 12 cuestiones:

  • ¿Puedo crear cualquier número de subdominios?
  • Cuando creo un subdominio, ¿puedo acceder al directorio al que apunta?
  • ¿Puedo alojar varios dominios?
  • ¿Puedo añadir trabajos cron?
  • ¿Puedo generar enlaces simbólicos?
  • ¿Puedo usar ficheros .htaccess?
  • Si el mod_expires está activo, ¿puedo habilitarlo o configurarlo mediante el .htaccess?
  • ¿Puedo disponer de un php.ini para cada directorio?
  • ¿Puedo usar php_value o php_flag en .httacces?
  • ¿Está el mod_gzip o el mod_deflate instalados?
  • Si el mod_headers está activo, ¿puedo usarlo en un fichero .htaccess?
  • ¿Hay límite de ancho de banda?

12 questions to ask your host-to-be

Vía / PHPDeveloper.org

jsMath: incluye fórmulas matemáticas en tu web

jsMath es una paquete basado en la capa de matemáticas TeX, que nos permite añadir ecuaciones y notaciones matemáticas en nuestras páginas web. Con soporte para muchos navegadores en diferentes sistemas operativos, lo cual nos ahorra un problema de compatibilidades.
jsmath.png
jsMath intenta usar fuentes TeX, y cuando no se disponga de ellas usará imágenes que son escalables y con fuentes Unicode, por lo que a la hora de imprimir no perdería resolución. No utiliza directamente MathML porque este no está pensado para ser escrito directamente y porque no hay demasiados navegadores que lo admitan.
jsMath
Vía / dzone

21 tutoriales Flex

Para aquellos que no conocemos Flex nos puede venir muy bien esta lista de 21 tutoriales Flex:

Archive for Flex Tutorial

Vía / dzone

aSSL: SLL sin HTTPS

aSLL es una librería bajo licencia MIT que implementa una tecnología similar a SSL pero sin HTTPS.
aSSL permite al cliente negociar una clave secreta aleatoria de 128 bits con el servidor usando un algoritmo RSA. Una vez que la conexión se ha establecido, los datos se enviarán y recibirán usando el algoritmo AES.
aSSL está compuesto por algunos ficheros Javascript y componentes en el servidor. En un futuro habrá puertos para cada uno de los lenguajes web más importantes (PHP, Java, Perl, Python, TKL, …).
aSSL
Vía / WebAppers

Spinner Control: control HTML mediante Prototype

Spinner Control es una librería creada con Prototype que permite crear controles HTML que modifican su valor mediante botones incluidos en ellos. Ya hace tiempo implementamos nuestro propio controlador, por lo que no es necesario explicar cómo hacerlo.

spinner.png

Entre las características que ofrece encontramos lo siguiente:

  • Pulsación continua del botón considerada
  • Aumento de velocidad según el tiempo
  • Tiene en cuenta los cursores arriba y abajo
  • Trabaja con números enteros, decimales y arrays.
  • Intervalo configurable
  • Máximo y mínimo configurable
  • Fuerza máximo y mínimo cuando pierde el foco
  • Uso de prefijos y sufijos
  • Ignora parte no numéricas escritas

Spinner Control

Vía / dzone

| |

Sphinx: buscador de texto open source

sphinx.pngSphinx (SQL Phrase Index) es un motor que permite buscar texto. Normalmente es un motor de búsqueda independiente, que provee de forma rápida y eficiente resultados relevantes a otras aplicaciones. Está diseñado para ser integrado con MySQL y lenguajes de programación (actualmente PHP). Los datos se pueden recuperar mediante conexión directa a MySQL o mediante XMLs.

Dispone de cuatro utilidades: indexer para crear índeces de texto, search para buscar desde la línea de comandos, searchd es un demonio que busca en los textos desde aplicaciones externas y sphinxapi un API para lenguajes de programación (PHP).

Entre las características que ofrece nos encontramos con lo siguiente:

  • Alta velocidad de indexación (+10Mb/s)
  • Alta velocidad de búsqueda (0.1 s. en 2-4 Gb de texto)
  • Alta escalabilidad
  • Soporte para búsquedas distribuidas
  • Soporte para MySQL nativo (admite tablas MyISAM y InnoDB)
  • Búsqueda de frases
  • Stemming de inglés y ruso
  • Y mucho más

Sphinx

Vía / MySQL Performance Blog

5 expresiones regulares útiles para desarrollo web

Aunque a algunos nos gustan bastante las expresiones regulares, no está mal ofrecer una lista de alguna de ellas que nos pueden ser útiles cuando desarrollamos aplicaciones web.

  • Usuario: está es sencilla, letras, dígitos y el subrayado, con una longitud entre 3 y 16 caracteres.
/^[a-zA-Z0-9_]{3,16}$/
  • Etiquetas XHTML: habrá que sustituir la palabra etiqueta por la correspondiente que queremos buscar.
/]*>(.*?)<\/etiqueta>/
  • Etiqueta con atributos: lo mismo que la anterior pero con atributos.
/]*atributo\s*=\s*(["'])valor\\1[^>]*>(.*?)<\/etiqueta>/
  • Direcciones de correo: según la especificación RFC 822:
function is_valid_email_address($email){
$qtext = '[^\x0d\x22\x5c\x80-\xff]';
$dtext = '[^\x0d\x5b-\x5d\x80-\xff]';
$atom = '[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c'.
'\x3e\x40\x5b-\x5d\x7f-\xff]+';
$quoted_pair = '\x5c[\x00-\x7f]';
$domain_literal = "\x5b($dtext|$quoted_pair)*\x5d";
$quoted_string = "\x22($qtext|$quoted_pair)*\x22";
$domain_ref = $atom;
$sub_domain = "($domain_ref|$domain_literal)";
$word = "($atom|$quoted_string)";
$domain = "$sub_domain(\x2e$sub_domain)*";
$local_part = "$word(\x2e$word)*";
$addr_spec = "$local_part\x40$domain";
return preg_match("!^$addr_spec$!", $email) ? 1 : 0;
}
  • URL: para reconocer direcciones de internet:
{
\b
# Parte principal (protocolo://dominio, o solo dominio)
(
# http://, o https://
(https?)://[-\w]+(\.\w[-\w]*)+
|
# Nombre de dominio
(?i: [a-z0-9] (?:[-a-z0-9]*[a-z0-9])? \. )+ # subdominions
# .com, .net...
(?-i: com\b
| edu\b
| biz\b
| gov\b
| in(?:t|fo)\b # .int or .info
| mil\b
| net\b
| org\b
| [a-z][a-z]\.[a-z][a-z]\b # two-letter country code
)
)
# Puerto
( : \d+ )?
# El resto es opcional que empieza por /
(
/
[^.!,?;"\'<>()[]{}sx7F-\xFF]*
(
[.!,?]+ [^.!,?;”\’<>()\[\]{\}s\x7F-\xFF]+
)*
)?
}ix

5 Regular Expressions Every Web Programmer Should Know

Vía / dzone

| | |

Laboratorio: indicador de calidad de password

Cuando un usuario se registra en una aplicación web, suele haber casos que cuando se está introduciendo la contraseña, el sistema indica si la password cumple unos mínimos de seguridad o no. En algunas ocasiones suele darnos solo un aviso informativo, pero en otros o cumple todos los requisitos o no admite la contraseña.

En este caso vamos a crear un script que modificará los input password para añadirle una funcionalidad que indique la calidad de la contraseña que se va introduciendo.

password.png

El script añadirá el evento de control de tecla pulsada (onkeyup) y realizará una serie de comprobaciones para conocer la calidad de la contraseña, una contraseña válida será la que cumpla todas las condiciones. Las condiciones que incluimos en el ejemplo son las típicas que suelen pedir: que existan mayúsculas y minúsculas, algún número, caracteres especiales y una longitud mayor de 6.

Para chequear cada condición usaremos expresiones regulares y llevaremos un contador para saber cuántas se cumplen. Cuando hayamos finalizado las comprobaciones calcularemos el porcentaje de calidad y lo indicaremos con una barra de progreso. Esta barra se crecerá según aumente la calidad de la contraseña e irá cambiando de color desde un color rojo para la poca calidad hasta un color verde que indique mucha calidad.

El efecto de barra de progreso lo vamos a realizar de la siguiente manera, tenemos una imagen que va a funcionar como máscara, tendrá dos partes, de igual tamaño y cada parte del mismo tamaño que el ancho del input. Cada mitad tendrá una funcionalidad, la mitad de la derecha servirá para ocultar y la de la izquierda para mostrar, según queramos que se vaya mostrando la barra de progreso, iremos desplazando el fondo hacia la derecha para que se vaya viendo la barra de progreso. Inicialmente la línea discontinua de la imagen que mostramos como ejemplo estará en el lado izquierdo del input.

mascara.gif

El código sería el siguiente:

var __PASSWORD__ = {
colorKO: [255, 0, 0], // Color de contraseña no válida
color50: [127, 127, 0], // Color para el 50% para que no haya un cambio tan brusco
colorOK: [0, 255, 0], // Color de contraseña válida
width: 150,
// Añade el evento onkeyup a la caja input:password y le añade el evento checkpassword
init: function() {
var inputs = document.getElementsByTagName("INPUT");
for (var i=0; i<inputs.length; i++) {
if (inputs[i].type == 'password') {
inputs[i].addEventListener("keyup", __PASSWORD__.checkPassword, false);
inputs[i].className = 'password';
}
}
},
// Obtiene el color porcentual entre un color inicial y otro final, teniendo en cuenta un color intermedio
getColor: function(porc) {
var color = new Array();
var color1 = porc < 50? __PASSWORD__.colorKO:__PASSWORD__.color50;
var color2 = porc < 50? __PASSWORD__.color50:__PASSWORD__.colorOK;
color[0] = parseInt(color1[0]-((color1[0] -color2[0])*porc/100));
color[1] = parseInt(color1[1]-((color1[1] -color2[1])*porc/100));
color[2] = parseInt(color1[2]-((color1[2] -color2[2])*porc/100));
return color;
},
// Comprueba la calidad de la contraseña
checkPassword: function() {
var valor = this.value;
var cont = 0;
var comprobaciones = new Array(
/[A-Z]/, // mayúsculas
/[a-z]/, // minúsculas
/\d/,    // números
/.{6}/,  // más de 6 caracteres
/(\s|\\|\/|!|"|·|\$|%|&|\(|\)|=|\?|¿|\||@|#|¬|€|\^|`|\[|\]|\+|\*|¨|´|\{|\}|\-|_|\.|:|,|;|>|<)/ // Caracteres especiales
);
// Miro todas las condiciones
for (var i=0; i<comprobaciones.length; i++) {
if (valor.match(comprobaciones[i])) {
cont++;
}
}
// Valores posibles en caso de 5 condiciones: 0, 20, 40, 60, 80, 100, pero el valor mínimo tiene que ser 20 para que coincida con el colorKO, ya que si no, al pulsar una tecla ya cambia de color a un paso colorKO+1
var porc = parseInt((cont*100/(comprobaciones.length-1))-(1/(comprobaciones.length-1)*100));
// Desplazo el background tratándolo como una máscara
this.style.backgroundPosition = (parseInt(cont*__PASSWORD__.width/comprobaciones.length)-(__PASSWORD__.width))+"px 0px";
// Cambio el color de fondo
var color = __PASSWORD__.getColor(porc);
if (porc < 0) {
this.style.backgroundColor = '';
} else {
this.style.backgroundColor = 'rgb('+color[0]+', '+color[1]+', '+color[2]+')';
}
}
};
window.addEventListener("load", function() {__PASSWORD__.init();}, false);

Demo

Añade skins a tu página web

Muy buen truco para añadirle pieles (skins) a tu página web. Normalmente una página web no suele tener la necesidad de modificar el diseño, pero una aplicación web del estilo comunidad de usuarios si puede ser buena idea el personalizar la apariencia de la página.
En este caso se trata de un método para que el usuario modifique la página que ve, aunque pequeños cambios pueden hacer que sea el programador quien modifique la piel según circunstancias.
El método es sencillo, nos creamos un directorio dónde almacenaremos todas las pieles, cada una en un directorio. En cada directorio de pieles habrá una página que contenga la cabecera, el pie de página, la barra lateral y el resto de partes de la página que queramos personalizar.
Mediante cookies almacenaremos la piel que el usuario desea ver o que haya usado con anterioridad. En esta cookie lo que guardaremos realmente será el nombre del directorio de la piel, aunque claro, esto no es muy seguro y yo más bien almacenaría un índice que corresponda al directorio.
Si le damos un par de vueltas más, podríamos tener una piel por defecto y en el caso de que un elemento de la página (por ejemplo el footer) no se encuentre, obtener ese elemento en la piel por defecto (algo parecido usa Seagull).
Podéis ver el código necesario en el enlace que os ofrecemos.
Skinning Your Website
Vía / Good PHP Tutorials

Recursos para plantillas

A la hora de realizar un proyecto, debido a costes y a tiempos, puede llegar a ser rentable externalizar el diseño, ya sea comprándolo ya hecho o mandándoselo a hacer a otros.

La solución de comprar puede aportarnos algunas ventajas, como por ejemplo que es más barato que pagar a un diseñador o a una empresa que lo haga. El inconveniente es que podemos ver el diseño de nuestra página en otros lugares, pero bueno, habiendo tantas webs como existen hoy en día, eso es difícil.

En algunos casos, incluso la compra no es necesaria, ya que existen lugares dónde las ofrecen gratuitas. He aquí una lista de recursos y páginas dedicada a las plantillas:

Pago

Gratuitas

Pago y gratuitas

Great template resources and sites

Vía / dzone