Oficina Software Libre de la Universidad de Zaragoza (OSLUZ)

Después de escuchar el podcast de Mancomún sobre el «Concilio de lo Libre» y en aras de conocer un poco mejor la relación entre Software Libre y las universidades he decidido realizar una serie de artículos donde de a conocer las Oficinas de Software Libre que tenemos en España. Y sin ninguna razón en particular he decidido empezar por la Oficina Software Libre de la Universidad de Zaragoza, conocida por su acrónimo de OSLUZ y que ofrece varios servicios interesantes y que es bastante activa en iniciativas a nivel nacional.

Las oficinas del Software Libre de las universidades son departamentos de estas instituciones que tienen como objetivo general, como no podía ser de otra forma, promocionar el Software Libre.

Lamentablemente deben su existencia a que las universidades, fuera de toda lógica, no promocionan ni utilizan prioritariamente Software Libre en sus actividades, enseñanzas o procesos, así que alguien debe hacerlo y es aquí donde entran las Oficinas de Software Libre (OSL).

Existen muchas OSL en todo el territorio español y es el momento de hacer un repaso de las mismas en el blog. Espero que os guste y que, sobre todo, os anime a acercaros a ellas para realizar todo tipo de actividades.

Oficina Software Libre de la Universidad de Zaragoza (OSLUZ)

Oficina Software Libre de la Universidad de Zaragoza (OSLUZ)

Si estudias en Zaragoza y te interesa el Software Libre o quieres organizar un evento relacionado con este mundillo no dudes en ponerte en contacto con la Oficina de Software Libre de la Universidad de Zaragoza, también conocida como OSLUZ.

¿Qué ofrece la OSLUZ?

Esta oficina, y espero que alguien me corrija si estoy equivocado, tiene un buen nivel de actividad ya que:

En resumen, parece que estamos antes una OSL activa y con la que estoy seguro que se podría contar en futuros eventos.

Más información: OSLUZ

Lagrange un navegador para el protocolo Gemini

Lagrange es una interfaz gráfica multiplataforma para equipos de escritorio para navegar por los sitios que componen el Geminispace

Hace unos meses conocí el Proyecto Gemini, un proyecto comenzado en 2019 por solarpunk y respaldado por una comunidad que trata de volver a la esencia de lo que un día fue la web.

Gemini quiere ser algo más que Gopher (otro protocolo más simple y anterior) y algo menos que la web actual.

Por resumir mucho y sin ser un experto, la web comenzó con el protocolo https por medio del que equipos en red se comunicaban entre sí y servían archivos de hipertexto.

Esos comienzos sencillos y básicos han derivado en toda esta pléyade de sitios webs que conocemos y visitamos a diario. Pero mucho ha cambiado el panorama desde entonces.

Los sitios web, ahora rastrean a los usuarios recopilando mucha más información de la que podríamos pensar, las webs (algunas de ellas) también están llenas de molesta publicidad que estorba la lectura y distrae, buscando un clic para venderte algo.

Mensajes emergentes, vídeos que se ponen a reproducirse solos, advertencias de cookies, suscripciones a newsletters, peticiones de notificaciones… es un horror navegar hoy en día por la red sin un bloqueador de publicidad que remedie todo ese “ruido”.

¿Por qué no regresar a la base, a los inicios? La web actual es como una ciudad ruidosa llena de estímulos, ruido y agobiante. El Proyecto Gemini es como un paseo por el campo, disfrutando del minimalismo y la calma reposada.

El Proyecto Gemini trata de crear webs simples, escritas en un lenguaje propio, que se podría asemejar a Markdown por su sencillez y facilidad de leer.

Con Gemini se crean webs sin cookies, sin rastreo, sin código JavaScript, sin distracciones, sin imágenes, solo texto, recuperando la afición de leer aquello que queremos sin más artificios.

De manera similar a la web actual en que las direcciones url comienzan por www o https:// en Gemini las direcciones comienzan por gemini://

Y para nevegar por esas páginas es necesario un navegador especial, ya que nuestros Firefox, o similares no sirven. Aquí es donde entra en juego el navegador Lagrange para sitios Gemini.

El navegador Lagrange ofrece aquellas funcionalidades de los navegadores a los que estamos acostumbrados como un desplazamiento por la página suave, múltiples pestañas, diferentes temas visuales, fuentes Unicode, marcadores, historial de navegación y otras.

Al igual que el Proyecto Gemini, el navegador Lagrange ha sido también diseñado con ese minimalismo que ofrece el proyecto. Lagrange está escrito en C y depende de un número pequeño de librerías.

Es multiplataforma, ofreciendo binarios precompilados para sistemas operativos privativos. Y por supuesto también está disponible en los repositorios de tu distribución de GNU/Linux.

La verdad es que es un “shock” visual el encontrarse sitios de Gemini, ya que tienen ese aire retro de inicios de internet, con banners hechos con texto y una simpleza interesante.

Yo he optado por este navegador al tener que abrir enlaces Gemini. ¿Y qué sitios o blogs podemos encontrar? Pues por empezar por algún sitio, puedes hacerlo por estos agregadores de sitios Gemini:

  • gemini://caracolito.mooo.com/deriva/
  • gemini://elmau.net/hispanas.gmi

Sí, tendrás que abrir esos sitios con un navegador como Lagrange. Aquí podrás encontrar “cápsulas” (que es el nombre que se les da a los sitios Gemini) con contenido en español dentro del espacio Gemini.

Me estoy planteando abrirme una “cápsula” dentro de Gemini, pero con este blog creo que ya tengo más que suficiente para las pocas horas libre que me queda… 🙂

Alternativas a Lagrange

Lagrange es solo una opción de los clientes gráficos que existen, pero hay más:

  • Castor (Rust, GTK), uno de los más recientes. Admite protocolos Gemini, Gopher y finger.
  • GemiNaut (C#), una interfaz amigable para sistemas privativos MS Windows.
  • Kristall (C++, QT), un cliente combinado de Gopher y Gemini.

También hay clientes de Gemini para la terminal:

  • Amfora (Go), un cliente de terminal “elegante”
  • Asuka (Rust), un cliente para la terminal basado en NCurses
  • AV-98 (Python), un cliente para la terminal derivado del cliente para Gopher VF-1
  • Bombadillo (Go), un cliente combinado para Gopher y Gemini inspirado en los atajos de teclado de Vim
  • Elpher (Emacs), el cliente de Gopher y Gemini para el editor Emacs

Espero haber sembrado la curiosidad y que ahora investigues más sobre el tema. Ya conoces Gemini, el navegador Lagrange y puedes empezar a navegar por la Geminiesfera descubriendo nuevos sitios.

Enlaces de interés

Sep 16th, 2021

Chafa 1.8: Terminal graphics with a side of everything

The Chafa changelog was growing long again, owing to about half a year's worth of slow accretion. Hence, a release. Here's some stuff that happened.

High-end protocols

With existing choices of the old text mode standby and its friend, the most unreasonably efficient sixel encoder known to man, I threw Kitty and iTerm2 on the pile, bringing our total number of output formats to four. I think that's all the terminal graphics anyone could want (unless you want ReGIS; in which case, tough tty).

Moar terminals

Modern terminal emulators are generally less fickle than their pre-y2k ancestors. However, sometimes it takes a little sleuthing to figure out which extended features might be hiding behind e.g. some mysterious xterm-256color façade so we can do the right thing.

Comparison of Chafa graphics in various terminals
Chafa, friend to all terminals (sample picture mine: Las Canicas, Santa María del Tule)

Luckily, Chafa has a steadily improving handle on terminals of the Unix/GNU/Linux world. A few examples:

Of course, this is forever a work in progress and an area where I receive regular, highly appreciated contributions *chef's kiss – somehow still not an actual emoji*.

Funky lo-fi features

Øyvind Kolås (of GIMP and GEGL fame) swooped in with new builtins for the legacy computing block, meaning Chafa is now PETSCII Ready™ – or as ready as you can be with Unicode 13.0: The standard has a few annoying issues, such as not declaring any code points for the four permutations of black triangle, relying instead on existing code points in the geometric shapes block (U+25E2..U+25E5) which are typically represented by fonts as sitting on the baseline surrounded by empty space and therefore useless next to the legacy computing and block elements blocks.

Still, it's got a sweet 2×3 dot matrix (--symbols sextant) and all those nifty wedge shapes (--symbols wedge).

Symbols for Legacy Computing, excerpt
Can't not have these. Well, most of them, anyway

Øyvind also added an 8-color mode. Used together (-c 8 --symbols legacy+space), these features enable visual emulation of Teletext Level 1 and similar systems widely deployed in the late 1970s until roughly 1990 (technically into the present, albeit perhaps not so widely anymore).

PETSCII parrots rendered by Chafa
PETSCII parrots; left: full color, right: 8 colors

Somewhere along the way I discovered that Øyvind has a Patreon page – and if you're a GIMP user and/or care about the free software graphics ecosystem, you may want to read this article and consider its implications.

A bit of background austerity

I followed up in the retro vein with a foreground-only (--fg-only) modifier, which allows emulation of vintage systems that could only specify a single color per cell against a uniform background color. A popular example is the Commodore 64's standard character mode. It's also useful in terminals where block symbols don't render correctly (for example due to missing font support), since it prevents background color variation from drowning out details in low-coverage symbols used in their place. The Linux console tends to be among these due to hardware and font limitations that are somehow still in play today.

This is also how many classic ASCII art packages did things; so I guess I am once again asking you to party like it's 1999 (…and stay up all night trying to make your Napster killer render with AAlib).

ASCII parrots rendered by Chafa
Left: 16-color ASCII on black, right: same, but on light gray using --invert

When used with --fg-only, the existing --bg option has a greater impact than usual; in addition to being the fade color for alpha blending, it determines the relationship between symbols and blank space, including symbols where the background color "wins" part of a cell. A dark image on a bright background will have more high-coverage symbols that cover up the background as much as possible.

If your terminal has a bright background color, --invert is a shortcut to inverting the sense of --fg and --bg; the white-on-black default then becomes black-on-white.

Since foreground-only mode leaves the background color alone, you can easily experiment with setting it yourself, e.g:

echo -e '\033[41m'; \
chafa -c 16 --symbols ascii --fg-only --bg darkred birbs.png

Weird and wonderful forum art redux

If you read Steam reviews, you may be familiar with this guy:

Oh, hello there to you too

There are layers to this, but I'll keep it brief and simply observe that people seem to like braille. Braille is popular in this context for at least four reasons. It has:

  • A luxurious 2×4 dot matrix at your fingertips.
  • Widespread font support.
  • Consistent glyph width even in variable-width fonts.
  • A special blank symbol (U+2800 BRAILLE PATTERN BLANK) for consistent spacing.

Chafa's supported this kind of output for a long time (-c none --symbols braille), but in some circumstances it could replace cells having identical foreground and background colors with a hardcoded U+0020 as an optimization. This could result in inconsistent spacing, making braille (and probably other symbol combinations) less useful. Fortunately the issue is now a thing of the past; the latest version will instead use a visually blank symbol from the user's symbol set, falling back to the lowest-coverage symbol it can find.

The GPL doesn't regulate netiquette: Please use for good, or in extreme cases, awesome.

The ever elusive practical application in the wild

hb-view screenshot
حرف‌باز

It's good to be useful. Neofetch was the first project to avail itself of Chafa's incredible power, and the latest is HarfBuzz' hb-view. And – er – I think that's all of them. For now!

⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣶⣄⣀⡀
⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣄⣀⡀⣠⣾⡇
⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⢿⣿⣿⡇
⣶⣿⣦⣜⣿⣿⣿⡟⠻⣿⣿⣿⣿⣿⣿⣿⡿⢿⡏⣴⣺⣦⣙⣿⣷⣄
⣯⡇⣻⣿⣿⣿⣿⣷⣾⣿⣬⣥⣭⣽⣿⣿⣧⣼⡇⣯⣇⣹⣿⣿⣿⣿
⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠸⣿⣿⣿⣿⣿⣿

Tuxedo se convierte en patrocinador de KDE

Como buen blog sobre KDE me tengo que hacer eco de esta noticia que es importante para conocer un poco mejor como funciona la fundación KDE y cómo seguir constatando que poco a poco más y más empresas creen que la colaboración con el Software Libre. Este aspecto es algo que beneficia a todos y todas. Así que me congratula comentar que Tuxedo se convierte en patrocinador de KDE, en otras palabras, una nueva voz con voto en el desarrollo del proyecto KDE.

Tuxedo se convierte en patrocinador de KDE

Ayer 14 de septiembre se ha anunciado que KDE tiene un nuevo patrocinador. Se trata de Tuxedo una empresa que se dedica a vender portátiles con sistemas GNU/Linux y que se une al elenco de empresas que se suman al carro de colaborar de forma estrecha con la Comunidad KDE.

Tuxedo se convierte en patrocinador de KDE

En palabras de Herbert Feiler, CEO de TUXEDO Computer:

«Nuestros portátiles Linux personalizados (para el trabajo o el ocio) están equipados con KDE Plasma, lo que se traduce en una respuesta positiva por parte de nuestros clientes. Además, realizamos nuestro propio trabajo de desarrollo, lo que podría beneficiar a KDE […]. Estamos encantados de compartir nuestros conocimientos y nos gustaría asegurar y ampliar el trabajo de desarrollo de KDE a largo plazo. Los comentarios que recibimos de los clientes también pueden fluir directamente en el trabajo de desarrollo de KDE»

Por otra parte Aleix Pol, Presidente de KDE e.V., comenta:

«Para KDE, llegar y servir a los usuarios finales es parte de nuestra razón de ser y TUXEDO puede ser un gran aliado en este empeño. Juntos, conseguiremos ampliar nuestras fronteras y crear sistemas y herramientas para servir mejor a nuestros usuarios. Es especialmente alentador ver el compromiso de TUXEDO de unirse a nuestras comunidades de desarrollo y colaborar para que los productos de KDE sean mejores para todos.».

De esta forma, Pine64 se une a otras compañías en su alianza con KDE: The Qt Company, SUSE, Google, Blue Systems, Canonical, Private Internet Access, enioka Haute Couture, Slimbook y Pine64 para continuar apoyando el Software Libre y el desarrollo de los proyectos KDE a través de KDE e.V.

Más información: KDE.News

Sep 15th, 2021

Curso de Vim: Eliminar las líneas que contengan un texto en #Vim

Un pequeño tutorial del editor Vim para eliminar en un texto las líneas que contengan una cadena de texto determinado

Este es un rápido tutorial en el que veremos un caso práctico (que me ha pasado a mí mismo) para borrar todas las líneas de un texto que contengan una cadena de texto específica.

Este artículo es una nueva entrega del curso “improVIMsado” que desde hace meses vengo publicando en mi blog sobre el editor Vim y que puedes seguir en estos enlaces:

Y para aprender Vim (de la manera más inteligente) aquí tienes esta útil guía:

La cuestión es que tenía un archivo de unas 300 líneas con un texto en inglés y otro traducido en español. Las líneas en inglés comenzaban con (EN) y las líneas de texto en español comenzaban con (ES). Algo similar a esto:

(EN) Lorem ipsum dolor sit amet
(ES) consectetur adipiscing elit
(EN) sed do eiusmod tempor incididunt
(ES) ut labore et dolore magna aliqua
...

Lo que necesitaba era eliminar del texto todas las líneas que comenzaran con (EN). Asi que para esto eche mano del comando global del editor Vim.

Pincha sobre el enlace para saber más sobre el comando, pero en resumen te puedo decir que tiene el siguiente formato:

:g/patrón/comando

El comando global de Vim busca todas las líneas que contengan el patrón y realiza el comando que le pasamos.

En este caso, quiero que busque todas las líneas que comiencen con el texto (EN) y elimine la línea en cuestión. Para ello ejecutaré el siguiente comando:

:g/^(EN)/d

Diseccionemos el comando:

  • :g/ → es el comando global
  • ^(EN) → busca las líneas que comiencen (para eso es el símbolo ^) con (EN)
  • /d → es el comando que se ejecutará, que en este caso es eliminar la línea

El comando puede ser cualquiera que necesitemos, sustituir una palabra, convertir en mayúscula, etc…

Otra opción de comando, sería borrar todas las líneas que NO contengan la cadena buscada, para eso se utiliza el símbolo ! Y comando sería este:

:g!/^(ES)/d

Con o que borraría todas las líneas que NO comienzan con (ES), por lo que en mi caso eliminaría todas las que comienzan con (EN) que es lo que quiero. Sería similar a ejecutar esto:

:v/^(ES)/d

Y hasta aquí este pequeño tutorial que ha nacido de una necesidad propia y que quería compartir en el blog. ¿Te interesan estas pequeñas “perlas” breves sobre Vim?

Estrategia en GCompris – A fondo @g_compris (15)

Finalizo la serie de que inicié inspirado por una publicación de Valencia Tech en la que se realizaba un listado completo de juegos que ofrece GCompris. Para concluir cierro con la sección de «Estrategia» en GCompris, la cual complementa las actividades de juegos de la suite educativa.

Estrategia en GCompris – A fondo @g_compris (15)

Para poder tener claro lo que hacen las aplicaciones de GCompris he pensado hacer una revisión a su enorme colección de juegos y actividades, realizando una simple captura de pantalla y una breve descripción.

Ya hemos descrito la secciones de:

Y ya es hora de hablar de la actividades de la sección «Estrategia» de GCompris donde nos encontramos con miniaplicaciones pensadas para desarrollar nuestro raciocinio.

Juegos de mesa contra Tux o contra tu amigo: intenta no colocar una ficha en la casilla roja decidiendo cuantas pones antes. Juego más complicado de lo que parece.

Estrategia en GCompris – A fondo @g_compris (15)

Cuatro en raya contra Tux o contra un oponente humano: clásico y adictivo juego donde debes alinear 4 fichas de tu color.

Estrategia en GCompris – A fondo @g_compris (15)

Juego del Molino contra Tux o contra un amigo: No conocía este juego, pero según leemos en la Wikipedia: cada jugador dispone de nueve piezas, u «hombres», que se mueven en el tablero entre veinticuatro intersecciones. El objetivo del juego es dejar al oponente con menos de tres piezas o sin movimiento posible.

Estrategia en GCompris – A fondo @g_compris (15)

Tres en raya contra Tux o contra un oponente humano: clásico juego donde debes alinear 3 fichas de tu color para ganar. Elemento fundamental del clásico del cine Juegos de Guerra.

Damas contra Tux o contra un oponente humano: Otro clásico con los que afinar tus dotes estrategas.

Estrategia en GCompris – A fondo @g_compris (15)

Ajedrez contra Tux o contra un oponente humano: ¿qué se puede decir de este juego milenario?

Estrategia en GCompris – A fondo @g_compris (15)

Final de partida de ajedrez: soluciona los típicos problemas de ajedrez que suelen aparecer en los periódicos.

Colores avanzados: aprende los colores más complejos, pon a prueba tu agudeza distinguiendo matices.

Colores avanzados: aprende los colores más complejos, pon a prueba tu agudeza distinguiendo matices.

Y, con esto, queda finalizado el repaso de GCompris, una suite educativa espectacular, funcional, variada y en constante desarrollo.

What I learned from Russian students: logging is important

When I published my blog about openSUSE a couple of weeks ago, most questions I received in private were about the Russian students I mentioned. In that blog I quickly described how my interest in information security started, about 25 years ago. This blog gives you a bit of historical background and a few more details.

Historical background

It was 1995. I was studying at a university, but I was already running one of the servers of the faculty. It was a Linux box, and I also helped to run a FreeBSD server hosting the faculty web server. It was just three years after the Soviet army finally left Hungary. Our university had many students from Russia. While Hungarian students could attend the university for free, Russian students had to pay for their studies. As they were paying a lot, they could do anything, nobody punished their activities. And they did a lot of things, as they felt that they can still do anything in the ‘colonies’.

It was 1995, there was no Internet yet in the student dormitories. There was no Gmail, or any similar provider yet. Not even teachers received e-mail addresses automatically. Even if some people had computers at home, there was no Internet access yet from homes. Students could access servers from computer labs at the university. The Russian students had their own computer lab, where nobody else was allowed to enter.

It is 1995, the fifth consecutive year that funding was taken away from higher education. Which meant that faculties started to ask money from other faculties for their services. Russian students belonged to another faculty, so they could not get a user name on our servers.

Infosec is overrated

By that time even if I was running a couple of servers, I was just the same as the vast majority users even today. I mean, I thought that information security is overrated, ease of use, comfort are a way lot more important. It did not help either, that most of the commonly used protocols were not encrypted, like telnet, ftp, rsh and others. Even these protocols were often difficult to use from Windows machines. I was learning Linux and FreeBSD, and I was enabling all kinds of services. Using rsh between the two faculty UNIX servers was fun.

Logging is important

I checked the logfiles of the servers I managed occasionally, but mostly only to check if the hard drives were showing any signs of failure. While browsing the logs for hard drive errors, I came across some suspicious login messages. Logins from previously not seen unknown IP addresses. I knew that the addresses were from campus, so I asked around. It turned out, that they belonged to the Russian students laboratory. And talking to the user it turned out, that he was unaware that his account was used also by someone else.

The exact order of events is a kind of blurry, it was a quarter of a century ago. I started to check log messages not just for hard drive problems but also for security related events. I could see more and more logins from the Russian students laboratory. It was a kind of cat and mouse game, I was trying to keep unauthorized users out of the system. They kept coming back and started to do nasty things. Along the way I learned a lot about security:

  • Network sniffing: most of the university had a BNC network and was using hubs instead of switches. Combine these with non-encrypted protocols…
  • Keyboard loggers
  • Black market. Access for students of our faculty was free, they just had to ask for it. Sometimes minutes after they received access, there was a login from the Russian lab. Accounts on my servers had a good price…
  • Denial of Service: they tried all kinds of DoS attacks, like fork bombs, too many logins, etc.
  • Stepping stone for further attacks, so I got some not so kind e-mails asking for explanation

Turning on a firewall could have been an easy way out, but seeing the IP addresses of the Russian lab in the system logs was the perfect indicator of compromise for an account. The account got quickly disabled, either for life (see black market) or until a password change. In the second case I tried to investigate, how the password was stolen. And of course gave a quick education on security awareness. Showing my log messages I tried to ask for some help to stop the Russian students, but as I was just a first year student and Russian students were paying: nobody cared.

Next steps

After so many years I do not recall any more how I got the hint, but I was suggested that I visit the Russian students computer lab. I was not supposed to enter there, but as they were messing with my servers, I did not care. The door was open, I walked in and looked around. The /etc/passwd file of my Linux box was printed on the wall. Even if encrypted, but it contained the passwords. As also described in my openSUSE blog, this was a final push towards information security.

FreeBSD already had passwords separate from the user readable passwd file, so I knew the concept. I looked around and found that the Linux distribution called Jurix had shadow passwords. It was a brand new thing in the Linux world at that time. I quickly migrated my Linux server to Jurix and did all kinds of hardening along the way. I removed all non-essential services, like rsh. Even if most users kept using telnet and other insecure services, I started to use SSH, which was just released.

When Russian students realized that they cannot get into my servers easily any more, they even tried to bribe me for access – with a counterfeit gaming CD for Windows :-)

Epilogue

As you can see, I ended up on the defender side. I did lots of security hardening and built systems that ran securely even years after I abandoned them. Logging still takes an important role in my life: I work with syslog-ng. Russian students were a major PITA at that time, but I learned a lot about security while I was trying to keep them out of the servers I managed.

Sep 14th, 2021

El comando wc de #GNU

Veamos qué puede hacer y cómo se usa el comando wc de las herramientas coreutils del sistema GNU

Los comandos de GNU coreutils son las herramientas básicas de nuestros sistemas GNU con kernel Linux similares a las de sistemas Unix, para gestionar desde la línea de comandos el sistema y operaciones con archivos de texto.

En este caso vamos a repasar las opciones del comando wc que sirve para contar las líneas, caracteres y palabras de un archivo u archivos, para utilizarlo en nuestra consola o incorporarlo a nuestros scripts.

En muchos sitios quizás habréis leído sobre este comando que lo que hace es contar el número de líneas de un archivo (o archivos) ¿verdad? ¡Pues es falso! o al menos no es correcto del todo.

El comando cuenta los caracteres de líneas nuevas de un archivo, normalmente representado por \n, además de también contar, palabras y caracteres.

¿Y por qué esa distinción entre líneas y caracteres de nuevas líneas? Vayamos por pasos y poco a poco.

El símbolo $ delante del comando, no es parte del comando y no hay que escribirlo, esto significa que el comando es ejecutado por un usuario sin privilegios de root.

Contador de saltos de línea en un archivo

Para empezar vamos a crear un archivo (sin un salto de línea \n al final del archivo) mediante este comando:

$ echo -n "este archivo tiene 5 palabras" > archivo

Si ahora ejecutamos el comando cat para mostrar el contenido del archivo veremos lo siguiente:

$ cat archivo
este archivo tiene 5 palabras

Como he dicho el comando wc cuenta el número de líneas, el número de palabras y el número de caracteres y los saca por la salida estándar que en este caso sería mostrarlos por pantalla en ese orden junto con el nombre del archivo.

En este caso debería mostrar que el archivo tiene 1 línea, 5 palabras y 29 caracteres ¿no? Veamos qué sucede al ejecutar el comando

$ wc archivo
0 5 29 archivo

Nos dice que no tiene ninguna línea y sí 5 palabras y 29 caracteres. Sucede esto, porque hemos creado el archivo con el comando echo pero sin salto de línea final.

Veamos la diferencia, volviendo a crear el archivo con el comando echo, pero ahora de esta manera (lo que haríamos de manera normal):

$ echo "este archivo tiene 5 palabras" > archivo

A priori el archivo sería igual y si volvemos a mostrarlo con el comando cat, no veríamos ninguna diferencia, pero sí las hay si volvemos a ejecutar el comando wc anterior:

$ wc archivo
1 5 30 archivo

Ahora nuestro archivo sí tiene un salto de línea al final de la única línea que contiene y como verás también ha sumado 1 al contador de caracteres, ya que ahora ese caracter de salto de línea es tomado como tal en la cuenta.

Al editar archivos con un editor de texto, este automáticamente suele añadir esos saltos de línea al final de cada línea.

Palabras para wc

¿Y a qué se refiere una palabra cuando hablamos del comando wc? Una palabra es una secuencia de caracteres delimitadas por espacios en blanco (saltos de línea, tabuladores, etc). Veamos un ejemplo:

$ echo "¿Esto son (¡5 palabras!)?" > archivo
$ wc -w archivo
4 archivo

El contador de palabras del comando wc (más adelante veremos cómo mostrar solo las palabras de un archivo) nos dice que este archivo tiene 4 palabras, para el comando wc los signos de puntuación son irrelevantes.

Vamos a modificar esto añadiendo algunos espacios en blanco para “crear” más palabras para el comando wc:

$ echo "¿Esto son ( ¡5 palabras! ) ?" > archivo
$ wc -w archivo
7 archivo

El añadir más espacios en blanco a los espacios en blanco, no aumenta el número de palabras encontradas:

$ echo "¿Esto son (    ¡5 palabras!     )    ?" > archivo
$ wc -w archivo
7 archivo

Bueno, la introducción ha sido un poco larga, pero me parecía interesante dejar claro el concepto antes de continuar viendo más opciones del comando.

wc con varios archivos

El comando puede ser ejecutado pasándole varios archivos a la vez y mostrará las sumas de líneas, palabras y caracteres mas el nombre del archivo de cada uno de ellos y además un total con la suma de todos. Por ejemplo, en mi caso:

$ wc archivo1 archivo2 archivo3                                       
  1   5  30 archivo1
  4   8  36 archivo2
  4   8  36 archivo3
  9  21 102 total

Filtrando qué muestra el comando wc

Pero quizás no queremos que nos muestre toda esa información porque para nuestro script o nuestra necesidad solo queremos que muestre uno o varios de esos valores, para ello le podemos decir al comando wc qué valor queremos que nos muestre con estas opciones:

  • -c → muestra el valor de bytes del archivo
  • -m → muestra el valor de caracteres del archivo
  • -w → muestra el valor de palabras del archivo
  • -l → muestra el valor de líneas (ya sabes caracteres de nueva línea \n) del archivo

Los valores no son excluyentes, es decir, especificar un valor no elimina que se muestre otro y siempre se mostrarán en orden de líneas, palabras y caracteres, por ejemplo podemos utilizar cualquiera de estos comandos para mostrar los números de lineas y palabras del archivo:

$ wc -wl archivo
$ wc -w -l archivo

Mostrar el valor de la linea mas larga con wc

Otra funcionalidad interesante del comando wc es la de mostrar el valor del número de caracteres de la línea mas larga del archivo con la opción -L

Si especificamos varios archivos, mostrara el valor de la linea mas larga de cada archivo y un total que no es tal, ya que no es la suma de todos los valores, si no el valor mas grande de todos los mostrados:

$ wc -L archivo1 archivo2 archivo3                                       
  30 archivo1
  8 archivo2
  42 archivo3
  42 total

Omitir el nombre del archivo en la salida del comando wc

Al usar este comando, en la salida del resultado nos muestra el nombre del archivo, si queremos utilizar este comando en un script, quizás esa información no nos interesa, por lo que tendríamos que procesar la salida para eliminar el nombre del archivo.

Pero existe una manera para hacer que no se muestre directamente el nombre, utilizando la redirección. El comando muestra el nombre cuando es una opción del comando en la línea de comandos, pero no cuando proviene de la entrada estándar (el teclado) u otra fuente y eso es lo que haremos

Usando el redireccionamiento con <

$ wc -w < archivo
7

Usando la entrada estándar

Hasta ahora hemos visto que el comando wc de GNU cuenta el número de líneas, palabras y caracteres de un archivo o archivos, pero también puede hacerlo de las palabras que introduzcamos desde el teclado con la opción –

Usando la entrada estándar (para acabar de introducir texto usaremos la combinación de teclas Ctrl+d):

$ wc -w -
Introduciendo texto
desde el teclado
(Ctrl-d)
5 -

Y estas serian las opciones mas interesantes del comando wc de GNU. ¿Conocías el comando y su uso? ¿Te parecen interesantes estas series de artículos? Usa los comentarios para comentar sobre ello.

opensource.com: What was your first programming language?

A couple of weeks ago editors of https://opensource.com/ sent a question to contributors: What was your first programming language? Thinking about the question brought back some nice memories about the beginnings. You can read my answer below:


What was your first programming language?

My first ever programming language was BASIC in the early eighties. One of my relatives bought a C64 for their kids to get started with learning computers. They only used it for gaming, and I was also invited. But they also had a book about BASIC, and I was curious and gave it a try. I wrote some short code, I did not even know how to save it, but it was exciting to see that the computer does what I say to it. This means that I was not paid to learn it, and it was not my choice. It was the language available to me. Obviously, when I got my first computer a few years later, an XT compatible box, I first wrote some code in GW-BASIC, the dialect of BASIC available with DOS.

What happened next?

The first time I really choose a programming language was Pascal. I asked around, checked some books, and it seemed to be a good compromise between features and difficulty. First, it was Turbo Pascal, and I coded all kinds of simple games and graphics in it. I loved Pascal, so in my university years, I even used it (well, FreePascal and Lazarus) for measurement automation and modeling how pollution spreads in groundwater.


You can read the rest of the answers at https://opensource.com/article/21/8/first-programming-language

The syslog-ng insider 2021-07: Alerting; CentOS alternatives; MongoDB;

Better late than never I just put online the July syslog-ng newsletter. Topics include:

  • Sending alerts to Discord and others from syslog-ng using Apprise: blocks and Python templates
  • Rocky Linux, AlmaLinux, CentOS & syslog-ng
  • MongoDB support improved in syslog-ng 3.32

It is available at https://www.syslog-ng.com/community/b/blog/posts/insider-2021-07-alerting-centos-alternatives-mongodb