Taller LaTeX

El viernes pasado con motivo de FLISOL 2012 impartí un taller sobre como escribir textos en LaTeX. Por desgracia, el tiempo se fue corto y bastantes cosas quedaron en el aire así que escribo este mensaje para los que estuvieron en el taller y desean aprender.

Básicamente que dejen un comentario preguntando sus dudas, yo dejo un enlace con un archivo ejemplo para que vean como se hace lo que no pude explicar en el taller, es en realidad el archivo que yo use para experimentar cuando aprendí, por eso los comentarios están en ingles.

Archivo Ejemplo

Además les digo que para convertir una imagen cualquiera a formato EPS pueden usar cualquier software como GIMP o incluso los programas no libres de Adobe. También pueden hacer lo que hago yo que es mucho más rápido, instalan imagemagick (disponible en cualquier distro de GNU/Linux) y en una consola teclean:

$convert imagen_origen.jpg imagen_salida.eps

El archivo origen puede ser tipo JPG o cualquier otro.

Finalmente, al terminar el archivo de ejemplo están anotados unos enlaces con información y ejemplos sobre LaTeX, muy útiles. También indico como hacer tablas mucho más fácil si usan Emacs, también lo anoto aquí:


Tablas de Org-mode a Latex

1. Habilitar orgtbl-mode

2. Escribe esto donde estará la tabla:
% BEGIN RECEIVE ORGTBL thenameofthetable
% END RECEIVE ORGTBL thenameofthetable

3. Creas la tabla
#+ORGTBL: SEND thenameofthetable orgtbl-to-latex
|——+—–+—–|
|    A |   B |   C |
|——+—–+—–|
| 2.34 | 2.7 | 8.9 |
| 3.67 | 4.5 | 8.9 |
|——+—–+—–|

4. Exportas con C-c C-c sobre la tabla

Anuncios

Problemas comunes al usar Software Libre como herramienta de desarrollo tecnológico

Hace ya algún tiempo hable sobre el uso del Software Libre como herramienta para el desarrollo de la Sociedad de la Información en México (ver [Domínguez, 2010]), hoy día algunas cosas han cambiado y he compartido experiencias de uso del Software Libre en México con diferentes personas ya sea en cuestión académica o laboral.

Estas experiencias no son del todo positivas y para explicar esto voy nuevamente a citar nuevamente una definición indispensable, la Sociedad de la Información:

Es una forma de desarrollo económico y social en el que la adquisición, almacenamiento, procesamiento, evaluación, transmisión, distribución y la diseminación de la información con vistas a la creación de conocimiento y a la satisfacción de las necesidades de las personas y de las organizaciones, juega un papel central en la actividad económica, en la creación de riqueza y en la definición de la calidad de vida y las prácticas culturales de los ciudadanos.[Delors, 1993]

Bajo esta definición entendemos que si bien es impensable la existencia de este desarrollo sin los beneficios que hoy obtenemos con las Tecnologías de la Información, la base real para que éste modelo sea posible lo encontramos en la información porque de ella se obtiene el conocimiento, es decir, las TIC son en realidad una herramienta y no un fin; no servirá de nada que una persona sepa como manejar una computadora si no genera contenidos útiles para mejorar su calidad de vida.

Ahora bien, en las instituciones educativas hay personas que ven a la Sociedad de la Información como una oportunidad para que los estudiantes puedan aprender de manera más rápida y con mejor calidad los contenidos y las materias, incluso algunos ponen su meta en la generación y diseminación de conocimiento generado dentro de las aulas y los laboratorios.

Para aprovechar esta oportunidad es necesario tener el control necesario sobre las herramientas que utilizarán para conseguir sus metas particulares. Una de las herramientas más utilizadas consciente o inconscientemente es el Software Libre, porque ofrece ventajas de control y manejo de la información que ningún otro modelo de tecnología ofrece. A pesar de esto siempre surgen errores al momento de aprovechar la tecnología a nuestro favor entre los que destacan por su frecuencia:

  1. Creación de proyectos de software innecesarios.
  2. Los proyectos de software implementados no son utilizados.
  3. Seguir pensando que el software de código cerrado es la mejor opción.

Es momento de hablar de cada uno de ellos más a fondo.

Creación de proyectos de software innecesarios

Las instituciones con frecuencia requieren optimizar sus procesos, no importa el área de la institución de la que estemos hablando. Con esa misma frecuencia se inicia un proyecto de software que solucione la necesidad que acaba de aparecer.

En la UNAM donde hasta hace poco fue mi lugar de trabajo, una de mis primeras tareas asignadas fue la creación de un directorio para la división, directorio que no existía por la falta de políticas internas. De este modo se inició un proyecto de creación de un pequeño sistema de base de datos para resolver este problema. Sin embargo, el proyecto no se terminó; a las pocas semanas habían nuevos proyectos de mayor prioridad.

Independientemente de los problemas de política interna y prioridad de proyectos, es importante señalar el error de crear un proyecto de software cuando se tiene conocimiento de la existencia de software elaborado para resolver tareas que dentro de una organización son comunes. En este caso particular es posible nombrar proyectos como OpenLDAP para hacer la tarea y ahorrar tiempo de implementación, desarrollo y teniendo las ventajas que ofrece un protocolo estandarizado.

El caso se repite comúnmente, en la Escuela Nacional de Antropología e Historia (ENAH), fue mencionada la idea de iniciar el proyecto de una distribución de GNU/Linux orientada a las funcionalidades requeridas por el laboratorio de lingüistica de la institución.

En esta ocasión estamos tratando otro matiz del mismo problema. Todos los programas libres usados por estudiantes y maestros del laboratorio son fácilmente instalables por muchas distribuciones GNU/Linux ya existentes y cuyas comunidades son grandes y mantienen los programas actualizados. Entonces, no existe razón para crear un proyecto independiente cuando la mejor opción es integrarte a uno que ya funciona e incluye los objetivos que están trazados por la institución y además pone a disposición una comunidad sólida y más grande.

El Software Libre es viable en las organizaciones porque permite aprovechar proyectos existentes permitiendo ahorrar tiempo y dinero, al mismo tiempo permite integrarse a una comunidad de usuarios y desarrolladores que ofrecen orientación y soporte.

Los proyectos de software implementados no son utilizados

Este es quizá la causa principal de fracaso de proyectos de Software Libre alrededor del mundo. No existe proyecto de Software Libre sin comunidad. Que existan usuarios dispuestos a usar las implementaciones de proyectos es imprescindible y al parecer es lo último en lo que se piensa cuando se inicia un proyecto en algunas instituciones.

Retomaré el caso de la ENAH donde el portal Campus Virtual (una implementación del software Moodle), es desconocido por una porción nada reducida de la comunidad estudiantil y pocos profesores fomentan su uso.

Los aspirantes para el ingreso a la institución obtienen acceso al Campus Virtual con un número de aspirante y contraseña al contenido correspondiente de un curso propedéutico. Después, los alumnos aceptados no tienen información sobre el portal, si ya no son aspirantes ¿Dónde obtienen su cuenta de alumno para acceder a nuevo contenido? De hecho en toda la escuela no hay a disposición un folleto informativo sobre Campus Virtual, ni se escuchan las ventajas que se tiene al usarlo o los servicios que ofrece el mismo.

Aquí es importante tener en cuenta que la sensibilización al usuario es uno de los primeros aspectos a tener en cuenta cuando se inicia un proyecto. El software es solo una herramienta como se dijo al inicio de este artículo y el manejo y generación de la información es lo realmente importante, mostrar al usuario como las soluciones implementadas pueden ayudarlo y hacer una diferencia positiva real en sus actividades es importante para el éxito de todo proyecto.

Además es obligación de la institución ofrecer servicios de calidad que proporcionen la confidencialidad, integridad y disponibilidad de la información suficiente para que el usuario se sienta seguro al usar estos servicios. Lo mencionado anteriormente solo es posible apegándose a estándares y protocolos fuertes, configurando y modificando el software implementado de forma ordenada y siguiendo metodologías confiables al mismo tiempo que se sensibiliza al usuario.

Seguir pensando que el software de código cerrado es la mejor opción

Un escenario común es cuando el software seleccionado no realiza todas las funciones necesarias o pueden ser difíciles de realizar para una puesta a punto. Al encontrarse con este problema las instituciones ven dos soluciones inmediatas:

  1. Compra de software comercial que comúnmente no es de código abierto.
  2. Compra de hardware optimizado para realizar específicamente una tarea.

La solución número uno rompe con el esquema planteado por el Software Libre. Si bien ya se han discutido formas para la permanencia de este tipo de software en proyectos de migración al Software Libre[Domínguez, 2010] no es conveniente la introducción de este software nuevamente pues rompe el esquema y los objetivos que se tienen al optar por el uso de Software Libre.

La segunda solución es bastante discutible y de razones mucho más técnicas. En realidad la diferencia entre un servidor de uso general y uno optimizado para realizar una tarea específica (appliance) no se encuentra en el hardware porque pieza a pieza el servidor puede ofrecer las mismas prestaciones en este sentido. La diferencia está en el software. Un appliance es una computadora cuyo software esta limitado para ofrecer soluciones a ciertas tareas previamente definidas. Podemos elaborar listas enormes por las cuales es conveniente usar un appliance y decir incluso que son una gran idea pero también hay razones para tener cuidado al seleccionar estas soluciones. Entre las razones que hoy nos atañen destaca que estas computadoras no son actualizables, el hardware esta cuidadosamente seleccionado para que no pueda cambiarse por cuenta propia. El software es obligatorio generalmente no se proporciona el código fuente del mismo por lo que puede ser una ayuda o bien, llegando al extremo quizá, se este comprando una computadora limitada con un malware instalado como sistema operativo[Doctorow, 2011].

Esto puede parecer paranoico para muchos y seguramente será el menor de los males cuando hablamos de ofrecer servicios a un grupo de usuarios, sin embargo, podemos calificar como appliance otros sistemas usados en áreas mucho más sensibles, por ejemplo en la medicina y me refiero a algo como un equipo de cirugía hasta un marcapaso electrónico donde una falla tiene consecuencias mucho peores y podemos ver una vez más que la tecnología no es el fin sino el instrumento.

Entonces, antes de favorecer la compra de un appliance, la solución recomendable esta en el modelo de Software Libre, nuevamente sabemos que falta programar herramientas bajo este esquema y es por eso que las organizaciones tienen área de desarrollo de software.

Pero ¿Qué debemos programar realmente si ya sabemos que no debemos crear proyectos innecesarios? Pensemos en un sistema GNU/Linux instalado en una computadora de uso general, ¿Qué necesitamos? un navegador web, un programa de mensajería, un cliente de correo, un reproductor multimedia, un editor y un procesador de textos e imágenes, todo eso ya esta disponible, entonces podemos intuir que cuando decimos que al Software Libre le faltan aplicaciones nos referimos a esas aplicaciones que una organización desarrolló para su uso interno y/o para ofrecer un servicio específico (como sus aplicaciones web) y no tienen un sustituto libre. Algunas de estas aplicaciones podrán ser instaladas con uso de herramientas como Mono pero las restantes junto con las nuevas aplicaciones que tampoco tengan una opción libre serán programadas al igual que las modificaciones necesarias para que los programas cumplan a cabalidad las necesidades del usuario.

Curso de Becarios CUAED

Resulta que después de un tiempo sin hacer de maestro, me encuentro enseñando sobre GNU/Linux a un grupo de becarios (3 mandriles) en CUAED. Con ese propósito he utilizado un pequeño documento que contiene las bases de este sistema operativo, uso de comandos y algunas cosas que creo son interesantes para el usuario que pretende ser administrador.

El documento esta disponible en formato de texto plano aunque los usuarios de Emacs pueden verlo con org-mode de una forma más fácil.

Descargar

Balanceador de cargas con Haproxy

En el trabajo se tiene un problema, servidores web implementados con websphere que suelen saturarse, ya sea en el número de usuarios o en requerimientos de hardware.

Actualmente se implementa una forma de enrutar a diferentes servidores basado en un round-robin simple sin embargo es complicado implementar un contador de tiempo en este caso por la alta cantidad de usuarios, además resulta innecesario al contar con balanceadores de carga que implementan una serie de algoritmos de forma completa.

Una solución sencilla entonces es tener un balanceador (LB1) que reciba las peticiones de los clientes, el cual opere de la siguiente manera (imagen obtenida de Internet, pero no recuerdo el sitio 😦 ):

  • Si una petición no contiene una cookie de asignación de servidor, será enviado a un servidor válido.
  • Se regresa una cookie llamada SERVERID con el cual es posible organizar la respuesta del servidor y continuar la conexión si este ofrece keepalive (HTTP 1.1).
  • Cuando el cliente haga una nueva petición la cookie SERVERID hará que la sesión del usuario pueda pasar a cualquier servidor de la granja o que permanezca directamente en el primer servidor asignado. La cookie nunca es enviada fuera de LB1 por lo que no existe riesgo de seguridad.
  • Si un servidor es retirado, saturado o simplemente cae de la red, las peticiones serán reasignadas a otro servidor inmediatamente y sin tener que volver a iniciar la sesión.

El software Haproxy da la oportunidad de elegir entre varios métodos de balanceo:

  • Round Robin
  • Número de conexiones
  • Fuente de la petición
  • URI
  • Parámetros en la URL

Además puede ajustar el número máximo y mínimo de conexiones concurrentes a manejar, tiempo de vida de las conexiones con el cliente y el servidor, gestión de colas, emular servidores virtuales, configurar servidores de respaldo y crear granjas de balanceadores, así se afianza la disponibilidad del servicio. Además brinda un monitor de los servidores virtuales y los servidores físicos.

Haproxy funciona en la en la capa 4 del modelo OSI y puede escalar parcialmente a la capa 7, por lo que puede optimizar el protocolo TCP y reconocer opciones de HTTP.

Haproxy actualmente está configurado así:

# El frontend es el servidor virtual

frontend FONDOS 172.16.6.105:7070

# Escucha a otros puertos que corresponden a los servidores reales

bind :9093

bind :9097,:9098

# Lee la URI y decide una acción

acl fondos2_rule url_dir FONDOS2

use_backend FONDOS2 if fondos2_rule

default_backend FONDOS

# El backend es una granja de servidores

backend FONDOS

# Se crea una cookie que mantendrá la asignación del servidor

cookie SERVERID insert nocache indirect

server epmwserv epmwserv.main.unlugar.mx:9093 cookie K check

server hrmsepws hrmsepws.main.unlugar.mx:9093 cookie L check

backend FONDOS2

cookie SERVERID insert nocache indirect

server epmwserv epmwserv.main.unlugar.mx:9098 cookie M check

server hrmsepws hrmsepws.main.unlugar.mx:9097 cookie N check

Ventajas:

  • La IP de Haproxy es 172.16.6.105 y existe un servidor virtual llamado FONDOS que escucha el puerto 7070, esta es la entrada general.
  • El servidor virtual tiene 2 granjas de servidores (FONDOS y FONDOS2).
  • Dependiendo de la URI el servidor virtual eligirá una granja de servidores para responder la petición, la condición es si el servicio está contenido en FONDOS, ejemplo: /psp/FONDOS/?cmd=login&languageCd=ESP o FONDOS2, ejemplo: /psp/FONDOS2/?cmd=login&languageCd=ESP
  • Las conexiones atendidas son cerradas, por lo que se reduce el riesgo de la denegación de servicio.
  • Es posible crear colas y balanceo por pesos si es que se supera el número de conexiones posibles.
  • Permite tener periodos de mantenimiento donde el servidor sea deshabilitado totalmente o solo para nuevas conexiones.

Notas:

  • Si un cliente usa HTTP/1.1 solo la primera respuesta será analizada e ignorará la cookie. Además ocupará permanentemente los recursos de red. La solución es deshabilitar las conexiones permanentes con la opción httpclose.
  • LB1 es un servidor sensible. Todas las conexiones pasan permanentemente por el proxy, si este cae las conexiones establecidas se perderán también. Es recomendable usar un respaldo permanente.
  • El cambio de configuración del proxy llevará a la caida del servicio, esto es evitable si se actualiza la configuración sin que el servidor se detenga:

haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid –sf $(/var/run/haproxy.pid)

Por hacer:

Hacer que FONDOS y FONDOS2 trabajen como una sola aplicación porque de hecho contienen lo mismo, solo de que subcarpeta donde están instalados es diferente.

Recursos:

Archivo de configuración completo de Haproxy

Comando de reinicio de Haproxy

Fuentes:

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

http://www.exceliance.fr/en/ART-2006-making%20applications%20scalable%20with%20LB.pdf

Software Libre: Tecnología para la evolución a la Sociedad de la Información

Descargar el trabajo completo

Este trabajo tiene como objetivo apoyar al lector en las decisiones referentes al desarrollo y uso de software, haciendo ver que el Software Libre es una herramienta tecnológica eficaz y ética para que la sociedad mexicana avance hacia una Sociedad de la Información justa, libre y solidaria.

Sociedad de la Información es un estado de desarrollo social caracterizado por la capacidad de sus miembros (ciudadanos, empresas, organizaciones y Administración Pública) para obtener y compartir cualquier información, instantáneamente, desde cualquier lugar y en la forma que se prefiera. Así la información se convierte en vehículo indispensable para la generación de riqueza (empresas y ciudadanos), satisfacción (Administración Pública, ciudadanos y organizaciones) y cultura (ciudadanos y organizaciones).

México es un país que no ha logrado integrarse a la Sociedad de la Información y una de las causas fundamentales de este problema es la falta de desarrollo tecnológico a nivel nacional. El software es el elemento principal de la tecnología aplicada, por lo tanto México debe tener la capacidad de desarrollar soluciones de software para los problemas comunes y así impulsar al mismo tiempo el desarrollo tecnológico.

Algunos países como Uruguay, han podido elaborar estrategias y aplicarlas en todo su territorio de forma exitosa. Otros han decidido hacer pequeñas estrategias aplicadas solamente a una región lo cual también ha sido exitoso, como es el caso de varias regiones de España.

La situación de México es complicada por la gran diversidad cultural existente en el país, además, comparado con Uruguay que se constituye con una superficie total de 176,215 km2 y 3,415,920 habitantes, México es un país mucho más grande constituido con una superficie de 1,972,550 km2 y 107,550,697 habitantes, lo cual hace difícil pensar en una estrategia nacional homogénea que resuelva la problemática presente en el país y se convierte en una de las razones del fracaso del proyecto e-México.

A pesar de que existen diversos métodos para introducir un país en la Sociedad de la Información, para poder elegir una metodología adecuada se deben tener en cuenta numerosos factores que algunas veces no son visibles por si mismos, por ejemplo, factores económicos (empleo, inversiones, incentivos), intereses de la sociedad civil y el sector privado, diversidad cultural, educación, salud, etc., siempre con el fin de definir estrategias que impulsen considerablemente la inclusión de los ciudadanos a este modelo social.

En México existen numerosas empresas que se benefician de las Tecnologías de la Información y el Conocimiento, sin embargo las PyME no son capaces de percibir todos sus beneficios debido a que el costo del software que utilizan es muy elevado y no es posible cambiarlo debido a la falta de asesoría o bien porque no quieren afectar su operatividad. Estos factores acaban mermando la producción de estas empresas e incluso impide que muchas de ellas prosperen.

Por su parte el usuario particular mexicano ha trabajado toda su vida solo con algunas soluciones de código cerrado y al momento de ofrecerle el uso de otras tecnologías se sienten incómodos, debido a que son entornos similares pero hay cosas nuevas que aprender. Las personas comúnmente se resisten al cambio y el problema en México inicia con el jefe de soporte técnico que no entiende por completo las ventajas de usar otros tipos de software, de esta manera tampoco podrá convencer a los que trabajan con él de usar estas alternativas.

Lo anteriormente señalado nos ayuda a observar que las acciones que México ha tomado hasta ahora no solo han fallado en alcanzar la Sociedad de la Información, también han sido caracterizadas por los siguientes problemas:

  • Interfieren con la soberanía nacional o son agente de creación de monopolios.
  • No mantienen su valor tecnológico y/o monetario a largo plazo.
  • Dificultan la creación y el intercambio de conocimiento para algunos sectores de la población.
  • No son accesibles en precio, diversidad lingüística y libre aprendizaje para toda la población.
  • Es difícil modificar o adaptar las implementaciones para resolver los problemas específicos de ciertas comunidades.
  • No existente interoperatividad entre tecnologías.
  • No generan empleos para los técnicos e ingenieros mexicanos.
  • No incluyen metodologías de desarrollo flexibles y estandarizadas.

El Software Libre es la herramienta técnica ideal para presentar soluciones que sean éticamente correctas para toda la sociedad. Además asegura que no se perjudiquen los sectores más sensibles de la sociedad, imposibilita el crecimiento de la brecha digital, que es de forma somera, resultado del rechazo, la desigualdad y la pobreza.

El uso del Software Libre impulsaría la Sociedad de la Información en México porque contribuye al conocimiento humano, alienta la creación y publicación de conocimiento nuevo, fomenta la confianza de la sociedad civil en los procesos gubernamentales, afianza la soberanía nacional y facilita el control, lo que se traduce en una mayor seguridad y confianza en los servicios prestados por el sector privado, mientras que el software no-libre no puede garantizar todas estas ventajas.

Es de vital importancia para el ingeniero mexicano presentar alternativas para resolver los problemas a los que se enfrenta la sociedad civil debido a que es su tarea desarrollar las Tecnologías de la Información y el Conocimiento para el progreso nacional.

En el caso mexicano, el paradigma de la Sociedad de la Información debe verse de forma medular divido en tres partes:

  • Tecnología: Infraestructura y servicios genéricos, esta es la parte que influye directamente en el desarrollo de las Tecnologías de la Información y el Conocimiento como la regulación de las Telecomunicaciones, el desarrollo de la industria del software así como sus diferentes licencias, entre otros problemas que influyen directamente en el desarrollo tangible de la Sociedad de la Información.
  • Instituciones y organizaciones: Capacidades y conocimiento, es en donde los propios usuarios hacen uso de estas tecnologías para digitalizar diferentes sectores de la sociedad y la economía; esto da lugar a los diferentes sectores, aplicaciones y servicios de la Sociedad de la Información. Es posible digitalizar muchas de las conductas humanas, es decir, las Tecnologías de la Información y el Conocimiento usadas para el desarrollo y modernización de la sociedad; entonces encontramos que las capacidades y conocimiento son el habilitador necesario mas no suficiente para el desarrollo.
  • Políticas Públicas: Regulación e incentivos. Aseguran y aceleran la transición a la Sociedad de la Información. Marcan como es que avanzará la comunidad en el camino a la Sociedad de la Información y los medios que serán utilizados para lograrlo.

Es importante definir como convertir a la tecnología en un habilitador para el desarrollo. En este sentido se debe prestar atención a dos industrias principales. Hardware y Software por ser industrias comecializables. En este caso distinguen la producción orientada a la demanda estandarizada para la exportación (video juegos, sistemas operativos, etc) y servicios conexos para adaptación a requisitos locales, ambas con potencial pero el segundo es crucial para la digitalización de procesos locales. Estas industrias están destinadas a crear empleos y así acercar la Sociedad de la Información, por eso la generación de material humano (principalmente ingenieros) es esencial para lograr el avance tecnológico.

Si se instalan las tecnologías y se genera una masa crítica de empleados, técnicos, ingenieros que permita aprovechar esta tecnología, podremos emplear las Tecnologías de la Información y el Conocimiento para el desarrollo nacional por medio de:

  • Apropiación de la tecnología por parte de los profesionales de todos los sectores, para incorporarla adecuadamente en sus actividades.
  • Digitalización de información. Que incluye las páginas web para interconexión de información y bases de datos hasta la creación de estándares comunes para la interoperatividad.
  • Intercambio de experiencias para el avance de las comunidades y sectores rezagados.

Se vuelven de vital importancia las políticas públicas para lograr estos objetivos, las cuales deben tener las características siguientes para aumentar las posibilidades de éxito:

  • Coordinación de iniciativas dispersas que llevará a mejores resultados. Es decir, dentro de la libertad que da la división política del país se necesita una estrategia nacional que coordine, evalué y de seguimiento a las políticas regionales.
  • La existencia de muchos proyectos que impulsen avances independientemente de la existencia de una estrategia coordinada. Es decir, pequeños proyectos para acciones concretas.

Basado en las experiencias internacionales descritas a detalle en el trabajo, la estrategia nacional que debe adoptar México debe incluir el desarrollo y uso de Software Libre, que por su naturaleza facilita el avance y la superación de los desafíos que trae consigo la evolución a la Sociedad de la Información

Descargar el trabajo completo

Emacs.

Cuando inicie en el mundo de GNU/Linux, no digo del Software Libre porque ya lo usaba antes, Me insistieron mucho en aprender a usar Vim el omnipresente editor de texto, la verdad es que siempre se me hizo muy complicado tener dos terminales abiertas, una para usar Vim y otra para ver el manual. Por otra parte, Emacs tenía combinaciones muy complicadas.

Poco a poco descubrí cosas como GNU/Screen (sin el cual no puedo vivir) y he usado Nano y Bluefish como editores de texto desde hace algunos años pero me he dado cuenta que simplemente no se puede vivir así. Nano puede editar texto, en la parte inferior tiene una ayuda que te facilita el trabajo de aprenderlo, sin embargo no es posible trabajar con archivos realmente grandes porque no es posible desplazarse o comentar secciones con facilidad. Bluefish está más elaborado, pero también tiene inconvenientes con archivos grandes porque tarda mucho en leerlos. El problema es sencillo, no puedes sentirte productivo con esos programas.

Tenía la necesidad de cambiar y tenía que entrar a la guerra: Emacs contra Vim. Esto es como la religión, por lo menos yo lo único que hago en una computadora es editar texto, vivo con mi editor de texto. Mi mala experiencia es con Vim, aunque se usarlo básicamente nunca me he sentido bien trabajando con Vim, así que instalé Emacs.

Al ejecutarlo lo primero que encuentras es un tutorial interactivo que te muestra como hacer lo principal: editar texto. Quince minutos después descubres el primer error: Emacs no puede compararse con Vim, quizás fue RMS y no me importa, pero creo que el sujeto que dijo que Emacs es un editor de texto es un !”·$%&/. Vim es un editor de texto y seguramente es el mejor y mi argumento es el siguiente:

Emacs es un editor de BUFFERS (SIC) y un interprete de Lisp.

Emacs te permite editar buffers lo cual incluye los de texto, Vim edita texto. Es como comparar una consola de videojuegos con una computadora personal, la primera te sirve para entretenimiento y son muy buenas porque fueron creadas para esa actividad específica, la segunda te permite jugar pero no es su propósito principal así que hace muchas más cosas. No es una desventaja de la consola de videojuegos, simplemente no fue creada para hacer lo que la computadora personal debe hacer.

Al día de hoy he cambiado mucho mi forma trabajar, he desinstalado Claws-Mail, Xpad, Midnight Commander, Nano y Bluefish para usar Emacs. Compilo mis programas en un solo entorno y puedo ver el resultado también. Emacs es extremadamente configurable y además el manual de Emacs esta dentro de Emacs y aunque no sé Lisp muy bien no me siento limitado al personalizar Emacs, sobre todo he descubierto que el texto simple tiene muchas más aplicaciones que los formatos tipo Office.

Más reglas Udev para automontar dispositivos.

Pues como tengo esto un poco abandonado escribiré algo rápido, resulta que me he cambiado a Fluxbox, popular gentor de ventanas bastante ligerito, y ya no tenía “automontado” de memorias USB. Así que tome unas reglas Udev (de las cuales ya había hablado en artículos anteriores) y las extendí con un comentario que esta disponible en el foro de Gentoo, las reglas incluso montan Memory Stick Pro pero hay un error raro de E/S cuando manipulas algunos de los datos. Espero resolverlo pronto.

No tengo unidades con NTFS así que no hay reglas para ese sistema de archivos, aunque quizás funcione con las reglas que ya están hechas.

Espero que como yo puedan liberarse con esto de pmount o ivman (soluciones que encuentras en todos los Howto cuando buscas sobre el tema), lo único que tienen que hacer es crear un archivo donde guardar las reglas: /etc/udev/rules.d/10-automount.rules, e iniciar Udev y Hal.

# Example udev rules for automounting usb volumes. Pulled from
# http://forums.gentoo.org/viewtopic-t-720401-highlight-automount.html
# To be placed in /etc/udev/rules.d/

# Match the mounted volume
KERNEL=="sd[b-z]", NAME="%k", GROUP="users", OPTIONS="last_rule"
KERNEL=="mmcblk[0-9]", NAME="%k", GROUP="users", OPTIONS="last_rule"
KERNEL=="mspblk[0-9]", NAME="%k", GROUP="users", OPTIONS="last_rule"

# Add the volume
ACTION=="add", KERNEL=="sd[b-z][0-9]", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="mmcblk[0-9]p[0-9]", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="mspblk[0-9]p[0-9]", GROUP="users", NAME="%k"

# Create the mount point
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mkdir -p /mnt/%k"
ACTION=="add", KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/bin/mkdir -p /mnt/%k"
ACTION=="add", KERNEL=="mspblk[0-9]p[0-9]", RUN+="/bin/mkdir -p /mnt/%k"

# Some udev magic runs this mount command if vfat is detected, else it falls
# through to the next rule, which tries to autodetect the fstype
ACTION=="add", KERNEL=="sd[b-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111,umask=007 /dev/%k /mnt/%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="mmcblk[0-9]p[0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /mnt/%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="mspblk[0-9]p[0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /mnt/%k", OPTIONS="last_rule"

# Mount the volume
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="mspblk[0-9]p[0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/%k", OPTIONS="last_rule"

# Rules for umounting volume
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/umount -l /mnt/%k"
ACTION=="remove", KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/bin/umount -l /mnt/%k"
ACTION=="remove", KERNEL=="mspblk[0-9]p[0-9]", RUN+="/bin/umount -l /mnt/%k"

# Clean up
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rmdir /mnt/%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/bin/rmdir /mnt/%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="mspblk[0-9]p[0-9]", RUN+="/bin/rmdir /mnt/%k", OPTIONS="last_rule"

Notas:
– Yo como el autor original del foro de Gentoo estoy hecho a la vieja escuela y suelo montar las cosas en /mnt pero pueden cambiarlo fácilmente a /media.
– Diferente a las reglas del comentario original del foro de Gentoo ahora el punto de montaje es igual al nombre de la partición, es decir, /dev/sdb3 se monta en /mnt/sdb3, así no hay confusión.
– Mi disco duro es detectado como sda, por eso la primera regla de cada sección tiene “sd[b-z][0-9]” pero si su disco duro es /dev/hd? pueden cambiarlo a “sd[a-z][0-9]”

También pueden descargar el archivo con las reglas, donde se ven correctamente y no como en WordPress donde se ve medio feo. El archivo lo actualizaré según corrija errores y aumente reglas.

EDICIÓN: 23 de Febrero 2010.

Han cambiado algunas cosas en las reglas udev. El comando “vol_id” ya no existe en las últimas versiones de udev, ahora se usa “blkid”. Lean el manual de blkid para obtener los valores necesarios, yo solo obtengo el sistema de archivos.

También corregí la configuración UTF-8 para particiones vfat. Antes usaba un soporte completo UTF-8 que puede corromper el sistema de archivos, ahora uso el soporte “parcial” pero seguro que sugiere la documentación del kernel de Linux. Con este soporte no he tenido problemas y he corregido ciertas incoherencias que suceden al sincronizar celulares y otros aparatos.

Por último, elimine la dependencia a ntfs-3g, ahora las reglas aprovechan el soporte de escritura de ntfsprogs y fuse.