Dando la bienvenida a los usuarios de IRC con X-Chat 2.

Algunos usuarios, cuando entran a algún canal de charla (como el del Gultij) por IRC, saludan y preguntan si pueden ser ayudados. La gente que tiene más experiencia ya sabe lo que va a ocurrir:

  1. USUARIO_NUEVO entra al canal de charla y, después de no percatarse de lo que dice el topic, dice «tengo una pregunta» o «¿alguien me puede aydar?»
  2. VOLUNTARIO_1 dice «¿cuál es tu pregunta?»
  3. USUARIO_NUEVO le hace la pregunta específicamente a VOLUNTARIO_1.
  4. Si VOLUNTARIO_1 no contesta en menos de 2 minutos USUARIO_NUEVO se siente ignorado y repite la pregunta. Además de que no es obligación del resto del mundo estar atento de sus reclamos, es posible que VOLUNTARIO_1 no sepa, pero sí VOLUNTARIO_2, VOLUNTARIO_3 o VOLUNTARIO_N, que no están en el canal en ese momento.
  5. En ocasiones, cuando USUARIO_NUEVO no recibe respuesta, adopta una actitud donde VOLUNTARIO_1 está obligado a contestarle, como si fuera un servicio pagado de soporte.

Por eso, en los canales de charla, el protocolo es simplemente entrar, hacer la pregunta y ser paciente, muy paciente.

Obviamente, no todos saben esto y no es su culpa. Siempre entrará gente pidiendo ayuda y, claro, hay que darles la bienvenida. Esto toma tiempo, desde 1) estar al pendiente del canal hasta 2) escribir el mensaje de guía a cada usuario para que escriba su pregunta, dando a entender que yo sólo le doy al bienvenida. Para reducir la parte 2, algunos canales tienen un bot al que se le da la instrucción de darle la bienvenida al «usuario nuevo». Yo creo que esto sale contraproducente porque la automatización se revela al usuario.

Para facilitar la parte 2, he configurado en mi X-Chat 2 los siguientes comandos para que la gente reciba un mensaje de mi parte.

/adelante $nick
say %2: adelante, qué pregunta tienes? Tal vez alguien sepa.
/paciencia $nick
say %2, sugiero que esperes un rato. Si alguien te puede ayudar, puede ser que esté ocupado o haya salido un momento.

y sus equivalentes en inglés:

/goahead $nick
say %2, what question do you have? Go ahead and ask; someone around might know.
/patience $nick
say %2, I suggest you wait for a while. If someone can help you, he may be busy or out for a moment.

El de /patience es para cuando el usuario haya repetido su pregunta a escasos minutos.

Aún falta pulir los mensajes para que se vean más naturales pero que, a su vez, abarquen más casos.

De esta manera me facilito el guiar a un usuario nuevo cuyo saludo, con un poco de suerte, yo vea. Creo que sólo siendo amigables con los usuarios nuevos, es como percibirán un valor real en la famosa «comunidad». Para aumentar la probabilidad de detectar un saludo, es posible hacer cosas como configurar el realzado de palabras como «buenas» u «hola», pero esto es harina de otro costal (X-Chat está muy limitado en este aspecto, pero se pueden escribir plug-ins).

Obviamente, si alguien va a tomar esta sugerencia, ponga su propio mensaje a su propio estilo. Realmente sería feo entrar a un canal y ver que 5 usuarios diferentes me contesten exactamente con el mismo mensaje.

OpenCharla: Podcast del Grupo de Usuarios de GNU/Linux de Tijuana

OpenCharla

El Gultij tiene podcast! Después de varios meses de pláticas y pruebas, ya tenemos los primeros episodios de OpenCharla.

OpenCharla se distribuye en formato Ogg por ser un formato libre de patentes y regalías. No necesitas descargar nada para oirlo, pues en la página del podcast disponemos de un reproductor web basado en Flash para oírlo en línea.

Sólo en caso de que quieras descargar el archivo será necesario que utilices un programa que lea archivos Ogg. Dicen que si instalas el filtro de DirectShow para Ogg lo vas a poder tocar en Windows con Media Player. En Linux seguramente ya lo soporta cualquier programa.

Bienvenidos los comentarios. Ah, aún no tenemos el RSS, pero pronto!

La falacia de que «la RAM está para ser usada»

Parece que se ha vuelto popularizado un error de concepto en algunos foros de usuarios. Tal vez recuerdes esta frase:

La RAM está para ser usada.

Esta frase es cierta dentro de un contexto en particular. Se usa para permitir que el sistema operativo acelere disco a RAM tanto como sea posible, pues la RAM es significativamente más rápida que los discos duros.

Sin embargo, dentro del contexto de una aplicación de usuario, en realidad es una falacia. Algunos usuarios (e incluso algunos desarrolladores) no saben mucho sobre el funcionamiento interno de su computadora y usan esta frase fuera de su contexto correcto. Lo peor es que algunas veces ni siquiera les importa el consumo de la RAM. No les importan los derrames de memoria o piensan que si ocurren sólo una vez, no pasa nada. O piensan que los lenguajes y plataformas con recolección de basura (garbage collectors) se encargarán mágicamente de todo. Sin darse cuenta, acaban usando la frase en cuestión como un equivalente de:

La RAM está para ser desperdiciada.

Hay algunas cuestiones que en realidad alimentan este modo de pensar, llevándolos a concluir que una aplicación realmente debería poner tanta información como sea posible en la RAM y que, tarde o temprano, el sistema operativo lo manejará eficientemente. Más aún, que no hacerlo es un sacrificio de rendimiento.

Consideremos lo siguiente (sobresimplificaré para efectos de facilidad de explicación, pero el modelo es bueno). Por una parte:

  • Cuando una aplicación solicita RAM y el sistema operativo la asigna, esa memoria queda reservada para el uso exclusivo de la aplicación hasta que ésta la libera. Una aplicación no puede saber (y no debería) si otra requiere o solicita RAM.
  • Si la RAM física se llena y hay espacio de paginación (swap o paging) disponible en el sistema, el OS descargará algunas de las páginas menos usadas de la RAM hacia el espacio de paginación, sea una partición o un archivo. Cuando la RAM paginada se necesita nuevamente, se intercambia con otras páginas de RAM de las menos usadas. Ambas operaciones requieren de actividad en el disco duro. Eso es lo que hace a la paginación inherentemente lenta.
  • El sistema operativo siempre dejará libre algo (digamos, 50 MB) de RAM física sin usar para que haya disponible cuando necesite reaccionar a una emergencia de inestabilidad de sistema.

Por otra parte:

  • El sistema operativo usa memoria física para acelerar lecturas y escrituras a disco por medio de caché, de modo que cuando un sector de disco es leído múltiples veces, las subsecuentes se obtienen de la RAM, que es mucho más rápida.
  • El OS sólo acelerará lecturas/escrituras a disco hacia RAM física, pues sería inútil «acelerar» de disco a disco.
  • Cuando una aplicación solicita RAM, el OS liberará RAM usada para caché antes de asignarla al a aplicación solicitante. Esta operación no requiere actividad de disco si se están liberando lecturas aceleradas o escrituras ya fijadas; sin embargo, sí requiere de escribir en disco si necesita fijar escrituras aceleradas pendientes. Usualmente, el sistema operativo realiza esta fijación cuando la PC está en ocio, de modo que uno no lo nota y, cuando llega el momento, ya no hay escrituras pendientes por fijar.

Por último:

  • Linux reporta el «tamaño residente en RAM» para un proceso como «consumo de RAM física». Si uno quiere medir el consumo de RAM por una aplicación, se debe hacer con la swap desactivada. Por favor indíquenme cómo Windows reporta la RAM consumida por un proceso.
  • Las escrituras a disco suelen ser más lentas que las lecturas.

La realidad sobre esta falacia es «cierto, el sistema operativo se encargará de eso, pero se muere el caché de disco y se provoca la paginación, alentando todo el sistema, incluyendo la propia aplicación«. Entonces: sí, el sistema se encarga, pero en realidad está recuperándose del error del programador a costa de una degradación global e innecesaria de sistema y la potencial inestabilida que conlleva.

Analicemos dos escenarios tomados de mi propia experiencia. Repito: estoy sobresimplificando. Úsese esto como modelo.

Caso 1: Un navegador acelera la red a disco en lugar de a RAM

Tienes un sistema con 2 GB de RAM, de los cuales tienes 1 GB libres (como en «tal vez usados por el caché de disco pero ciertamente disponible para las aplicaciones»). Tú ejecutas un navegador que acelera los recursos de red a disco porque es más rápido que el Internet (pues es más rápido que el Internet) y usa unos 300 MB de RAM.

1000 – 300 – 50 = 650

Acabas con unos 650 MB de RAM para aceleración de disco por memoria caché y 50 MB de RAM física real.

Cuando un navegador necesita un recurso de red, intenta cargarlo de disco (pues lo está acelerando). Sin embargo, el disco queda acelerado en la RAM por el sistema operativo y las lecturas subsecuentes se realizan en RAM. La penalidad en rendimiento apenas se nota.

Si el navegador quiere acelerar una página visitada por primera vez, la guardará en disco. El SO acelerará la lectura a RAM y la pospondrá hasta que el sistema esté en ocio (cuando estás leyendo el contenido del sitio). La penalidad en rendimiento apenas se nota.

Cuando cualquier otro proceso lee de disco, la probabilidad de pegarle al caché es alta porque hay 650 MB de RAM disponibles par esto. Incluso si se le falla al caché, lo que se lee de disco se acelera en RAM para los accesos subsecuentes. reading.

Entonces, ejecutas una máquina virtual que requiere de 450 MB de RAM. Ocurre lo siguiente:

  • El sistema operativo libera 450 MB de caché de disco. Parte de este requiere de escrituras, parte no. Esta operación es sólo tan lenta como la cantidad de escrituras requeridas para fijar las escrituras aceleradas, así que no es tan lento. Además, el usuario en cierto modo lo espera porque le pidió a la PC cargar la VM.
  • No hay paginación. No es necesario.
  • Finalmente se asignan los 450 MB a la VM.
  • La VM escribe a ese espacio físico de RAM asignado.

Aún quedan 200 MB disponibles para caché de disco, que el SO procurará usar eficientemente.

Ahora, el navegador quiere cargar algo de su «cache de disco». Hay una probabilidad, claro que mayor que 0, de pegarle al caché y que el SO sirva el dato directamente desde la RAM. Supongamos que no, que fue leída desde disco. El navegador aún está acelerando la navegación pues el disco local es más rápido que el Internet. Más aún, el SO acelerará este objeto en la RAM para sus accesos subsecuentes.

Claro: la VM continúa corriendo desde la RAM sin necesitar de ningún tipo de paginación (o hiperpaginación). El sistema responde perfectamente. El usuario sabe (o debería saber) que si quiere liberar memoria, debe cerrar la VM o el navegador.

Caso 2: Un navegador usa más RAM que la que requiere, para su aceleración

Tienes un sistema con 2 GB de RAM, de los cuales tienes 1 GB libres (como en «tal vez usados por el caché de disco pero ciertamente disponible para las aplicaciones»). Tú ejecutas un navegador que acelera los recursos de red a disco porque es más rápido que el Internet (pues es más rápido que el Internet) y usa unos 600 MB de RAM.

1000 – 600 – 50 = 350

Acabas con unos 350 MB de RAM para aceleración de disco y 50 MB de RAM física real.

Cuando el navegador necesita un recurso de red, trata de cargarlo desde su asignación de RAM, así que es muy rápido (aún así, tiene que leerlo primero de disco si no estaba previamente disponible en RAM).

Cuando cualquier otra aplicación lee de disco hay una baja probabilidad de pegarle al caché. En cualquier caso, la probabilidad general de que otra aplicación le pegue al caché es más baja, pues la memoria está exclusivamente asingada para el navegador. Esto incrementa significativamente la probabilidad de acceder a disco, lo que puede llevar a una alentar todo el sistema.

Minimizar el navegador no libera memoria para otras aplicaciones. la memoria aún está asignada para su uso exclusivo para éste.

Entonces, ejecutas una máquina virtual que requiere de 450 MB de RAM. Ocurre lo siguiente:

  • El sistema operativo libera 350 MB de caché de disco. Parte de este requiere de escrituras, parte no. Esta operación es sólo tan lenta como la cantidad de escrituras requeridas para fijar las escrituras aceleradas, así que no es tan lento.
  • Determina los 100 MB menos usados de RAM y las mueve al espacio de paginación. Esta operación es lenta pues implica varias escrituras inevitables a disco.
  • Finalmente se asignan los 450 MB a la VM
  • La VM escribe a ese espacio físico de RAM asignado.

El sistema ya no tiene caché de disco. Cuando otra aplicación necesita leer de disco, no le pegarán al inexistente caché y el SO tendrá que acceder físicamente al disco para servir esta petición. Esto es lento. Lo peor es que el acceso a disco no será acelerado para sus subsecuentes lecturas.

Ahora, el navegador quiere cargar algo desde su propia «caché de memoria» (que, por cierto, tal vez está paginada a disco). Puede pasar una de dos:

Si el recurso a extraer del caché de RAM de la aplicación está paginado en disco, el SO necesitará leerlo de vuelta. Puesto que los datos leídos ahora serán memoria «más reciente usada», el SO podría intercambiarlos de disco contra algo de la RAM de la VM o de otra aplicación menos usada. Esta operación es lenta pues implica varias escrituras inevitables a disco. O:

Si el recurso aún está en la propia «caché de memoria» de la aplicación, será extraída como de rayo de la RAM. Sin embargo, la VM aún necesita su propia RAM para continuar al igual que las demás aplicaciones. Esto fuerza al sistema operativo a usar paginación nuevamente. Además, no hay RAM disponible para caché de disco y otras solicitudes de disco estarán continuamente siendo servidas desde disco sin la posibilidad de acelerar las subsecuentes hacia RAM. Esto genera una actividad constante a disco, alentando todo el sistema incluyendo al navegador. El «caché de memoria» de la aplicación no sirvió para nada.

Claro que la máquina virtual continúa corriendo y su RAM se necesita constantemente, así que la escritura a disco por paginación se vuelve una constante. El sistema operativo se alenta por lo que se llama hiperpaginación. En casos extremos, el sistema deja de responder, impidiendo al usuario de siquiera cerrar una de las dos aplicaciones para recuperarlo.

Conclusiones

Sí, la RAM está ahí para ser usada cuando se necesita, no para desperdiciarse. La RAM es un recurso limitado. Hay maneras de usar la RAM eficientemente. Por ejemplo, cargar los índices de un buzón de correo en RAM (sin cargar el contenido completo del buzón) puede, si se hace correctamente, acelerar significativamente la búsqueda de mensajes.

Sin embargo, acelerar disco a RAM puede que no sea una buena idea. La aceleración ya se hace por el SO, así que sólo se desperdicia una función eficiente del sistema operativo. A veces puede ser una buena idea, pero lo más probable, especialmente en aplicaciones de escritorio, es que no.

The «RAM is there to be used» fallacy

There seems to be a common misconception around some user forums. Maybe you recall this phrase:

RAM is there to be used.

This phrase is true within a particular context. It is used to let the operating system cache as much disk as possible into RAM, as RAM is significantly faster than hard disks.

However, within the context of a user-space application it is actually a fallacy. Some users (and even some developers) don’t know much about the inner workings of their computers, and use this phrase outside of its proper context. What is worse, sometimes they don’t even care much about RAM consumption. They don’t care about memory leaks, or think that if memory leaking occurs only once, it’s fine. Or they think garbage-collected frameworks or languages will take care of everything by magic. Without knowing, they end up using the aforementioned phrase as the equivalent of:

RAM is there to be wasted.

Sigue leyendo