Descubriendo socat

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

¿Qué es socat, y para qué sirve?

Socat es una herramienta que nos permite, básicamente, trabajar como si fuéramos una telefonista de tiempos remotos, esas que vemos en algunas películas en las que mujeres se pasaban el día conectando cables en las centralitas, lo que ocurre es que, en este caso, en lugar de líneas telefónicas nos permite conectar diversos puertos y protocolos de nuestro ordenador.

Centralita telefónica, pricipios siglo XX

Socat funciona como una centralitaa de las antiguas… más o menos…

Llevo un tiempo desarrollando una pequeña aplicación para registrar las posiciones geográficas de las maniobras de pesca. Es tan simple como hacer click sobre un botón y registrar las coordenadas, el tiempo o la sonda a partir de las sentencias NMEA que te llegan desde diversos lugares (UDP, TCP o puertos serie). Esto sería sencillo, hasta cierto punto, en un barco, pues sólo tendría que haber conectado la fuente de datos a mi ordenador y leerlo. Pero en casa, sin un GPS a mano, me resulta indispensable usar un emulador de GPS. En mi caso he empleado gpsfeed+, que funciona perfectamente, pues entre otras cosas permite no sólo simular las sentencias NMEA más habituales (GGA, ZDT, RMC…) sino que, además, nos permite simular nuestras propias señales, con lo cual también es posible simular sondas, por ejemplo. El problema es que, para emular GPS por puerto serie, gpsfeed bloquea el puerto donde emite y no es posible acceder a él para leerlo. La solución me vino empleando socat para crear un puerto virtual en el que volcar la simulación GPS y luego creando otro puerto virtual enlazado con éste.

¿Cómo se puede usar socat?

Yo me he quedado de piedra viendo la cantidad de cosas que se pueden hacer. Hay páginas con montones de one-liners y ejemplos de uso de socat, como en este enlace. Pero, básicamente, lo que hacemos es conectar dos sockets (en sentido amplio) entre sí y comunicarlos, de manera que lo que se escribe en uno sale por el otro y viceversa: En mi caso, el comando es:

Donde lo que indico es que cree dos sockets tipo pty (terminales), con enlaces simbólicos (ya que los suele crear en /dev/pts/) a /dev/ttyV0 y /dev/ttyS0. Ambos flujos son de tipo raw, ordeno que haga la conversión de fin de línea donde proceda con crnl y establezco los permisos de los sockets creados a 666 (todos pueden leer y escribir) Este primer uso es sencillo, aunque, como podréis ver en los enlaces que os he pasado, los usos son infinitos. Por ejemplo, el comando que uso para “poner en red” las balanzas marinas y poder capturar los pesos desde las aplicaciones que uso para muestrear (a bordo o en el laboratorio), es el siguiente:

En este caso, conectamos /dev/ttyUSB0 (habitual cuando se usan conversores USB/serie) y creamos un socket que queda a la espera de conexiones en el puerto 23000. Si conectamos a ese socket y facilitamos los comandos apropiados, podemos interactuar a través de la red con las balanzas y solicitar pesos, tararlas, etc. Los parámetros reuseaddr y fork sirven para que no se pierda la conexión una vez cerrada desde un cliente y para permitir conexiones múltiples. Un comando como el anterior puede servir para, por ejemplo, pasar el flujo NMEA desde puertos serie a la red, igualmente.

¡Disfrutadlo! Saludos desde la Bahía de Algeciras, a bordo del B/O Ramón Margalef .

¡¡Compártelo y disfruta!!

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

Contar las líneas de un archivo de texto con wc

Calculadora
  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites
wc es como una calculadora antigua... y sirve para contar las líneas o las palabras de un archivo...

wc: un comando GNU/linux antiguo pero robusto para contar las líneas de un archivo… entre otras cosas

El problema

Si en alguna ocasión has necesitado contar las líneas de un archivo de texto, lo más probable es que hayas “tirado” de algún menú de propiedades del archivo, etc. en tu editor de texto habitual. Esto requiere tener el archivo abierto y cuando éste es voluminoso se puede tardar bastante en conocer un dato tan simple como este.

Vamos a contar las líneas del archivo: wc

Afortunadamente, los usuarios de GNU/Linux disponemos de un comando muy agradecido, wc (sigla que responde al término Word Count). Este comando nos permite contar las líneas (entendiendo como tal el número de caracteres nueva línea que haya en el archivo), bytes o palabras.

La sintaxis del comando, para contar las líneas, es muy sencilla:

En [ARCHIVOS] se introduce el nombre o nombres de los archivos en los que queremos efectuar la cuenta. Cuando son varios los archivos, el comando devuelve, además, una línea resumen con la suma de los conteos efectuados.

Podemos usar wc también para contar palabras, en cuyo caso se consideran como tal las secuencias de longitud no-nula delimitadas por espacios o directamente caracteres. En este caso, la llamada  sería:

Otras opciones interesantes son -c y -m, que te devuelven el número de bytes y/o caracteres del archivo, respectivamente (Ojo, hay que tener en cuenta que el carácter de fin de línea también se cuenta) y -L, que da la longitud máxima de línea (o sea, la longitud de la línea más larga).

Si empleamos wc sin archivos de entrada, el conteo se hará sobre la entrada estándar y se contará sobre lo que escribamos en consola. para salir de este modo, se pulsará Ctrl+D y el programa nos devuelve los valores que hemos pedido al invocar el comando.

Por último, os indico que si invocamos el comando sin opciones de conteo (contar las líneas, las palabras, etc), el comando nos devolverá directamente cuatro columnas: la cuenta de palabras, de líneas y de bytes totales del archivo.

¡¡Compártelo y disfruta!!

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

Usar varias cuentas de Dropbox a la vez

Usar varias cuentas de Dropbox a la vez puede agobiar...
  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites
Usar varias cuentas de Dropbox a la vez puede agobiar...

Muchos Dropbox pueden llegar a agobiar…

Usar varias cuentas de Dropbox simultáneamente, por la razón que sea, es todo un engorro si no sabes como hacerlo. Puede que tengas tu cuenta personal y otra del trabajo, o que necesites compartir una cuenta con otra persona para intercambiar las fotos de la despedida de soltero de tu primo el de Irún. O que tienes 17 cuentas de correo más falsas que la mula del belén con sus correspondientes cuentas Dropbox asociadas para conseguir ese pedazo de disco en la nube de 50 gigas por la cara. El caso es que es una característica que cada vez es más demandada.

Soluciones

Las soluciones a este problema se basan en ejecutar varias instancias de Dropbox a la vez, pero esto no es tarea sencilla. Por eso, de las varias maneras que he probado, sólo una me ha dado buenos resultados, y he de decir que es la mejor porque es automática en cuanto a la creación de las carpetas necesarias para que varias cuentas de Dropbox funcionen a la vez.

Este método lo he sacado de la propia wiki de Dropbox y el artículo original lo podéis encontrar aquí:

http://www.dropboxwiki.com/TipsAndTricks/MultipleInstancesOnUnix

En este artículo se describen varios métodos (Atención, válido también para usuarios de Mac) para usar varias cuentas de Dropbox simultáneamente. Básicamente lo que hay que hacer es proporcionar, cada vez que ejecutamos una instancia Dropbox, de la ruta HOME para que el demonio de Dropbox haga su trabajo. Lo que hacemos es proporcionar una ruta distinta por cada dropbox que hagamos.

Un script sencillo y potente para usar varias cuentas de Dropbox

Lo que tenéis que hacer es copiar o teclear el siguiente script en un archivo de texto y ponerle de nombre multidropbox.sh, por ejemplo.

Lo bueno de este script, como dije antes, es que si os fijáis en el bloque IF es que te crea automáticamente los directorios necesarios para que cada cuenta funcione. No se limita a dos, pueden ser (en principio) cuantas desees… con tan sólo ajustar de manera apropiada la variable dropboxes con los nombres de carpeta adecuado. Por ejemplo, imaginad que queremos usar una cuenta de trabajo, otra personal y otra ultra-secreta… pues podemos modificar la variable dropboxes así:

No os olvidéis de dar permisos de ejecución a vuestro nuevo script, por ejemplo:

Con esto, no deberíais tener problemas para usar varias cuentas de Dropbox simultáneamente… ¡¡¡o eso espero!!!

¡¡Compártelo y disfruta!!

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites