Archive

Archive for December, 2012

Detect syntax errors in multiple PHP files with xargs

December 26, 2012 Leave a comment

With the Command Line Interpreter for PHP (most of the time called php-cli or php5-cli), you can check if one single file contains syntax errors by simply calling

php5 -l file.php

The problem with that is, if you have many files to check, on the command line you might easily spend your time typing filenames. Luckily, the xargs command is meant to treat multiple files at ones and launch a simple command on all these files.

So the magical formula, if you have many files ending with .inc.php in your current directory, would be:

find . -name "*.inc.php" -type f -print0 | xargs -0 -I {} php5 -l {}

The find command at the beginning (ending with “-print0” where the last letter is a zero, not an ooh), just lists the files in one single line, separated by spaces.

The xargs command then takes this list, and for every file (removing problems of white-spaces in filenames with -0 and using -I to define the list marker in the following command), executes the php5 -l command on the list marker.

Man, I love it when a plan comes together…

Funcionamiento de sesiones en Chamilo LMS 1.10

December 17, 2012 Leave a comment

“Sesiones” es un término ambiguo, el problema siendo encontrarles un nombre adecuado para todos los usos. Algunos otros nombres son:

  • Programas
  • Programas académicos
  • Periodos (aunque esta denominación es algo equivocada – existe otra noción que conviene más, que es la categoría de sesiones)
  • Ciclo (de aprendizaje)
  • Sección

En realidad, las sesiones representan un periodo (generalmente limitado) de tiempo durante el cual un grupo de alumnos sigue uno o más cursos con el acompañamiento de un profesor designado para este curso durante este periodo. Por ello, en muchas ocasiones usamos en el pasado la representación siguiente

Sesiones

Sesiones

A la izquierda del diagrama, reconocemos el tríangulo clásico Profesor – Curso – Alumnos, y al centro del diágrama vemos que el mismo curso se encuentra con otro curso al mismo nivel, y con un responsable distinto del profesor quien elaboró el curso inicialmente.

En las versiones de Chamilo anteriores a la 1.10, disponíamos de 4 fechas para cada sesión:

  • Inicio de acceso para los docentes
  • Inicio de acceso para los alumnos
  • Fin de acceso para los alumnos
  • Fin de acceso para los docentes

La lógica de la diferencia de fin de acceso entre docentes y alumnos, es que el docente pueda preparar su curso (previamente a la apertura a los alumnos) y recuperar datos importantes (después delcierre para los alumnos), y que la sesión pueda “vencerse” y disaparecer del listado del docente, para que este pueda concentrarse sobre las sesiones más recientes.

En Chamilo LMS 1.10, agregamos dos fechas más, que son únicamente informativas. Así, tenemos las 6 fechas siguientes:

Fechas de sesiones

Fechas de sesiones

  • Inicio de acceso para los docentes
  • Inicio de acceso para los alumnos
  • Inicio oficial del ciclo/programa/sesión
  • Fin oficial del ciclo/programa/sesión
  • Fin de acceso para los alumnos
  • Fin de acceso para los docentes

En la imagen lateral, podemos ver, por ejemplo, la selección de las fechas siguientes:

  • Inicio de acceso para los docentes: 2012-11-01 (un mes antes)
  • Inicio de acceso para los alumnos: 2012-11-26 (unos días antes)
  • Inicio oficial del ciclo/programa/sesión: 2012-12-01 (el día de lanzamiento, como visto en la lista de cursos)
  • Fin oficial del ciclo/programa/sesión: 2012-12-31 (el día de cierre, como visto en la lista de cursos)
  • Fin de acceso para los alumnos: 2013-01-04 (unos días después)
  • Fin de acceso para los docentes: 2013-01-31 (un mes después)

Como si esto no fuera suficiente a nivel de flexibilidad, también es posible cambiar el comportamiento de las sesiones cuando pasó la fecha de cierre (para alumnos o para docentes).

Los tipos de acceso son:

  • Acceso completo
  • Acceso en lectura sola
  • Sin acceso

El caso “Acceso completo” sirve para *ignorar* las fechas definidas. Por ejemplo, por un tiempo limitado, se reabre la sesión para el acceso de todos.

El caso “Acceso en lectura sola” permite acceder pasada la fecha de cierre. En este caso, la sesión aparece en la página “historial de cursos” y el acceso para consultas es posible pero no se puede participar más en ninguna herramienta de participación (foro, ejercicios, wiki, etc).

El caso “Sin acceso” cierra por completo el acceso a la sesión a partir de la fecha de cierre para el rol correspondiente. Por ejemplo, si soy alumno y estoy inscrito en la sesión que tiene como fecha de fin de acceso para alumnos el 04/01/2013, al pasar al 05/01/2013, disaparece esta sesión de mi lista. Tampoco se puede ver en mi historial de curso. El docente, no obstante, seguirá viéndola en su lista de cursos hasta el 31/01/2013.

Screenshots of your website in many browsers

December 16, 2012 Leave a comment

If you need to know what your website looks like in a browser that you don’t have available (for ethical, financial or other reasons), you can test you website (if public) using http://browsershots.org/

It’s a nice service (although a bit limited) for free, and you can get extensions for a reasonnable  fee.

 

Porque cobramos por media hora?

December 11, 2012 2 comments

Para las empresas que recién se lanzan en temas de sopoprte en el mundo del software, y para nuestros clientes que quizás se preguntan porqué cobramos un mínimo de media hora por intervención, me gustaría explicar un poco mejor lo que hacemos.

Nuestro negocio, básicamente, es desarrollar sistemas de información (en particular Chamilo, Drupal y Dolibarr) y dar soporte sobre ellos (esto incluye también cuidar los servidores que los alojan). Toda esta actividad radica en los servicios “humanos” de personas altamente calificadas para brindar estos servicios a quien los necesiten.

Para definirlo de forma simplística, alquilamos actividad cerebral, es decir que damos acceso a nuestros clientes a mentes brillantes para que resuelvan problemas para ellos, y les permitimos alquilar estas mentes brillantes solo cuando las necesiten.

Por lo tanto, también estamos tomando una gran cantidad de riesgo al poner estas mentes brillantes a su disposición (si nadie las quiere por un tiempo, tenemos que seguir asgurando sus ingresos).

También pueden haber cantidades de discusiones sobre la manera en la cual un cierto problema es considerado resuelto o no, pues los problemas de software muchas veces se indican de forma interpretada, dando las impresiones personales de cada uno porque cada uno tiene circonstancias particulares y vive sus problemas de maneras distintas. Mucho de este trabajo no puede ser contabilizado sin generar frustraciones. Por lo tanto, el trabajo de nuestros responsables de soporte, responsables del diálogo con los clientes y de ser más explícitos para facilitar este diálogo, está contabilizado como parte del tiempo de resolución del problema.

Analizando el tiempo necesario para un ingeniero para resolver un problema, aparecen de forma más clara las razones por las cuales se considera un tiempo mínimo de atención. Estos son tiempos mínimos aproximados basados en la realidad de la mayoría de los casos que atendemos. Se considera (en este caso) que la ficha del cliente, indicando los accesos comunes al sistema del cliente ya fueron registrados:

  • 60s: Lectura del correo/mensaje del cliente
  • 240s: Registro de la incidencia (incluye: clasificación, designación de título claro que permitirá luego apoyarse en esta incidencia para cortar el tiempo de tratamiento de otras, indicación copiado-pegado del detalle del reporte por el cliente, asignación de las personas que deben estar al tanto de esta incidencia, asignación de un tiempo aproximado de resolución, asignación de un momento aproximado de entrega, definición de dependencias con otras incidencias, etc)
  • 60s: Conexión al sistema del cliente (o a una copia local) y reproducción del problema
  • 60s: Creación de nuevo contexto de prueba que permita reproducir la incidencia en un sistema que no afecte al cliente (para el tiempo de trabajo en este)
  • 300s: Investigación y, quizás, resolución del problema (se trata de un tiempo mínimo, en caso de poder aprovechar a su máximo la experiencia de nuestros ingenieros, pero no son raros los casos en los cuales esta resolución pueda tomar más de 2h)
  • 120s: Verificar, una última vez, que la corrección resolvió el problema
  • 60s: Registrar el cambio en nuestros repositorios de historial para cada cliente – esto implica también vincularlo con el código de la incidencia y darle un comentario adecuado
  • 180s: Reportar al cliente (y en la incidencia) sobre la resolución (o no) de la incidencia
  • 120s: Terminar, reportar su tiempo consumido, tomar 1 minuto de relajación para pasar a otra tarea

En total, el tratamiento de una sola incidencia representa un trabajo mínimo de 20 minutos, y en promedio (con la resolución de temas más complejos) más de media hora.

Por esta razón, nos es imposible asegurar, en buenas condiciones de seriedad y concentración, asegurar un tiempo de intervención menor a 20 minutos.

Tunel SSH revertido

December 11, 2012 Leave a comment

Si tienes la suerte de tener un servidor al cual te puedes conectar en SSH, y tienes que conectarte (en terminal, en SSH) a la compu de un amigo que está atrás de un router, este tutorial es para ti!

Un tunel SSH es un especie de “canal” virtual dentro del cual los datos pueden pasar de una compu a otra. Como SSH es un protocolo seguro, se asume que estos datos, pasando ahí, son tan seguros que SSH mismo.

Cuando una compu está a trás de un router, el problema es que uno puede acceder al router pero no a la compu misma. Se puede arreglar configurando un firewall con redirección de puertos en el router, pero ya es algo avanzado, y si no tienes la mano sobre el router y tu amigo no sabe como configurarlo… estás frito.

La solución entonces es:

  1. que el amigo se conecte a tu servidor en SSH (le puedes habilitar una cuenta o dar tu cuenta con otra contraseña)
  2. que te conectes también al mismo sevidor
  3. en el servidor mismo, que te conectes al puerto en el cual tu amigo se conectó

Por ejemplo…

Tu amigo:

ssh -R 54321:localhost:22 usuariocompartido@138.47.99.99

Tu:

ssh usuariocompartido@138.47.99.99
ssh localhost -p 54321

Y ya está! Estas en el servidor de tu amigo, conectado en SSH!

Categories: documentación, Spanish, técnico Tags: ,

Xhprof + PHP5.4 + Ubuntu + Chamilo 1.10dev

December 9, 2012 Leave a comment

(Read the update below before starting to copy-paste)

To install Xhprof on PHP5.4 on Ubuntu (assuming you’ve already got PHP5.4 from Andrej or somewhere safe) in order to measure the load of Chamilo 1.10 dev (you need to have a mercurial clone, otherwise the “tests” directory will not exist), follow this procedure (all lines prefixed with # are comments):

cd /tmp
sudo apt-get install php5-dev php-pear
pecl bundle xhprof
cd xhprof

# Here you will have to apply the patch mentioned here: https://bugs.php.net/bug.php?id=61674 to your extension/xhprof.c file (otherwise it won’t compile with PHP 5.4).

phpize
./configure
make
sudo make install

UPDATE 10/2014: On Ubuntu 14.04, you can now install Xhprof with just:

sudo apt-get install php5-xhprof

Then edit the config file

 sudo vim /etc/php5/apache2/conf.d/20-xhprof.ini

xhprof-make

# Add the following:

extension=xhprof.so
xhprof.output_dir=/tmp

# Save

# In your VirtualHost definition (or simply in your /etc/php5/apache2/php.ini), declare the auto_prepend_file and auto_append_file config vars:

 php_value auto_prepend_file /var/www/chamilo/tests/xhprof/header.php
 php_value auto_append_file /var/www/chamilo/tests/xhprof/footer.php

xhprof-vhost

# Now restart Apache:

sudo /etc/init.d/apache2 restart

Load your Chamilo page. You should now see a little “Profiler output” link in the bottom left corner of the page. That’s it, you can now use Xhprof.

xhprof-link
xprof-report

There are a few nice hidden features in xhprof, like the possibility to *compare* two page loads. Search the web for more info (e.g. Viewing a Diff Report).

xhprof-callgraph

Notes @2014-03-20:

  • Following recent tests, it appears like you have to go into the “/tmp/xhprof/extension” directory before launching “phpize” as indicated above
  • If you installed PHP5.5 on a recent version of Ubuntu, you will find that most of the above is unnecessary, and that you can simply launch a “sudo apt-get install php5-xhprof” and then create your 20-xhprof.ini file, and you’ll have xhprof running
  • You might need to update the path in chamilo/tests/xhprof/footer.php, as it is currently hardcoded to “my.chamilo.net”. Make sure you give it the address that you are really using
%d bloggers like this: