<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Blah Blah]]></title><description><![CDATA[Pensamientos, historias, notas e ideas.]]></description><link>https://blahblah.mx/</link><image><url>https://blahblah.mx/favicon.png</url><title>Blah Blah</title><link>https://blahblah.mx/</link></image><generator>Ghost 5.12</generator><lastBuildDate>Sun, 19 Apr 2026 08:11:05 GMT</lastBuildDate><atom:link href="https://blahblah.mx/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Redis - appendonly.aof corrupto]]></title><description><![CDATA[<p></p><!--kg-card-begin: markdown--><p>Despu&#xE9;s de un apagado forzoso, Redis no pudo iniciarse correctamente. Los registros (logs) muestran el siguiente error:</p>
<pre><code class="language-bash">{&quot;log&quot;:&quot;1:M 10 May 2025 07:25:48.404 * DB loaded from base file appendonly.aof.782.base.rdb: 3.577 seconds\n&quot;,&quot;stream&quot;</code></pre>]]></description><link>https://blahblah.mx/redis-appendonly-aof-corrupto/</link><guid isPermaLink="false">681fb2eba961434a473ac7a2</guid><category><![CDATA[redis]]></category><category><![CDATA[tutor]]></category><category><![CDATA[docker]]></category><category><![CDATA[linux]]></category><category><![CDATA[bash]]></category><category><![CDATA[OpenEdx]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Sat, 10 May 2025 20:20:01 GMT</pubDate><media:content url="https://blahblah.mx/content/images/2025/05/assets_task_01jtxxhmnje1h848jj98vacydq_1746908346_img_3.webp" medium="image"/><content:encoded><![CDATA[<img src="https://blahblah.mx/content/images/2025/05/assets_task_01jtxxhmnje1h848jj98vacydq_1746908346_img_3.webp" alt="Redis - appendonly.aof corrupto"><p></p><!--kg-card-begin: markdown--><p>Despu&#xE9;s de un apagado forzoso, Redis no pudo iniciarse correctamente. Los registros (logs) muestran el siguiente error:</p>
<pre><code class="language-bash">{&quot;log&quot;:&quot;1:M 10 May 2025 07:25:48.404 * DB loaded from base file appendonly.aof.782.base.rdb: 3.577 seconds\n&quot;,&quot;stream&quot;:&quot;stdout&quot;,&quot;time&quot;:&quot;2025-05-10T07:25:48.404514303Z&quot;}
{&quot;log&quot;:&quot;1:M 10 May 2025 07:25:49.182 # Bad file format reading the append only file appendonly.aof.782.incr.aof: make a backup of your AOF file, then use ./redis-check-aof --fix \u003cfilename.manifest\u003e\n&quot;,&quot;stream&quot;:&quot;stdout&quot;,&quot;time&quot;:&quot;2025-05-10T07:25:49.182706082Z&quot;}
</code></pre>
<p>Este error indica que el archivo <em>appendonly.aof</em> est&#xE1; corrupto. Para corregirlo, es necesario usar el comando <code>docker</code>, ya que el contenedor no inicia y, por lo tanto, no es posible acceder con <code>tutor local exec redis bash</code>.</p>
<blockquote>
<p>Atenci&#xF3;n<br>
Se recomienda realizar una copia de seguridad del archivo AOF antes de ejecutar el comando de reparaci&#xF3;n.</p>
</blockquote>
<h3 id="pasos-para-corregir-el-problema">Pasos para corregir el problema:</h3>
<ol>
<li>Accede al directorio donde se encuentran los datos de Redis:</li>
</ol>
<pre><code class="language-bash">cd .local/share/tutor/data/redis
</code></pre>
<ol start="2">
<li>Inicia un contenedor de Redis montando el directorio actual:</li>
</ol>
<pre><code class="language-bash">docker run --rm -it -v ./:/data redis   sh
</code></pre>
<blockquote>
<p>Nota<br>
Tambi&#xE9;n puedes usar <code>bash</code> si la imagen de Redis lo permite.</p>
</blockquote>
<ol start="3">
<li>Dentro del contenedor, ejecuta el siguiente comando para intentar reparar el archivo AOF:</li>
</ol>
<pre><code class="language-bash">redis-check-aof --fix /path/archivo.manifest
</code></pre>
<p>Este comando te preguntar&#xE1; si deseas truncar el archivo para corregirlo. Acepta y espera a que finalice el proceso.</p>
<ol start="4">
<li>
<p>Una vez finalizada la reparaci&#xF3;n, puedes salir del contenedor.</p>
</li>
<li>
<p>Finalmente, inicia Redis nuevamente:</p>
</li>
</ol>
<pre><code>tutor local start -d redis
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Bloqueo de ssh por pais]]></title><description><![CDATA[<p>Cada vez es mas comun que los servidores sean suceptibles a ataques via ssh, generalmente se usan herramientas como fail2ban la cual permite el bloquear IPs por tiempo determinado, pero aun asi se siguen recibiendo ataques. Pero si queremos detener por completo los ataques es mejor aplicar un filtro por</p>]]></description><link>https://blahblah.mx/bloqueo-de-ssh-por-pais/</link><guid isPermaLink="false">63237c7467c6ff03bcb9bfbf</guid><category><![CDATA[bash]]></category><category><![CDATA[linux]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Thu, 15 Sep 2022 19:29:12 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDV8fHNlY3VyaXR5fGVufDB8fHx8MTY2MzI3MDEwNw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDV8fHNlY3VyaXR5fGVufDB8fHx8MTY2MzI3MDEwNw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Bloqueo de ssh por pais"><p>Cada vez es mas comun que los servidores sean suceptibles a ataques via ssh, generalmente se usan herramientas como fail2ban la cual permite el bloquear IPs por tiempo determinado, pero aun asi se siguen recibiendo ataques. Pero si queremos detener por completo los ataques es mejor aplicar un filtro por geolocalizaci&#xF3;n.</p><p>En este caso vamos a usar la base de datos de GeoIP para bloquear los acceso que no sean provenientes los paises en la lista permitida.</p><h3 id="instalaci%C3%B3n-de-geoip">Instalaci&#xF3;n de GeoIP</h3><p>Para esto vamos a instalar el paquete de GeoIP y su base de datos.</p><pre><code class="language-bash">sudo apt-get install geoip-bin geoip-database 
</code></pre><h3 id="creaci%C3%B3n-de-script">Creaci&#xF3;n de Script</h3><p>Creamos el script <code>/usr/local/bin/ipfilter.sh</code> con nuestro editor favorito y agregamos el siguiente codigo</p><pre><code class="language-bash">#!/bin/bash
# License: WTFPL

# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES=&quot;MX&quot;
LOGDENY_FACILITY=&quot;authpriv.notice&quot;

if [ $# -ne 1 ]; then
  echo &quot;Usage:  `basename $0` &quot; 1&gt;&amp;2
  exit 0 # return true in case of config issue
fi

if [[ &quot;`echo $1 | grep &apos;:&apos;`&quot; != &quot;&quot; ]] ; then
  COUNTRY=`/usr/bin/geoiplookup6 &quot;$1&quot; | awk -F &quot;: &quot; &apos;{ print $2 }&apos; | awk -F &quot;,&quot; &apos;{ print $1 }&apos; | head -n 1`
else
  COUNTRY=`/usr/bin/geoiplookup &quot;$1&quot; | awk -F &quot;: &quot; &apos;{ print $2 }&apos; | awk -F &quot;,&quot; &apos;{ print $1 }&apos; | head -n 1`
fi
[[ $COUNTRY = &quot;IP Address not found&quot; || $ALLOW_COUNTRIES =~ $COUNTRY ]] &amp;&amp; RESPONSE=&quot;ALLOW&quot; || RESPONSE=&quot;DENY&quot;

if [[ &quot;$RESPONSE&quot; == &quot;ALLOW&quot; ]] ; then
  logger -p $LOGDENY_FACILITY &quot;$RESPONSE sshd connection from $1 ($COUNTRY)&quot;
  exit 0
else
  logger -p $LOGDENY_FACILITY &quot;$RESPONSE sshd connection from $1 ($COUNTRY)&quot;
  exit 1
fi
</code></pre><p><a href="https://gist.github.com/jokey2k/a74f56955124880749e7">Script de hecho por jokey2k</a></p><p>Para definir que paises son permitidos para el acceso ssh, basta con cambiar la variable <code>ALLOW_COUNTRIES</code>, para mas informaci&#xF3;n checar el comentario del script.</p><p>Damos permisos de ejecuci&#xF3;n al script</p><pre><code class="language-bash">chmod +x /usr/local/bin/ipfilter.sh 
</code></pre><h3 id="restringir-conexiones">Restringir conexiones</h3><p>Editamos el archivo <code>/etc/hosts.deny</code> y agregamos la restricci&#xF3;n</p><pre><code class="language-bash">sshd: ALL
vsftpd: ALL
</code></pre><p>Ahora agregamos la regla de permitir acceso al archivo <code>/etc/hosts.allow</code></p><pre><code class="language-bash">sshd: ALL: aclexec /usr/local/bin/ipfilter.sh %a
vsftp: ALL: aclexec /usr/local/bin/ipfilter.sh %a</code></pre><h3 id="prueba">Prueba</h3><p>Ahora toca probar que se haya aplicado correctamente las restricciones, para eso podemos checar el log de autentificacion con un <em>tail -f</em> al archivo de log y debemos ver algo como:</p><pre><code class="language-bash">Sep 15 14:19:05 own root: DENY sshd connection from 139.155.40.215 (CN)
Sep 15 14:19:12 own sshd[45414]: Received disconnect from 139.155.40.215 port 47786:11: Bye Bye [preauth]
Sep 15 14:19:12 own sshd[45414]: Disconnected from authenticating user root 139.155.40.215 port 47786 [preauth]
Sep 15 14:19:52 own root: DENY sshd connection from 183.107.195.8 (KR)
Sep 15 14:19:52 own sshd[45427]: Unable to negotiate with 183.107.195.8 port 40753: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]
Sep 15 14:19:58 own root: DENY sshd connection from 198.235.24.59 (CA)
Sep 15 14:20:05 own root: DENY sshd connection from 139.155.40.215 (CN)
Sep 15 14:20:09 own sshd[45440]: Connection reset by 198.235.24.59 port 42739 [preauth]
Sep 15 14:20:10 own sshd[45453]: Received disconnect from 139.155.40.215 port 52726:11: Bye Bye [preauth]
Sep 15 14:20:10 own sshd[45453]: Disconnected from authenticating user root 139.155.40.215 port 52726 [preauth]
Sep 15 14:21:04 own root: DENY sshd connection from 139.155.40.215 (CN)
Sep 15 14:21:09 own sshd[45469]: Received disconnect from 139.155.40.215 port 57662:11: Bye Bye [preauth]
Sep 15 14:21:09 own sshd[45469]: Disconnected from authenticating user root 139.155.40.215 port 57662 [preauth]
</code></pre><p>Donde se puede observar como la politica niega la conexi&#xF3;n a las ip y el pa&#xED;s de donde son.</p>]]></content:encoded></item><item><title><![CDATA[Foros - cambiar el numero de workers en Tutor]]></title><description><![CDATA[<p></p><h2 id="cambiar-el-numero-de-workers-en-los-foros-en-tutor">Cambiar el numero de workers en los foros en Tutor</h2><p></p><ul><li>Instalar los foros normalmente</li><li>Editar el archivo ubicado en el directorio de trabajo de tutor como por ejemplo: <code>tutor/env/plugins/forum/build/forum</code></li><li>Editar el archivo <code>Dockerfile</code></li><li>Agregar el siguiente comando <code>RUN sed -i &apos;s/4)/6)/g&</code></li></ul>]]></description><link>https://blahblah.mx/foros-cambiar-el-numero-de-workers/</link><guid isPermaLink="false">6313fab7f2262b3ec23f1038</guid><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Sun, 04 Sep 2022 01:14:42 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxkb2NrZXIlMjBweXRob24lMjBjb2RlfGVufDB8fHx8MTY2MjI1NDA1MQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxkb2NrZXIlMjBweXRob24lMjBjb2RlfGVufDB8fHx8MTY2MjI1NDA1MQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Foros - cambiar el numero de workers en Tutor"><p></p><h2 id="cambiar-el-numero-de-workers-en-los-foros-en-tutor">Cambiar el numero de workers en los foros en Tutor</h2><p></p><ul><li>Instalar los foros normalmente</li><li>Editar el archivo ubicado en el directorio de trabajo de tutor como por ejemplo: <code>tutor/env/plugins/forum/build/forum</code></li><li>Editar el archivo <code>Dockerfile</code></li><li>Agregar el siguiente comando <code>RUN sed -i &apos;s/4)/6)/g&apos; ./config/unicorn_tcp.rb</code> de bajo de la linea de instalaci&#xF3;n del foro <code>RUN bundle install --deployment</code></li><li>En caso de querer agregar o disminuir los trabajadores se debe de editar el numero 6 por el numero de workers deseados, recordar que el 4 son los trabajadores por default que vienen en el repositorio oficial.</li><li>Despu&#xE9;s rehacemos la imagen con el comando <code>tutor images build forum</code></li><li>Reiniciamos los foros con el comando <code>tutor local restart forum</code></li><li>Verificamos los workers activos por ejemplo con ps ax</li></ul><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2022/09/Pasted-image-20220808105159.png" class="kg-image" alt="Foros - cambiar el numero de workers en Tutor" loading="lazy" width="629" height="152" srcset="https://blahblah.mx/content/images/size/w600/2022/09/Pasted-image-20220808105159.png 600w, https://blahblah.mx/content/images/2022/09/Pasted-image-20220808105159.png 629w"></figure>]]></content:encoded></item><item><title><![CDATA[Borrar cursos con Tutor]]></title><description><![CDATA[<p></p><p>El borrado de archivos es similar a como se hacia en la instalaci&#xF3;n nativa, para hacerlo basta ejecutar la siguiente comando:</p><pre><code class="language-bash">tutor local run cms ./manage.py cms delete_course &lt;your_course_id&gt;
</code></pre>]]></description><link>https://blahblah.mx/borrar-cursos-con-tutor-2/</link><guid isPermaLink="false">6313f8f3f2262b3ec23f1020</guid><category><![CDATA[bash]]></category><category><![CDATA[linux]]></category><category><![CDATA[tutor]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Sun, 04 Sep 2022 01:05:52 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1613677135043-a2512fbf49fa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDMzfHxweXRob24lMjBjb2RlfGVufDB8fHx8MTY2MjI1MzQ2MA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1613677135043-a2512fbf49fa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDMzfHxweXRob24lMjBjb2RlfGVufDB8fHx8MTY2MjI1MzQ2MA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Borrar cursos con Tutor"><p></p><p>El borrado de archivos es similar a como se hacia en la instalaci&#xF3;n nativa, para hacerlo basta ejecutar la siguiente comando:</p><pre><code class="language-bash">tutor local run cms ./manage.py cms delete_course &lt;your_course_id&gt;
</code></pre>]]></content:encoded></item><item><title><![CDATA[Cambiar tema para Open EdX - Tutor]]></title><description><![CDATA[<p>Con el cambio de instalaci&#xF3;n nativa a contenedores de tutor la forma de poner un tema es mucho mas f&#xE1;cil, para esto debemos de tener ya el tema terminado y aplicarlo a la plataforma, con los siguientes pasos:</p><!--kg-card-begin: markdown--><ul>
<li>Copiar el tema en la siguiente ruta:</li>
</ul>
<pre><code>cp</code></pre>]]></description><link>https://blahblah.mx/tutor-themes-2/</link><guid isPermaLink="false">630da57549c9e93c5a1453a5</guid><category><![CDATA[tutor]]></category><category><![CDATA[OpenEdx]]></category><category><![CDATA[linux]]></category><category><![CDATA[docker]]></category><category><![CDATA[lms]]></category><category><![CDATA[elearning]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Mon, 21 Feb 2022 17:06:41 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1526925539332-aa3b66e35444?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI0fHxjb2Rpbmd8ZW58MHx8fHwxNjQ1NDYyODU5&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1526925539332-aa3b66e35444?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI0fHxjb2Rpbmd8ZW58MHx8fHwxNjQ1NDYyODU5&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Cambiar tema para Open EdX - Tutor"><p>Con el cambio de instalaci&#xF3;n nativa a contenedores de tutor la forma de poner un tema es mucho mas f&#xE1;cil, para esto debemos de tener ya el tema terminado y aplicarlo a la plataforma, con los siguientes pasos:</p><!--kg-card-begin: markdown--><ul>
<li>Copiar el tema en la siguiente ruta:</li>
</ul>
<pre><code>cp theme_dir &quot;$(tutor config printroot)/env/build/openedx/themes/&quot;
</code></pre>
<ul>
<li>Compilar la imagen con el nuevo tema</li>
</ul>
<pre><code>tutor images build openedx
</code></pre>
<ul>
<li>Agregar a la configuraci&#xF3;n el nuevo tema instalado</li>
</ul>
<pre><code>tutor local settheme
</code></pre>
<ul>
<li>Guardamos los cambios en el archivo de configuraci&#xF3;n</li>
</ul>
<pre><code>tutor config save
</code></pre>
<ul>
<li>Como paso opcional, activo este plugin para que tome el path de las imagenes del tema:</li>
</ul>
<pre><code>name: theme_default
version: 0.1.0
patches:
 lms-env: |
         &quot;DEFAULT_SITE_THEME&quot;: &quot;lilactheme&quot;
</code></pre>
<ul>
<li>Por ultimo reiniciamos plataforma para ver los cambios aplicados</li>
</ul>
<pre><code>tutor local reboot -d
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Instalación de Tutor]]></title><description><![CDATA[<p>A partir de la versi&#xF3;n Maple de Open EDx, tutor se convierte como la &#xFA;nica forma de instalaci&#xF3;n para producci&#xF3;n dejando de lado la instalaci&#xF3;n nativa.</p><p>Por lo que la instalaci&#xF3;n de la plataforma y puesta en producci&#xF3;</p>]]></description><link>https://blahblah.mx/instalacion-de-tutor-2/</link><guid isPermaLink="false">630da57549c9e93c5a1453a4</guid><category><![CDATA[linux]]></category><category><![CDATA[tutor]]></category><category><![CDATA[docker]]></category><category><![CDATA[bash]]></category><category><![CDATA[lms]]></category><category><![CDATA[studio]]></category><category><![CDATA[ubuntu]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Wed, 10 Nov 2021 20:36:34 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1599008633840-052c7f756385?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxsZWFybmluZ3xlbnwwfHx8fDE2MzY1NzY1Mzg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1599008633840-052c7f756385?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxsZWFybmluZ3xlbnwwfHx8fDE2MzY1NzY1Mzg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Instalaci&#xF3;n de Tutor"><p>A partir de la versi&#xF3;n Maple de Open EDx, tutor se convierte como la &#xFA;nica forma de instalaci&#xF3;n para producci&#xF3;n dejando de lado la instalaci&#xF3;n nativa.</p><p>Por lo que la instalaci&#xF3;n de la plataforma y puesta en producci&#xF3;n &#xA0;se hace en cuesti&#xF3;n de minutos dependiendo de la conexi&#xF3;n de internet. Lo &#xFA;nico a considerar que para realizar configuraciones personalizadas se realiza de plugins que los veremos en otra entrada.</p><p>Antes de instalar debemos hacer los registros dns, por lo que debemos hacer un A del dns al lms_host.</p><!--kg-card-begin: markdown--><h3 id="configuracindedns">Configuraci&#xF3;n de dns</h3>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code>demo.openedx 1800 IN A XXX.XXX.XXX.XXX
</code></pre>
<p>Ademas de un registo CNAME que cubra a todos servicios como studio, ecommerce, discover, etc.</p>
<pre><code>*.demo.openedx 1800 IN CNAME demo.openedx.domain.demo.
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="instalacindetutor">Instalaci&#xF3;n de tutor</h3>
<p>Para instalar tutor basta con bajar el script de instalaci&#xF3;n y cambiar los permisos mediante los siguientes comandos:</p>
<pre><code>sudo curl -L &quot;https://github.com/overhangio/tutor/releases/download/v12.1.6/tutor-$(uname -s)_$(uname -m)&quot; -o /usr/local/bin/tutor

sudo chmod 0755 /usr/local/bin/tutor
</code></pre>
<h5 id="autocompletado">Autocompletado</h5>
<p>Ahora agregamos a los archivos de configuraci&#xF3;n de la terminal para que funcione el autocompletado.</p>
<p>Para bash:</p>
<pre><code>_TUTOR_COMPLETE=bash_source tutor &gt;&gt; ~/.bashrc
</code></pre>
<p>Para zsh:</p>
<pre><code>_TUTOR_COMPLETE=zsh_source tutor &gt;&gt; ~/.zshrc
</code></pre>
<h5 id="instalacin">Instalaci&#xF3;n</h5>
<p>Y ahora podemos instalar tutor con el comando:</p>
<pre><code>tutor quickstart
</code></pre>
<p>Y seguir los pasos del instalador.</p>
<p><a href="https://asciinema.org/a/448282"><img src="https://asciinema.org/a/448282.svg" alt="Instalaci&#xF3;n de Tutor" loading="lazy"></a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Preparar servidor para la instalación de Tutor]]></title><description><![CDATA[<p>A partir de la pr&#xF3;xima versi&#xF3;n de Open EdX Maple la &#xFA;nica forma de instalaci&#xF3;n ser&#xE1; mediante Tutor.</p><p>Este nuevo post cubriremos los requisitos previos a la instalaci&#xF3;n de Tutor, a continuaci&#xF3;n dejo los pasos para la instalaci&</p>]]></description><link>https://blahblah.mx/docker-2/</link><guid isPermaLink="false">630da57549c9e93c5a1453a3</guid><category><![CDATA[linux]]></category><category><![CDATA[docker]]></category><category><![CDATA[tutor]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 09 Nov 2021 19:59:29 GMT</pubDate><media:content url="https://blahblah.mx/content/images/2021/11/docker.png" medium="image"/><content:encoded><![CDATA[<img src="https://blahblah.mx/content/images/2021/11/docker.png" alt="Preparar servidor para la instalaci&#xF3;n de Tutor"><p>A partir de la pr&#xF3;xima versi&#xF3;n de Open EdX Maple la &#xFA;nica forma de instalaci&#xF3;n ser&#xE1; mediante Tutor.</p><p>Este nuevo post cubriremos los requisitos previos a la instalaci&#xF3;n de Tutor, a continuaci&#xF3;n dejo los pasos para la instalaci&#xF3;n de docker y docker compose para ubuntu 20.04 lts.</p><p>Comenzamos actualizando el servidor hasta la ultima actualizaci&#xF3;n.</p><!--kg-card-begin: markdown--><p>Ejecutamos los comandos para actualizar el SO.</p>
<pre><code>sudo apt update

sudo apt upgrade

sudo apt dist-upgrade
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>Agregamos la cadena GPG para poder instalar docker de los repositorios oficiales, con los siguientes comandos:</p>
<pre><code>sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable&quot;

</code></pre>
<p>Nuevamente actualizamos los paquetes con <code>sudo apt update</code></p>
<p>Y por ultimo instalamos docker</p>
<p><code>sudo apt install docker-ce -y</code></p>
<p>Para verificar que tenemos instalado y corriento docker en el servidor lo hacemos con el siguiente comando:</p>
<p><code>sudo systemctl status docker</code></p>
<!--kg-card-end: markdown--><p>Por seguridad solo root puede ejecutar comando de docker, pero podemos agregar a un usuario sin privilegios, para poder hacer uso de docker con los siguientes comandos:</p><pre><code>sudo usermod -aG docker ${USER}

</code></pre><p>Para ver aplicados los cambios debemos cerrar y volver a iniciar sesi&#xF3;n o ejecutar el comando </p><!--kg-card-begin: markdown--><p><code>su - ${USER}</code></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="instalacindedockercompose">Instalaci&#xF3;n de docker-compose</h2>
<p>Ahora toca el turno de instalar docker-compose, para instalar basta con ejecutar los siguientes comandos:</p>
<pre><code>sudo curl -L &quot;https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
</code></pre>
<p>Comprobamos que ya lo podamos ejecutar con el comando <code>docker-compose --version</code> y nos debe de arrojar algo como esto en consola</p>
<pre><code>docker-compose version 1.26.0, build d4451659
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Open Edx Juniper - Error CSRF]]></title><description><![CDATA[<p>Hace unos d&#xED;as me empez&#xF3; a aparecer un error al hacer login en las plataforma con la ultima versi&#xF3;n de Open Edx. como se muestra a continuaci&#xF3;n: &#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/08/csrf-01.png" class="kg-image" alt loading="lazy"></figure><p>Buscando el error en el log del lms, me encuentro un error de cookie, ademas</p>]]></description><link>https://blahblah.mx/juniper-csrf-2/</link><guid isPermaLink="false">630da57549c9e93c5a1453a2</guid><category><![CDATA[linux]]></category><category><![CDATA[python]]></category><category><![CDATA[django]]></category><category><![CDATA[lms]]></category><category><![CDATA[OpenEdx]]></category><category><![CDATA[csrf]]></category><category><![CDATA[ubuntu]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Wed, 05 Aug 2020 22:02:03 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1489875347897-49f64b51c1f8?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1489875347897-49f64b51c1f8?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Open Edx Juniper - Error CSRF"><p>Hace unos d&#xED;as me empez&#xF3; a aparecer un error al hacer login en las plataforma con la ultima versi&#xF3;n de Open Edx. como se muestra a continuaci&#xF3;n: &#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/08/csrf-01.png" class="kg-image" alt="Open Edx Juniper - Error CSRF" loading="lazy"></figure><p>Buscando el error en el log del lms, me encuentro un error de cookie, ademas de no registrar el id del usuario que esta haciendo el login.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/08/csrf-02.png" class="kg-image" alt="Open Edx Juniper - Error CSRF" loading="lazy"></figure><p>Prob&#xE9; cambiar todas la variable del archivo lms.yml referentes a la cookies del CSFR, pero ninguna resolv&#xED;a el problema.</p><p>Por lo que proced&#xED; a buscar en la consola de navegador en este caso Chrome y este me enviar que esta bloqueando el sitio como muestro a continuaci&#xF3;n:</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/08/csrf-03.png" class="kg-image" alt="Open Edx Juniper - Error CSRF" loading="lazy"></figure><p>Por lo que proced&#xED; a buscar en foros de como resolver el problema y hasta que encontr&#xE9; en el chat e Slack del proyecto una soluci&#xF3;n tentativa, as&#xED; que la prob&#xE9; y funciono.</p><!--kg-card-begin: markdown--><p>Asi que para solucionar el problema basta con modificar el archvivo <code>/edx/app/edxapp/edx-platform/lms/envs/common.py</code>.</p>
<p>Buscar y modificar la variable <code>DCS_SESSION_COOKIE_SAMESITE</code> de None a <code>Lax</code> y reniciar el servicio del lms.</p>
<!--kg-card-end: markdown--><p>Con eso resolvemos el problema.</p>]]></content:encoded></item><item><title><![CDATA[¿Como desactivar la verificación de cuenta en Open edX?]]></title><description><![CDATA[<p>Una de las cosas que me han comentado clientes que no les gusta al crear los usuarios, es hacer el paso de activaci&#xF3;n de cuenta una vez que concluye el registro.</p><p>Entonces veremos como desactivar esta opci&#xF3;n.</p><!--kg-card-begin: markdown--><p>Basta con editar el archivo <code>lms.env.json</code> e</p>]]></description><link>https://blahblah.mx/como-desactivar-la-verificacion-de-cuenta-en-open-edx-2/</link><guid isPermaLink="false">630da57549c9e93c5a1453a1</guid><category><![CDATA[elearning]]></category><category><![CDATA[lms]]></category><category><![CDATA[OpenEdx]]></category><category><![CDATA[linux]]></category><category><![CDATA[python]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 16 Jun 2020 18:05:17 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1509966756634-9c23dd6e6815?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1509966756634-9c23dd6e6815?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="&#xBF;Como desactivar la verificaci&#xF3;n de cuenta en Open edX?"><p>Una de las cosas que me han comentado clientes que no les gusta al crear los usuarios, es hacer el paso de activaci&#xF3;n de cuenta una vez que concluye el registro.</p><p>Entonces veremos como desactivar esta opci&#xF3;n.</p><!--kg-card-begin: markdown--><p>Basta con editar el archivo <code>lms.env.json</code> e irnos a la seccion de FEATURES y agregamos la siguiente linea.</p>
<p><code>&quot;SKIP_EMAIL_VALIDATION&quot;: true,</code></p>
<p>Guardamos y reiniciamos los servicios con el comando</p>
<p><code>/edx/bin/supervisorctl restart lms</code></p>
<p>Listo, con esto ya no pedira y enviara la activaci&#xF3;n de cuenta ni verificaci&#xF3;n v&#xED;a correo electr&#xF3;nico.</p>
<!--kg-card-end: markdown--><p>As&#xED; de sencillo se puede deshabilitar, con esto terminamos el post de esta semana.</p>]]></content:encoded></item><item><title><![CDATA[Como configurar los certificados en Open Edx - Parte 5]]></title><description><![CDATA[<p>En esta parte veremos como configurar el certificado en un curso. As&#xED; que empecemos.</p><p>Una vez que tenemos seleccionado el curso donde vamos a otorgar el certificado debemos hacer lo siguiente entrar a studio y checar en el men&#xFA; opciones que tengamos habilitada la opci&#xF3;n de</p>]]></description><link>https://blahblah.mx/parte5/</link><guid isPermaLink="false">630da50f49c9e93c5a1452a2</guid><category><![CDATA[OpenEdx]]></category><category><![CDATA[certificados]]></category><category><![CDATA[cms]]></category><category><![CDATA[django]]></category><category><![CDATA[lms]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 09 Jun 2020 16:22:50 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1559588501-59a118c47e59?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1559588501-59a118c47e59?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Como configurar los certificados en Open Edx - Parte 5"><p>En esta parte veremos como configurar el certificado en un curso. As&#xED; que empecemos.</p><p>Una vez que tenemos seleccionado el curso donde vamos a otorgar el certificado debemos hacer lo siguiente entrar a studio y checar en el men&#xFA; opciones que tengamos habilitada la opci&#xF3;n de certificado.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/01.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Y al entrar veremos que no tenemos habilitada la opci&#xF3;n de generar el certificado</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/03.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><!--kg-card-begin: markdown--><p>Para habilitarlo debemos ir al django del lms <code>domain.com/admin</code> y ahi buscamos el menu de Course Mode</p>
<p><img src="https://blahblah.mx/content/images/2020/06/04.png" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></p>
<!--kg-card-end: markdown--><p>Entramos a este y seleccionamos a&#xF1;adir course mode</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/06-1.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Una vez dentro seleccionamos el curso por su ID, nombre a visualizar y el modo ponemos la opci&#xF3;n de honor y guardamos el cambio.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/06.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Una vez realizada esta tarea, regresamos a studio y refrescamos la pagina, la cual ya nos desplegara la opci&#xF3;n para crear el certificado en el curso.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/07.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Damos clic en Configurar certificado y seguido nos abrira un nuevo formulario donde tendremos que llenarlo con los datos correspondiente al nombre del curso, quienes firman, por ultimo damos click al bot&#xF3;n crear.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/08.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Una vez creado tenemos las opciones de pre-visualizar y activar certificado, por lo que si todo es correcto damos clic a la opci&#xF3;n de activar. De igual manera lo podemos desactivar cuando lo deseamos.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/09.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Ahora mi recomendaci&#xF3;n es habilitar la opci&#xF3;n que el propio estudiante genere su diploma cuando termine el curso, para hacerlo debemos modificar en opciones avanzadas la opci&#xF3;n <em>Opciones de publicaci&#xF3;n de los certificados </em>con la variable <em>early_with_info</em>, ya que por default esta la opci&#xF3;n <em>end, </em>la cual genera el certificado hasta que termine el curso.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/10.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Guardamos los cambios y ahora vamos a las opciones de instructor en el apartado de certificados del lms.</p><p>Y damos clic al bot&#xF3;n de habilitar la generaci&#xF3;n de certificados por estudiantes.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/06/11.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 5" loading="lazy"></figure><p>Con esto ya los alumnos podr&#xE1;n generar su certificado al finalizar el curso.</p><p>Con esto terminamos este post, en la pr&#xF3;xima parte veremos como cambiar los usuarios que no sean honor y como forzar la creaci&#xF3;n de certificados, que por alguna extra&#xF1;a raz&#xF3;n llegue a fallar el m&#xE9;todo.</p>]]></content:encoded></item><item><title><![CDATA[Corregir errores en Bulk mail]]></title><description><![CDATA[<p>La plataforma en su opci&#xF3;n de notificaciones por curso, tiene un error, ya que al estar preparando el correo, genera un <em>from_mail</em> extra&#xF1;o, por ejemplo si el correo que usas para notificaciones es notificar@example.com, la funci&#xF3;n agrega parte del nombre del</p>]]></description><link>https://blahblah.mx/corregir-errores-en-bulk-mail/</link><guid isPermaLink="false">630da50f49c9e93c5a1452a1</guid><category><![CDATA[compilar]]></category><category><![CDATA[linux]]></category><category><![CDATA[lms]]></category><category><![CDATA[OpenEdx]]></category><category><![CDATA[python]]></category><category><![CDATA[ubuntu]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 02 Jun 2020 18:19:11 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1542831371-29b0f74f9713?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1542831371-29b0f74f9713?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Corregir errores en Bulk mail"><p>La plataforma en su opci&#xF3;n de notificaciones por curso, tiene un error, ya que al estar preparando el correo, genera un <em>from_mail</em> extra&#xF1;o, por ejemplo si el correo que usas para notificaciones es notificar@example.com, la funci&#xF3;n agrega parte del nombre del curso, algo como DemoX-notificar@example.com, esta opci&#xF3;n no es raro que se haga cuando enmascaras el correo, pero por una extra&#xF1;a raz&#xF3;n la funci&#xF3;n manda el correo modificado a los par&#xE1;metros de autentificaci&#xF3;n de correo electr&#xF3;nico, mandando error en la plataforma.</p><!--kg-card-begin: markdown--><p>Adjunto un fragmento del log para que puedan ubicarlo:</p>
<pre><code>May 30 00:44:44 edu [service_variant=lms][edx.celery.task][env:sandbox] ERROR [edu  1380] [tasks.py:686] - Task 3434e424-b73e-45e8-8834-6712c3e1036f: email with id 4 caused send_course_email task to fail with &quot;fatal&quot; exception.  6 emails unsent.
Traceback (most recent call last):
  File &quot;/edx/app/edxapp/edx-platform/lms/djangoapps/bulk_email/tasks.py&quot;, line 567, in _send_course_email
    connection.send_messages([email_msg])
  File &quot;/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py&quot;, line 111, in send_messages
    sent = self._send(message)
  File &quot;/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py&quot;, line 127, in _send
    self.connection.sendmail(from_email, recipients, message.as_bytes(linesep=&apos;\r\n&apos;))
  File &quot;/usr/lib/python2.7/smtplib.py&quot;, line 747, in sendmail
    raise SMTPRecipientsRefused(senderrs)
SMTPRecipientsRefused: {u&apos;sbernesto@gmail.com&apos;: (550, &apos;Verification failed for &lt;DemoX-edu@bunited.mx&gt;\nNo Such User Here&quot;\nSender verify failed&apos;)}
May 30 00:44:44 edu [service_variant=lms][edx.celery.task][env:sandbox] ERROR [edu  1380] [tasks.py:326] - Send-email task 3434e424-b73e-45e8-8834-6712c3e1036f for email 4: failed: {u&apos;sbernesto@gmail.com&apos;: (550, &apos;Verification failed for &lt;DemoX-edu@example.com&gt;\nNo Such User Here&quot;\nSender verify failed&apos;)}
</code></pre>
<!--kg-card-end: markdown--><p>Como pueden ver la ultima l&#xED;nea, se puede leer la modificaci&#xF3;n del correo, les menciono que este error lo pude identificar con un correo debido a que este no pertenece a gsuite o office365, ya que estos solo hacen referencia a un error de autentificaci&#xF3;n.</p><p>Bueno para resolverlo debemos de seguir los siguientes pasos:</p><!--kg-card-begin: markdown--><ol>
<li>Abrir archivo con su editor favorito:<br>
<code>/edx/app/edxapp/edx-platform/lms/djangoapps/bulk_email/tasks.py</code></li>
<li>Ubicar la funcion format_address o ir la linea 407 aprox o ubicar la linea:<br>
<code>from_addr = format_address(course_title_no_quotes)</code></li>
<li>Sustituir el valor:<br>
<code>from_addr = settings.BULK_EMAIL_DEFAULT_FROM_EMAIL</code></li>
<li>Compilar el archivo modificado:<br>
<code>python -m compileall task.py</code></li>
<li>Cambiar el due&#xF1;o del archivo compilado:<br>
<code>chown edxa:edxapp task.pyc</code></li>
<li>Reiniciar todos los servicios:<br>
<code>/edx/bin/supervisorctl restart all</code></li>
<li>Probar que envie el correo</li>
</ol>
<!--kg-card-end: markdown--><p>Hice una grabaci&#xF3;n con asciinema para que puedan ver la modificaci&#xF3;n, es la primera que hago y espero mejorar en los pr&#xF3;ximos post estos videos.</p><!--kg-card-begin: html--><script id="asciicast-336034" src="https://asciinema.org/a/336034.js" async></script><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Como configurar los certificados en Open Edx - Parte 4]]></title><description><![CDATA[<p>Por fin despu&#xE9;s de varios meses o casi un a&#xF1;o, les comparto la ultima parte de los certificados en Open Edx.</p><p>Despu&#xE9;s de hacer todas la configuraciones al fin tenemos activada la opci&#xF3;n de certificado en studio, pero cualquier curso que accedamos,</p>]]></description><link>https://blahblah.mx/como-configurar-los-certificados-en-open-edx-parte-4/</link><guid isPermaLink="false">630da50f49c9e93c5a1452a0</guid><category><![CDATA[OpenEdx]]></category><category><![CDATA[linux]]></category><category><![CDATA[cms]]></category><category><![CDATA[lms]]></category><category><![CDATA[certificados]]></category><category><![CDATA[elearning]]></category><category><![CDATA[django]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 26 May 2020 21:52:53 GMT</pubDate><media:content url="https://blahblah.mx/content/images/2020/05/michael-dziedzic-XTblNijO9IE-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blahblah.mx/content/images/2020/05/michael-dziedzic-XTblNijO9IE-unsplash.jpg" alt="Como configurar los certificados en Open Edx - Parte 4"><p>Por fin despu&#xE9;s de varios meses o casi un a&#xF1;o, les comparto la ultima parte de los certificados en Open Edx.</p><p>Despu&#xE9;s de hacer todas la configuraciones al fin tenemos activada la opci&#xF3;n de certificado en studio, pero cualquier curso que accedamos, nos mostrar&#xE1; la siguiente pantalla:</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/05/01.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 4" loading="lazy"></figure><!--kg-card-begin: markdown--><p>Esta leyenda significa que que el curso no tiene ningun modo asignado para el certificado, por lo que aun tenemos que configurarlo con tipo de modalidad para emitir certificados, por lo que tendremos que ir a la pagina de <code>/admin</code>, ir a la secci&#xF3;n de course mode</p>
<p><img src="https://blahblah.mx/content/images/2020/05/02.png" alt="Como configurar los certificados en Open Edx - Parte 4" loading="lazy"></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>Damos clic al bot&#xF3;n <em>add</em>, nos deplegara la pantalla donde tendremos que llenarlo con el id del curso, modo, nombre a visualizar (se recomienda usar el mismo que el curso) y le damos clic al bot&#xF3;n guardar ubicado al final del formulario.</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/05/03-1.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 4" loading="lazy"></figure><!--kg-card-begin: markdown--><p>Es importante seleccionar el modo <em>honor</em>, ya que este es el modo mas facil de otorgar certificados a los estudiantes.</p>
<p>Una vez agregado que a un curso lo agregamos, ya podremos crear el certificado en studio.</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/05/04.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 4" loading="lazy"></figure><p>Damos clic al bot&#xF3;n de <em>configurar su certificado, y nos aparece todas la opciones para agregar los t&#xED;tulos del certificado, nombre de las personas que firman el certificado.</em></p><p>Despu&#xE9;s de configurar el certificado es importante hacer una vista previa, para ver si el certificado esta bien formado, recuerda que las firmas deben de ser en png fondo transparente y con un ancho m&#xE1;ximo de 150 px, el alto no importa. </p><p>Por ultimo, debemos de activar el certificado.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2020/05/05.png" class="kg-image" alt="Como configurar los certificados en Open Edx - Parte 4" loading="lazy"></figure><p>En el siguiente post de la serie de certificados, veremos como configurar un curso para que genere los certificados de manera manual y autom&#xE1;tica, as&#xED; la administraci&#xF3;n de certificados y usuarios para la emisi&#xF3;n de certificados.</p>]]></content:encoded></item><item><title><![CDATA[Open edX - Indices repetidos en foros]]></title><description><![CDATA[<p>Hace un par de meses tuvimos problemas el&#xE9;ctricos en nuestro site, debido a estas fallas nuestra plataforma empez&#xF3; a generar errores en el foro, revisando el log de los foros, encontr&#xE9; lo siguiente: &#xA0;</p><!--kg-card-begin: markdown--><pre><code>[2019-06-28T17:33:40.968589 #119141] DEBUG -- : source=rack-timeout id=f4476c0a3671ff99d3046531299ffeb4 timeout=</code></pre>]]></description><link>https://blahblah.mx/open-edx-indices-repetidos-en-foros-2/</link><guid isPermaLink="false">630da57549c9e93c5a14539d</guid><category><![CDATA[linux]]></category><category><![CDATA[OpenEdx]]></category><category><![CDATA[forum]]></category><category><![CDATA[elasticsearch]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 19 May 2020 19:00:49 GMT</pubDate><media:content url="https://blahblah.mx/content/images/2020/05/search-web-t2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blahblah.mx/content/images/2020/05/search-web-t2.jpg" alt="Open edX - Indices repetidos en foros"><p>Hace un par de meses tuvimos problemas el&#xE9;ctricos en nuestro site, debido a estas fallas nuestra plataforma empez&#xF3; a generar errores en el foro, revisando el log de los foros, encontr&#xE9; lo siguiente: &#xA0;</p><!--kg-card-begin: markdown--><pre><code>[2019-06-28T17:33:40.968589 #119141] DEBUG -- : source=rack-timeout id=f4476c0a3671ff99d3046531299ffeb4 timeout=20000ms service=0ms state=active
2019-06-28 17:33:42 - Elasticsearch::Transport::Transport::Errors::BadRequest - [400] {&quot;error&quot;:&quot;ElasticsearchIllegalArgumentException[Alias [content] 
has more than one indices associated with it [[content_20170715164129932, content_20170906153352575, content_20171115140946118, content_20190322162154611, c
ontent_20171215165152686, content_20180814150309861]], can&apos;t execute a single index op]&quot;,&quot;status&quot;:400}:
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>Como vemos en el log podemos ver multiples indices <code>content_20170715164129932, content_20170906153352575, content_20171115140946118, content_20190322162154611, c ontent_20171215165152686, content_20180814150309861</code></p>
<p>Por lo que hay que eliminarlos, para checar los indices que tenemos user el comando:</p>
<pre><code>curl &apos;localhost:9200/_cat/indices?v&apos;

</code></pre>
<p>El cual nos da como resultado los indices que tenemos usando en Elasticsearch.</p>
<p>Mi criterio para eliminar los indices repetido fue eliminar los mas viejos y quedarme con el indice mas reciente, para eliminar los indice use el comando:</p>
<pre><code>curl -X DELETE &quot;localhost:9200/indice_a_eliminar
</code></pre>
<p>Y con este procedimiento volvio a funcionar el foro.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Open edX - Account locked]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Uno de los dolores de cabeza que generalmente se tiene al administrar la plataforma es las cuentas bloqueadas por el exceso de intento de ingresar con los datos err&#xF3;neos, ya sea por que se les olvida su password o capturan mal sus datos al iniciar la sesi&#xF3;</p>]]></description><link>https://blahblah.mx/accountlocked-2/</link><guid isPermaLink="false">630da57549c9e93c5a14539c</guid><category><![CDATA[lms]]></category><category><![CDATA[python]]></category><category><![CDATA[linux]]></category><category><![CDATA[elearning]]></category><category><![CDATA[OpenEdx]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Thu, 23 Apr 2020 16:33:23 GMT</pubDate><media:content url="https://blahblah.mx/content/images/2020/04/code-1084923_1280.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blahblah.mx/content/images/2020/04/code-1084923_1280.png" alt="Open edX - Account locked"><p>Uno de los dolores de cabeza que generalmente se tiene al administrar la plataforma es las cuentas bloqueadas por el exceso de intento de ingresar con los datos err&#xF3;neos, ya sea por que se les olvida su password o capturan mal sus datos al iniciar la sesi&#xF3;n.<br>
Por lo que podemos desactivar este bloqueo mediante el cambio de una flag dentro del sistema, basta con editar el archivo <code>/edx/app/edxapp/lms.env.json</code>.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>Basta con ubicar la secci&#xF3;n de FEATURES y agregamos la linea</p>
<p><code>&apos;ENABLE_MAX_FAILED_LOGIN_ATTEMPTS&apos;: false, </code></p>
<!--kg-card-end: markdown--><blockquote>NOTA: No se recomienda por seguridad desactivar esta caracter&#xED;stica.</blockquote><p>Lo recomendado es cambiar el tiempo de bloqueo de cuenta, a un tiempo menor, debido a que el tiempo de espera por default esta en 15 minutos y el bloqueo de cuenta se da a los 5 intentos.</p><!--kg-card-begin: markdown--><p>Para cambiar estos datos es necesario editar el archivo <code>/edx/app/edxapp/edx-platform/lms/envs/common.py</code> y buscar las opciones de:</p>
<pre><code>MAX_FAILED_LOGIN_ATTEMPTS_ALLOWED = 5  
MAX_FAILED_LOGIN_ATTEMPTS_LOCKOUT_PERIOD_SECS = 15 * 60
</code></pre>
<p>La primera opci&#xF3;n nos permite cambiar el numero de intentos, la segunda opci&#xF3;n es el tiempo expresado en segundos.</p>
<blockquote>
<p>NOTA: Para estas opciones no he encontrado mejores practias sobre que valor poner, por lo que es importante modificarlos deacuerdo a las necesidades de cada sistema.</p>
</blockquote>
<p>Una vez que terminemos de modificar los archivos es necesario reiniciar el <strong>LMS</strong>, mediante el comando:</p>
<p><code>/edx/bin/supervisorctl restart lms </code></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Activar Self paced en Open Edx]]></title><description><![CDATA[<p>Para poder tener cursos a tu propio ritmo en edx, solo debemos activar la bandera ubicada en el men&#xFA; de django, bajo la opci&#xF3;n de self paced e ir la configuraci&#xF3;n.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2019/04/Captura-de-pantalla-2019-04-09-a-la-s--1.00.48-p.m..png" class="kg-image" alt loading="lazy"></figure><p>Por &#xFA;ltimo procedemos a guardar el cambio y ahora en studio podremos configurar</p>]]></description><link>https://blahblah.mx/activar-self-2/</link><guid isPermaLink="false">630da57549c9e93c5a14539b</guid><category><![CDATA[python]]></category><category><![CDATA[OpenEdx]]></category><category><![CDATA[django]]></category><category><![CDATA[lms]]></category><dc:creator><![CDATA[Ernesto Sánchez Benitez]]></dc:creator><pubDate>Tue, 09 Apr 2019 18:14:44 GMT</pubDate><media:content url="https://blahblah.mx/content/images/2019/04/luca-bravo-217276-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blahblah.mx/content/images/2019/04/luca-bravo-217276-unsplash.jpg" alt="Activar Self paced en Open Edx"><p>Para poder tener cursos a tu propio ritmo en edx, solo debemos activar la bandera ubicada en el men&#xFA; de django, bajo la opci&#xF3;n de self paced e ir la configuraci&#xF3;n.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2019/04/Captura-de-pantalla-2019-04-09-a-la-s--1.00.48-p.m..png" class="kg-image" alt="Activar Self paced en Open Edx" loading="lazy"></figure><p>Por &#xFA;ltimo procedemos a guardar el cambio y ahora en studio podremos configurar el curso en este modo.</p><p>Por &#xFA;ltimo es importante considerar que para cambiar un curso a Self paced es necesario que el curso a&#xFA;n no haya empezado para que este se pueda seleccionar para esta modalidad.</p><figure class="kg-card kg-image-card"><img src="https://blahblah.mx/content/images/2019/04/Captura-de-pantalla-2019-04-09-a-la-s--1.09.34-p.m..png" class="kg-image" alt="Activar Self paced en Open Edx" loading="lazy"></figure><p>Guardamos los cambio y el curso esta listo para arrancar con la modalidad self paced.</p>]]></content:encoded></item></channel></rss>