Blog de programación, donde ademas de encontrar pequeños programas en C# tambien publicaré pequeñas ayudas para SQL Server

Vladimir Miranda - vladivirus666@gmail.com. Con la tecnología de Blogger.

miércoles, 16 de mayo de 2018

Herramientas de Línea de Comando para Desarrolladores


En el mundo en línea de hoy, la batalla para atraer a los usuarios continúa con furia, con los fabricantes de aplicaciones que prefieren aplicaciones móviles o web. Las aplicaciones de escritorio son cada vez menos relevantes. Por otra parte, también tienden a ser nada más que clientes ricos de aplicaciones web: Electron es la plataforma popular de elección.

¿Significa esto que pronto abandonaremos el escritorio como plataforma? No, por supuesto que no, yo no diría eso. Además, aunque las aplicaciones GUI parecen haberse estancado recientemente, hay un segmento de aplicaciones de escritorio que continúa creciendo.

¿Alguna vez has visto alguna película con hackers? La mayoría de las veces, estas personas se muestran trabajando frente a monitores que muestran algún tipo de terminal (generalmente con un fondo oscuro y un primer plano claro). Esta terminal, a su vez, tiende a estar inundada de caracteres que aparentemente tienen algún significado para la persona que los lee.

Ilustración: las herramientas de línea de comando y el hackeo se ven más frescos en las películas que en la vida real

Tales representaciones de hackers en acción a menudo son burladas por desarrolladores profesionales, e incluso hay algunos programas que simulan varios efectos de “hackers”, solo por diversión.

Sin embargo, en el mundo real, las herramientas de línea de comandos no se utilizan por su valor de entretenimiento.

Por qué todavía utilizamos las herramientas de interfaz de línea de comandos

Este artículo se centra en el aspecto práctico del uso de herramientas de interfaz de línea de comandos (CLI). Conocer los comandos de la CLI y usar herramientas de calidad puede hacerlo más productivo y también pueden abrir las puertas a varios enfoques de la automatización que son mucho más prácticos con las interfaces textuales que con las aplicaciones GUI.

Puede mejorar al realizar tareas repetitivas en GUI, hasta el punto de que sus múltiples clics se escuchen como uno solo. El problema es que esto no mejorará la eficiencia de un script especializado. Además, realizar las mismas operaciones de forma manual introduce tanto una carga cognitiva adicional como una mayor posibilidad de error humano. Como de costumbre, dependemos de computadoras para manejar tareas que los humanos pueden considerar aburridas, repetitivas o abrumadoras.

Vale la pena saber que una herramienta de terminal puede ofrecer varios tipos de interfaces. Hay elementos no interactivos como ls, que simplemente toman los parámetros y proporcionan la salida. Existen interfaces interactivas o semi interactivas que se encuentran con mayor frecuencia en los gestores de paquetes. (“¿Está seguro de que desea continuar con la instalación desde un origen no verificado?”) Luego, hay interfaces de usuario textuales (TUI), que son aplicaciones de GUI interactivas diseñadas para ajustarse a las limitaciones de una terminal. Probablemente el más famoso es Midnight Commander (mc), un clon extremadamente popular (de los años 90) Norton Commander.

Herramientas esenciales de la línea de comandos

Si deseas convertirse en un habitante de la consola, debe equiparse con un conjunto mínimo de herramientas de desarrollo de línea de comandos: lo esencial. Las cosas con las que definitivamente no puede vivir son una shell interactiva (apunta a algo moderno con una conveniente terminación de pestañas) y un editor de texto.

Ilustración: herramientas de línea de comando esenciales

Ahora, mencionaré UNIX philosophy, que a menudo es la base de las decisiones de diseño tomadas por los autores de la herramienta, ya sea conscientemente o no. Algunos de los puntos clave se pueden resumir de la siguiente manera:

  • Trata todo como un archivo.
  • Haz una sola cosa, pero hazlo bien.
  • Leer desde entrada estándar, escribir en salida estándar y comunicar errores a un flujo de error estándar.
  • Cuando haya tenido éxito, devolverá el código 0. Un valor distinto de cero significa un error (que puede especificarse mediante el código de retorno exacto).
  • Permitir encadenamiento de comando y scripting.

Cáscara

Lo primero que verá al abrir una terminal es un shell. Esta es la parte que hace posible la interacción entre el usuario y la máquina. Interpreta tus comandos, los divide en nombres de programas y argumentos, y ejecuta todos los comandos de shell que le arrojas.

Históricamente, ha habido muchos tipos diferentes de shell. Entre los más populares se encuentran csh (C Shell) y varias implementaciones de Bourne Shell (generalmente conocido simplemente como sh). Bourne Shell se extendió a Korn Shell, que también ganó algo de tracción y todavía está siendo utilizado por sus entusiastas. Csh es actualmente el shell predeterminado en algunos sistemas BSD, mientras que casi todos los demás sistemas operativos tipo UNIX prefieren algún tipo de Bourne Shell. Las distribuciones de Linux tienden a favorecer bash mientras que Mac OS X viene con zsh como la opción predeterminada.

Existen otras posibilidades, pero son mucho menos populares, excepto Microsoft PowerShell en sistemas Windows. PowerShell está inspirado en parte por los shells interactivos de UNIX como zsh y en parte por .NET runtime. En lugar de tratar todo como texto, un concepto común en el mundo UNIX, permite la manipulación de datos orientada a objetos.

Aunque Microsoft PowerShell es bastante popular en el ámbito de Windows, muchos programas con orígenes de UNIX (los más notables son Git, Autotools o Make) tienden a preferir alguna variación de Bourne Shell. Debido a esto, han nacido proyectos como msys (incluido con Git para Windows), Cygwin, o el reciente [WSL] de Microsoft. Si deseas una sensación similar a Linux en Windows, MSys es la mejor opción aquí. Si desea un entorno Linux con todas las funciones capaz de ejecutar binarios estándar de Linux, entonces WSL es el camino a seguir. Para algo intermedio: API de UNIX, pero compilada como un ejecutable de Windows (solo úsala cuando realmente sepas por qué la necesitas) -Cygwin es la respuesta.

Editor

Una vez que te familiarices con tu shell, querrás adquirir algunas habilidades útiles. Como la mayoría del trabajo de codificación gira en torno a la escritura de texto (código, README, mensajes de confirmación), un buen conocimiento de los editores de texto interactivos es esencial. Hay muchos para elegir, y dado que un editor es una de las herramientas más necesarias para cualquier desarrollador, probablemente haya tantas opiniones sobre cuál editor es el mejor.

Ilustración: un editor de línea de comandos tiene una interfaz simple

La mayoría editores de texto populares pueden separarse en dos grupos básicos: Editores de texto simple y editores de texto programables.

Ambos pueden ser excelentes para escribir código, pero, como su nombre lo indica, los programables ofrecen la capacidad de dar forma y personalizar el editor para que se ajuste perfectamente a sus necesidades. Sin embargo, esto tiene un precio, ya que también tienden a tener una curva de aprendizaje más pronunciada y pueden requerir más tiempo para establecerse.

Editores de texto básicos

Entre los editores de texto simple, GNU Nano es el más extendido. En realidad, es un clon del editor pico, por lo que si uno no está disponible en su sistema, puede probar el otro. Otra alternativa más moderna para ambos es el editor micro. Si quieres algo simple y extensible al mismo tiempo, este es un buen lugar para comenzar.

Editores de texto programables

Muchos desarrolladores dependen de editores programables de diferentes campos, como Vim y GNU Emacs. Ambos editores pueden ejecutarse en la consola o en modo GUI, y ambos tuvieron un impacto en los enlaces de teclas encontrados en otro software. Ambos ofrecen no solo una API sino también lenguajes de programación reales incorporados. Emacs se centra en LISP y Vim usa su propio VimL, ​​pero también ofrece interfaces con otros lenguajes de scripting populares (como Lua, Perl, Python o Ruby). También vale la pena mencionar un enfoque más reciente de Vim, llamado Neovim, ya que está empezando a recibir seguidores serios.

Puede ser algo confuso, pero también hay un editor llamado vi que es un predecesor de Vim (que, dicho sea de paso, significa “Vi mejorado”). Es mucho más simple que Vim, pero si tienes suficiente confianza para escribir en Vim, no debería ser un desafío para ti si te resulta necesario usar vi.

Dado que pico/GNU Nano y vi/Vim generalmente están preinstalados en varios sistemas, es una buena idea al menos comprender sus conceptos básicos (salir de Vim es un problema notoriamente difícil para los principiantes). De esta manera, si necesita editar algo en una máquina remota, estará listo independientemente de qué editor ya esté allí. En su dispositivo privado, puede usar cualquier editor que le resulte más cómodo.

Editor de sistema predeterminado

Una última cosa a tener en cuenta es que su sistema puede tener lo que se llama un editor predeterminado.

La variable de entorno $ EDITOR apunta al editor predeterminado y en los shells compatibles con Bourne (sh, bash, ksh, zsh) puede verlo ingresando echo $ EDITOR. Si el valor difiere de su elección personal, puede configurarlo agregando export EDITOR = my-awesome-editor a la configuración en tiempo de ejecución de tu shell ( ~ / .profile, ~. / Bashrc, ~ /. zshrc, y así sucesivamente).

Otros programas, como los sistemas de control de versiones y los clientes de correo, usarán este editor cuando necesiten una entrada de texto más larga.

Multiplexor

Tan pronto como comiences a hacer cosas serias en CLI, te encontrarás con la limitación de poder mantener abierta solo una aplicación en un momento dado. Al codificar, es posible que desee editar el código, ejecutarlo, corregir los errores y ejecutar nuevamente. Al buscar un error, es posible que desee enumerar los registros y ver qué se registra cuando envía una solicitud al servidor. Normalmente, esto significa cambiar constantemente entre las dos aplicaciones o abrir varias ventanas de terminal.

Aquí es donde un multiplexor de terminal puede ayudarte. Cuando se habla de multiplexores, algunas personas asumen inmediatamente que el tema es de Pantalla GNU. Fue la primera herramienta extendida de su tipo y sigue siendo muy popular hoy en día (a menudo se instala por defecto). Su reemplazo moderno es tmux que, como era de esperar, significa “terminal multiplexer.”

Estos dos le permiten tener más de una ventana abierta en una sesión de terminal determinada y cambiar entre esas sesiones libremente. Permiten dividir las ventanas en paneles, lo que ayuda a ejecutar varias aplicaciones al mismo tiempo y observar su salida en tiempo real (sin cambiar las ventanas). Además, funcionan en modo cliente-servidor, lo que significa que puede separarlos en cualquier momento dado y regresar más tarde para continuar el trabajo justo donde lo dejó. Esta última característica llevó a la popularidad de Screen cuando las personas querían sesiones persistentes IRC.

Para la mayoría de los casos de uso, GNU Screen o tmux deberían ser geniales para ti, pero si por alguna razón consideras que son demasiado pesados ​​en recursos, también hay alternativas más ligeras. Hay dtach / atach y está abduco. Tienen un alcance limitado a propósito, pero pueden realizar bien sus respectivos deberes.

Administrador de paquetes

En este punto, puede comenzar a pensar en instalar todo el software antes mencionado en su máquina. Un problema es que cada una de las herramientas tiene instrucciones de instalación diferentes. A veces, necesitas descargar fuentes y compilarlas tú mismo, a veces obtienes el binario autónomo, y algunas veces obtienes lo que se llama paquete binario, que generalmente significa un ejecutable comprimido junto con algunos metadatos.

Para facilitar el proceso de instalación de software, los creadores de sistemas operativos llegaron con el concepto de administradores de paquetes. En pocas palabras, un administrador de paquetes es como una tienda de aplicaciones para CLI y aplicaciones de escritorio. Precede a las tiendas de aplicaciones reales por algunas décadas. El problema es que casi todos los sistemas tienen su propio administrador de paquetes. Debian, Ubuntu y las distribuciones derivadas de GNU / Linux usan APT, las distribuciones basadas en Red Hat prefieren yum o DNF, otras distribuciones de Linux tienen medios más exóticos para instalar software y también lo hacen los diferentes clones de BSD. Además de los administradores de paquetes integrados, también hay instalados por el usuario como Chocolatey para MS Windows y Homebrew para Mac OS X/Mac OS. Cuando desee escribir instrucciones sobre cómo instalar su programa, puede terminar escribiendo casos para cada uno de esos sistemas. Parece demasiado, ¿no?

Afortunadamente, el último de los sistemas mencionados, Homebrew, puede ser el más portátil, gracias a Linuxbrew, un puerto de Homebrew para sistemas GNU / Linux. Lo curioso es que incluso funciona en WSL si quieres tener una experiencia de usuario similar en Microsoft Windows. Ten en cuenta que WSL no es oficialmente compatible.

Entonces, además de la portabilidad, ¿qué más puede ofrecer Homebrew? En primer lugar, no interfiere con los paquetes del sistema, por lo que todo lo que instala reside en una capa separada del sistema operativo. Además, no se necesitan permisos de raíz para instalar paquetes. Por lo tanto, puedes tener paquetes de sistema que sean estables y probados, pero al mismo tiempo verifica tus versiones más nuevas sin sacrificar la estabilidad del sistema.

Si querías probar los editores, mencioné anteriormente que todo lo que necesita hacer en un sistema con Homebrew o Linuxbrew es ejecutar este comando:

brew install emacs micro nano vim neovim

La Cosa Brillante

Lo que ya hemos discutido es indudablemente útil para el trabajo. Pero también hay aplicaciones que, aunque no son necesarias, aún brindan comodidad a la vida cotidiana. Puede que no los necesites, pero siempre vale la pena conocerlos.

Filtro interactivo

Buscar el historial de comandos puede ser tedioso. Mientras que bash y zsh tienen teclas Ctrl + R, solo muestra una sustitución a la vez. Además, debe ingresar el texto exacto que utilizó anteriormente. Como esta es una operación bastante común, una vez que comienzas a usar la línea de comando, parece un buen lugar para mejorar.

Filtros interactivos, como fzy, percol, peco o fzf lo ayudan a filtrar largas líneas de texto. Este puede ser el historial de comandos antes mencionado, todas las líneas de código en un directorio de proyectos, o una lista de nombres de archivos generados por find.. La idea general es presentarle primero todas las líneas disponibles y luego confiar en los algoritmos de búsqueda difusa para filtrar todo lo que no coincida.

Por ejemplo, al vincular Ctrl + R a fzf, se muestra una lista de los comandos más recientes, que puede navegar hacia arriba y hacia abajo con flechas, o puede escribir git para mostrar solo los comandos que tienen Git en algún lugar dentro. Personalmente, cuando trabajo con una shell que no tiene un filtro interactivo, de repente me siento un poco perdido. ¡Esta característica es realmente convincente!

Además, puede hacer que tu filtro interactivo esté disponible dentro de tu editor de texto programable. De esta forma, tendrás capacidades de búsqueda unificadas entre tu shell y tu editor.

Este articulo fue tomado de Toptal: https://goo.gl/8gfWFD

0 comentarios:

Publicar un comentario

Muchas gracias en cuanto terminemos de revisar el comentario se verá reflejado en el blog