Archivo para la categoría ‘Programacion

Thumbr.it es sin lugar a dudas uno de los proyectos más interesantes de los que he tenido noticia este último año, lo reune todo (una buena idea y gente con gran talento para darle forma).

Cuando le pedimos que nos defina el proyecto en menos de diez palabras lo tiene claro: “es ImageMagick en la nube”. Con este proyecto pretende darle un vuelco a la forma tradicional de trabajar con las imágenes en la web. Hoy día cualquier proyecto medio / grande que quiere servir fotos divide el trabajo en 3 partes:

1. Recibir la imagen en sí sobre la que trabajaremos, muchas veces subida por usuarios. Esto conlleva almacenar las imágenes, guardar copias de seguridad, etc.

2. Trasformar esta imagen para adaptarla a la web. Como mínimo deberemos redimensionarla y recortarla. Si la web es grande también deberemos asegurarnos de que la imagen no contiene ningún virus, y sobre todo desde el éxito de Instagram podemos querer ajustar los colores, ponerle un marco, …

3. Servir la imagen resultado. Aquí la dificultad reside en hacerlo muy rápido, típicamente usando un CDN que va a cachear nuestras imágenes en servidores de todo el mundo para que un usuario en France pueda descargar la imagen desde un servidor en Francia y uno de Brasil lo haga desde un servidor en Brasil. Servir la imagen desde un servidor demasiado alejado al usuario puede suponerle un retraso de 1 segundo extra por imagen (letal para una página con decenas o cientos de imágenes pequeñitas).

La opción más popular para resolver el problema número 1 es, cuando tu tamaño desborda lo que te cabe en un servidor, guardar las imágenes en Amazon S3. Otra opción también popular para los que tienen menos recursos es montar una pequeña cluster de servidores y correr algunos de los programas Open Source que nos permiten tener algo como Amazon S3 con nuestros servidores. Algunas opciones son MogileFS, Ceph. El inconveniente es que si nuestro centro de datos se viene abajo por cualquier problema técnico (algo que suele pasar cada 2 o 3 años) no tendremos acceso a las imágenes, un supuesto que es mucho más dificil que ocurra con Amazon S3.

Para resolver el problema número 3 podemos contratar un CDN, los más populares (y caros!) son probablemente Akamai y Level3. Hay otros mucho más económicos, como CloudFlare, pero tienen menos nodos de salida. En un punto intermedio se situa Amazon CloudFront.

Sin embargo para el punto 2 de los 3 que he enumerado no había hasta ahora una buena solución. Podíamos, como siempre, hacerlo nosotros a mano, pero implica que tenemos que programar todo el código que manipula una imagen (recortar es fácil, ajustar el contraste, luminosidad, saturación, cambios de colores, etc. es más dificil), tenemos que provisionar un número de servidores para hacer estas operaciones, asegurarnos de no transmitir los virus que pueda existir en la imagen original. Además hay decenas que pequeños errores que solemos cometer que va a hacer que nuestro código falle: gestión de la orientación en las etiquetas EXIF para los JPEG, imágenes con mapas de color raros o directamente rotos, respetar la transparencia de la imagen original, etc.

Thumbr.it viene a cubrir este hueco, y según nos ha contado Joaquín sus planes son extenderlo para cubrir también los otros dos puntos que hemos enumerado, para que los usuarios tengan una solución completa toda en uno. La forma que tiene Thumbr.it de transformar una imagen es bastante ingeniosa, basta con que el administrador de la web cambie los enlaces de las mismas. Suponed que tenéis una imagen en la URL:

http://midominio.com/mifoto.jpg

Y queréis servir esta foto pero con un ancho y un alto máximos de 400, y en formato PNG, basta con que en vuestro HTML pongáis:

http://api.thumbr.it/XXX/YYY/midominio.com/mifoto.jpg/400x400/mithumbnail.png

Las XXX e YYY dependen de vuestro usuario, y es un código que valida quien hace la petición. El resto es fácil de entender, la imagen se va a servir desde el dominio api.thumbr.it, los servidores de Thumbr.it al ver la URL que le pide el usuario se bajarán la imagen que está en la URL http://midominio.com/mifoto.jpg, le cambiarán el tamaño a 400×400 de máximo, y la servirán en formato png. Los servidores de Thumbr.it van a cachear la imagen resultado durante un mes, con lo que en la práctica las imágenes se sirven sin ningún retraso. Solo notaremos un pequeño retraso la primera vez que se genera la imagen, que nosotros hemos medido en unos 200 milisegundos.

Una duda que nosotros teníamos es como puede afectar al SEO el transformar la URL de esta forma. Joaquín es conocido por haberle vendido su anterior proyecto (Panoramio) a Google, y como imaginábamos había tenido en cuenta este problema. La extensión del nombre del fichero que le damos a la imagen en Thumbr.it se usa para extraer el formato de salida de la imagen, pero el nombre en sí es completamente libre, con lo que podemos usar un nombre descriptivo para ayudar a los buscadores a indexar esa imagen. El dominio desde el que se sirve la imagen también es personalizable.

Como cereza sobre el pastel, Thumbr.it además de transformar imágenes también acepta documentos Word y PDF. En estos casos la imagen de salida será una reproducción de la primera página del documento. Joaquín nos ha comentado que tiene planeado implementar también HTML como entrada, lo que nos permitiría poner pantallazos de páginas web. Además quiere añadir más opciones, por ejemplo para poder elegir la página que queremos ver dentro de un Word / PDF, lo que sería ideal para crear un visualizador completo de Word y PDF (si añadiese PPT podríamos hacer nuestro propio Slideshare, jeje).

Yo estoy probando Thumbr.it en Resultados de Fútbol y grandes proyectos como Freepik (el mayor y más popular buscador de recursos gratuitos para diseñadores). Hace un par de semanas Thumbr.it estaba sirviendo 2.5 millones de fotos al día, y ahora está ya en más de 3 millones de fotos al día!

A qué esperas para darte de alta y probarlo!

Hace mucho tiempo que quería hablar sobre los discos de estado sólido (Discos SSD), acrónimo en inglés de solid-state drive, es obviamente un dispositivo de almacenamiento de datos que usa memoria no volatil (flash) o memoria volátil (SDRAM) para almacenar los datos, en contrapartida a los discos duros convenciones que utilizan discos magnéticos.

Los SSD por lo tanto y sin entender mucho de la materia son más silenciosos, más rápidos en los tiempos de acceso y tienen menos latencia.

Aunque por el momento no se utilizan todo lo que deberían por diversos problemas o desventajas que pasamos a comentar en esta entrada, principalmente sus grandes desventajas es el precio y la capacidad, pero poco a poco las prestaciones de los discos SSD van mejorando y se están abriendo hueco en el mercado.

Ventajas

  • Gran velocidad de escritura
  • 10 veces más rápidos en lecturas que los discos convencionales
  • Menor consumo de energia y por lo tanto se calientan menos
  • Silenciosos
  • El rendimiento de los SSD es estables no disminuye al disminuir el espacio libre
  • Menos peso y menor tamaño
  • Más resistente y menos complejo
  • Tiempos de acceso mucho menores

Desventajas

  • Precio, los precios son considerablemente altos
  • Capacidad, disponen de mucha menos capacidad si lo comparamos con los discos convencionales
  • Vida útil, aunque cada vez se nota menos, las memorias flash tienen un límite de ciclos de escritura, normalmente desde 1.000.000 hasta 5.000.000 de ciclos. Algunos sistemas de archivos especiales pueden mitigar este problema repartiendo los datos a lo largo de todo el disco.

Discos SSD en servidores

Aunque se conocen de sobra las excelencias de los discos SSD, debido a su precio y en algunas ocasiones a su poca capacidad no están demasiado extendidos en lo que respecta al uso de servidores.

Personalmente he utilizado he utilizado sistemas (Linux y Windows) con ambos tipos (SSD y discos convencionales) y la diferencia entre uno y otros es abismal, los resultados del sistema con discos SSD en lo que a servidores se refiere son notablemente mejores que con discos convencionales en gran medida gracias al incremento en las velocidades de escritura y lectura frente a los para mí ya obsoletos (para servidores) discos rotacionales o discos convencionales.

Sin duda si lo que se necesita es un servidor de alto rendimiento la mejor opción es utilizar discos de estado sólido y más aún cuando estos servidores tienen un número elevado de escrituras, es decir un servidor dedicado para el uso de MySQL (por ejemplo) aumenta en gran medida su rendimiento con el uso de discos SSD.

Algunas curiosidades

  • Técnicamente no son discos a pesar de que en castellano tendamos a traducir la “D” de SSD por disk se trata de drive.
  • Impresionante: Tiempo de carga de disco duro normal vs disco estado solido (ssd)
  • En un estudio de grabación es muy importante el silencio. Los discos SSD permiten reducir el ruido que el ordenador genera, eliminando al 100% el sonido del disco duro
  • Soporta caídas, golpes y vibraciones sin estropearse y sin descalibrarse como pasaba con los antiguos Discos Duros.

Popuz.com es la primera red social de managers deportivos online, aunque realmente en estos momentos están desarrollando más juegos que no son managers deportivos por el momento se puede jugar a los managers deportivos y poco a poco se irán lanzando los diferentes juegos no deportivos.

Popuz.com es una plataforma multilenguaje en la que encontrarás todas las bondades de una red social: enviar mensajes, hacer amigos, hacer publicaciones y lo más importante con una única cuenta puedes jugar a todos los juegos. Hasta el momento está disponible en 6 idiomas (inglés, español, portugués, francés, italiano y alemán), hay seis modalidades de managers deportivos disponibles: Fútbol, Baloncesto, Hockey, Balonmano, Rugby, Fútbol Sala y Waterpolo ¿? (Si!! waterpolo… sin duda es el primer juego online de waterpolo)

Características de los juegos disponible en Popuz.com

  • Todos los juegos son gratuitos
  • Los juegos son accesible via web por lo que no hay ni instalaciones ni nada parecido, son multiplataforma por lo que podrás acceder desde tu móvil, ordenador personal o tableta digital.
  • Con una única cuenta podrás jugar todo lo que quieras y de manera gratuita
  • La gran mayoría de juegos son sociales por lo que competirás contra usuarios reales, lo que añade un gran realismo y dinamismo al día a día del juego
  • Hay capacidad para un gran número de usuarios gracias a los numerosos servidores en los que puedes disfrutar de cada uno de los juegos
  • Más de 50.000 usuarios están jugando ya
  • Disponible en varios idiomas: inglés, español, portugués, francés, italiano y alemán
  • Se puede jugar simplemente conectándote pocos minutos pero los más exigentes pueden exprimir todas las posibilidades de los juego disfrutando durante horas
  • Apto para todas las edades

¿Qué es un manager deportivo online?

Seguro que alguna vez has jugado a Pc Fútbol, Fifa Manager, Football Manager o Championship Manager… pues eso es un manager, juegos en los que realizas la labor de dirigente de un club de fútbol o como en Popuz.com de cualquier otro deporte. Puedes comprar y vender jugadores, ampliar las instalaciones del club, jugar partidos, customizar todo lo relacionado con el equipo y muchísimas cosas más.

En el caso de Popuz.com lo positivo es que utiliza la base de Fantasy Manager (uno de los managers deportivos online líder en España), esto permite que muchos de los problemas que se puede llegar a encontrar en este tipo de juegos ya estén solucionados debido a la gran comunidad de usuarios que Fantasy Manager tiene consolidada y jugando a diario (más de 50.000 usuarios activos).

Algunas imágenes de Popuz.com

Popuz.com primera red social de juegos socialesJuego online de BaloncestoJuego online de WaterpoloManager online de RugbyJuego online de Fútbol SalaManager online de fútbolJuego online de Hockey sobre hieloJuego online de balonmano

Aquí os dejo unos pocos trucos para escribir menos código PHP en tus scripts, seguro que algunos de estos trucos ya los conocías pero bueno me parece interesante recopilar estos trucos.

Reducir las sentencias if()


if($variable == 2)
{
$valor = true;
}
else
{
$valor = false;
}

Podríamos condensar esas 8 líneas de código en una única línea:

$valor = ($variable == 2) ? true : false;

Declarando variables

A menudo declaramos multiples variables cada una en líneas separadas, todas estas variables se podrían llegar a agrupar en una única declaración.

$variable1 = 7;
$variable2 = 12;
$variable3 = 9;

Podríamos declarar varias variables con diferente valor en una única línea de la siguiente manera:

list($variable1 ,$variable2 ,$variable3) = array(7,12,9);

Y más fácil todavia si las variables declaradas coinciden en el valor asignado:

$variable1 = $variable2 = $variable3 = “Prueba”;

Usar switch() en lugar de if()

Parece algo lógico pero muchas veces utilizamos if() dónde podríamos ahorrar código usando switch():

if($opcion == “menu”)
{
//cargar menu
}
elseif($opcion == “portada”)
{
//cargar portada
}
else
{
//no cargar nada
}

Usando switch() podríamos reducir el código ostensiblemente:

switch($opcion)
{
case ‘menu’:
//cargar menu
break;
case ‘portada’:
//cargar portada
break;
default:
//no cargar nada
}

Son sólo tres trucos pero seguramente te pueden ahorrar muchas líneas de código si sabes aplicarlos correctamente.

* Si alguien tiene pequeños trucos para optimizar código PHP le animo a que lo comente y enriquecer un poco esta entrada.

Estas son algunas reglas básicas a la hora de desarrollar un buen “producto web”, probablemente si desarrollas aplicaciones con asiduidad tienes en cuenta algunas de ellas pero si no las conoces y te gustaría empezar un proyecto seguro que te vendrá bien echarle un vistazo.

Desconfia de los usuarios

Suena duro pero es la verdad, no quiero decir con esta afirmación que todos los usuarios sean maliciosos pero lo que si es cierto es que mientras más desconfies más preparado estarás cuando algo no deseado suceda, intenta comprometer lo menos posible tu aplicación evitando todos aquellos agujeros de seguridad que esten en tu mano, tambien es importante que no te centres unicamente en la seguridad… ten en cuenta que muchos usuarios por desconocimiento de la aplicación harán un uso incorrecto de la misma, un buen ejemplo de ello lo tenemos a la hora de rellenar los formularios, hay que asegurarse y validar todos los datos introducidos por los usuarios.

No, no se trata de un baile que mejora el rendimiento de PHP sino de un proyecto Open Source de Facebook que comenzó hace 2 años debido a que las funcionalidades existentes para optimizar PHP se antojaban insuficientes.

HipHop se trata de una especie de transformador de código fuente que toma el PHP y lo convierte en C++ para ser compilado con g++, para explicarlo de una manera rápida y sencilla podríamos decir que HipHop permite que cualquier desarrollador pueda escribir código PHP pero que el código final se ejecute con el rendimiento que ofrecería el código de un programador experto, el resultado es una mejora de rendimiento del 50%.

Y es que Facebook poco a poco irá siendo a PHP lo mismo que Google es a Python, si lo pensamos es realmente positivo cuando una gran empresa que utiliza una tecnología sobre la que depende su negocio se dedica a mejorar dicha tecnología no sólo para beneficiarse ellos mismo sino para beneficiar a la comunidad de desarrolladores y consumidores de dicha tecnología.

Para entenderlo mejor primero hay que saber como funciona PHP, PHP es un lenguaje de programación interpretado como Ruby, Python y Perl, esto es genial para la productividad de los desarrolladores porque no es necesario compilar el código pero tiene por contra unos requerimentos de memoria y consumos de CPU mayores que un lenguaje compilado como es el caso de C++, por lo tanto HipHop al tranformar el código PHP a código C++ nos permite disfrutar de lo mejor de ambos lenguajes.

¿Cómo ha mejorado HipHop a Facebook?

  • Web — 50% menos de consumo de CPU con el mismo tráfico
  • API — 30% menos de consumo de CPU con el doble de tráfico

La mejora de rendimiento de Facebook ha sido probada de manera progresiva en sus propios servidores y ahora un 90% de los servidores de Facebook utilizan HipHop, la mejora cómo hemos vistos se divide en mejoras relacionadas con al Web y relacionadas con el uso de la API, la clave para la diferencia de mejora entre Web y API radica en que la Web requiere operaciones más complejas que la API.

¿Hay algún tipo de limitación?

Con HipHop no podrás utilizar funciones como eval() y create_function(), la naturaleza dinámica de estas funciones hace imposible su conversión a código C++, sin embargo estas funciones no son de las más populares entre los desarrolladores de PHP.

Actualmente HipHop no puede ser ejecutado en Apache pero se trabaja en ello.

¿Dónde puede encontrarlo?

HipHop será liberado dentro de poco pero por el momento nos tenemos que conformar con la entrada en el blog de Facebook o con esta presentación.

Me gustaría que dejaraís vuestra opinión sobre el tema y si alguien tiene información adicional que la aporte ya que creo que se trata de una excelente noticia y más aún tratándose de PHP que como hemos comentado anteriormente se trata de un lenguaje de programación tremendamente flexible pero muy difícil de escalar cuando hablamos de sitios web de gran tráfico.