sábado, 20 de diciembre de 2014

Patrones de diseño en JavaScript

A la hora de programar es muy recomendable el uso de patrones para agilizar el desarrollo y la lectura del código. Hay diversidad de patrones, cada uno adaptado a las necesidades del entorno, pero todos tienen una misión en común, simplificar el trabajo.

Para aplicar el patrón de diseño del que hablaré a continuación se ha creado una clase de ejemplo cuya finalidad es meramente didáctica, pues carece de funcionalidades de interés (se trata de una simple calculadora).

El script, que se encuentra al final de este artículo, comienza con la directiva use strict que limitará algunas funcionalidades ambiguas de JavaScript y restringirá nombres de variables entre otras cosas. Todo ello con el fin de garantizar la compatibilidad con futuras versiones de JavaScript.

Nos apoyaremos en el uso de patrones durante el nombramiento de nuestras variables y métodos. Es por eso que a la clase Calculator, que vamos a utilizar como ejemplo, no se le llamará de esa manera internamente, tan solo definiremos el nombre de la clase en una variable (publicName) y cada vez que queramos hacer referencia al nombre de la clase utilizaremos esta variable. Esto nos permite entre otras cosas no depender de un nombre y si por cualquier motivo necesitamos cambiar el nombre de la clase no tendremos ningún problema más que cambiar una línea de código.

También debemos intentar utilizar siempre los mismos nombres de variables. Si en un ámbito cerrado tenemos una única matriz que actúa de contenedor de números, lo fácil sería llamarla numbers, cuando quizá lo idóneo sería utilizar un nombre genérico: items, por ejemplo.

viernes, 31 de octubre de 2014

365 días

Hoy hace exactamente un año desde la última entrada en este blog.

El principal motivo de mi ausencia ha sido el trabajo, así que intentaré retomar el blog escribiendo más a menudo e introduciendo otros nuevos lenguajes de programación.

jueves, 31 de octubre de 2013

PHP strtotime: el mes de la marmota

Nos encontramos a vísperas de Halloween, aún es octubre, hace un mes también era octubre y no le he cogido prestado el coche a Marty McFly.

En resumidas cuentas, la función strtotime de PHP al realizar una operación de suma/resta de meses, donde el mes fijado como actual tiene más días que el mes resultante, el resultado final no será el esperado.

Por ejemplo, nos encontramos a 31 de octubre y hace un mes era septiembre, pero septiembre solo tiene 30 días. Si retrocedemos un mes utilizando la función strtotime, seguirá siendo octubre, concretamente 1 de octubre.

date('d-m-y', strtotime('-1 month')); // 01-10-13
Así que si estáis realizando operaciones de fechas, especialmente con meses, y no queréis más sorpresas a final de mes (días 29, 30, 31), os sugiero que tengáis en cuenta lo anterior.

Pero no todo iban a ser malas noticias, siempre hay algún que otro remedio con que el que podréis evadir el problema: strtotime_months.

sábado, 19 de octubre de 2013

PHP session_start: revelando información

Bien es conocida la función de inicio de sesión session_start de PHP, pero no tan conocida es una ligera peculiaridad capaz de revelarnos rutas sensibles al generar avisos por pantalla.

La idea es sencilla, cambiar el valor de la cookie que hace la función de identificador de sesión (por defecto PHPSESSID ) a uno no admitido por la función session_start, y si se dan las condiciones (error_reporting) el error resultante será parecido al siguiente:

Warning: session_start() [function.session-start]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /secret/path on line 0
 ¿Solución? No reportar los errores al usuario y/o silenciar la función anteponiendo una arroba:

@session_start();
A modo de anécdota, y apoyándome en el buscador Google, automaticé la idea anterior con un araña (no de las que pican, chiste malo xd) para localizar páginas propensas a ello y hubo algún que otro resultado:



domingo, 6 de octubre de 2013

MySQL: ROUND feature

Curiosa característica que me he encontrado en la función ROUND de MySQL.

Las entradas literales pares (incluido el cero) cuyo primer decimal sea 5, serán redondeadas a la baja y no al alza.

domingo, 4 de agosto de 2013

Adivina adivinanza: blind SQL Injection

La traducción literal de blind SQL injection viene a ser ataque de inyecciones SQL a ciegas, es decir, que debido a las condiciones expuestas no podremos imprimir en pantalla la información de las consultas que manipulemos, pero ello no implica que no podamos provocar condiciones controladas que puedan ser analizadas desde el cliente.

La base de este ataque se puede asemejar al conocido juego popular adivina adivinanza. Nosotros no podremos obtener la respuesta directamente, sino que tendremos que ir formulando una serie de preguntas que serán respondidas lógicamente (si/no) y con las que iremos cercando el trecho hasta dar con el resultado.