Sortea2 Blog

  • Zonas horarias con PHP

    Hace un par de años publicamos un artículo titulado Zonas horarias y PHP en el que explicábamos los entresijos del sistema que habíamos empleado para la programación de los sorteos que se realicen fuera de España.

    En ese artículo se narra un mecanismo que proporciona el lenguaje de PHP para realizar los cambios de horario de forma eficaz y abarcando todas las opciones posibles. Sin embargo recientemente tuvimos que revisar todo el sistema porque había muchas quejas de usuarios que tenían problemas con sus sorteos programados que se realizaban a horas diferentes a las que ellos habían definido.

    Al analizar la situación más en detalle pudimos ver que hay bastantes problemas en el sistema que indicamos en el artículo «Zonas horarias y PHP» que no tienen fácil solución.

    Por un lado está el problema de que todo el empaquetado de zonas horarias y fechas de cambio está dentro de la instalación de PHP. Si un gobierno decide cambiar esa fecha, como ha sucedido recientemente con Argentina, la información de cambio está obsoleta y es sencillamente equivocada. PHP soluciona el problema creando una modificación a sus programas pero esa modificación se incluye en la versión más moderna de todas.

    Ahora bien, uno no puede actualizarse la versión de PHP cada día. Sobre todo si se tiene la página en un hosting compartido, la actualización de versión la dictan los proveedores del servicio, uno no puede realizar dicho cambio. En nuestro caso, tenemos que vivir con una versión desfasada que tiene errores en las conversiones de hora para sorteos de Argentina y hemos tenido que implementar soluciones alternativas un poco artificiales. Oficialmente con la versión de PHP instalada, cuando queremos saber la hora actual de Buenos Aires no da una que está equivocada en dos horas.

    Hace unas semanas se produjo el cambio de hora y también pudimos ver cómo horas antes de dicho cambio cuando se consultaba la hora estándar del sistema (mediante time(), tras establecer la zona horaria), la UTC (antigua de Greenwich) el sistema estaba dando un dato erróneo en una hora.

    En conclusión, dar una actualización a la opinión que expresábamos hace dos años. No se puede establecer un sistema de cambios horarios que sea eficaz al 100% mediante PHP. La única opción es actualizar las versiones casi de continuo o crear un sistema artesanal donde ir indicando las diferencias horarias. El problema no es exclusivo de PHP y la culpa no es de ellos sino de muchos gobiernos que arbitrariamente modifican los políticas sobre diferencias horarias, no se ciñen a lo previsto años antes sino que realizan muchos cambios con efecto inmediato. En algunos casos también hay medidas de tipo político, como algunas regiones que pretenden distinguirse del resto del país con un cambio de zona horaria. Estos cambios no se reflejan automáticamente en las funciones de PHP.

  • Coincidencias en la lotería

    El pasado sábado 16 de octubre de 2010 se produjo una asombrosa coincidencia en la lotería de Israel, similar a la lotería primitiva española: salieron los mismos números que habían resultado premiados el día 21 de septiembre del mismo año, apenas un par de semanas antes. Para mayor coincidencia los números habían salido en aquella ocasión justo en el orden inverso a esta nueva oportunidad.

    Estadísticamente es un suceso de una improbabilidad enorme, aunque se descarta cualquier tipo de fraude al respecto, no deja de ser una tremenda casualidad. Los números fatídicos fueron: 36, 33, 32, 26, 14, 13.

    Hace ahora poco más de un año que en la lotería de Bulgaria sucedió algo parecido: allí incluso se repitieron los resultados en dos sorteos consecutivos:
    4, 15, 23, 24, 35 y 42 fueron los números que se repitieron en aquella otra ocasión el seis y el diez de septiembre.

    Cabe destacar que ante estas coincidencias los premiados en segunda convocatoria fueron muy dispares. En Bulgaria hubo hasta 18 personas que acertaron la combinación (en la primera ocurrencia no hubo ganadores). En este nuevo caso de Israel sólo ha habido tres ganadores del sorteo.

  • 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.