Sortea2 Blog

  • Sortear grupos online con Sortea2

    En sortea2 siempre tratamos de comprender a nuestros usuarios y ofrecerles lo que creemos que necesitan, es por ello que hemos desarrollado la opción en los sorteos avanzados de sorteo de grupos, ideal para cualquier deporte e incluso útil para otros fines simplemente para agrupar gente de cuatro en cuatro.

    sorteo_gruposs_prueba

    Está opción estará disponible solamente desde los sorteos avanzados porque creemos que sorteos simples se debe mantener como una herramienta fiel a su propio nombre: simple, debe tener el mínimo número de opciones posible.

    sortear_grupos_sortea2

    Simplemente seleccionamos la opción de sorteo de grupos y ya obtendremos la lista de jugadores encuadrada en grupos de cuatro. Si el número de jugadores no es múltiplo de 4 entonces habrá un grupo que quedará cojo aunque es así también en el Mundo Real, por lo que no se consideraría un error.

    Decir que estos sorteos también podrán ser programados y se podrá abrir la participación para que se vayan apuntando los participantes.

    Enlace: http://www.sortea2.com/sorteos-avanzados

  • Ganador Sueldo Nescafé 2010

    Este miércoles ya se dieron a conocer los resultados de uno de los sorteos anuales más importantes de este país, el Sueldo Nescafé.

    Este año el ganador ha sido Joaquín Martinez Herrera y según publica Nescafé en su página de facebook, es de Jerez de la Frontera.

    Al parecer Ángel Llácer fue en persona a Jerez de la Frontera a darle la noticia directamente.

    Seguid animándoos a participar para la edición del año que viene.

  • Montar SVN en tu proyecto web

    Subversion (SVN) es, junto a GIT el líder en control de versiones de software libre. Subversion es una mejora del antiguo sistema llamado CVS que tenía sus limitaciones; aunque aún se sigue utilizando en multitud de proyectos creo que es mucha mejor opción Subversion.

    Subversion logo

    En esta entrada no voy a hablaros de montar un servidor SVN, principalmente porque es una tarea compleja que está destinada más bien a administradores de sistemas. Os voy a hablar de como configurar vuestro proyecto para beneficiarse del funcionamiento de un servidor existente. Si lo que necesitas es crear tú mismo un servidor para estos fines, te recomendaría mejor el libro de O’Reilly de SVN.

    Para proyectos en los que trabaje más de una persona creo que es una herramienta que una vez se conoce es poco menos que imprescindible. Incluso si trabajamos solos puede servirnos de gran ayuda para no perder ninguno de los cambios que hagamos y poder tener un histórico permanente del proceso de desarrollo.

    Antes de adentrarme a explicar la configuración, diré básicamente en qué puede ayudarnos este sistema:

    • Cada cambio que se envíe al servidor será guardado sin sobreescritura. Si nos cargamos sin querer un archivo podremos echar mano del SVN para recuperarlo.
    • Posibilidad de mezclar dos archivos para ver las diferencias respecto a versiones. Podemos ver, por ejemplo, los cambios que hizo algún compañero en cada línea para comprender como han cambiado las cosas.
    • Se añade un comentario a cada subida de archivos al servidor que hagamos. Esto ayuda a saber para qué se tocó ese fichero.
    • Todos los cambios de los demás se podrán descargar de una vez, solamente aquellos archivos que tengan cambios. A veces, sobre todo en proyectos de programación web, se tocan archivos diversos de carpetas diferentes y en vez de tener que explorar y mirar las fechas de modificación, con SVN hacer un par de clics hará que ya lo tengamos todo más reciente.
    • Control del trabajo de cada uno. Para empresas puede ser muy útil para saber quienes hacen tal cosa. Conocer los porcentajes de código que escribe cada empleado, etc.
    • En caso de tratarse de un proyecto de software libre tener un control de versiones es imprescindible, puesto que necesitamos un lugar en el que la gente que quiera aportar cosas al proyecto pueda conectarse. De cualquier otra manera sería un caos.

    Hasta aquí la enumeración de algunas de las ventajas, estoy seguro que me he saltado decenas de ellas.

    Conseguir servidor:

    Bueno, pues lo primero que necesitamos para empezar es un hosting de Subversion. Hostings hay muchos, aunque la mayoría son de pago y hay que saber encontrar el óptimo. Si tu proyecto es de software libre no debes preocuparte lo más mínimo de tener que pagar ni nada, puesto que para apoyar el Software Libre hay hostings gratuitos con capacidades ilimitadas para sus usuarios.

    Una comparativa genial de los distintos hostings de Subversion que hay se puede encontrar en http://www.svnhostingcomparison.com/

    Para software libre está claro que las dos opciones idóneas deben ser Google Code y SourceForge.net. Hay más que ofrecen capacidades ilimitadas, pero creo que esos están por delante.

    Si nuestro proyecto es de software propietario entonces tendremos que ajustarnos un poco más, tendremos que escoger entre pagar para tener algo holgado o encontrar un hosting que permita privacidad en los proyectos y una cantidad de almacenamiento y usuarios aceptable.

    Sin duda alguna, la mejor opción gratuita para software propietario es Assembla. Brinda de manera gratuita 2GB de almacenamiento, un número ilimitado de programadores e incluso SSL; sin contar que la velocidad de subida y bajada es super apropiada.

    Hay más opciones, aunque la siguiente mejor ofrece 1/4 del almacenamiento que da Assembla, por lo que no merecen la pena. Si queremos pagar ya solo depende de lo que necesitemos y lo que podamos pagar, hay un punto en el que compensa tener un servidor dedicado tanto propio como alquilado para que se encargue únicamente del control de versiones.

    Montar servidor:

    Para montar el servidor habrá que seguir los pasos por los que nos guíe el sitio web del servicio web escogido hasta que finalmente obtendremos una dirección URL tal que así:

    https://subversion.assembla.com/svn/sortea2

    Hay que tenerla muy en cuenta puesto que a esta URL es a la que nos conectaremos. El usuario y la contraseña para conectarse será exactamente el mismo que el que tuvimos que usar para loguearnos en la página web.

    Programa cliente:

    A continuación tendremos que usar nuestro programa de lado del cliente para conectarnos; esto es, un programa en nuestro ordenador al que le daremos URL, password y usuario y estaremos conectados.

    Para Windows el que se utiliza casi siempre es el Tortoise SVN, que es un cliente de escritorio de software libre también con una interfaz inmejorable. Una vez lo tengamos instalado este programa lo que hace es añadir unas opciones a los menús contextuales del explorador de Windows relativas a repositorios SVN.

    Una nota importante a tener en cuenta para pasos posteriores es que si utilizamos Dreamweaver nos interesará descargar la versión de 32 bits de Tortoise si luego queremos conectar ambos sistemas. Se puede tener instalada la versión de 32 y de 64 bits al mismo tiempo de cualquier manera, pero conviene tenerlo en cuenta.

    Conectarse al repositorio:

    La primera vez que queramos establecer conexión tendremos que dar click derecho sobre la carpeta y seleccionar SVN Checkout…, en el cuadro que nos saldrá pegaremos la URL del repositorio que nos proporcionó el sistema de hosting y a continuación se nos pedirá un par de usuario/contraseña. Si le damos a «recordar» no volverá a preguntar ni pedir autorización.

    Ejemplo de Checkout con Tortoise

    Una vez aquí, si todo ha ido correctamente lo que tendremos que hacer es subir los archivos al repositorio. Para ello haremos click derecho sobre la carpeta y le daremos a «SVN Commit». De ahí seleccionaremos archivos que no estén versionados («show unversioned files»), seleccionaremos los que queramos y se subirán uno a uno al hosting de SVN.

    Si por el contrario nuestro hosting ya estaba montado anteriormente y lo que queremos es descargar las cosas para tener las copias en local, en vez de «Commit» seleccionaremos «SVN Update» y nos descargaremos todo lo que no tengamos descargado.

    Integrar con Dreamweaver:

    Si utilizas Adobe Dreamweaver como entorno de desarrollo quizás lo que más te interese es tener las posibilidades de envío y recepción de archivos en la misma ventana del programa en vez de estar intercambiando con el explorador de windows para hacer las operaciones.

    Dreamweaver desde la versión CS4 incluía un cliente de SVN integrado, el problema viene de que si tenemos un repositorio creado con Tortoise y luego los usamos con el cliente ese de DW no nos servirá, porque tiene una incompatibilidad documentada que Adobe contempla en su sitio web ofreciendonos un parche. Dicho parche está escrito en Python, por lo que si no tenemos instalado Python (90% de los mortales) no funcionará, además hay que tener en cuenta que la versión de Python deberá ser la de 32 bits, porque si no tampoco se iba a poder instalar el parche, debido a que DW dirá que no encuentra una instalación de Python válida.

    En definitiva, es mejor olvidarse de todos estos escollos y simplemente usar una extensión para Dreamweaver llamada SubWeaver que actúa como intermediario entre Dreameaver y Tortoise. Ya es cuestión de usar los menús contextuales que nos brinda la extensión y estaremos 100% integrados con Tortoise desde Dreamweaver.

  • 10 consejos para optimizar MySQL

    En un proyecto web medianamente ambicioso llega siempre el momento en que la parte «sagrada» de la aplicación es la Base de Datos. El problema reside cuando las tablas de nuestra Base de Datos empiezan a tener más de 10.000 registros. A partir de ese momento debemos pensar de diferente manera: los accesos deben optimizarse, el sistema de búsqueda ya es demasiado lento y a veces llega incluso al límite de tiempo de ejecución, ya no se puede hacer un ALTER TABLE sin tener que tener la tabla bloqueada unos segundos, etc. Cuando nos empezamos a encontrar con estos problemas es cuando no hemos hecho una predicción suficientemente buena y debemos actuar rápidamente para remediarlo.

    Optimizar MySQL es una tarea que debemos tener en mente desde el minuto cero, aunque sin obsesionarse. Siempre es mejor avanzar que quedarse atascado.

    A continuación os mostraré 10 consejos que pueden acelerar los accesos a vuestras tablas:

    1. Usa índices:

      Un índice es un sistema informático que permite al gestor de base de datos (MySQL) acceder a la información (registros de una tabla) de una forma más directa que si tuviera que ir dato a dato comprobando si cumple las condiciones.

      Los campos que solamos incluir dentro del «WHERE» de las consultas más comunes deben estar indexadas o bien controladas.

      Los accesos vía PRIMARY KEY son, con diferencia los más veloces. De hecho, cuando utilizamos el motor InnoDB, los datos se encuentran físicamente ordenados por el valor de la clave primaria. Esto hace que acceder a los datos sea trivial.

      Si sabemos que un determinado registro no va a poderse repetir, debemos incluirle un índice UNIQUE y si vamos a realizar búsquedas sobre un campo de fecha por ejemplo, le podemos añadir un INDEX simple.

      Siempre que indexamos un campo disminuimos la velocidad de escritura en la tabla porque cada vez que la manipulamos MySQL tiene que asegurarse de actualizar el índice. Hay que encontrar el equilibrio que permita a la aplicación funcionar rápidamente. Si una tabla recibe muchas modificaciones quizás haya que sacrificar algo de velocidad en las consultas.

      Otro dato a tener en cuenta es que MySQL utiliza mayoritariamente índices B-Tree, en el cual se va creando un árbol con las posibles combinaciones. Por ejemplo, en un índice compuesto por los campos (nombre, apellido1, apellido2) será agrupado primero por nombre, luego por apellido1 y luego por apellido2. Una consulta que busque por apellido2 únicamente no utilizaría el índice. En cambio, una consulta por nombre sería rápida. Una consulta consultando por nombre, apellido1 y apellido2 sería bastante óptima también porque podríamos recorrer el índice de arriba a abajo para encontrar el dato.

    2. Utilización de campos binarios

      Los tipos de dato binario son BINARY, VARBINARY y BLOB que van en consonancia con CHAR, VARCHAR y TEXT. Si el texto que vas a almacenar no va a tener una codificación como UTF-8 es mucho más conveniente utilizar campos binarios, puesto que ocupan mucho menos espacio y las comparaciones se hacen como datos numéricos internamente.

      Por ejemplo, campos que guarden cadenas codificadas como MD5, campos de permalink (URL amigable para buscadores), nombres de usuario que sepamos que no permiten caracteres extraños, etc. pueden ser puestos como binarios. Por cada unidad de información utilizaremos menos bytes y por lo tanto el motor de almacenamiento de MySQL podrá manejar los datos con más soltura.

    3. Utiliza UNSIGNED

      Si al crear una tabla, sabes que un campo solamente contendrá valores numéricos positivos, utiliza UNSIGNED. Esto aumenta al doble la capacidad máxima de los campos sin alterar el número de bytes necesarios para almacenar cada dato. Por ejemplo, todos los campos que utilicen un AUTO_INCREMENT deben utilizarlo, puesto que de la otra manera tendremos un rango enorme de números que jamás utilizaremos.

      En aplicaciones que manejen gran cantidad de datos es posible que un campo INT se nos quede corto para almacenar un AUTO_INCREMENT. Si estuviera UNSIGNED habríamos tenido un campo con el doble de vida útil.

    4. Guarda información redundante

      Con esto nos estaríamos saltando la normalización de las tablas. Pero la realidad es que en las aplicaciones web lo más común es que por cada inserción de datos tengamos muchas más consultas de datos. Lo habitual es que la información cambie cada cierto tiempo pero que sea consultada a todas horas.

      Puede ser útil tener campos calculados. Por ejemplo, total de comentarios en una entrada, número de opiniones sobre un producto, ID del último comentario, etc.  Cada vez que se realice una modificación en esas tablas tendremos que hacer más trabajo, pero normalmente compensa.

    5. No uses tipos de datos gigantes

      Me atrevería a decir que el 99% de las personas jamás necesitarán un campo LONGTEXT a no ser que se trate de un gestor de contenidos o algo por el estilo; incluso habrá muy pocas que necesiten un campo BIGINT para uso normal. Un BIGINT ocupa cada número 8 bytes y puede almacenar un número de un 9 seguido de 18 ceros (aproximadamente). El campo LONGTEXT almacena hasta 4 billones y pico de caracteres, que pueden ser mucho más de 50 páginas de Word por ejemplo.

      Los tipos de dato exageradamente grandes ocupan más espacio en disco y rara vez se utilizan por completo. Es por eso que es más recomendable usar los campos adecuados sin pasarse demasiado.

    6. Trata de usar los simplificadores del lenguaje

      MySQL proporciona algunas maneras que ayudan a hacer las consultas más cortas y más fáciles de entender. Estos métodos no solo nos ayudan a nosotros, sino que internamente son mucho más eficientes. Por ejemplo, usar la expresion " WHERE sorteo = 1 OR sorteo = 2 OR sorteo = 5" es mucho menos eficiente que la siguiente: " WHERE sorteo IN(1,2,5)".

      Algunas de estas expresiones pueden ser BETWEEN, IN, LEAST, GREATEST o INTERVAL.

      Ten en cuenta además de que cuanto más cortas sean las consultas, menos bytes ocuparán y menos tardará el servidor de MySQL en recibirlas. Sobre todo en conexiones remotas.

    7. Intenta unificar consultas

      Intenta siempre hacer una consulta cuando normalmente lo harías con varias. INSERT puede insertar varios registros al mismo tiempo si se separan los «VALUES» por paréntesis y comas, por ejemplo: INSERT INTO sorteo VALUES (1,2, 3),(4,5,6),(7,8,9).

      DELETE múltiples se pueden construir en vez de en bucle insertando los valores a borrar dentro de un IN() de MySQL.

      También es posible modificar varios registros desde una consulta. Para ello tendremos que utilizar una sintaxis un tanto peculiar, pero que puede ser útil. Podéis ver esa sintaxis en el siguiente enlace: http://stackoverflow.com/a/84111

      Es útil sobre todo para modificaciones masivas a través de un script.  Por ejemplo, un script que descargue imágenes para cada producto y luego actualice el campo «imagen» de la tabla «producto». Ir uno a uno modificando cada registro sería muy lento e intensivo. Podríamos agrupar las modificaciones de 10 en 10 registros para aliviar la carga de la base de datos.

      Cada vez que mandamos una consulta tenemos que contar con el tiempo de ping, que es lo que tarda el cliente de mysql en «llegar» al servidor. Si tenemos un ping de 10ms ninguna consulta tardará menos de 10ms porque es el tiempo mínimo. Si unificamos 100 consultas en una, esos 10ms solo los tenemos que perder una vez.

    8. Evita operaciones matemáticas

      No es buena idea hacer cálculos complejos en una SELECT. Siempre que sea posible hay que traer los datos al lenguaje que utilices (PHP por ejemplo) y hacer estos cálculos. Por ejemplo, realizar redondeos, medias, divisiones y demás puede resultar problemático y hay que tener siempre en mente que cuanto menos trabajo haga la Base de Datos, más rápida será.

      Normalmente las únicas operaciones matemáticas que compensan son las asociadas a un GROUP BY.

    9. Utiliza MyISAM si es posible

      Un denominador común en las aplicaciones web es que casi siempre se hacen más selects que inserts/updates/deletes. Si este es nuestro caso, podemos renunciar a las posibilidades relacionales que permite InnoDB para tener un gestor más rápido en las consultas.

      Si recibimos muchas consultas de manipulación de datos MyISAM es insostenible y deja corruptas las tablas con frecuencia. Debemos encontrar el equilibrio. Para un blog MyISAM es ideal. Para un bróker online en tiempo real no lo es.

    10. Utiliza el PROCEDURE ANALYSE() de MySQL

      Esta es una característica muy desconocida de MySQL pero de gran utilidad. Se añade tras una consulta y lo que hace es procesarla y devolver estadísticas sobre cada campo seleccionado. Dice máximos, mínimos, medias y lo más importante, propone el tipo de campo óptimo para cada columna.

      Pruébalo tú mismo, ejecuta SELECT * FROM mytabla PROCEDURE ANALYSE(); y comprueba los resultados.

      Ten en cuenta que a nada que haya menos de 100 posibles valores para un campo ya va a proponerte que utilices un ENUM. No siempre esto será aplicable a tu aplicación.

      Este procedimiento es bastante desconocido pero es muy útil sobre todo cuando tenemos que empezar a dar soporte a tablas creadas por otras personas. Es posible que así identifiquemos campos que en realidad no se usan, tipos de datos que son erróneos, etc.

    En definitiva todos los puntos se refieren a que hay que tener control total de los datos que tenemos almacenados, siempre teniendo en cuenta las limitaciones y tratando de mantener una integridad de los datos.

    Fuentes: MySQL Certification Study Guide, Building Scalabe Web Sites (The Flickr way).

  • Telecinco envía mensajes de pago con publicidad

    Hola, yo también envié sms al concurso para ganar un millón y ahora no dejo de recibir sms del 25552.
    Alguien me podría decir cómo darlo de baja? he enviado BAJA al 25552 y recibo sms de tele5 para que siga participando en nuevos concursos.
    También he llamado a un 902010150 y me dicen que o bien ya estoy de baja o no es esa la empresa que me envía los sms.
    En vodafone me dicen que no estoy suscrito en nada, pero sí es cierto que me cobran los sms que recibo.
    Alguien me puede ayudar, porfavor? gracias.

    Llevamos un tiempo recibiendo una serie de comentarios en una entrada anterior quejándose sobre unos mensajes que les llegaban y que ellos tenían que pagar.

    Imagen millón de euros

    Bien, dicha entrada versaba sobre la anterior promoción, aquella en la que se sorteaba un millón de euros entre todos los nºs de teléfono de España. Dado que los títulos eran similares a los de la actual, cantidad de gente llegó ahí buscando por la nueva promoción.

    En la actual, que finalizará el próximo 2 de mayo, se sorteará un millón de euros pero repartido en diferentes cantidades y en diferentes días, lo cual hace que este premio si sea entregable integramente en principio. Las bases están disponibles online para que todo el mundo pueda consultarlas a fondo para conocer todos los entresijos.

    Antes de explicar cuales son los problemas que presenta la participación en dicho concurso, opto por dar las indicaciones para darse de baja completamente de este servicio:

    Enviar un SMS con la palabra STOP al 7125

    Dicho mensaje tendrá una tarificación estándar de 0,174€.

    Se trataría de una promoción normal y corriente, cualquier cadena tiene concursos de este tipo, en el que regalan 10.000€ – 20.000€ entre su audiencia, el problema de esta es que envían publicidad de pago durante las 24 horas del día. Tampoco es una promoción al uso completamente, puesto que tiene un sistema de puntuaciones bastante oscuro en el que dependiendo de las horas a las que contestes la serie de preguntas que luego te envían puedes llegar a ganar 290 puntos más de lo normal. Sin contar con que para participar primero hay que enviar un SMS, luegon nos envían otro (de pago) para que confirmemos que queremos jugar y luego responder otra vez (de pago otra vez) para aceptarlo. En el momento de aceptar la participación estaremos aceptando la base principal por la que se rige este engaño: http://www.usuariosteleco.es/Derechos/TelefoniaMovil/Paginas/Condiciones.aspx#4 , estamos haciendo que sea completamente legal el que nos suscriban a un servicio continuo de pago de alertas.

    Pondré de ejemplo un comentarios recibido para ilustrar mejor la situación de mano de una persona ya afectada:

    Comentario de Rosa María:

    Hola mi nombre es Rosa maria , y he sido estafada como la mayoria de gente con los mensajes de T5 son un fraude , encima ke te manda ellos los mensajes te cobran por recibirlos tu , tiene tela la cosa, asin que no caigas mas en esos tipos de concursos son todo mentira. Y gracias por los comentarios de la gente yo estoy igual ke todos a ver si tengo suerte y me puedo dar de baja . Muchas gracias a todos.

    Se hablan de casos en los que la afectada tenía que pagar más de 5€ de saldo diarios, lo que se convierte en 150€ mensuales rápidamente. Para un usuario de saldo le imposibilita el poder realizar llamadas normalmente y a un usuario de contrato le puede arruinar la factura astronómica con la que se encontraría al mes siguiente.

    Creo que los afectados por esta auténtica estafa deberían ponerse de acuerdo para denunciarlos a Consumo, puesto que no es tolerable una publicidad tan sumamente engañosa, si bien las bases de legales explican que la publicidad se recibirá, en ninguna parte se dice que se cobren y ni muchísimo menos en los programas de televisión que se emiten en directo hablan sobre las consecuencias nefastas que nos puede traer la participación.

    Probablemente muchos de los que lean esto pensarán que «Cómo hay gente que cae en estas cosas«; la cuestión no es esa, la cuestión es que la publicidad engañosa está afectando a cientos de personas y hay que conseguir acabar con esto. Desde aquí se expone el tema concreto y se presenta la manera de parar este caso concreto (sms con la palabra STOP al 7125), pero hay que conseguir parar este tema para siempre.