Ayúdanos a ayudarte

Estimado compañero de chat:

Alguien te ha enviado a esta publicación porque consideró que necesitabas una guía para preguntar más eficazmente en nuestro canal de chat. No creas que no queremos ayudarte sino que hay ciertas explicaciones que nos toca repetir frecuentemente para facilitar la participación de los usuarios que nos visitan por primera vez o sólo ocasionalmente.

Antes, un poco de contexto

Por algún motivo algunos usuarios perciben el canal como un lugar dedicado al soporte, pero este no es el caso. Las recomendaciones que presentamos a continuación se comprenderán mejor si enfatizamos la distinción entre sala de charla y departamento de soporte:

En un departamento de soporte se pueden atender solicitudes en todo momento porque hay roles y horarios dedicados con sueldo a la atención al usuario. Directa o indirectamente, el usuario paga y mantiene ese soporte y por eso existe. Esto permite una atención expedita y personalizada. Son personas cuyo trabajo diario es guiar usuarios pacientemente a la resolución de problemas.

En cambio, el propósito de nuestro canal es la charla casual. El soporte es sólo uno de los diversos temas aceptables. Quienes platicamos somos profesionales como tú que no estamos dedicados al soporte. Esto significa que no estamos al pendiente de la ventana de chat. De repente encontrarás alguien al que le gusta dedicarse más al chat, pero aún es un voluntario.

Lo cierto es que procuramos ayudar cuando se puede. ¡Bienvenido!

Dicho lo anterior, permítenos hacerte algunas recomendaciones que te ayudarán a esquivar los patrones inconvenientes más comunes de los participantes nuevos y ocasionales. No pretendemos ofender; sólo buscamos poder ayudarte mientras nosotros continuamos con nuestro trabajo diario.

Entra con tiempo disponible

Para nosotros, es muy común revisar la pantalla de chat a eso a las 6:15 p. m. y ver lo siguiente:

[2:30p] * nuevo (~nuevo@example.net) se ha unido a #canal
[2:30p] <nuevo> hola
[2:33p] * nuevo se ha ido de #canal

A veces ocurre que nos damos cuenta casi 4 horas después de que un usuario nuevo entró y salió.

Comprendemos que es normal y humano que al ver un canal sin líneas de texto, se perciba como muerto y que es inútil preguntar. Sin embargo, esperar solamente 3 minutos antes de abandonar el canal no da ni siquiera oportunidad de ver el mensaje. Cuando estamos muy pocos fácilmente pueden pasar horas antes de que alguien vea un mensaje.

La realidad es que mientras hacemos nuestras labores diarias la ventana de chat está escondida. Las ventanas que usualmente tenemos activas son aquellas de nuestras herramientas de trabajo, no las de chat. Y si estamos en una reunión de trabajo, comiendo, durmiendo, cenando con nuestra familia, etc. nos es imposible enterarnos del chat.

En resumen, es poco probable estar viendo la pantalla de chat en el momento exacto en que un usuario entra.

Recuerda que para poder ayudar a alguien que tiene urgencia y prisa alguien tendrá que dejar de lado su actividad actual. La actitud de urgencia en usuarios nuevos es mal vista en IRC, porque significa que se menosprecia el tiempo de los demás participantes.

Usa un cliente de escritorio o aplica Pin en el navegador

Hemos notado que abandonar rápido el canal también se da porque es que latoso tener abierta una ventana de navegador. Incluso, es fácil cerrarla por accidente.

Por eso nosotros no usamos IRC a través del nevagador. En su lugar, usamos un cliente de IRC como XChat, irssi, BitchX, Chatzilla, Pidgin, Konversation, etc. Así, puedes dejar tu ventana de chat abierta en fondo. Además, estos clientes emiten una notificación cuando alguien te menciona y resalta esa línea para una fácil distinción visual.

Como alternativa, algunos navegadores soportan la función Pin. Esto evita que una pestaña de navegador se cierre por equivocación. Usualmente la encuentras haciendo clic derecho sobre la pestaña.

Pregunta directamente

Es muy común ver preguntas como esta:

<nuevo> ¿Alguien ha usado Audacity?
<voluntario> Hola nuevo. Yo lo uso más o menos.
<nuevo> Hola voluntario. ¿Por qué truena tanto?

Esto es mal visto. El usuario que más comúnmente hace esta pregunta busca un experto para resolver un problema complejo o necesita ser llevado de la mano hacia una respuesta. En ambos casos esto toma mucho tiempo. Precisamente, en el ejemplo, ambas preguntas hechas son vagas y no permiten llegar a ningún lado.

Estrictamente hablando, la respuesta es “no sé”. Causas puede haber muchas y cada una se resolvería por alguien con distinto perfil:

Causa Quién podría resolver Dificultad de diagnóstico
Compilación incorrecta Integrador o distribuidor Difícil
Falta de una librería Integrador o distribuidor Difícil
Falta de espacio en disco o RAM Tú mismo Fácil
Falta de red Tú mismo Fácil
Falla de hardware Tú mismo Difícil
Bug en el programa Autor del programa Difícil
Problema de permisos Según el caso Según el caso

Preguntar directamente permite que todo el canal vea tu pregunta completa desde tu primera intervención sin necesidad de que alguien te lleve de la mano.

Ejemplos de preguntas que difícilmente te van a llevar a algo (observa el uso de la palabra “alguien”):

  • “¿Hay alguien aquí que me pueda ayudar?”
  • “¿Alguien ha manejado X/Y/Z?”
  • “¿Alguien ha logrado compilar el kernel antes?”

Decíamos que estas preguntas son mal vistas: se distingue que el usuario espera un diálogo individual con algún voluntario para propósitos de soporte o incluso consultoría. Para que un voluntario te dedique tiempo él debe dejar alguna de sus actividades de lado. Aunque sin intención, el usuario está manifestando una falta de respeto al tiempo de otros. (Ver la sección Antes, un poco de contexto).

Lo más probable es que alguien ignore la pregunta, desafortunadamente, incluso cuando haya alguien que pueda ayudarte.

Y no es que no queramos apoyar o resolver dudas sin cobrar, sino que preferimos que las cosas ocurran de otra manera:

  • Que todos se enteren de tu pregunta desde el principio para que si alguien puede y quiere ayudar, así lo haga.
  • Que todos se enteren de la conversación completa, pues a todos nos sirve como experiencia.
  • Que todos se enteren de la solución.

Mejor, lanza tu pregunta directamente y de manera concreta y así la vemos todos desde el principio.

Haz la tarea antes de preguntar

Por hacer la tarea nos referimos a tu propia labor de búsqueda, investigación y estudio; incluso, a hacer el intento de que funcione lo que pretendes hacer.

Es muy común esto:

<nuevo> Hola. ¿Cómo cambio permisos en un archivo en Linux?

Hay decenas de páginas que ofrecen respuestas directas a esta pregunta. Están a una búsqueda de distancia. No necesitas de nuestra ayudar para ir a Google y buscar:

cambio de permisos en linux

Entonces la mayoría lo interpretará como que te dio flojera buscar.

Sin embargo, tal vez el problema no era que no hayas buscado y encontrado la información, sino que leíste y no sabes cómo hacer eso de “chmod” que todas las páginas mencionan. Entonces tu pregunta no fue conveniente. Mejor pregunta directamente y con contexto:

<nuevo> Hola. Quiero cambiar los permisos en un archivo pero
<nuevo> todas las páginas dicen algo de "chmod", pero ¿cómo hago eso?

Entonces sabemos que debemos guiarte a entrar a la Terminal.

O tal vez no entiendes lo de los permisos, lo del “664” y “ug=rw”. Entonces pregunta:

<nuevo> Hola. Quiero cambiar los permisos en un archivo pero
<nuevo> me está costando trabajo entender lo del "664" y el "ug=rw".

Hay muchas otras páginas que explican eso claramente, así que seguramente no te daremos un tutorial personalizado, pero sí una liga a una página que consideremos decente y clara. Léela. Lo que pasa es que no sabemos si no le entiendes a nada o si tienes una duda en específico.

La siguiente pregunta nos permite darte una respuesta concreta sin emplear mucho tiempo, al menos un sí o un no:

<nuevo> Hola. Me está costando trabajo entender lo del "664" y el
<nuevo> "ug=rw". En un canal me mandaron a esta página: http://.../
<nuevo> ¿Entonces 660 significa "ug=rwx"?

Esta pregunta nos da aún más contexto para ayudarte. No sabemos qué pasó en tu proceso de entendimiento, pero te podemos ayudar diciéndote que estás equivocado y que 660 equivale a ug=rw, no a ug=rwx.

Y con eso seguramente saldrán dudas muy específicas.Poco a poco irás corrigiendo y comprendiendo correctamente cómo funcionan los permisos. No es lo mismo que explicarte todo desde cero.

Sé paciente al esperar una respuesta

Una regla general en IRC es que sólo conteste quien sepa la respuesta, pueda ayudar, o dicho más generalmente, quien pueda y quiera contribuir con la conversación. Procuramos evitar dos situaciones en específico. La primera es generar ruido innecesario:

<nuevo> ¿Alguien sabe si Chromium tiene una opción para abrir URLs
<nuevo> desde la línea de comandos?
<voluntario2> No, sorry.
<voluntario3> Yo no sé.
<voluntario4> Nel.
<voluntario5> Yo no pero tal vez alguien más sepa.
<voluntario6> Usa --new-window. Es una opción no documentada.
<voluntario7> Ni yo.
<voluntario8> Ya somos 7 que no sabemos.

Visualmente se pierde la respuesta de voluntario6 entre tanto ruido para todos, incluso para quienes leen de golpe los últimos mensajes del canal.

La segunda, y más importante, es evitar que un “no sé” se malinterprete como “nadie sabe”:

<nuevo> ¿Alguien sabe si Chromium tiene una opción para abrir URLs
<nuevo> desde la línea de comandos?
<voluntario1> No, sorry.
<voluntario2> Yo no sé.
<nuevo> Bueno, muchas gracias de todos modos.
* nuevo se ha ido de #canal
<voluntario3> Usa --new-window... uhh, ya se fue.

Pregunta con contexto

Mencionábamos en la sección Pregunta directamente cómo las preguntas vagas no llevan a ningún lado debido a la amplitud de sus alcances.

Por eso, parte de preguntar en concreto es incluir brevemente el contexto de la pregunta. Por ejemplo:

<nuevo> Hola. Audacity me manda mucho el error
<nuevo> "Imposible escribir a archivo" y luego truena.
<voluntario1> nuevo, ¿ya revisaste que tu disco duro tenga espacio?
<voluntario2> nuevo, ¿no tienes problemas de permisos?
<voluntario3> nuevo, ¿con qué usuario lo estás ejecutando?

El mensaje de error, además de dar un punto de partida, ofrece una idea de por dónde comenzar a atacar el problema.

Respeta el tema del canal

¿Entrarías a un canal de leyes preguntando sobre ingeniería de aviones? No. De la misma manera, nuestro canal tiene un tema central.

Un truco: en el espacio de texto por donde hablas puedes mandar el texto /topic (con diagonal al inicio). El canal de chat te va a contestar inmediatamente con el tema del canal. A veces ahí ponemos avisos y ligas a páginas útiles que contestan preguntas frecuentes.

Conclusión

Todos hemos sido usuarios nuevos y hemos pasado por lo mismo. Los voluntarios del canal no sólo tenemos identificados estos patrones de comportamiento sino que comprendemos por qué suceden. Todos fuimos usuarios nuevos alguna vez y hemos pasado por lo mismo. Ahora que somos un poco más experimentados observamos que nuestros errores se repiten en otros usuarios nuevos. Es simplemente que juzgar a partir de la evaluación de condiciones inmediatas simplemente forma parte de nuestra evolución como seres humanos.

Gracias por leer hasta aquí, sinceramente, y de nuevo, bienvenido a nuestro canal.

Caddeus 0.4

He liberado Caddeus 0.4Caddeus es un archivo GNUmakefile ya preparado con orientación a la calidad estricta de programas hechos en C.

Cuenta con un ejecutor de pruebas óptimo, banderas CFLAGS estrictas, revisión automática de código con Cppcheck, análisis estático con Clang y búsqueda de fugas de memoria con Valgrind, en caso de encontrar estas herramientas instaladas en el sistema.

generate_timedivisions() para PostgreSQL

En PostgreSQL, supongamos que queremos generar todos los períodos mensuales entre ‘2015-09-12 23:50:00′ y ‘2015-11-22 00:20:00′ con corte al inicio del día 8.

Se puede crear la siguiente función:


CREATE OR REPLACE FUNCTION generate_timedivisions(ts_start timestamp, ts_end timestamp, period varchar, period_offset interval = '0') RETURNS TABLE(tr_start timestamp, tr_end timestamp) AS $$
DECLARE
    end_of_test_interval timestamp;
BEGIN
    SELECT date_trunc(period, ts_start) + ('1 ' || period)::interval + period_offset INTO end_of_test_interval;
    WHILE end_of_test_interval < ts_end LOOP
        RETURN QUERY SELECT ts_start, end_of_test_interval;
        ts_start = end_of_test_interval;
        end_of_test_interval := ts_start + ('1 ' || period)::interval;
    END LOOP;
    RETURN QUERY SELECT ts_start, ts_end;
END;
$$ LANGUAGE plpgsql;

Y usarla de esta manera:


-- Obsérvese que se usa '7 day' y no '8 day' por las siguientes razones:
-- 1. los días comienzan a contarse con 1.
-- 2. el último parámetro es 'interval'
-- 3. Se pide el corte al *inicio* del día 8.
SELECT * from generate_timedivisions('2015-09-12 23:50:00', '2015-11-22 00:20:00', 'month', '7 day');

      tr_start       |       tr_end        
---------------------+---------------------
 2015-09-12 23:50:00 | 2015-10-08 00:00:00
 2015-10-08 00:00:00 | 2015-11-08 00:00:00
 2015-11-08 00:00:00 | 2015-11-22 00:20:00