[SOLUCIONADO] Uploadify y los problemas con las sessiones

Uploadify es un magnífico plugin para jQuery que te permite subir varios archivos a la vez mediante flash, de forma totalmente transparente (podeis ver una demo en este enlace).

Realmente, la gran ventaja que yo le veo no es la de subir varios archivos a la vez,esto ya se puede hacer con javascript a pelo, la gran ventaja es que añade una barra de progreso para que el usuario no se desespere.

Además de subir archivos, también se pueden mandar otros datos a la vez que se suben las imágenes (usando scriptData). Lo cual puede ser muy útil si se quiere por ejemplo, mandar los datos de un formulario a la vez que se sube un archivo.

El gran inconveniente de uploadify, es que manda cada archivo por separado. Es decir, si quieres subir 30 archivos, manda cada archivo en una petición HTTP distinta. El problema no es la velocidad, puesto que se pueden paralelizar las subidas, el problema son las distintas peticiones si tienes que adjuntar datos. El hecho de que sean distintas peticiones complica un poco la lógica en el servidor en según que casos…

En fin, recientemente he usado uploadify en un proyecto donde los usuarios debían estar registrados para poder subir archivos. Claro, registrados y logueados en el sistema. El tema es que tras implementar la subida de archivos, no funcionaba… y no funcionaba… y casi me vuelvo loco, hasta que me di cuenta de que uploadify no envia las cookies, y  lógicamente sin cookies el servidor no tiene forma de cargar las variables de sesión, y por tanto, de saber qué usuario está intentando subir qué, y dado que el servidor no tiene forma de saber si es o no un usuario registrado, devuelve un mensaje de error. Total, que una vez detectado el problema de las cookies la solución ha sido simple.

La solución para mantener la sesión con uploadify (y en general cuando el cliente no tiene cookies), es añadir a la URL de subida el nombre de sesión y el identificador de sesión.

En PHP añadir esto a la URL sería algo, tal que:

$url = $url . '?' . session_name() . '=' . session_id();

Una vez hecho esto, problema resuelto ;)

, , , ,

Nueva web para jugar a juegos Flash

Hace tiempo que tenía en mente hacer una web de juegos. Al final me he decantado por juegos en Flash.

La verdad es que últimamente ando bastante liado con otras cosas que no tienen nada que ver con los juegos, pero este Sábado pasado, a medio día, me puse un reto personal. Me dije: “A ver si soy capaz de hacer la web antes de que acabe el fin de semana”.

Así que, dicho y hecho. Ha nacido NextGameGen.

He hecho toda la web (incluso la parte que se encarga de subir los juegos) entre el Sábado por la tarde (unas 4 horas), el Domingo por la mañana (otras 4 horas) y el Domingo por la tarde/noche (otras 8 horas). Como no podía estar el 100% del tiempo delante del ordenador, cuando estaba era en plan superintensivo.

La verdad es que estoy bastante contento con el resultado. En 16 horas una web de juegos desde cero. Únicamente le he dedicado 45 minutos más hoy, para añadir los botones de compartir en Facebook & amigos, poner algo de publicidad, y corregir 4 bugs tontos.

Sé que hay muchas cosas mejorables (todo llegará), y que hay un par de bugs invisibles para el ojo humano, pero de momento el que quiera ya puede jugar. La web es 100% funcional.

Incluso recomienda algunos juegos relacionados, según el juego al que juegues (el algoritmo es bastante mejorable).

Pues nada más, ahora voy a ver si aumento las visitas de mi web con ShareUsers, que para los que no lo conoceis, es una web cojonuda para intercambiar enlaces de forma gratuita y automática y conseguir muchas más visitas (ya os contaré más sobre esto).

Lo dicho, podéis viciaros un rato en la web de juegos, y aquí estoy para cualquier crítica o sugerencia que querais hacer ;)

, , , ,

CocoManso: FIXME y TODO

Hola amigos, soy Coco y hoy os voy a contar la diferencia entre poner un comentario con FIXME y poner un comentario usando TODO.

  • FIXME: debe ser usado cuando es un hack, una constante hardcodeada o algo crítico, y que debe ser eliminado antes del próximo release. Normalmente los FIXME, bien usados, sirven para avanzar en el desarrollo y prototipado de la aplicación.
  • TODO: debe ser usado cuando supone una mejora, o cuando hay que realizar algún cambio mas o menos complejo, pero uno no tiene ganas de hacerlo en ese momento (hay gente que abusa mucho de esto, y mejor no miro a nadie).

Recuerda, si es algo crítico y el software no puede ser publicado sin corregir eso, usa FIXME, por el contrario, si el comentario que pones, no afecta para nada el buen funcionamiento del programa, y el programa va a seguir funcionando bien, puedes estar cómodo dejando el comentario como TODO.

, ,

Efecto de click para jQuery

Hoy he estado haciendo unos cuantos experimentos con javascript. La verdad es que no he llegado a donde quería llegar, pero voy a asumir que es debido a que mi capacidad de diseño está atrofiada (y por suerte compensada en otras habilidades).

En fin, lo que estaba intentando hacer es algo como un efecto de click. Me explico. Lo que quería que ocurriera, es que cuando el usuario hiciera click en un enlace, se produjera como una especie de linea de expansión. Pongo un ejemplo. Has visto el tipico anuncio de la Wii, donde al principio aparecen como tres o cuatro círculos concéntricos que se dispersan hasta desaparecer? Pues algo así, pero para cuando el usuario hiciera click con el ratón en una web.

Al final de trastear un rato, hacer unos cuantos experimentos con imágenes, y seguir trasteando con animaciones sencillas, creo que he llegado a una primera aproximación que mas o menos se parece a lo que yo quería.

Básicamente, el ejemplo tiene 2 fragmentos interesantes (tampoco hay más en el html):

El primer fragmento es el que asocia el evento de click a todos los elementos que tienen la clase ‘clickable-round’. Cuando hagas click dentro de un elemento de esa clase, aparecerá un círculo que se irá difuminando.

$('.clickable-round').click (function (event) {
 $(event.currentTarget).jSimulateClick (event.pageX - 1, event.pageY - 1, 'round');
});

El segundo fragmento, asocia el evento de click a los elementos de la clase ‘clickable-square’. Cuando hagas click en cualquiera de estos elementos, el efecto será similar al anterior, pero en vez de mostrar un círculo, mostará un rectángulo que va, desde donde hayas hecho click, hasta cubrir el área del elemento en cuestión:

$('.clickable-square').click (function (event) {
  $(event.currentTarget).jSimulateClick (event.pageX - 1, event.pageY - 1);
});

Si quieres trastear el plugin, los parámetros con los que se puede trastear son el color del borde, el tamaño inicial del borde, la duración de la animación, …

Este javascript se puede usar para aplicaciones personales, comerciales y para lo que se quiera.

Finalmente, agradecería cualquier comentario para mejorar el efecto.

, , ,

Google dejará de dar soporte a Internet Explorer 6

Leo a través de tufunción, y releo en el blog oficial de google, que dejarán de dar soporte para IE6 en Marzo.

Suena fantástico, ¿verdad?

Espero que con este gran paso por parte de Google, las empresas y demás profesionales del sector, dejen de programar para IE6, y sea entonces cuando por fin la gente deje de utilizar IE6. Máxime, habiendo sustitutos gratuitos como Firefox, Opera, Safari, Chrome y como no, las versiones 7 y 8 de Internet Explorer.

Sin IE6, creo que todos los desarrolladores ganamos en velocidad de desarrollo, dejamos de tener quebraderos de cabeza en cosas que no funcionan bien o no se visualizan bien en IE6, y podemos construir un mundo mejor ;)

IE6, ahí donde está, tiene ya sus años. Es un abuelete.

Con amor siempre, pero a ver si se jubila ya ;)

jQuery 1.4.1 está fuera

Unas semanas después de que hayan sacado jQuery 1.4, acaba de salir una nueva actualización de este fantástico framework para javascript.

La nueva versión de jQuery 1.4.1 soluciona algunos bugs e incluye algunas mejoras.

Descárgarte jQuery 1.4.1 y écharle un vistazo a las release notes.


jcontroller: Controlador para javascript con jQuery

Hace tiempo que no escribo, así que he pensado, voy a coger (agarrar para los argentinos) algo que haya hecho en los últimos días para algún proyecto, y voy a hacer un post, que estoy perdiendo usuarios, y esto no se puede permitir :p

El caso es que últimamente he notado que el código en javascript que estaba escribiendo era un poco caotico, sobretodo cuando en la página había varios eventos, etc… Si comprendes lo que quiero decir, es que es un buen momento de que dejes tu también de hacerlo :|

Total, que me dije: “tio, puedes hacer dos cosas”

  • Puedes buscarte un buen controlador o plugin para jQuery (CorMVC),  o incluso buscar un framework como JavaScriptMVC o Jamal
  • O puedes cometer la estupidez de hacer tu propio controlador para javascript

El lector avispado se habrá dado cuenta de lo estúpido que soy.

Pues nada, os presento jcontroller y su versión minificada (con yuicompressor).

Tiene tests (que no incluyo), pero básicamente se pasan en Firefox, Chrome e Internet Explorer. Un segundo que no me cuesta nada… también funciona en Opera. Vale, pues mira por donde que parece que se lleva bien con los browsers (asumo que funciona en Safari).

Entremos en materia:

¿En qué consiste jcontroller?

Básicamente sirve para no tener una maraña de código y controlar un poco las acciones que realizar según los eventos del usuario (normalmente los clicks).

Como contar más cosas es una tontería, os voy a enseñar un ejemplo y ya cada cual que haga lo que le parezca. En este momento es cuando yo paro de escribir el post para hacer el ejemplo en mi ordenador. Este post ha surgido tan repentinamente que no tenía nada preparado… :(

Vale, el ejemplo chorra ya está preparado, sólo comento lo principal:

  • Nada se ejecuta sólo, hay que iniciar el controlador con  la función “init”. Si le das el nombre “controller” pues “controller.init()”
  • El controlador ejecutará la función ‘_init’ que hayamos definido en nuestra implementación, al principio.
  • Las funciones que empiezan con ‘_’ son privadas y no pueden ser ejecutadas desde fuera (excepto _init, _default y _clear)
  • El controlador automáticamente, cuando se carga, mira lo que hay en la parte de hash ‘#’ de la URL, y llama a la función que considere apropiada
  • Aunque ahora mismo funciona todo para detectar los enlaces tipo ‘#whatever’, se puede implementar el “trigger controller” que quieras, devolviendo una función en tu implementación de ‘_init’ (ignora este parrafo de momento)
  • Se pueden definir tantos controladores como quieras, cada uno es independiente a los demás, aunque si todos usan el mismo “trigger controller” todos se van a ejecutar a la vez (ignora este parrafo de momento)

Aquí os dejo los enlaces principales:

Realmente el ejemplo es muy chorra, jcontroller en sí es muy chorra, echadle un vistazo.

Nota: Ahora mismo usa jQuery, pero no creo que lleve más de 10 minutos cambiarlo por otro framework

Finalmente os vuelvo a poner los enlaces, para quien se lo quiera descargar:

Pues nada más que contar por el momento.

Las críticas constructivas son bienvenidas y las destructivas ignoradas.

Un saludo ;)

, ,

Firebug 1.5 peta en los Ubuntu 64-bit

Esta mañana me ha salido la actualización de Firebug 1.5 y cuando he ido a hacer click en el icono… boom!! adiós Firefox.

Según he leido en esta entrada del blog de Firebug, el pete se solucionará en la versión 3.5.8 de Firefox, cuando los de Ubuntu actualicen.

Por si a alguien le ocurre el  mismo problema, hay dos soluciones:

Google Chrome para Linux

Hoy me ha llegado un e-mail de Google diciendo que acaba de salir la beta para linux de Google Chrome. Hasta ahora sólo estaba disponible para Windows.

Por supuesto, me he bajado e instalado esta nueva versión de Google Chrome en Ubuntu 64-bits

La verdad es que me he sorprendido porque la pantalla del navegador sale inmediatamente. Es lanzar el comando y una fracción de segundo más tarde, ya está renderizado el navegador. Hasta ahora me había dado la impresión de que Opera cargaba rápido, pero Chrome parece que va más rápido.

Lo siguiente que me ha gustado, es que el test de mecanografía de ARTypist ha funcionado magnificamente. Me consta que internamente hay mucho javascript  que ejecutar, y va de lujo. Además el CSS también parece que renderiza perfectamente, y eso que no me había molestado en probarlo en Chrome :)

Finalmente, después de visitar otro par de páginas y comprobar que Flash funciona sin yo haber instalado nada (probablemente lo trae de serie, o haya detectado la instalación de flash para Firefox), parece que todo funciona perfectamente.

De momento no me cambio de navegador, seguiré usando Firefox, pero ya puedo hacer tests de las webs en Chrome sin abrir ninguna máquina virtual.

, , , ,

TCPDF excelente libreria para generar PDFs en PHP

El otro día estuve investigando el tema de generar PDFs con PHP.

Lo primero que me vino a la cabeza fué la extensión de PDFlib que incluye PHP desde la versión 4. El problema de esta versión es que me parecía muy a bajo nivel, y tampoco tenía ni idea de por donde empezar.

La lista de funciones de PDFlib que incorpora PHP es bastante extensa, y seguramente se puede hacer de todo, pero no quería estar escribiendo cientos de lineas para hacer una chorrada de PDF, símplemente quería ponerle un fondo y escribir cuatro cosas.

En fin, que buscando más información, acabé encontrándome con la librería TCPDF que parecía muchísimo más completa, y más sencilla de usar. Realmente no se si es más sencilla o no, porque al final no he hecho nada con la extensión de PDFlib, pero TCPDF tiene muchos ejemplos. Hay ejemplos supersencillos de muchas cosas, con lo que hacer un PDF se convierte prácticamente en copiar y pegar de aquí y allá.

La verdad es que con esta librería hice un prototipo de lo que quería hacer en 15 minutos. Puedes pasarle el código en formato HTML y luego la librería lo formatea internamente en el documento. Esto hace que no te tengas que calentar mucho la cabeza.

La única “pega” que le veo, es que ocupa unos 10MB comprimida en zip, lo que son unos 16 megas una vez descomprimida.  En cualquier caso, la mayor parte del tamaño no es por la librería en sí, si no por que dentro lleva ya fuentes tipográficas, la documentación, y ejemplos. Si eliminamos las fuentes que no nos hacen falta y la documentación, se puede quedar en poco más de 1 megabyte descomprimida. Vamos, de lujo.

Más información sobre esta librería en www.tcpdf.org

, ,

prev posts