Consideraciones antes de usar certificados SSL en SHA-256

Aunque muchas autoridades de certificación anunciaron que dentro de los próximos meses (algunos al inicio del 2015, otros al inicio del 2016) iban a rechazar los certificados en SHA-1, es importante tomar conciencia que no todo está listo para ofrecer un sitio web HTTPS con certificado SSL en SHA-1, y es que Windows XP (el cual fue abandonado por su creadora Microsoft, el 8 de Abril del 2014) no soporta SHA-2 (esto incluye a SHA-256), a menos que esté actualizado con el Service Pack 3.

Y esto, en América Latina (y probablemente en otras partes del mundo) sigue siendo un problema importante, dado que el uso de Windows XP, en Abril 2014, sigue siendo del 17% de todos los sistemas operativos con un navegador de escritorio. De estos, es difícil decir quienes no actualizaron al Service Pack 3, pero conociendo la conectividad a internet promedia, sería curioso que supere los 50%.


Probablemente, entonces, tengamos todavía algo de 8.5% de usuarios con un sistema operativo (independiente del navegador) que no soporte SHA-2.

Por ello, cuidado al momento de generar un nuevo certificado SSL. Piensen a hacer el balance correcto entre seguridad e inclusión.

Clean your Gallery 2 ImageBlockCacheMap table regularly

Supposedly, Gallery 2 has a process to clean this table periodically (through Cron, which you should always configure), but apparently sometimes this doesn’t get to execute correctly.

As a result, the rest of the cleanup will happen but this stable might not get cleaned, leading you to millions of rows of purely useless years-old cache junk.

Fix it manually by issuing a “TRUNCATE [prefix]_ImageBlockCacheMap;” in your database, or install a more recent version of Gallery, or something like that, but make sure you always keep an eye on its size.


Categories: Database, English, OSS Solutions Tags:

Chamilo LMS 1.9 issue embedding videos

Just in case you ever fall on that issue, please note that there is an option to enable as platform admin in Chamilo LMS 1.9 that allows for the use of iframe in the online editor area.

I leave a link to the related task in Spanish in our tracking system, in case you would need it.


Categories: Chamilo, English Tags: , ,

gem install mysql2 on Debian Wheezy with MariaDB 10

Just in case you would be in this situation (and given the fact I couldn’t find online information about it), if you are ever installing the mysql2 gem on a Debian Wheezy system with MariaDB 10 (I would guess a rather rare situation), you might get this error:

# gem install mysql2 -v=0.3.11
Building native extensions. This could take a while...
ERROR: Error installing mysql2:
 ERROR: Failed to build gem native extension.

 /usr/bin/ruby1.9.1 extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:

Gem files will remain installed in /var/lib/gems/1.9.1/gems/mysql2-0.3.11 for inspection.
Results logged to /var/lib/gems/1.9.1/gems/mysql2-0.3.11/ext/mysql2/gem_make.out


If you find yourself in that situation, the solution is apparently to first issue an

apt-get install libmariadbd-dev

And then repeat the gem install mysql2 command. Done.

Accord inter-institutionnel Alliance Française (Lima) et BeezNest

Cette année 2014, la branche péruvienne de BeezNest (nous sommes maintenant présents en Belgique, non officiellement en France, en Espagne, au Pérou et probablement très bientôt dans un nouveau pays d’Amérique Latine) a signé un accord inter-institutionnel avec l’Alliance Française de Lima, qui vise à assurer la formation du personnel de BeezNest à la langue française ainsi que la disponibilité professionnelle d’une plateforme Chamilo pour tous les étudiants de l’Alliance.

Récemment, nous avons pu constater que l’Alliance respectait avec force son engagement, promotionnant publiquement son utilisation de Chamilo.


L'Alliance Française de Lima est fière d'utiliser Chamilo

L’Alliance Française de Lima est fière d’utiliser Chamilo

Eh oui, comme on le note en bas, un des 4 arguments de promotion c’est “Plateforme Chamilo – Apprentissage en ligne”. Ce n’est d’ailleurs pas la seule affiche qui le montre.

Nous sommes généralement ouverts à ce genre de propositions donnant-donnant. N’hésitez pas à nous faire une offre!

Categories: Chamilo, French Tags: , ,

Intercontinental fiber channel cables

Ever wondered where internet (and general telecommunications) cables were laid out in the ocean?
This map, available on Level3 website, could help you out.

Map of fiber cables worldwide

This could help you out understanding, for example, how much delay you can expect between Peru and Brazil (see the missing cable, there?) :-p

Creating new tasks in chamilo course-sessions

In the category of little scripts that can make your life easier when managing huge Chamilo portals, this is a little one that creates one tasks-folder called “ALP” for the “Assignments” (work) tool in each active course for a portal where you have thousands of sessions, with one course per session.

The script works for version 1.9.8 of Chamilo, but might need some adaptations to run on an older version, in particular considering the addDir() function from the main/work/work.lib.php library which was created there recently.

You should put the file into any “one-level” directory under the Chamilo base, so that it can find “../main/inc/”, and then run it on the command line using php5-cli, or load it from a webserver accessing it directly by its path.

The script only affects active sessions (sessions with a start and end dates that are “around” the current date).

The file is downloadable as a .doc file for safety purposes. Download it and rename it to “.php” before you open it, otherwise you’ll get an error: create_tasks

* This script creates tasks directories in each course, at the session level,
* only for sessions active at the time of running the script
* In order for the script to set the right permissions, it has to be launched
* either as www-data or root
* @author Yannick Warnier
require_once '../main/inc/';
require_once '../main/work/work.lib.php';
$date = date('Y-m-d h:i:s');
$workName = 'ALP';
$courseInfos = array();

* Get the sessions list
$sd = 'date_start';
$ed = 'date_end';
$sql = "SELECT id FROM session WHERE $sd '$date'";
$res = Database::query($sql);
if ($res === false) {
die("Error querying sessions: ".Database::error($res)."\n");
* Get the course-session couple
$sessionCourse = array();
while ($row = Database::fetch_assoc($res)) {
$sql2 = "SELECT AS cid, c.code as ccode FROM course c, session_rel_course s WHERE s.id_session = ".$row['id']." AND s.course_code = c.code";
$res2 = Database::query($sql2);
if ($res2 === false) {
die("Error querying courses for session ".$row['id'].": ".Database::error($res2)."\n");
if (Database::num_rows($res2) > 0) {
while ($row2 = Database::fetch_assoc($res2)) {
$sessionCourse[$row['id']] = $row2['cid'];
if (empty($courseInfos[$row2['ccode']])) {
$courseInfos[$row2['cid']] = api_get_course_info($row2['ccode']);
* Now create the tasks using the addDir function
foreach ($sessionCourse as $sid => $cid) {
$sql = "SELECT id, title FROM c_student_publication
WHERE filetype = 'folder'
AND c_id = $cid
AND session_id = $sid";
$res = Database::query($sql);
if ($res === false) {
echo "Error querying table c_student_publication: $sql\n";
echo "The error message was: ".Database::error($res)."\n";
if (Database::num_rows($res) > 0) {
//Task found, skip
$row = Database::fetch_assoc($res);
echo "Task ".$row['title']." already found in course $cid, session $sid\n";
$params = array(
'new_dir' => $workName,
'description' => '',
'qualification' => 0,
'weight' => 0,
'allow_text_assignment' => 0
$res = addDir($params, 1, $courseInfos[$cid], null, $sid);
if ($res === false) {
echo "Could not create task $workName in course $cid, session $sid, for some reason\n";
} else {
echo "Task $workName created in course $cid, session $sid. Task ID is $res\n";
echo "All done!\n";

Categories: Chamilo, English, php, Techie Tags: , ,

Get every new post delivered to your Inbox.

Join 60 other followers

%d bloggers like this: