737

Archivo de la categoría ‘programacion’

HipHop PHP de FaceBook y el revuelo en la red

hip hop php facebookFacebook anunció esta semana que iba a liberar como Open Source un nuevo invento suyo, llamado HipHop PHP, que sirve básicamente para aumentar de forma importante el rendimiento (y por lo tanto rebajar el consumo de recursos) en la ejecución de PHP. Esto lo consigue pasando el código de PHP a C++ y compilándolo. Es algo fantástico, porque el rendimiento puede ser realmente bueno, incluso superando a lenguajes como Java o C#.

La noticia me parece genial por dos motivos. Uno por el invento en sí, que es muy bueno. A muchos se les puede haber ocurrido, de hecho tuve conversaciones con compañeros en el pasado sobre ideas parecidas, pero como todo, sin una buena ejecución, las ideas no valen nada. El otro por hacerlo Open Source, por lo que algunos enfermos podremos probarlo y eventualmente disfrutarlo.

La opinión de Rasmus Lerdof, creador de PHP, ha sido largamente esperada. Y en un ataque de simplicidad (que es lo complicado) lo ha calificado de nifty trick, algo así como truco ingenioso. Esto ha provocado todo tipo de interpretaciones, muchas pensando que minusvaloraba el invento. Nada más lejos de la realidad, era más bien un halago. Como cuando simplificó un tutorial de Ajax, cuando la gente estaba como flipando con el tema en 2005, y lo llamó Ajax en 30 segundos, porque con la suficiente abstracción y simplificación, es lo que se tardaba en aprender.

Donde sí ha metido una puyita, como hace a veces con los frameworks, es diciendo que está muy bien, que evidentemente para Facebook puede valer, pero que las aplicaciones que ve por ahí  tienen problemas mucho más importantes y esto no los soluciona. Para qué engañarnos, es verdad.

Es cierto, como dice Rasmus, que la mayoría de las veces las ineficiencias no están en el lenguaje en sí, sino en las queries y estructura de base de datos, el número de peticiones HTTP, headers de expiración mal puestos, etc…, nada que ver con el lenguaje, ahí no suele estar el cuello de botella.

Sin embargo, él y otros que son auténticos cracks, no tienen que bregar día a día con que Javeros, Tiburones de Microsoft, Fanboys de cualquier lenguaje, echen en cara a PHP que no es tan eficiente en tiempo de ejecución. Esto es difícil de defender incluso ante techies, con lo que frente a gente que no sabe es un auténtico infierno. Te ves a ti mismo contando especie de fábulas para que entiendan los conceptos, es desesperante. Y es cierto que los frameworks son multipropósito y que es mejor estudiar cada proyecto y sería más eficiente (en cuanto a código) programar específicamente para ese proyecto. Esto sería así en un mundo perfecto, pero cuéntale al equipo de mantenimiento del cliente que esto es especial y al cliente mismo que la aplicación le sale por el doble en el doble de tiempo. Aunque sea mejor, no es realista.

Por lo tanto, bievenido HipHop PHP y cualquier herramienta que nos ayude!

Jueves, febrero 4th, 2010

Lenguajes de programación más populares

He intentando encontrar alguna estadística fiable del nivel uso de los lenguajes de programación y la verdad es que los datos son dispares según la fuente. El primer problema es encontrar la forma de medición, que no es trivial. Hay algunas aproximaciones interesantes:

- Número de resultados en los principales buscadores. Es uno de los mejores criterios, pero no necesariamente el más actual, ya que puede haber resultados indexados totalmente obsoletos, pero sirve para hacernos una idea. Para este método destaca la lista TIOBE, que cada mes ofrece sus resultados. Para el mes de Agosto 2009 así va la liga:

Position
Aug 2009
Programming Language Ratings
Aug 2009
1 Java 19.527%
2 C 17.220%
3 C++ 10.501%
4 PHP 9.390%
5 (Visual) Basic 8.486%
6 Python 4.489%
7 C# 4.443%
8 Perl 4.028%
9 JavaScript 2.812%
10 Ruby 2.490%

Es un poco mezclar churras con merinas, ya que estamos comparando lenguajes como PHP o Ruby, prácticamente exclusivos Web, y otros como C++ o Java, que son multipropósito, o Javascript, que no tiene nada que ver con los anteriores. En cualquier caso, parece claro que Java, C/C++ y PHP copan las primeras posiciones.

Desconfío bastante de las mediciones de resultados de C y C++, especialmente del primero. ¿Cómo es posible discernir “C” entre resultados de búsquedas de los buscadores, teniendo cada uno además su propio criterio? Aunque no aparece ene el Top 10, merece la pena mencionar Objective-C, en el puesto 20 con una entrada muy fuerte en la lista TIOBE, impulsado sin duda por Mac OS X y iPhone.

- Por número de Ofertas de Trabajo. Quizá este criterio de una visión práctica, aunque está sujeta a necesidades de crecimiento de los distintos lenguajes y no a su uso actual. La gente de Langpop ha creado un gráfico con el API de Craiglist y este es el resultado:

Como bien se indica en Langpop, pude haber algo de “jet lag” en las cifras, ya que la demanda de uso de un lenguaje se produce bastante después de el lenguaje crezca y se popularice. En cualquier caso, llama la atención que PHP sobrepasa a Java de forma significativa, justo al contrario que en el caso de la lista TIOBE. Echando un vistazo rápido a la lista de oferta de trabajos en España, no sucede esto, y la verdad es que en otros buscadores de empleo de EE.UU. tampoco ocurre. Java gana por mucho a PHP normalmente. Curioso que esto sólo suceda en Craiglist.

- Por número de libros editados/vendidos. Quizá sea la peor medición, ya que hay muchas publicaciones gratuitas, tutoriales y otras formas de conseguir información. Uno de los mejores sitios para ver este tipo de estadísticas en en O’Reilly Radar, donde hacen periódicamente un seguimiento del estado del mercado de libros informáticos. Este es el estado en la mitad de 2009 :

languages-books1

Según esto, C# es el líder indiscutible, posiblemente por la menor cultura en el entorno del software de Microsoft para compartir y colaborar online. Los desarrolladores tienen que recurrir a los libros técnicos. Además se ve un descenso en la venta de libros de Java, que pierden terreno con respecto a PHP. Como sucedía en la lista TIOBE, Objective-C demuestra estar de actualidad con un importante tirón.

En un intento de sacar conclusiones, basadas en estadística-ficción, se podría interpretar:

  1. Java: Parece el líder indiscutible actualmente, aunque está perdiendo algo de tirón, reflejado en la lista TIOBE y en la venta de libros.
  2. C/C++: Es dificil de medir y los resultados de las mediciones, salvo en la venta de libros, son dudosos. En cualquier caso, históricamente, posiblemente haya sido el lenguaje de programación más importante.
  3. PHP: Sigue una tendencia alcista, reflejada en la lista TIOBE y por ventas de libros. El lenguaje goza de buena salud y una comunidad muy activa que lo continua evolucionando.
  4. C#: Con una mediciones un tanto variables según el criterio. Todo indica en cualquier caso que está a la zaga de los grandes: Java, C/C++ y PHP.
  5. Visual Basic: Al igual que el anterior, mediciones un tanto erráticas según criterio, pero parece ocupar la quinta posición.

Merece la pena mencionar:

  • Python: Muy estable como tercera alternativa en programación web, por detrás de Java y PHP.
  • Ruby: Bajada importante en la lista TIOBE y en la lista de libros. Sorprende que el lenguaje haga tanto ruido y esté alderedor de la posición 10… y bajando!
  • Objective-C: Con una entrada impresionante en la lista de lenguajes más utilizados actualmente.

Lunes, agosto 10th, 2009

Nos pasamos a Git como repositorio de código

Después de pasar media vida con CVS y la otra media con Subversion, hemos dado el paso en Acilia y vamos a utilizar Git como repositorio de código. La verdad es que las referencias eran muy buenas y, aunque el tener que aprender un nuevo sistema siempre es un poco duro, creemos que merece la pena.

El significado de Git en inglés es algo así como persona estúpida y desagradable y fue diseñado inicialmente por Linus Torvalds, que dejó algunas perlas para la historia, como viene siendo habitual en el personaje:

“I’m an egotistical bastard, and I name all my projects after myself. First Linux, now git.” – Linus Torvalds

For the first 10 years of kernel maintenance, we literally used tarballs and patches, which is a much superior source code management system than CVS is” – Linus Torvalds

When I say I hate CVS with passion, I have to also say that if there any SVN users in the audience, you might want to leave. Because my hatredof CVS has meant that I see Subversion as being the most pointless project ever started, because the whole slogan for the Subversion for a while was ’CVS done right’ or something like that. And if you start with that kind of slogan, there is nowhere you can go. It’s like, there is no way to do CVS right. – Linus Torvalds

Lo mejor de Git es que es un repositorio distribuido. O más que distribuido, es deslocalizado. Esto quiere decir que localmente tienes un repositorio de Git totalmente funcional, de hecho los commits se hacen contra tu repositorio local. Luego juntas tu código con otros repositorios (o normalmente un repositorio que todo el mundo usa de referencia).

Además del vídeo donde el amigo Linus hace la presentación, dejo algunos enlaces de referencia. (Gracias Raúl por ellos y animarnos a dar el paso!)

Referencias:

- Git fetch and pull video tutorial

- Tutorial de Git del Gsyc

- Git Cheat Sheet

Lunes, julio 20th, 2009

Backups por FTP con Bash Shell

Para evitar disgustos como le sucedió a ma.gnolia.com (que perdió todos los datos de sus servidores y no pudo recuperarlos), es buena idea tener un sistema de backups al día que te permita recuperarte de cualquier catástrofe. Como decía aquel doctor en la tele, es mejor prevenir que lamentar. Dejo por aquí un pequeño script que puede ayudar a la tarea. Realmente simple pero efectivo.

Los archivos: back_daily.ftp , back_monthly.ftp

Algunos comentarios de las partes que tienen (comentaré el daily):

  1. Tomamos la variable DAY con la fecha del sistema
  2. DAY=`date +%d`
    echo Backup for Day: $DAY

  3. Volcado de todas las bases de datos del sistema
  4. mysqldump -uUSER -pPASSWORD –all-databases > mysql_backups/mysql-latest.sql

  5. Zip con archivos y base de datos
  6. zip -r file_backups/files_back_$DAY.zip public_html/*
    zip -r file_backups/files_back_$DAY.zip hostx/*
    zip -r file_backups/files_back_$DAY.zip hosty/*
    zip -r file_backups/files_back_$DAY.zip hostz/*
    zip -r file_backups/mysql_back_$DAY.zip mysql_backups/mysql-latest.sql

  7. Subimos todo por FTP
  8. ftp -n HOST-DEL-SERVIDOR.com <
    user USERNAME PASSWORD
    binary
    cd target_directory
    lcd file_backups
    put files_back_$DAY.zip
    put mysql_back_$DAY.zip
    quit
    EOF

  9. Creamos un cronjob que ejecute el script (en este caso dos, uno diario y otro menusal) redirigiendo la salida a un log.
  10. 05 03 * * * /home/acilia/file_backups/back_daily.ftp >> /home/acilia/file_backups/log/back_daily.ftp.log
    05 03 01 * * /home/acilia/file_backups/back_monthly.ftp >> /home/acilia/file_backups/log/back_monthly.ftp.log

Y con esto sería suficiente para tener un respaldo contra catástrofes. Mediante este sistema, guardaríamos las copias diarias durante 1 mes y las copias mensuales durante 12 meses, aunque siempre sería modificable para que no se sobre-escriban los ficheros. En caso de utilizar estos mismos scripts, habría que tener cuidado con los directorios. En este caso se asume que existen (y tienen permiso de escritura) los directorios mysql_backups y file_backups en la raíz del usuario que ejecutará los scripts.

El script es básico y muy mejorable, no estaría de más echarle un ojo al bash y darle algún retoque… cuando tenga un rato ;-)

Miércoles, julio 15th, 2009

Hug a Developer

Este vídeo es un gran resumen de errores muy comunes en desarrollo de software. Esta “ciencia” es tan exacta como desconocida por la mayoría. A nadie le cuesta hacerse una idea lo que implica un proyecto que se pueda ver y tocar como , por ejemplo, un edificio y todo el mundo entiende que tiene que haber un plan de proyecto, unos planos sobre los que basarse, profesionales que se dediquen a ello, se entiende la magnitud del proyecto porque es algo que se puede ver y se entiende que hay factores que pueden retrasar este tipo de proyectos así como incrementar su coste.

En desarrollo de software esto, aunque en esencia es lo mismo, no se entiende. Además, los desarrolladores suelen ser los últimos en una cadena que raramente está bien definida. No es frecuente encontrar gente fuera del propio desarrollo que entienda esto. Realmente el desconocimiento y la barrera de entrada que supone aprenderlo, está en el origen de todo.

Viernes, mayo 15th, 2009

El Admin Generator de Symfony

symfonyUna de las mejores características de Symfony es el Admin Generator. Con esta funcionalidad puedes gernerar un backoffice completo, con bastantes helpers, definiendo qué se puede editar y qué no y la navegación para poder hacerlo, de forma realmente sencilla.

Hay un vídeo explicando los pasos desde cero (tan desde cero que se construye el modelo de datos en el mismo tutorial). Tarda como unos 15 minutos en hacer administradores mucho mejores que algunos que he visto con mucho tiempo de desarrollo. Es una abstracción realmente interesante.

Además, aunque no se explique en el vídeo, se puede generar para modelos ya existentes con un poco de ingeniería inversa .

Lo mejor es verlo.

Miércoles, abril 15th, 2009

Borrar todas las tablas de una base de datos

Cuando llega el momento de borrar todas las tablas de una base de datos de MySQL desde el command line no queda más remedio que ir borrando tabla por tabla.

Pero me he encontrado por ahí una ingeniosa instrucción para hacerlo, una sóla línea de código en el command line:
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
Los créditos del útil descubrimiento para Thingymajing.

Domingo, febrero 8th, 2009

Contar descargas de un archivo

Una consulta me ha hecho desempolvar un viejo script que tenía por ahí para contar los clicks que se hacían para ir a una url. Esto es igualmente válido para hacer tracking de downloads o descargas.

Supongamos en el script es invocado de la forna:

http://url_dominio/download.php?file=xxxxx.pdf

El script, que estaba escrito en php3, es a grandes rasgos así:

<?php

//RECUPERAMOS PARAMETRO

$url=$_GET[file]

// CONEXION BBDD
mysql_connect (“localhost”, “xxxxlogin”, “xxxpasss”);
mysql_select_db (“xxxxxxx”);

// INSERTAR O HACER UN UPDATE EN BBDD CON LA DESCARGA. TAMBIEN PODRIA IR A UN FICHERO LOG

mysql_query(“INSERT INTO log_table VALUES (XXXXXXXXXXX)”);

//CONSTRUIR URL FINAL

$url=”http://url_dominio”.$url;

//REDIRIGIR AL ARCHIVO CON DESCARGA

header(“Location: $url”);

?>

Importante no sacar nada, ni un error, ni un print, ni un echo, nada, antes de la directiva header(). Si sale algo, la redirección no se ejecutará.

Otra opción a la que podemos optar ahora es a utilizar una herramienta externa, como Google Analytics. De esta forma que no tenemos que hacer una tabla en la base de datos, construir el script y procesar los datos almacenados posteriormente. Hay un tutorial de Analytics que lo explica bastante bien.

Sábado, febrero 7th, 2009

Las bonanzas de PHP

En este sector de la informática, en todos sus géneros, también hay religiones. Está la religión de Linux, que no aguanta a los de la religión de Windows, si bien transigen con los de la religión Mac. En lenguajes de programación hay gran extremismo también. Los fervientes de Java no paran de sacar defectos a su aparentemente rival la Diócesis PHP y se ríen abiertamente de los del Monasterio de Ruby.

Si eres de los que luchan en el bando PHP, puedes leerte el último documento de php.ie en su defensa.

Hablando un poco más en serio, la gente de php.ie ha publicado un White Paper llamado PHP for Enterprise/Business Whitepaper donde se alaban las bonanzas de PHP, si bien hay pocas comparaciones objetivas con otros lenguajes como Java (su principal rival) o .Net. Se ve que detrás hay cierta carga emocional y poco objetiva que le resta algo de valor al documento, pero no razón.

He visto últimamente muchas críticas a PHP, que he de reconocer es mi lenguaje web preferido, muchas de ellas injustas, como que no es un lenguaje orientado a objetos (lo es totalmente), no se puede aplicar patrones MVC (hay muchísimos frameworks PHP) o que no es escalable (no escala igual que Java, pero escala).

La principal ventaja que le veo es flexibilidad, una gran comunidad de desarrolladores y gran disponibilidad de librerías y código Open Source. Por mi experiencia en ambos lenguajes, normalmente PHP gana en rapidez de desarrollo y Java en robustez. Según las circunstancias, una opción puede ser mejor que otra, pero por si acaso, lo mejor es conocer varias opciones (no sólo estas) y saber qué elegir en cada momento. La Fe te puede jugar una mala pasada.

Lunes, enero 12th, 2009

Ordenando Arrays

desordenHace no mucho nos encontramos con la tarea de ordenar una lista de clasificación de Quiniela15 con ciertos criteros. En principio parece una tarea simple, hay muchos algoritmos que lo hacen y elegimos el más sencillo, el llamado “Burbuja” o “Bubble Sort”, que toma elemento por elemento y calcula si debe o no cambiarlo de posición, casi lo que harías si tuvieses que hacerlo manualmente. Es la forma más lógica y simple, pero nos salían n² operaciones para determinar el orden del array, siendo n el número de elementos y, en una clasificación de 1600 usuarios, las operaciones se elevaban a 2,560.000, así a lo tonto… y muchas de esas operaciones llevaban asociada una consulta a base de datos para recuperar valores. No es que el sistema no pudiese con ello, pero está claro que es uno de esos momentos en los que merece la pena dedicarle tiempo a optimizar.

Entre algunos de los algoritmos conocidos más populares, finalmente ha funcionado bien el llamado “Quick Sort”, acabando el proceso en pocos segundos. Además está esta página donde está implementado para múltiples lenguajes de programación (PHP, Ruby, C, Python, Visual Basic… y muchos otros de los que ni siquiera conocía su existencia).  Si alguna vez te has encontrado este problema, la solución no puede ser más sencilla.

Domingo, diciembre 21st, 2008

Inicio Blog

programacion

123»