Sistemas & Desarrollo
1 meneos
14 clics

Incluir archivos en la configuración de Git [ENG]

Imagina que trabajas en varias máquinas con Git y en cada una tienes que usar una configuración diferente, por ejemplo en el correo electrónico. Para tener esta configuración variable se puede hacer de varias formas, como poniendo la propia configuración dentro de un repositorio, pero quizás la mejor forma de hacerlo sea usando la sección [include] del propio archivo de configuración de Git de la siguiente forma.
1 meneos
5 clics

BFG Repo Cleaner, una alternativa a git-filter-branch [ENG]

BFG Repo Cleaner es una alternativa a git-filter-branch más simple y rápida para eliminar grandes archivos o borrar contraseñas o cualquier dato privado en toda la historia de un repositorio de Git. El comando git-filter-branches es muy potente y puede hacer cosas que esta utilidad no puede, pero BFG es mucho mejor para estas tareas específicas porque puede ser hasta 720 veces más rápido, además de tener una interfaz de usuario más sencilla.
1 meneos
8 clics

Nuevo enlazador de ELF en el proyecto LLVM [ENG]

Hemos estado trabajando duro durante varios meses para reescribir el soporte de ELF en lld, el enlazador (linker) LLVM. Estamos felices de anunciar que se ha alcanzado un hito importante: ahora es capaz de iniciar LLVM, Clang y a sí mismo y pasar todas las pruebas en x86-64 en Linux y en FreeBSD con la velocidad esperada de un proyecto LLVM.
1 meneos
20 clics

Introducción a ‘elfpatch’, parcheo seguro de binarios ELF [ENG]

Hace poco tuve un problema con un programa que funcionaba mal. Como desarrollador familiarizado con código abierto, mi estrategia normal en este caso sería la de encontrar el código fuente y depurar para luego parchear. Aunque en este caso sí disponía del código fuente, no lo tenía a mano además de que me habría enfrentado a mayores inconvenientes al parchearlo, volverlo a compilar y volverlo a introducir en el entorno de ejecución.
3 meneos
11 clics

Introducción a sd-event, el API de eventos de libsystemd [ENG]

Cuando empezamos a trabajar en systemd, lo construimos alrededor de un bucle de eventos escrito a mano usando epoll en Linux. Pero cuanto más crecía nuestro proyecto, más nos dimos cuenta de las limitaciones del uso de epoll. Algunas de estas limitaciones son que usaba demasiados descriptores de fichero, que el gestionar el orden de los eventos era tedioso o que para cada programa que usaba systemd añadíamos el mismo código duplicándolo. Así que, a partir de ahí para solucionar estos problemas comenzamos a trabajar en sd-bus.
5 meneos
20 clics

OOSMOS es liberada como código abierto [ENG]

OOSMOS (Object Oriented State Machine Operating System, por sus siglas en inglés) es una implementación de concurrencia sin hilos en C++. Su implementación en un sólo archivo la hace portable y fácilmente integrable en cualquier sistema, como Arduino o, a más alto nivel, Linux o Windows. Ahora, OOSMOS se ha liberado bajo licencia libre —GPLv2— además de la antigua licencia comercial quedando con un sistema dual de licencias.
6 meneos
91 clics

Cómo compilar el kernel de Linux, parte 1: teoría… mucha teoría [ENG]

Hoy vamos a empezar una serie de entradas acerca de cómo se compila el kernel de Linux para entender mejor cómo funciona un ordenador. Y empezaremos con teoría… con mucha teoría. En esta entrada veremos, para empezar, las tareas básicas de un kernel. Comencemos…
5 meneos
72 clics

pigshell: aplicación que muestra los recursos de la web como archivos en una consola de comandos [ENG]

pigshell es una aplicación web escrita en Javascript que se ejecuta en el navegador y que muestra los recursos de la web como archivos en una consola. Esto incluye tanto páginas web públicas como páginas web privadas de Google Drive, Dropbox, Facebook e, incluso, el escritorio. Junto con esto, pigshell provee una interfaz de línea de comandos donde se pueden encadenar comandos a través de tuberías (pipelines) para transformar y mostrar la información. Además, este software se distribuye bajo licencia GPLv3.
2 meneos
17 clics

Proposición de diseño (casi) asíncrono de llamadas al sistema y comunicación entre procesos [ENG]

En esta entrada se muestra cómo se puede minimizar la sobrecarga de cambios de contexto en el kernel de un sistema operativo a través del mayor uso de llamadas al sistema asíncronas y primitivas de comunicación entre procesos.
4 meneos
63 clics

Git: una pequeña historia [ENG]  

Una pequeña historia acerca de Git, el sistema de control de versiones creado originalmente por Linus Torvalds. [Usar las flechas del teclado para avanzar y/o retroceder]
3 meneos
51 clics

Cómo generar un hash de contraseña de /etc/passwd usando la línea de comandos en Linux [ENG]

Si se necesita generar un hash de contraseña de /etc/shadow para un usuario de Linux (por ejemplo para utilizarlo en un manifiesto de Puppet), se puede hacer fácilmente desde la línea de comandos.
2 meneos
21 clics

Repositorios monolíticos grandes (“monorepos”) en Git [ENG]

Muchos usuarios han abrazado Git por su flexibilidad como un sistema de control de versiones distribuido, sobre todo gracias a la gestión de ramas. Si bien esta flexibilidad funciona para la mayoría de los casos de uso, algunos no se manejan con tanta elegancia. Uno de estos casos de uso es el uso de Git con repositorios monolíticas grandes o monorepos. Este artículo contesta varias cuestiones relacionadas con monorepos cuando se utiliza Git y ofrece consejos para mitigar los problemas relacionados.
3 meneos
96 clics

gping: un ping, pero gráfico  

gping es una pequeña herramienta escrita en Python que nos dará un visión gráfica del tiempo de respuesta recibido mediante ping. Muy útil para observar las variaciones de retardo o jitter. Funciona con Python 2.7 o 3.4 y lo podemos instalar de forma muy sencilla con: pip3 install pinggraph.
3 meneos
20 clics

Bjarne Stroustrup habla del 30º aniversario de Cfront, el primer compilador de C++ [ENG]  

Hace exactamente 30 años, Cfront 1.0 fue lanzado junto con la primera edición del libro The C++ Programming Language, escrito por el propio Bjarne Stroustrup. Hoy nos cuenta en una entrevista cómo fueron aquellos días.
2 meneos
18 clics

Simple bypass en la cola de recepción del kernel en Netmap para alta velocidad de recepción de paquetes de red [ENG]

Hemos discutido las limitaciones en la pila de red del kernel de Linux para lograr mayor ancho de banda de red, pero ninguna de las soluciones de código abierto han han cubierto nuestras necesidades. Para mejorar la situación, hemos decidido contribuir al proyecto Netmap. En esta entrada describiremos nuestras propuestas.
2 meneos
9 clics

Pocket Square

Pocket Square se anuncia como un servicio gratuito para promocionar desarrolladores, donde éstos puedan mostrar su portfolio, muestras de código, los lenguajes que conocen, etc.
3 meneos
58 clics

Por qué Intel añadió particionamiento de caché en chips Broadwell y cómo mejoró el rendimiento entre 1,3 y 3 veces [ENG]

La utilización de servidores típica es de entre 10 y 50 %. Google ha demostrado que se puede llegar al 90 % de utilización sin impactar en la latencia. Xkcd estima que Google tiene unos 2 millones de máquinas. Si se estima un coste total amortizado de dos mil dólares por máquina al año, eso hace cuatro mil millones de dólares por año. Con números así, incluso pequeñas mejoras tienen un gran impacto; pero la mejora de Intel producida por el particionamiento de caché no es una pequeña mejora.
2 meneos
41 clics

Cómo deshacer (casi) cualquier cosa en Git [ENG]

Una de las características más útiles de cualquier sistema de control de versiones es la posibilidad de “deshacer” los errores. En Git, “deshacer” puede significar muchas cosas ligeramente diferentes. Cuando haces un nuevo commit, Git almacena una instantánea del repositorio en ese momento específico en el tiempo; más adelante, se puede usar Git para volver a una versión anterior del proyecto. En esta entrada se verán varios escenarios con sus ejemplos donde es necesario deshacer cosas en un repositorio de Git.
2 meneos
32 clics

Programando en D: tutorial y referencia [ENG]

D es un lenguaje de programación multiparadigma que combina una amplia gama de potentes conceptos de programación de los más bajos a los más altos niveles. Hace hincapié en la seguridad de memoria, la corrección del programa y el pragmatismo. El objetivo principal de este libro es enseñar D a los lectores que son nuevos en el desarrollo de software. A pesar de tener experiencia en otros lenguajes de programación es ciertamente útil, este libro comienza desde lo más básico.
3 meneos
46 clics

Trabajando con archivos en el lenguaje de programación D [ENG]

Interactuar con archivos es una tarea fundamental de cualquier lenguaje de programación y si bien estas tareas son comunes, no es del todo evidente cómo lograr ciertas acciones sobre archivos mediante de D. Esperemos que este artículo cambie ese hecho y muestre la sencillez y el poder del lenguaje D cuando se trabaja con archivos.
1 meneos
44 clics

Infografía: contenedores LXD en Ubuntu [ENG]

LXD (pronunciado "lex-dee") es un hipervisor de contenedores de Ubuntu. Los contenedores LXD actúan como máquinas virtuales, pero tienen la ligereza y la escalabilidad de los contenedores de procesos. LXD se puede utilizar por sí solo para implementar aplicaciones tradicionales con alta carga de trabajo o puede utilizar contenedores Docker dentro de contenedores LXD para conseguir lo mejor de ambas tecnologías.
1 meneos
6 clics

Contando objetos [ENG]

El equipo de sistemas en GitHub trabaja para resolver errores complejos y cuellos de botella de rendimiento en los niveles más bajos de nuestra infraestructura. En los últimos dos años hemos llevado a cabo un importante proyecto para mejorar el rendimiento de las operaciones de red de Git (como clones o descargas) para los repositorios que alberga. Hace dos años, el clonado un gran repositorio desde cualquier servidor Git hacía que tuvieras que esperar a que empezase la descarga mientras el servidor indicaba “contando objetos”. Hoy en día […].
2 meneos
30 clics

Lanzado GitLab 8.0 con nueva imagen y con un sistema de integración continua integrado [ENG]  

Hace 15 meses lanzamos GitLab 7.0. Desde entonces, para GitLab 8.0 hemos mejorado el rendimiento, hemos hecho que funcione con LDAP en la versión empresarial y hemos hecho posible que se pueda trabajar con archivos grandes en Git. Además de eso, también hemos mejorado la interfaz gráfica y hemos integrado GitLab CI.
2 meneos
46 clics

Guía de estilo de desarrollo en C++ [ENG]

Las directrices básicas de desarrollo de C++ son un esfuerzo de colaboración dirigido por Bjarne Stroustrup, al igual que el lenguaje C++ en sí mismo. Ello es el resultado de muchos años, personas y discusiones sobre el diseño a través de una serie de organizaciones. Su diseño fomenta su aplicación general así como su amplia adopción pero también puede ser copiado y modificado para satisfacer las necesidades de cada organización de forma libre.
3 meneos
49 clics

Bienvenido a Interim OS [ENG]

Interim OS es un radicalmente nuevo sistema operativo enfocado en el minimalismo. Toma conceptos de máquinas Lisp (kernel basado en el lenguaje) y de Plan 9 (todo es un sistema de archivos). Se deshace de los bucles REPL que hay en Lisp y ofrece al programador/usuario todos los recursos del sistema como sistemas de archivos.
1 meneos
50 clics

Empezando con Polymer 1.0  

Tras explicar en el anterior artículo qué es y los conceptos básicos, vamos a pasar a hacer una explicación práctica sobre Polymer 1.0. Para realizar este pequeño ejemplo, nos ayudaremos de Bower. Esta herramienta nos permitirá instalar y gestionar, de forma sencilla, las dependencias de un proyecto. No os preocupéis, si no lo conocéis, lo explicamos en mayor profundidad aquí.
2 meneos
37 clics

PSSH, ejecuta comandos en múltiples servidores remotos de forma simultánea

OpenSSH es una de las herramientas más utilizadas por los administradores de sistemas ya que nos permite interactuar con cualquier equipo en forma remota pero como si estuviésemos sentados allí mismo e incluso tenemos, mediante X11 Forwarding, la posibilidad de visualizar cualquier interfaz gráfica. Pero hay una limitación lógica, y es que necesitamos abrir una conexión por cada equipo remoto al cual accedemos, para lo cual necesitamos otras tantas ventanas de terminal.
3 meneos
29 clics

Introducción a SELinux [ENG]

SELinux es un mecanismo de control de acceso implementado en el núcleo que trabaja junto a los controles de acceso normales (a archivos) en Linux. Pero a diferencia de este control de acceso a archivos, SELinux es un sistema de control de acceso obligatorio, lo que garantiza que los usuarios no pueden evitar las reglas establecidas por el administrador. Pero antes de entrar en los detalles de SELinux veamos cómo es el control de acceso a archivos en un sistema Linux. Después, continuaremos con las características específicas de SELinux.
2 meneos
24 clics

Configuración de sudo mediante OpenLDAP y sssd

En el caso de tener la autenticación mediante un OpenLDAP, no tiene sentido tener que configurar los sudoers en local cuando los usuarios están en OpenLDAP. Vamos a ver cómo configurar sssd para almacenar la configuración de sudo en un OpenLDAP.
3 meneos
27 clics

Autenticación mediante claves SSH almacenadas en un OpenLDAP

Anteriormente vimos cómo configurar sssd para realizar la autenticación contra un OpenLDAP, hoy vamos a ver cómo configurar OpenSSH para permitir entrar en el servidor mediante las claves públicas almacenadas en un servidor OpenLDAP. En el serviro OpenLDAP deberemos cargar el schema openssh-openldap para poder cargar los tipos necesarios.
2 meneos
43 clics

Utilizando JSON Schema

Los conceptos en programación tienden a repetirse por mucho que cambiemos el lenguaje. Hoy se utiliza JSON como formato de intercambio de datos y XML parece más relegado a una segunda posición. Una de las funcionalidades que más se demandan a la hora de intercambiar datos es validar las estructuras de estos. XML dispone de sus XML Schemas y JSON dispone de los JSON Schemas que son relativamente modernos. Vamos a ver un ejemplo de estos.
4 meneos
32 clics

Buenas prácticas en el versionado de bases de datos [ENG]

Hacer un seguimiento de los cambios en una base de datos no es una tarea sencilla. Los esquemas de las bases de datos tienden a ser incompatibles entre diferentes entornos o puede que se pierda alguna pieza importante de los datos al hacer el cambio. Este tipo de eventos suele ser bastante irritante, sobre todo cuando es en producción. Así que, aquí tenéis una lista de buenas prácticas a la hora de tratar con los cambios en bases de datos.
4 meneos
102 clics

El menú de “hamburguesa” no funciona [ENG]  

Es una solución bonita y elegante que hace todo mal; y es hora de seguir adelante. Se llama de “hamburguesa” porque se parece a carne entre dos panes. La idea detrás del menú de hamburguesa es que se puede utilizar para ocultar la navegación del sitio en pantallas más pequeñas mostrándose sólo cuando el usuario hace clic en el icono en vez de mostrarse siempre. Pero en realidad este menú esconde las opciones de navegación por lo que este tiene que buscarla y accionarla de forma activa, con lo que se pueden producir problemas de usabilidad.
1 meneos
37 clics

Falsedades que los programadores creen acerca del género [ENG]

En esta lista se muestran algunas suposiciones erróneas sobre el género que se suelen hacer al crear aplicaciones de software que mantienen datos personales. Entre estas suposiciones erróneas se encuentran: sólo hay dos géneros; el género es solamente determinado por la biología; el género nunca cambia; etc.
1 meneos
44 clics

Falsedades que los programadores creen acerca del tiempo [ENG]

En repetidas ocasiones he estado confundido al descubrir cuántos errores, tanto los tests como en el código de aplicación, se derivan de malentendidos o ideas erróneas sobre el tiempo. Con esto me refiero tanto a la interesante forma en la que los ordenadores manejan el tiempo como a las trampas fundamentales inherentes a la forma en que los seres humanos hemos construido nuestros calendarios.
1 meneos
47 clics

Falsedades que los programadores creen acerca de los nombres de personas [ENG]

Esta lista enumera las asunciones que probablemente hacen las aplicaciones de software acerca de los nombres. Todas estas suposiciones sobre los nombres de personas son incorrectas, así que habría que evitarlas a la hora de escribir aplicaciones. Por ejemplo: la gente tiene sólo un nombre completo; los nombres siempre caben en un número limitado de caracteres; los nombres de la gente no cambian nunca; todos los nombres de personas están escritos en ASCII; etc.
1 meneos
27 clics

Cloud9 Un IDE en la nube  

Poco a poco los servicios de la nube avanzan. Empezamos con Gmail, pasamos por Dropbox y nadie sabe dónde acabaremos. Hoy por hoy existen plataformas en la nube que que nos permiten abordar las tareas de desarrollo sin tener que instalar nada en el equipo. Cloud9 es un IDE que nos permite trabajar de forma completa en la nube.
1 meneos
49 clics

Conceptos erróneos acerca de Docker [ENG]

Docker ha golpeado la escena de sistemas con bombos y platillos. Es un avance muy emocionante para dichos sistemas, pero hay algunos malentendidos clave en torno a esta tecnología.
1 meneos
22 clics

¿Qué es Bazel (aka Blaze)?

¿Es un pájaro? ¿Es un avión? ¡No! Es una herramienta de construcción. Concretamente, es la versión abierta del sistema que usan internamente en Google, que se llama Blaze, y que forma parte de un triángulo de tecnologías que dan soporte al desarrollo de todas sus aplicaciones internas —los proyectos de Google que se hacen en abierto, como Chromium, se gestionan de otra forma—.
2 meneos
37 clics

Git desde dentro hacia fuera [ENG]

Este ensayo explica cómo funciona Git y se enfoca en la infraestructura en forma de grafo con la que Git trabaja y la manera en que las propiedades del mismo dictan su comportamiento.
1 meneos
13 clics

Desde AF_UNIX hasta kdbus [ENG]

Comparación entre dos métodos de comunicación entre procesos en Linux: el primero y más antiguo AF_UNIX y el segundo y más moderno (todavía no incluido en el kernel) kdbus.
2 meneos
54 clics

Seguir GitFlow puede ser perjudicial [Opinión|ENG]

GitFlow es probablemente el modelo más popular de trabajo con Git hoy en día. Parece estar en todas partes. Sin duda, para mí personalmente está en todas partes —prácticamente todos los proyectos de mi trabajo actual lo usan y a menudo son los propios clientes los que lo eligen—. Recuerdo leer el artículo original GitFlow tiempo atrás cuando salió por primera vez y no quedé para nada impresionado. Pensé que era una solución extraña y sobredimensionada a un problema inexistente.
1 meneos
16 clics

Introducción a Verlet.js, motor de física que implementa ‘verlet integration’ [ENG]  

Verlet.js es un motor de física escrito en Javascript que se puede usar en juegos para el navegador o para simulaciones científicas o de ingeniería. Este motor está basado en una técnica iterativa llamada “verlet integration” que se usa para calcular el comportamiento de dos objetos en mundos de dos dimensiones.
1 meneos
1 clics

Las interfaces para reserva de memoria de D, ‘std.allocator’, están listas para revisión [ENG]

Después de mucho tiempo de desarrollo debido a las numerosas críticas en cuanto al recolector de basura del lenguaje de programación D, las interfaces interfaces personalizables de reserva/liberación de memoria para dicho lenguaje de programación está listas para ser revisadas por la comunidad.
1 meneos
8 clics

SSF: Secure Socket Funneling [ENG]

Secure Socket Funneling (SSF) es una herramienta de red y un kit de herramientas que ofrece formas sencillas y eficientes para reenviar datos de varias tomas (TCP o UDP) a través de un único enlace seguro TLS a un equipo remoto. El objetivo principal de SSF es proporcionar a usuarios y desarrolladores una forma fácil de multiplexar y demultiplexar varios flujos de datos de red.
2 meneos
31 clics

PicoC: un intérprete de C mínimo para scripting [ENG]

PicoC es un pequeño intérprete de C para scripting. Fue escrito originalmente como un lenguaje de script para el sistema de vuelo de un UAV, pero también es adecuado para aplicaciones robóticas. El código fuente principal es de alrededor de 3500 líneas. Aunque la intención no es la de ser una implementación completa de ISO C, tiene todo lo esencial. Además, cuando se compila sólo ocupa unos pocos kilobytes del espacio, lo que significa que puede funcionar muy bien en dispositivos embebidos.
2 meneos
17 clics

Zapcc: una modificación de Clang mucho más rápida [ENG]

Zapcc es una gran modificación de Clang (alrededor de 200 KB) con código adicional fuera de la base de LLVM. Zapcc opera siguiendo el modelo cliente-servidor. Mientras que el servidor está en memoria esperando por comandos, es el cliente el que se los envía en lugar de ejecutarlos él mismo. Además, Zapcc distingue entre archivos del sistema, donde la compilación es guardada en memoria, y archivos de usuario, donde su compilación es realizada en cada momento.
3 meneos
37 clics

Introducción a la criptografía de curva elíptica [ENG]

Aquellos de vosotros que sabéis qué es la criptografía de clave pública es posible que ya hayáis oído hablar de ECC, ECDH o ECDSA. El primero es un acrónimo de criptografía de curva elíptica; los otros son los nombres de los algoritmos basados en él. Hoy en día, podemos encontrar criptosistemas de curva elíptica en TLS, PGP y SSH, que son sólo tres de las principales tecnologías en las que se basa la web moderna y otras tecnologías. Por no hablar de Bitcoin y otras criptomonedas. Antes de que ECC fuese popular, casi todos los algoritmos […].
4 meneos
11 clics

Trabajando con fechas en Git [ENG]

Cuando se trabaja con Git, lo más común a la hora de trabajar con commits es usar su hash SHA-1. El problema es que no tendemos a trabajar con hashes sino con fechas, por ejemplo, queremos saber qué cambios se han hecho ayer, la semana pasada, o entre el lunes y el martes. Por suerte, Git es capaz de entender este tipo de expresiones y de mostrar lo que pedimos.
1 meneos
19 clics

Principios y algoritmos de concurrencia: Canales

Este artículo es el primer manuscrito del capítulo “Canales” del libro que estoy escribiendo, “Principios y algoritmos de concurrencia”. Todo el código de los ejemplos están en Github.

menéame