Archivo: Ruby | Picando Código - Part 2
Semantic Logger - framework de logueo enriquecido para Ruby y Rails
Semantic Logger es un framework enriquecido de logueo que permite producir resultados legibles para humanos y para máquinas 🤖 Entre las características principales listan: Archivos de log con texto coloreado para que los humanos lo podamos leer. Archivos de log JSON con toda la información semántica para alimentar a las máquinas. Escribir a múltiples destinos a la misma vez Enviar los logs a un sistema centralizado de logueo, via JSON o adaptadores incluidos. Como implementa la interfaz estándar de logueo de Ruby, se puede reemplazar el log normal con Semantic Logging. Lo probé con el cliente oficial de Elasticsearch para […]
Mini pique: Ruby - Usar las notificaciones del sistema para notificarnos de tareas
Esto es más bien una idea que se me ocurrió trabajando, pero me pareció buena compartirla como mini pique. Por lo menos para no olvidarme en el futuro que esto es una posibilidad, al escribir un post al respecto me queda más grabado en la memoria. La gema libnotify nos permite interactuar con la biblioteca libnotify de nuestro sistema y generar notificaciones de manera muy sencilla. Este código: > require 'libnotify' > Libnotify.show( body: "Hola Mundo", summary: "Picando Código informa", icon_path: "/usr/share/icons/Humanity/apps/32/terminal.svg" )> require 'libnotify' > Libnotify.show( body: "Hola Mundo", summary: "Picando Código informa", icon_path: "/usr/share/icons/Humanity/apps/32/terminal.svg" ) Genera esta notificación: […]
Enlaces Ruby - Mayo 2021
Colección de los enlaces interesantes sobre Ruby que encontré durante el mes de mayo: Noticias sobre el lenguaje y programación Ruby general: 💎 Ya he compartido varios enlaces sobre Ractors en Ruby 3, pero otra característica nueva es la clase Fiber::SchedulerInterface. Nos permite escribir schedulers más avanzados basados en bucles de eventos para entrada y salida sin bloquear en Ruby (a lo frameworks como EventMachine). Recientemente resurgió un artículo muy bueno sobre el tema Ruby 3.0 and the new FiberScheduler interface. Mientras leía esto me colgué a probar cosas y tengo algunas ideas para implementar más cosas, tengo investigación por […]
rvm-prompt: muestra la versión actual de Ruby en el prompt de tu terminal
rvm-prompt es una herramienta que muestra la versión actual de Ruby. Podemos usarla para mostrar esta información en nuestro prompt en la terminal: Para agregarlo, en nuestro archivo de configuración ~/.bashrc, ~/.profile o lo que sea, tenemos que agregar el comando a la variable PS1. El ejemplo de la documentación: PS1="\$(~/.rvm/bin/rvm-prompt) $PS1" Para el resultado de la imagen con los colores, la rama de GitHub y demás, yo uso en mi ~/.bashrc: PS1='\[\033[01;32m\]\u\[\033[01;34;10m\] \[\033[01;34m\]\w\[\033[01;33m\] \e[31m`rvm-prompt`\e[0m\[\033[01;36m\]$(__git_ps1)\n\[\033[01;34m\]\$\[\033[00m\] ' Como podemos leer en la documentación, hay varios parámetros que le podemos pasar al comando para mostrar el intérprete (i), versión (v), nivel de […]
Enlaces Ruby - Abril 2021
Colección de los enlaces interesantes sobre Ruby que encontré durante el mes de abril: Noticias sobre el lenguaje y programación Ruby general: 💎 How to start learning Ruby? (timeless resources and techniques) no sólo provee recursos para empezar con Ruby. Lo hace por medio de ejemplos prácticos y dibujos en un estilo que me hizo acordar al libro de _why. A medida que el lenguaje sigue madurando, hay dos cosas que no podemos olvidar de Ruby: “Matz es bueno así que somos buenos”, y “¡Ruby necesita mantenerse raro!”. Por más contenido gráfico como éste 🙂 🔑 Nuevas actualizaciones de seguridad […]
Enlaces Ruby - Marzo 2021
Colección de los enlaces interesantes sobre Ruby que encontré durante el mes de marzo: Noticias sobre el lenguaje y programación Ruby general: 💎 Se publicó una nueva versión de JRuby 9.2.17.0. Esta agrega características de compatibilidad, rendimiento, mejoras a la biblioteca estándar y más. 💎 El 31 de marzo terminó el soporte para Ruby 2.5, así que hay que actualizarse. Podemos seguir usando 2.6 hasta el 31 de marzo de 2022, así como 2.7 y 3.0. 💎 En RSpec fundamentals: a basic glossary, podemos encontrar una guía práctica de referencia para métodos de RSpec. También puede servir como introducción rápida […]
Nuevo comando ls para IRB en Ruby 3
Recientemente se agregó el comando ls al código fuente de Ruby. El comando ls está inspirado en la misma funcionalidad al estilo Pry, una alternativa a IRB con algunas capacidades extra. El comando nos permite inspeccionar constantes, métodos y variables de self o de un objeto escribiendo muy poco. ¡Es bastante práctico! Para probarlo tenemos que usar la versión de desarrollo de Ruby, usando RVM tenemos que instalar ruby-head. Un ejemplo usando el comando en la gema ci_uy: head :001 > ls CiUY CiUY.methods: get_random_ci get_validation_digit random transform validate validate_ci validation_digit => nilhead :001 > ls CiUY CiUY.methods: get_random_ci get_validation_digit […]
Enlaces sobre Ruby Febrero 2021
A raíz de la saga de posts 7 días en el Picandoverso, he ido recolectando y publicando varios enlaces sobre Ruby y cosas relacionadas al lenguaje de programación diseñado para la felicidad de quienes lo programan. Acá están compilados los enlaces Ruby de esos posts y alguna cosa más 🙌🏻 RubyGalaxy es un meetup online para entusiastas de Ruby de todo el mundo. Estuve en el meetup del jueves pasado y estuvo muy bueno, recomiendo unirse y seguirlos en Twitch. También pueden seguir @TheRubyGalaxy en Twitter. AppSignal publicó un artículo sobre tipado estático en Ruby 3. Explica las diferencias entre […]
ci_ui - interfaz gráfica de usuario para ci_uy en Ruby
La gema Ruby ci_uy, el validador de números de Cédulas de Identidad Uruguaya, me ha servido mucho como ejercicio para practicar y aprender cosas nuevas en programación. Ya usé el algoritmo para programar y empaquetar código en Rust, Crystal y Go. Es lo suficientemente simple como para escribirlo en un lenguaje que recién estoy aprendiendo, pero también termina teniendo una utilidad final. Y ya tengo los tests hechos, es sólo cuestión de portarlos a otros lenguajes 🤪 Algo que estaba pendiente y tenía ganas de desarrollar desde hace mucho tiempo era una interfaz gráfica de escritorio (ya existe una versión […]
Mini pique - Rake
Mini pique - Ruby Enumerable#tally
¡Ruby es genial! 😁 Esta función está disponible a partir de Ruby 2.7.0: Enumerable#tally - Hace la cuenta de una colección, e.g., cuenta las ocurrencias de cada elemento. Devuelve un hash con los elementos de la colección como llaves y la cuenta correspondiente como valores: > coleccion = ['verde', 'rojo', 'azul', 'verde', 'violeta', 'amarillo', 'verde', 'rojo', 'verde'] => ["verde", "rojo", "azul", "verde", "violeta", "amarillo", "verde", "rojo", "verde"] > coleccion.tally => {"verde"=>4, "rojo"=>2, "azul"=>1, "violeta"=>1, "amarillo"=>1}> coleccion = ['verde', 'rojo', 'azul', 'verde', 'violeta', 'amarillo', 'verde', 'rojo', 'verde'] => ["verde", "rojo", "azul", "verde", "violeta", "amarillo", "verde", "rojo", "verde"] > coleccion.tally => {"verde"=>4, […]
Elastic Enterprise Search - cliente oficial en Ruby
Uno de los proyectos súper interesantes en los que estuve trabajando durante mi primer año en Elastic es el cliente oficial para Elastic Enterprise Search. Fue mi primer proyecto de cero, y una experiencia excelente. Trabajé en conjunto con el equipo de Enterprise Search, aprendí un montón de esos servicios y la recepción fue súper positiva. Gracias a esto también empecé a dar mis primeras charlas en inglés. Participé de una charla en ElasticON Global junto a dos compañeros de equipo. Hablamos sobre el trabajo que hemos venido haciendo en el equipo, y en mi parte hablé de Enterprise Search […]
Mini pique - Ruby 3: Hash#except
Algo nuevo que se viene en Ruby 3, Hash#except, un método que nos devuelve un hash nuevo con todas las llaves menos las que pasamos como parámetro: head :001 > data = {name: "Fernando", age: 35, height: 175} => {:name=>"Fernando", :age=>35, :height=>175} head :002 > data.except(:age) => {:name=>"Fernando", :height=>175}head :001 > data = {name: "Fernando", age: 35, height: 175} => {:name=>"Fernando", :age=>35, :height=>175} head :002 > data.except(:age) => {:name=>"Fernando", :height=>175} Fuente.
Se acerca RuboCop 1.0
RuboCop es la herramienta de facto para analizar y formatear código en Ruby. Con miras de publicar la versión 1.0, Bozhidar Batsov -autor de Rubocop-, realizó una encuesta a la comunidad Ruby. RuboCop viene con un montón de valores por defecto, y la idea de la encuesta era medir lo que se viene usando para entender qué valores por defecto valía la pena cambiar basados en su uso y la frustración o satisfacción de la comunidad. En los últimos años se había evitado cambiar valores por defecto en un esfuerzo por contener la fricción durante actualizaciones de RuboCop. Pero con […]
Nuevas versiones de Ruby y fin de soporte para Ruby 2.4
Ayer 31 de marzo se publicaron nuevas versiones con parches de seguridad para Ruby 2.4, 2.5, 2.6 y 2.7. Las versiones de Ruby 2.5.8, 2.6.6 y 2.7.1 cuentan con parches de seguridad para dos vulnerabilidades: CVE-2020-16255: Unsafe Object Creation Vulnerability in JSON (Additional fix) Es un arreglo adicional a una vulnerabilidad de creación no segura de objetos en JSON. La gema json incluida con Ruby puede ser forzada a crear objetos arbitrarios en un sistema. El mismo problema se había corregido en CVE-2013-0269, pero estaba incompleto. Ese arreglo corregía JSON.parse(data_del_usuario), pero no otros tipos de procesamiento de JSON como JSON(data_del_usuario) […]
Comentarios recientes