jueves, diciembre 24, 2020

¡Feliz Navidad!

Me gustaría desearos a todos una Feliz Navidad. En este extraño año que no ha tocado vivir, espero que lo podáis pasar en compañia de todos vuestros seres queridos. Tengamos también presentes a todos aquellos con los que no podemos estar por las circunstancias y a todos aquellos que se han ido para siempre.

jueves, diciembre 17, 2020

Recetas de sed (stream editor)

Recetas de sed (stream editor)

sed es un editor de flujo: Lee líneas de la entrada estándar o de un fichero, le aplica una serie de comandos especificados en un script y vuelca por su salida estándar el resultado de ejecutar dichos scripts. Esto lo hace de una sola pasada, sin necesidad de leer el fichero varias veces. Este es un pequeño resumen de alguno de los problemas y las soluciones para las que he usado el sed. Esta entrada me servirá de recordatorio, ya que no es una herramienta de la que tengo que hacer uso habitualmente.

Esta será una entrada dinámica, que iré ampliando poco a poco. Ya os digo que sed no es uno de mis comandos habituales, pero si lo uso de vez en cuando para ciertas cosas.

Índice

Opciones líneas de comando

Las opciones básicas para ejecutar sed son las siguientes:1

sef [-n] script [fichero...]
sed [-n] -e script [-e script]... [-f fichero_script]... [fichero...]
sed [-n] [-e script...] -f fichero_script [-f fichero_script] [fichero]

Añadir un texto al final de todas las líneas de un fichero

Supongamos que tenemos un fichero de texto, datos.txt , que queremos añadir al final de cada línea <br\/> - el fin de línea de html. Si el contenido es:

línea 1
línea 2
línea 3

Si ejecutamos el comando:

sed -e 's/$/<br\/>/' datos.txt

El resultado será el siguiente:

línea 1<br/>
línea 2<br/>
línea 3<br/>

El script s/$/<br\/>/ sustituye (comando s) el fin de línea ($) por <br\/>

Borrar espacios al comienzo de una línea

Supongamos que tenemos un fichero texto.txt de esta guisa y queremos borrar todas las líneas al comienzo del mismo:

     Línea 1
   Línea 2
 Línea 3

Pues esto se puede hacer con sed con la siguiente orden:

sed -e 's/^ //' texto.txt
Ojo con el espacio entre ^ y /. El resultado de la operación será:
línea 1
línea 2
línea 3

Notas

  1. Los corchetes indican que el parámetro o el argumento es opcional

miércoles, diciembre 16, 2020

Sobre la posible cancelación de la Electronic Warfare Europe en Sevilla

La Electronic Warfare Europe es una feria organizada por la Association of Old crows, centrada en guerra electrónica.Se iba a celebrar este año en Sevilla, pero hace unos días se público la noticia de que el Ayuntamiento de Sevilla había decido cancelar la misma bajo la excusa que las armas no son un buen reclamo para la ciudad..

Lo que toda la Corporación municipal de Sevilla, ya que para ellos las armas le dan mala imagen, deberían de estar pidiendo ya que Airbus desmantele la FAL del A400M y del CASA C.295 ambos aviones militares y que se montan en instalaciones situadas en dicha ciudad. Y por supuesto, Espadas, el actual alcalde está muy preocupado si las cosas le van mal a esas cadenas de montaje de aviones militares. Aparte, en esas instalaciones también se ha hecho modernizaciones y mantenimiento de los Harriers de la Armada Española, que como todos sabemos sirven para repartir caramelos.

Por otra parte, entiendo que Espadas y toda la Corporación Sevilla no entienda el valor que tiene controlar el espectro electromagnético: A lo mejor, el día que alguien use un dron para sembrar el pánico en acto público de Semana Santa o la Feria de Sevilla, lo comprenderá y consultará a los viejos cuervos para que no suceda de nuevo.

domingo, diciembre 13, 2020

Impuestos a la carga del coche eléctrico

En España, el impuesto sobre hidrocarburos recaudó 11209,9 millones de euros el año 2018. Este impuesto afecta a todo tipo de combustibles. Una de las justificaciones del mismo es que corrige externalidades negativas, en este caso, la emisión de gases por la combustión. Hay ciertas excepiones al mismo, dependiendo de su uso, pero todos los usados por automóviles, lo tienen.

Ahora, supongamos que se generaliza el uso del coche eléctrico y además, que somos capaces de generar la electricidad necesaria de fuentes renovables ( hidráulica, solar o eólica). ¿Los estados van a dejar de cobrar este tipo de impuestos?. Muchos pueden pensar que sí, pero siento decirles que se caigan del guindo: Un impuesto a la carga del vehículo eléctrico: la idea que algunos países ya están debatiendo. Simplemente, no van a rechazar a los ingresos, especialmente en algo que suele tener poca elasticidad. No va de ecologismo, va de recaudación.

jueves, diciembre 10, 2020

VMware Fusion, Linux y USB

Hoy, para arreglar un problema en una tarjeta SD formateada bajo Linux, estaba usando una Debian que corre virtualizada bajo VMware Fusion en OS X. Como tengo un Mac de los que sólo tienen USB 3.x, pues uso un adaptador de novoo que me da dos puertos USB con conectores tipo A y una ranura para la SD.

Pues el problema es que Linux no me detectaba correctamente el adaptador. Así que buscando un poco encontré la solución: Si con la máquina virtual parada nos vamos a la pantalla donde se configura el bluetooh y el USB, veremos un desplegable que es Opciones USB avanzadas. Tras poner en Compatibulidad con USB la versión 3.1, comenzó a funcionar perfectamente. Puede verse en la captura de pantalla.

domingo, agosto 09, 2020

Radioescucha desde Benicasim 2020

En los últimos años me he aficionado bastante a la radioescucha en las bandas de HF: Intentar recibir en la localización donde estoy emisoras lejanas, normalmente comerciales, aunque no descarto que alguna vez pueda pillar algunas de las expediciones de aficionados que se realizan. Uso para ello una XHDATA D.808, y la ayuda de webs como Short-Wave para localizar las diferenbtes emisoras. De vez en cuando, coge el receptor para ver que hay en las bandas de HF y voy creando mi particular libro de guardia de radioescucha, además de grabar en vídeo las recepciones. Fruto de ese proceso, esta entrada con la lista de emisoras captadas este verano. Podéis oírlas reproduciendo el vídeo.

viernes, marzo 06, 2020

Recetas de uso de jq

jq es una utilidad de línea de comandos cuya misión es procesar flujos de datos en json, con la misma facilidad y potencia que ofrecen utilidades como sed o awk para procesar ficheros de texto. El autor de tiene publicado un excelente manual (enlace a la versión 1.5) sobre como usarlo.

Esta va a ser una de esas entradas dinámicas, donde quiero ir anotando como hacer ciertas tareas con jq. Puesto que no es una utilidad que uso todos los días, no me se la sintaxis de memoria, pero de vez en cuando necesito realizar ciertas operaciones y no me acuerdo exactamente sintaxis y como hacerla. Así que he decido hacer esta entrada de recetas de uso de jq. Espero que os sirva

Índice


Modificar el valor de una clave en un array

Supongamos que tenemos un array de objetos JSON y queremos realizar cierta operación matemática con el valor de una de sus clave. Por ejemplo supongamos que tenemos el siguiente array de objetos json en nel fichero ejemplo1.json y queremos modificar el valor de cada clave "key" en cada objeto dividiéndola por 1000. Además, queremos pasar a mayúsculas el valor de la clave value. Queremos después de la operación generar un array resultante.

{
  "result": [
    {
      "time": 1000,
      "value": "Uno"
    },
    {
      "time": 2000,
      "value": "Dos"
    },
    {
      "time": 3000,
      "value": "Tres"
    }
  ]
}

Si el fichero json anterior es ejemplo1.json , se podría realizar la operación con jq de la siguiente manera:

cat ejemplo1.json | jq  -r '.result[]|{time:(.time/1000), value:.value|ascii_upcase}'| jq --slurp .

El resultado de la operación será el siguiente:

[
  {
    "time": 1,
    "value": "UNO"
  },
  {
    "time": 2,
    "value": "DOS"
  },
  {
    "time": 3,
    "value": "TRES"
  }
]


Unir varias líneas con objetos json en un array

Supongamos que tenemos un fichero donde cada línea es un objecto json válido. Por ejemplo, el fichero datos.txt tiene:

{"key": "1", "value": "val1"}
{"key": "2", "value": "val2"}
{"key": "3", "value": "val3"}

Ahora, queremos formar un sólo objeto json que sea un array y donde cada uno de los elementos sea el objecto json que está en cada línea. Pues para ello se usa la opción -s o --slurp:

jq -s < datos.txt

Y este es el resultado que se obtiene:
[
  {
    "key": "1",
    "value": "val1"
  },
  {
    "key": "2",
    "value": "val2"
  },
  {
    "key": "3",
    "value": "val3"
  }
]

viernes, enero 31, 2020

_JAVA_OPTIONS

Hasta la versión 8 del JDK de Oracle, existe una variable de entorno que permite pasar opciones a la máquina virtual java directamente (en la versión 9 del JDK , se ha procedido a documentar y estandarizar JDK_JAVA_OPTIONS). ¿Qué utilidad tiene? Poder pasar parámetros a la máquina virtual java que no se puede pasar a través de la línea de comandos, por diversos motivos. Al menos, la versión 8 del JDK va a leer el contenido de la variable del entorno y usará las opciones que se le pase durante la ejecución.

En mi caso, la uso para establecer el locale con el que va a correr toda la máquina virtual. Es muy útil, por ejemplo, cuando se están construyendo un software con ayuda de maven y queremos que todas las veces que se invoque la máquina virtual tenga ciertos parámetros, sin necesidad de modificar los pom.xml. Ejemplo:

env _JAVA_OPTIONS="-Duser.language=en_US" mvn clean install

miércoles, enero 22, 2020

Una curiosidad del netcat (nc)

Llevo la tira de años usando netcat, esa estupenda navaja suiza para enredar con todo lo relacionado con TCP/IP. También es cierto que hace algún tiempo que no desciendo a los andurriales de la captura de paquetes y tcpdump. Hace unos días estaba depurando una aplicación que recibía paquetes de syslog (normalmente UDP, puerto 514), y me encontré que recibía unas "X" no esperadas cuando insertaba comandos y tres paquetes udp más de la cuenta. Es decir algo como:

$ echo "<1>Hola" | nc -v -u 192.168.1.1 514

Si activo la captura con tcpdump (es un Mac) veo salir lo siguiente por la interfaz de red:

bash-3.2# tcpdump -n  -i en0 port 514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:44:30.342306 IP 192.168.1.53.65436 > 192.168.1.1.514: [|syslog]
00:44:30.342309 IP 192.168.1.53.65436 > 192.168.1.1.514: [|syslog]
00:44:30.342309 IP 192.168.1.53.65436 > 192.168.1.1.514: [|syslog]
00:44:30.342309 IP 192.168.1.53.65436 > 192.168.1.1.514: [|syslog]
00:44:30.343969 IP 192.168.1.53.65436 > 192.168.1.1.514: SYSLOG kernel.alert, length: 8

¿Cuatro paquetes UDP?. ¿Para mandar una simple línea?. ¿Cuál es el motivo?. Repitamos, pero ahora sin la opción -v

$ echo "<1>Hola" | nc -u 192.168.1.1 514
bash-3.2# tcpdump -n  -i en0 port 514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:51:13.207774 IP 192.168.1.53.60478 >nbsp;192.168.1.1.514: SYSLOG kernel.alert, length: 8

Es decir, ocurre por el parámetro -v. Según la página de manual, lo único que hace es dar más información.

-v      Have nc give more verbose output

Si os vais al código fuente del netcat que usa OS X - en este ejemplo el usaro es de la versión 10.14, veréis que la causa de los paquetes extras tiene que ver con el flag -v y esta función:

int
udptest(int s)
{
    int i, ret;

    for (i = 0; i <= 3; i++) {
        if (write(s, "X", 1) == 1)
            ret = 1;
        else
            ret = -1;
    }
    return (ret);
}