Skip to main content

a silhouette of a person's head and shoulders, used as a default avatar

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.

a silhouette of a person's head and shoulders, used as a default avatar

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

a silhouette of a person's head and shoulders, used as a default avatar

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

a silhouette of a person's head and shoulders, used as a default avatar

Minus, la red social con límite

Minus es una red social en la que el números de contenido que puedes compartir está limitado

Las redes sociales han cambiado muchas cosas en la sociedad occidental actual. Es sencillo compartir y comunicarse con personas con mismos intereses, aprender cosas nuevas, etc.

También es el sitio ideal para que trolls y haters campen a sus anchas y que se fomenten bulos, noticias falsas, discursos de odio, etc.

Todo eso es parte de la naturaleza humana, de lo mejor y de lo peor… y otra cualidad es la temporalidad de todo. Y cuando digo todo, me refiero a todo…

Como cantaba la gran Mercedes Sosa, todo cambia. Y como decía (no sé quién) lo único inmutable es el cambio.

Vivimos en un mundo finito, en el que la expansión y crecimiento es la bandera de los neliberales y eso está haciendo que acabemos con preciados recursos de nuestro planeta. Es una incongruencia y una insensatez.

Por eso la red social minus, propone una idea novedosa, solo te permite compartir 100 posts y después tu cuenta se cerrará. Esto es lo que dicen sobre su red social:

Minus es una red social finita en la que obtienes 100 publicaciones, de por vida. Si bien puede responder a una publicación con la frecuencia que desee, cada vez que agrega al feed, se resta de su total de por vida. Cuando llegue a 0 publicaciones restantes, eso es todo. Sin excepciones.

La alimentación es cronológica inversa, no algorítmica. Las marcas de tiempo de las publicaciones son vagas. Nada se monetiza. No hay me gusta ni seguidores ni notificaciones ruidosas. La única métrica visible del sitio cuenta hacia atrás, que muestra cuántas publicaciones le quedan a cada usuario.

¿Qué tan desorientador será interactuar en una plataforma que no intenta inducir un compromiso interminable en cada segundo de tu vigilia? ¿Qué dirás, o harás, cuando te liberes de la demanda infinita?

Al igual que la vida, Minus tiene límites. Pruébelo hoy y vea cómo se siente la interacción en línea en una red social diseñada por menos.

Esto más que una red social, supongo que quiere ser un experimento o una manera de reflexionar que más pronto o más tarde todo se termina.

Los servidores de nuestras redes sociales no son infinitos, todo lo que enviamos (comentarios, vídeos, fotos, etc) se almacenan en discos duros de servidores.

Mantener esos datos requiere recursos. Recursos de medios para almacenar (servidores, discos duros), de materias primas (silicio, tierras raras) para crear esos medios y de energía que alimente esos medios (alimentación eléctrica de los equipos y alimentación eléctrica de los medios que refrigeran esos equipos).

Ahora mismo estamos en una vorágine en la que creemos que todo es para siempre y nada se acaba… pero será duro despertar de este espejismo.

La crisis mundial de semiconductores quizás es una alerta de que esto no puede continuar por estos derroteros. Obsolescencia programada, publicidad para inocular la “necesidad” de volver a cambiar de móvil o tirar ese equipo todavía funcional por otro más novedoso y mejor (por tiempo limitado), la imposibilidad de reparación de equipos y mucho más…

También la red social minus, la veo como una reflexión de compartir por la red aquello más importante dejando a un lado aquello que no aporta nada.

Son 100 posts los que podremos compartir, deberemos pensar bien qué queremos decir. Se acabó la producción rápida y el consumo rápido de contenido, que es la tendencia actual de las redes sociales más modernas.

Un dedo preparado haciendo “scroll” de manera infinita y consumiendo sin reflexionar contenidos breves e intrascendentales que se perderán en el maremagnum de vídeos de gatos, retos cada vez más tontos, bromas sin gracia y bailes únicos que repiten miles y miles de personas.

Bueno, con la excusa de esta curiosa red social os he soltado todo este “rollo” que quizás pocas personas leerán. Muchas buscarán rápidamente un enlace, un titular, una imagen sobre la que pinchar y satisfacer así el ansia consumista…

Si tú lector o lectora del blog has recorrido estas líneas hasta llegar aquí, muchas gracias…

Imagen: Antolín
a silhouette of a person's head and shoulders, used as a default avatar

Actualización de Plasma Mobile de agosto de 2021

Parece ser que el desarrollo de Plasma Mobile, se va a convertir en una entrada recurrente en el blog. Desde que en abril realicé un artículo donde enumeraba la gran cantidad de aplicaciones básicas, las novedades de junio incorporando más aplicaciones y la actualización de julio, hoy sigo presentando la actualización de Plasma Mobile de agosto de 2021. Una buena noticia para todos los que soñamos con un móvil libre y funcional para nuestro día a día.

Actualización de Plasma Mobile de agosto de 2021

Para los que no lo conozcan Plasma Mobile es la alternativa libre a interfaz gráfica para smartphones de la Comunidad KDE, hablé de él hace un tiempo.

Su idea es muy simple, tras conquistar tu escritorio KDE también quiere conquistar tu teléfono móvil… aunque todavía lo tenga complicado.

Actualización de Plasma Mobile de agosto de 2021

No obstante, confiemos que de igual forma se han ido conquistando los ordenadores de sobremesa, portátiles y servidores, lleguemos un día que podamos tener libertad total en nuestros smartphones.

Y para cuando eso ocurra la Comunidad estará preparada para ello y por eso está confeccionando un catálogo más que decente de aplicaciones con tecnología adaptativa que se ajustarán a nuestras pantallas.

La actualización de agosto de Plasma Mobile viene cargado de novedades:, algunas de las cuales las resumo a continuación:

  • Shell: la interfaz básica de funcionamiento ha recibido múltiples mejoras, Aleix Pol arregló muchos problemas en KWin que afectaban al teclado virtual, mejorando en gran medida la fiabilidad de que aparezca en apantalla y cerrarlo cuando no se necesita. También reescribió el código de los ajustes rápidos del panel superior, poniendo en marcha la infraestructura que facilitará la creación de botones de ajuste rápido personalizados.
  • SpaceBar: la aplicación de Plasma Mobile para recibir y enviar SMS. Smitty van Bodegom ha arreglado el código de estado de los mensajes en Spacebar para que se muestre correctamente en todos los casos cuando el envío de un mensaje falla. Además, arregló un error común que era causado por el envío del número de teléfono a oFono en un formato que no entendía.
  • KWeather: Nicolas Fella hizo una refactorización importante de la aplicación, así como de la biblioteca de backend de la que depende. Han Young y Devin Lin cambiaron el gráfico del tiempo para utilizar los gráficos Qt Quick, solucionando los problemas de líneas demasiado gruesas que se representaban en el Pinephone.
  • KClock: Boris Petrov ha añadido una función que permite poner en bucle los temporizadores. Esto le permitirá establecer temporizadores en bucle indefinidamente para hacer tareas repetitivas, por ejemplo. Boris también ha añadido la opción de poder especificar comandos personalizados para que se ejecuten cuando un temporizador termine. Devin ha corregido los problemas de tamaño de las ventanas con alturas pequeñas, mejorando la experiencia en el modo horizontal en el Pinephone. También mejoró algunas de las animaciones en toda la aplicación.
  • Kasts: el gestor de podcast de Plasma Mobile además de recibir algunas correcciones de errores menores, ahora permite cambiar la ubicación donde se guardan los episodios de podcast descargados y las imágenes en caché. Estos archivos pueden ocupar mucho espacio en el disco, por lo que es bueno poder almacenarlos en otro lugar en sistemas con espacio limitado en la carpeta de inicio. La configuración relacionada muestra ahora el espacio de disco utilizado por los episodios y las imágenes, y permite borrar la caché de imágenes

Más información: Plasma Mobile

a silhouette of a person's head and shoulders, used as a default avatar

Actualización de septiembre del 2021 de KDE Frameworks

Encaramos ya la recta final de año y siguen las entradas recurrentes de las actualizaciones mensuales de rigor que demuestra que los desarrolladores de KDE no dejan de trabajar en sus librerías. Así que se congratulan en anunciar la actualización de septiembre del 2021 de KDE Frameworks.  Con esta se llega a la versión 5.86, un suma y sigue de compromiso y constancia que no parece que tenga un final cercano.

Actualización de septiembre del 2021 de KDE Frameworks

A pesar de que para los usuarios corrientes esta noticia sea algo confusa ya que no se trata de realzar una nueva aplicación ni de una nueva gran funcionalidad del escritorio, el desarrollo de KDE Frameworks tiene repercusiones directas en él a medio y largo plazo.

La razón de esta afirmación es que KDE Frameworks es básicamente la base de trabajo de los desarrolladores para realizar sus aplicaciones, es como el papel y las herramientas de dibujo para un artista: cuanto mejor sea el papel y mejores pinceles tenga, la creación de una artista será mejor.

Actualización de septiembre del 2021 de KDE Frameworks

De esta forma, las mejoras en KDE Frameworks facilitan el desarrollo del Software de la Comunidad KDE, haciendo que su funcionamiento, su estabilidad y su integración sea la mejor posible.

El sábado 11 de septiembre de 2021 ha sido lanzado KDE Frameworks 5.86, la nueva revisión del entorno de programación sobre el que se asienta Plasma 5, el escritorio GNU/Linux de la Comunidad KDE, y las aplicaciones que se crean con para él.

Hay que recordar que los desarrolladores de KDE decidieron lanzar actualizaciones mensuales de este proyecto y lo están cumpliendo con puntualmente. La idea es ofrecer pocas pero consolidadas novedades, a la vez que se mantiene el proyecto evolucionando y siempre adaptándose al vertiginoso mundo del Software Libre.

Una gran noticia para la Comunidad KDE que demuestra la evolución continua del proyecto que continua ganando prestigio en el mundo de los entornos de trabajo Libres.

Más información: KDE

¿Qué es KDE Frameworks?

Para los que no lo sepan, KDE Frameworks añade más de 70 librerías a Qt que proporcionan una gran variedad de funcionalidades necesarias y comunes, precisadas por los desarrolladores, testeadas por aplicaciones especí­ficas y publicadas bajo licencias flexibles. Como he comentado, este entorno de programación es la base para el desarrollo tanto de las nuevas aplicaciones KDE y del escritorio Plasma 5.

Actualización de agosto del 2021 de KDE Frameworks

Aquí podéis encontrar un listado con todos estos frameworks y la serie de artículos que dedico a KDE Frameworks en el blog,

Recuerda que puedes ver una introducción a Frameworks 5.0 en su anuncio de lanzamiento.

a silhouette of a person's head and shoulders, used as a default avatar

Null Amusement

Null Amusement

Been old-school-pixel-pushin' recently, for a project I'll hopefully reveal soon. But because I've also been really keen on music recently, a little side diversion happened that I'd like to share.

It started with generating some samples using the good old SXFR. It's a tiny sythesizer for generating cute oldschool chiptune/game sound effects. Sadly it doesn't exist as an app, which is a shame.

SXFR

Then it was off to Polyend Tracker, even if in this case I was sitting in front of my computer so the benefit of having a physical machine to take anywhere was sort of diminished.

Polyend Tracker

In any case the included instrument editor with all its effects and filters came handy. I exported the full song as well as a single pattern to use on the Instagram loop. This time I did no mastering at all, just plain uploaded the track to soundcloud and called it done.

As for the visuals, I've used way many more tools than you'd expect. The icon assets were mainly done in Pixaki, a fairly polished pixel editor for iPad. I have numerous beef with it for it being premium priced, mainly in the way it does layered animation, but it absolutely delivers on the immediacy and contrasts with filesystem diving of Aseprite which otherwise beats it bar none. Usually I convert GIFs exported from Aseprite or Pixaki using ffmpeg, but this time I needed to sync the animation to the sound, so I loaded up the GIF and the exported pattern from Tracker into Blender and with the sound wave preview that somehow isn't on by default, it was a quick job in the VSE.

Blender VSE

a silhouette of a person's head and shoulders, used as a default avatar

Null Amusement

Null Amusement

Been old-school-pixel-pushin’ recently, for a project I’ll hopefully reveal soon. But because I’ve also been really keen on music recently, a little side diversion happened that I’d like to share.

It started with generating some samples using the good old SXFR. It’s a tiny sythesizer for generating cute oldschool chiptune/game sound effects. Sadly it doesn’t exist as an app, which is a shame.

SXFR

Then it was off to Polyend Tracker, even if in this case I was sitting in front of my computer so the benefit of having a physical machine to take anywhere was sort of diminished.

Polyend Tracker

In any case the included instrument editor with all its effects and filters came handy. I exported the full song as well as a single pattern to use on the Instagram loop. This time I did no mastering at all, just plain uploaded the track to soundcloud and called it done.

As for the visuals, I’ve used way many more tools than you’d expect. The icon assets were mainly done in Pixaki, a fairly polished pixel editor for iPad. I have numerous beef with it for it being premium priced, mainly in the way it does layered animation, but it absolutely delivers on the immediacy and contrasts with filesystem diving of Aseprite which otherwise beats it bar none. Usually I convert GIFs exported from Aseprite or Pixaki using ffmpeg, but this time I needed to sync the animation to the sound, so I loaded up the GIF and the exported pattern from Tracker into Blender and with the sound wave preview that somehow isn’t on by default, it was a quick job in the VSE.

Blender VSE

Previously, Previously, Previously, Previously, Previously, Previously.

a silhouette of a person's head and shoulders, used as a default avatar

Quinto episodio de KDE Express «Fin de Vacaciones»

Sigo con la promoción del nuevo podcast de la Asociación sin ánimo de lucro KDE España, así que bienvenidos al quinto episodio de KDE Express llamado «Fin de Vacaciones». Escuchemos lo que nos tienen que contar.

Quinto episodio de KDE Express «Fin de Vacaciones»

Comenté hace poco que había nacido KDE Express, un audio con noticias y la actualidad de la Comunidad KDE y del Software Libre con un formato breve (menos de 30 minutos) que complementa los que ya genera la Comunidad de KDE España de forma casi mensual con sus ya veteranos Vídeo-Podcast que podéis encontrar en Archive.org, Youtube, Ivoox y Spotify)

Quinto episodio de KDE Express "Fin de Vacaciones"

Seguimos pues con sus episodios cortitos y, en esta ocasión, cargado de noticias y novedades de la Comunidad KDE, llegando al número 5 de su primera temporada que, en palabras del equipo de KDE Express, se introduce de la siguiente forma:

«

«Han vuelto, José y Brais estaban de merecidas vacaciones pero ya los tenemos por aquí para retomar una ronda de noticias de 20 minutos para empezar el curso poniéndonos al día. Hablaremos de Krita, PeerTube, Steam Deck, Gear, Kasts, puestos de trabajo, entre otras tantas cosas.

A mi me sigue gustando mucho, es rápido, directo al grano y muy dinámico, con lo cual es ideal para aquellos que les guste tener su pincelada de Kdeera en su podcaster. Evidentemente, no se profundiza en temas aunque si se da una visión muy personal de los mismos.

Así que sigo dando mi más sincera enhorabuena a José Picon, Brais Arias y a David Marzal por el esfuerzo y dedicación… y aprovecho para comentar que si alguien está interesado en colaborar (bien sea para iniciarse o bien sea porque cree que puede aportar alguna cosa) no tiene más que ponerse en contacto con ellos enviando un mail a esta dirección kde_express@kde-espana.org.

Por cierto, también podéis encontrarlos en Telegram: https://t.me/KDEexpress

the avatar of Hollow Man's Blog

Alibaba Summer of Code 2020 – Arthas Final Report

Project information

Project name

Provide a separate tutorial for each Arthas command

Project task description

Issue

There are two parts in the old online tutorial: basic and advanced

Research about the online tutorial: #742

  • Each little tutorial is a little longer, and adding new content will cause the tutorial to get longer and longer.
  • Users tend to lose patience.
  • It’s hard to find what you need.
  • More users want to see the usage of a command directly

So consider:

  • Provide a separate tutorial for each command, such as a separate tutorial for the watch command, so that many tips can be written in.
  • One tutorial per case to make it easier for users to learn to use Arthas.

What we need to:

Implementation plan

  1. Move tutorial git Repository https://github.com/hengyunabc/katacoda-scenarios to Arthas itself:

After reading katacoda’s official documentation, I added the katacoda.yaml at root in Arthas repository where I specified the katacoda tutorial is located. Then all tutorials https://github.com/hengyunabc/katacoda-scenarios have been migrated to /tutorials/katacoda/ directory.

  1. Seperate the tutorial, provide a separate tutorial for each Arthas command

Refer to https://arthas.aliyun.com/doc/commands.html . At the same time, the command and user cases in the original tutorial are integrated and classified, and the new version of Arthas tutorial is made. The structure of each command and case tutorial is as follows:

Start demo ->Start arthas-boot ->…[details on how to use each command]…

At the same time, the user case related to the command is integrated into the command tutorial, and it is placed in a separate case tutorial for users to query.

In addition, I have integrated some related special usages. Referring to https://github.com/alibaba/arthas/issues?q=label%3Auser-case , some additional cases have been produced.

  1. Update the web page
    • The new online tutorials include “Arthas Basics” and “Arthas Advanced” from the old online tutorials, which are placed in the “Tutorials” menu bar.
    • Each related command tutorial is placed in the menu by it’s classification. I also place typical user cases online tutorials in the “User Cases” menu bar.

New version menu design:

  1. Add links to the online tutorials for the official documents
image
  1. Usages

Katacoda is an interactive learning and training platform for software engineers. It can use real-world environment to learn and test new technologies in the browser to help developers learn and master best practices.

Katacoda can quickly provide a temporary environment and recycle it after use. Users can operate a complete set of environment through the browser terminal interface according to the designed guidance steps, and learn and practice step by step.

The new Arthas online tutorials provide a very convenient way to learn. You just need to open the corresponding courses, and you can follow the course instructions and complete the learning step by step according to the designed steps.

  1. First visit the online tutorial: https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en , select the course you want to study from the menu:
  2. The course introduction page will indicate the difficulty of the course and the time required to help you understand the basic information of the course. click START SCENARIO to start learning.
  3. Enter the course, the left side is the description of this step, and the right side is a ready terminal, which can be used directly. Click the black blocks on the left to execute commands in the right:
  4. Click the tab on the right to switch between terminals. Then follow the step-by-step instructions to complete the learning step by step:

Milestone review

Half of the commands and user tutorials were merged into the upstream before July 31, and all commands and user tutorials were merged into the upstream on August 14, and then it was online for testing.

Due to the large scale of this project, the completion of each command online tutorial can be regarded as a milestone node.

During the project, more than 80 PRs were sent to Arthas project, with a total increase or decrease of more than 26k lines.

During the test, the number of visits to the tutorial increased dramatically, and was well received by all the users!

  • Well received by users:
image
  • Statistics of the visit and engagement duration of the tutorials. It can be seen that after the new version of the tutorial test was launched on August 14, users and engagement duration have increased significantly:

Project summary

Project deliverables

Move Current Tutorial

#1229

fix link issues (#1235)

Adding Tutorial

User Cases
  • [X] Web Console
    • [X] Chinese
    • [X] English
  • [X] HTTP API
    • [X] Chinese
    • [X] English
  • [X] Arthas boot supported options
    • [X] Chinese
    • [X] English
  • [X] Troubleshooting method invoke exception
    • [X] Chinese
    • [X] English
  • [X] Hotswap code
    • [X] Chinese
    • [X] English
  • [X] Change Logger Level
    • [X] Chinese
    • [X] English
  • [X] Troubleshoot logger conflicts
    • [X] Chinese
    • [X] English
  • [X] Get Spring Context
    • [X] Chinese
    • [X] English
  • [X] Troubleshooting HTTP request returns 401
    • [X] Chinese
    • [X] English
  • [X] Troubleshooting HTTP request returns 404
    • [X] Chinese
    • [X] English
  • [X] The ClassLoaders in Spring Boot application
    • [X] Chinese
    • [X] English
  • [X] Find CPU usage Top N threads
    • [X] Chinese
    • [X] English
  • [X] Log the output
    • [X] Chinese
    • [X] English
  • [X] Async in Background
    • [X] Chinese
    • [X] English
Command
  • [X] cls
    • [X] Chinese
    • [X] English
  • [X] session
    • [X] Chinese
    • [X] English
  • [X] reset
    • [X] Chinese
    • [X] English
  • [X] version
    • [X] Chinese
    • [X] English
  • [X] history
    • [X] Chinese
    • [X] English
  • [X] quit-stop
    • [X] Chinese
    • [X] English
  • [X] keymap
    • [X] Chinese
    • [X] English
  • [X] cat
    • [X] Chinese
    • [X] English
  • [X] echo
    • [X] Chinese
    • [X] English
  • [X] grep
    • [X] Chinese
    • [X] English
  • [X] tee
    • [X] Chinese
    • [X] English
  • [X] pwd
    • [X] Chinese
    • [X] English
  • [X] wc
    • [X] Chinese
    • [X] English
  • [X] plaintext
    • [X] Chinese
    • [X] English
  • [x] dashboard
    • [x] Chinese
    • [x] English
  • [x] thread
    • [x] Chinese
    • [x] English
  • [x] jvm
    • [x] Chinese
    • [x] English
  • [X] sysprop
    • [X] Chinese
    • [X] English
  • [X] sysenv
    • [X] Chinese
    • [X] English
  • [X] vmoption
    • [X] Chinese
    • [X] English
  • [X] perfcounter
    • [X] Chinese
    • [X] English
  • [X] logger
    • [X] Chinese
    • [X] English
  • [X] mbean
    • [X] Chinese
    • [X] English
  • [X] getstatic
    • [X] Chinese
    • [X] English
  • [X] ognl
    • [X] Chinese
    • [X] English
  • [X] sc
    • [X] Chinese
    • [X] English
  • [X] sm
    • [X] Chinese
    • [X] English
  • [X] dump
    • [X] Chinese
    • [X] English
  • [X] heapdump
    • [X] Chinese
    • [X] English
  • [X] jad
    • [X] Chinese
    • [X] English
  • [X] classloader
    • [X] Chinese
    • [X] English
  • [X] mc-redefine
    • [X] Chinese
    • [X] English
  • [X] monitor
    • [X] Chinese
    • [X] English
  • [X] watch
    • [X] Chinese
    • [X] English
  • [X] trace
    • [X] Chinese
    • [X] English
  • [X] stack
    • [X] Chinese
    • [X] English
  • [X] tt
    • [X] Chinese
    • [X] English
  • [X] options
    • [X] Chinese
    • [X] English
  • [X] profiler
    • [X] Chinese
    • [X] English

Web Page Updating

  • [X] Part1 PR #1364
  • [X] Part2 PR #1385
  • [X] Split command menu bar PR #1414

Add Links

This part is included in the Adding Tutorial part’s PR.

Add Guides

Add guides for using and contributing (#1455)

Bug Fix

Fix intro.md Problems (#1367)

Delete all the arthas-boot.md ‘–target-ip 0.0.0.0’ boot parameter (#1359)

Fix classloaderhash Problems (#1417)

Fix typos (#1418)

Fix typos (#1419)

Fix typos (#1434)

Fix Website (#1435)

Fix displaying (#1436)

Update sc/sm Online Tutorial for classLoaderClass (#1443)

Fix ID doesn’t exist in T4 (#1451)

Fix links, typos, ‘intro.md’, ‘finish.md’ for Online Tutorials (#1453)

Add Press Q or Ctrl+C to abort for enhanced commands (#1454)

Classloader using –classLoaderClass in Advanced tutorial (#1456)

Fix typos and accessibility #847 (#1460)

Add –classLoaderClass Param PRs

Classloader support matching classloader by class name (#1428)

Optimize –classLoaderClass #1428 (#1431)

Add –classLoaderClass for sc/sm (#1433)

Add –classLoaderClass for logger (#1445)

Add –classLoaderClass for dump/getstatic/jad/mc/redifine (#1447)

Other Unmerged PRs

Split arthas-advanced to arthas-command (#2)

Arthas Online course arrangement and compilation supplement (#5)

Arthas Online course arrangement and compilation supplement (#1239)

Arthas Online course arrangement and compilation supplement —— Update web pages (#1241)

Arthas Basic Command Tutorial (#1303)

Fix typos in #1292 (#1446)

Project highlights

  1. Straightforward and convenient menu design. Commands and user cases are classified to facilitate users to retrieve certain problems or specific usage methods.
  2. Introduce the online tutorial in the official documents, which is convenient for users to click the link directly.
  3. Online tutorial can use real environment to learn and test new technology in browser, and help developers learn and master best practices.
  4. Online tutorial can quickly provide a complete set of temporary environment and recycle it after use. Users can operate the environment through the browser terminal interface according to the designed guidance steps, and learn and practice step by step.
  5. Solve the user’s trouble of too troublesome to set up own environment, not having supported environment to try Arthas and the poor operability of the documents and the difficulty of hands-on practice.
  6. The git repository of the tutorial is placed in Arthas itself so that Arthas contributors can easily find the source code location of the online tutorial and continue to contribute to it.
  7. Actively Add –classloaderclas parameter for classloader/sc/sm/logger/dump/getstatic/jad/mc/redifine, through which you can directly specify a classloader which has no duplicate name, and do not need to use c parameter to specify dynamically changing hash value of classloader, which is convenient for online tutorial writing.

Experience

Alibaba Summer of Code 2020 has greatly trained my team cooperation and communication skills, broadened my vision, and I gained a lot.

The two mentors also gave me a lot of guiding opinions during ASoC 2020, and I would like to thank them for their hard guidance 😀

Therefore, students, if you have enough enthusiasm for open source, you are recommended to participate in the future Alibaba Summer of Code activities!