Entradas

Mostrando entradas de mayo, 2018

Basic clean of Linux boot-up

Un comando no tan conocido pero bastante útil que viene incorporado al denostado systemd, es systemd-analyze. Este comando permite conocer detalles respecto al tiempo que tomó el último boot de la PC. Y si bien tiene usos, digamos, avanzados, con muy poco uno puede hacer algunas mejoras. Por ejemplo, el comando al ser ejecutado sin parámetros devuelve el tiempo que tardó el booteo de kernelandia y userlandia. En algo como: Startup finished in 3.481s (kernel) + 2min 43.545s (userspace) = 2min 47.027s Puede que esos números no significan nada para ustedes ahora, pero al ejecutarlo en varias máquinas de prestaciones similares pueden comenzar a entender su situación particular. Para individualizar el tiempo de boot por unidades y ordenado de mayor a menor pueden usar: systemd-analyze blame Cuya salida tiene el formato: [espacio] segundos [espacio] servicio . Es más o menos común que uno de los servicios que más tiempo consuman sea apt-daily.service . Pueden leer al respecto de la uti

Comunicación efectiva con los niveles de ejecución, administración y operación

Esta entrada es un resumen libre de un video del escritor y desarrollador de Software Jono Bacon. La cuestión acerca de cómo lograr una comunicación efectiva con los distintos niveles jerárquicos de una organización suele ser un problema que aparece más temprano que tarde en nuestras carreras. Para comenzar a analizar esta situación, podríamos decir que existen básicamente 3 capas en una organización, no necesariamente en términos de importancia sino respecto al trabajo que realizan: La capa más alta es la ejecutiva, compuesta por CEOs, fundadores, vicepresidentes, etc. Aquellas personas que, se sabe, están efectivamente a cargo de la empresa.  La capa del medio suele estar integrada por los que se conocen como "mandos medios", los jefes de cada departamento en los que la empresa se divide para gestionar mejor al personal. Y, por último la capa inferior, que está compuesta por el personal de operaciones, quienés están haciendo los productos, vendiéndolos, etc. Se nec

Refactorizando JS (presumiblemente) productivo

Uno suele cansarse de que gran parte del material relativo a Software que uno consiga en Internet esté dirigido a newbies. Sin embargo, hasta que los newbies no apliquemos el sabio principio RTFM , se hace necesario repetir lo mismo una y otra vez. Digo esto con conocimiento de causa: soy un grandísimo newbie. La diferencia es que nunca desprecio un consejo y siempre escucho a los que saben más que yo. Un par de aclaraciones antes de comenzar: El "presumiblemente productivo" del título pone en duda la "productividad" del código, no que esté o no disponible públicamente ya que de hecho lo está. Hay muchas más cuestiones que corregir del código, relacionadas con el estilo o uso de algunas mejoras traídas por las nuevas versiones de JS, pero todas estas cuestiones saldrían a la luz con el uso de un linter, así que la idea de estas entradas es que se enfoquen en cuestiones más conceptuales o relacionadas con el diseño. Comencemos: function msjInfo( bool

Mejoras de la calidad del código escrito en Python

La automatización de la comprobación de la calidad del código es importante porque: Una máquina es más rápida y más precisa que un humano. Es fácil agregar nuevos checks. El código debe pasar las comprobaciones antes de ser mergeado. Mejora el ciclo de revisión acelerándolo y simplificándolo  Cualquier tarea de automatización requiere, por definición, uso de herramientas. En este caso hablaremos de flake8 , pylint y coverage flake8 Es básicamente un wrapper de pycodestyle , pyflakes y mccabe . Instalación pip install flake8 Uso flake8 my_module.py o flake8 my_package.py/ Componentes pycodestyle: verifica compatibilidad con pep8 y usos no idiomáticos. Por ej: Múltiples espacios antes de un operador  Ningún espacio alrededor de un operador Comparaciones con valores booleanos del tipo "if a == True"  pyflakes: no mira el estilo pero busca bugs y tiene una baja probabilidad de falsos positivos. Por ej: Paquetes importados y no usados. Variables

Comenzando con AWK

Como decíamos en una entrada anterior , AWK es un lenguaje de programación expresivo y que resulta conveniente para ser usado en una amplia variedad de tareas de computación y manipulación de datos. Comenzando Prácticamente cualquier SO unix-like moderno viene con al menos una de las implementaciones de AWK instalada (awk, gawk , mawk , nawk , mks, awka , etc), por lo cual, si usamos uno de estos SOs no necesitamos instalar nada. Supongamos que tenemos un archivo llamado emp.data que contiene, un registro por línea, los sgtes. campos: Nombre del empleado Honorarios por hora en pesos Número de horas trabajadas Tendríamos una entrada de la sgte. forma: Beto         100    0 Daniel        75    0 Milagro    100    10 Marcos     125    20 Marías      130    22 Susana       80    18 Ahora, se quiere imprimir el nombre y el pago para todos los empleados que trabajaron más de 0 horas. Este es el tipo de trabajos para el que fue pensado awk, así que es fácil. Ponien

El lenguaje de programación AWK

AWK es un lenguaje de programación que hace posible, con programas de una o dos líneas, la realización de tareas mecánicas de manipulación de datos cambiar de formatos, comprobar de validez de los archivos, encontrar items con ciertas propiedades, imprimir reportes, etc. AWK es un lenguaje muy versátil, se han usado programas AWK para: Bases de datos Diseño de circuitos Análisis numérico Compiladores Administración de sistemas AWK maneja texto con la facilidad que la mayoría de los lenguajes de programación manejan números. Un programa AWK es una secuencia de patrones y acciones que indican que patrón buscar en los datos de entrada y qué hacer cuando el patrón se encuentra. Un patrón puede seleccionar líneas por combinaciones de regex y operaciones de comparación de strings, números, campos, variables y elementos de arrays. Las acciones pueden realizar procesamiento arbitrario sobre las líneas seleccionadas. El lenguaje con el cuál se indican las acciones se parece a C,

PostgreSQL(1)

Esta es la primera entrada de una serie que es una especie de traducción/apunte/resumen que estoy haciendo del libro Seven Databases in Seven Weeks . RDBMS (Relational DataBase Management System) Cuando hablamos de sistemas de gestión de bases de datos relacionales hablamos de sistemas basados en teoría de conjuntos, implementados mediante tablas de dos dimensiones con filas de datos y columnas de un determinado tipo. A pesar del creciente interés en paradigmas y motores de bases de datos nuevos, el estilo relacional sigue siendo el más popular y probablemente lo sea durante algún tiempo. La prevalencia de las bases de datos relacionales puede deberse a: Sus toolkits: triggers, procedimientos almacenados, índices. Uso de transacciones seguras: mediante el cumplimiento con la regla ACID . Paradigma: muchos programadores hablan y piensan relacionalmente. Flexibilidad en las consultas. PostgreSQL PostgreSQL es un sistema open-source de gestión de bases de datos relacionales

Cosas que tendrá Charly García cuando comience a quedarse solo

Los ojos muy lejos Un cigarrillo en la boca El pecho dentro de un hueco Una gata medio loca Un escenario vacío Un libro muerto de pena Un dibujo destruido La caridad ajena Un televisor inútil La radio a todo volumen Una prisión que no es suya Una vejez sin temores Una vida reposada Ventanas muy agitadas Una cama muy inmóvil Un montón de diarios apilados Una flor cuidando su pasado Un rumor de voces que le gritan Un millón de voces que le aplauden Y el fantasma suyo, sobre todo   Fuente